@unbrained/pm-cli 2026.8.14 → 2026.8.16

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.
Files changed (160) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +51 -11
  3. package/dist/cli/commander-usage.js +17 -4
  4. package/dist/cli/error-guidance.d.ts +7 -0
  5. package/dist/cli/error-guidance.js +65 -25
  6. package/dist/cli/main.js +3 -2
  7. package/dist/cli/register-history-author.js +16 -11
  8. package/dist/cli/register-mutation.js +4 -2
  9. package/dist/cli/register-operations.js +5 -5
  10. package/dist/cli-bundle/bundle-manifest.json +148 -148
  11. package/dist/cli-bundle/chunks/chunk-47OQEOQB.js +2 -0
  12. package/dist/cli-bundle/chunks/{chunk-XAVMOK6B.js → chunk-73UGEBRS.js} +2 -2
  13. package/dist/cli-bundle/chunks/chunk-HCIYWD6M.js +35 -0
  14. package/dist/cli-bundle/chunks/{chunk-FIW4P64F.js → chunk-I2LUWWR5.js} +2 -2
  15. package/dist/cli-bundle/chunks/{chunk-SBRKH6OR.js → chunk-IC5W2T34.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-TMJ7URWS.js → chunk-PANOOBIS.js} +9 -9
  17. package/dist/cli-bundle/chunks/{chunk-BFALV3YP.js → chunk-RIS565OA.js} +2 -2
  18. package/dist/cli-bundle/chunks/{chunk-TXMEUUUY.js → chunk-TK6N7HGM.js} +2 -2
  19. package/dist/cli-bundle/chunks/chunk-TOFG2URD.js +197 -0
  20. package/dist/cli-bundle/chunks/{chunk-G5JUB66K.js → chunk-URW4QRMI.js} +65 -59
  21. package/dist/cli-bundle/chunks/{register-list-query-T3EHHNNV.js → register-list-query-EYCXHZAG.js} +2 -2
  22. package/dist/cli-bundle/chunks/register-mutation-7YVIG54J.js +20 -0
  23. package/dist/cli-bundle/chunks/register-operations-KGDNRMCL.js +2 -0
  24. package/dist/cli-bundle/chunks/{register-setup-3YXZ444E.js → register-setup-NVXBOD5I.js} +2 -2
  25. package/dist/cli-bundle/focused-chunks/{chunk-PPFGQDSI.js → chunk-4JPEBFFC.js} +2 -2
  26. package/dist/cli-bundle/focused-chunks/chunk-5NMFSX26.js +155 -0
  27. package/dist/cli-bundle/focused-chunks/{chunk-YOOI3UZX.js → chunk-6ROKKT4X.js} +2 -2
  28. package/dist/cli-bundle/focused-chunks/chunk-725JSCMP.js +2 -0
  29. package/dist/cli-bundle/focused-chunks/{chunk-XDNAW5OI.js → chunk-C7JUBRFP.js} +2 -2
  30. package/dist/cli-bundle/focused-chunks/{chunk-4DQ2YERC.js → chunk-CODV5LUT.js} +2 -2
  31. package/dist/cli-bundle/focused-chunks/chunk-DQ6SMTBF.js +2 -0
  32. package/dist/cli-bundle/focused-chunks/chunk-HAACPSUW.js +2 -0
  33. package/dist/cli-bundle/focused-chunks/{chunk-WCVE2NIG.js → chunk-J4UFYHOD.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/chunk-JX5Z344Q.js +2 -0
  35. package/dist/cli-bundle/focused-chunks/chunk-L4RDYBIQ.js +2 -0
  36. package/dist/cli-bundle/focused-chunks/{chunk-KSEDUWVZ.js → chunk-NJ5RLEFD.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/{chunk-K7RWWOAG.js → chunk-QYZERYR5.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/chunk-SSNDYZTM.js +8 -0
  39. package/dist/cli-bundle/focused-chunks/chunk-T46KLOIB.js +50 -0
  40. package/dist/cli-bundle/focused-chunks/{chunk-KFSZ3BP6.js → chunk-TZATVC4G.js} +6 -6
  41. package/dist/cli-bundle/focused-chunks/chunk-WY3WRPVN.js +2 -0
  42. package/dist/cli-bundle/main.js +13 -13
  43. package/dist/cli-bundle/sdk-authoring.js +1 -1
  44. package/dist/cli-bundle/sdk-contracts.js +1 -1
  45. package/dist/cli-bundle/sdk-core.js +32 -35
  46. package/dist/cli-bundle/sdk-governance.js +1 -1
  47. package/dist/cli-bundle/sdk-graph.js +1 -1
  48. package/dist/cli-bundle/sdk-merge.js +32 -31
  49. package/dist/cli-bundle/sdk-query.js +1 -1
  50. package/dist/cli-bundle/sdk-runtime.js +1 -1
  51. package/dist/cli-bundle/sdk-testing.js +1 -1
  52. package/dist/cli-bundle/sdk.js +2 -2
  53. package/dist/core/diagnostics/remediation.js +7 -2
  54. package/dist/core/extensions/reserved-host-flags.js +3 -2
  55. package/dist/core/history/replay.d.ts +14 -1
  56. package/dist/core/history/replay.js +45 -8
  57. package/dist/core/history/workspace-history.js +32 -10
  58. package/dist/core/output/output.d.ts +2 -0
  59. package/dist/core/output/output.js +7 -3
  60. package/dist/core/shared/command-types.d.ts +2 -0
  61. package/dist/core/shared/command-types.js +2 -2
  62. package/dist/core/shared/errors.d.ts +14 -0
  63. package/dist/core/shared/errors.js +2 -2
  64. package/dist/core/store/item-store.js +28 -2
  65. package/dist/mcp/tool-definitions.js +9 -5
  66. package/dist/sdk/agent/refusal-reachability.d.ts +69 -0
  67. package/dist/sdk/agent/refusal-reachability.js +159 -3
  68. package/dist/sdk/author-attribution.d.ts +56 -11
  69. package/dist/sdk/author-attribution.js +174 -50
  70. package/dist/sdk/cli-bootstrap.d.ts +2 -0
  71. package/dist/sdk/cli-bootstrap.js +7 -2
  72. package/dist/sdk/cli-contracts/completeness.js +3 -2
  73. package/dist/sdk/cli-contracts/flag-contracts.js +6 -2
  74. package/dist/sdk/cli-contracts/registration-helpers.js +3 -2
  75. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
  76. package/dist/sdk/cli-contracts/runtime-contracts.js +23 -7
  77. package/dist/sdk/cli-contracts/tool-parameter-tables.js +22 -5
  78. package/dist/sdk/cli-contracts/tool-schema.js +20 -5
  79. package/dist/sdk/cli-program.js +3 -2
  80. package/dist/sdk/completion.js +11 -4
  81. package/dist/sdk/core.d.ts +2 -2
  82. package/dist/sdk/core.js +3 -3
  83. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +50 -2
  84. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +74 -14
  85. package/dist/sdk/governance/assurance-action.d.ts +7 -1
  86. package/dist/sdk/governance/assurance-action.js +7 -6
  87. package/dist/sdk/governance/assurance-mutation-error.d.ts +42 -1
  88. package/dist/sdk/governance/assurance-mutation-error.js +27 -3
  89. package/dist/sdk/governance/assurance-runtime.js +12 -11
  90. package/dist/sdk/governance/assurance.d.ts +9 -0
  91. package/dist/sdk/governance/assurance.js +80 -14
  92. package/dist/sdk/governance/coverage-assurance.d.ts +24 -0
  93. package/dist/sdk/governance/coverage-assurance.js +61 -0
  94. package/dist/sdk/governance/extension-host-version.d.ts +25 -0
  95. package/dist/sdk/governance/extension-host-version.js +116 -0
  96. package/dist/sdk/governance/health.d.ts +32 -1
  97. package/dist/sdk/governance/health.js +119 -27
  98. package/dist/sdk/governance/provenance-health.d.ts +27 -0
  99. package/dist/sdk/governance/provenance-health.js +95 -3
  100. package/dist/sdk/governance/validate.js +7 -8
  101. package/dist/sdk/governance.d.ts +6 -0
  102. package/dist/sdk/governance.js +8 -2
  103. package/dist/sdk/history-repair.d.ts +13 -1
  104. package/dist/sdk/history-repair.js +62 -18
  105. package/dist/sdk/index.d.ts +2 -1
  106. package/dist/sdk/index.js +4 -3
  107. package/dist/sdk/linked-artifacts.js +16 -5
  108. package/dist/sdk/pagination.d.ts +15 -0
  109. package/dist/sdk/pagination.js +9 -5
  110. package/dist/sdk/query/context.d.ts +5 -1
  111. package/dist/sdk/query/context.js +14 -5
  112. package/dist/sdk/read-output/continuation.d.ts +11 -0
  113. package/dist/sdk/read-output/continuation.js +132 -0
  114. package/dist/sdk/read-output-budget.d.ts +1 -1
  115. package/dist/sdk/read-output-budget.js +14 -10
  116. package/dist/sdk/read-output-contracts.d.ts +66 -2
  117. package/dist/sdk/read-output-contracts.js +185 -19
  118. package/dist/sdk/read-output-rows.d.ts +2 -0
  119. package/dist/sdk/read-output-rows.js +15 -2
  120. package/dist/sdk/runtime-input.js +4 -2
  121. package/dist/sdk/runtime.d.ts +2 -5
  122. package/dist/sdk/runtime.js +3 -2
  123. package/docs/ASSURANCE.md +59 -2
  124. package/docs/COMMANDS.md +8 -2
  125. package/docs/READ_OUTPUT_CONTRACTS.md +55 -8
  126. package/docs/RELEASING.md +54 -11
  127. package/docs/SDK_CONTEXT_INTEGRITY.md +94 -4
  128. package/docs/SDK_CONTEXT_TRUTH_CONTRACTS.md +13 -5
  129. package/marketplace.json +2 -2
  130. package/package.json +3 -3
  131. package/packages/pm-beads/package.json +1 -1
  132. package/packages/pm-calendar/package.json +1 -1
  133. package/packages/pm-command-kit/package.json +1 -1
  134. package/packages/pm-digital-twin/package.json +1 -1
  135. package/packages/pm-governance-audit/package.json +1 -1
  136. package/packages/pm-guide-shell/package.json +1 -1
  137. package/packages/pm-kanban/package.json +1 -1
  138. package/packages/pm-lifecycle-hooks/package.json +1 -1
  139. package/packages/pm-linked-test-adapters/package.json +1 -1
  140. package/packages/pm-search-advanced/package.json +1 -1
  141. package/packages/pm-templates/package.json +1 -1
  142. package/packages/pm-todos/package.json +1 -1
  143. package/packages/pm-vcs/package.json +1 -1
  144. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  145. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  146. package/sdk/public-surface.json +1241 -180
  147. package/dist/cli-bundle/chunks/chunk-BBOFSVAK.js +0 -197
  148. package/dist/cli-bundle/chunks/chunk-YAMTJL6Y.js +0 -34
  149. package/dist/cli-bundle/chunks/chunk-YSVSMJ2B.js +0 -2
  150. package/dist/cli-bundle/chunks/register-mutation-E27WCLSZ.js +0 -20
  151. package/dist/cli-bundle/chunks/register-operations-4R6I7CPY.js +0 -2
  152. package/dist/cli-bundle/focused-chunks/chunk-F43TT2QQ.js +0 -8
  153. package/dist/cli-bundle/focused-chunks/chunk-KYUQGTSB.js +0 -2
  154. package/dist/cli-bundle/focused-chunks/chunk-LZ4MV3RH.js +0 -2
  155. package/dist/cli-bundle/focused-chunks/chunk-PGXJQLCT.js +0 -155
  156. package/dist/cli-bundle/focused-chunks/chunk-Q4YY3XNF.js +0 -2
  157. package/dist/cli-bundle/focused-chunks/chunk-QK753U3U.js +0 -46
  158. package/dist/cli-bundle/focused-chunks/chunk-QUMB2J27.js +0 -2
  159. package/dist/cli-bundle/focused-chunks/chunk-SM7MTG27.js +0 -2
  160. package/dist/cli-bundle/focused-chunks/chunk-ZM6TZVHC.js +0 -2
@@ -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.14"
9
+ "version": "2026.8.16"
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.14",
16
+ "version": "2026.8.16",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/CHANGELOG.md CHANGED
@@ -1,9 +1,52 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.8.16 - 2026-08-16
4
+
5
+ ### Fixed
6
+
7
+ - Workspace history integrity refusals escape typed CLI recovery and become high Sentry faults ([pm-2zkvxm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-2zkvxm.toon))
8
+ - GH-1019/GH-1020/GH-1021: Node 24 nightly platform regressions after PR \#1016 ([pm-zno2iu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-zno2iu.toon))
9
+ - GH-814/GH-821/GH-1034: SDK metadata reads must distinguish missing, invalid, and unreadable tracker roots from empty ([pm-23xkss](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-23xkss.toon))
10
+ - GH-1028: history-author-acknowledge bulk mutation lacks dry-run and misreports empty selection ([pm-mcxk8v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-mcxk8v.toon))
11
+ - GH-1030: contracts --json --full is wholly omitted by the default output budget ([pm-2qvq7a](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-2qvq7a.toon))
12
+ - Auto Release blocker closure ignores successful recovery dispatch and reruns the stale tag-push workflow ([pm-db8onn](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-db8onn.toon))
13
+ - A commit pushed directly to the default branch can never be released: both analyzer-evidence fallbacks presuppose a pull request, and nothing declares that precondition ([pm-u1baah](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-u1baah.toon))
14
+
15
+ ### Other
16
+
17
+ - PR \#1035 final review convergence: POSIX enumeration wording and plan-level replication ratchet ([pm-k9l7e1](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-k9l7e1.toon))
18
+ - PR \#1035 exact-head review follow-up: sandbox-safe proof, completion uniqueness, replacement equivalence, and test isolation ([pm-jv3y4q](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-jv3y4q.toon))
19
+ - Retire the bespoke gate scripts onto the assurance primitives, with a recorded per-script disposition so 6,500 lines of external enforcement either moves into the product or says why it cannot ([pm-4ok4ex](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-4ok4ex.toon))
20
+
21
+ ## 2026.8.15 - 2026-08-15
22
+
23
+ ### Fixed
24
+
25
+ - Provide an audited repair and severity-migration contract for legacy invalid provenance ([pm-76fkpp](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-76fkpp.toon))
26
+ - Detect extension-host pm-cli version skew before a workspace reports healthy ([pm-643e0k](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-643e0k.toon))
27
+ - Restore strict unknown-key parity for docs linked-artifact additions ([pm-22rzjp](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-22rzjp.toon))
28
+ - Surface replication gate scopes trigger activation to relevant diff content ([pm-mrhwow](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-mrhwow.toon))
29
+ - Make every failing health verdict self-indexing and attach gate severity to findings ([pm-larv4r](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-larv4r.toon))
30
+ - GH-1004: history-repair remains writer-version-specific across 2026.8.7 and 2026.8.13 ([pm-igdvfq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-igdvfq.toon))
31
+ - Assurance gates preserve zero-valued counts and report actionable source failures ([pm-xmmafu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-xmmafu.toon))
32
+ - A budget-truncated read is resumable on one surface and terminal on five, and the only recovery the envelope names is to abandon the budget that truncated it ([pm-8nev0o](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-8nev0o.toon))
33
+ - Ranking explanation is sized by the workspace rather than by the answer: explaining two returned rows emits one entry per active item and ignores the token budget entirely ([pm-okgxwa](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-okgxwa.toon))
34
+ - The unknown-option refusal asserts the option belongs on another command path without checking, so a spelling that exists nowhere sends the reader on an unbounded search ([pm-in23qu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-in23qu.toon))
35
+ - The gate verdict withholds its evidence as a declaration-order prefix, so the assertion that produced a blocking verdict can be the row the default read drops ([pm-e5gl05](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-e5gl05.toon))
36
+ - GH-1008: assurance measurements accept unknown source kinds and contracts hide the valid vocabulary ([pm-atnfh4](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-atnfh4.toon))
37
+ - GH-1007: assurance gate declarations omit trigger and escape the typed refusal contract ([pm-88mo8m](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-88mo8m.toon))
38
+ - A CI-wired quality gate is red on a clean checkout of main and green in hosted CI for the same commit, because its measured output carries a telemetry warning whose presence depends on whether the local flush reached the network ([pm-t7wn04](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-t7wn04.toon))
39
+ - GH-1011: Windows Node 24 nightly cache fixture loses the authoritative linked-test collection ([pm-k47yqn](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-k47yqn.toon))
40
+
41
+ ### Other
42
+
43
+ - The agent token-surface harness from pm-a22j is wired into nothing, so output-size regressions like the 33k-token health check land undetected ([pm-dpqa3h](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-dpqa3h.toon))
44
+
3
45
  ## 2026.8.14 - 2026-08-14
4
46
 
5
47
  ### Fixed
6
48
 
49
+ - Unsupported assurance triggers bypass the typed evaluation-refusal boundary and surface as high-severity Sentry faults ([pm-9yhl2v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-9yhl2v.toon))
7
50
  - A single transient per-test timeout fails the whole pipeline: 1,942 tests share one uniform 30s budget, no retry is configured, and the only diagnosis path is decoding a blob artifact ([pm-rizqb6](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-rizqb6.toon))
8
51
  - The degradation ladder only sees top-level arrays, so the governance reads whose bulk is nested skip every intermediate rung and return nothing at all ([pm-kyjdne](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-kyjdne.toon))
9
52
  - A budget-truncated read reports that rows are missing without a cursor, a recovery, or any sign that it overrode the caller's explicit request for all of them ([pm-jt8aa2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-jt8aa2.toon))
@@ -12,7 +55,6 @@
12
55
  - Exact command-path summaries expose intent, flags, and format-aware output ceilings ([pm-pmrae8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-pmrae8.toon))
13
56
  - Default output ceilings bind representative read surfaces with depth-heavy negative controls ([pm-s2h0mq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-s2h0mq.toon))
14
57
  - Two of the three ci-triggered assurance gates never ran on a pull request, so the append-only history assertion that carries the immutability guarantee was evaluated only after merge ([pm-fhifkc](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-fhifkc.toon))
15
- - Unsupported assurance triggers bypass the typed evaluation-refusal boundary and surface as high-severity Sentry faults ([pm-9yhl2v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-9yhl2v.toon))
16
58
  - The ordering-cycle finding names the items in the cycle and not the contradiction that creates it, so its remediation hint cannot be executed without re-deriving the cause by hand ([pm-xvt7ps](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-xvt7ps.toon))
17
59
  - The edge-count floor is denominated over a population that includes the edges the graph itself calls redundant, so repairing 73 witnessed implied ordering rows and silently relaxing the guard are the same privileged act ([pm-9gzr4r](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-9gzr4r.toon))
18
60
  - The graph node floor counts materialized placeholders, so its negative control declares the fully repaired corpus a failure and the gate passes only while a dangling reference exists ([pm-mfvsng](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-mfvsng.toon))
@@ -395,7 +437,6 @@
395
437
  - GH-824: core-field recovery must name dedicated flags instead of extension activation ([pm-2jtbl8](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-2jtbl8.toon))
396
438
  - CodeFactor fixed-only success payload blocks exact-head release gate ([pm-xcrlkl](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-xcrlkl.toon))
397
439
  - Both declared context intents are unreachable because the intent applier assigns field-group names into the section value domain, and the two validators give contradictory advice ([pm-ai45y9](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ai45y9.toon))
398
- - GH-814: SDK metadata reads must distinguish missing and invalid tracker roots from an empty tracker ([pm-23xkss](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-23xkss.toon))
399
440
  - The runtime contract enumeration is not closed over the surface it can resolve: 14 rendered commands, including the list-open that AGENTS.md mandates, are contract-backed by name yet absent from every enumeration ([pm-6j7r1a](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-6j7r1a.toon))
400
441
  - GH-817: machine-readable flag contracts need semantic invocation metadata and stdin capability ([pm-11phn1](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-11phn1.toon))
401
442
 
@@ -513,7 +554,6 @@
513
554
  - Evaluate Sentry 10.68.0 compatibility and retain 10.67.0 ([pm-r31390](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-r31390.toon))
514
555
  - Derive ALL MCP tool inputSchemas from \*\_FLAG_CONTRACTS — eliminate hand-declared parallel schema tables (extend the pm_copy pattern) ([pm-xwah](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-xwah.toon))
515
556
  - Generate shell completions, MCP tool registrations, and command reference docs from the contracts table (single source of truth) ([pm-mu8m](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-mu8m.toon))
516
- - The agent token-surface harness from pm-a22j is wired into nothing, so output-size regressions like the 33k-token health check land undetected ([pm-dpqa3h](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-dpqa3h.toon))
517
557
  - Ecosystem review and deep-graph enrichment pass 2026-07-27: all-status census, CLI simplification + token-efficiency + long-term brainstorm, dedupe-checked gap filing ([pm-89qv6b](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-89qv6b.toon))
518
558
  - Evaluate @toon-format/toon 4 compatibility and item-format migration ([pm-5cgm2z](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-5cgm2z.toon))
519
559
  - ADR amendment: extensible durable agent provenance dimensions and privacy boundaries ([pm-oskdmu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/decisions/pm-oskdmu.toon))
@@ -1257,6 +1297,7 @@
1257
1297
 
1258
1298
  ### Other
1259
1299
 
1300
+ - PR \#406 review follow-up: clear partial MCP extension registries before fallback execution ([pm-dyzy](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-dyzy.toon))
1260
1301
  - 2026-06-25 PM ecosystem taxonomy and context backlog normalization ([pm-57vh](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/plans/pm-57vh.toon))
1261
1302
  - Normalize stale audit containers and intentional-open resolved items ([pm-psc0](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-psc0.toon))
1262
1303
  - Extend pm package init --declarative to the full capability matrix (hooks/search/importers/schema/renderers/parser/preflight/services) ([pm-lfdv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-lfdv.toon))
@@ -1282,7 +1323,6 @@
1282
1323
  - Action-scoped MCP parameter descriptions: split shared name/target description per action (schema vs profile) ([pm-fq80](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-fq80.toon))
1283
1324
  - ADR: offline BM25 lexical provider + relevance eval harness for search quality ([pm-f2al](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/decisions/pm-f2al.toon))
1284
1325
  - ADR: explicit pm_format_version front-matter field for storage schema evolution ([pm-eeai](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/decisions/pm-eeai.toon))
1285
- - PR \#406 review follow-up: clear partial MCP extension registries before fallback execution ([pm-dyzy](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-dyzy.toon))
1286
1326
  - Expose project profile application through MCP contracts and drift gates ([pm-bhmk](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-bhmk.toon))
1287
1327
  - ADR: dependency-aware actionability for pm next — ready = active leaf with no open blocked_by; reuse compareCriticalItems + shared blocked_by resolver ([pm-9x6k](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/decisions/pm-9x6k.toon))
1288
1328
  - registerProfile core registration surface: ExtensionApi + registry + loader gate + capability-usage + policy surface ([pm-6oox](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-6oox.toon))
@@ -1411,6 +1451,7 @@
1411
1451
 
1412
1452
  ### Fixed
1413
1453
 
1454
+ - pm-changelog over-escapes markdown in entry titles (parens + intra-word underscores) ([pm-3299](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3299.toon))
1414
1455
  - GH-293..296 CLI parser and search regression bundle ([pm-yy45](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-yy45.toon))
1415
1456
  - appendLineAtomic is not truly atomic: concurrent appends to history JSONL can interleave ([pm-xy9n](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-xy9n.toon))
1416
1457
  - Project-scope extension install writes ~69MB node_modules per workspace (peer pm-cli + transitive Sentry/OTel) ([pm-oxq2](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-oxq2.toon))
@@ -1420,7 +1461,6 @@
1420
1461
  - Accept --status all for duplicate-safe search and list filters ([pm-i02t](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-i02t.toon))
1421
1462
  - Fix nightly cross-platform reliability: macOS realpath in extension-command test and Windows .cmd spawn EINVAL ([pm-gf6f](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-gf6f.toon))
1422
1463
  - pm health 2.3-3.1s in dev repo (~2x the 1.3s baseline): drift-scan cache hit still reads + content-hashes every history stream ([pm-c90s](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-c90s.toon))
1423
- - pm-changelog over-escapes markdown in entry titles (parens + intra-word underscores) ([pm-3299](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-3299.toon))
1424
1464
 
1425
1465
  ### Removed
1426
1466
 
@@ -1693,11 +1733,11 @@
1693
1733
 
1694
1734
  ### Other
1695
1735
 
1736
+ - Upgrade pm-changelog to 2026.6.9 and validate changelog fidelity ([pm-kx7v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-kx7v.toon))
1696
1737
  - Document pm-linked-test-adapters package in EXTENSIONS.md and TESTING.md ([pm-yj8n](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-yj8n.toon))
1697
1738
  - Close stale GH issues, clarify dedupe-audit docs, and bump @sentry/node ([pm-utd6](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-utd6.toon))
1698
1739
  - Run verification matrix and temp-dir smoke for active cycle ([pm-rav7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-rav7.toon))
1699
1740
  - SDK author-ergonomics batch: extension-manifest JSON Schema, getWorkspaceContracts memoization, FlagDefinition type/value_type unification ([pm-l0jd](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-l0jd.toon))
1700
- - Upgrade pm-changelog to 2026.6.9 and validate changelog fidelity ([pm-kx7v](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-kx7v.toon))
1701
1741
 
1702
1742
  ## 2026.6.9 - 2026-06-09
1703
1743
 
@@ -1720,9 +1760,9 @@
1720
1760
 
1721
1761
  ### Added
1722
1762
 
1763
+ - Add schema show-status status inspection ([pm-qpus](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-qpus.toon))
1723
1764
  - 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))
1724
1765
  - 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))
