@unbrained/pm-cli 2026.11.4 → 2026.11.5

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 (219) hide show
  1. package/.agents/skills/HARNESS_COMPATIBILITY.md +1 -1
  2. package/.agents/skills/README.md +14 -14
  3. package/.agents/skills/pm-developer/SKILL.md +16 -16
  4. package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +14 -14
  5. package/.agents/skills/pm-developer/references/SCRIPTING_COMPOSITION.md +10 -10
  6. package/.agents/skills/pm-extensions/SKILL.md +13 -13
  7. package/.agents/skills/pm-extensions/references/AUTHORING.md +12 -12
  8. package/.agents/skills/pm-sdk/SKILL.md +27 -27
  9. package/.agents/skills/pm-sdk/references/SURFACE_MAP.md +32 -32
  10. package/.agents/skills/pm-test-audit/references/AUDIT.md +1 -1
  11. package/.agents/skills/pm-user/SKILL.md +35 -35
  12. package/.claude-plugin/marketplace.json +1 -1
  13. package/AGENTS.md +9 -9
  14. package/CHANGELOG.md +9 -0
  15. package/README.md +13 -13
  16. package/dist/cli/register-setup.js +1 -1
  17. package/dist/cli-bundle/bundle-manifest.json +1 -1
  18. package/dist/cli-bundle/chunks/chunk-2RPORE7M.js +31 -0
  19. package/dist/cli-bundle/chunks/{chunk-NPEDFOVQ.js → chunk-335BZ75D.js} +2 -2
  20. package/dist/cli-bundle/chunks/chunk-5GWEY4P6.js +122 -0
  21. package/dist/cli-bundle/chunks/chunk-6VRX2CM7.js +2 -0
  22. package/dist/cli-bundle/chunks/{chunk-7PGNAHNW.js → chunk-7DEKAXVA.js} +2 -2
  23. package/dist/cli-bundle/chunks/{chunk-3OXQGGRD.js → chunk-7ZRCYESH.js} +42 -41
  24. package/dist/cli-bundle/chunks/{chunk-BWAXA6S4.js → chunk-AUEKTX7V.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-SRDO2NJU.js → chunk-D7KYPRK4.js} +2 -2
  26. package/dist/cli-bundle/chunks/{chunk-ODMJ3HIB.js → chunk-DAX3AOFI.js} +2 -2
  27. package/dist/cli-bundle/chunks/{chunk-L4BKTPJ6.js → chunk-F6NDMKZ4.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-T56MB6SF.js → chunk-FRNMQM45.js} +2 -2
  29. package/dist/cli-bundle/chunks/{chunk-5S6RT5LX.js → chunk-HNGLDMSZ.js} +3 -3
  30. package/dist/cli-bundle/chunks/{chunk-QN7VCOUU.js → chunk-HRCMORE7.js} +2 -2
  31. package/dist/cli-bundle/chunks/{chunk-BK2XAQVC.js → chunk-HRFGFIYU.js} +2 -2
  32. package/dist/cli-bundle/chunks/{chunk-CERNIZLB.js → chunk-JI2GDE4I.js} +42 -42
  33. package/dist/cli-bundle/chunks/{chunk-6T2V3UIK.js → chunk-LS3GI3H4.js} +53 -53
  34. package/dist/cli-bundle/chunks/chunk-OH6WQ7VT.js +3 -0
  35. package/dist/cli-bundle/chunks/{chunk-BRIPGUAO.js → chunk-OJDMJT7Y.js} +2 -2
  36. package/dist/cli-bundle/chunks/{chunk-7RCI7AAA.js → chunk-S4LPZ4TN.js} +2 -2
  37. package/dist/cli-bundle/chunks/{chunk-AQ5UHHQS.js → chunk-UEGXWXUZ.js} +2 -2
  38. package/dist/cli-bundle/chunks/{chunk-5BVZ32G7.js → chunk-XLSHFYXZ.js} +2 -2
  39. package/dist/cli-bundle/chunks/{chunk-2GW662DP.js → chunk-YKXATU2G.js} +2 -2
  40. package/dist/cli-bundle/chunks/{item-revision-UAZOBP2Q.js → item-revision-OJJVPQY7.js} +2 -2
  41. package/dist/cli-bundle/chunks/item-transaction-QEPBUCMY.js +2 -0
  42. package/dist/cli-bundle/chunks/{mutation-admission-QZQI2NN5.js → mutation-admission-INMM3HHG.js} +2 -2
  43. package/dist/cli-bundle/chunks/{register-list-query-P3NOKQUA.js → register-list-query-5Y5JKWU5.js} +2 -2
  44. package/dist/cli-bundle/chunks/{register-mutation-A6I5K5N6.js → register-mutation-WC7OSQID.js} +2 -2
  45. package/dist/cli-bundle/chunks/{register-operations-SPKB3TNM.js → register-operations-PO63DBZH.js} +2 -2
  46. package/dist/cli-bundle/chunks/register-setup-RRFOS7IT.js +2 -0
  47. package/dist/cli-bundle/chunks/{stage-L3T725DS.js → stage-E3MMV4TV.js} +2 -2
  48. package/dist/cli-bundle/focused-chunks/chunk-5PMJOJCZ.js +44 -0
  49. package/dist/cli-bundle/focused-chunks/{chunk-TFYTTDAK.js → chunk-7KK66ISG.js} +2 -2
  50. package/dist/cli-bundle/focused-chunks/{chunk-Y5GOUUYJ.js → chunk-AHWJPZSJ.js} +2 -2
  51. package/dist/cli-bundle/focused-chunks/{chunk-C7UX2ZI3.js → chunk-C6P6HPCX.js} +2 -2
  52. package/dist/cli-bundle/focused-chunks/{chunk-Q4OIRSKL.js → chunk-CPMSL4HS.js} +2 -2
  53. package/dist/cli-bundle/focused-chunks/chunk-CZM75DE3.js +2 -0
  54. package/dist/cli-bundle/focused-chunks/{chunk-CO2DNPH7.js → chunk-D2TBEBNW.js} +2 -2
  55. package/dist/cli-bundle/focused-chunks/chunk-E56OXRYH.js +2 -0
  56. package/dist/cli-bundle/focused-chunks/{chunk-FXFDVM5O.js → chunk-F62XGAAY.js} +2 -2
  57. package/dist/cli-bundle/focused-chunks/chunk-G4QP365K.js +2 -0
  58. package/dist/cli-bundle/focused-chunks/{chunk-J7M52SCZ.js → chunk-G5PJCR7R.js} +2 -2
  59. package/dist/cli-bundle/focused-chunks/chunk-GS3JC5UU.js +23 -0
  60. package/dist/cli-bundle/focused-chunks/{chunk-W3CSX6GI.js → chunk-LW64TINU.js} +2 -2
  61. package/dist/cli-bundle/focused-chunks/{chunk-MEJKELWC.js → chunk-M6V7UMWL.js} +3 -3
  62. package/dist/cli-bundle/focused-chunks/{chunk-CXTDEQ3N.js → chunk-MC7IE7D7.js} +2 -2
  63. package/dist/cli-bundle/focused-chunks/chunk-MG7C3JUY.js +2 -0
  64. package/dist/cli-bundle/focused-chunks/{chunk-QEVJ3Y67.js → chunk-MK4HV4JO.js} +2 -2
  65. package/dist/cli-bundle/focused-chunks/{chunk-A2246ZM7.js → chunk-NQ7GYFOX.js} +54 -54
  66. package/dist/cli-bundle/focused-chunks/chunk-O7EI33NP.js +91 -0
  67. package/dist/cli-bundle/focused-chunks/{chunk-FFO7RBLN.js → chunk-RFTJZ5VB.js} +2 -2
  68. package/dist/cli-bundle/focused-chunks/{chunk-PNPYQDHU.js → chunk-SNOXXRSJ.js} +2 -2
  69. package/dist/cli-bundle/focused-chunks/{chunk-JQS7TYQ6.js → chunk-UPJUTP2V.js} +2 -2
  70. package/dist/cli-bundle/focused-chunks/{chunk-SDLIUZEL.js → chunk-VWWTIX5L.js} +2 -2
  71. package/dist/cli-bundle/focused-chunks/{chunk-J6FDCAMH.js → chunk-XHOBYCVE.js} +2 -2
  72. package/dist/cli-bundle/focused-chunks/{chunk-J3YOATXR.js → chunk-YMGB2O4E.js} +25 -24
  73. package/dist/cli-bundle/focused-chunks/{item-revision-L6GVT42D.js → item-revision-CTDO4H3I.js} +2 -2
  74. package/dist/cli-bundle/focused-chunks/{item-transaction-GYGP264N.js → item-transaction-AEAYVVHA.js} +2 -2
  75. package/dist/cli-bundle/focused-chunks/{mutation-admission-UWTH56OD.js → mutation-admission-4WM7TNHZ.js} +2 -2
  76. package/dist/cli-bundle/focused-chunks/{stage-WRSNJ7VI.js → stage-WV7QXR4C.js} +2 -2
  77. package/dist/cli-bundle/main.js +2 -2
  78. package/dist/cli-bundle/sdk-authoring.js +1 -1
  79. package/dist/cli-bundle/sdk-contracts.js +1 -1
  80. package/dist/cli-bundle/sdk-core.js +1 -1
  81. package/dist/cli-bundle/sdk-governance.js +1 -1
  82. package/dist/cli-bundle/sdk-graph.js +1 -1
  83. package/dist/cli-bundle/sdk-merge.js +57 -57
  84. package/dist/cli-bundle/sdk-query.js +1 -1
  85. package/dist/cli-bundle/sdk-runtime.js +1 -1
  86. package/dist/cli-bundle/sdk-testing.js +1 -1
  87. package/dist/cli-bundle/sdk.js +9 -9
  88. package/dist/core/config/positional-value.d.ts +6 -0
  89. package/dist/core/config/positional-value.js +1 -1
  90. package/dist/core/item/literal-mutation-input.d.ts +17 -0
  91. package/dist/core/item/literal-mutation-input.js +1 -1
  92. package/dist/core/item/parent-reference-policy.d.ts +8 -4
  93. package/dist/core/item/parent-reference-policy.js +1 -1
  94. package/dist/core/item/sprint-release-format.d.ts +2 -1
  95. package/dist/core/item/sprint-release-format.js +1 -1
  96. package/dist/core/output/mutation-projection.js +1 -1
  97. package/dist/core/store/item-mutation-precondition.d.ts +3 -1
  98. package/dist/core/store/item-mutation-precondition.js +1 -1
  99. package/dist/core/store/item-store.js +1 -1
  100. package/dist/core/store/settings.d.ts +14 -0
  101. package/dist/core/store/settings.js +5 -4
  102. package/dist/core/telemetry/policy.d.ts +27 -1
  103. package/dist/core/telemetry/policy.js +1 -1
  104. package/dist/core/telemetry/runtime.d.ts +18 -7
  105. package/dist/core/telemetry/runtime.js +4 -4
  106. package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +8 -5
  107. package/dist/sdk/cli-contracts.d.ts +1 -1
  108. package/dist/sdk/cli-contracts.js +1 -1
  109. package/dist/sdk/config.d.ts +2 -2
  110. package/dist/sdk/config.js +1 -1
  111. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  112. package/dist/sdk/governance/health.d.ts +2 -2
  113. package/dist/sdk/governance/health.js +2 -2
  114. package/dist/sdk/index.d.ts +4 -2
  115. package/dist/sdk/index.js +1 -1
  116. package/dist/sdk/init.d.ts +4 -4
  117. package/dist/sdk/init.js +8 -8
  118. package/dist/sdk/lifecycle/claim.d.ts +4 -0
  119. package/dist/sdk/lifecycle/claim.js +1 -1
  120. package/dist/sdk/lifecycle/close.d.ts +10 -0
  121. package/dist/sdk/lifecycle/close.js +1 -1
  122. package/dist/sdk/lifecycle/create.d.ts +7 -5
  123. package/dist/sdk/lifecycle/create.js +1 -1
  124. package/dist/sdk/lifecycle/shared-unset-fields.d.ts +628 -4
  125. package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
  126. package/dist/sdk/lifecycle/update.d.ts +5 -4
  127. package/dist/sdk/lifecycle/update.js +2 -2
  128. package/dist/sdk/public-surface.json +1 -1
  129. package/dist/sdk/runtime/actions.js +1 -1
  130. package/dist/sdk/runtime/mutation-value-validation.js +1 -1
  131. package/dist/sdk/runtime-input.js +1 -1
  132. package/dist/sdk/runtime-primitives.d.ts +1 -0
  133. package/dist/sdk/runtime-primitives.js +1 -1
  134. package/dist/sdk/telemetry.d.ts +1 -1
  135. package/dist/sdk/telemetry.js +2 -2
  136. package/docs/AGENT_GUIDE.md +48 -48
  137. package/docs/AGENT_OUTPUT_ENCODINGS.md +20 -20
  138. package/docs/ASSURANCE.md +10 -10
  139. package/docs/BOUNDED_CONTEXT_READS.md +3 -3
  140. package/docs/CLAUDE_CODE_PLUGIN.md +1 -1
  141. package/docs/CLI_GRAMMAR.md +2 -2
  142. package/docs/COMMANDS.md +56 -35
  143. package/docs/COMMAND_NAMESPACES.md +1 -1
  144. package/docs/CONFIGURATION.md +82 -71
  145. package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +2 -2
  146. package/docs/CONTEXT_INTEGRITY_CONTRACTS.md +5 -5
  147. package/docs/CORPUS_SHAPES.md +1 -1
  148. package/docs/DEPENDENCY_KIND_CONTRACT.md +6 -6
  149. package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +5 -5
  150. package/docs/ECOSYSTEM_PLANNING_REVIEW.md +3 -3
  151. package/docs/EXTENSION_AUTHOR_CONTRACTS.md +4 -4
  152. package/docs/HISTORY_ATTESTATION.md +1 -1
  153. package/docs/HISTORY_MAINTENANCE.md +1 -1
  154. package/docs/LIFECYCLE_COMMANDS.md +1 -1
  155. package/docs/MCP_2026_07_28.md +16 -16
  156. package/docs/MCP_2026_07_28_CONFORMANCE.md +19 -19
  157. package/docs/MCP_REMOTE_TRANSPORT_SECURITY.md +22 -22
  158. package/docs/MCP_SKILLS_AND_APPS.md +1 -1
  159. package/docs/MERGE_SAFETY.md +6 -6
  160. package/docs/MUTATION_INTEGRITY.md +5 -5
  161. package/docs/OUTPUT_PROJECTION_CONTRACTS.md +14 -14
  162. package/docs/PACKED_FIRST_RUN.md +1 -1
  163. package/docs/QUICKSTART.md +10 -10
  164. package/docs/README.md +21 -21
  165. package/docs/READ_OUTPUT_CONTRACTS.md +9 -9
  166. package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +1 -1
  167. package/docs/RELEASING.md +19 -10
  168. package/docs/SCRIPTING.md +10 -10
  169. package/docs/SDK.md +74 -38
  170. package/docs/SDK_ARTIFACT_OUTPUT.md +1 -1
  171. package/docs/SDK_PRIMITIVE_INVENTORY.md +2 -2
  172. package/docs/SELF_DESCRIBING_CONTEXT_CONTRACTS.md +7 -7
  173. package/docs/TESTING.md +1 -1
  174. package/docs/WORKFLOW_POLICIES.md +2 -2
  175. package/docs/WORKSPACE_POSITION_AND_LIFECYCLE.md +8 -8
  176. package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
  177. package/docs/generated/AGENT_COMMAND_SURFACE.md +1 -1
  178. package/docs/generated/FLAG_LEXICON_BUDGETS.md +1 -1
  179. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +1 -1
  180. package/docs/performance/cli-transport-overhead.md +7 -7
  181. package/marketplace.json +1 -1
  182. package/package.json +1 -1
  183. package/packages/pm-beads/package.json +1 -1
  184. package/packages/pm-calendar/package.json +1 -1
  185. package/packages/pm-command-kit/README.md +5 -5
  186. package/packages/pm-command-kit/package.json +1 -1
  187. package/packages/pm-digital-twin/GAP_REPORT.md +16 -16
  188. package/packages/pm-digital-twin/package.json +1 -1
  189. package/packages/pm-governance-audit/package.json +1 -1
  190. package/packages/pm-guide-shell/package.json +1 -1
  191. package/packages/pm-kanban/README.md +1 -1
  192. package/packages/pm-kanban/package.json +1 -1
  193. package/packages/pm-lifecycle-hooks/package.json +1 -1
  194. package/packages/pm-linked-test-adapters/package.json +1 -1
  195. package/packages/pm-search-advanced/package.json +1 -1
  196. package/packages/pm-templates/package.json +1 -1
  197. package/packages/pm-todos/package.json +1 -1
  198. package/packages/pm-vcs/GAP_REPORT.md +1 -1
  199. package/packages/pm-vcs/package.json +1 -1
  200. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  201. package/plugins/pm-claude/README.md +6 -6
  202. package/plugins/pm-claude/package.json +1 -1
  203. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  204. package/plugins/pm-codex/package.json +1 -1
  205. package/plugins/pm-codex/plugin.json +1 -1
  206. package/runtime-dependencies.json +1 -1
  207. package/dist/cli-bundle/chunks/chunk-5Z6LWFDL.js +0 -31
  208. package/dist/cli-bundle/chunks/chunk-DSCFJTHB.js +0 -122
  209. package/dist/cli-bundle/chunks/chunk-QQHMNUZT.js +0 -2
  210. package/dist/cli-bundle/chunks/chunk-TX2W6G37.js +0 -3
  211. package/dist/cli-bundle/chunks/item-transaction-N5F4LXYV.js +0 -2
  212. package/dist/cli-bundle/chunks/register-setup-ZZRHJ4IS.js +0 -2
  213. package/dist/cli-bundle/focused-chunks/chunk-5NGNO54M.js +0 -44
  214. package/dist/cli-bundle/focused-chunks/chunk-B6U44WPW.js +0 -2
  215. package/dist/cli-bundle/focused-chunks/chunk-BAW3DGQO.js +0 -91
  216. package/dist/cli-bundle/focused-chunks/chunk-BHNY3KPJ.js +0 -2
  217. package/dist/cli-bundle/focused-chunks/chunk-CBG67HUP.js +0 -23
  218. package/dist/cli-bundle/focused-chunks/chunk-FEPE2CE4.js +0 -2
  219. package/dist/cli-bundle/focused-chunks/chunk-PMKR4MJI.js +0 -2
