@unbrained/pm-cli 2026.9.27 → 2026.9.29

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 (158) hide show
  1. package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +7 -6
  2. package/.agents/skills/pm-user/references/BACKLOG_SHAPING.md +1 -1
  3. package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +26 -3
  4. package/.claude-plugin/marketplace.json +4 -6
  5. package/CHANGELOG.md +43 -0
  6. package/dist/cli/error-guidance.js +1 -1
  7. package/dist/cli/help-json-payload.js +2 -2
  8. package/dist/cli/main.js +2 -2
  9. package/dist/cli/register-operations.js +1 -1
  10. package/dist/cli/runtime/invocation-options.d.ts +3 -1
  11. package/dist/cli/runtime/invocation-options.js +1 -1
  12. package/dist/cli-bundle/bundle-manifest.json +151 -151
  13. package/dist/cli-bundle/chunks/{chunk-6OJVQ7SW.js → chunk-2AQKVJMW.js} +2 -2
  14. package/dist/cli-bundle/chunks/{chunk-TSF2LPIH.js → chunk-4DOL43PF.js} +2 -2
  15. package/dist/cli-bundle/chunks/{chunk-7TAGYNFP.js → chunk-5KEPG36D.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-IEP3VAT5.js → chunk-D32HVIB2.js} +2 -2
  17. package/dist/cli-bundle/chunks/{chunk-AUS6USO4.js → chunk-GP6QTYSD.js} +2 -2
  18. package/dist/cli-bundle/chunks/chunk-OTLIM22J.js +2 -0
  19. package/dist/cli-bundle/chunks/{chunk-LKGQUZ5M.js → chunk-P75SO5HO.js} +2 -2
  20. package/dist/cli-bundle/chunks/{chunk-4SLLCDFL.js → chunk-PJSQAWWQ.js} +64 -64
  21. package/dist/cli-bundle/chunks/{chunk-V5UGBYHN.js → chunk-S5A2UIRV.js} +62 -62
  22. package/dist/cli-bundle/chunks/chunk-SC6JHXFT.js +31 -0
  23. package/dist/cli-bundle/chunks/{chunk-3BTJ66CB.js → chunk-SEJ53XDN.js} +55 -55
  24. package/dist/cli-bundle/chunks/{chunk-OKVDVERQ.js → chunk-SJI55O65.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-JX6WCCHL.js → chunk-U3QJGJYN.js} +2 -2
  26. package/dist/cli-bundle/chunks/{register-list-query-6PAJ4PBU.js → register-list-query-R3ELWWPY.js} +2 -2
  27. package/dist/cli-bundle/chunks/{register-mutation-RZCXZXYS.js → register-mutation-WHXJXIHJ.js} +2 -2
  28. package/dist/cli-bundle/chunks/{register-operations-GK6VU2H2.js → register-operations-7ASWBYQG.js} +2 -2
  29. package/dist/cli-bundle/chunks/{register-setup-ASEMNMBF.js → register-setup-FDRTUG54.js} +2 -2
  30. package/dist/cli-bundle/focused-chunks/{chunk-QO4MTAEA.js → chunk-2O3QFI3G.js} +2 -2
  31. package/dist/cli-bundle/focused-chunks/{chunk-LBDWUHQD.js → chunk-4A4DO5ZT.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/chunk-5MC57KRC.js +2 -0
  33. package/dist/cli-bundle/focused-chunks/{chunk-NWRVNHAD.js → chunk-6OXJVE74.js} +17 -17
  34. package/dist/cli-bundle/focused-chunks/{chunk-MILJCOFJ.js → chunk-7URX7FMY.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/{chunk-OJRX6G22.js → chunk-AVP5C674.js} +2 -2
  36. package/dist/cli-bundle/focused-chunks/{chunk-SMADBUPL.js → chunk-AZE7KUHG.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/{chunk-GZD4ZYIB.js → chunk-DZVOCJFY.js} +14 -14
  38. package/dist/cli-bundle/focused-chunks/chunk-FBIRNSYP.js +75 -0
  39. package/dist/cli-bundle/focused-chunks/{chunk-NETVXIH5.js → chunk-IFBA3ZAT.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-OJKJFDIG.js → chunk-K3AIMRIK.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/{chunk-DQ3MB7BO.js → chunk-KLKKCHWM.js} +2 -2
  42. package/dist/cli-bundle/focused-chunks/{chunk-PDVL7QYU.js → chunk-MRH4A542.js} +15 -15
  43. package/dist/cli-bundle/focused-chunks/{chunk-6UNKK3UH.js → chunk-NXQZMKW5.js} +2 -2
  44. package/dist/cli-bundle/focused-chunks/chunk-NY6FLQTN.js +2 -0
  45. package/dist/cli-bundle/focused-chunks/{chunk-NZAG7OKB.js → chunk-T4H6Q44B.js} +2 -2
  46. package/dist/cli-bundle/main.js +22 -22
  47. package/dist/cli-bundle/sdk-authoring.js +1 -1
  48. package/dist/cli-bundle/sdk-contracts.js +1 -1
  49. package/dist/cli-bundle/sdk-core.js +22 -21
  50. package/dist/cli-bundle/sdk-governance.js +1 -1
  51. package/dist/cli-bundle/sdk-graph.js +1 -1
  52. package/dist/cli-bundle/sdk-merge.js +51 -51
  53. package/dist/cli-bundle/sdk-query.js +1 -1
  54. package/dist/cli-bundle/sdk-runtime.js +1 -1
  55. package/dist/cli-bundle/sdk-testing.js +1 -1
  56. package/dist/cli-bundle/sdk.js +2 -2
  57. package/dist/core/diagnostics/remediation.js +1 -1
  58. package/dist/core/history/replay.js +1 -1
  59. package/dist/core/item/item-format.js +1 -1
  60. package/dist/core/output/mutation-projection.js +1 -1
  61. package/dist/core/store/settings.js +3 -3
  62. package/dist/core/telemetry/runtime.js +2 -2
  63. package/dist/sdk/cli-contracts/command-aliases.js +1 -1
  64. package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1
  65. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
  66. package/dist/sdk/completion/fish.js +3 -3
  67. package/dist/sdk/completion/zsh.js +3 -3
  68. package/dist/sdk/extension/copy-scope.d.ts +2 -2
  69. package/dist/sdk/extension/copy-scope.js +1 -1
  70. package/dist/sdk/extension/install-plan.js +1 -1
  71. package/dist/sdk/extension/install-runtime.js +2 -2
  72. package/dist/sdk/extension/static-inventory.js +1 -1
  73. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  74. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  75. package/dist/sdk/governance/health-merge-evidence.d.ts +18 -0
  76. package/dist/sdk/governance/health-merge-evidence.js +2 -0
  77. package/dist/sdk/governance/health.js +1 -1
  78. package/dist/sdk/index.d.ts +1 -0
  79. package/dist/sdk/index.js +1 -1
  80. package/dist/sdk/lifecycle/plan-mutation-receipt.d.ts +53 -0
  81. package/dist/sdk/lifecycle/plan-mutation-receipt.js +2 -0
  82. package/dist/sdk/lifecycle/plan.d.ts +3 -0
  83. package/dist/sdk/lifecycle/plan.js +1 -1
  84. package/dist/sdk/linked-artifacts.js +1 -1
  85. package/dist/sdk/merge/install.js +2 -2
  86. package/dist/sdk/output-projection.d.ts +1 -1
  87. package/dist/sdk/output-projection.js +1 -1
  88. package/dist/sdk/public-surface.json +1 -1
  89. package/dist/sdk/read-output-budget.d.ts +1 -1
  90. package/dist/sdk/read-output-budget.js +1 -1
  91. package/dist/sdk/read-output-contracts.js +1 -1
  92. package/dist/sdk/runtime/actions.js +1 -1
  93. package/dist/sdk/runtime-input.d.ts +2 -0
  94. package/dist/sdk/runtime-input.js +1 -1
  95. package/dist/sdk/runtime.js +1 -1
  96. package/dist/sdk/similarity-scoring.js +1 -1
  97. package/dist/sdk/telemetry.d.ts +2 -0
  98. package/dist/sdk/telemetry.js +3 -1
  99. package/dist/sdk/test/execution.d.ts +11 -0
  100. package/dist/sdk/test/execution.js +2 -2
  101. package/dist/sdk/test/parsers.d.ts +1 -1
  102. package/dist/sdk/test/parsers.js +1 -1
  103. package/dist/types.d.ts +3 -3
  104. package/dist/types.js +1 -1
  105. package/docs/AGENT_READ_AND_TEST_RECEIPTS.md +21 -0
  106. package/docs/CLAUDE_CODE_PLUGIN.md +12 -7
  107. package/docs/CLI_GRAMMAR.md +18 -1
  108. package/docs/CONFIGURATION.md +2 -0
  109. package/docs/ECOSYSTEM_PLANNING_REVIEW.md +270 -0
  110. package/docs/PACKAGE_EVIDENCE.md +18 -7
  111. package/docs/README.md +2 -0
  112. package/docs/SDK_EVIDENCE_TRACEABILITY.md +34 -0
  113. package/docs/TESTING.md +14 -3
  114. package/docs/agent-task-token-baseline.json +28 -2
  115. package/docs/agent-task-transcripts.json +137 -14
  116. package/docs/ecosystem-review-2026-09-28.json +3159 -0
  117. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +7 -3
  118. package/marketplace.json +4 -6
  119. package/package.json +5 -5
  120. package/packages/pm-beads/package.json +1 -1
  121. package/packages/pm-calendar/package.json +1 -1
  122. package/packages/pm-command-kit/package.json +1 -1
  123. package/packages/pm-digital-twin/package.json +1 -1
  124. package/packages/pm-governance-audit/package.json +1 -1
  125. package/packages/pm-guide-shell/package.json +1 -1
  126. package/packages/pm-kanban/package.json +1 -1
  127. package/packages/pm-lifecycle-hooks/package.json +1 -1
  128. package/packages/pm-linked-test-adapters/package.json +1 -1
  129. package/packages/pm-search-advanced/package.json +1 -1
  130. package/packages/pm-templates/package.json +1 -1
  131. package/packages/pm-todos/package.json +1 -1
  132. package/packages/pm-vcs/package.json +1 -1
  133. package/plugins/pm-claude/.claude-plugin/plugin.json +4 -2
  134. package/plugins/pm-claude/.mcp.json +1 -2
  135. package/plugins/pm-claude/README.md +7 -7
  136. package/plugins/pm-claude/package.json +2 -2
  137. package/plugins/pm-claude/{commands/pm-calendar.md → skills/pm-calendar/SKILL.md} +1 -0
  138. package/plugins/pm-claude/{commands/pm-close-task.md → skills/pm-close-task/SKILL.md} +1 -0
  139. package/plugins/pm-claude/{commands/pm-init.md → skills/pm-init/SKILL.md} +2 -1
  140. package/plugins/pm-claude/{commands/pm-list.md → skills/pm-list/SKILL.md} +2 -1
  141. package/plugins/pm-claude/{commands/pm-new.md → skills/pm-new/SKILL.md} +1 -0
  142. package/plugins/pm-claude/{commands/pm-search.md → skills/pm-search/SKILL.md} +1 -0
  143. package/plugins/pm-claude/{commands/pm-start-task.md → skills/pm-start-task/SKILL.md} +1 -0
  144. package/plugins/pm-claude/{commands/pm-status.md → skills/pm-status/SKILL.md} +1 -0
  145. package/plugins/pm-claude/{commands/pm-triage.md → skills/pm-triage/SKILL.md} +1 -0
  146. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  147. package/plugins/pm-codex/package.json +2 -2
  148. package/plugins/pm-codex/plugin.json +1 -1
  149. package/dist/cli-bundle/chunks/chunk-4UPZLUT2.js +0 -29
  150. package/dist/cli-bundle/chunks/chunk-LC6WEA5U.js +0 -2
  151. package/dist/cli-bundle/focused-chunks/chunk-6J2YCGSN.js +0 -75
  152. package/dist/cli-bundle/focused-chunks/chunk-E7LYK7V5.js +0 -2
  153. package/dist/cli-bundle/focused-chunks/chunk-KMPKKSA6.js +0 -2
  154. package/plugins/pm-claude/commands/pm-audit.md +0 -38
  155. package/plugins/pm-claude/commands/pm-developer.md +0 -38
  156. package/plugins/pm-claude/commands/pm-planner.md +0 -54
  157. package/plugins/pm-claude/commands/pm-release.md +0 -41
  158. package/plugins/pm-claude/commands/pm-workflow.md +0 -49
@@ -0,0 +1,270 @@
1
+ # Ecosystem planning review — 2026-09-28
2
+
3
+ Tracked by [pm-p9a4](../.agents/pm/tasks/pm-p9a4.toon),
4
+ [pm-m08hza](../.agents/pm/decisions/pm-m08hza.toon),
5
+ [pm-1jzupz](../.agents/pm/features/pm-1jzupz.toon), and
6
+ [pm-wg07](../.agents/pm/chores/pm-wg07.toon).
7
+
8
+ Project management = context management. This review records a complete
9
+ structural census, targeted semantic review, measured operational checks, and
10
+ planning decisions on existing canonical items. It does not certify that every
11
+ historical sentence is correct or that every future capability is implemented.
12
+ Read the live item before acting on this dated evidence.
13
+
14
+ ## Population and evidence
15
+
16
+ The strict CLI snapshot at `2026-09-28T05:40:12.139Z` contains 2,826 items:
17
+ 2,532 closed, 221 open, 59 draft, and 14 canceled. No records or fields were
18
+ omitted, and no item or directory was unreadable. Blocking is also a derived
19
+ dependency condition: the initial orientation reported 60 blocked open items,
20
+ although no item used a literal `blocked` lifecycle status.
21
+
22
+ The cursor-resumed event read collected 68,876 complete events from 2,841
23
+ streams through `2026-09-28T05:41:59.143Z`, including deleted-item and workspace
24
+ history. All 23 Plan items also received deep plan reads for steps, decisions,
25
+ validation and resume metadata. This later cutoff includes the first review claim/comment events;
26
+ it is not silently equated with the earlier item snapshot. History-drift
27
+ validation passed across all 2,826 current items. The public SDK independently
28
+ verified hash chains for all 2,841 collected streams with zero failures.
29
+
30
+ [The per-item census](ecosystem-review-2026-09-28.json) records every snapshot
31
+ ID, status, content fingerprint, structural classification, missing planning
32
+ fields, historical evidence gaps, and remediation owner. These are mechanical
33
+ findings, not invented historical estimates, outcomes, or review approvals.
34
+ The full raw corpus stays outside public documentation.
35
+
36
+ | Measure | Initial observation | Interpretation |
37
+ | --- | ---: | --- |
38
+ | Directed graph edges | 14,097 | Deduplicated directed basis |
39
+ | Ordering layers / critical-path edges | 12 / 11 | Acyclic prerequisite graph |
40
+ | Missing graph endpoints / isolated items | 0 / 0 | Across all statuses |
41
+ | Active / terminal outcome-unreachable items | 0 / 0 | Typed reachability basis |
42
+ | Generic `related` edges | 5,589 | 39.65% of directed edges |
43
+ | Specialized semantic edges | 1,885 | Discovery, recurrence, incident, verification, supersession |
44
+ | Items without a specialized semantic edge | 1,463 | 86 active, 1,377 terminal; not necessarily invalid |
45
+ | Legacy hierarchy exceptions | 7 children | Existing informational cardinality/direction findings |
46
+ | Closed items missing structured resolution evidence | 170 | Preserved residual, not a new regression |
47
+ | Active items missing required planning fields | 1 | Sentry major-upgrade item, repaired in this review |
48
+ | Tracked non-tracker artifacts with exact item links | 1,921 / 1,921 | Path ownership, not proof for every code change |
49
+ | Duplicate candidate clusters | 28 | Reviewed candidates, not 28 duplicate obligations |
50
+
51
+ Scanner records with different provider identities, parent/child acceptance
52
+ slices, distinct incidents and dated release executions remain separate. The
53
+ three identically titled accidental probes are already canceled. Similar audit
54
+ titles require their own event/acceptance comparison before any consolidation.
55
+ No existing item was deleted or closed merely because it matched a title.
56
+
57
+ ## Graph organization
58
+
59
+ Use one structural parent and outcome paths for scope, `implements` for delivery,
60
+ `blocked_by` for an actual prerequisite, `discovered_from` for provenance,
61
+ `verifies` for verification responsibility, and `recurs_from` only for an
62
+ established recurring mechanism. Maintain prior evidence when correcting a link.
63
+ A declaration that an item will verify something is not a passing test result.
64
+
65
+ The native reconstruction plan retains its original execution obligations;
66
+ overlapping newly added steps are explicitly superseded by their existing owners,
67
+ and a dated census checkpoint records the completed refresh.
68
+
69
+ The planning pass restores explicit missing prerequisites in prospective
70
+ reminders, cross-branch relevance and external-package verification. The
71
+ historical batch restores three `discovered_from` edges to the governance run
72
+ whose original comment explicitly named the discoveries. Their release and
73
+ closure evidence remain unchanged. Generic links and transitive ordering
74
+ shortcuts are not added to meet density or depth targets.
75
+
76
+ [pm-qnl2](../.agents/pm/tasks/pm-qnl2.toon) owns active enrichment;
77
+ [pm-lnrk](../.agents/pm/tasks/pm-lnrk.toon) owns historical batches;
78
+ [pm-pj2isb](../.agents/pm/chores/pm-pj2isb.toon) owns misleading placeholder
79
+ metadata. The completed [pm-e9zh](../.agents/pm/chores/pm-e9zh.toon) preserves
80
+ its explicitly unrecoverable 170-item residual. A missing historical observation
81
+ must remain unknown until independent evidence is found.
82
+
83
+ After this pass the live graph contains 2,829 items and 14,118 directed edges,
84
+ including 1,894 specialized semantic edges. Generic `related` is 5,590 after one
85
+ reviewed correction from causal provenance to non-causal coordination; no dangling endpoints, isolated items or ordering contradictions were
86
+ introduced. Outcome reachability remains 100%. The 1,458 records without a
87
+ specialized semantic edge remain visible for evidence review; absence alone
88
+ does not justify inventing a relationship.
89
+
90
+ ## Horizon and outcome organization
91
+
92
+ These are planning windows, not delivery promises. Capacity, prerequisites and
93
+ measured evidence govern promotion. Priority measures impact; horizon measures
94
+ readiness and uncertainty. Review monthly and when a material observation changes.
95
+
96
+ | Horizon | Illustrative window | Canonical outcomes and promotion evidence |
97
+ | --- | --- | --- |
98
+ | Current | 0–3 months | [Agent-legible grammar](../.agents/pm/milestones/pm-j82fd3.toon), active readiness, retrieval failures, release diagnosis and current protocol proof. Require completed-task token comparisons, preserved compatibility and actual installed-consumer evidence. |
99
+ | Emerging | 3–12 months | [Provable history](../.agents/pm/milestones/pm-w7ccmv.toon), reproducible observations and [measured self-improvement](../.agents/pm/milestones/pm-zzylb9.toon). Require independent replay, mutation coverage and three consecutive measured improvement cycles. |
100
+ | Expansion | 12–36 months | [Proven scale](../.agents/pm/milestones/pm-o87av6.toon), [universal domain platform](../.agents/pm/milestones/pm-t4d7nz.toon), [federated agents](../.agents/pm/milestones/pm-z1kr34.toon). Require published million-item/fleet distributions and SDK-only domain exemplars. |
101
+ | Exploratory | 36+ months | [Multi-decade continuity](../.agents/pm/milestones/pm-ljrh29.toon) and independently evaluated cognitive mechanisms. Require explicit architecture decisions, migration proofs, calibrated uncertainty and rejection criteria. |
102
+
103
+ The [SDK-complete outcome](../.agents/pm/milestones/pm-9rgaal.toon) and
104
+ [GA stability contract](../.agents/pm/milestones/pm-xp1xsw.toon) retain their own
105
+ acceptance boundaries. Earlier SDK promotion work remains completed history;
106
+ future integrations must use published SDK contracts and expose gaps as individual
107
+ items. New names or parallel roadmap trees do not improve traceability.
108
+
109
+ ## Concrete planning refinements
110
+
111
+ - **Command simplicity:** root help already has thirteen entries including help.
112
+ Evaluate the remaining grammar through complete orient/retrieve/claim/mutate/
113
+ verify/close and recovery journeys. Preserve working aliases and capabilities.
114
+ Count tokens across errors, retries, cursor pages and contract discovery.
115
+ The new [Plan receipt issue](../.agents/pm/issues/pm-hqy7lr.toon) records
116
+ whole-plan output amplification observed during single-step mutations; its
117
+ acceptance requires bounded SDK-owned receipts and preserved full inspection.
118
+ - **Algorithms:** the [existing portfolio](CONTEXT_ALGORITHM_PORTFOLIO.md)
119
+ remains authoritative. Individual items now detail bounded candidate quotas,
120
+ evidence coverage per token, typed spreading activation, activation decay,
121
+ approximate affinity sketches and content-addressed summary trees. Each names
122
+ inputs, costs, fallback, negative controls and a promotion/rejection rule.
123
+ Mathematical guarantees require their assumptions; a heuristic is not a proof.
124
+ - **Scale and branches:** separately measure cold build and warm reads at 3,
125
+ 100,000 and 1,000,000 items, and 1/10/100/1,000 agents. Exercise partitions,
126
+ retries, expired claims, clock skew and arbitrary merge order. Record p50/p95/
127
+ p99, memory, index amplification and no-lost-acknowledged-write evidence.
128
+ - **Recursive improvement:** bind observe, propose, evaluate, land and remeasure
129
+ stages to immutable evidence. Keep the evaluator and held-out data independent
130
+ of the change under evaluation. Rejected proposals stay searchable.
131
+ - **Universal environments:** episodes use SDK reset/observe/step/score contracts,
132
+ seeded snapshots, idempotent actions, independent verdicts and temporal cutoffs.
133
+ Distinguish termination from truncation and prevent future-evidence leakage.
134
+ - **Durability:** append-only API behavior, hash-chain tamper evidence,
135
+ authenticated authorship and externally anchored proof are different guarantees.
136
+ Migration, redaction and cryptographic rotation need explicit restore tests.
137
+
138
+ ## Verified behavior and remaining limits
139
+
140
+ ### Local qwen3 retrieval
141
+
142
+ The project already selects local Ollama `qwen3-embedding:0.6b`. Refresh embedded
143
+ 1,085 stale inputs in 34 requests, with zero retries or splits, at approximately
144
+ 11.91 inputs/second. This proves multi-input batching at the current corpus size;
145
+ it does not prove the outstanding 100k/1M performance acceptance.
146
+
147
+ Five project golden queries were evaluated at k=10:
148
+
149
+ | Mode | Mean nDCG | Mean MRR | Mean recall | Broad history/episode query recall |
150
+ | --- | ---: | ---: | ---: | ---: |
151
+ | Keyword | 0.7451 | 0.80 | 0.8727 | 4/11 |
152
+ | Semantic | 0.7944 | 0.85 | 0.8182 | 1/11 |
153
+ | Hybrid | 0.8405 | 0.90 | 0.8364 | 2/11 |
154
+
155
+ Aggregate passes conceal weak queries. The existing retrieval-quality owner
156
+ [pm-p1g43q](../.agents/pm/features/pm-p1g43q.toon) now carries this observation,
157
+ feasible per-query floors, held-out paraphrase evaluation and mode comparisons.
158
+ At k=10, a query with eleven relevant items cannot attain recall 1. The final
159
+ semantic index check covered all 2,829 current items with zero stale vectors.
160
+
161
+ ### MCP and SDK
162
+
163
+ The official [versioning page](https://modelcontextprotocol.io/docs/2026-07-28/learn/versioning)
164
+ identifies `2026-07-28` as current. The repository
165
+ [conformance matrix](MCP_2026_07_28_CONFORMANCE.md) was compared with the official
166
+ [key changes](https://modelcontextprotocol.io/specification/2026-07-28/changelog).
167
+ The focused SDK, stateless stdio, Streamable HTTP and legacy-handshake run passed
168
+ 145 tests in twelve files. Exact-version public verification also passed direct
169
+ and package-selected npx/bunx CLI dispatch, MCP discovery, Skills, Apps and HTTP,
170
+ including missing-bin negative controls. This is focused conformance evidence, not an assertion
171
+ that every optional extension or every deployment is certified. Deprecated
172
+ features must not be newly advertised merely to increase a feature count.
173
+
174
+ Ordinary review mutations recorded detected Codex identity, model and effort
175
+ without `PM_AUTHOR` or author flags. Role/topic inference carries its source and
176
+ confidence. Missing signals remain unknown; configuration is not native proof.
177
+
178
+ ### Daily release
179
+
180
+ Version `2026.9.28` exists in npm and GitHub. The
181
+ [original automatic attempt](https://github.com/unbraind/pm-cli/actions/runs/36375818142)
182
+ failed after Windows global npm installation failed in the child release run.
183
+ The [same-version recovery](https://github.com/unbraind/pm-cli/actions/runs/36380136948)
184
+ passed npm, global npm and Bun on Linux, macOS and Windows and advertised the
185
+ existing version. It did not create a second automatic version that day.
186
+
187
+ The new [installer-diagnostics issue](../.agents/pm/issues/pm-q7c36n.toon)
188
+ records why the original cause remains unknown: the subprocess wrapper discards
189
+ error/signal details and the installer labels every retry registry availability.
190
+ Recovery proves the artifact can pass; it does not erase the failed attempt or
191
+ establish its cause. Keep automatic reliability, publication and consumer
192
+ acceptance as separate measurements.
193
+
194
+ ## Prevention and repeatability
195
+
196
+ Six active-only zero-debt assertions now join `tracker-context-quality` for
197
+ missing description, acceptance criteria, risk, confidence, estimate and expected
198
+ result. The existing local and hosted quality pipeline invokes this same native
199
+ SDK gate. Terminal evidence gaps are deliberately outside the active-only policy.
200
+ An isolated temporary workspace failed all six assertions with missing fields
201
+ and passed all six after repair. This checks presence; semantic quality still
202
+ requires evidence review.
203
+
204
+ For repeat reviews, follow the
205
+ [ecosystem planning skill](../.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md).
206
+ Use complete CLI snapshots outside the prompt, cursor-resumed event streams,
207
+ exact source fingerprints, all-status duplicate checks and bounded mutation
208
+ batches. At million-item scale, use streaming/indexed consumers rather than
209
+ loading a whole JSON collection into the agent's context. Every changed item
210
+ retains its canonical owner, history and original acceptance boundary.
211
+
212
+ ## Verification record
213
+
214
+ Quiescent validation passed for all 2,829 final items. The 170 historical
215
+ structured-evidence warnings are unchanged. All 38 changed history streams pass
216
+ the public SDK chain verifier; the 35 pre-existing streams retain byte-identical
217
+ historical prefixes. The three enriched closed features retain identical status,
218
+ closure, resolution and release fields. Final graph-composition and all 47
219
+ tracker-context-quality assertions pass, including the six new readiness rules.
220
+
221
+ An earlier long-running context gate saw one history-drift failure while this
222
+ review was still mutating the tracker. Independent validation and the final gate
223
+ pass with writes stopped; the earlier result is retained as a concurrent-read
224
+ observation, not rewritten as success. Skill/document validation, local links
225
+ and the generated changelog check also pass. All review claims are released. Three distinct issues were added after duplicate
226
+ checks: installer diagnostics, Plan mutation receipts and startup admission
227
+ diagnosis. Existing programmes retain their original acceptance boundaries.
228
+
229
+ The broad static run passed its build, lint, generated contracts, SDK parity,
230
+ command grammar, task-token, MCP deprecation, gate-registry and context-quality
231
+ checks, then failed the import-cost timing gate (bare Node median 305 ms against
232
+ 106 ms). An isolated rerun passed all ten SDK entrypoints with unchanged budgets.
233
+ The initial timing failure remains part of the evidence; it is not a continuous
234
+ all-green static invocation.
235
+
236
+ The remaining graph and record-integrity gates passed. The mutation gate passed
237
+ with 323 of 330 mutants killed and seven classified as equivalent. The CLI
238
+ transport benchmark initially exceeded its list threshold (442 ms versus 419 ms);
239
+ the isolated rerun also failed: get 385/362 ms, context 466/433 ms, next
240
+ 457/440 ms and create 424/398 ms. No performance limit was raised. The new
241
+ [startup investigation](../.agents/pm/issues/pm-bj7rq0.toon) distinguishes runner
242
+ qualification from a demonstrated product regression and preserves the completed
243
+ transport-floor implementation. This is an unresolved validation limitation.
244
+
245
+ ## PR review corrections
246
+
247
+ PR #1333 identified two overly broad relationship claims. The standing release
248
+ reminder predates the new installer-diagnostics issue, so their link is `related`
249
+ coordination rather than `discovered_from` provenance. Four `verifies` rows from
250
+ the historical batch were removed: checking citations, history continuity and
251
+ release attribution does not verify the source run or feature behavior. The three
252
+ source-backed discovery links on closed features remain valid and unchanged.
253
+
254
+ The original writes and their corrections remain in immutable history. Five
255
+ holder/target/text-scoped citation exemptions distinguish the batch inventory
256
+ from verification claims without raising the prose-edge ceiling. The corrected
257
+ graph-composition gate passes.
258
+
259
+ The follow-up review narrowed those five exemptions to the complete original
260
+ paragraphs, including their historical source-event coordinates. In an isolated
261
+ temporary tracker the original citations pass, while a later batch comment
262
+ asserting an unrecorded prerequisite is blocked with one detected gap. This
263
+ prevents the common phrase “Historical batch” from exempting future claims.
264
+
265
+ Annotation review corrected 26 notes and five comments that contained literal
266
+ JSON wrappers around prose. Supported note/comment edits retain the exact inner
267
+ text and append correction events. Per-item rereads confirm lifecycle, closure,
268
+ release, expected and actual fields are unchanged; original annotations remain
269
+ in the history streams. Planning guidance now distinguishes plain-text input
270
+ from intentional JSON events.
@@ -1,8 +1,10 @@
1
1
  # Install Plans and Update Evidence
2
2
 
3
- Tracked by [pm-5bsofk](../.agents/pm/issues/pm-5bsofk.toon) and
3
+ Tracked by [pm-erogk1](../.agents/pm/issues/pm-erogk1.toon),
4
+ [pm-5bsofk](../.agents/pm/issues/pm-5bsofk.toon) and
4
5
  [pm-gf5zw8](../.agents/pm/issues/pm-gf5zw8.toon), with claim controls tracked by
5
- [pm-eqdo85](../.agents/pm/issues/pm-eqdo85.toon).
6
+ [pm-eqdo85](../.agents/pm/issues/pm-eqdo85.toon) and Git metadata exclusion by
7
+ [pm-k7nxaz](../.agents/pm/issues/pm-k7nxaz.toon).
6
8
 
7
9
  ## Install planning
8
10
 
@@ -10,17 +12,26 @@ Preview an install with `pm package install ./local-package --project --dry-run`
10
12
  The `details.install_plan` receipt distinguishes directory, archive, npm, and
11
13
  GitHub sources and reports logical file bytes, file/directory/link counts, and
12
14
  the copy policy. External local directories are directory snapshots, including
13
- development artifacts; nested destinations exclude `.agents`, `node_modules`,
14
- and installer backup directories at every depth using the installer's filter.
15
- Counts are lower bounds when `complete` is false, with `stop_reason`
16
- identifying the entry or depth limit. A source-directory alias resolves to its
15
+ development artifacts other than `.git`. All copied directory sources exclude
16
+ `.git` entries at every depth, including worktree files and symlinks, and count
17
+ those entries in `excluded_entries`. Nested destinations also exclude `.agents`,
18
+ `node_modules`, and installer backup directories at every depth using the
19
+ installer's filter.
20
+ The bounded planner can return lower-bound counts with `complete: false` and a
21
+ `stop_reason` when called directly. Installing a local directory now refuses
22
+ that incomplete scan in both dry-run and real modes before writing or
23
+ activating. SDK callers receive
24
+ `extension_install_incomplete_source_scan`; the CLI exits nonzero with the
25
+ entry or depth limit and a packed-archive recovery step. That recovery keeps
26
+ the requested `--project` or `--global` installation scope. A source-directory
27
+ alias resolves to its
17
28
  directory before copying; symlink entries inside the source remain links and
18
29
  their targets are never traversed.
19
30
  Planning writes no destination files, managed state, or activation settings;
20
31
  archive and remote source resolution can still prepare temporary source files
21
32
  and perform network or dependency-resolution work.
22
33
 
23
- For development-heavy or incomplete local snapshots, `packed_alternative`
34
+ For development-heavy local snapshots, `packed_alternative`
24
35
  provides argument vectors for `npm pack --ignore-scripts --json` and archive
25
36
  installation. Run packing in its reported `cwd`, substitute the returned
26
37
  `pack_result[0].filename`, and install the resulting archive. Normal local
package/docs/README.md CHANGED
@@ -34,6 +34,7 @@ pm guide release --json
34
34
  - [Quickstart](QUICKSTART.md) - install, initialize, create, claim, link, test, close.
35
35
  - [Onboarding](ONBOARDING.md) - first-two-hours maintainer and contributor setup.
36
36
  - [Agent Guide](AGENT_GUIDE.md) - canonical agent loop, tracker linking, and token-minimal command choices.
37
+ - [Agent Read and Test Receipts](AGENT_READ_AND_TEST_RECEIPTS.md) - JSON help provenance, linked-test persistence, and history diff continuation.
37
38
  - [Command Reference](COMMANDS.md) - command families with examples and when to use each family.
38
39
  - [Context and Operations Namespaces](COMMAND_NAMESPACES.md) - native navigation, diagnostics, event streams, and compatibility aliases.
39
40
  - [CLI Scripting Contract](SCRIPTING.md) - exit codes, flat mutation receipts versus read envelopes, stdout/stderr boundaries, stable JSON fields, uniform OR filters, and shell composition recipes.
@@ -58,6 +59,7 @@ pm guide release --json
58
59
  - [Context Relevance and Packing](CONTEXT_RELEVANCE.md) - shared CLI/SDK signals, derived-store provenance, ranking explanations, and token budgets.
59
60
  - [Next-work Selection Budgets](NEXT_SELECTION_BUDGETS.md) - bounded executable recommendations, omission receipts, and graded 10k/100k context verification.
60
61
  - [Context Algorithm Portfolio](CONTEXT_ALGORITHM_PORTFOLIO.md) - stable proposal slugs, historical aliases, individual owners, cognitive compositions, and experiment gates.
62
+ - [Ecosystem Planning Review](ECOSYSTEM_PLANNING_REVIEW.md) - dated all-status census, canonical horizons, operational evidence, and active-readiness gates.
61
63
  - [Output Projection and Omission Contracts](OUTPUT_PROJECTION_CONTRACTS.md) - explicit withheld-field receipts, mode-paired row keys, and completion resolver outcomes.
62
64
  - [Output Token Accounting](OUTPUT_TOKEN_ACCOUNTING.md) - opt-in CLI/MCP byte attribution, bounded receipt overhead, and release-level tokens-per-task baselines.
63
65
  - [SDK Context Platform](SDK_CONTEXT.md) - task-oriented entry point for authoritative reads, ranking, package workflows, diagnostics, recovery, and verification.
@@ -103,12 +103,46 @@ Replacement requires at least one corresponding `--file` or `--doc` value and ca
103
103
 
104
104
  Repeating an already-present `pm files --add` or `pm docs --add` batch is a true no-op: `changed` is false, the item file is not rewritten, and append-only history receives no synthetic mutation entry.
105
105
 
106
+ An explicit non-empty replacement note updates the existing path/scope entry
107
+ atomically. A bare-path retry preserves its note; a different scope identifies
108
+ a separate link. The same rule applies to glob additions and standalone
109
+ `--note`. Migration collisions first retain the established last matching
110
+ entry; an explicit note revision then applies to that surviving identity.
111
+ This fixes [pm-zqxlfs](../.agents/pm/issues/pm-zqxlfs.toon):
112
+
113
+ ```bash
114
+ pm files <id> --add path=src/new.ts,note="verified current implementation"
115
+ pm docs <id> --add docs/new.md --note "verified current contract"
116
+ ```
117
+
106
118
  Audited history redaction participates in the same projection transaction as
107
119
  ordinary item mutation. After rewriting an item and its history stream, pm
108
120
  invalidates drift verification state and incrementally refreshes the metadata
109
121
  index before releasing the derived-index lock. A warmed index therefore cannot
110
122
  pair pre-redaction item content with post-redaction history during validation.
111
123
 
124
+ ## Compact Plan mutation receipts
125
+
126
+ Tracked by [pm-hqy7lr](../.agents/pm/issues/pm-hqy7lr.toon).
127
+ CLI and MCP Plan mutations return identity, action, step identity when available,
128
+ complete step counts, materialization/skip/warning counts, and an inspection
129
+ command. They omit bodies, resume context, and unrelated steps, so a single-step
130
+ update does not grow with the Plan. `pm plan show <id> --depth deep` retrieves
131
+ the complete current Plan without repeating a mutation. The omission receipt
132
+ explicitly distinguishes this acknowledgement from a full read.
133
+ Local CLI/SDK recovery commands include the resolved `--pm-path`, safely quoted,
134
+ so they inspect the same tracker even with a non-default root. MCP receipts
135
+ omit the server-resolved filesystem root in both compact and full output.
136
+ For MCP recovery, call `pm_plan` with `subcommand: "show"`, `depth: "deep"`,
137
+ the receipt ID, and the original request's workspace selection (`path` or `cwd`).
138
+
139
+ SDK `runPlan` retains its full typed result and adds `mutation_receipt` for
140
+ consumers that need a compact acknowledgement. Existing full transport output
141
+ is available with CLI `--full-changed-fields` or MCP `fullChangedFields: true`.
142
+ The named `PlanMutationReceipt` type is exported from `@unbrained/pm-cli/sdk`.
143
+ CLI `--no-changed-fields` also selects a compact Plan receipt.
144
+ Read-only `plan show` retains its existing projection behavior.
145
+
112
146
  ## Operational receipts
113
147
 
114
148
  Linked tests recognize compound acquisition failures such as “could not acquire … lock” together with contention context such as “already running” or “held by another” as `infra_collision`. Generic assertion text mentioning a lock or timeout remains `assertion_failure`, preventing false infrastructure classifications. A command refused by clone-local provenance policy is classified separately as `trust_refusal`, so reports do not misstate a pre-execution safety decision as an assertion failure.
package/docs/TESTING.md CHANGED
@@ -2,17 +2,22 @@
2
2
 
3
3
  This page describes safe local tests, linked tests, coverage, and release-readiness checks.
4
4
 
5
+ Current linked-test and merge-fence work: [pm-t05d8d](../.agents/pm/issues/pm-t05d8d.toon), [pm-kynkl8](../.agents/pm/issues/pm-kynkl8.toon).
6
+
5
7
  Tracked implementation updates: [pm-52eh](../.agents/pm/features/pm-52eh.toon), [pm-mcxr](../.agents/pm/issues/pm-mcxr.toon), [pm-u42x](../.agents/pm/issues/pm-u42x.toon), [pm-atfm](../.agents/pm/features/pm-atfm.toon), [pm-xmp5](../.agents/pm/tasks/pm-xmp5.toon), [pm-39cqqx](../.agents/pm/tasks/pm-39cqqx.toon), [pm-5cgm2z](../.agents/pm/chores/pm-5cgm2z.toon), [pm-avv3wx](../.agents/pm/issues/pm-avv3wx.toon), [pm-rizqb6](../.agents/pm/issues/pm-rizqb6.toon), [pm-95h7pg](../.agents/pm/issues/pm-95h7pg.toon), [pm-giks4s](../.agents/pm/issues/pm-giks4s.toon), [pm-xa3t0o](../.agents/pm/issues/pm-xa3t0o.toon), [pm-e97jyf](../.agents/pm/issues/pm-e97jyf.toon), [pm-efkvdy](../.agents/pm/issues/pm-efkvdy.toon), [pm-ed28wi](../.agents/pm/issues/pm-ed28wi.toon), and [pm-5ug5xq](../.agents/pm/issues/pm-5ug5xq.toon).
6
8
 
7
9
  ## Agent Quick Context
8
10
 
9
11
  - Unit and integration tests must not read or write real `.agents/pm` data.
10
12
  - Prefer `node scripts/run-tests.mjs ...` because it creates sandboxed `PM_PATH` and `PM_GLOBAL_PATH`.
11
- - Linked-test execution injects isolated `PM_PATH` and `PM_GLOBAL_PATH` for
12
- every command and applies stored-command provenance checks before process
13
+ - Linked-test execution injects isolated `PM_GLOBAL_PATH` and normally
14
+ `PM_PATH`; `pm_context_mode=none` omits `PM_PATH` for self-isolating SDK tests
15
+ in disposable workspaces. It applies stored-command provenance checks before process
13
16
  creation. Direct runners are accepted; prefer
14
17
  `node scripts/run-tests.mjs ...` when the repository provides it because the
15
- wrapper also reproduces build, coverage, and cleanup policy.
18
+ wrapper also reproduces build, coverage, and cleanup policy. Use a direct
19
+ runner when a `none`-mode test must observe an unset `PM_PATH`; the wrapper
20
+ creates its own sandboxed `PM_PATH`.
16
21
  - Run linked tests before closing the item that owns the work.
17
22
 
18
23
  Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon).
@@ -510,6 +515,11 @@ only their schema roots; a non-PM command explicitly configured with
510
515
  data are materialized only when at least one selected command requires tracker
511
516
  context. This preserves source isolation without copying an unrelated tracker
512
517
  into constrained temporary storage.
518
+ For SDK tests that create independent temporary PM roots, use
519
+ `pm_context_mode: "none"` with `workspace_context_mode: "isolated"` or
520
+ `"snapshot"`. The runner omits `PM_PATH` so each SDK client can resolve its
521
+ explicit workspace independently; `PM_GLOBAL_PATH` remains sandboxed. Source
522
+ workspace execution and direct PM commands refuse this mode before execution.
513
523
  Capacity, permission, and resource failures while seeding a required tracker
514
524
  surface as typed, path-redacted host-environment refusals with recovery steps.
515
525
  When a legacy source tracker has settings but no `_workspace` history, tracker
@@ -593,6 +603,7 @@ Use explicit modes when needed:
593
603
  pm test <item-id> --run --pm-context schema
594
604
  pm test <item-id> --run --pm-context tracker
595
605
  pm test <item-id> --run --pm-context auto --check-context --auto-pm-context
606
+ pm test <item-id> --add-json '{"command":"pnpm exec vitest run tests/integration/linked-test-context-trust.integration.spec.ts","pm_context_mode":"none","workspace_context_mode":"snapshot"}'
596
607
  ```
597
608
 
598
609
  For complex linked-test commands, prefer JSON input so shell syntax survives unchanged:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 4,
3
3
  "transcript_version": 2,
4
- "transcript_digest": "sha256:b8a6aea318c41e6a40dbcaf8094da8397ca747515a7df249d35c1f21ad94a307",
4
+ "transcript_digest": "sha256:6d4041acfaa4075dde1972d6127a74f18916f7661738b4f5d5fd47a61c179a78",
5
5
  "estimator": "ceil(utf8_bytes / 4)",
6
6
  "measurement_scope": "output_before_token_accounting",
7
7
  "published_with_release": true,
@@ -259,7 +259,33 @@
259
259
  "accounting_mode": "self_reported"
260
260
  }
261
261
  ]
262
+ },
263
+ {
264
+ "id": "plan-execution-mutations",
265
+ "max_estimated_tokens": 848,
266
+ "steps": [
267
+ {
268
+ "id": "create-plan",
269
+ "max_estimated_tokens": 21,
270
+ "accounting_mode": "self_reported"
271
+ },
272
+ {
273
+ "id": "add-step",
274
+ "max_estimated_tokens": 275,
275
+ "accounting_mode": "self_reported"
276
+ },
277
+ {
278
+ "id": "complete-step",
279
+ "max_estimated_tokens": 274,
280
+ "accounting_mode": "self_reported"
281
+ },
282
+ {
283
+ "id": "inspect-plan",
284
+ "max_estimated_tokens": 278,
285
+ "accounting_mode": "self_reported"
286
+ }
287
+ ]
262
288
  }
263
289
  ],
264
- "composite_max_estimated_tokens": 13034
290
+ "composite_max_estimated_tokens": 13882
265
291
  }