1725
- - Add schema show-status status inspection ([pm-qpus](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-qpus.toon))
1726
1766
 
1727
1767
  ### Changed
1728
1768
 
@@ -1982,10 +2022,10 @@
1982
2022
 
1983
2023
  ### Other
1984
2024
 
2025
+ - 2026-05-30 package SDK dogfood audit and startup telemetry performance pass ([pm-qmx3](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-qmx3.toon))
1985
2026
  - Make MCP status enum + shell completion runtime-resolved from schema (not hardcoded) ([pm-jtdc](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-jtdc.toon))
1986
2027
  - Calendar view/format did-you-mean + dependency and type-safety cleanup ([pm-5oxq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-5oxq.toon))
1987
2028
  - Defer eager per-command startup work: completion flag-strings, MCP tool schema build, telemetry flush spawn ([pm-3mal](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-3mal.toon))
1988
- - 2026-05-30 package SDK dogfood audit and startup telemetry performance pass ([pm-qmx3](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-qmx3.toon))
1989
2029
 
1990
2030
  ## 2026.5.30 - 2026-05-30
1991
2031
 
@@ -2065,6 +2105,8 @@
2065
2105
 
2066
2106
  ### Other
2067
2107
 
2108
+ - Generate full historical CHANGELOG.md through pm-changelog ([pm-afl9](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-afl9.toon))
2109
+ - Verify and repair pm-changelog-generated main CHANGELOG release alignment ([pm-5baq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-5baq.toon))
2068
2110
  - Deduplicate beads/todos index.ts package-runtime loader (install-safe mechanism needed) ([pm-wwa7](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-wwa7.toon))
