PHPackages                             gplanchat/durable-psalm-plugin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. gplanchat/durable-psalm-plugin

ActivePsalm-plugin

gplanchat/durable-psalm-plugin
==============================

Psalm plugin for gplanchat/durable (ActivityStub activity calls → Awaitable).

00PHP

Since Mar 29Pushed 1mo agoCompare

[ Source](https://github.com/gplanchat/durable-psalm-plugin)[ Packagist](https://packagist.org/packages/gplanchat/durable-psalm-plugin)[ RSS](/packages/gplanchat-durable-psalm-plugin/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

gplanchat/durable-psalm-plugin
==============================

[](#gplanchatdurable-psalm-plugin)

Optional **Psalm** package for projects using [**gplanchat/durable**](../durable/).

Current scope
-------------

[](#current-scope)

The plugin entry point (**`Gplanchat\Durable\Psalm\Plugin`**) is intentionally **empty**: Psalm’s provider APIs split **method existence**, **parameters**, and **return types** across separate events, and **`ActivityStub`** needs all three with access to the **bound `TActivity`** generic. A partial provider (e.g. existence only) **crashes** analysis when Psalm then asks for params.

**For `ActivityStub` typing, use [`gplanchat/durable-phpstan`](../durable-phpstan/)** (see **ADR012** in the monorepo). That extension uses PHPStan’s **`MethodsClassReflectionExtension`** with **`getPossiblyIncompleteActiveTemplateTypeMap()`**, which matches our runtime model.

Future work may register a coordinated set of Psalm hooks once we can thread template arguments consistently through params + return providers.

Installation
------------

[](#installation)

```
composer require --dev gplanchat/durable-psalm-plugin
```

In **`psalm.xml`**:

```

```

(Syntax may vary slightly by Psalm version — see Psalm’s “Plugins” documentation.)

Development (monorepo)
----------------------

[](#development-monorepo)

```
cd src/DurablePsalmPlugin
composer install
./vendor/bin/psalm -c psalm.xml.dist
```

Publishing
----------

[](#publishing)

The Packagist repository matches the contents of **`packages/durable-psalm-plugin/`**.

See also
--------

[](#see-also)

- [ADR012 — Activity stub, PSR-6, warmup, static analysis](../../documentation/adr/ADR012-activity-stub-metadata-and-static-analysis.md)

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance60

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/144109625f8029112d56f43d08120cf03a0918ea3b4fd59ab53f09b02f630b00?d=identicon)[gplanchat](/maintainers/gplanchat)

---

Top Contributors

[![gplanchat](https://avatars.githubusercontent.com/u/152367?v=4)](https://github.com/gplanchat "gplanchat (1 commits)")

### Embed Badge

![Health badge](/badges/gplanchat-durable-psalm-plugin/health.svg)

```
[![Health](https://phpackages.com/badges/gplanchat-durable-psalm-plugin/health.svg)](https://phpackages.com/packages/gplanchat-durable-psalm-plugin)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