@@ -7,12 +7,12 @@ Tracker references: [pm-cha95z](../.agents/pm/tasks/pm-cha95z.toon), [pm-5t33or]
7
7
  Failures are context-management surfaces. Every diagnostic family now declares
8
8
  a format-aware token ceiling and one degradation ladder in the public SDK:
9
9
 
10
- | Class | Text | JSON | Corrective action that survives degradation |
11
- | -------------------- | ---: | ---: | ------------------------------------------- |
12
- | `error` | 768 | 2000 | required action, retry/domain, or next step |
13
- | `warning` | 768 | 2000 | required action, retry/domain, or next step |
10
+ | Class | Text | JSON | Corrective action that survives degradation |
11
+ |---|---:|---:|---|
12
+ | `error` | 768 | 2000 | required action, retry/domain, or next step |
13
+ | `warning` | 768 | 2000 | required action, retry/domain, or next step |
14
14
  | `validation_summary` | 1500 | 3000 | required action, retry/domain, or next step |
15
- | `recovery_bundle` | 768 | 2000 | required action, retry/domain, or next step |
15
+ | `recovery_bundle` | 768 | 2000 | required action, retry/domain, or next step |
16
16
 
17
17
  The smallest explicit ceiling is 192 estimated tokens. At that floor, the
18
18
  projector may reduce the diagnostic to its code, required action, compact