2069
2111
  - Deduplicate Beads and Todos package adapter runtimes ([pm-ybfj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-ybfj.toon))
2070
2112
  - Deduplicate bundled package runtime option parsing helpers ([pm-y5u0](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-y5u0.toon))
@@ -2083,11 +2125,9 @@
2083
2125
  - Single-source Codex plugin docs tool surface ([pm-d97r](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-d97r.toon))
2084
2126
  - Single-source extension governance policy defaults ([pm-axd1](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-axd1.toon))
2085
2127
  - Unify plugin/MCP naming: pm-cli-claude→pm-claude, pm-cli-codex→pm-codex, pm-cli-native MCP→pm-mcp, packages @unbrained/pm-package-X→@unbrained/pm-X ([pm-ash0](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-ash0.toon))
2086
- - Generate full historical CHANGELOG.md through pm-changelog ([pm-afl9](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-afl9.toon))
2087
2128
  - Calendar + SDK + vector-search + docs review (2026-05-27) ([pm-a0w4](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-a0w4.toon))
2088
2129
  - Agent-UX combined PR: compact mutation output (pm-ch59) + smarter unknown-flag recovery (pm-8nyc) ([pm-70mi](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/plans/pm-70mi.toon))
2089
2130
  - Dogfood 2026-05-20 low-severity CLI polish backlog (config UX, init verbosity, help alias bloat, default-safety, doc/validator drift) ([pm-5k2w](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-5k2w.toon))
