@unbrained/pm-cli 2026.9.26 → 2026.9.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +4 -6
- package/CHANGELOG.md +42 -0
- package/dist/cli/commander-usage.js +2 -2
- package/dist/cli/error-guidance.js +1 -1
- package/dist/cli/help-json-payload.js +1 -1
- package/dist/cli/main.js +2 -2
- package/dist/cli/register-operations.js +1 -1
- package/dist/cli/register-setup.js +1 -1
- package/dist/cli/runtime/selection.d.ts +3 -1
- package/dist/cli/runtime/selection.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +156 -148
- package/dist/cli-bundle/chunks/{chunk-TC74K7SS.js → chunk-35DME35A.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QQD3VRMZ.js → chunk-A2G5OG6W.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-CPOWTIIS.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-TYJXMT3Q.js → chunk-GLH2LNRH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-IYN4MJ2C.js → chunk-NBDB3SRC.js} +57 -57
- package/dist/cli-bundle/chunks/{chunk-HTHTX6E6.js → chunk-NEUIVBFO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-U55RYT3I.js → chunk-OYCCWPBM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VMO4P5MX.js → chunk-PLNNUAFZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FOTXRNY6.js → chunk-PR4UAMI5.js} +44 -44
- package/dist/cli-bundle/chunks/{chunk-SZQCHJI4.js → chunk-UT7GRGHY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MJWKR7YA.js → chunk-VMJLM7P2.js} +62 -62
- package/dist/cli-bundle/chunks/{chunk-4ODHIX7N.js → chunk-YERBAGQD.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-ZFHJP7YD.js +29 -0
- package/dist/cli-bundle/chunks/{register-list-query-426QTRET.js → register-list-query-N6RP6PSP.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-FLI3HHMP.js → register-mutation-CY7JGQE6.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-TP7ZG4MK.js → register-operations-53HAD3QP.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-NVX6374E.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-5KJXX2TZ.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-UIFVIE5F.js → chunk-6IVQPNYN.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-MK5AKKHK.js → chunk-A5O3VYWV.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-AZA4AEOR.js +75 -0
- package/dist/cli-bundle/focused-chunks/chunk-BGWF6CMP.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-NVVB2HJC.js → chunk-BRLXKRI2.js} +17 -17
- package/dist/cli-bundle/focused-chunks/{chunk-ABA3KRPY.js → chunk-DTLRXY77.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-XKH2FC5D.js → chunk-IJXZQE3D.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-Q355NPLH.js → chunk-IWLMQLBO.js} +6 -6
- package/dist/cli-bundle/focused-chunks/chunk-K7GSZ7YZ.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-OY3VHCTX.js → chunk-ONDNR3VU.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-XVBWZTU2.js → chunk-OVVCXTIE.js} +12 -12
- package/dist/cli-bundle/focused-chunks/{chunk-25BBHWMH.js → chunk-V7OPZRL6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-TLF6N56J.js → chunk-Y5Z3XNGY.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-O7MIBEMK.js → chunk-YZB7IPR6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-NRHTXBTI.js → chunk-ZMQTIS3L.js} +2 -2
- package/dist/cli-bundle/main.js +22 -22
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +1 -1
- package/dist/cli-bundle/sdk-core.js +18 -18
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +51 -51
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +8 -8
- package/dist/core/diagnostics/remediation.js +1 -1
- package/dist/core/item/item-format.js +1 -1
- package/dist/core/store/settings.js +3 -3
- package/dist/sdk/agent-capability-contracts.js +1 -1
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
- package/dist/sdk/completion/fish.js +3 -3
- package/dist/sdk/completion/shared.d.ts +1 -1
- package/dist/sdk/completion/shared.js +1 -1
- package/dist/sdk/completion/zsh.js +3 -3
- package/dist/sdk/extension/copy-scope.d.ts +2 -2
- package/dist/sdk/extension/copy-scope.js +1 -1
- package/dist/sdk/extension/install-plan.js +1 -1
- package/dist/sdk/extension/install-runtime.js +2 -2
- package/dist/sdk/extension/static-inventory.d.ts +54 -0
- package/dist/sdk/extension/static-inventory.js +2 -0
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/governance/health-merge-evidence.d.ts +18 -0
- package/dist/sdk/governance/health-merge-evidence.js +2 -0
- package/dist/sdk/governance/health.js +1 -1
- package/dist/sdk/guide-topics.js +1 -1
- package/dist/sdk/index.d.ts +1 -0
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/merge/install.js +2 -2
- package/dist/sdk/output-projection.d.ts +1 -1
- package/dist/sdk/output-projection.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/complete-list.js +1 -1
- package/dist/sdk/read-output/provenance.d.ts +20 -0
- package/dist/sdk/read-output/provenance.js +2 -0
- package/dist/sdk/read-output-budget.d.ts +1 -1
- package/dist/sdk/read-output-budget.js +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/test/execution.d.ts +11 -0
- package/dist/sdk/test/execution.js +2 -2
- package/dist/sdk/test/parsers.d.ts +1 -1
- package/dist/sdk/test/parsers.js +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.js +1 -1
- package/docs/AGENT_READ_AND_TEST_RECEIPTS.md +21 -0
- package/docs/CLAUDE_CODE_PLUGIN.md +12 -7
- package/docs/CLI_GRAMMAR.md +31 -0
- package/docs/CODEX_PLUGIN.md +8 -0
- package/docs/CONFIGURATION.md +2 -0
- package/docs/EXTENSION_LIFECYCLE.md +18 -0
- package/docs/PACKAGE_EVIDENCE.md +18 -7
- package/docs/README.md +1 -0
- package/docs/RELEASING.md +46 -1
- package/docs/TESTING.md +14 -3
- package/docs/agent-task-token-baseline.json +4 -4
- package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
- package/docs/generated/AGENT_COMMAND_SURFACE.md +5 -1
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +4 -0
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +18 -7
- package/marketplace.json +4 -6
- package/package.json +6 -6
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +4 -2
- package/plugins/pm-claude/.mcp.json +1 -2
- package/plugins/pm-claude/README.md +11 -7
- package/plugins/pm-claude/package.json +2 -2
- package/plugins/pm-claude/skills/pm-audit/SKILL.md +14 -103
- package/plugins/pm-claude/skills/pm-audit/agents/openai.yaml +4 -0
- package/plugins/pm-claude/{commands/pm-calendar.md → skills/pm-calendar/SKILL.md} +1 -0
- package/plugins/pm-claude/{commands/pm-close-task.md → skills/pm-close-task/SKILL.md} +1 -0
- package/plugins/pm-claude/skills/pm-developer/SKILL.md +20 -143
- package/plugins/pm-claude/skills/pm-developer/agents/openai.yaml +4 -0
- package/plugins/pm-claude/{commands/pm-init.md → skills/pm-init/SKILL.md} +2 -1
- package/plugins/pm-claude/{commands/pm-list.md → skills/pm-list/SKILL.md} +2 -1
- package/plugins/pm-claude/{commands/pm-new.md → skills/pm-new/SKILL.md} +1 -0
- package/plugins/pm-claude/skills/pm-planner/SKILL.md +16 -167
- package/plugins/pm-claude/skills/pm-planner/agents/openai.yaml +4 -0
- package/plugins/pm-claude/skills/pm-release/SKILL.md +18 -102
- package/plugins/pm-claude/skills/pm-release/agents/openai.yaml +4 -0
- package/plugins/pm-claude/{commands/pm-search.md → skills/pm-search/SKILL.md} +1 -0
- package/plugins/pm-claude/{commands/pm-start-task.md → skills/pm-start-task/SKILL.md} +1 -0
- package/plugins/pm-claude/{commands/pm-status.md → skills/pm-status/SKILL.md} +1 -0
- package/plugins/pm-claude/{commands/pm-triage.md → skills/pm-triage/SKILL.md} +1 -0
- package/plugins/pm-claude/skills/pm-workflow/SKILL.md +25 -156
- package/plugins/pm-claude/skills/pm-workflow/agents/openai.yaml +4 -0
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/README.md +10 -2
- package/plugins/pm-codex/mcp.json +11 -0
- package/plugins/pm-codex/package.json +2 -2
- package/plugins/pm-codex/plugin.json +45 -0
- package/plugins/pm-codex/skills/pm-audit/SKILL.md +21 -0
- package/plugins/pm-codex/skills/pm-audit/agents/openai.yaml +4 -0
- package/plugins/pm-codex/skills/pm-auditor/SKILL.md +5 -40
- package/plugins/pm-codex/skills/pm-auditor/agents/openai.yaml +3 -5
- package/plugins/pm-codex/skills/pm-developer/SKILL.md +26 -0
- package/plugins/pm-codex/skills/pm-developer/agents/openai.yaml +4 -0
- package/plugins/pm-codex/skills/pm-native/SKILL.md +7 -87
- package/plugins/pm-codex/skills/pm-native/agents/openai.yaml +3 -5
- package/plugins/pm-codex/skills/pm-planner/SKILL.md +22 -0
- package/plugins/pm-codex/skills/pm-planner/agents/openai.yaml +4 -0
- package/plugins/pm-codex/skills/pm-release/SKILL.md +17 -38
- package/plugins/pm-codex/skills/pm-release/agents/openai.yaml +2 -4
- package/plugins/pm-codex/skills/pm-workflow/SKILL.md +39 -0
- package/plugins/pm-codex/skills/pm-workflow/agents/openai.yaml +4 -0
- package/dist/cli-bundle/chunks/chunk-GRWPZR7F.js +0 -29
- package/dist/cli-bundle/chunks/register-setup-574SIVQZ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-H3BI4EDO.js +0 -75
- package/dist/cli-bundle/focused-chunks/chunk-HNHMK5JI.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-HQPTDJLF.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PMPFLA6X.js +0 -2
- package/plugins/pm-claude/commands/pm-audit.md +0 -38
- package/plugins/pm-claude/commands/pm-developer.md +0 -38
- package/plugins/pm-claude/commands/pm-planner.md +0 -54
- package/plugins/pm-claude/commands/pm-release.md +0 -41
- package/plugins/pm-claude/commands/pm-workflow.md +0 -49
package/docs/CONFIGURATION.md
CHANGED
|
@@ -67,6 +67,8 @@ Precedence:
|
|
|
67
67
|
|
|
68
68
|
When `settings.json` cannot be loaded, `pm` falls back to built-in defaults and prints a one-time `settings_read_fs_error`, `settings_read_invalid_json`, or `settings_read_invalid_schema` warning to stderr (stdout output is unchanged); run `pm health` for remediation.
|
|
69
69
|
|
|
70
|
+
If the existing project `settings.json` has invalid JSON, a configuration write refuses with `settings_write_invalid_existing_json`. It leaves the file and workspace history untouched. Repair the syntax in `.agents/pm/settings.json`, run `pm health`, then retry the configuration command. The read fallback to defaults does not authorize replacing malformed settings.
|
|
71
|
+
|
|
70
72
|
## Common Settings
|
|
71
73
|
|
|
72
74
|
| Setting | Purpose |
|
|
@@ -3,6 +3,24 @@
|
|
|
3
3
|
Tracked by [pm-ig5cfe](../.agents/pm/issues/pm-ig5cfe.toon),
|
|
4
4
|
[pm-495lkc](../.agents/pm/issues/pm-495lkc.toon), and
|
|
5
5
|
[pm-miy5k6](../.agents/pm/issues/pm-miy5k6.toon).
|
|
6
|
+
Static inventory is tracked by [pm-lhhnx9](../.agents/pm/issues/pm-lhhnx9.toon).
|
|
7
|
+
|
|
8
|
+
## Read-only configured inventory
|
|
9
|
+
|
|
10
|
+
Use `pm package inventory --project --json` (or `--global`) for a host GET route
|
|
11
|
+
or agent read. Pass a name to receive an explicit `absent` row. The public SDK
|
|
12
|
+
equivalent is `inspectStaticExtensionInventory({ pmRoot, scope, name })` from
|
|
13
|
+
`@unbrained/pm-cli/sdk`. Both read settings, managed metadata, and manifests
|
|
14
|
+
without importing package entrypoints, running hooks, checking for updates,
|
|
15
|
+
adopting installs, or writing workspace files. An absent managed-state file is
|
|
16
|
+
reported separately from an invalid one. `complete: false` and `errors` mean
|
|
17
|
+
the list must not be treated as authoritative; the CLI also exits nonzero.
|
|
18
|
+
|
|
19
|
+
`configured_enabled` is the effective saved enablement setting, while
|
|
20
|
+
`runtime_active` is always `null`. The static read does not prove that a package
|
|
21
|
+
will activate successfully. `pm package explore`, `manage`, `doctor`, and
|
|
22
|
+
`describe` probe runtime state and may execute installed package code. Run
|
|
23
|
+
those commands only when an activation probe is intended.
|
|
6
24
|
|
|
7
25
|
## Explicit Install-Source Identity
|
|
8
26
|
|
package/docs/PACKAGE_EVIDENCE.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Install Plans and Update Evidence
|
|
2
2
|
|
|
3
|
-
Tracked by [pm-
|
|
3
|
+
Tracked by [pm-erogk1](../.agents/pm/issues/pm-erogk1.toon),
|
|
4
|
+
[pm-5bsofk](../.agents/pm/issues/pm-5bsofk.toon) and
|
|
4
5
|
[pm-gf5zw8](../.agents/pm/issues/pm-gf5zw8.toon), with claim controls tracked by
|
|
5
|
-
[pm-eqdo85](../.agents/pm/issues/pm-eqdo85.toon)
|
|
6
|
+
[pm-eqdo85](../.agents/pm/issues/pm-eqdo85.toon) and Git metadata exclusion by
|
|
7
|
+
[pm-k7nxaz](../.agents/pm/issues/pm-k7nxaz.toon).
|
|
6
8
|
|
|
7
9
|
## Install planning
|
|
8
10
|
|
|
@@ -10,17 +12,26 @@ Preview an install with `pm package install ./local-package --project --dry-run`
|
|
|
10
12
|
The `details.install_plan` receipt distinguishes directory, archive, npm, and
|
|
11
13
|
GitHub sources and reports logical file bytes, file/directory/link counts, and
|
|
12
14
|
the copy policy. External local directories are directory snapshots, including
|
|
13
|
-
development artifacts
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
development artifacts other than `.git`. All copied directory sources exclude
|
|
16
|
+
`.git` entries at every depth, including worktree files and symlinks, and count
|
|
17
|
+
those entries in `excluded_entries`. Nested destinations also exclude `.agents`,
|
|
18
|
+
`node_modules`, and installer backup directories at every depth using the
|
|
19
|
+
installer's filter.
|
|
20
|
+
The bounded planner can return lower-bound counts with `complete: false` and a
|
|
21
|
+
`stop_reason` when called directly. Installing a local directory now refuses
|
|
22
|
+
that incomplete scan in both dry-run and real modes before writing or
|
|
23
|
+
activating. SDK callers receive
|
|
24
|
+
`extension_install_incomplete_source_scan`; the CLI exits nonzero with the
|
|
25
|
+
entry or depth limit and a packed-archive recovery step. That recovery keeps
|
|
26
|
+
the requested `--project` or `--global` installation scope. A source-directory
|
|
27
|
+
alias resolves to its
|
|
17
28
|
directory before copying; symlink entries inside the source remain links and
|
|
18
29
|
their targets are never traversed.
|
|
19
30
|
Planning writes no destination files, managed state, or activation settings;
|
|
20
31
|
archive and remote source resolution can still prepare temporary source files
|
|
21
32
|
and perform network or dependency-resolution work.
|
|
22
33
|
|
|
23
|
-
For development-heavy
|
|
34
|
+
For development-heavy local snapshots, `packed_alternative`
|
|
24
35
|
provides argument vectors for `npm pack --ignore-scripts --json` and archive
|
|
25
36
|
installation. Run packing in its reported `cwd`, substitute the returned
|
|
26
37
|
`pack_result[0].filename`, and install the resulting archive. Normal local
|
package/docs/README.md
CHANGED
|
@@ -34,6 +34,7 @@ pm guide release --json
|
|
|
34
34
|
- [Quickstart](QUICKSTART.md) - install, initialize, create, claim, link, test, close.
|
|
35
35
|
- [Onboarding](ONBOARDING.md) - first-two-hours maintainer and contributor setup.
|
|
36
36
|
- [Agent Guide](AGENT_GUIDE.md) - canonical agent loop, tracker linking, and token-minimal command choices.
|
|
37
|
+
- [Agent Read and Test Receipts](AGENT_READ_AND_TEST_RECEIPTS.md) - JSON help provenance, linked-test persistence, and history diff continuation.
|
|
37
38
|
- [Command Reference](COMMANDS.md) - command families with examples and when to use each family.
|
|
38
39
|
- [Context and Operations Namespaces](COMMAND_NAMESPACES.md) - native navigation, diagnostics, event streams, and compatibility aliases.
|
|
39
40
|
- [CLI Scripting Contract](SCRIPTING.md) - exit codes, flat mutation receipts versus read envelopes, stdout/stderr boundaries, stable JSON fields, uniform OR filters, and shell composition recipes.
|
package/docs/RELEASING.md
CHANGED
|
@@ -76,7 +76,52 @@ pnpm version:check
|
|
|
76
76
|
|
|
77
77
|
`.github/workflows/auto-release.yml` runs once per day and can also be dispatched manually.
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
### Independent morning dispatch
|
|
80
|
+
|
|
81
|
+
Tracked by [pm-9url9h](../.agents/pm/tasks/pm-9url9h.toon). An independent
|
|
82
|
+
operator-managed timer can invoke `scripts/release/dispatch-daily-release.mjs`
|
|
83
|
+
at **04:45 Europe/Vienna** (02:45 UTC in summer, 03:45 UTC in winter).
|
|
84
|
+
The aim is completion before 06:30–07:00 local time; host availability, GitHub
|
|
85
|
+
runner capacity and release gates can prevent that target. The host must be
|
|
86
|
+
awake, online and able to authenticate with `gh` unattended.
|
|
87
|
+
|
|
88
|
+
The existing **02:35 UTC GitHub cron remains enabled as a fallback**. Either
|
|
89
|
+
clock can arrive first. The dispatcher checks both release workflows for active
|
|
90
|
+
runs and skips an existing exact UTC-day tag. Tag existence is explicitly not
|
|
91
|
+
publication proof: incomplete publication still requires the normal immutable-tag
|
|
92
|
+
recovery procedure. Hosted concurrency and the one-release-per-UTC-day guard
|
|
93
|
+
remain the final protection if a native run races the external request.
|
|
94
|
+
|
|
95
|
+
The standalone dispatcher requires an absolute private state directory:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
node scripts/release/dispatch-daily-release.mjs --state-dir /absolute/private/state --check
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`--check` reads prerequisites without dispatching or writing state, including
|
|
102
|
+
outside the morning window. Without it, the dispatcher accepts only
|
|
103
|
+
04:45–05:15 Vienna time and sends `workflow_dispatch` to `auto-release.yml` on
|
|
104
|
+
`main` with explicit `push=true`, `dry_run=false`, and `telemetry_mode=off`,
|
|
105
|
+
matching scheduled production policy. It never builds from the operator's
|
|
106
|
+
working branch, changes release secrets or bypasses hosted gates.
|
|
107
|
+
|
|
108
|
+
An exclusive daily intent file is written **before** sending the request. A
|
|
109
|
+
timeout can mean GitHub accepted the request, so an uncertain attempt is retained
|
|
110
|
+
and never automatically resent that UTC day. Inspect hosted run history before
|
|
111
|
+
any manual recovery. Pre-dispatch read failures leave no intent; a timer may
|
|
112
|
+
try again within the morning window. Late persistent-timer catch-up is a no-op.
|
|
113
|
+
Install a reviewed copy outside development checkouts so branch edits cannot
|
|
114
|
+
silently change an unattended service.
|
|
115
|
+
|
|
116
|
+
Keep dispatcher output in the service journal: `dispatch_accepted` proves only
|
|
117
|
+
API acceptance. Verify the hosted run, GitHub Release and exact npm version
|
|
118
|
+
separately. These runs remain `workflow_dispatch`; they do not improve or erase
|
|
119
|
+
the native `schedule` denominator in [Release Reliability](RELEASE_RELIABILITY.md).
|
|
120
|
+
Disable the independent timer to roll back; the original hosted schedule and
|
|
121
|
+
publication path continue unchanged. Host-specific unit files and authentication
|
|
122
|
+
configuration belong in private operator documentation.
|
|
123
|
+
|
|
124
|
+
### Hosted release policy
|
|
80
125
|
|
|
81
126
|
- release only when commits exist after the latest release tag
|
|
82
127
|
- ignore tracker-governance-only commits for publish eligibility: `.agents/pm/**` and the mechanically generated `CHANGELOG.md` projection do not create a package release by themselves, while any product, test, documentation, workflow, or other changed path remains release-relevant
|
package/docs/TESTING.md
CHANGED
|
@@ -2,17 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
This page describes safe local tests, linked tests, coverage, and release-readiness checks.
|
|
4
4
|
|
|
5
|
+
Current linked-test and merge-fence work: [pm-t05d8d](../.agents/pm/issues/pm-t05d8d.toon), [pm-kynkl8](../.agents/pm/issues/pm-kynkl8.toon).
|
|
6
|
+
|
|
5
7
|
Tracked implementation updates: [pm-52eh](../.agents/pm/features/pm-52eh.toon), [pm-mcxr](../.agents/pm/issues/pm-mcxr.toon), [pm-u42x](../.agents/pm/issues/pm-u42x.toon), [pm-atfm](../.agents/pm/features/pm-atfm.toon), [pm-xmp5](../.agents/pm/tasks/pm-xmp5.toon), [pm-39cqqx](../.agents/pm/tasks/pm-39cqqx.toon), [pm-5cgm2z](../.agents/pm/chores/pm-5cgm2z.toon), [pm-avv3wx](../.agents/pm/issues/pm-avv3wx.toon), [pm-rizqb6](../.agents/pm/issues/pm-rizqb6.toon), [pm-95h7pg](../.agents/pm/issues/pm-95h7pg.toon), [pm-giks4s](../.agents/pm/issues/pm-giks4s.toon), [pm-xa3t0o](../.agents/pm/issues/pm-xa3t0o.toon), [pm-e97jyf](../.agents/pm/issues/pm-e97jyf.toon), [pm-efkvdy](../.agents/pm/issues/pm-efkvdy.toon), [pm-ed28wi](../.agents/pm/issues/pm-ed28wi.toon), and [pm-5ug5xq](../.agents/pm/issues/pm-5ug5xq.toon).
|
|
6
8
|
|
|
7
9
|
## Agent Quick Context
|
|
8
10
|
|
|
9
11
|
- Unit and integration tests must not read or write real `.agents/pm` data.
|
|
10
12
|
- Prefer `node scripts/run-tests.mjs ...` because it creates sandboxed `PM_PATH` and `PM_GLOBAL_PATH`.
|
|
11
|
-
- Linked-test execution injects isolated `
|
|
12
|
-
|
|
13
|
+
- Linked-test execution injects isolated `PM_GLOBAL_PATH` and normally
|
|
14
|
+
`PM_PATH`; `pm_context_mode=none` omits `PM_PATH` for self-isolating SDK tests
|
|
15
|
+
in disposable workspaces. It applies stored-command provenance checks before process
|
|
13
16
|
creation. Direct runners are accepted; prefer
|
|
14
17
|
`node scripts/run-tests.mjs ...` when the repository provides it because the
|
|
15
|
-
wrapper also reproduces build, coverage, and cleanup policy.
|
|
18
|
+
wrapper also reproduces build, coverage, and cleanup policy. Use a direct
|
|
19
|
+
runner when a `none`-mode test must observe an unset `PM_PATH`; the wrapper
|
|
20
|
+
creates its own sandboxed `PM_PATH`.
|
|
16
21
|
- Run linked tests before closing the item that owns the work.
|
|
17
22
|
|
|
18
23
|
Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon).
|
|
@@ -510,6 +515,11 @@ only their schema roots; a non-PM command explicitly configured with
|
|
|
510
515
|
data are materialized only when at least one selected command requires tracker
|
|
511
516
|
context. This preserves source isolation without copying an unrelated tracker
|
|
512
517
|
into constrained temporary storage.
|
|
518
|
+
For SDK tests that create independent temporary PM roots, use
|
|
519
|
+
`pm_context_mode: "none"` with `workspace_context_mode: "isolated"` or
|
|
520
|
+
`"snapshot"`. The runner omits `PM_PATH` so each SDK client can resolve its
|
|
521
|
+
explicit workspace independently; `PM_GLOBAL_PATH` remains sandboxed. Source
|
|
522
|
+
workspace execution and direct PM commands refuse this mode before execution.
|
|
513
523
|
Capacity, permission, and resource failures while seeding a required tracker
|
|
514
524
|
surface as typed, path-redacted host-environment refusals with recovery steps.
|
|
515
525
|
When a legacy source tracker has settings but no `_workspace` history, tracker
|
|
@@ -593,6 +603,7 @@ Use explicit modes when needed:
|
|
|
593
603
|
pm test <item-id> --run --pm-context schema
|
|
594
604
|
pm test <item-id> --run --pm-context tracker
|
|
595
605
|
pm test <item-id> --run --pm-context auto --check-context --auto-pm-context
|
|
606
|
+
pm test <item-id> --add-json '{"command":"pnpm exec vitest run tests/integration/linked-test-context-trust.integration.spec.ts","pm_context_mode":"none","workspace_context_mode":"snapshot"}'
|
|
596
607
|
```
|
|
597
608
|
|
|
598
609
|
For complex linked-test commands, prefer JSON input so shell syntax survives unchanged:
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
{
|
|
78
78
|
"task_id": "orientation-contracts-next",
|
|
79
79
|
"command_count": 2,
|
|
80
|
-
"estimated_tokens":
|
|
80
|
+
"estimated_tokens": 5203,
|
|
81
81
|
"capabilities": [
|
|
82
82
|
"actionable_work",
|
|
83
83
|
"active_ownership",
|
|
@@ -120,11 +120,11 @@
|
|
|
120
120
|
},
|
|
121
121
|
{
|
|
122
122
|
"id": "orientation-contracts-next",
|
|
123
|
-
"max_estimated_tokens":
|
|
123
|
+
"max_estimated_tokens": 5203,
|
|
124
124
|
"steps": [
|
|
125
125
|
{
|
|
126
126
|
"id": "contracts",
|
|
127
|
-
"max_estimated_tokens":
|
|
127
|
+
"max_estimated_tokens": 4481,
|
|
128
128
|
"accounting_mode": "self_reported"
|
|
129
129
|
},
|
|
130
130
|
{
|
|
@@ -261,5 +261,5 @@
|
|
|
261
261
|
]
|
|
262
262
|
}
|
|
263
263
|
],
|
|
264
|
-
"composite_max_estimated_tokens":
|
|
264
|
+
"composite_max_estimated_tokens": 13034
|
|
265
265
|
}
|
|
@@ -6,7 +6,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
|
|
|
6
6
|
|
|
7
7
|
| Capability family | Commands |
|
|
8
8
|
| --- | --- |
|
|
9
|
-
| workspace | `init`, `config`, `workspace merge`, `schema`, `profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` |
|
|
9
|
+
| workspace | `workspace init`, `workspace config`, `workspace merge`, `workspace schema`, `workspace profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` |
|
|
10
10
|
| intake | `create`, `item`, `item copy`, `context focus`, `history restore` |
|
|
11
11
|
| context | `list`, `aggregate`, `context`, `get`, `search`, `item duplicates`, `ops eval`, `context next`, `history activity`, `ops stats`, `help` |
|
|
12
12
|
| lifecycle | `update`, `update many`, `close`, `close many`, `close delete`, `claim`, `release` |
|
|
@@ -5,7 +5,9 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
|
|
|
5
5
|
| Command | Minimum visibility tier | Capability family |
|
|
6
6
|
| --- | --- | --- |
|
|
7
7
|
| `init` | core | workspace |
|
|
8
|
+
| `workspace init` | core | workspace |
|
|
8
9
|
| `config` | standard | workspace |
|
|
10
|
+
| `workspace config` | standard | workspace |
|
|
9
11
|
| `extension` | full | extensions |
|
|
10
12
|
| `package` | full | extensions |
|
|
11
13
|
| `packages` | full | extensions |
|
|
@@ -54,7 +56,9 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
|
|
|
54
56
|
| `merge` | full | workspace |
|
|
55
57
|
| `workspace merge` | full | workspace |
|
|
56
58
|
| `schema` | standard | workspace |
|
|
59
|
+
| `workspace schema` | standard | workspace |
|
|
57
60
|
| `profile` | standard | workspace |
|
|
61
|
+
| `workspace profile` | standard | workspace |
|
|
58
62
|
| `activity` | full | context |
|
|
59
63
|
| `history activity` | full | context |
|
|
60
64
|
| `restore` | full | intake |
|
|
@@ -97,7 +101,7 @@ This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it ma
|
|
|
97
101
|
| `assurance` | full | quality |
|
|
98
102
|
| `gc` | full | workspace |
|
|
99
103
|
| `ops gc` | full | workspace |
|
|
100
|
-
| `workspace` |
|
|
104
|
+
| `workspace` | core | workspace |
|
|
101
105
|
| `contracts` | standard | quality |
|
|
102
106
|
| `claim` | core | lifecycle |
|
|
103
107
|
| `release` | core | lifecycle |
|
|
@@ -95,6 +95,10 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
|
|
|
95
95
|
| `update many` | lifecycle | 146 | 146 |
|
|
96
96
|
| `close many` | lifecycle | 72 | 72 |
|
|
97
97
|
| `close delete` | lifecycle | 24 | 24 |
|
|
98
|
+
| `workspace init` | workspace | 30 | 30 |
|
|
99
|
+
| `workspace config` | workspace | 36 | 36 |
|
|
100
|
+
| `workspace schema` | workspace | 43 | 43 |
|
|
101
|
+
| `workspace profile` | workspace | 22 | 22 |
|
|
98
102
|
| `item comments` | evidence | 31 | 31 |
|
|
99
103
|
| `item notes` | evidence | 35 | 35 |
|
|
100
104
|
| `item learnings` | evidence | 31 | 31 |
|
|
@@ -4,14 +4,14 @@ Tracker: `pm-f05lsg`.
|
|
|
4
4
|
|
|
5
5
|
Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
|
|
6
6
|
|
|
7
|
-
- Catalog error codes:
|
|
7
|
+
- Catalog error codes: 389
|
|
8
8
|
- Executable error codes: 19
|
|
9
9
|
- Executable-code ratchet floor: 18
|
|
10
10
|
- Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `projection_options_mutually_exclusive`, `tracker_not_initialized`, `tracker_root_missing`, `tracker_root_not_directory`, `tracker_root_unreadable`, `unknown_context_intent`, `unknown_field_projection`, `unknown_option`, `unknown_subcommand`
|
|
11
|
-
- Uncovered error codes:
|
|
12
|
-
- Coverage fraction: 0.
|
|
11
|
+
- Uncovered error codes: 370
|
|
12
|
+
- Coverage fraction: 0.048843
|
|
13
13
|
- Closed-domain probes: 19
|
|
14
|
-
- Grammar probes:
|
|
14
|
+
- Grammar probes: 117
|
|
15
15
|
|
|
16
16
|
| Error code | Canonical code | Disposition | Evidence kinds | Probe count |
|
|
17
17
|
| --- | --- | --- | --- | --- |
|
|
@@ -86,6 +86,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
86
86
|
| `extension_dependency_name_unsafe` | `extension_dependency_name_unsafe` | uncovered | none | 0 |
|
|
87
87
|
| `extension_dependency_spec_invalid` | `extension_dependency_spec_invalid` | uncovered | none | 0 |
|
|
88
88
|
| `extension_dependency_version_unsafe` | `extension_dependency_version_unsafe` | uncovered | none | 0 |
|
|
89
|
+
| `extension_install_incomplete_source_scan` | `extension_install_incomplete_source_scan` | uncovered | none | 0 |
|
|
89
90
|
| `extension_install_soft_failed` | `extension_install_soft_failed` | uncovered | none | 0 |
|
|
90
91
|
| `extension_install_source_contains_destination` | `extension_install_source_contains_destination` | uncovered | none | 0 |
|
|
91
92
|
| `extension_item_field_reserved` | `extension_item_field_reserved` | uncovered | none | 0 |
|
|
@@ -96,6 +97,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
96
97
|
| `extension_mutation_guard_invalid_denial` | `extension_mutation_guard_invalid_denial` | uncovered | none | 0 |
|
|
97
98
|
| `extension_mutation_guard_timed_out` | `extension_mutation_guard_timed_out` | uncovered | none | 0 |
|
|
98
99
|
| `extension_update_health_partial_coverage` | `extension_update_health_partial_coverage` | uncovered | none | 0 |
|
|
100
|
+
| `extensions_unreadable` | `extensions_unreadable` | uncovered | none | 0 |
|
|
99
101
|
| `field_duplicate` | `field_duplicate` | uncovered | none | 0 |
|
|
100
102
|
| `field_invalid` | `field_invalid` | uncovered | none | 0 |
|
|
101
103
|
| `field_mcp_input_collision` | `field_mcp_input_collision` | uncovered | none | 0 |
|
|
@@ -189,8 +191,12 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
189
191
|
| `locks_stale_count` | `locks_stale_count` | uncovered | none | 0 |
|
|
190
192
|
| `locks_unreadable` | `locks_unreadable` | uncovered | none | 0 |
|
|
191
193
|
| `malformed_plan_step_evidence` | `malformed_plan_step_evidence` | uncovered | none | 0 |
|
|
194
|
+
| `managed_state_invalid` | `managed_state_invalid` | uncovered | none | 0 |
|
|
195
|
+
| `managed_state_unreadable` | `managed_state_unreadable` | uncovered | none | 0 |
|
|
192
196
|
| `manifest_capabilities_absent` | `manifest_capabilities_absent` | uncovered | none | 0 |
|
|
197
|
+
| `manifest_invalid` | `manifest_invalid` | uncovered | none | 0 |
|
|
193
198
|
| `manifest_unknown_key` | `manifest_unknown_key` | executable | owned_state | 1 |
|
|
199
|
+
| `manifest_unreadable` | `manifest_unreadable` | uncovered | none | 0 |
|
|
194
200
|
| `mcp_annotation_file_unavailable` | `mcp_annotation_file_unavailable` | uncovered | none | 0 |
|
|
195
201
|
| `mcp_stdin_unavailable` | `mcp_stdin_unavailable` | uncovered | none | 0 |
|
|
196
202
|
| `mcp_task_not_found_or_not_authorized` | `mcp_task_not_found_or_not_authorized` | uncovered | none | 0 |
|
|
@@ -198,6 +204,8 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
198
204
|
| `merge_decisions_unreviewed` | `merge_decisions_unreviewed` | uncovered | none | 0 |
|
|
199
205
|
| `merge_driver_configuration_drift` | `merge_driver_configuration_drift` | uncovered | none | 0 |
|
|
200
206
|
| `merge_driver_configuration_missing` | `merge_driver_configuration_missing` | uncovered | none | 0 |
|
|
207
|
+
| `merge_fence_drift` | `merge_fence_drift` | uncovered | none | 0 |
|
|
208
|
+
| `merge_fence_missing` | `merge_fence_missing` | uncovered | none | 0 |
|
|
201
209
|
| `merge_git_config_unwritable` | `merge_git_config_unwritable` | uncovered | none | 0 |
|
|
202
210
|
| `merge_receipt_evidence_invalid` | `merge_receipt_evidence_invalid` | uncovered | none | 0 |
|
|
203
211
|
| `merge_receipt_history_reference_missing` | `merge_receipt_history_reference_missing` | uncovered | none | 0 |
|
|
@@ -216,7 +224,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
216
224
|
| `missing_parameter_alias` | `missing_parameter_alias` | uncovered | none | 0 |
|
|
217
225
|
| `missing_positive_execution_receipt` | `missing_positive_execution_receipt` | uncovered | none | 0 |
|
|
218
226
|
| `missing_probe` | `missing_probe` | uncovered | none | 0 |
|
|
219
|
-
| `missing_required_argument` | `missing_required_argument` | executable | grammar |
|
|
227
|
+
| `missing_required_argument` | `missing_required_argument` | executable | grammar | 77 |
|
|
220
228
|
| `missing_required_option` | `missing_required_option` | uncovered | none | 0 |
|
|
221
229
|
| `missing_suggested_retry` | `missing_suggested_retry` | uncovered | none | 0 |
|
|
222
230
|
| `missing_suggested_retry_args` | `missing_suggested_retry_args` | uncovered | none | 0 |
|
|
@@ -274,10 +282,13 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
274
282
|
| `retry_failed` | `retry_failed` | uncovered | none | 0 |
|
|
275
283
|
| `schema_migration_input_required` | `schema_migration_input_required` | uncovered | none | 0 |
|
|
276
284
|
| `semantic_spelling_collision` | `semantic_spelling_collision` | uncovered | none | 0 |
|
|
285
|
+
| `settings_invalid` | `settings_invalid` | uncovered | none | 0 |
|
|
277
286
|
| `settings_read_fs_error` | `settings_read_fs_error` | uncovered | none | 0 |
|
|
278
287
|
| `settings_read_invalid_json` | `settings_read_invalid_json` | uncovered | none | 0 |
|
|
279
288
|
| `settings_read_invalid_schema` | `settings_read_invalid_schema` | uncovered | none | 0 |
|
|
280
289
|
| `settings_read_merge_failed` | `settings_read_merge_failed` | uncovered | none | 0 |
|
|
290
|
+
| `settings_unreadable` | `settings_unreadable` | uncovered | none | 0 |
|
|
291
|
+
| `settings_write_invalid_existing_json` | `settings_write_invalid_existing_json` | uncovered | none | 0 |
|
|
281
292
|
| `stale_budget` | `stale_budget` | uncovered | none | 0 |
|
|
282
293
|
| `stale_destination` | `stale_destination` | uncovered | none | 0 |
|
|
283
294
|
| `stale_observed_signature` | `stale_observed_signature` | uncovered | none | 0 |
|
|
@@ -318,13 +329,13 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
318
329
|
| `unknown_field` | `unknown_field` | uncovered | none | 0 |
|
|
319
330
|
| `unknown_field_projection` | `unknown_field_projection` | executable | closed_domain | 10 |
|
|
320
331
|
| `unknown_item_type` | `unknown_item_type` | uncovered | none | 0 |
|
|
321
|
-
| `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state |
|
|
332
|
+
| `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state | 14 |
|
|
322
333
|
| `unknown_noun` | `unknown_noun` | uncovered | none | 0 |
|
|
323
334
|
| `unknown_option` | `unknown_option` | executable | owned_state | 1 |
|
|
324
335
|
| `unknown_plan_template` | `unknown_plan_template` | uncovered | none | 0 |
|
|
325
336
|
| `unknown_provenance_dimension` | `unknown_provenance_dimension` | uncovered | none | 0 |
|
|
326
337
|
| `unknown_status` | `unknown_status` | uncovered | none | 0 |
|
|
327
|
-
| `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state |
|
|
338
|
+
| `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state | 14 |
|
|
328
339
|
| `unsafe_init_recovery` | `unsafe_init_recovery` | uncovered | none | 0 |
|
|
329
340
|
| `unsupported_update_option` | `unsupported_update_option` | uncovered | none | 0 |
|
|
330
341
|
| `validate_command_references_stale_pm_ids` | `validate_command_references_stale_pm_ids` | uncovered | none | 0 |
|
package/marketplace.json
CHANGED
|
@@ -4,16 +4,14 @@
|
|
|
4
4
|
"name": "unbrained",
|
|
5
5
|
"url": "https://github.com/unbraind/pm-cli"
|
|
6
6
|
},
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"version": "2026.9.26"
|
|
10
|
-
},
|
|
7
|
+
"description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
|
|
8
|
+
"version": "2026.9.28",
|
|
11
9
|
"plugins": [
|
|
12
10
|
{
|
|
13
11
|
"name": "pm-claude",
|
|
14
12
|
"source": "./plugins/pm-claude",
|
|
15
|
-
"description": "Native pm CLI integration for Claude Code —
|
|
16
|
-
"version": "2026.9.
|
|
13
|
+
"description": "Native pm CLI integration for Claude Code — 32 MCP tools, 14 workflow skills with slash invocations, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
14
|
+
"version": "2026.9.28",
|
|
17
15
|
"author": {
|
|
18
16
|
"name": "unbrained",
|
|
19
17
|
"url": "https://github.com/unbraind/pm-cli"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.28",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@11.10.0",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
|
|
124
124
|
"lint:duplicates": "jscpd --config .jscpd.json && jscpd --config .jscpd.source.json && jscpd --config .jscpd.tables.json",
|
|
125
125
|
"lint:codefactor": "pnpm quality:static",
|
|
126
|
-
"quality:static": "pnpm quality:docstrings && pnpm quality:exports && pnpm lint:eslint && pnpm lint:duplicates && node scripts/check-workflow-permissions.mjs && node scripts/check-dependency-cooldown.mjs && node scripts/gen-plugin-mcp-wrappers.mjs --check && pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && node scripts/release/agent-task-token-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded && pnpm quality:mutation -- --prebuilt",
|
|
126
|
+
"quality:static": "pnpm quality:docstrings && pnpm quality:exports && pnpm lint:eslint && pnpm lint:duplicates && node scripts/check-workflow-permissions.mjs && node scripts/check-dependency-cooldown.mjs && node scripts/gen-plugin-mcp-wrappers.mjs --check && node scripts/gen-agent-plugin-skills.mjs --check && pnpm build && node scripts/contracts-snapshot.mjs --check && node scripts/generate-agent-capability-surfaces.mjs --check && node scripts/generate-error-code-catalog.mjs --check && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs && node scripts/release/refusal-closure-gate.mjs && node scripts/release/agent-task-token-gate.mjs && pnpm quality:mcp-deprecations && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded && pnpm quality:mutation -- --prebuilt",
|
|
127
127
|
"quality:exports": "knip --no-config-hints && node scripts/run-tests.mjs test -- tests/unit/scripts/release/dead-exports.spec.ts",
|
|
128
128
|
"quality:command-grammar": "pnpm build && node scripts/release/command-grammar-gate.mjs && node scripts/release/flag-invocation-parity.mjs && node scripts/release/flag-lexicon-gate.mjs",
|
|
129
129
|
"quality:recovery-closure": "pnpm build && node scripts/release/refusal-closure-gate.mjs",
|
|
@@ -238,10 +238,10 @@
|
|
|
238
238
|
"eslint-plugin-unicorn": "76.0.0",
|
|
239
239
|
"fast-check": "^4.10.2",
|
|
240
240
|
"github-slugger": "2.0.0",
|
|
241
|
-
"greptile": "^3.
|
|
242
|
-
"jscpd": "^5.3.
|
|
243
|
-
"knip": "^6.
|
|
244
|
-
"marked": "18.0.
|
|
241
|
+
"greptile": "^3.6.0",
|
|
242
|
+
"jscpd": "^5.3.2",
|
|
243
|
+
"knip": "^6.38.0",
|
|
244
|
+
"marked": "18.0.14",
|
|
245
245
|
"parse5": "8.0.1",
|
|
246
246
|
"tsx": "^4.23.15",
|
|
247
247
|
"typescript": "^6.0.3",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-digital-twin",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.28",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
2
3
|
"name": "pm-claude",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
4
|
+
"displayName": "pm CLI",
|
|
5
|
+
"description": "Native pm CLI integration for Claude Code — 32 MCP tools, 14 skills with slash invocations, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
|
|
6
|
+
"version": "2026.9.28",
|
|
5
7
|
"author": {
|
|
6
8
|
"name": "unbrained",
|
|
7
9
|
"url": "https://github.com/unbraind/pm-cli"
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"pm-mcp": {
|
|
4
4
|
"command": "node",
|
|
5
|
-
"args": ["${CLAUDE_PLUGIN_ROOT}/scripts/pm-mcp-server.mjs"]
|
|
6
|
-
"note": "Native pm-cli MCP server with automatic client/harness identity. Imports pm command modules directly — no pm shell invocation needed."
|
|
5
|
+
"args": ["${CLAUDE_PLUGIN_ROOT}/scripts/pm-mcp-server.mjs"]
|
|
7
6
|
}
|
|
8
7
|
}
|
|
9
8
|
}
|