@unbrained/pm-cli 2026.8.11 → 2026.8.12
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 +2 -2
- package/CHANGELOG.md +52 -21
- package/dist/cli/commander-usage.js +37 -11
- package/dist/cli/error-guidance.d.ts +2 -0
- package/dist/cli/error-guidance.js +80 -13
- package/dist/cli/main.js +34 -19
- package/dist/cli/register-annotations.js +56 -3
- package/dist/cli/register-list-query.js +10 -7
- package/dist/cli/register-operations.js +16 -6
- package/dist/cli-bundle/bundle-manifest.json +157 -157
- package/dist/cli-bundle/chunks/{chunk-2OOU2AFH.js → chunk-3PS7X6GS.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-7KL6KMWF.js +13 -0
- package/dist/cli-bundle/chunks/{chunk-WMEZHCFI.js → chunk-BM5YJ2UW.js} +51 -43
- package/dist/cli-bundle/chunks/chunk-D55A5AEN.js +33 -0
- package/dist/cli-bundle/chunks/chunk-KIKDWECH.js +196 -0
- package/dist/cli-bundle/chunks/{chunk-ZU34C3LH.js → chunk-KOQMGCTA.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-R76342NV.js +2 -0
- package/dist/cli-bundle/chunks/chunk-RBTK5EZV.js +5 -0
- package/dist/cli-bundle/chunks/{chunk-IUNRVDAI.js → chunk-VLUQOIDT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-A2SJGHSI.js → chunk-WLAHPSOX.js} +2 -2
- package/dist/cli-bundle/chunks/register-list-query-XPCJRUUD.js +10 -0
- package/dist/cli-bundle/chunks/register-mutation-4RJCBKRS.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-2OGISOVR.js +2 -0
- package/dist/cli-bundle/chunks/{register-setup-NOCOOWQY.js → register-setup-LLHAKP2V.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-2DALMVF7.js +5 -0
- package/dist/cli-bundle/focused-chunks/chunk-5OQIMELN.js +155 -0
- package/dist/cli-bundle/focused-chunks/chunk-5TAGTDRE.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-FPSYO5ZG.js → chunk-ECADZMVC.js} +11 -11
- package/dist/cli-bundle/focused-chunks/chunk-EJGXRA6B.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-FFGSZCPK.js +16 -0
- package/dist/cli-bundle/focused-chunks/{chunk-BKPIY34S.js → chunk-GQW4BPUT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-ISKOBJCM.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-UDAZWT25.js → chunk-JAFRIWVF.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-2DL3MRTD.js → chunk-KHM2CS2C.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-J5EKAIVD.js → chunk-KPSXVBDV.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-23FTGO3W.js → chunk-KTLOKKCQ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-LGYK3NUF.js +8 -0
- package/dist/cli-bundle/focused-chunks/{chunk-KDH5OX3D.js → chunk-NBLUKITQ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-55BIB6DV.js → chunk-NYLOUPOB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-DPO7TEFX.js → chunk-Q4T463SD.js} +28 -28
- package/dist/cli-bundle/focused-chunks/chunk-QVZVY53N.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-TL5M2PAY.js → chunk-RWPAWUOT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-UTEWXDEQ.js +17 -0
- package/dist/cli-bundle/focused-chunks/{chunk-4H5IA6AV.js → chunk-YIAXMC3T.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-ZMGWAYH7.js +2 -0
- package/dist/cli-bundle/main.js +13 -13
- 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 +40 -40
- 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 +1 -1
- 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 +2 -2
- package/dist/core/extensions/reserved-host-flags.js +3 -2
- package/dist/core/history/drift-scan.js +13 -8
- package/dist/core/history/history.d.ts +8 -0
- package/dist/core/history/history.js +57 -7
- package/dist/core/history/replay.d.ts +9 -1
- package/dist/core/history/replay.js +48 -13
- package/dist/core/output/output.d.ts +2 -0
- package/dist/core/output/output.js +46 -14
- package/dist/core/shared/command-types.d.ts +2 -0
- package/dist/core/shared/command-types.js +2 -2
- package/dist/core/shared/errors.d.ts +5 -0
- package/dist/core/shared/errors.js +2 -2
- package/dist/core/store/item-metadata-cache.d.ts +1 -1
- package/dist/core/store/item-metadata-cache.js +14 -7
- package/dist/sdk/cli-bootstrap.d.ts +2 -0
- package/dist/sdk/cli-bootstrap.js +6 -2
- package/dist/sdk/cli-contracts/completeness.js +3 -2
- package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
- package/dist/sdk/cli-contracts/registration-helpers.d.ts +20 -3
- package/dist/sdk/cli-contracts/registration-helpers.js +18 -12
- package/dist/sdk/cli-contracts/schemas/assurance-definition.d.ts +8 -6
- package/dist/sdk/cli-contracts/schemas/assurance-definition.js +4 -3
- package/dist/sdk/cli-contracts/tool-option-contracts.js +3 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +22 -2
- package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
- package/dist/sdk/cli-contracts/tool-schema.js +7 -4
- package/dist/sdk/cli-program.js +3 -2
- package/dist/sdk/completion.js +16 -7
- package/dist/sdk/context-intent-contracts.js +45 -4
- package/dist/sdk/core.d.ts +1 -0
- package/dist/sdk/core.js +3 -2
- package/dist/sdk/generated/generated-error-code-catalog-part-1.d.ts +8 -0
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1585 -0
- package/dist/sdk/generated/generated-error-code-catalog-part-2.d.ts +8 -0
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1608 -0
- package/dist/sdk/generated-error-code-catalog.js +6 -3140
- package/dist/sdk/governance/assurance-action.js +9 -7
- package/dist/sdk/governance/assurance-mutation-error.d.ts +7 -0
- package/dist/sdk/governance/assurance-mutation-error.js +35 -0
- package/dist/sdk/governance/assurance-runtime.js +11 -8
- package/dist/sdk/governance/assurance.d.ts +12 -6
- package/dist/sdk/governance/assurance.js +181 -66
- package/dist/sdk/governance/health.d.ts +3 -1
- package/dist/sdk/governance/health.js +21 -4
- package/dist/sdk/governance/validate-item-reader.js +3 -3
- package/dist/sdk/governance/validate.d.ts +2 -0
- package/dist/sdk/governance/validate.js +13 -3
- package/dist/sdk/graph/durable-cache.d.ts +1 -1
- package/dist/sdk/graph/durable-cache.js +98 -29
- package/dist/sdk/graph/governance.d.ts +14 -0
- package/dist/sdk/graph/governance.js +34 -9
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.js +3 -3
- package/dist/sdk/lifecycle/claim.js +10 -3
- package/dist/sdk/merge/driver.d.ts +2 -2
- package/dist/sdk/merge/driver.js +3 -3
- package/dist/sdk/merge/receipts.d.ts +6 -4
- package/dist/sdk/merge/receipts.js +7 -5
- package/dist/sdk/merge/three-way.d.ts +2 -2
- package/dist/sdk/merge/three-way.js +3 -3
- package/dist/sdk/output-projection.d.ts +9 -1
- package/dist/sdk/output-projection.js +45 -9
- package/dist/sdk/query/activity.d.ts +49 -2
- package/dist/sdk/query/activity.js +183 -37
- package/dist/sdk/query/get.js +19 -2
- package/dist/sdk/read-output-contracts.d.ts +5 -1
- package/dist/sdk/read-output-contracts.js +17 -2
- package/dist/sdk/read-output-session.d.ts +2 -0
- package/dist/sdk/read-output-session.js +12 -5
- package/dist/sdk/runtime-primitives.d.ts +3 -3
- package/dist/sdk/runtime-primitives.js +5 -5
- package/dist/sdk/runtime-stats-options.js +3 -2
- package/dist/sdk/runtime.js +5 -9
- package/dist/sdk/stats.d.ts +36 -3
- package/dist/sdk/stats.js +55 -15
- package/dist/sdk/test/execution.d.ts +4 -0
- package/dist/sdk/test/execution.js +86 -21
- package/dist/types.d.ts +2 -0
- package/dist/types.js +2 -2
- package/docs/ASSURANCE.md +17 -12
- package/docs/COMMANDS.md +29 -8
- package/docs/CONFIGURATION.md +7 -0
- package/docs/DEPENDENCY_KIND_CONTRACT.md +10 -8
- package/docs/MERGE_SAFETY.md +3 -1
- package/docs/OUTPUT_PROJECTION_CONTRACTS.md +26 -13
- package/docs/README.md +2 -0
- package/docs/READ_OUTPUT_CONTRACTS.md +17 -2
- package/docs/SDK_AGENT_SESSION_CONTEXT.md +12 -1
- package/docs/SDK_CONTEXT_EVIDENCE_CONTRACTS.md +53 -0
- package/docs/SDK_CONTEXT_INTEGRITY.md +28 -1
- package/docs/TRUSTWORTHY_CONTEXT_EVIDENCE.md +106 -0
- package/docs/performance/sdk-entrypoint-import-costs.md +6 -2
- package/marketplace.json +2 -2
- package/package.json +5 -5
- 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-codex/.codex-plugin/plugin.json +1 -1
- package/sdk/public-surface.json +203 -52
- package/dist/cli-bundle/chunks/chunk-2RA2YTHJ.js +0 -33
- package/dist/cli-bundle/chunks/chunk-DSKYD4LG.js +0 -13
- package/dist/cli-bundle/chunks/chunk-HC3GM6YY.js +0 -194
- package/dist/cli-bundle/chunks/chunk-W7CPZGSB.js +0 -2
- package/dist/cli-bundle/chunks/chunk-ZXOC6HG5.js +0 -5
- package/dist/cli-bundle/chunks/register-list-query-HAUXVUPY.js +0 -10
- package/dist/cli-bundle/chunks/register-mutation-7Y5U7ABT.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-EQX3DLAZ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-3AYKXMYX.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-4AHEC74N.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-4SV3ZKG3.js +0 -16
- package/dist/cli-bundle/focused-chunks/chunk-6JW6Z2P5.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-D4PIWE6D.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-E3KCL7AY.js +0 -5
- package/dist/cli-bundle/focused-chunks/chunk-ERAAFLPS.js +0 -153
- package/dist/cli-bundle/focused-chunks/chunk-F6E4JZKG.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-OJ3LVVIS.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-VABB4L5Y.js +0 -17
|
@@ -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.8.
|
|
9
|
+
"version": "2026.8.12"
|
|
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.8.
|
|
16
|
+
"version": "2026.8.12",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "unbrained",
|
|
19
19
|
"url": "https://github.com/unbraind/pm-cli"
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.8.12 - 2026-08-12
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Read-output session receipts can emit an invalid next_state after the served-item set crosses its own 10,000-ID input ceiling ([pm-b0v8fs](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-b0v8fs.toon))
|
|
8
|
+
- Linked pm test children inherit production Sentry environment and turn sandbox failures into release-blocking incidents ([pm-9aaji6](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-9aaji6.toon))
|
|
9
|
+
- SDK entrypoint import-cost gate false-fails on cold filesystem cache: single-shot fresh-process sampling exceeds the 30ms noise margin ([pm-cg1sjb](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-cg1sjb.toon))
|
|
10
|
+
- Legacy invalid provenance findings block health without a safe disposition path ([pm-5q8wa0](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-5q8wa0.toon))
|
|
11
|
+
- History drift scan hashes reordered linked-test projections ([pm-eax4y8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-eax4y8.toon))
|
|
12
|
+
- Linked-test removal must be lossless and observable for commands containing comma or equals delimiters ([pm-m0b7h8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-m0b7h8.toon))
|
|
13
|
+
- Annotation transposition recovery: detect pm <collection\> add <id\> before the item id is consumed as text ([pm-rncuf7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-rncuf7.toon))
|
|
14
|
+
- Health result contract parity: every checks\[\] row exposes a boolean ok beside its tri-state status ([pm-h97qxd](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-h97qxd.toon))
|
|
15
|
+
- The relationship ratchet bounds every edge kind that carries meaning and leaves the one kind that carries none unbounded, so the cheapest way to satisfy every graph guarantee is to add edges no algorithm can traverse ([pm-q6n8sj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-q6n8sj.toon))
|
|
16
|
+
- Assurance registry mutations and gate verdicts record author unknown while carrying the full detected provenance in the same entry, so the audit artifact fails the question it exists to answer ([pm-33mjrw](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-33mjrw.toon))
|
|
17
|
+
- Two assurance measurement sources answer from a projection that omits the fields they read, so a completeness gate reports zero missing evidence on a workspace with 874 items lacking it ([pm-py7qv2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-py7qv2.toon))
|
|
18
|
+
- Assurance mutation refusals cross the CLI as unclassified Sentry faults (PM-CLI-2Y/2Z/30) ([pm-v0a0un](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-v0a0un.toon))
|
|
19
|
+
- GH-976: version history hashes so repeated tests_add streams verify across supported pm versions ([pm-2htk4p](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-2htk4p.toon))
|
|
20
|
+
- GH-975: export isAlreadyClaimedError through a supported SDK subpath ([pm-hfqju5](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-hfqju5.toon))
|
|
21
|
+
- GH-974: merge receipt preferred contradicts retained side under stable_value_order ([pm-qckpnq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-qckpnq.toon))
|
|
22
|
+
- GH-971: health preflight collision diagnostics ignore declared command ownership ([pm-zryb9d](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zryb9d.toon))
|
|
23
|
+
- GH-969: brief item reads can exceed standard output because omission receipts bill empty fields ([pm-gok2km](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gok2km.toon))
|
|
24
|
+
- GH-970: repeated row contracts consume half of agent read output without a suppression contract ([pm-gjjurs](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gjjurs.toon))
|
|
25
|
+
- The output encoding named toon has no tabular array form, so every row collection pays three to five lines per row while the storage format beside it uses the encoding correctly ([pm-5y05kq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-5y05kq.toon))
|
|
26
|
+
- pm activity answers what happened to one item in the last half hour when the agent asked what changed in the workspace: 20 rows cover 5 of the 272 items touched in 24 hours and none carries a title ([pm-j1r8gl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-j1r8gl.toon))
|
|
27
|
+
- pm stats default output is dominated by rows that carry no information: 7 of 17 type buckets are zero, the status split agents actually need is missing, and the row contract costs more than the data ([pm-7nqo6b](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-7nqo6b.toon))
|
|
28
|
+
|
|
29
|
+
### Other
|
|
30
|
+
|
|
31
|
+
- Evaluate and refresh @sentry/node 10.70 with packed-consumer proof ([pm-fb0lkg](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-fb0lkg.toon))
|
|
32
|
+
- Refresh compatible tsx 4.23.12 and esbuild 0.28.2 patches ([pm-67b84b](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-67b84b.toon))
|
|
33
|
+
|
|
3
34
|
## 2026.8.11 - 2026-08-11
|
|
4
35
|
|
|
5
36
|
### Added
|
|
@@ -482,7 +513,6 @@
|
|
|
482
513
|
|
|
483
514
|
- Immutable-tree DeepScan and CodeFactor zero-new-issues release gate ([pm-39cqqx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-39cqqx.toon))
|
|
484
515
|
- Model-aware agent identity: detection resolves harness, model, and session so an agent never types an identity flag and history still records which model acted ([pm-03pq3o](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-03pq3o.toon))
|
|
485
|
-
- Author-resolution bypass class: create/copy and the context, next, and usage-feedback paths re-implement author precedence without harness detection, stamping author 'unknown' on new items ([pm-42p9nk](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-42p9nk.toon))
|
|
486
516
|
|
|
487
517
|
### Changed
|
|
488
518
|
|
|
@@ -509,6 +539,7 @@
|
|
|
509
539
|
- GH-690: plan resume and approve must apply or reject scope changes ([pm-bxdlfa](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-bxdlfa.toon))
|
|
510
540
|
- GH-688: seeded Plan creation must be atomic across ownership boundaries ([pm-96tter](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-96tter.toon))
|
|
511
541
|
- GH-679: linked-test output capture must not abort verbose child tools with EAGAIN ([pm-j36ypd](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-j36ypd.toon))
|
|
542
|
+
- Author-resolution bypass class: create/copy and the context, next, and usage-feedback paths re-implement author precedence without harness detection, stamping author 'unknown' on new items ([pm-42p9nk](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-42p9nk.toon))
|
|
512
543
|
- GH-706: accept bare conventional forms for create/update boolean metadata flags ([pm-ulb3rc](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ulb3rc.toon))
|
|
513
544
|
- GH-700/GH-701/GH-702: nightly Node 22 and cross-platform regression bundle ([pm-3x8w4m](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3x8w4m.toon))
|
|
514
545
|
- GH-704: make extension activation failures actionable at command and lifecycle boundaries ([pm-3ljt19](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3ljt19.toon))
|
|
@@ -688,7 +719,6 @@
|
|
|
688
719
|
|
|
689
720
|
### Added
|
|
690
721
|
|
|
691
|
-
- Merge-driver fence completeness: relationships/\*.jsonl event stores uncovered and schema-added custom type folders silently drop driver coverage ([pm-i4fx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-i4fx.toon))
|
|
692
722
|
- Tracker merge semantics: field-aware merge guidance, history-chain-safe JSONL merging, and post-merge reconciliation for multi-branch agent workflows ([pm-g5sx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-g5sx.toon))
|
|
693
723
|
- GH-613: public SDK bulk item-mutation helper on commitWorkspaceTransaction — atomic create/update/close batches without hand-rolled step+compensation wiring ([pm-y9hq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-y9hq.toon))
|
|
694
724
|
- GH-612: additive --add-ac/--remove-ac forms for acceptance criteria — replace-only --ac clobbers concurrent branch edits ([pm-xh82](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-xh82.toon))
|
|
@@ -696,6 +726,7 @@
|
|
|
696
726
|
|
|
697
727
|
### Fixed
|
|
698
728
|
|
|
729
|
+
- Merge-driver fence completeness: relationships/\*.jsonl event stores uncovered and schema-added custom type folders silently drop driver coverage ([pm-i4fx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-i4fx.toon))
|
|
699
730
|
- MERGE_SAFETY.md documented an invalid config invocation: 'pm config set project ids.token_length 6' exits 2 (scope must precede the verb) ([pm-46octv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-46octv.toon))
|
|
700
731
|
- GH-601: SDK mutation option bags and projected list items are Record<string,unknown\> — typos and wrong types compile clean under strict ([pm-x29o](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-x29o.toon))
|
|
701
732
|
- GH-600: item id generation not collision-safe across branches/concurrent agents (4 base36 chars, local-disk-only uniqueness) ([pm-pibw](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-pibw.toon))
|
|
@@ -813,7 +844,6 @@
|
|
|
813
844
|
|
|
814
845
|
- Promote history-stream maintenance primitives to the public SDK: history-redact, history-repair, history-compact (audited rewrite, re-anchor, checkpoint/prune) ([pm-4a7m](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-4a7m.toon))
|
|
815
846
|
- Context usage feedback signal: served-then-acted-on outcomes strengthen relevance scoring (retrieval-practice effect) ([pm-uwfs](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-uwfs.toon))
|
|
816
|
-
- GH-544: linked-file path anchoring — files/docs add/glob/discover/validate-paths resolve at process.cwd() while validate --check-files anchors at the workspace root ([pm-chyh](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-chyh.toon))
|
|
817
847
|
|
|
818
848
|
### Changed
|
|
819
849
|
|
|
@@ -834,6 +864,7 @@
|
|
|
834
864
|
- GH-534: no-op update reports phantom changed_fields in --json while TOON reports empty, and changed_field_count is always null in JSON ([pm-45mb](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-45mb.toon))
|
|
835
865
|
- GH-526: aggregate --sum/--avg accept unknown field names and silently report 0 ([pm-96vo](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-96vo.toon))
|
|
836
866
|
- GH-530: list --status <invalid\> silently returns count 0 — validate against the status domain like --type and search status: ([pm-kj4k](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-kj4k.toon))
|
|
867
|
+
- GH-544: linked-file path anchoring — files/docs add/glob/discover/validate-paths resolve at process.cwd() while validate --check-files anchors at the workspace root ([pm-chyh](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-chyh.toon))
|
|
837
868
|
- Separate active dangling dependency warnings from terminal historical reference diagnostics ([pm-2ler](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-2ler.toon))
|
|
838
869
|
|
|
839
870
|
### Other
|
|
@@ -1412,7 +1443,6 @@
|
|
|
1412
1443
|
|
|
1413
1444
|
### Added
|
|
1414
1445
|
|
|
1415
|
-
- Sentry PM-CLI-1R: 'cannot add command init as already have command init' — top-level init double-registration throws raw Commander error ([pm-zyez](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zyez.toon))
|
|
1416
1446
|
- GH-216: default lifecycle transition suggestions ([pm-y1z0](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-y1z0.toon))
|
|
1417
1447
|
- pm schema list-fields / show-field / add-field / remove-field: CLI management of schema/fields.json ([pm-vhbf](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-vhbf.toon))
|
|
1418
1448
|
- GH-245: schema add-type --infer from title prefixes ([pm-tb42](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-tb42.toon))
|
|
@@ -1422,6 +1452,10 @@
|
|
|
1422
1452
|
- GH-217: scheduling type creation shortcuts ([pm-76r5](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-76r5.toon))
|
|
1423
1453
|
- GH-258: strict unknown-key rejection across all structured CSV/markdown link & metadata parsers (validation parity with test --add) ([pm-0v9k](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-0v9k.toon))
|
|
1424
1454
|
|
|
1455
|
+
### Fixed
|
|
1456
|
+
|
|
1457
|
+
- Sentry PM-CLI-1R: 'cannot add command init as already have command init' — top-level init double-registration throws raw Commander error ([pm-zyez](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zyez.toon))
|
|
1458
|
+
|
|
1425
1459
|
### Other
|
|
1426
1460
|
|
|
1427
1461
|
- Document schema/fields.json runtime custom field authoring in CONFIGURATION.md ([pm-izx5](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-izx5.toon))
|
|
@@ -1636,7 +1670,6 @@
|
|
|
1636
1670
|
### Added
|
|
1637
1671
|
|
|
1638
1672
|
- MCP pm_health defaults to the compact summary projection for token-efficient agent health checks ([pm-yjub](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-yjub.toon))
|
|
1639
|
-
- pm-changelog classifier mis-routes feature titles containing the word 'remove'/'delete' into the Removed section ([pm-ybiz](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ybiz.toon))
|
|
1640
1673
|
- list/search: trim default filters/projection/sorting/now trailer in compact/agent mode ([pm-vhx6](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-vhx6.toon))
|
|
1641
1674
|
- Add schema show-status status inspection ([pm-qpus](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-qpus.toon))
|
|
1642
1675
|
|
|
@@ -1646,6 +1679,7 @@
|
|
|
1646
1679
|
|
|
1647
1680
|
### Fixed
|
|
1648
1681
|
|
|
1682
|
+
- pm-changelog classifier mis-routes feature titles containing the word 'remove'/'delete' into the Removed section ([pm-ybiz](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ybiz.toon))
|
|
1649
1683
|
- Fix inaccurate PR CI matrix description in CONTRIBUTING.md ([pm-t73k](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-t73k.toon))
|
|
1650
1684
|
- Fix: --path/PM_PATH did not discover .agents/pm under a project root (never-block dead-end) ([pm-ryik](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ryik.toon))
|
|
1651
1685
|
- MCP ping method not handled — returns 'Unsupported MCP method' instead of empty response ([pm-lold](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-lold.toon))
|
|
@@ -1721,7 +1755,6 @@
|
|
|
1721
1755
|
- Add pm stats --storage: aggregate history-stream metrics ([pm-mnee](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-mnee.toon))
|
|
1722
1756
|
- Add MCP protocol handshake tests (initialize + tools/list + unknown-tool error) ([pm-kl11](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-kl11.toon))
|
|
1723
1757
|
- Add narrow MCP tools pm_notes, pm_learnings, pm_deps (agent self-documentation + deps) ([pm-hywv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-hywv.toon))
|
|
1724
|
-
- Add pm gc --scope locks: sweep expired lock debris from crashed processes ([pm-d70h](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-d70h.toon))
|
|
1725
1758
|
- pm telemetry local-analytics subcommand (status/flush/stats/clear) ([pm-6xdl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-6xdl.toon))
|
|
1726
1759
|
- Add AGENTS.md/README workflow-update checkbox to the PR template ([pm-0sqs](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-0sqs.toon))
|
|
1727
1760
|
|
|
@@ -1734,6 +1767,7 @@
|
|
|
1734
1767
|
|
|
1735
1768
|
- MCP TOOL_SCHEMA_BASE additionalProperties:true silently swallows typo'd top-level args ([pm-qxwu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-qxwu.toon))
|
|
1736
1769
|
- File-backed schema sections (types/statuses/fields/type_workflows) leak into settings.json on writeSettings ([pm-haak](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-haak.toon))
|
|
1770
|
+
- Add pm gc --scope locks: sweep expired lock debris from crashed processes ([pm-d70h](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-d70h.toon))
|
|
1737
1771
|
- PRD/contract drift: reminders_weight and events_weight missing from search.tuning docs ([pm-75du](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-75du.toon))
|
|
1738
1772
|
- MCP stdio server processes JSON-RPC lines concurrently → pipelined mutations on the same item lock-conflict ([pm-3puw](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3puw.toon))
|
|
1739
1773
|
|
|
@@ -1906,13 +1940,13 @@
|
|
|
1906
1940
|
|
|
1907
1941
|
### Added
|
|
1908
1942
|
|
|
1909
|
-
- Semantic index not auto-refreshed on mutation: create then pm search --semantic misses the new item (stale index) ([pm-bpaj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-bpaj.toon))
|
|
1910
1943
|
- Reduce ESM module-resolution startup overhead (~85ms) via core bundling ([pm-ss1d](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-ss1d.toon))
|
|
1911
1944
|
|
|
1912
1945
|
### Fixed
|
|
1913
1946
|
|
|
1914
1947
|
- Calendar positional-date and impossible-deadline UX: pm calendar 2026-06-15 hard-errors; --deadline 2026-02-30 silently rolls to Mar 2 ([pm-wr74](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-wr74.toon))
|
|
1915
1948
|
- Split metadata cache into light + collections tiers to cut list hot-path JSON parse ([pm-jd3v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-jd3v.toon))
|
|
1949
|
+
- Semantic index not auto-refreshed on mutation: create then pm search --semantic misses the new item (stale index) ([pm-bpaj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-bpaj.toon))
|
|
1916
1950
|
- create's schedule-less calendar hint suggests rejected --event pipe form (accepts CSV) — blocks agents ([pm-8c2s](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-8c2s.toon))
|
|
1917
1951
|
- Suggestion-only command aliases (show/comment/note/view) still hard-fail as nonexistent_command instead of executing ([pm-7by2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-7by2.toon))
|
|
1918
1952
|
- create rejects common type synonyms (Bug/bug, Change/change) instead of mapping to Issue/Chore ([pm-4d1b](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-4d1b.toon))
|
|
@@ -2062,11 +2096,6 @@
|
|
|
2062
2096
|
|
|
2063
2097
|
## 2026.5.23 - 2026-05-23
|
|
2064
2098
|
|
|
2065
|
-
### Added
|
|
2066
|
-
|
|
2067
|
-
- pm health output stays large even with --brief/--skip flags; add a true one-line summary mode ([pm-nbht](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-nbht.toon))
|
|
2068
|
-
- Reduce default verbosity of pm activity/history CLI output and add a compact mode to pm history ([pm-3pbs](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3pbs.toon))
|
|
2069
|
-
|
|
2070
2099
|
### Changed
|
|
2071
2100
|
|
|
2072
2101
|
- Remove dead code: command-aware.ts module, 5 orphaned exported functions, unused undici dependency ([pm-b7do](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-b7do.toon))
|
|
@@ -2075,6 +2104,7 @@
|
|
|
2075
2104
|
|
|
2076
2105
|
- MCP pm_search defaults to full item bodies, blowing past agent token limits ([pm-qrxs](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-qrxs.toon))
|
|
2077
2106
|
- pm create --blocked-by stores free-text metadata, not a dependency edge or blocked status (agent-confusing) ([pm-orrl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-orrl.toon))
|
|
2107
|
+
- pm health output stays large even with --brief/--skip flags; add a true one-line summary mode ([pm-nbht](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-nbht.toon))
|
|
2078
2108
|
- Calendar: pm cal <view\> --date crashes (positional view + any flag) ([pm-l292](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-l292.toon))
|
|
2079
2109
|
- Agent UX: pm update --status closed, explicit semantic/hybrid search, and pm create <type\> <title\> must never block agents ([pm-j1v7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-j1v7.toon))
|
|
2080
2110
|
- Sentry PM-CLI-R/PM-CLI-S: undefined-status .trim and undefined-tags .join crashes (fixed in HEAD, mark resolvedInNextRelease) ([pm-d7us](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-d7us.toon))
|
|
@@ -2083,6 +2113,7 @@
|
|
|
2083
2113
|
- Audited history-repair (re-anchor) command + clear legacy history drift so pm health is ok ([pm-85hm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-85hm.toon))
|
|
2084
2114
|
- MCP pm_comments returns full comment history (no default limit) — token bloat on long-lived items ([pm-6vfg](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-6vfg.toon))
|
|
2085
2115
|
- pm plan: materialize creates dependency cycle; decision/discovery/validation flag mismatch; --steps all unsupported ([pm-6blp](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-6blp.toon))
|
|
2116
|
+
- Reduce default verbosity of pm activity/history CLI output and add a compact mode to pm history ([pm-3pbs](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3pbs.toon))
|
|
2086
2117
|
|
|
2087
2118
|
### Security
|
|
2088
2119
|
|
|
@@ -2381,14 +2412,10 @@
|
|
|
2381
2412
|
|
|
2382
2413
|
### Added
|
|
2383
2414
|
|
|
2384
|
-
- Add scoped audit override mode for pm update metadata mutations ([pm-umhv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-umhv.toon))
|
|
2385
|
-
- Add opt-in runtime probe mode for extension manage parity ([pm-p0ij](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-p0ij.toon))
|
|
2386
2415
|
- Harden entry and add input resilience ([pm-nhgt](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/epics/pm-nhgt.toon))
|
|
2387
2416
|
- Governance sweep 2026-04-03 net-new remediation ([pm-r7t2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/epics/pm-r7t2.toon))
|
|
2388
|
-
- Add pm version and source classification to telemetry payloads ([pm-3dd9](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3dd9.toon))
|
|
2389
2417
|
- List command large-output ergonomics ([pm-a4z3](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-a4z3.toon))
|
|
2390
2418
|
- Activate semantic defaults via local Ollama runtime detection ([pm-zvn2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-zvn2.toon))
|
|
2391
|
-
- Add dependency mutation command for existing items ([pm-zdec](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zdec.toon))
|
|
2392
2419
|
- Full registration runtime wiring ([pm-zd6y](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-zd6y.toon))
|
|
2393
2420
|
- Add test-result tracking settings and config policy ([pm-z9k7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-z9k7.toon))
|
|
2394
2421
|
- Automatic migration and legacy format gate ([pm-z8bl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-z8bl.toon))
|
|
@@ -2399,7 +2426,6 @@
|
|
|
2399
2426
|
- Add dependency visualization command (pm deps) ([pm-x85o](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-x85o.toon))
|
|
2400
2427
|
- Configurable item type registry (settings + extensions) ([pm-x2k0](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-x2k0.toon))
|
|
2401
2428
|
- Strict skipped-test policy and linked-test assertion semantics ([pm-wtq6](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-wtq6.toon))
|
|
2402
|
-
- Add extension project scaffold command or template ([pm-wsui](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-wsui.toon))
|
|
2403
2429
|
- Feature: claim takeover on non-terminal items ([pm-w9w4](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-w9w4.toon))
|
|
2404
2430
|
- Add governance normalize command with dry-run and apply modes ([pm-vi2v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-vi2v.toon))
|
|
2405
2431
|
- List parent filtering and get recovery guidance ([pm-v7o7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-v7o7.toon))
|
|
@@ -2416,7 +2442,6 @@
|
|
|
2416
2442
|
- Stdin and PTY fail-safe behavior ([pm-olxl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-olxl.toon))
|
|
2417
2443
|
- SDK publishing and stability contract ([pm-oga6](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-oga6.toon))
|
|
2418
2444
|
- Add AGENTS rule to check existing pm items before creating new ones ([pm-o5uw](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-o5uw.toon))
|
|
2419
|
-
- Add compact/full/fields search output controls with compact default ([pm-nrxm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-nrxm.toon))
|
|
2420
2445
|
- Add files discovery subcommand for referenced paths ([pm-n2ts](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-n2ts.toon))
|
|
2421
2446
|
- Feature: update close_reason lifecycle integrity ([pm-m4vu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-m4vu.toon))
|
|
2422
2447
|
- Implement deterministic guard for ambiguous create log seeds ([pm-m3mf](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-m3mf.toon))
|
|
@@ -2452,7 +2477,6 @@
|
|
|
2452
2477
|
- Analyze persisted telemetry and add remote analysis skill ([pm-cakn](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-cakn.toon))
|
|
2453
2478
|
- Persistent reminder item fields and CLI mutation support ([pm-c877](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-c877.toon))
|
|
2454
2479
|
- Linked-test sandbox project/global extension parity ([pm-bkvx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-bkvx.toon))
|
|
2455
|
-
- Add deterministic linked-test replacement mode for update test mutations ([pm-bjpo](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-bjpo.toon))
|
|
2456
2480
|
- Background linked-test orchestration and run management ([pm-bi0z](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-bi0z.toon))
|
|
2457
2481
|
- Expand aggregate group-by to support priority, status, assignee, tags ([pm-bhhe](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-bhhe.toon))
|
|
2458
2482
|
- Issue3 Feature: Extract PM-id references from linked commands ([pm-bf54](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-bf54.toon))
|
|
@@ -2491,7 +2515,6 @@
|
|
|
2491
2515
|
- Add glob-based linked artifact additions for files/docs ([pm-3eu2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-3eu2.toon))
|
|
2492
2516
|
- Health vectorization status and targeted refresh ([pm-3ebr](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-3ebr.toon))
|
|
2493
2517
|
- Add extension registration support for custom item types/options ([pm-37pj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-37pj.toon))
|
|
2494
|
-
- Add telemetry runtime diagnostics to pm health ([pm-300m](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-300m.toon))
|
|
2495
2518
|
- Implement extension source resolver and installer engine ([pm-2poj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-2poj.toon))
|
|
2496
2519
|
- Extended schema fields v1.1 - parent, reviewer, risk, sprint, release ([pm-2p6q](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-2p6q.toon))
|
|
2497
2520
|
- Health optional directory strictness and compatibility ([pm-2i0i](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-2i0i.toon))
|
|
@@ -2503,11 +2526,11 @@
|
|
|
2503
2526
|
- Phase 2 SDK v2 contracts with backward-compat adapters ([pm-0u1y](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-0u1y.toon))
|
|
2504
2527
|
- Add activity filtering and stream mode for large program automation ([pm-0g7a](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-0g7a.toon))
|
|
2505
2528
|
- Event and recurrence schema with mutation contracts ([pm-0ab3](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-0ab3.toon))
|
|
2506
|
-
- Add --parent filter support for list and list-\* commands ([pm-08zg](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-08zg.toon))
|
|
2507
2529
|
- Calendar parity integrations and release hardening ([pm-02gd](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-02gd.toon))
|
|
2508
2530
|
|
|
2509
2531
|
### Changed
|
|
2510
2532
|
|
|
2533
|
+
- Add scoped audit override mode for pm update metadata mutations ([pm-umhv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-umhv.toon))
|
|
2511
2534
|
- Update-many: improve error message when no mutation flags provided ([pm-twtu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-twtu.toon))
|
|
2512
2535
|
- Update body backfill normalization parity ([pm-ihfm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/epics/pm-ihfm.toon))
|
|
2513
2536
|
- Parser update: support +m and flexible date strings ([pm-y8a8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-y8a8.toon))
|
|
@@ -2528,6 +2551,7 @@
|
|
|
2528
2551
|
- Enforce option policies in create/update and help errors ([pm-co62](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-co62.toon))
|
|
2529
2552
|
- Improve required option error/help guidance with examples ([pm-bzyr](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-bzyr.toon))
|
|
2530
2553
|
- C3: Update docs and release notes for comments UX ([pm-bx5r](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-bx5r.toon))
|
|
2554
|
+
- Add deterministic linked-test replacement mode for update test mutations ([pm-bjpo](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-bjpo.toon))
|
|
2531
2555
|
- Update docs and changelog for six audit findings ([pm-9eaz](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-9eaz.toon))
|
|
2532
2556
|
- Update completion and Pi wrapper for event recurrence flags ([pm-5hbj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-5hbj.toon))
|
|
2533
2557
|
- Phase 2: update extension architecture and migration docs ([pm-4epk](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-4epk.toon))
|
|
@@ -2538,12 +2562,16 @@
|
|
|
2538
2562
|
|
|
2539
2563
|
### Fixed
|
|
2540
2564
|
|
|
2565
|
+
- Add opt-in runtime probe mode for extension manage parity ([pm-p0ij](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-p0ij.toon))
|
|
2541
2566
|
- Templates command: document correct invocation syntax (positional vs --name) ([pm-6y6i](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-6y6i.toon))
|
|
2542
2567
|
- Validate UUID fields at telemetry ingestion boundary ([pm-vhdc](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-vhdc.toon))
|
|
2543
2568
|
- Fix Grafana RabbitMQ queue panel metric selector mismatch ([pm-r9ei](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-r9ei.toon))
|
|
2544
2569
|
- Implement local telemetry queue retention_days TTL cleanup ([pm-pxx0](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-pxx0.toon))
|
|
2570
|
+
- Add pm version and source classification to telemetry payloads ([pm-3dd9](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3dd9.toon))
|
|
2571
|
+
- Add dependency mutation command for existing items ([pm-zdec](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zdec.toon))
|
|
2545
2572
|
- Auto-migrate previous-version trackers on first mutation ([pm-yvwt](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-yvwt.toon))
|
|
2546
2573
|
- Cross-command regression verification for date parsing expansion ([pm-x6l7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-x6l7.toon))
|
|
2574
|
+
- Add extension project scaffold command or template ([pm-wsui](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-wsui.toon))
|
|
2547
2575
|
- Allow unquoted multi-word search queries ([pm-v6ob](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-v6ob.toon))
|
|
2548
2576
|
- Expand regression and release-readiness tests for calendar/reminders ([pm-tyq3](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-tyq3.toon))
|
|
2549
2577
|
- Terminal compatibility regression suite and docs parity ([pm-t6f7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-t6f7.toon))
|
|
@@ -2553,6 +2581,7 @@
|
|
|
2553
2581
|
- Regression and release hardening ([pm-qwp7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-qwp7.toon))
|
|
2554
2582
|
- Fix LanceDB vector dimension mismatch blocking default search ([pm-oyt8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-oyt8.toon))
|
|
2555
2583
|
- Replace invalid-id echo in get not-found guidance ([pm-opbo](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-opbo.toon))
|
|
2584
|
+
- Add compact/full/fields search output controls with compact default ([pm-nrxm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-nrxm.toon))
|
|
2556
2585
|
- Include active extension commands/actions in contracts output ([pm-nnfc](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-nnfc.toon))
|
|
2557
2586
|
- SDK starter example leaves extension health warning ([pm-mwiz](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-mwiz.toon))
|
|
2558
2587
|
- Align default item types with Decision tracking guidance ([pm-mpmv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-mpmv.toon))
|
|
@@ -2577,9 +2606,11 @@
|
|
|
2577
2606
|
- Phase 2: parser override regression and docs coverage ([pm-6024](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-6024.toon))
|
|
2578
2607
|
- Expand recurrence regression and runtime contract tests ([pm-5xih](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-5xih.toon))
|
|
2579
2608
|
- E1: Expand override and no-extension regression matrix ([pm-5chf](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-5chf.toon))
|
|
2609
|
+
- Add telemetry runtime diagnostics to pm health ([pm-300m](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-300m.toon))
|
|
2580
2610
|
- Clarify or harden SDK import resolution for local extension installs ([pm-1etl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-1etl.toon))
|
|
2581
2611
|
- Context blocked-fallback test uses date-sensitive default deadline ([pm-0xhj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-0xhj.toon))
|
|
2582
2612
|
- Add status alias regression tests ([pm-0kga](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-0kga.toon))
|
|
2613
|
+
- Add --parent filter support for list and list-\* commands ([pm-08zg](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-08zg.toon))
|
|
2583
2614
|
|
|
2584
2615
|
### Removed
|
|
2585
2616
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
3
|
-
import { pathExists, resolveItemTypeRegistry, EXIT_CODE, getSettingsPath, resolvePmRoot, readSettings, getActiveExtensionRegistrations, runActiveServiceOverride, levenshteinDistanceWithinLimit, } from "../sdk/runtime-primitives.js";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="05cf369c-7529-57ab-984a-f5505cc9c0c9")}catch(e){}}();
|
|
3
|
+
import { pathExists, resolveItemTypeRegistry, EXIT_CODE, getSettingsPath, resolvePmRoot, readSettings, getActiveExtensionRegistrations, locateItem, runActiveServiceOverride, levenshteinDistanceWithinLimit, } from "../sdk/runtime-primitives.js";
|
|
4
4
|
import { BUILTIN_ITEM_TYPE_VALUES } from "../types/index.js";
|
|
5
5
|
import { PM_CORE_COMMAND_NAMES, resolveSubcommandFlagContractsForCommand, } from "../sdk/cli-contracts.js";
|
|
6
6
|
import { formatCommanderErrorForDisplay, formatCommanderErrorForJson, projectLeanErrorEnvelope, } from "./error-guidance.js";
|
|
@@ -536,24 +536,46 @@ export function isKnownHelpCommandPath(root, commandPathTokens) {
|
|
|
536
536
|
}
|
|
537
537
|
return matchedAny;
|
|
538
538
|
}
|
|
539
|
-
async function
|
|
539
|
+
async function resolveWorkspaceUsageContext(bootstrapGlobal, message, invocationArgv, commandName) {
|
|
540
540
|
try {
|
|
541
541
|
const pmRoot = resolvePmRoot(process.cwd(), bootstrapGlobal.path);
|
|
542
542
|
if (!(await pathExists(getSettingsPath(pmRoot)))) {
|
|
543
|
-
return BUILTIN_TYPE_HELP_VALUES;
|
|
543
|
+
return { allowedTypes: BUILTIN_TYPE_HELP_VALUES };
|
|
544
544
|
}
|
|
545
545
|
const settings = await readSettings(pmRoot);
|
|
546
546
|
const extensionRegistrations = bootstrapGlobal.noExtensions
|
|
547
547
|
? undefined
|
|
548
548
|
: getActiveExtensionRegistrations();
|
|
549
549
|
const typeRegistry = resolveItemTypeRegistry(settings, extensionRegistrations);
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
550
|
+
let verifiedCollectionItemId;
|
|
551
|
+
if (/too many arguments/i.test(message) &&
|
|
552
|
+
["comments", "docs", "files", "learnings", "notes", "test"].includes(commandName ?? "")) {
|
|
553
|
+
const commandIndex = invocationArgv.findIndex((token) => token === commandName);
|
|
554
|
+
const candidate = invocationArgv[commandIndex + 2];
|
|
555
|
+
if (invocationArgv[commandIndex + 1]?.toLowerCase() === "add" &&
|
|
556
|
+
candidate !== undefined &&
|
|
557
|
+
!candidate.startsWith("-")) {
|
|
558
|
+
try {
|
|
559
|
+
verifiedCollectionItemId = (await locateItem(pmRoot, candidate, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder))?.id;
|
|
560
|
+
}
|
|
561
|
+
catch {
|
|
562
|
+
// Usage rendering remains available when tracker storage is unreadable.
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
return {
|
|
567
|
+
allowedTypes: typeRegistry.types.length > 0
|
|
568
|
+
? typeRegistry.types.join("|")
|
|
569
|
+
: BUILTIN_TYPE_HELP_VALUES,
|
|
570
|
+
pmRoot,
|
|
571
|
+
settings,
|
|
572
|
+
typeToFolder: typeRegistry.type_to_folder,
|
|
573
|
+
verifiedCollectionItemId,
|
|
574
|
+
};
|
|
553
575
|
}
|
|
554
576
|
catch {
|
|
555
577
|
/* v8 ignore start -- defensive fallback for corrupted settings during usage-error rendering; command behavior is covered through normal settings paths */
|
|
556
|
-
return BUILTIN_TYPE_HELP_VALUES;
|
|
578
|
+
return { allowedTypes: BUILTIN_TYPE_HELP_VALUES };
|
|
557
579
|
/* v8 ignore stop */
|
|
558
580
|
}
|
|
559
581
|
}
|
|
@@ -636,7 +658,8 @@ export async function resolveCommanderUsageContext(error, rootProgram, extension
|
|
|
636
658
|
const commandName = parseBootstrapCommandName(invocationArgv);
|
|
637
659
|
const attemptedCommand = renderAttemptedCommand(invocationArgv);
|
|
638
660
|
const providedOptionFlags = extractProvidedOptionFlags(invocationArgv);
|
|
639
|
-
const
|
|
661
|
+
const workspaceUsage = await resolveWorkspaceUsageContext(bootstrapGlobal, message, invocationArgv, commandName);
|
|
662
|
+
const allowedTypes = workspaceUsage.allowedTypes;
|
|
640
663
|
const unknownCommandGuidance = buildUnknownCommandGuidanceFromRuntime(message, rootProgram, extensionDescriptors);
|
|
641
664
|
const unknownOption = resolveUnknownOptionSuggestions(message, commandName);
|
|
642
665
|
const splitSchemaSubcommand = resolveSplitSchemaSubcommand(message, invocationArgv);
|
|
@@ -659,6 +682,7 @@ export async function resolveCommanderUsageContext(error, rootProgram, extension
|
|
|
659
682
|
: undefined,
|
|
660
683
|
unknownOptionOtherCommandsTruncated: unknownOption.otherCommands.length > 12 || undefined,
|
|
661
684
|
suggestedRetryCommand,
|
|
685
|
+
verifiedCollectionItemId: workspaceUsage.verifiedCollectionItemId,
|
|
662
686
|
...splitSchemaSubcommand,
|
|
663
687
|
...unknownCommandGuidance,
|
|
664
688
|
...guidanceOverrides,
|
|
@@ -667,7 +691,7 @@ export async function resolveCommanderUsageContext(error, rootProgram, extension
|
|
|
667
691
|
/** Implements format commander usage message for the public runtime surface of this module. */
|
|
668
692
|
export async function formatCommanderUsageMessage(error, rootProgram, extensionDescriptors, guidanceOverrides = {}) {
|
|
669
693
|
const usageContext = await resolveCommanderUsageContext(error, rootProgram, extensionDescriptors, guidanceOverrides);
|
|
670
|
-
const { message, commandName, allowedTypes, unknownCommandExamples, unknownCommandNextSteps, attemptedCommand, normalizedInvocationArgs, providedOptionFlags, unknownOptionSuggestions, unknownOptionOtherCommands, unknownOptionOtherCommandsTotal, unknownOptionOtherCommandsTruncated, unknownSubcommandPath, unknownSubcommandToken, unknownSubcommandAllowedValues, suggestedRetryCommand, failedExtensions, } = usageContext;
|
|
694
|
+
const { message, commandName, allowedTypes, unknownCommandExamples, unknownCommandNextSteps, attemptedCommand, normalizedInvocationArgs, providedOptionFlags, unknownOptionSuggestions, unknownOptionOtherCommands, unknownOptionOtherCommandsTotal, unknownOptionOtherCommandsTruncated, unknownSubcommandPath, unknownSubcommandToken, unknownSubcommandAllowedValues, suggestedRetryCommand, verifiedCollectionItemId, failedExtensions, } = usageContext;
|
|
671
695
|
const formatted = formatCommanderErrorForDisplay(message, commandName, allowedTypes, {
|
|
672
696
|
unknownCommandExamples,
|
|
673
697
|
unknownCommandNextSteps,
|
|
@@ -682,6 +706,7 @@ export async function formatCommanderUsageMessage(error, rootProgram, extensionD
|
|
|
682
706
|
unknownSubcommandToken,
|
|
683
707
|
unknownSubcommandAllowedValues,
|
|
684
708
|
suggestedRetryCommand,
|
|
709
|
+
verifiedCollectionItemId,
|
|
685
710
|
failedExtensions,
|
|
686
711
|
});
|
|
687
712
|
const serviceOverride = await runActiveServiceOverride("help_format", {
|
|
@@ -711,6 +736,7 @@ export async function formatCommanderUsageJson(error, rootProgram, extensionDesc
|
|
|
711
736
|
unknownSubcommandToken: usageContext.unknownSubcommandToken,
|
|
712
737
|
unknownSubcommandAllowedValues: usageContext.unknownSubcommandAllowedValues,
|
|
713
738
|
suggestedRetryCommand: usageContext.suggestedRetryCommand,
|
|
739
|
+
verifiedCollectionItemId: usageContext.verifiedCollectionItemId,
|
|
714
740
|
failedExtensions: usageContext.failedExtensions,
|
|
715
741
|
});
|
|
716
742
|
return JSON.stringify(lean ? projectLeanErrorEnvelope(envelope) : envelope, null, 2);
|
|
@@ -724,4 +750,4 @@ export const _testOnly = {
|
|
|
724
750
|
suggestNearestLongFlags,
|
|
725
751
|
};
|
|
726
752
|
//# sourceMappingURL=commander-usage.js.map
|
|
727
|
-
//# debugId=
|
|
753
|
+
//# debugId=05cf369c-7529-57ab-984a-f5505cc9c0c9
|
|
@@ -89,6 +89,8 @@ export interface CommanderGuidanceContext {
|
|
|
89
89
|
unknownSubcommandAllowedValues?: string[];
|
|
90
90
|
/** Value that configures or reports suggested retry command for this contract. */
|
|
91
91
|
suggestedRetryCommand?: string;
|
|
92
|
+
/** Existing item id verified against the selected tracker for collection recovery. */
|
|
93
|
+
verifiedCollectionItemId?: string;
|
|
92
94
|
/** Installed extensions whose activation failed for this invocation. */
|
|
93
95
|
failedExtensions?: Array<{
|
|
94
96
|
name: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0203943b-16ea-5c3a-a2d3-56a0c4d2848f")}catch(e){}}();
|
|
3
3
|
import { renderPmCommand } from "./argv-utils.js";
|
|
4
4
|
import { discoverNearbyPmRoot } from "../sdk/tracker-root-discovery.js";
|
|
5
5
|
/** Compact an error envelope to fields that change the caller's next action. */
|
|
@@ -125,7 +125,21 @@ function assignRecoveryString(normalized, key, value) {
|
|
|
125
125
|
normalized[key] = value.trim();
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
-
function
|
|
128
|
+
function assignRecoveryCollection(normalized, key, value) {
|
|
129
|
+
if (key === "parsed_positionals") {
|
|
130
|
+
if (!Array.isArray(value))
|
|
131
|
+
return;
|
|
132
|
+
const parsedPositionals = value
|
|
133
|
+
.map((entry) => ({
|
|
134
|
+
role: typeof entry?.role === "string" ? entry.role.trim() : "",
|
|
135
|
+
value: typeof entry?.value === "string" ? entry.value.trim() : "",
|
|
136
|
+
}))
|
|
137
|
+
.filter((entry) => entry.role.length > 0 && entry.value.length > 0);
|
|
138
|
+
if (parsedPositionals.length > 0) {
|
|
139
|
+
normalized.parsed_positionals = parsedPositionals;
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
129
143
|
const values = normalizeStringArray(value);
|
|
130
144
|
if (values) {
|
|
131
145
|
normalized[key] = values;
|
|
@@ -140,13 +154,14 @@ function normalizeRecoveryPayload(payload) {
|
|
|
140
154
|
normalized.recovery_mode = "compact";
|
|
141
155
|
}
|
|
142
156
|
assignRecoveryString(normalized, "attempted_command", payload.attempted_command);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
157
|
+
assignRecoveryCollection(normalized, "normalized_args", payload.normalized_args);
|
|
158
|
+
assignRecoveryCollection(normalized, "parsed_positionals", payload.parsed_positionals);
|
|
159
|
+
assignRecoveryCollection(normalized, "provided_fields", payload.provided_fields);
|
|
160
|
+
assignRecoveryCollection(normalized, "missing", payload.missing);
|
|
161
|
+
assignRecoveryCollection(normalized, "missing_required_fields", payload.missing_required_fields);
|
|
162
|
+
assignRecoveryCollection(normalized, "suggested_flags", payload.suggested_flags);
|
|
163
|
+
assignRecoveryCollection(normalized, "allowed_values", payload.allowed_values);
|
|
164
|
+
assignRecoveryCollection(normalized, "candidate_commands", payload.candidate_commands);
|
|
150
165
|
if (typeof payload.candidate_commands_total === "number" &&
|
|
151
166
|
Number.isSafeInteger(payload.candidate_commands_total) &&
|
|
152
167
|
payload.candidate_commands_total >= 0) {
|
|
@@ -186,6 +201,13 @@ function renderRecoveryBundle(recovery) {
|
|
|
186
201
|
const lines = ["Recovery bundle:"];
|
|
187
202
|
appendRecoveryTextLine(lines, "attempted_command", normalized.attempted_command);
|
|
188
203
|
appendRecoveryListLine(lines, "normalized_args", normalized.normalized_args, " ");
|
|
204
|
+
if (normalized.parsed_positionals &&
|
|
205
|
+
normalized.parsed_positionals.length > 0) {
|
|
206
|
+
lines.push(" parsed_positionals:");
|
|
207
|
+
for (const positional of normalized.parsed_positionals) {
|
|
208
|
+
lines.push(` - ${positional.role}: ${positional.value}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
189
211
|
appendRecoveryListLine(lines, "provided_fields", normalized.provided_fields, ", ");
|
|
190
212
|
appendRecoveryListLine(lines, "missing", normalized.missing, ", ");
|
|
191
213
|
appendRecoveryListLine(lines, "missing_required_fields", normalized.missing_required_fields, ", ");
|
|
@@ -822,8 +844,7 @@ function buildUnknownOptionGuidance(message, commandName, context) {
|
|
|
822
844
|
return buildUnsupportedUpdateOptionGuidance(optionName, context, suggestions);
|
|
823
845
|
}
|
|
824
846
|
const otherCommands = normalizeContextList(guidanceContext.unknownOptionOtherCommands) ?? [];
|
|
825
|
-
const candidateTotal = guidanceContext.unknownOptionOtherCommandsTotal ??
|
|
826
|
-
otherCommands.length;
|
|
847
|
+
const candidateTotal = guidanceContext.unknownOptionOtherCommandsTotal ?? otherCommands.length;
|
|
827
848
|
const proseCommands = otherCommands.slice(0, 3);
|
|
828
849
|
const proseRemainder = candidateTotal - proseCommands.length;
|
|
829
850
|
let proseRemainderText = "";
|
|
@@ -842,7 +863,10 @@ function buildUnknownOptionGuidance(message, commandName, context) {
|
|
|
842
863
|
? `Replay with suggested correction: ${retryCommand}`
|
|
843
864
|
: undefined,
|
|
844
865
|
].filter((entry) => typeof entry === "string");
|
|
845
|
-
const examples = [
|
|
866
|
+
const examples = [
|
|
867
|
+
retryCommand,
|
|
868
|
+
`pm ${commandName ?? "<command>"} --help`,
|
|
869
|
+
].filter((entry) => typeof entry === "string");
|
|
846
870
|
return makeGuidanceMessage({
|
|
847
871
|
code: "unknown_option",
|
|
848
872
|
title: `Unknown option ${optionName}`,
|
|
@@ -966,6 +990,48 @@ function buildLinkedTestValueNotQuotedGuidance(message, commandName, context) {
|
|
|
966
990
|
recovery: buildCommanderRecoveryPayload(context, retryCommand ? { suggested_retry: retryCommand } : {}),
|
|
967
991
|
});
|
|
968
992
|
}
|
|
993
|
+
const TRANSPOSED_COLLECTION_COMMANDS = new Set([
|
|
994
|
+
"comments",
|
|
995
|
+
"docs",
|
|
996
|
+
"files",
|
|
997
|
+
"learnings",
|
|
998
|
+
"notes",
|
|
999
|
+
"test",
|
|
1000
|
+
]);
|
|
1001
|
+
function buildTransposedCollectionActionGuidance(message, commandName, context) {
|
|
1002
|
+
if (!/too many arguments/i.test(message) ||
|
|
1003
|
+
!TRANSPOSED_COLLECTION_COMMANDS.has(commandName ?? "")) {
|
|
1004
|
+
return null;
|
|
1005
|
+
}
|
|
1006
|
+
const argv = context?.normalizedInvocationArgs ?? [];
|
|
1007
|
+
const commandIndex = argv.findIndex((token) => token === commandName);
|
|
1008
|
+
const action = argv[commandIndex + 1];
|
|
1009
|
+
const parsedItemId = argv[commandIndex + 2];
|
|
1010
|
+
const itemId = context?.verifiedCollectionItemId?.trim();
|
|
1011
|
+
if (action?.toLowerCase() !== "add" ||
|
|
1012
|
+
!parsedItemId ||
|
|
1013
|
+
parsedItemId.startsWith("-") ||
|
|
1014
|
+
!itemId ||
|
|
1015
|
+
itemId.toLowerCase() !== parsedItemId.toLowerCase()) {
|
|
1016
|
+
return null;
|
|
1017
|
+
}
|
|
1018
|
+
const suggestedRetry = `pm ${commandName} ${itemId} --add <value>`;
|
|
1019
|
+
return makeGuidanceMessage({
|
|
1020
|
+
code: "collection_transposed_subcommand",
|
|
1021
|
+
title: `Transposed ${commandName} add syntax`,
|
|
1022
|
+
happened: `The positional token "add" occupied the item-id role and "${itemId}" occupied the next positional role. pm ${commandName} does not use an add subcommand.`,
|
|
1023
|
+
required: `Place the item id immediately after ${commandName}, then use --add for the value.`,
|
|
1024
|
+
why: "Collection mutations use object-first grammar: pm <collection> <item-id> --add <value>.",
|
|
1025
|
+
examples: [suggestedRetry, `pm ${commandName} --help`],
|
|
1026
|
+
recovery: buildCommanderRecoveryPayload(context, {
|
|
1027
|
+
parsed_positionals: [
|
|
1028
|
+
{ role: "transposed_subcommand", value: action },
|
|
1029
|
+
{ role: "item_id", value: itemId },
|
|
1030
|
+
],
|
|
1031
|
+
suggested_retry: suggestedRetry,
|
|
1032
|
+
}),
|
|
1033
|
+
});
|
|
1034
|
+
}
|
|
969
1035
|
const CONTEXT_GUIDANCE_VALUE_FLAGS = new Set([
|
|
970
1036
|
"--activity-limit",
|
|
971
1037
|
"--assignee",
|
|
@@ -1041,6 +1107,7 @@ function buildCommanderErrorGuidance(rawMessage, commandName, allowedTypes, cont
|
|
|
1041
1107
|
buildUnknownOptionGuidance(message, commandName, context) ??
|
|
1042
1108
|
buildUnknownCommandGuidance(message, context) ??
|
|
1043
1109
|
buildUnknownSubcommandGuidance(context) ??
|
|
1110
|
+
buildTransposedCollectionActionGuidance(message, commandName, context) ??
|
|
1044
1111
|
buildLinkedTestValueNotQuotedGuidance(message, commandName, context) ??
|
|
1045
1112
|
buildContextItemArgumentGuidance(message, commandName, context);
|
|
1046
1113
|
if (guidance) {
|
|
@@ -1134,4 +1201,4 @@ export const _testOnly = {
|
|
|
1134
1201
|
resolveKnownPackageCommandHint,
|
|
1135
1202
|
};
|
|
1136
1203
|
//# sourceMappingURL=error-guidance.js.map
|
|
1137
|
-
//# debugId=
|
|
1204
|
+
//# debugId=0203943b-16ea-5c3a-a2d3-56a0c4d2848f
|