2090
- - Verify and repair pm-changelog-generated main CHANGELOG release alignment ([pm-5baq](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-5baq.toon))
2091
2131
  - Single-source guide-shell routing snippets across docs ([pm-48vd](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-48vd.toon))
2092
2132
  - Single-source Plan workflow examples across plugin docs ([pm-3y56](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-3y56.toon))
2093
2133
  - Keep large modules maintainable via barrel re-export splits + explicit uncovered allowlist ([pm-3cbk](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/decisions/pm-3cbk.toon))
@@ -2125,6 +2165,7 @@
2125
2165
 
2126
2166
  ### Other
2127
2167
 
2168
+ - Install and validate pm-changelog package ([pm-7811](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-7811.toon))
2128
2169
  - history-repair command + legacy drift cleanup + replay dedup ([pm-c3dx](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/plans/pm-c3dx.toon))
2129
2170
  - Deduplicate templates package runtime and legacy command implementation ([pm-ypqp](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-ypqp.toon))
2130
2171
  - Deduplicate mutation author fallback resolution across commands ([pm-xh0y](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-xh0y.toon))
@@ -2142,7 +2183,6 @@
2142
2183
  - Deduplicate comments, notes, and learnings command stacks ([pm-9y8q](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-9y8q.toon))
2143
2184
  - Deduplicate front-matter key-order contract literals in tests ([pm-8fx3](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-8fx3.toon))