@@ -38,7 +38,7 @@ canonical GitHub file URL under the [documentation policy](../AGENTS.md#document
38
38
  so installed readers can access the data without a broken package-relative path.
39
39
 
40
40
  | Measure | Initial observation | Interpretation |
41
- | --- | ---: | --- |
41
+ |---|---:|---|
42
42
  | Directed graph edges | 14,097 | Deduplicated directed basis |
43
43
  | Ordering layers / critical-path edges | 12 / 11 | Acyclic prerequisite graph |
44
44
  | Missing graph endpoints / isolated items | 0 / 0 | Across all statuses |
@@ -98,7 +98,7 @@ measured evidence govern promotion. Priority measures impact; horizon measures
98
98
  readiness and uncertainty. Review monthly and when a material observation changes.
99
99
 
100
100
  | Horizon | Illustrative window | Canonical outcomes and promotion evidence |
101
- | --- | --- | --- |
101
+ |---|---|---|
102
102
  | 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. |
103
103
  | 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. |
104
104
  | 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. |
@@ -151,7 +151,7 @@ it does not prove the outstanding 100k/1M performance acceptance.
151
151
  Five project golden queries were evaluated at k=10:
152
152
 
153
153
  | Mode | Mean nDCG | Mean MRR | Mean recall | Broad history/episode query recall |
154
- | --- | ---: | ---: | ---: | ---: |
154
+ |---|---:|---:|---:|---:|
155
155
  | Keyword | 0.7451 | 0.80 | 0.8727 | 4/11 |
156
156
  | Semantic | 0.7944 | 0.85 | 0.8182 | 1/11 |
157
157
  | Hybrid | 0.8405 | 0.90 | 0.8364 | 2/11 |
@@ -44,7 +44,7 @@ Every `pm` command records a telemetry event. Extension commands use the same te
44
44
  Allowed values:
45
45
 
46
46
  | Value | Meaning |
47
- |-------|---------|
47
+ |---|---|
48
48
  | `redacted` | Default. Records sanitized command args, options, result summary, and runtime environment. |
49
49
  | `minimal` | Records structural metadata and one-way digests only. No readable command text, args, options, result summary, or runtime environment is kept. |
50
50
  | `max` | Same as `redacted`, but raises the per-string truncation cap from 512 to 2048 characters. Redaction still applies. |
@@ -77,7 +77,7 @@ Create path:
77
77
 
78
78
  - Used by `pm update`, `pm close`, `pm claim`, `pm release`, `pm restore`, `pm delete`, and other mutations of existing items.
79
79
  - Locates the item, acquires the lock, reads the item through the `onRead` hook, enforces ownership and history policy, applies the mutation, enters the commit fence, consults `item_store_write`, writes the item atomically, appends history, fires `onWrite` for the item and history stream, records the after-command affected-item snapshot, then releases the lock.
80
- - `item_store_write` handlers can redirect the target path, replace serialized contents, or skip the physical item write.
80
+ - `item_store_write` handlers can redirect the target path, replace serialized contents, or skip the physical item write. Inside an expected-revision scope (`withExpectedItemRevisions`, `--expect-hash`) the scope then advances to the item read back from storage, not the pre-override document, so the caller's next guarded write is admitted while the item stays readable in the tracker with the id the commit kept. A handler that rewrites the embedded id leaves no revision to bind to, so that write refuses with `item_revision_conflict` although no other writer ran. An item moved out of the tracker advances the scope to the empty tombstone, and a later guarded `update`, `close` or `delete` cannot locate it. Contents the store cannot parse back make the next guarded `update`, `close` or `delete` fail with `item_document_invalid` before any revision check, and a guarded `restore` refuse with `item_revision_conflict`. An `item_store_delete` handler that skips or redirects the removal advances the scope to the item that remains.
81
81
  - The commit fence verifies the lock lease and the stored item revision first. When the lease was taken over (`lock_lost`) or the item changed after the read (`stale_revision`), the mutation refuses before `item_store_write` or `item_store_delete` (non-dry-run) runs, so a handler that persists the payload itself never commits a refused write.
82
82
 
83
83
  Both paths guarantee:
@@ -91,7 +91,7 @@ Both paths guarantee:
91
91
  `changed_fields` sentinel values:
92
92
 
93
93
  | Value | Meaning |
94
- |-------|---------|
94
+ |---|---|
95
95
  | `["imported"]` | Item came from an importer. |
96
96
  | `["restored"]` | Item was restored from a previous state. |
97
97
  | `["deleted"]` | Item was deleted. |
@@ -99,7 +99,7 @@ Both paths guarantee:
99
99
  Surface matrix:
100
100
 
101
101
  | Surface | Create path | `mutateItem` path |
102
- |---------|-------------|-------------------|
102
+ |---|---|---|
103
103
  | `onRead` hook | No | Yes |
104
104
  | `item_store_write` service override | No | Yes |
105
105
  | `history_append` service override | Yes | Yes |
@@ -77,7 +77,7 @@ server-local proof paths are available only to local CLI and SDK callers.
77
77
  The JSON document has exactly these fields:
78
78
 
79
79
  | Field | Meaning |
80
- | --- | --- |
80
+ |---|---|
81
81
  | `format` | Literal `pm-history-attestation` |
82
82
  | `version` | Integer `1` |
83
83
  | `hash_algorithm` | `sha256` or `sha512`, for bundle commitments |
@@ -10,7 +10,7 @@ these policies; the CLI exposes the same operations through one history family.
10
10
  ## Command paths
11
11
 
12
12
  | Native command | Permanent compatibility spelling | Purpose |
13
- | --- | --- | --- |
13
+ |---|---|---|
14
14
  | `pm history <id>` | unchanged | Read or verify one item stream |
15
15
  | `pm history activity` | `pm activity` | Read activity across streams |
16
16
  | `pm history redact <id>` | `pm history-redact <id>` | Remove selected sensitive content |
@@ -17,7 +17,7 @@ pm contracts --command 'close many' --flags-only --json
17
17
  ## Command migration
18
18
 
19
19
  | Canonical invocation | Compatibility invocation |
20
- | --- | --- |
20
+ |---|---|
21
21
  | `pm update many --ids <ids> --priority 1` | `pm update-many --ids <ids> --priority 1` |
22
22
  | `pm close many --ids <ids> --reason "Verified"` | `pm close-many --ids <ids> --reason "Verified"` |
23
23
  | `pm close delete <id> --dry-run` | `pm delete <id> --dry-run` |
@@ -49,10 +49,10 @@ Legacy means every revision that establishes a session with an `initialize`
49
49
  handshake, which the canonical revision defines as `2025-11-25` and earlier.
50
50
  The stdio adapter therefore accepts the full initialize-era set, newest first:
51
51
 
52
- | Revision | Accepted at `initialize` | Notes |
53
- | ------------ | ------------------------ | -------------------------------------------------------------------- |
54
- | `2025-11-25` | yes | Final legacy revision; offered when a client omits `protocolVersion` |
55
- | `2025-06-18` | yes | Earlier legacy revision retained for existing consumers |
52
+ | Revision | Accepted at `initialize` | Notes |
53
+ |---|---|---|
54
+ | `2025-11-25` | yes | Final legacy revision; offered when a client omits `protocolVersion` |
55
+ | `2025-06-18` | yes | Earlier legacy revision retained for existing consumers |
56
56
 
57
57
  `initialize` answers with the revision the client requested, because a legacy
58
58
  client has no fall-forward mechanism and treats the answered version as the
@@ -101,18 +101,18 @@ windows. Removal is a reviewed compatibility change, never a history rewrite.
101
101
 
102
102
  ## Removed, migrated, and deprecated behavior
103
103
 
104
- | Prior behavior | Disposition |
105
- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
106
- | `initialize` and `notifications/initialized` | Legacy stdio adapter only; absent from modern behavior. |
107
- | `Mcp-Session-Id` and protocol sessions | Removed; explicit application handles are ordinary arguments. |
108
- | `ping` | Legacy adapter only; modern calls return Method Not Found. |
109
- | `resources/subscribe` and `resources/unsubscribe` | Replaced by the implemented `subscriptions/listen` filter. |
110
- | SSE event ids and `Last-Event-ID` replay | Removed; callers retry with a new request id. |
111
- | Reverse `roots/list`, sampling, and elicitation requests | Migrate to MRTR `input_required` under `pm-rz9gep`. |
112
- | Core tasks | Migrate to `io.modelcontextprotocol/tasks` under `pm-rzs24j`. |
113
- | `logging/setLevel` | Removed; optional request-local log metadata is never shared, and remote operations use host OpenTelemetry. |
114
- | Roots, Sampling, Logging, HTTP+SSE, and non-none `includeContext` | Retain only in bounded legacy compatibility while `pm-vzcisw` drives deprecation removal. |
115
- | Dynamic Client Registration | Legacy authorization fallback; Client ID Metadata Documents are canonical under `pm-3zh9s4`. |
104
+ | Prior behavior | Disposition |
105
+ |---|---|
106
+ | `initialize` and `notifications/initialized` | Legacy stdio adapter only; absent from modern behavior. |
107
+ | `Mcp-Session-Id` and protocol sessions | Removed; explicit application handles are ordinary arguments. |
108
+ | `ping` | Legacy adapter only; modern calls return Method Not Found. |
109
+ | `resources/subscribe` and `resources/unsubscribe` | Replaced by the implemented `subscriptions/listen` filter. |
110
+ | SSE event ids and `Last-Event-ID` replay | Removed; callers retry with a new request id. |
111
+ | Reverse `roots/list`, sampling, and elicitation requests | Migrate to MRTR `input_required` under `pm-rz9gep`. |
112
+ | Core tasks | Migrate to `io.modelcontextprotocol/tasks` under `pm-rzs24j`. |
113
+ | `logging/setLevel` | Removed; optional request-local log metadata is never shared, and remote operations use host OpenTelemetry. |
114
+ | Roots, Sampling, Logging, HTTP+SSE, and non-none `includeContext` | Retain only in bounded legacy compatibility while `pm-vzcisw` drives deprecation removal. |
115
+ | Dynamic Client Registration | Legacy authorization fallback; Client ID Metadata Documents are canonical under `pm-3zh9s4`. |
116
116
 
117
117
  ## Rollout, rollback, and proof
118
118
 
@@ -5,25 +5,25 @@ Tracker: [pm-55yf1t](../.agents/pm/tasks/pm-55yf1t.toon). The official
5
5
  every revision-level change to one canonical pm owner and records executable
6
6
  evidence or an explicit open obligation.
7
7
 
8
- | Requirement family | Canonical owner | Current disposition | Executable evidence |
9
- | -------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- |
10
- | Stateless per-request version, client capabilities, and identity | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented | `tests/unit/sdk/mcp/protocol.spec.ts`, `tests/integration/mcp-stateless-protocol.spec.ts` |
11
- | Mandatory `server/discover`, deterministic capabilities and identity | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented | direct SDK/server tests plus plugin and release real-process probes |
12
- | Unsupported version `-32022` | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented | SDK and server negative controls |
13
- | Header mismatch `-32020` and missing capability `-32021` | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented in SDK, stdio, and Streamable HTTP | SDK negative controls and `tests/integration/mcp-streamable-http.spec.ts` |
14
- | Required result `resultType`; legacy omission means complete only at compatibility boundary | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented for modern pm results | SDK unit and modern direct-server tests |
15
- | No modern initialize, initialized notification, ping, or protocol session | [pm-sqvshj](../.agents/pm/decisions/pm-sqvshj.toon) | Implemented with bounded legacy stdio adapter | modern removed-method and legacy handshake tests |
16
- | Legacy interoperability covers every initialize-era revision the spec names | [pm-edywqn](../.agents/pm/issues/pm-edywqn.toon) | Implemented: `2025-11-25` and `2025-06-18` accepted, requested revision echoed | `tests/integration/mcp-handshake.spec.ts` handshake matrix plus the plugin smoke `assertProtocolHandshakeMatrix` real-process gate and its negative control |
17
- | MRTR `input_required`, retry state, and reverse-request removal | [pm-rz9gep](../.agents/pm/features/pm-rz9gep.toon) | Implemented for SDK and stateless stdio adapter | `tests/unit/sdk/mcp/interactions.spec.ts`; direct server negative controls |
18
- | `subscriptions/listen`, request-scoped streams, no SSE resumability | [pm-v7e337](../.agents/pm/features/pm-v7e337.toon) | Implemented; consumer acceptance remains a per-release gate | subscription SDK, stdio, HTTP, backpressure, disconnect, and retry tests |
19
- | Official `io.modelcontextprotocol/tasks` extension | [pm-rzs24j](../.agents/pm/features/pm-rzs24j.toon) | Implemented for eligible tool calls, durable lifecycle, and stdio methods; notifications remain with subscriptions owner | `tests/unit/sdk/mcp/tasks.spec.ts`, `tests/integration/mcp-stateless-protocol.spec.ts` |
20
- | Cacheable list/read results, deterministic tools, JSON Schema 2020-12, any JSON structured content | [pm-hv1x1x](../.agents/pm/features/pm-hv1x1x.toon) | Implemented for current pm tool/resource/prompt surfaces | SDK schema/cache tests and direct modern server surface suite |
21
- | Issuer-bound authorization, client metadata documents, consent, headers, OpenTelemetry | [pm-3zh9s4](../.agents/pm/features/pm-3zh9s4.toon) | Implemented; deployment-specific identity-provider verification remains host-owned | authorization SDK adversarial tests, real HTTP bearer suite, and threat model |
22
- | Stable MCP Apps negotiation, tool/resource metadata, fallback, sandboxing, and accessible views | [pm-pznhee](../.agents/pm/features/pm-pznhee.toon) | Implemented in the public SDK and stateless server; exact-version journeys run in the published-release verifier | `tests/unit/sdk/mcp/apps.spec.ts`, `tests/integration/mcp-stateless-protocol.spec.ts` |
23
- | Draft Skills over MCP list/get/read, compatibility, provenance, digests, bounds, and pagination | [pm-8nzivt](../.agents/pm/features/pm-8nzivt.toon) | Implemented against exact SEP-2640 draft revision; the published-release verifier checks negotiation and content digests | `tests/unit/sdk/mcp/skills.spec.ts`, `tests/integration/mcp-stateless-protocol.spec.ts` |
24
- | Per-request `io.modelcontextprotocol/logLevel`; omission forbids `notifications/message` | [pm-pd7nh0](../.agents/pm/tasks/pm-pd7nh0.toon) | SDK validates the eight severity values and rejects malformed metadata with `-32602`; pm emits no protocol log notifications | `tests/unit/sdk/mcp/protocol.spec.ts`, real stdio and Streamable HTTP negative controls |
25
- | Deprecated Roots, Sampling, Logging, HTTP+SSE, `includeContext`, dynamic registration | [pm-vzcisw](../.agents/pm/chores/pm-vzcisw.toon) | Canonical source ratcheted; bounded stdio adapter and dated migration policy remain | generated inventory, negative controls, adapter tests, and migration guide |
26
- | Official schema, real stdio/HTTP, packed/published, npx/bunx, negative controls | [pm-55yf1t](../.agents/pm/tasks/pm-55yf1t.toon) | Conformance and released-consumer gates implemented; each release must produce its own acceptance evidence | SDK/server suites, plugin smokes, published-release verifier |
8
+ | Requirement family | Canonical owner | Current disposition | Executable evidence |
9
+ |---|---|---|---|
10
+ | Stateless per-request version, client capabilities, and identity | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented | `tests/unit/sdk/mcp/protocol.spec.ts`, `tests/integration/mcp-stateless-protocol.spec.ts` |
11
+ | Mandatory `server/discover`, deterministic capabilities and identity | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented | direct SDK/server tests plus plugin and release real-process probes |
12
+ | Unsupported version `-32022` | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented | SDK and server negative controls |
13
+ | Header mismatch `-32020` and missing capability `-32021` | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented in SDK, stdio, and Streamable HTTP | SDK negative controls and `tests/integration/mcp-streamable-http.spec.ts` |
14
+ | Required result `resultType`; legacy omission means complete only at compatibility boundary | [pm-vae5ec](../.agents/pm/features/pm-vae5ec.toon) | Implemented for modern pm results | SDK unit and modern direct-server tests |
15
+ | No modern initialize, initialized notification, ping, or protocol session | [pm-sqvshj](../.agents/pm/decisions/pm-sqvshj.toon) | Implemented with bounded legacy stdio adapter | modern removed-method and legacy handshake tests |
16
+ | Legacy interoperability covers every initialize-era revision the spec names | [pm-edywqn](../.agents/pm/issues/pm-edywqn.toon) | Implemented: `2025-11-25` and `2025-06-18` accepted, requested revision echoed | `tests/integration/mcp-handshake.spec.ts` handshake matrix plus the plugin smoke `assertProtocolHandshakeMatrix` real-process gate and its negative control |
17
+ | MRTR `input_required`, retry state, and reverse-request removal | [pm-rz9gep](../.agents/pm/features/pm-rz9gep.toon) | Implemented for SDK and stateless stdio adapter | `tests/unit/sdk/mcp/interactions.spec.ts`; direct server negative controls |
18
+ | `subscriptions/listen`, request-scoped streams, no SSE resumability | [pm-v7e337](../.agents/pm/features/pm-v7e337.toon) | Implemented; consumer acceptance remains a per-release gate | subscription SDK, stdio, HTTP, backpressure, disconnect, and retry tests |
19
+ | Official `io.modelcontextprotocol/tasks` extension | [pm-rzs24j](../.agents/pm/features/pm-rzs24j.toon) | Implemented for eligible tool calls, durable lifecycle, and stdio methods; notifications remain with subscriptions owner | `tests/unit/sdk/mcp/tasks.spec.ts`, `tests/integration/mcp-stateless-protocol.spec.ts` |
20
+ | Cacheable list/read results, deterministic tools, JSON Schema 2020-12, any JSON structured content | [pm-hv1x1x](../.agents/pm/features/pm-hv1x1x.toon) | Implemented for current pm tool/resource/prompt surfaces | SDK schema/cache tests and direct modern server surface suite |
21
+ | Issuer-bound authorization, client metadata documents, consent, headers, OpenTelemetry | [pm-3zh9s4](../.agents/pm/features/pm-3zh9s4.toon) | Implemented; deployment-specific identity-provider verification remains host-owned | authorization SDK adversarial tests, real HTTP bearer suite, and threat model |
22
+ | Stable MCP Apps negotiation, tool/resource metadata, fallback, sandboxing, and accessible views | [pm-pznhee](../.agents/pm/features/pm-pznhee.toon) | Implemented in the public SDK and stateless server; exact-version journeys run in the published-release verifier | `tests/unit/sdk/mcp/apps.spec.ts`, `tests/integration/mcp-stateless-protocol.spec.ts` |
23
+ | Draft Skills over MCP list/get/read, compatibility, provenance, digests, bounds, and pagination | [pm-8nzivt](../.agents/pm/features/pm-8nzivt.toon) | Implemented against exact SEP-2640 draft revision; the published-release verifier checks negotiation and content digests | `tests/unit/sdk/mcp/skills.spec.ts`, `tests/integration/mcp-stateless-protocol.spec.ts` |
24
+ | Per-request `io.modelcontextprotocol/logLevel`; omission forbids `notifications/message` | [pm-pd7nh0](../.agents/pm/tasks/pm-pd7nh0.toon) | SDK validates the eight severity values and rejects malformed metadata with `-32602`; pm emits no protocol log notifications | `tests/unit/sdk/mcp/protocol.spec.ts`, real stdio and Streamable HTTP negative controls |
25
+ | Deprecated Roots, Sampling, Logging, HTTP+SSE, `includeContext`, dynamic registration | [pm-vzcisw](../.agents/pm/chores/pm-vzcisw.toon) | Canonical source ratcheted; bounded stdio adapter and dated migration policy remain | generated inventory, negative controls, adapter tests, and migration guide |
26
+ | Official schema, real stdio/HTTP, packed/published, npx/bunx, negative controls | [pm-55yf1t](../.agents/pm/tasks/pm-55yf1t.toon) | Conformance and released-consumer gates implemented; each release must produce its own acceptance evidence | SDK/server suites, plugin smokes, published-release verifier |
27
27
 
28
28
  This matrix describes implementation coverage, not a blanket certification of
29
29
  every deployed artifact. Programme completion requires each owner's positive
@@ -43,16 +43,16 @@ pm-mcp-http
43
43
 
44
44
  Configuration is explicit and environment-only:
45
45
 
46
- | Variable | Meaning | Default |
47
- | ----------------------------- | --------------------------------------------------- | ------------------ |
48
- | `PM_MCP_HTTP_HOST` | Bind host | `127.0.0.1` |
49
- | `PM_MCP_HTTP_PORT` | Bind port, including `0` for an ephemeral test port | `3000` |
50
- | `PM_MCP_HTTP_ALLOWED_ORIGINS` | Comma-separated exact browser origins | none |
51
- | `PM_MCP_HTTP_BEARER_TOKEN` | Opaque deployment token for the bundled verifier | none |
52
- | `PM_MCP_HTTP_AUTH_ISSUER` | Exact HTTPS authorization-server issuer | none |
53
- | `PM_MCP_HTTP_RESOURCE` | Canonical MCP resource/audience URI | none |
54
- | `PM_MCP_HTTP_SCOPES` | Space-separated consent scopes | `pm:read pm:write` |
55
- | `PM_MCP_DISCOVERY_CURSOR_KEY` | Shared 32-byte-or-longer secret for discovery pages | process-local key |
46
+ | Variable | Meaning | Default |
47
+ |---|---|---|
48
+ | `PM_MCP_HTTP_HOST` | Bind host | `127.0.0.1` |
49
+ | `PM_MCP_HTTP_PORT` | Bind port, including `0` for an ephemeral test port | `3000` |
50
+ | `PM_MCP_HTTP_ALLOWED_ORIGINS` | Comma-separated exact browser origins | none |
51
+ | `PM_MCP_HTTP_BEARER_TOKEN` | Opaque deployment token for the bundled verifier | none |
52
+ | `PM_MCP_HTTP_AUTH_ISSUER` | Exact HTTPS authorization-server issuer | none |
53
+ | `PM_MCP_HTTP_RESOURCE` | Canonical MCP resource/audience URI | none |
54
+ | `PM_MCP_HTTP_SCOPES` | Space-separated consent scopes | `pm:read pm:write` |
55
+ | `PM_MCP_DISCOVERY_CURSOR_KEY` | Shared 32-byte-or-longer secret for discovery pages | process-local key |
56
56
 
57
57
  A non-loopback bind fails closed unless token, issuer, and resource are all
58
58
  present. Production deployments should normally call
@@ -151,18 +151,18 @@ inherit one another's trace context. Raw bearer tokens are hashed for
151
151
  constant-time comparison by the bundled verifier and are never included in
152
152
  claims, errors, traces, or JSON-RPC result data.
153
153
 
154
- | Threat | Enforced boundary |
155
- | ------------------------------ | ------------------------------------------------------------------------------- |
156
- | DNS rebinding/browser drive-by | Loopback default plus exact `Origin` allowlist |
157
- | Token passthrough | Bearer is verified at pm and never forwarded to another service |
158
- | Issuer mix-up | Exact discovery/response issuer checks and issuer-keyed credentials |
159
- | Confused audience | Exact protected-resource audience check |
160
- | Excess authority | Required-scope intersection before dispatch |
161
- | Query/log credential leak | Query tokens rejected; challenges and errors omit token material |
162
- | Header injection | Schema-derived allowlist, reserved-name checks, control-byte rejection |
163
- | Trace privacy leak | Syntax/size validation, baggage-key allowlist, request-local storage |
164
- | Proxy cache disclosure | MCP and metadata errors use explicit content types; MCP results use `no-store` |
165
- | Replay after disconnect | No session, event id, resume cursor, or redelivery; retry uses a new request id |
154
+ | Threat | Enforced boundary |
155
+ |---|---|
156
+ | DNS rebinding/browser drive-by | Loopback default plus exact `Origin` allowlist |
157
+ | Token passthrough | Bearer is verified at pm and never forwarded to another service |
158
+ | Issuer mix-up | Exact discovery/response issuer checks and issuer-keyed credentials |
159
+ | Confused audience | Exact protected-resource audience check |
160
+ | Excess authority | Required-scope intersection before dispatch |
161
+ | Query/log credential leak | Query tokens rejected; challenges and errors omit token material |
162
+ | Header injection | Schema-derived allowlist, reserved-name checks, control-byte rejection |
163
+ | Trace privacy leak | Syntax/size validation, baggage-key allowlist, request-local storage |
164
+ | Proxy cache disclosure | MCP and metadata errors use explicit content types; MCP results use `no-store` |
165
+ | Replay after disconnect | No session, event id, resume cursor, or redelivery; retry uses a new request id |
166
166
 
167
167
  ## Deprecated-feature inventory and sunset
168
168
 
@@ -75,7 +75,7 @@ SDK-backed tools. `resources/list` and `resources/read` expose the corresponding
75
75
  `ui://` documents:
76
76
 
77
77
  | View | Authoritative tool | Purpose |
78
- | --- | --- | --- |
78
+ |---|---|---|
79
79
  | Context explorer | `pm_context` | Context, provenance, omissions, and token cost |
80
80
  | Relationship graph | `pm_graph` | Typed edges, explaining paths, and governance |
81
81
  | Plan and milestone | `pm_plan` | Steps, dependencies, decisions, and validation |
@@ -136,12 +136,12 @@ History scalar rebasing and ignored settlement artifacts are tracked by
136
136
  [pm-gh1553](../.agents/pm/issues/pm-gh1553.toon) and
137
137
  [pm-gh1556](../.agents/pm/issues/pm-gh1556.toon).
138
138
 
139
- | Artifact | Driver | Merge behavior |
140
- | ---------------------------------------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
141
- | Item `.toon` / `.md` | `pm-item-toon` / `pm-item-markdown` | Three-way field merge; append-like collections use set union, `updated_at` uses the latest timestamp, scalar conflicts select the value from the later document update with stable value order as an equal-timestamp tie-break, and canonical serialization recomputes TOON counts. |
142
- | `history/*.jsonl` | `pm-history` | Preserves the common prefix and both divergent suffixes, orders deterministically, then re-anchors the resulting hash chain. |
143
- | tracker `**/*.jsonl` except the later `history/*.jsonl` override | `pm-relationship` | Covers default and package-owned custom relationship event paths, unions divergent suffixes by `eventId` (timestamp-ordered, ours-first on ties), and renumbers `sequence` consecutively so the strict-sequence store loader accepts the merged stream. |
144
- | root `settings.json` and nested `**/*.json` | `pm-json` | Recursively merges objects per key. Arrays compose when both branches preserve the base and add distinct entries, so independent extension installs and evaluation additions merge without weakening edit/removal conflict detection. |
139
+ | Artifact | Driver | Merge behavior |
140
+ |---|---|---|
141
+ | Item `.toon` / `.md` | `pm-item-toon` / `pm-item-markdown` | Three-way field merge; append-like collections use set union, `updated_at` uses the latest timestamp, scalar conflicts select the value from the later document update with stable value order as an equal-timestamp tie-break, and canonical serialization recomputes TOON counts. |
142
+ | `history/*.jsonl` | `pm-history` | Preserves the common prefix and both divergent suffixes, orders deterministically, then re-anchors the resulting hash chain. |
143
+ | tracker `**/*.jsonl` except the later `history/*.jsonl` override | `pm-relationship` | Covers default and package-owned custom relationship event paths, unions divergent suffixes by `eventId` (timestamp-ordered, ours-first on ties), and renumbers `sequence` consecutively so the strict-sequence store loader accepts the merged stream. |
144
+ | root `settings.json` and nested `**/*.json` | `pm-json` | Recursively merges objects per key. Arrays compose when both branches preserve the base and add distinct entries, so independent extension installs and evaluation additions merge without weakening edit/removal conflict detection. |
145
145
 
146
146
  History union validates each event in its original branch before rebasing its
147
147
  effects. A whole metadata-field replacement still assigns its exact value when
@@ -32,11 +32,11 @@ pm config project set mutation_guard_stale_in_progress_hours 48
32
32
 
33
33
  Defaults preserve author compatibility while providing secret advice:
34
34
 
35
- | Setting | Default | Behavior |
36
- | ------------------------------------------ | -------- | -------------------------------------------------------- |
37
- | `mutation_guard.require_attributed_author` | `false` | When enabled, reject an effective author of `unknown`. |
38
- | `mutation_guard.secret_guard` | `advise` | `off`, stderr/structured `advise`, or pre-write `block`. |
39
- | `mutation_guard.stale_in_progress_hours` | `72` | Age threshold for unclaimed active work in `pm health`. |
35
+ | Setting | Default | Behavior |
36
+ |---|---|---|
37
+ | `mutation_guard.require_attributed_author` | `false` | When enabled, reject an effective author of `unknown`. |
38
+ | `mutation_guard.secret_guard` | `advise` | `off`, stderr/structured `advise`, or pre-write `block`. |
39
+ | `mutation_guard.stale_in_progress_hours` | `72` | Age threshold for unclaimed active work in `pm health`. |
40
40
 
41
41
  A blocking secret policy may be bypassed only by an explicit `--force` on a
42
42
  force-capable mutation. The warning records that an override occurred while
@@ -64,13 +64,13 @@ explicit receipt with `has_omissions: false`,
64
64
 
65
65
  Mutually exclusive output modes emit only their active row collection:
66
66
 
67
- | Command mode | Active row key | Withheld group | Restore |
68
- | --------------------------- | --------------------- | -------------- | ---------------- |
69
- | `activity` (digest default) | `activity_digest` | `event_rows` | `--raw` |
70
- | `activity --raw/--compact` | `compact_activity` | `provenance` | `--full` |
71
- | `activity --full` | `activity` | none | already complete |
72
- | `history` (compact default) | `compact_history` | `raw_history` | `--full` |
73
- | `history --full` | `history` | none | already complete |
67
+ | Command mode | Active row key | Withheld group | Restore |
68
+ |---|---|---|---|
69
+ | `activity` (digest default) | `activity_digest` | `event_rows` | `--raw` |
70
+ | `activity --raw/--compact` | `compact_activity` | `provenance` | `--full` |
71
+ | `activity --full` | `activity` | none | already complete |
72
+ | `history` (compact default) | `compact_history` | `raw_history` | `--full` |
73
+ | `history --full` | `history` | none | already complete |
74
74
 
75
75
  Inactive row keys are omitted, not zero-filled. This makes a wrong parser loud:
76
76
  reading `.activity` from compact activity now yields a missing key instead of a
@@ -177,11 +177,11 @@ for their domain without adding package-specific logic to the CLI renderer.
177
177
 
178
178
  The following bounded built-ins now use this shared declaration:
179
179
 
180
- | Command mode | Withheld group | Restore |
181
- | ------------------- | -------------------------------------------------------- | -------- |
182
- | `deps --summary` | selected dependency tree, graph, or relationship context | `--full` |
183
- | `graph --summary` | `result_rows` | `--full` |
184
- | `validate --counts` | `diagnostic_rows` | `--full` |
180
+ | Command mode | Withheld group | Restore |
181
+ |---|---|---|
182
+ | `deps --summary` | selected dependency tree, graph, or relationship context | `--full` |
183
+ | `graph --summary` | `result_rows` | `--full` |
184
+ | `validate --counts` | `diagnostic_rows` | `--full` |
185
185
 
186
186
  Passing `--full` with the corresponding compact flag is a usage error. An
187
187
  explicit full request and the default full request produce the same payload
@@ -337,7 +337,7 @@ metadata as a continuation negative control. The checked-in report is
337
337
  [`scripts/release/context-intent-calibration.json`](../scripts/release/context-intent-calibration.json).
338
338
 
339
339
  | Intent | 2-item tokens / budget | 2,243-item tokens / budget | Current-scale rows | Degradation |
340
- | ------ | ---------------------- | -------------------------- | ------------------ | ----------- |
340
+ |---|---|---|---|---|
341
341
  | `context:orient` | 735 / 2,400 | 1,028 / 2,400 | 3 | bounded sections |
342
342
  | `get:inspect` | 401 / 3,200 | 415 / 3,200 | item envelope | standard item |
343
343
  | `list:triage` | 443 / 3,200 | 3,189 / 3,200 | 69 | budget-derived rows |
@@ -348,7 +348,7 @@ Whole-answer cursor cost is measured against the unprojected single call for
348
348
  the identical ordered row set:
349
349
 
350
350
  | Family | Rows | Pages | Optimized bytes/row | Optimized walk | Repeated-metadata control | Unbounded call | Walk / unbounded |
351
- | ------ | ---- | ----- | ------------------- | -------------- | ------------------------- | -------------- | ---------------- |
351
+ |---|---|---|---|---|---|---|---|
352
352
  | `list:triage` | 1,998 | 31 | 172.93 | 345,519 B | 387,489 B | 1,558,741 B | 0.2217 |
353
353
  | `search:discover` | 1,998 | 66 | 202.50 | 404,591 B | 470,046 B | 1,681,847 B | 0.2406 |
354
354
 
@@ -14,7 +14,7 @@ node scripts/release/packed-first-run.mjs /path/to/installed/@unbrained/pm-cli
14
14
  ```
15
15
 
16
16
  | Journey | Required observation |
17
- | --- | --- |
17
+ |---|---|
18
18
  | Installed README | Ordered init/create/list from `60 Second Example`; missing/reordered commands, unsupported expressions or unbalanced quotes fail. No shell execution. |
19
19
  | Persistence | Each command returns nonempty output below 4,096 characters; the created item exists. |
20
20
  | Branch merge | Independent comments survive a real Git merge; reconciliation and strict history verification succeed. |
@@ -94,16 +94,16 @@ pm create \
94
94
 
95
95
  Useful item types:
96
96
 
97
- | Type | Use |
98
- | ------------------------------------------- | ----------------------------------------------------------- |
99
- | `Epic` | broad outcome or initiative |
100
- | `Feature` | user-facing capability or major slice |
101
- | `Task` | implementation work |
102
- | `Chore` | maintenance, refactoring, or housekeeping work |
103
- | `Issue` | bug or defect |
104
- | `Decision` | recorded choice and rationale |
105
- | `Plan` | agent-optimized living plan with ordered steps and evidence |
106
- | `Event`, `Reminder`, `Milestone`, `Meeting` | calendar-aware planning |
97
+ | Type | Use |
98
+ |---|---|
99
+ | `Epic` | broad outcome or initiative |
100
+ | `Feature` | user-facing capability or major slice |
101
+ | `Task` | implementation work |
102
+ | `Chore` | maintenance, refactoring, or housekeeping work |
103
+ | `Issue` | bug or defect |
104
+ | `Decision` | recorded choice and rationale |
105
+ | `Plan` | agent-optimized living plan with ordered steps and evidence |
106
+ | `Event`, `Reminder`, `Milestone`, `Meeting` | calendar-aware planning |
107
107
 
108
108
  ## Find and Claim Work
109
109
 
package/docs/README.md CHANGED
@@ -17,17 +17,17 @@ pm guide release --json
17
17
 
18
18
  ## Read Path
19
19
 
20
- | Reader | First page | Then read |
21
- | ----------------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
22
- | New user | [Quickstart](QUICKSTART.md) | [Command Reference](COMMANDS.md) |
23
- | New maintainer | [Onboarding](ONBOARDING.md) | [Agent Guide](AGENT_GUIDE.md), [Testing](TESTING.md), [Releasing](RELEASING.md) |
24
- | Coding agent | [Agent Guide](AGENT_GUIDE.md) | [Configuration](CONFIGURATION.md), then command help |
25
- | Maintainer | [Contributing](../CONTRIBUTING.md) | [Testing](TESTING.md), [Releasing](RELEASING.md), [Architecture](ARCHITECTURE.md) |
26
- | Package author | [Packages and Extensions](EXTENSIONS.md) | [SDK](SDK.md), [starter extension](examples/starter-extension/README.md) |
27
- | Codex or ChatGPT plugin implementer | [Codex Plugin](CODEX_PLUGIN.md) | [Native ChatGPT and Codex Plugin Implementation Plan](CHATGPT_CODEX_PLUGIN_IMPLEMENTATION.md) |
28
- | Codex user | [Codex Plugin](CODEX_PLUGIN.md) | [Agent Guide](AGENT_GUIDE.md), then [Command Reference](COMMANDS.md) |
29
- | Claude Code user | [Claude Code Plugin](CLAUDE_CODE_PLUGIN.md) | [Agent Guide](AGENT_GUIDE.md), then [Command Reference](COMMANDS.md) |
30
- | Machine client | `pm contracts --json` | [CLI Scripting Contract](SCRIPTING.md), [Command Reference](COMMANDS.md#machine-contracts), optionally `pm install guide-shell --project && pm guide commands` |
20
+ | Reader | First page | Then read |
21
+ |---|---|---|
22
+ | New user | [Quickstart](QUICKSTART.md) | [Command Reference](COMMANDS.md) |
23
+ | New maintainer | [Onboarding](ONBOARDING.md) | [Agent Guide](AGENT_GUIDE.md), [Testing](TESTING.md), [Releasing](RELEASING.md) |
24
+ | Coding agent | [Agent Guide](AGENT_GUIDE.md) | [Configuration](CONFIGURATION.md), then command help |
25
+ | Maintainer | [Contributing](../CONTRIBUTING.md) | [Testing](TESTING.md), [Releasing](RELEASING.md), [Architecture](ARCHITECTURE.md) |
26
+ | Package author | [Packages and Extensions](EXTENSIONS.md) | [SDK](SDK.md), [starter extension](examples/starter-extension/README.md) |
27
+ | Codex or ChatGPT plugin implementer | [Codex Plugin](CODEX_PLUGIN.md) | [Native ChatGPT and Codex Plugin Implementation Plan](CHATGPT_CODEX_PLUGIN_IMPLEMENTATION.md) |
28
+ | Codex user | [Codex Plugin](CODEX_PLUGIN.md) | [Agent Guide](AGENT_GUIDE.md), then [Command Reference](COMMANDS.md) |
29
+ | Claude Code user | [Claude Code Plugin](CLAUDE_CODE_PLUGIN.md) | [Agent Guide](AGENT_GUIDE.md), then [Command Reference](COMMANDS.md) |
30
+ | Machine client | `pm contracts --json` | [CLI Scripting Contract](SCRIPTING.md), [Command Reference](COMMANDS.md#machine-contracts), optionally `pm install guide-shell --project && pm guide commands` |
31
31
 
32
32
  ## Documentation Map
33
33
 
@@ -127,16 +127,16 @@ Additional SDK, operations, and generated contracts:
127
127
 
128
128
  ## Guide Topic Map
129
129
 
130
- | Optional `pm guide` topic | Primary docs |
131
- | ------------------------- | --------------------------------------------------------------------------------------------------- |
132
- | `quickstart` | [Quickstart](QUICKSTART.md), [Command Reference](COMMANDS.md) |
133
- | `commands` | [Command Reference](COMMANDS.md), [Configuration](CONFIGURATION.md) |
134
- | `workflows` | [Agent Guide](AGENT_GUIDE.md), [Testing](TESTING.md) |
135
- | `sdk` | [SDK](SDK.md), [SDK context contracts](SDK_CONTEXT.md), [Architecture](ARCHITECTURE.md) |
136
- | `extensions`, `packages` | [Packages and Extensions](EXTENSIONS.md), [starter extension](examples/starter-extension/README.md) |
137
- | `skills` | [Agent Guide](AGENT_GUIDE.md) plus `.agents/skills/*` |
138
- | `harnesses` | [Agent Guide](AGENT_GUIDE.md) plus `.agents/skills/HARNESS_COMPATIBILITY.md` |
139
- | `release` | [Releasing](RELEASING.md), [CHANGELOG](../CHANGELOG.md) |
130
+ | Optional `pm guide` topic | Primary docs |
131
+ |---|---|
132
+ | `quickstart` | [Quickstart](QUICKSTART.md), [Command Reference](COMMANDS.md) |
133
+ | `commands` | [Command Reference](COMMANDS.md), [Configuration](CONFIGURATION.md) |
134
+ | `workflows` | [Agent Guide](AGENT_GUIDE.md), [Testing](TESTING.md) |
135
+ | `sdk` | [SDK](SDK.md), [SDK context contracts](SDK_CONTEXT.md), [Architecture](ARCHITECTURE.md) |
136
+ | `extensions`, `packages` | [Packages and Extensions](EXTENSIONS.md), [starter extension](examples/starter-extension/README.md) |
137
+ | `skills` | [Agent Guide](AGENT_GUIDE.md) plus `.agents/skills/*` |
138
+ | `harnesses` | [Agent Guide](AGENT_GUIDE.md) plus `.agents/skills/HARNESS_COMPATIBILITY.md` |
139
+ | `release` | [Releasing](RELEASING.md), [CHANGELOG](../CHANGELOG.md) |
140
140
 
141
141
  Community files:
142
142
 
@@ -10,12 +10,12 @@ Complete package-envelope fitting and session-reference recovery are tracked by
10
10
 
11
11
  Every built-in read surface uses four output dimensions: what to include, how much to return, how much the result may cost, and how to encode it. The same canonical controls work through the CLI, SDK, MCP, generated schemas, runtime contracts, and shell completions.
12
12
 
13
- | Dimension | CLI | SDK and MCP | Meaning |
14
- | --------- | -------------------------------- | --------------- | ---------------------------------------------------------------------- |
15
- | Include | `--output-include <csv>` | `outputInclude` | Retain named fields or sections, or select a declared projection mode. |
16
- | Amount | `--output-limit <n\|unbounded>` | `outputLimit` | Bound shared row collections. |
17
- | Cost | `--output-budget <n\|unbounded>` | `outputBudget` | Fail closed when even the compact result cannot fit. |
18
- | Encoding | `--output-format <toon\|json>` | `outputFormat` | Select the CLI renderer and record the requested encoding. |
13
+ | Dimension | CLI | SDK and MCP | Meaning |
14
+ |---|---|---|---|
15
+ | Include | `--output-include <csv>` | `outputInclude` | Retain named fields or sections, or select a declared projection mode. |
16
+ | Amount | `--output-limit <n\|unbounded>` | `outputLimit` | Bound shared row collections. |
17
+ | Cost | `--output-budget <n\|unbounded>` | `outputBudget` | Fail closed when even the compact result cannot fit. |
18
+ | Encoding | `--output-format <toon\|json>` | `outputFormat` | Select the CLI renderer and record the requested encoding. |
19
19
 
20
20
  The contract covers `list`, `context`, `search`, `get`, `next`, `health`, `deps`, `graph`, `history`, `activity`, `validate`, `events`, `contracts`, `comments`, `notes`, `files`, `docs`, `stats`, and `aggregate`, including list aliases and `ctx`.
21
21
 
@@ -295,9 +295,9 @@ may only shrink, while repeat suppression may only hold or improve. The gate
295
295
  also fixes the expected unique-fact shape:
296
296
 
297
297
  | Tracker tier | Group spend / budget | Seen items | Suppressed repeats | Delivered bytes |
298
- | ------------ | -------------------- | ---------- | ------------------ | --------------- |
299
- | 2 items | 3,820 / 20,000 | 2 | 3 | 15,274 |
300
- | 2,243 items | 10,156 / 20,000 | 106 | 7 | 40,614 |
298
+ |---|---|---|---|---|
299
+ | 2 items | 3,820 / 20,000 | 2 | 3 | 15,274 |
300
+ | 2,243 items | 10,156 / 20,000 | 106 | 7 | 40,614 |
301
301
 
302
302
  These are deterministic synthetic-corpus measurements from
303
303
  `scripts/release/context-intent-calibration.json`; they contain no hosted
@@ -99,7 +99,7 @@ The refusal contract distinguishes four states before any command-specific
99
99
  read or mutation begins:
100
100
 
101
101
  | Selected root state | Code | Exit | Recovery |
102
- | --- | --- | ---: | --- |
102
+ |---|---|---:|---|
103
103
  | Path does not exist | `tracker_root_missing` | 3 | Tokenized, non-interactive `pm --pm-path <path> init --defaults --agent-guidance skip` |
104
104
  | Directory exists but `settings.json` does not | `tracker_not_initialized` | 3 | The same initialization retry |
105
105
  | Path or ancestor is a regular file | `tracker_root_not_directory` | 2 | Select a directory; never suggest `pm init` against the file |
package/docs/RELEASING.md CHANGED
@@ -220,15 +220,15 @@ Signal tiers:
220
220
 
221
221
  Category precedence (first matching bucket wins):
222
222
 
223
- | Priority | Category | Trigger terms (from strong + weak signals unless noted) |
224
- | -------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
225
- | 1 | `Security` | `security`, `cve`, `vulnerability` |
226
- | 2 | `Deprecated` | `deprecated`, `deprecation` |
227
- | 3 | `Removed` | `removed`, `remove`, `deleted`, `delete` |
228
- | 4 | `Fixed` | `fix`, `fixed`, `bug`, `bugfix`, `hotfix`, `regression` |
229
- | 5 | `Added` | `feature`, `feat`, `added`, `add`, `new` |
230
- | 6 | `Changed` | strong-signal `change`, `changed`, `refactor`, `update`, `updated`, `improve`; for non-bug-like types only, title fallback is also used |
231
- | 7 | `Other` | no classifier match |
223
+ | Priority | Category | Trigger terms (from strong + weak signals unless noted) |
224
+ |---|---|---|
225
+ | 1 | `Security` | `security`, `cve`, `vulnerability` |
226
+ | 2 | `Deprecated` | `deprecated`, `deprecation` |
227
+ | 3 | `Removed` | `removed`, `remove`, `deleted`, `delete` |
228
+ | 4 | `Fixed` | `fix`, `fixed`, `bug`, `bugfix`, `hotfix`, `regression` |
229
+ | 5 | `Added` | `feature`, `feat`, `added`, `add`, `new` |
230
+ | 6 | `Changed` | strong-signal `change`, `changed`, `refactor`, `update`, `updated`, `improve`; for non-bug-like types only, title fallback is also used |
231
+ | 7 | `Other` | no classifier match |
232
232
 
233
233
  Bug-like default:
234
234
 
@@ -284,7 +284,16 @@ semantic class is `usage`, `not_found`, or `conflict`. Message and title prose
284
284
  never participate. Unknown codes, missing or mismatched exits, unhandled
285
285
  events, and every `generic_failure` or `dependency_failed` remain blocking.
286
286
  This keeps rewording independent from release policy and makes stale or broad
287
- message allowlists impossible.
287
+ message allowlists impossible. The gate skips issues seen only in
288
+ `environment=test` (opted-in CI tests); an issue with any other event counts
289
+ whenever any of its events falls inside the activity window. Activity and
290
+ environment are separate Sentry queries, because Sentry applies `lastSeen` after
291
+ an environment filter: a combined query would also skip an issue whose
292
+ production event predates the window while a test event falls inside it. When
293
+ the listing of issues with non-test events may be truncated, nothing is skipped,
294
+ and a failed listing fails the gate. Both listings follow Sentry's next-page links
295
+ up to `--sentry-limit` (default `200`); when active issues remain beyond it, the
296
+ gate fails, because it cannot judge issues it never read.
288
297
 
289
298
  Sentry API requests use a 120-second deadline by default. Operators can set
290
299
  `--sentry-request-timeout-ms` between `1` and `300000` when reproducing