@unbrained/pm-cli 2026.9.25 → 2026.9.27
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/.agents/skills/README.md +1 -0
- package/.agents/skills/pm-developer/SKILL.md +3 -0
- package/.agents/skills/pm-test-audit/LICENSE.txt +21 -0
- package/.agents/skills/pm-test-audit/SKILL.md +103 -0
- package/.agents/skills/pm-test-audit/references/AUDIT.md +54 -0
- package/.agents/skills/pm-test-audit/references/CAMPAIGN.md +47 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +28 -1
- package/dist/cli/commander-usage.js +2 -2
- package/dist/cli/error-guidance.js +1 -1
- package/dist/cli/main.js +2 -2
- package/dist/cli/register-list-query.js +2 -2
- 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/schema/registration.js +2 -2
- package/dist/cli-bundle/bundle-manifest.json +155 -147
- package/dist/cli-bundle/chunks/chunk-3BTJ66CB.js +238 -0
- package/dist/cli-bundle/chunks/{chunk-5AP67ZXH.js → chunk-4SLLCDFL.js} +39 -39
- package/dist/cli-bundle/chunks/{chunk-GAU55CWI.js → chunk-4UPZLUT2.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-25KTCTBL.js → chunk-6OJVQ7SW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-445ARBKY.js → chunk-7TAGYNFP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GOWZEBTH.js → chunk-AUS6USO4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YDIGMRLZ.js → chunk-IEP3VAT5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3IB4THWX.js → chunk-JX6WCCHL.js} +6 -6
- package/dist/cli-bundle/chunks/chunk-LC6WEA5U.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-CZ3VJJEA.js → chunk-LKGQUZ5M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-P7ZSJOWH.js → chunk-OKVDVERQ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-COFQCKF4.js → chunk-TSF2LPIH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YABJDOOX.js → chunk-V5UGBYHN.js} +3 -3
- package/dist/cli-bundle/chunks/{register-list-query-IZ7ZVTDE.js → register-list-query-6PAJ4PBU.js} +4 -4
- package/dist/cli-bundle/chunks/{register-mutation-IPAZTFDZ.js → register-mutation-RZCXZXYS.js} +4 -4
- package/dist/cli-bundle/chunks/{register-operations-APN33LNI.js → register-operations-GK6VU2H2.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-ASEMNMBF.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-KRIHJH5U.js → chunk-6J2YCGSN.js} +5 -5
- package/dist/cli-bundle/focused-chunks/{chunk-XKH2FC5D.js → chunk-6UNKK3UH.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-NRHTXBTI.js → chunk-DQ3MB7BO.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-PMPFLA6X.js → chunk-E7LYK7V5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-GZD4ZYIB.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-KMPKKSA6.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-TLF6N56J.js → chunk-LBDWUHQD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-UIFVIE5F.js → chunk-MILJCOFJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-MK5AKKHK.js → chunk-NETVXIH5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-Q355NPLH.js → chunk-NWRVNHAD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-IXNNMP2R.js → chunk-NZAG7OKB.js} +12 -12
- package/dist/cli-bundle/focused-chunks/{chunk-OY3VHCTX.js → chunk-OJKJFDIG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-OJRX6G22.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-NVVB2HJC.js → chunk-PDVL7QYU.js} +16 -16
- package/dist/cli-bundle/focused-chunks/{chunk-O7MIBEMK.js → chunk-QO4MTAEA.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ABA3KRPY.js → chunk-SMADBUPL.js} +2 -2
- package/dist/cli-bundle/main.js +21 -21
- 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 +20 -20
- 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 +46 -46
- 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/search/embedding-batches.d.ts +47 -15
- package/dist/core/search/embedding-batches.js +1 -1
- package/dist/core/search/eval-thresholds.d.ts +14 -0
- package/dist/core/search/eval-thresholds.js +2 -0
- package/dist/core/search/eval.d.ts +4 -1
- package/dist/core/search/eval.js +1 -1
- package/dist/core/search/http-client.d.ts +7 -0
- package/dist/core/search/http-client.js +1 -1
- package/dist/sdk/agent-capability-contracts.js +1 -1
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/completion/shared.d.ts +1 -1
- package/dist/sdk/completion/shared.js +1 -1
- package/dist/sdk/eval.d.ts +19 -17
- package/dist/sdk/eval.js +1 -1
- 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/reindex.d.ts +4 -1
- package/dist/sdk/governance/reindex.js +2 -2
- 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/public-surface.json +1 -1
- package/dist/sdk/query/complete-list.js +1 -1
- package/dist/sdk/query.d.ts +3 -0
- package/dist/sdk/query.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-contracts.js +1 -1
- package/dist/sdk/runtime/schema-preview.d.ts +2 -0
- package/dist/sdk/runtime/schema-preview.js +2 -0
- package/dist/sdk/runtime/schema.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime-primitives.d.ts +2 -1
- package/dist/sdk/runtime-primitives.js +1 -1
- package/docs/CLI_GRAMMAR.md +31 -0
- package/docs/CODEX_PLUGIN.md +8 -0
- package/docs/EXTENSION_LIFECYCLE.md +18 -0
- package/docs/README.md +1 -0
- package/docs/RELEASING.md +51 -2
- package/docs/SEARCH_QUALITY.md +116 -0
- 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 +14 -7
- package/marketplace.json +2 -2
- package/package.json +2 -2
- 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 +1 -1
- package/plugins/pm-claude/README.md +5 -1
- 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/skills/pm-developer/SKILL.md +20 -143
- package/plugins/pm-claude/skills/pm-developer/agents/openai.yaml +4 -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/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-JDHWZYZU.js +0 -238
- package/dist/cli-bundle/chunks/register-setup-HPHIKG5U.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-HQPTDJLF.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-V2X37U6J.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-Y2M4QLAA.js +0 -20
package/docs/CLI_GRAMMAR.md
CHANGED
|
@@ -192,3 +192,34 @@ command migration.
|
|
|
192
192
|
Full discovery uses a uniform destination table. Its `reason` column contains
|
|
193
193
|
the rationale for exceptions and an empty string where no exception applies,
|
|
194
194
|
so adding a rationale does not expand every row into repeated field names.
|
|
195
|
+
|
|
196
|
+
## Workspace customization and optional authoring
|
|
197
|
+
|
|
198
|
+
Tracked by [pm-npr3](../.agents/pm/tasks/pm-npr3.toon) and
|
|
199
|
+
[pm-uk9dwh](../.agents/pm/tasks/pm-uk9dwh.toon).
|
|
200
|
+
|
|
201
|
+
| Canonical command | Compatibility spelling | Responsibility |
|
|
202
|
+
| --- | --- | --- |
|
|
203
|
+
| `workspace init` | `init` | Bootstrap storage, settings, and optional guidance |
|
|
204
|
+
| `workspace config` | `config` | Read or change individual project/global settings |
|
|
205
|
+
| `workspace schema` | `schema` | Define types, statuses, fields, and validation contracts |
|
|
206
|
+
| `workspace profile` | `profile` | Apply reusable bundles of schema, settings, and templates |
|
|
207
|
+
|
|
208
|
+
These facets share workspace ownership. Schema defines what records mean;
|
|
209
|
+
configuration sets operating policy; profiles compose those primitives for a
|
|
210
|
+
domain; initialization creates their storage. The original SDK methods and MCP
|
|
211
|
+
actions keep their names and semantics. Root spellings remain permanent silent
|
|
212
|
+
aliases, including their arguments and flags.
|
|
213
|
+
|
|
214
|
+
`templates` remains owned by the optional templates package, within the workspace
|
|
215
|
+
authoring family. Its list/save/show operations provide reusable creation defaults;
|
|
216
|
+
they do not define schema or replace profiles. The destination census declares
|
|
217
|
+
these optional paths even when the package is inactive. `guide` remains owned by
|
|
218
|
+
`guide-shell` within the help family, so reading documentation is not a prerequisite
|
|
219
|
+
for core operation. `workspace position` and `workspace snapshot` retain their
|
|
220
|
+
existing state and recovery roles.
|
|
221
|
+
|
|
222
|
+
The bounded orientation sequence remains `pm context --for orient`, followed by
|
|
223
|
+
`pm contracts --command "workspace schema" --flags-only` (or the relevant command).
|
|
224
|
+
Use `pm workspace --help` to discover customization facets. No additional core noun
|
|
225
|
+
or mandatory package is introduced.
|
package/docs/CODEX_PLUGIN.md
CHANGED
|
@@ -7,6 +7,14 @@ MCP server. Its cached runtime installs the exact version declared by the plugin
|
|
|
7
7
|
audit, verified gaps, and phased remediation plan are documented in
|
|
8
8
|
[Native ChatGPT and Codex Plugin Implementation Plan](CHATGPT_CODEX_PLUGIN_IMPLEMENTATION.md).
|
|
9
9
|
|
|
10
|
+
The portable package uses root `plugin.json` and `mcp.json`. The existing
|
|
11
|
+
`.codex-plugin/plugin.json` and `.mcp.json` remain compatibility manifests for
|
|
12
|
+
older hosts. The portable MCP entry launches the same exact-version cached
|
|
13
|
+
server as the compatibility entry. `pnpm version:check` and the release
|
|
14
|
+
provenance gate cover both versioned plugin manifests. The five portable skills
|
|
15
|
+
are generated from `templates/agent-skills/` into both plugin bundles, with
|
|
16
|
+
static drift checking before release.
|
|
17
|
+
|
|
10
18
|
## Install From This Repo
|
|
11
19
|
|
|
12
20
|
```bash
|
|
@@ -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/README.md
CHANGED
|
@@ -38,6 +38,7 @@ pm guide release --json
|
|
|
38
38
|
- [Context and Operations Namespaces](COMMAND_NAMESPACES.md) - native navigation, diagnostics, event streams, and compatibility aliases.
|
|
39
39
|
- [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.
|
|
40
40
|
- [Configuration](CONFIGURATION.md) - settings, storage formats, output, search, validation, and environment variables.
|
|
41
|
+
- [Semantic Batching and Retrieval Quality](SEARCH_QUALITY.md) - independent request bounds, execution receipts, and per-query quality floors.
|
|
41
42
|
- [Testing](TESTING.md) - sandbox-safe local tests and linked-test orchestration.
|
|
42
43
|
- [Completion Portability and Bounded Replication Checks](VALIDATION_PORTABILITY.md) - literal Bash choices across versions and locales, and semantic Git diff collection.
|
|
43
44
|
- [Build and Release Acceptance](BUILD_AND_RELEASE_ACCEPTANCE.md) - complete-build leases and cross-platform registry installation controls.
|
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
|
|
@@ -282,7 +327,11 @@ The automatic release commit is the sole non-identical-tree derivation. The
|
|
|
282
327
|
gate requires one parent, the canonical release subject and body, an immutable
|
|
283
328
|
`v<version>` tag resolving to the candidate, the complete expected manifest
|
|
284
329
|
inventory, exact old-version to new-version substitutions in every manifest,
|
|
285
|
-
and an exact `Unreleased` changelog-heading replacement.
|
|
330
|
+
and an exact `Unreleased` changelog-heading replacement. Fixed distribution
|
|
331
|
+
paths come from the same inventory as version synchronization and staging.
|
|
332
|
+
Plugin runtime package manifests are mandatory when present in the immutable
|
|
333
|
+
parent tree; historical parents that predate those files remain verifiable.
|
|
334
|
+
The package-generated
|
|
286
335
|
replacement may be `## <version>` or the historical
|
|
287
336
|
`## <version> - <YYYY-MM-DD>` form, with the date matching the calendar version.
|
|
288
337
|
The complete heading must match and every other changelog byte must remain
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Semantic Batching and Retrieval Quality
|
|
2
|
+
|
|
3
|
+
Tracked by [pm-vjgqj5](../.agents/pm/issues/pm-vjgqj5.toon) and
|
|
4
|
+
[pm-p1g43q](../.agents/pm/features/pm-p1g43q.toon).
|
|
5
|
+
|
|
6
|
+
## Agent Quick Context
|
|
7
|
+
|
|
8
|
+
Use `pm reindex --mode semantic --progress` to refresh stale embeddings and
|
|
9
|
+
`pm eval --queries ./queries.json --k 10` to measure retrieval. A successful
|
|
10
|
+
index refresh proves that vectors were written, not that relevant items rank
|
|
11
|
+
well. Evaluate quality separately.
|
|
12
|
+
|
|
13
|
+
## Independent Input and Request Limits
|
|
14
|
+
|
|
15
|
+
The built-in scheduler preserves `search.embedding_batch_size` as the maximum
|
|
16
|
+
number of input positions per planned batch. Per-input text truncation still
|
|
17
|
+
uses `search.embedding_corpus_max_characters` or the provider default.
|
|
18
|
+
|
|
19
|
+
Requests additionally have a 256 KiB encoded JSON byte ceiling. This counts
|
|
20
|
+
UTF-8, JSON escaping, array separators, and model metadata; it is independent of
|
|
21
|
+
the per-input character limit. OpenAI's single-string encoding and duplicate
|
|
22
|
+
input elimination can make the actual payload smaller than this conservative
|
|
23
|
+
planning bound. An individual input that cannot fit is refused before any
|
|
24
|
+
request is sent. Empty inputs are also refused rather than silently shifting
|
|
25
|
+
vector positions.
|
|
26
|
+
|
|
27
|
+
SDK hosts may supply `maxRequestBytes` to
|
|
28
|
+
`executeEmbeddingBatchesWithRetry`, exported by
|
|
29
|
+
`@unbrained/pm-cli/sdk/query`. The request ceiling is a transport
|
|
30
|
+
bound, not a model tokenizer or context-window claim. Model input limits remain
|
|
31
|
+
provider-owned. [Ollama's embedding API](https://docs.ollama.com/api/embed)
|
|
32
|
+
accepts arrays of inputs and describes its own context truncation behavior.
|
|
33
|
+
|
|
34
|
+
HTTP 413 and timeout failures split a multi-input batch in half. Both halves
|
|
35
|
+
complete in source order. Other failures use the configured bounded retry
|
|
36
|
+
policy. A singleton failure terminates the operation; failed execution never
|
|
37
|
+
returns a partial vector array. Sequential execution avoids creating a burst
|
|
38
|
+
of concurrent requests against a local embedding model.
|
|
39
|
+
|
|
40
|
+
HTTP status takes precedence over response text: a non-413 error containing
|
|
41
|
+
the word "timeout" does not trigger splitting. For a planned batch of `n`
|
|
42
|
+
positions, binary subdivision creates at most `2n - 1` request nodes, each
|
|
43
|
+
with at most `scanner_max_batch_retries + 1` attempts. SDK hosts accepting
|
|
44
|
+
untrusted workloads should constrain corpus size, retry settings and the
|
|
45
|
+
caller-supplied byte ceiling to their provider budget; this primitive does not
|
|
46
|
+
impose a universal account-level quota.
|
|
47
|
+
|
|
48
|
+
`pm reindex` exposes `semantic.batching` for built-in providers:
|
|
49
|
+
|
|
50
|
+
- `planned_batches` counts batches before adaptation;
|
|
51
|
+
- `requests`, `successful_batches`, `split_batches`, and `retries` describe
|
|
52
|
+
actual execution;
|
|
53
|
+
- `batch_size_histogram` counts successful requests by input positions;
|
|
54
|
+
- `elapsed_ms` and `inputs_per_second` include retry backoff;
|
|
55
|
+
- `provider`, `model`, `max_request_bytes`, and `limit_source` explain the run.
|
|
56
|
+
|
|
57
|
+
These receipts contain no input text, credentials, or endpoint addresses.
|
|
58
|
+
Empty work retains the existing empty result; extension providers do not
|
|
59
|
+
receive a fabricated built-in batching receipt.
|
|
60
|
+
|
|
61
|
+
## Per-query Quality Floors
|
|
62
|
+
|
|
63
|
+
A golden query may declare a `minimum` object containing any of `ndcg`, `mrr`,
|
|
64
|
+
`precision`, and `recall`. Each value must be a finite number in `[0, 1]`.
|
|
65
|
+
Unknown metric names fail validation so a spelling error cannot remove a gate.
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
[
|
|
69
|
+
{
|
|
70
|
+
"query": "snapshot restore durability",
|
|
71
|
+
"relevant_ids": ["pm-snapshot", "pm-restore"],
|
|
72
|
+
"mode": "keyword",
|
|
73
|
+
"minimum": { "recall": 0.5, "mrr": 0.5 }
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Replace the example IDs with judgments from your workspace. `pm eval` compares
|
|
79
|
+
unrounded scores to these floors and reports `violations` on the affected query.
|
|
80
|
+
It exits nonzero if any floor fails, even when no `--fail-under` is supplied or
|
|
81
|
+
the aggregate nDCG passes. Existing query sets without floors retain their
|
|
82
|
+
aggregate-only behavior. The public query SDK exports `parseEvalMetricFloors`
|
|
83
|
+
and `evaluateMetricFloors` for package-owned evaluations.
|
|
84
|
+
|
|
85
|
+
The repository's `quality:retrieval-eval` gate also pins floors by query text
|
|
86
|
+
and retrieval mode. Missing, unexpected or duplicated identities and mismatched
|
|
87
|
+
declared row counts fail. Explicit
|
|
88
|
+
`--update` refreshes never lower a prior floor or discard a missing required
|
|
89
|
+
query. A baseline update is a reviewed policy change; it is not permission to
|
|
90
|
+
change relevance judgments until a score turns green.
|
|
91
|
+
|
|
92
|
+
## Verification Boundaries
|
|
93
|
+
|
|
94
|
+
Real loopback HTTP tests exercise batching, Unicode payloads, 413 recovery,
|
|
95
|
+
vector ordering, and pre-dispatch refusal. Evaluator tests exercise the case
|
|
96
|
+
where the macro average passes while one query fails. These are transport and
|
|
97
|
+
quality-contract proofs, not measured million-item model throughput, semantic
|
|
98
|
+
ranking improvements, parallel scheduling, or durable partial-run resume.
|
|
99
|
+
Those broader acceptance criteria remain tracked by the linked items.
|
|
100
|
+
|
|
101
|
+
## Portable Delivery Evidence
|
|
102
|
+
|
|
103
|
+
Workspace-owned custom types used by delivery records must be declared in the
|
|
104
|
+
tracked project schema. An ignored local extension installation does not make
|
|
105
|
+
its types available to a fresh CI checkout. This repository declares `Changeset`
|
|
106
|
+
in `schema/types.json` through `pm schema add-type`, and verifies changelog output
|
|
107
|
+
in a clean checkout with only the published changelog package installed.
|
|
108
|
+
|
|
109
|
+
Schema `--dry-run` applies to rename/remap migrations and workflow-policy
|
|
110
|
+
actions. Other schema operations refuse the flag before writing, through the
|
|
111
|
+
shared SDK guard used by CLI and SDK/MCP dispatch. For example,
|
|
112
|
+
`pm schema rename-type Spike --to Experiment --dry-run` previews a migration;
|
|
113
|
+
`pm schema add-type Spike --dry-run` is refused. Adding a type is an explicit
|
|
114
|
+
write operation. Tracked by [pm-s74dca](../.agents/pm/issues/pm-s74dca.toon).
|
|
115
|
+
SDK hosts can reuse `assertSchemaPreviewSupported(subcommand, dryRun)` from
|
|
116
|
+
`@unbrained/pm-cli/sdk` when dispatching built-in schema operations.
|
|
@@ -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: 385
|
|
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: 366
|
|
12
|
+
- Coverage fraction: 0.049351
|
|
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
|
| --- | --- | --- | --- | --- |
|
|
@@ -96,6 +96,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
96
96
|
| `extension_mutation_guard_invalid_denial` | `extension_mutation_guard_invalid_denial` | uncovered | none | 0 |
|
|
97
97
|
| `extension_mutation_guard_timed_out` | `extension_mutation_guard_timed_out` | uncovered | none | 0 |
|
|
98
98
|
| `extension_update_health_partial_coverage` | `extension_update_health_partial_coverage` | uncovered | none | 0 |
|
|
99
|
+
| `extensions_unreadable` | `extensions_unreadable` | uncovered | none | 0 |
|
|
99
100
|
| `field_duplicate` | `field_duplicate` | uncovered | none | 0 |
|
|
100
101
|
| `field_invalid` | `field_invalid` | uncovered | none | 0 |
|
|
101
102
|
| `field_mcp_input_collision` | `field_mcp_input_collision` | uncovered | none | 0 |
|
|
@@ -189,8 +190,12 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
189
190
|
| `locks_stale_count` | `locks_stale_count` | uncovered | none | 0 |
|
|
190
191
|
| `locks_unreadable` | `locks_unreadable` | uncovered | none | 0 |
|
|
191
192
|
| `malformed_plan_step_evidence` | `malformed_plan_step_evidence` | uncovered | none | 0 |
|
|
193
|
+
| `managed_state_invalid` | `managed_state_invalid` | uncovered | none | 0 |
|
|
194
|
+
| `managed_state_unreadable` | `managed_state_unreadable` | uncovered | none | 0 |
|
|
192
195
|
| `manifest_capabilities_absent` | `manifest_capabilities_absent` | uncovered | none | 0 |
|
|
196
|
+
| `manifest_invalid` | `manifest_invalid` | uncovered | none | 0 |
|
|
193
197
|
| `manifest_unknown_key` | `manifest_unknown_key` | executable | owned_state | 1 |
|
|
198
|
+
| `manifest_unreadable` | `manifest_unreadable` | uncovered | none | 0 |
|
|
194
199
|
| `mcp_annotation_file_unavailable` | `mcp_annotation_file_unavailable` | uncovered | none | 0 |
|
|
195
200
|
| `mcp_stdin_unavailable` | `mcp_stdin_unavailable` | uncovered | none | 0 |
|
|
196
201
|
| `mcp_task_not_found_or_not_authorized` | `mcp_task_not_found_or_not_authorized` | uncovered | none | 0 |
|
|
@@ -216,7 +221,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
216
221
|
| `missing_parameter_alias` | `missing_parameter_alias` | uncovered | none | 0 |
|
|
217
222
|
| `missing_positive_execution_receipt` | `missing_positive_execution_receipt` | uncovered | none | 0 |
|
|
218
223
|
| `missing_probe` | `missing_probe` | uncovered | none | 0 |
|
|
219
|
-
| `missing_required_argument` | `missing_required_argument` | executable | grammar |
|
|
224
|
+
| `missing_required_argument` | `missing_required_argument` | executable | grammar | 77 |
|
|
220
225
|
| `missing_required_option` | `missing_required_option` | uncovered | none | 0 |
|
|
221
226
|
| `missing_suggested_retry` | `missing_suggested_retry` | uncovered | none | 0 |
|
|
222
227
|
| `missing_suggested_retry_args` | `missing_suggested_retry_args` | uncovered | none | 0 |
|
|
@@ -274,10 +279,12 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
274
279
|
| `retry_failed` | `retry_failed` | uncovered | none | 0 |
|
|
275
280
|
| `schema_migration_input_required` | `schema_migration_input_required` | uncovered | none | 0 |
|
|
276
281
|
| `semantic_spelling_collision` | `semantic_spelling_collision` | uncovered | none | 0 |
|
|
282
|
+
| `settings_invalid` | `settings_invalid` | uncovered | none | 0 |
|
|
277
283
|
| `settings_read_fs_error` | `settings_read_fs_error` | uncovered | none | 0 |
|
|
278
284
|
| `settings_read_invalid_json` | `settings_read_invalid_json` | uncovered | none | 0 |
|
|
279
285
|
| `settings_read_invalid_schema` | `settings_read_invalid_schema` | uncovered | none | 0 |
|
|
280
286
|
| `settings_read_merge_failed` | `settings_read_merge_failed` | uncovered | none | 0 |
|
|
287
|
+
| `settings_unreadable` | `settings_unreadable` | uncovered | none | 0 |
|
|
281
288
|
| `stale_budget` | `stale_budget` | uncovered | none | 0 |
|
|
282
289
|
| `stale_destination` | `stale_destination` | uncovered | none | 0 |
|
|
283
290
|
| `stale_observed_signature` | `stale_observed_signature` | uncovered | none | 0 |
|
|
@@ -318,13 +325,13 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
|
|
|
318
325
|
| `unknown_field` | `unknown_field` | uncovered | none | 0 |
|
|
319
326
|
| `unknown_field_projection` | `unknown_field_projection` | executable | closed_domain | 10 |
|
|
320
327
|
| `unknown_item_type` | `unknown_item_type` | uncovered | none | 0 |
|
|
321
|
-
| `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state |
|
|
328
|
+
| `unknown_lifecycle_action` | `unknown_subcommand` | executable | grammar, owned_state | 14 |
|
|
322
329
|
| `unknown_noun` | `unknown_noun` | uncovered | none | 0 |
|
|
323
330
|
| `unknown_option` | `unknown_option` | executable | owned_state | 1 |
|
|
324
331
|
| `unknown_plan_template` | `unknown_plan_template` | uncovered | none | 0 |
|
|
325
332
|
| `unknown_provenance_dimension` | `unknown_provenance_dimension` | uncovered | none | 0 |
|
|
326
333
|
| `unknown_status` | `unknown_status` | uncovered | none | 0 |
|
|
327
|
-
| `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state |
|
|
334
|
+
| `unknown_subcommand` | `unknown_subcommand` | executable | grammar, owned_state | 14 |
|
|
328
335
|
| `unsafe_init_recovery` | `unsafe_init_recovery` | uncovered | none | 0 |
|
|
329
336
|
| `unsupported_update_option` | `unsupported_update_option` | uncovered | none | 0 |
|
|
330
337
|
| `validate_command_references_stale_pm_ids` | `validate_command_references_stale_pm_ids` | uncovered | none | 0 |
|
package/marketplace.json
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
|
|
9
|
-
"version": "2026.9.
|
|
9
|
+
"version": "2026.9.27"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "pm-claude",
|
|
14
14
|
"source": "./plugins/pm-claude",
|
|
15
15
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
16
|
-
"version": "2026.9.
|
|
16
|
+
"version": "2026.9.27",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "unbrained",
|
|
19
19
|
"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.27",
|
|
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",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-digital-twin",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.27",
|
|
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,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-claude",
|
|
3
3
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 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.",
|
|
4
|
-
"version": "2026.9.
|
|
4
|
+
"version": "2026.9.27",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|
|
@@ -13,6 +13,10 @@ Native pm CLI integration for Claude Code. Use pm project management tools direc
|
|
|
13
13
|
| **Hybrid TUI tracking** | pm items sync to Claude Code's task panel — pm is the persistent store, the task panel is the live session view |
|
|
14
14
|
| **Session hook** | Injects active pm item summary at session start using the same pinned pm-cli runtime as the MCP server |
|
|
15
15
|
|
|
16
|
+
The five skills are generated from the shared portable source in
|
|
17
|
+
`templates/agent-skills/`. Both plugin packages carry identical workflow
|
|
18
|
+
guidance; the Claude task panel mapping is conditional on its tools.
|
|
19
|
+
|
|
16
20
|
## Installation
|
|
17
21
|
|
|
18
22
|
### Option A: Plugin marketplace — canonical install (recommended)
|
|
@@ -177,7 +181,7 @@ Spawn pm-triage-agent to set up the pm item for: add OAuth2 login support
|
|
|
177
181
|
|
|
178
182
|
## Hybrid TUI Sync Pattern
|
|
179
183
|
|
|
180
|
-
|
|
184
|
+
Claude commands can mirror claimed items with this pattern:
|
|
181
185
|
|
|
182
186
|
```
|
|
183
187
|
1. pm_claim → [pm stores claim]
|