2144
2185
  - Extract shared temporary-directory lifecycle helpers for tests ([pm-7tug](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-7tug.toon))
2145
- - Install and validate pm-changelog package ([pm-7811](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-7811.toon))
2146
2186
  - Extract shared direct CLI spawn helper for integration tests ([pm-401l](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-401l.toon))
2147
2187
 
2148
2188
  ## 2026.5.23 - 2026-05-23
@@ -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]="05cf369c-7529-57ab-984a-f5505cc9c0c9")}catch(e){}}();
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]="48877bbb-17bf-5a78-91fa-19a2f2f4c2be")}catch(e){}}();
3
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";
@@ -587,10 +587,20 @@ function resolveUnknownOptionSuggestions(message, commandName) {
587
587
  ...suggestNearestLongFlags(match[1], collectKnownLongFlags(commandName)),
588
588
  ])
589
589
  : undefined;
590
+ const otherCommands = match
591
+ ? findOtherCommandsForFlag(match[1], commandName)
592
+ : [];
593
+ const declaredOnPath = match !== null &&
594
+ collectKnownLongFlags(commandName).includes(normalizeLongFlag(match[1]));
590
595
  return {
591
596
  match,
592
597
  suggestions,
593
- otherCommands: match ? findOtherCommandsForFlag(match[1], commandName) : [],
598
+ otherCommands,
599
+ scope: declaredOnPath
600
+ ? "declared_on_path"
601
+ : otherCommands.length > 0
602
+ ? "declared_elsewhere"
603
+ : "declared_nowhere",
594
604
  };
595
605
  }
596
606
  function resolveSuggestedRetryForUnknownOption(invocationArgv, unknownOptionMatch, unknownOptionSuggestions) {
@@ -681,6 +691,7 @@ export async function resolveCommanderUsageContext(error, rootProgram, extension
681
691
  ? unknownOption.otherCommands.length
682
692
  : undefined,
683
693
  unknownOptionOtherCommandsTruncated: unknownOption.otherCommands.length > 12 || undefined,
694
+ unknownOptionScope: unknownOption.scope,
684
695
  suggestedRetryCommand,
685
696
  verifiedCollectionItemId: workspaceUsage.verifiedCollectionItemId,
686
697
  ...splitSchemaSubcommand,
@@ -691,7 +702,7 @@ export async function resolveCommanderUsageContext(error, rootProgram, extension
691
702
  /** Implements format commander usage message for the public runtime surface of this module. */
692
703
  export async function formatCommanderUsageMessage(error, rootProgram, extensionDescriptors, guidanceOverrides = {}) {
693
704
  const usageContext = await resolveCommanderUsageContext(error, rootProgram, extensionDescriptors, guidanceOverrides);
694
- const { message, commandName, allowedTypes, unknownCommandExamples, unknownCommandNextSteps, attemptedCommand, normalizedInvocationArgs, providedOptionFlags, unknownOptionSuggestions, unknownOptionOtherCommands, unknownOptionOtherCommandsTotal, unknownOptionOtherCommandsTruncated, unknownSubcommandPath, unknownSubcommandToken, unknownSubcommandAllowedValues, suggestedRetryCommand, verifiedCollectionItemId, failedExtensions, } = usageContext;
705
+ const { message, commandName, allowedTypes, unknownCommandExamples, unknownCommandNextSteps, attemptedCommand, normalizedInvocationArgs, providedOptionFlags, unknownOptionSuggestions, unknownOptionOtherCommands, unknownOptionOtherCommandsTotal, unknownOptionOtherCommandsTruncated, unknownOptionScope, unknownSubcommandPath, unknownSubcommandToken, unknownSubcommandAllowedValues, suggestedRetryCommand, verifiedCollectionItemId, failedExtensions, } = usageContext;
695
706
  const formatted = formatCommanderErrorForDisplay(message, commandName, allowedTypes, {
696
707
  unknownCommandExamples,
697
708
  unknownCommandNextSteps,
@@ -702,6 +713,7 @@ export async function formatCommanderUsageMessage(error, rootProgram, extensionD
702
713
  unknownOptionOtherCommands,
703
714
  unknownOptionOtherCommandsTotal,
704
715
  unknownOptionOtherCommandsTruncated,
716
+ unknownOptionScope,
705
717
  unknownSubcommandPath,
706
718
  unknownSubcommandToken,
707
719
  unknownSubcommandAllowedValues,
@@ -732,6 +744,7 @@ export async function formatCommanderUsageJson(error, rootProgram, extensionDesc
732
744
  unknownOptionOtherCommands: usageContext.unknownOptionOtherCommands,
733
745
  unknownOptionOtherCommandsTotal: usageContext.unknownOptionOtherCommandsTotal,
734
746
  unknownOptionOtherCommandsTruncated: usageContext.unknownOptionOtherCommandsTruncated,
747
+ unknownOptionScope: usageContext.unknownOptionScope,
735
748
  unknownSubcommandPath: usageContext.unknownSubcommandPath,
736
749
  unknownSubcommandToken: usageContext.unknownSubcommandToken,
737
750
  unknownSubcommandAllowedValues: usageContext.unknownSubcommandAllowedValues,
@@ -750,4 +763,4 @@ export const _testOnly = {
750
763
  suggestNearestLongFlags,
751
764
  };
752
765
  //# sourceMappingURL=commander-usage.js.map
753
- //# debugId=05cf369c-7529-57ab-984a-f5505cc9c0c9
766
+ //# debugId=48877bbb-17bf-5a78-91fa-19a2f2f4c2be
@@ -13,6 +13,7 @@ interface GuidanceMessage {
13
13
  why?: string;
14
14
  examples?: string[];
15
15
  nextSteps?: string[];
16
+ verificationErrors?: string[];
16
17
  recovery?: PmCliErrorRecoveryPayload;
17
18
  }
18
19
  /** Documents the json error envelope payload exchanged by command, SDK, and package integrations. */
@@ -35,6 +36,8 @@ export interface JsonErrorEnvelope {
35
36
  examples?: string[];
36
37
  /** Value that configures or reports next steps for this contract. */
37
38
  next_steps?: string[];
39
+ /** Exact integrity verifier findings that caused the operation to refuse. */
40
+ verification_errors?: string[];
38
41
  /** Value that configures or reports recovery for this contract. */
39
42
  recovery?: PmCliErrorRecoveryPayload;
40
43
  }
@@ -58,6 +61,8 @@ export interface ErrorClassification {
58
61
  examples?: string[];
59
62
  /** Value that configures or reports next steps for this contract. */
60
63
  next_steps?: string[];
64
+ /** Exact integrity verifier findings that caused the operation to refuse. */
65
+ verification_errors?: string[];
61
66
  /** Value that configures or reports recovery for this contract. */
62
67
  recovery?: PmCliErrorRecoveryPayload;
63
68
  }
@@ -81,6 +86,8 @@ export interface CommanderGuidanceContext {
81
86
  unknownOptionOtherCommandsTotal?: number;
82
87
  /** Whether the structured command candidates reached their own ceiling. */
83
88
  unknownOptionOtherCommandsTruncated?: boolean;
89
+ /** Declared lexicon membership of the rejected option spelling. */
90
+ unknownOptionScope?: PmCliErrorRecoveryPayload["option_scope"];
84
91
  /** Command family whose positional subcommand was split into invalid tokens. */
85
92
  unknownSubcommandPath?: string;
86
93
  /** Rejected positional subcommand token or token sequence. */
@@ -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]="9ec35c35-f2dc-5f86-a166-cf0c80eab1bd")}catch(e){}}();
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]="5251395b-715a-5559-a7d5-ca3bc4a1bb16")}catch(e){}}();
3
3
  import { resolveRecoveryCommandName } from "../sdk/agent/command-recovery.js";
4
4
  import { renderPmCommand } from "./argv-utils.js";
5
5
  import { discoverNearbyPmRoot } from "../sdk/tracker-root-discovery.js";
@@ -171,6 +171,11 @@ function normalizeRecoveryPayload(payload) {
171
171
  if (payload.candidate_commands_truncated === true) {
172
172
  normalized.candidate_commands_truncated = true;
173
173
  }
174
+ if (payload.option_scope === "declared_on_path" ||
175
+ payload.option_scope === "declared_elsewhere" ||
176
+ payload.option_scope === "declared_nowhere") {
177
+ normalized.option_scope = payload.option_scope;
178
+ }
174
179
  assignRecoveryString(normalized, "suggested_retry", payload.suggested_retry);
175
180
  if (typeof payload.retry_after_ms === "number" &&
176
181
  Number.isSafeInteger(payload.retry_after_ms) &&
@@ -221,6 +226,9 @@ function renderRecoveryBundle(recovery) {
221
226
  if (normalized.candidate_commands_truncated === true) {
222
227
  lines.push(" candidate_commands_truncated: true");
223
228
  }
229
+ if (normalized.option_scope !== undefined) {
230
+ lines.push(` option_scope: ${normalized.option_scope}`);
231
+ }
224
232
  appendRecoveryTextLine(lines, "suggested_retry", normalized.suggested_retry);
225
233
  if (typeof normalized.retry_after_ms === "number") {
226
234
  lines.push(` retry_after_ms: ${normalized.retry_after_ms}`);
@@ -258,6 +266,10 @@ export function renderGuidanceMessage(message) {
258
266
  lines.push("");
259
267
  lines.push(...renderList("Next steps:", message.nextSteps));
260
268
  }
269
+ if (message.verificationErrors && message.verificationErrors.length > 0) {
270
+ lines.push("");
271
+ lines.push(...renderList("Verification errors:", message.verificationErrors));
272
+ }
261
273
  const recoveryLines = renderRecoveryBundle(message.recovery);
262
274
  if (recoveryLines.length > 0) {
263
275
  lines.push("");
@@ -283,6 +295,9 @@ function guidanceToJsonEnvelope(message, exitCode) {
283
295
  if (message.nextSteps && message.nextSteps.length > 0) {
284
296
  payload.next_steps = message.nextSteps;
285
297
  }
298
+ if (message.verificationErrors && message.verificationErrors.length > 0) {
299
+ payload.verification_errors = message.verificationErrors;
300
+ }
286
301
  if (message.recovery) {
287
302
  payload.recovery = message.recovery;
288
303
  }
@@ -305,6 +320,9 @@ function guidanceToClassification(message) {
305
320
  if (message.nextSteps && message.nextSteps.length > 0) {
306
321
  payload.next_steps = message.nextSteps;
307
322
  }
323
+ if (message.verificationErrors && message.verificationErrors.length > 0) {
324
+ payload.verification_errors = message.verificationErrors;
325
+ }
308
326
  if (message.recovery) {
309
327
  payload.recovery = message.recovery;
310
328
  }
@@ -397,6 +415,8 @@ function applyPmCliErrorContext(guidance, rawMessage, context) {
397
415
  const type = normalizeContextValue(context.type, errorType(code));
398
416
  const examples = normalizeContextList(context.examples) ?? guidance.examples;
399
417
  const nextSteps = normalizeContextList(context.nextSteps) ?? guidance.nextSteps;
418
+ const verificationErrors = normalizeContextList(context.verification_errors) ??
419
+ guidance.verificationErrors;
400
420
  const fallbackTitle = guidance.code === "command_failed" && context.code
401
421
  ? buildFallbackTitleFromMessage(normalizedRawMessage)
402
422
  : undefined;
@@ -413,6 +433,7 @@ function applyPmCliErrorContext(guidance, rawMessage, context) {
413
433
  why: normalizeContextValue(context.why, guidance.why),
414
434
  examples,
415
435
  nextSteps,
436
+ verificationErrors,
416
437
  recovery,
417
438
  };
418
439
  }
@@ -826,6 +847,42 @@ function buildUnsupportedUpdateOptionGuidance(optionName, context, suggestions)
826
847
  }),
827
848
  });
828
849
  }
850
+ const UNKNOWN_OPTION_REQUIRED_BY_SCOPE = {
851
+ declared_elsewhere: "Use an option declared on this path, or move the declared option to one of its accepting command paths.",
852
+ declared_on_path: "Use the option with the value and syntax declared by this command path.",
853
+ declared_nowhere: "Use a declared option on this command path; this spelling exists nowhere in the command lexicon.",
854
+ };
855
+ function resolveUnknownOptionCandidateContext(context) {
856
+ const otherCommands = normalizeContextList(context.unknownOptionOtherCommands) ?? [];
857
+ return {
858
+ otherCommands,
859
+ optionScope: context.unknownOptionScope ??
860
+ (otherCommands.length > 0 ? "declared_elsewhere" : "declared_nowhere"),
861
+ candidateTotal: context.unknownOptionOtherCommandsTotal ?? otherCommands.length,
862
+ };
863
+ }
864
+ function buildUnknownOptionNextSteps(optionName, commandName, suggestions, candidateContext, retryCommand) {
865
+ const proseCommands = candidateContext.otherCommands.slice(0, 3);
866
+ const proseRemainder = candidateContext.candidateTotal - proseCommands.length;
867
+ const proseRemainderText = proseRemainder > 0
868
+ ? ` and ${String(proseRemainder)} more command path(s)`
869
+ : "";
870
+ return [
871
+ "Run command help to confirm the exact option contracts for this command path.",
872
+ suggestions.length
873
+ ? `Nearest supported options: ${suggestions.join(", ")}`
874
+ : undefined,
875
+ proseCommands.length
876
+ ? `${optionName} is accepted by ${proseCommands.join(", ")}${proseRemainderText}. Inspect those command contracts only if you intended a different operation.`
877
+ : undefined,
878
+ candidateContext.optionScope === "declared_nowhere"
879
+ ? `${optionName} is not declared on any command path. Use a nearest supported option on ${commandName ?? "the attempted command"}, or inspect that command's help.`
880
+ : undefined,
881
+ retryCommand
882
+ ? `Replay with suggested correction: ${retryCommand}`
883
+ : undefined,
884
+ ].filter((entry) => typeof entry === "string");
885
+ }
829
886
  function buildUnknownOptionGuidance(message, commandName, context) {
830
887
  const unknownOption = message.match(/unknown option '([^']+)'/);
831
888
  if (!unknownOption) {
@@ -839,26 +896,8 @@ function buildUnknownOptionGuidance(message, commandName, context) {
839
896
  (optionName === "--file" || optionName === "--doc")) {
840
897
  return buildUnsupportedUpdateOptionGuidance(optionName, context, suggestions);
841
898
  }
842
- const otherCommands = normalizeContextList(guidanceContext.unknownOptionOtherCommands) ?? [];
843
- const candidateTotal = guidanceContext.unknownOptionOtherCommandsTotal ?? otherCommands.length;
844
- const proseCommands = otherCommands.slice(0, 3);
845
- const proseRemainder = candidateTotal - proseCommands.length;
846
- let proseRemainderText = "";
847
- if (proseRemainder > 0) {
848
- proseRemainderText = ` and ${String(proseRemainder)} more command path(s)`;
849
- }
850
- const nextSteps = [
851
- "Run command help to confirm the exact option contracts for this command path.",
852
- suggestions.length
853
- ? `Nearest supported options: ${suggestions.join(", ")}`
854
- : undefined,
855
- proseCommands.length
856
- ? `${optionName} is accepted by ${proseCommands.join(", ")}${proseRemainderText}. Inspect those command contracts only if you intended a different operation.`
857
- : undefined,
858
- retryCommand
859
- ? `Replay with suggested correction: ${retryCommand}`
860
- : undefined,
861
- ].filter((entry) => typeof entry === "string");
899
+ const candidateContext = resolveUnknownOptionCandidateContext(guidanceContext);
900
+ const nextSteps = buildUnknownOptionNextSteps(optionName, commandName, suggestions, candidateContext, retryCommand);
862
901
  const examples = [
863
902
  retryCommand,
864
903
  `pm ${commandName ?? "<command>"} --help`,
@@ -867,15 +906,16 @@ function buildUnknownOptionGuidance(message, commandName, context) {
867
906
  code: "unknown_option",
868
907
  title: `Unknown option ${optionName}`,
869
908
  happened: `Commander does not recognize option ${optionName} for this command path.`,
870
- required: "Use supported options only, or move option to the correct subcommand.",
909
+ required: UNKNOWN_OPTION_REQUIRED_BY_SCOPE[candidateContext.optionScope],
871
910
  why: "Option contracts are command-specific and intentionally validated.",
872
911
  examples,
873
912
  nextSteps,
874
913
  recovery: buildCommanderRecoveryPayload(context, {
875
914
  suggested_flags: suggestions.length > 0 ? suggestions : undefined,
876
- candidate_commands: otherCommands,
877
- candidate_commands_total: candidateTotal || undefined,
915
+ candidate_commands: candidateContext.otherCommands,
916
+ candidate_commands_total: candidateContext.candidateTotal || undefined,
878
917
  candidate_commands_truncated: guidanceContext.unknownOptionOtherCommandsTruncated,
918
+ option_scope: candidateContext.optionScope,
879
919
  }),
880
920
  });
881
921
  }
@@ -1197,4 +1237,4 @@ export const _testOnly = {
1197
1237
  resolveKnownPackageCommandHint,
1198
1238
  };
1199
1239
  //# sourceMappingURL=error-guidance.js.map
1200
- //# debugId=9ec35c35-f2dc-5f86-a166-cf0c80eab1bd
1240
+ //# debugId=5251395b-715a-5559-a7d5-ca3bc4a1bb16
package/dist/cli/main.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * @module cli/main
4
4
  */
5
5
 
6
- !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]="c8924d43-556d-5041-9fe3-7c5c944531ae")}catch(e){}}();
6
+ !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]="cf9d1c78-06f0-5330-8562-ac863c95ee86")}catch(e){}}();
7
7
  import { Command } from "commander";
8
8
  import { activateExtensions, clearActiveExtensionHooks, createCoreCommandHookContext, resetActiveExtensionRuntimeState, createEmptyExtensionRegistrationRegistry, discoverExtensions, getActiveCommandResult, getActiveExtensionRegistrations, loadExtensions, consumeAfterCommandAffectedItems, runActiveCommandHandler, runActiveParserOverride, runActivePreflightOverride, runAfterCommandHooks, runBeforeCommandHooks, setActiveCommandResult, setActiveCommandContext, setActiveExtensionCommands, setActiveExtensionHooks, setActiveExtensionParsers, setActiveExtensionPreflight, setActiveExtensionRegistrations, setActiveExtensionRenderers, setActiveExtensionServices, pathExists, resolvePmCliVersion, resolvePmPackageRootFromModule, resolveItemTypeRegistry, resolveRuntimeFieldRegistry, EXIT_CODE, resolveTelemetryErrorCategory, PmCliError, asRecordOrNull, printError, printResult, maybeRunFirstUseTelemetryPrompt, emitTelemetryErrorEvent, startTelemetryCommand, deriveTelemetryCommandResolution, sentryCaptureCliError, sentryFinishCommandSpan, sentryFlush, sentryLogCliUsageError, sentrySetCommandContext, sentryStartCommandSpan, ensureSentryInit, getSettingsPath, resolvePmRoot, readSettings, readSettingsWithMetadata, runWithWorkspaceHarnessSignalDescriptors, createLazyModule, } from "../sdk/runtime-primitives.js";
9
9
  import { resolveSubcommandFlagContractsForCommand } from "../sdk/cli-contracts.js";
@@ -1598,6 +1598,7 @@ function attachProgramLifecycleHooks(rootProgram) {
1598
1598
  outputBudget: rawGlobalOptions.outputBudget,
1599
1599
  outputFormat: rawGlobalOptions.outputFormat,
1600
1600
  outputSession: rawGlobalOptions.outputSession,
1601
+ outputCursor: rawGlobalOptions.outputCursor,
1601
1602
  });
1602
1603
  forwardReadOutputIncludeModes(actionCommand, commandPath, globalOptions, commandOptions);
1603
1604
  await maybeRunFirstUseTelemetryPrompt(commandPath, globalOptions);
@@ -2511,4 +2512,4 @@ export const _testOnly = {
2511
2512
  wrapThrownErrorForSentry,
2512
2513
  };
2513
2514
  //# sourceMappingURL=main.js.map
2514
- //# debugId=c8924d43-556d-5041-9fe3-7c5c944531ae
2515
+ //# debugId=cf9d1c78-06f0-5330-8562-ac863c95ee86
@@ -1,18 +1,20 @@
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]="50a7ce23-2abf-5240-b426-b73cb704e329")}catch(e){}}();
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]="2745d577-4f6c-5b9e-b54a-e1451e022d63")}catch(e){}}();
3
3
  import { resolvePmRoot } from "../sdk/runtime-primitives.js";
4
- import { acknowledgeUnknownAuthorHistoryEvents, resolveUnknownAuthorAcknowledgmentSelector, } from "../sdk/author-attribution.js";
4
+ import { acknowledgeUnknownAuthorHistoryEventsFromTransport } from "../sdk/author-attribution.js";
5
5
  import { collect, getGlobalOptions, printResult, readOptionString, } from "./registration-helpers.js";
6
6
  async function runHistoryAuthorAcknowledgeAction(options, command) {
7
7
  const globalOptions = getGlobalOptions(command);
8
8
  const rawEvents = Array.isArray(options.event)
9
9
  ? options.event
10
10
  : [];
11
- const selector = resolveUnknownAuthorAcknowledgmentSelector(rawEvents, options.allActionable === true);
12
- const result = await acknowledgeUnknownAuthorHistoryEvents(resolvePmRoot(process.cwd(), globalOptions.path), {
13
- events: selector.events,
14
- all_actionable: selector.all_actionable,
15
- attributed_author: readOptionString(options, "attributedAuthor"),
11
+ const result = await acknowledgeUnknownAuthorHistoryEventsFromTransport(resolvePmRoot(process.cwd(), globalOptions.path), {
12
+ historyEvent: rawEvents,
13
+ allActionable: options.allActionable === true,
14
+ dryRun: options.dryRun === true,
15
+ planFingerprint: readOptionString(options, "planFingerprint"),
16
+ limit: options.limit,
17
+ attributedAuthor: readOptionString(options, "attributedAuthor"),
16
18
  reviewer: readOptionString(options, "reviewer"),
17
19
  reason: readOptionString(options, "reason"),
18
20
  });
@@ -24,11 +26,14 @@ export function registerHistoryAuthorAcknowledgeCommand(program) {
24
26
  .command("history-author-acknowledge")
25
27
  .option("--event <item-id:line>", "Unknown-author event coordinate (repeatable)", collect)
26
28
  .option("--all-actionable", "Select all actionable events")
27
- .requiredOption("--attributed-author <value>", "Reviewed principal attribution")
28
- .requiredOption("--reviewer <value>", "Disposition reviewer")
29
- .requiredOption("--reason <value>", "Review evidence")
29
+ .option("--dry-run", "Preview a deterministic source-bound plan")
30
+ .option("--plan-fingerprint <sha256>", "Apply the exact fingerprint returned by --dry-run")
31
+ .option("--limit <n>", "Maximum coordinate rows returned in the plan")
32
+ .option("--attributed-author <value>", "Reviewed principal attribution")
33
+ .option("--reviewer <value>", "Disposition reviewer")
34
+ .option("--reason <value>", "Review evidence")
30
35
  .description("Append audited dispositions for immutable unknown-author events.")
31
36
  .action(runHistoryAuthorAcknowledgeAction);
32
37
  }
33
38
  //# sourceMappingURL=register-history-author.js.map
34
- //# debugId=50a7ce23-2abf-5240-b426-b73cb704e329
39
+ //# debugId=2745d577-4f6c-5b9e-b54a-e1451e022d63
@@ -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]="6c7d647c-e489-51e3-b84b-5b62b4114033")}catch(e){}}();
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]="60ee1ab9-00a0-50a7-839e-4938ecc6a48f")}catch(e){}}();
3
3
  import { resolveBodyFileContent, EXIT_CODE, splitCommaList, PmCliError, createUnknownSubcommandError, } from "../sdk/runtime-primitives.js";
4
4
  import { CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS, PLAN_CREATE_METADATA_PARAMETER_KEYS, UPDATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS, } from "../sdk/cli-contracts.js";
5
5
  import { BUILTIN_ITEM_TYPE_VALUES } from "../types/index.js";
@@ -1670,6 +1670,7 @@ export function registerMutationCommands(program, registrationOptions = {}) {
1670
1670
  .argument("[id]", "Item id (omit with --all)")
1671
1671
  .option("--all", "Scan every stream for drift and repair each drifted stream in one audited pass")
1672
1672
  .option("--dry-run", "Preview the re-anchor impact without writing the history file")
1673
+ .option("--normalize-provenance", "Remove invalid provenance; return aggregate-only evidence")
1673
1674
  .option("--author <value>", "Mutation author")
1674
1675
  .option("--message <value>", "Audit history message for the repair marker entry")
1675
1676
  .option("--force", "Force ownership/lock override")
@@ -1684,6 +1685,7 @@ export function registerMutationCommands(program, registrationOptions = {}) {
1684
1685
  author: typeof options.author === "string" ? options.author : undefined,
1685
1686
  message: typeof options.message === "string" ? options.message : undefined,
1686
1687
  force: Boolean(options.force),
1688
+ normalizeProvenance: options.normalizeProvenance === true,
1687
1689
  };
1688
1690
  // history-repair only re-anchors the audit stream; item content is untouched,
1689
1691
  // so search caches do not need invalidation.
@@ -1838,4 +1840,4 @@ export function registerMutationCommands(program, registrationOptions = {}) {
1838
1840
  .action(runDepsAction);
1839
1841
  }
1840
1842
  //# sourceMappingURL=register-mutation.js.map
1841
- //# debugId=6c7d647c-e489-51e3-b84b-5b62b4114033
1843
+ //# debugId=60ee1ab9-00a0-50a7-839e-4938ecc6a48f