@unbrained/pm-cli 2026.8.11 → 2026.8.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +52 -21
  3. package/dist/cli/commander-usage.js +37 -11
  4. package/dist/cli/error-guidance.d.ts +2 -0
  5. package/dist/cli/error-guidance.js +80 -13
  6. package/dist/cli/main.js +34 -19
  7. package/dist/cli/register-annotations.js +56 -3
  8. package/dist/cli/register-list-query.js +10 -7
  9. package/dist/cli/register-operations.js +16 -6
  10. package/dist/cli-bundle/bundle-manifest.json +157 -157
  11. package/dist/cli-bundle/chunks/{chunk-2OOU2AFH.js → chunk-3PS7X6GS.js} +2 -2
  12. package/dist/cli-bundle/chunks/chunk-7KL6KMWF.js +13 -0
  13. package/dist/cli-bundle/chunks/{chunk-WMEZHCFI.js → chunk-BM5YJ2UW.js} +51 -43
  14. package/dist/cli-bundle/chunks/chunk-D55A5AEN.js +33 -0
  15. package/dist/cli-bundle/chunks/chunk-KIKDWECH.js +196 -0
  16. package/dist/cli-bundle/chunks/{chunk-ZU34C3LH.js → chunk-KOQMGCTA.js} +2 -2
  17. package/dist/cli-bundle/chunks/chunk-R76342NV.js +2 -0
  18. package/dist/cli-bundle/chunks/chunk-RBTK5EZV.js +5 -0
  19. package/dist/cli-bundle/chunks/{chunk-IUNRVDAI.js → chunk-VLUQOIDT.js} +2 -2
  20. package/dist/cli-bundle/chunks/{chunk-A2SJGHSI.js → chunk-WLAHPSOX.js} +2 -2
  21. package/dist/cli-bundle/chunks/register-list-query-XPCJRUUD.js +10 -0
  22. package/dist/cli-bundle/chunks/register-mutation-4RJCBKRS.js +20 -0
  23. package/dist/cli-bundle/chunks/register-operations-2OGISOVR.js +2 -0
  24. package/dist/cli-bundle/chunks/{register-setup-NOCOOWQY.js → register-setup-LLHAKP2V.js} +2 -2
  25. package/dist/cli-bundle/focused-chunks/chunk-2DALMVF7.js +5 -0
  26. package/dist/cli-bundle/focused-chunks/chunk-5OQIMELN.js +155 -0
  27. package/dist/cli-bundle/focused-chunks/chunk-5TAGTDRE.js +2 -0
  28. package/dist/cli-bundle/focused-chunks/{chunk-FPSYO5ZG.js → chunk-ECADZMVC.js} +11 -11
  29. package/dist/cli-bundle/focused-chunks/chunk-EJGXRA6B.js +2 -0
  30. package/dist/cli-bundle/focused-chunks/chunk-FFGSZCPK.js +16 -0
  31. package/dist/cli-bundle/focused-chunks/{chunk-BKPIY34S.js → chunk-GQW4BPUT.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/chunk-ISKOBJCM.js +2 -0
  33. package/dist/cli-bundle/focused-chunks/{chunk-UDAZWT25.js → chunk-JAFRIWVF.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/{chunk-2DL3MRTD.js → chunk-KHM2CS2C.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/{chunk-J5EKAIVD.js → chunk-KPSXVBDV.js} +2 -2
  36. package/dist/cli-bundle/focused-chunks/{chunk-23FTGO3W.js → chunk-KTLOKKCQ.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/chunk-LGYK3NUF.js +8 -0
  38. package/dist/cli-bundle/focused-chunks/{chunk-KDH5OX3D.js → chunk-NBLUKITQ.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/{chunk-55BIB6DV.js → chunk-NYLOUPOB.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-DPO7TEFX.js → chunk-Q4T463SD.js} +28 -28
  41. package/dist/cli-bundle/focused-chunks/chunk-QVZVY53N.js +2 -0
  42. package/dist/cli-bundle/focused-chunks/{chunk-TL5M2PAY.js → chunk-RWPAWUOT.js} +2 -2
  43. package/dist/cli-bundle/focused-chunks/chunk-UTEWXDEQ.js +17 -0
  44. package/dist/cli-bundle/focused-chunks/{chunk-4H5IA6AV.js → chunk-YIAXMC3T.js} +2 -2
  45. package/dist/cli-bundle/focused-chunks/chunk-ZMGWAYH7.js +2 -0
  46. package/dist/cli-bundle/main.js +13 -13
  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 +40 -40
  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 +1 -1
  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/extensions/reserved-host-flags.js +3 -2
  58. package/dist/core/history/drift-scan.js +13 -8
  59. package/dist/core/history/history.d.ts +8 -0
  60. package/dist/core/history/history.js +57 -7
  61. package/dist/core/history/replay.d.ts +9 -1
  62. package/dist/core/history/replay.js +48 -13
  63. package/dist/core/output/output.d.ts +2 -0
  64. package/dist/core/output/output.js +46 -14
  65. package/dist/core/shared/command-types.d.ts +2 -0
  66. package/dist/core/shared/command-types.js +2 -2
  67. package/dist/core/shared/errors.d.ts +5 -0
  68. package/dist/core/shared/errors.js +2 -2
  69. package/dist/core/store/item-metadata-cache.d.ts +1 -1
  70. package/dist/core/store/item-metadata-cache.js +14 -7
  71. package/dist/sdk/cli-bootstrap.d.ts +2 -0
  72. package/dist/sdk/cli-bootstrap.js +6 -2
  73. package/dist/sdk/cli-contracts/completeness.js +3 -2
  74. package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
  75. package/dist/sdk/cli-contracts/registration-helpers.d.ts +20 -3
  76. package/dist/sdk/cli-contracts/registration-helpers.js +18 -12
  77. package/dist/sdk/cli-contracts/schemas/assurance-definition.d.ts +8 -6
  78. package/dist/sdk/cli-contracts/schemas/assurance-definition.js +4 -3
  79. package/dist/sdk/cli-contracts/tool-option-contracts.js +3 -2
  80. package/dist/sdk/cli-contracts/tool-parameter-tables.js +22 -2
  81. package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
  82. package/dist/sdk/cli-contracts/tool-schema.js +7 -4
  83. package/dist/sdk/cli-program.js +3 -2
  84. package/dist/sdk/completion.js +16 -7
  85. package/dist/sdk/context-intent-contracts.js +45 -4
  86. package/dist/sdk/core.d.ts +1 -0
  87. package/dist/sdk/core.js +3 -2
  88. package/dist/sdk/generated/generated-error-code-catalog-part-1.d.ts +8 -0
  89. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1585 -0
  90. package/dist/sdk/generated/generated-error-code-catalog-part-2.d.ts +8 -0
  91. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1608 -0
  92. package/dist/sdk/generated-error-code-catalog.js +6 -3140
  93. package/dist/sdk/governance/assurance-action.js +9 -7
  94. package/dist/sdk/governance/assurance-mutation-error.d.ts +7 -0
  95. package/dist/sdk/governance/assurance-mutation-error.js +35 -0
  96. package/dist/sdk/governance/assurance-runtime.js +11 -8
  97. package/dist/sdk/governance/assurance.d.ts +12 -6
  98. package/dist/sdk/governance/assurance.js +181 -66
  99. package/dist/sdk/governance/health.d.ts +3 -1
  100. package/dist/sdk/governance/health.js +21 -4
  101. package/dist/sdk/governance/validate-item-reader.js +3 -3
  102. package/dist/sdk/governance/validate.d.ts +2 -0
  103. package/dist/sdk/governance/validate.js +13 -3
  104. package/dist/sdk/graph/durable-cache.d.ts +1 -1
  105. package/dist/sdk/graph/durable-cache.js +98 -29
  106. package/dist/sdk/graph/governance.d.ts +14 -0
  107. package/dist/sdk/graph/governance.js +34 -9
  108. package/dist/sdk/index.d.ts +1 -1
  109. package/dist/sdk/index.js +3 -3
  110. package/dist/sdk/lifecycle/claim.js +10 -3
  111. package/dist/sdk/merge/driver.d.ts +2 -2
  112. package/dist/sdk/merge/driver.js +3 -3
  113. package/dist/sdk/merge/receipts.d.ts +6 -4
  114. package/dist/sdk/merge/receipts.js +7 -5
  115. package/dist/sdk/merge/three-way.d.ts +2 -2
  116. package/dist/sdk/merge/three-way.js +3 -3
  117. package/dist/sdk/output-projection.d.ts +9 -1
  118. package/dist/sdk/output-projection.js +45 -9
  119. package/dist/sdk/query/activity.d.ts +49 -2
  120. package/dist/sdk/query/activity.js +183 -37
  121. package/dist/sdk/query/get.js +19 -2
  122. package/dist/sdk/read-output-contracts.d.ts +5 -1
  123. package/dist/sdk/read-output-contracts.js +17 -2
  124. package/dist/sdk/read-output-session.d.ts +2 -0
  125. package/dist/sdk/read-output-session.js +12 -5
  126. package/dist/sdk/runtime-primitives.d.ts +3 -3
  127. package/dist/sdk/runtime-primitives.js +5 -5
  128. package/dist/sdk/runtime-stats-options.js +3 -2
  129. package/dist/sdk/runtime.js +5 -9
  130. package/dist/sdk/stats.d.ts +36 -3
  131. package/dist/sdk/stats.js +55 -15
  132. package/dist/sdk/test/execution.d.ts +4 -0
  133. package/dist/sdk/test/execution.js +86 -21
  134. package/dist/types.d.ts +2 -0
  135. package/dist/types.js +2 -2
  136. package/docs/ASSURANCE.md +17 -12
  137. package/docs/COMMANDS.md +29 -8
  138. package/docs/CONFIGURATION.md +7 -0
  139. package/docs/DEPENDENCY_KIND_CONTRACT.md +10 -8
  140. package/docs/MERGE_SAFETY.md +3 -1
  141. package/docs/OUTPUT_PROJECTION_CONTRACTS.md +26 -13
  142. package/docs/README.md +2 -0
  143. package/docs/READ_OUTPUT_CONTRACTS.md +17 -2
  144. package/docs/SDK_AGENT_SESSION_CONTEXT.md +12 -1
  145. package/docs/SDK_CONTEXT_EVIDENCE_CONTRACTS.md +53 -0
  146. package/docs/SDK_CONTEXT_INTEGRITY.md +28 -1
  147. package/docs/TRUSTWORTHY_CONTEXT_EVIDENCE.md +106 -0
  148. package/docs/performance/sdk-entrypoint-import-costs.md +6 -2
  149. package/marketplace.json +2 -2
  150. package/package.json +5 -5
  151. package/packages/pm-beads/package.json +1 -1
  152. package/packages/pm-calendar/package.json +1 -1
  153. package/packages/pm-command-kit/package.json +1 -1
  154. package/packages/pm-digital-twin/package.json +1 -1
  155. package/packages/pm-governance-audit/package.json +1 -1
  156. package/packages/pm-guide-shell/package.json +1 -1
  157. package/packages/pm-kanban/package.json +1 -1
  158. package/packages/pm-lifecycle-hooks/package.json +1 -1
  159. package/packages/pm-linked-test-adapters/package.json +1 -1
  160. package/packages/pm-search-advanced/package.json +1 -1
  161. package/packages/pm-templates/package.json +1 -1
  162. package/packages/pm-todos/package.json +1 -1
  163. package/packages/pm-vcs/package.json +1 -1
  164. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  165. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  166. package/sdk/public-surface.json +203 -52
  167. package/dist/cli-bundle/chunks/chunk-2RA2YTHJ.js +0 -33
  168. package/dist/cli-bundle/chunks/chunk-DSKYD4LG.js +0 -13
  169. package/dist/cli-bundle/chunks/chunk-HC3GM6YY.js +0 -194
  170. package/dist/cli-bundle/chunks/chunk-W7CPZGSB.js +0 -2
  171. package/dist/cli-bundle/chunks/chunk-ZXOC6HG5.js +0 -5
  172. package/dist/cli-bundle/chunks/register-list-query-HAUXVUPY.js +0 -10
  173. package/dist/cli-bundle/chunks/register-mutation-7Y5U7ABT.js +0 -20
  174. package/dist/cli-bundle/chunks/register-operations-EQX3DLAZ.js +0 -2
  175. package/dist/cli-bundle/focused-chunks/chunk-3AYKXMYX.js +0 -2
  176. package/dist/cli-bundle/focused-chunks/chunk-4AHEC74N.js +0 -2
  177. package/dist/cli-bundle/focused-chunks/chunk-4SV3ZKG3.js +0 -16
  178. package/dist/cli-bundle/focused-chunks/chunk-6JW6Z2P5.js +0 -8
  179. package/dist/cli-bundle/focused-chunks/chunk-D4PIWE6D.js +0 -2
  180. package/dist/cli-bundle/focused-chunks/chunk-E3KCL7AY.js +0 -5
  181. package/dist/cli-bundle/focused-chunks/chunk-ERAAFLPS.js +0 -153
  182. package/dist/cli-bundle/focused-chunks/chunk-F6E4JZKG.js +0 -2
  183. package/dist/cli-bundle/focused-chunks/chunk-OJ3LVVIS.js +0 -2
  184. package/dist/cli-bundle/focused-chunks/chunk-VABB4L5Y.js +0 -17
@@ -61,7 +61,7 @@ pm merge install --dry-run --json
61
61
  | 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. |
62
62
  | 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. |
63
63
 
64
- When both sides change the same item scalar differently, the driver writes the same stable value regardless of which branch Git labels ours or theirs, but exits nonzero. JSON leaf conflicts retain the explicit preferred-side policy. Git keeps either path conflicted so a human or coordinating agent must review the discarded value and explicitly `git add` the resolution.
64
+ When both sides change the same item scalar differently, the driver writes the same stable value regardless of which branch Git labels ours or theirs, but exits nonzero. Item results and receipts expose the caller's `requested_preference`; the per-decision `retained` and `discarded` values or hashes are authoritative because stable value order can retain either side. Readers normalize the legacy receipt key `preferred`, while new receipts no longer emit it. JSON leaf conflicts retain the explicit preferred-side policy. Git keeps either path conflicted so a human or coordinating agent must review the discarded value and explicitly `git add` the resolution. This correction is tracked by [pm-qckpnq](../.agents/pm/issues/pm-qckpnq.toon).
65
65
 
66
66
  The driver result's `guidance` always points unresolved conflicts to `pm merge report`. When a clone-local receipt exists, guidance includes its privacy-safe receipt and item ids for exact correlation; discarded values remain confined to the local receipt and never appear in generic logs or tracker history. Tracked by [pm-fbrz7p](../.agents/pm/issues/pm-fbrz7p.toon).
67
67
 
@@ -133,6 +133,8 @@ pm merge reconcile --dry-run --json
133
133
 
134
134
  `history-repair` records the reconciliation patch and classifies its changed fields against the final item. Append-only collection unions and deterministic reordering are reported as preserved context without a data-loss warning. Fields whose replayed values are actually removed or replaced remain loud with discarded event authors/operations and recovery guidance. Re-apply any intended losing mutation as a normal `pm update` so it remains explicit and auditable.
135
135
 
136
+ History events now declare an item-hash epoch. The current epoch preserves linked-test insertion order; unversioned streams are verified against both the legacy sorted-test canonicalization and the order-preserving canonicalization. An unknown explicit epoch is reported as `unsupported_item_hash_version` and repair refuses to guess. This keeps version incompatibility distinct from item corruption and is tracked by [pm-2htk4p](../.agents/pm/issues/pm-2htk4p.toon).
137
+
136
138
  ## Delete versus modify policy
137
139
 
138
140
  A delete on one branch and an edit on another is not safely resolvable by a generic file driver. The merged workspace must not silently resurrect the item. `storage_integrity` reports the live document plus delete-terminated history as a hard finding. The coordinator chooses one policy explicitly:
@@ -12,7 +12,10 @@ cursor-chain amortization are tracked by
12
12
  [pm-yekkvt](../.agents/pm/issues/pm-yekkvt.toon), and
13
13
  [pm-sf31yl](../.agents/pm/issues/pm-sf31yl.toon). Trustworthy collection
14
14
  selectors are tracked by
15
- [pm-x710qm](../.agents/pm/issues/pm-x710qm.toon).
15
+ [pm-x710qm](../.agents/pm/issues/pm-x710qm.toon). Default contract suppression
16
+ and canonical TOON tables are tracked by
17
+ [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon) and
18
+ [pm-5y05kq](../.agents/pm/issues/pm-5y05kq.toon).
16
19
 
17
20
  ## Agent Quick Context
18
21
 
@@ -38,12 +41,13 @@ explicit receipt with `has_omissions: false`,
38
41
 
39
42
  Mutually exclusive output modes emit only their active row collection:
40
43
 
41
- | Command mode | Active row key | Withheld group | Restore |
42
- | --------------------------- | ------------------ | -------------- | ---------------- |
43
- | `activity --compact` | `compact_activity` | `provenance` | `--full` |
44
- | `activity --full` | `activity` | none | already complete |
45
- | `history` (compact default) | `compact_history` | `raw_history` | `--full` |
46
- | `history --full` | `history` | none | already complete |
44
+ | Command mode | Active row key | Withheld group | Restore |
45
+ | --------------------------- | --------------------- | -------------- | ---------------- |
46
+ | `activity` (digest default) | `activity_digest` | `event_rows` | `--raw` |
47
+ | `activity --raw/--compact` | `compact_activity` | `provenance` | `--full` |
48
+ | `activity --full` | `activity` | none | already complete |
49
+ | `history` (compact default) | `compact_history` | `raw_history` | `--full` |
50
+ | `history --full` | `history` | none | already complete |
47
51
 
48
52
  Inactive row keys are omitted, not zero-filled. This makes a wrong parser loud:
49
53
  reading `.activity` from compact activity now yields a missing key instead of a
@@ -57,8 +61,11 @@ integrations and built-in output cannot drift independently.
57
61
 
58
62
  ## Universal Read Rows
59
63
 
60
- Core read results expose a `row_contract` whether or not the current page has
61
- rows:
64
+ Core read results expose `row_contract` only when callers request
65
+ `--output-row-contract` / `outputRowContract: true`. Keeping discovery metadata
66
+ off by default makes ordinary reads pay for project data rather than repeating
67
+ the same selector declaration. The explicit contract remains available whether
68
+ or not the current page has rows:
62
69
 
63
70
  ```json
64
71
  {
@@ -67,7 +74,8 @@ rows:
67
74
  "row_kind": "collection",
68
75
  "row_keys": ["items"],
69
76
  "fields": "supported",
70
- "jq_selector": ".row_contract.row_keys[] as $key | getpath($key | split(\".\")) | if type == \"array\" then .[] else if type == \"object\" then to_entries[] else empty end end"
77
+ "jq_selector": ".row_contract.row_keys[] as $key | getpath($key | split(\".\")) | if type == \"array\" then .[] else if type == \"object\" then to_entries[] else empty end end",
78
+ "toon_encoding": "tabular_when_uniform"
71
79
  }
72
80
  }
73
81
  ```
@@ -80,7 +88,12 @@ collections declare every active dot-delimited path. This keeps
80
88
  nested dependency graph and relationship-context rows addressable as
81
89
  `graph.nodes`, `graph.edges`, `context.nodes`, and `context.edges` without
82
90
  duplicating them at the envelope root. Array collections produce their
83
- elements; object maps such as stats counts produce jq `to_entries` rows.
91
+ elements; object maps produce jq `to_entries` rows.
92
+ `toon_encoding: "tabular_when_uniform"` declares that an array of flat objects
93
+ with one shared key set renders as a length-marked TOON table; mixed, nested,
94
+ or heterogeneous arrays retain the expanded representation. Quoted,
95
+ separator-bearing, and multiline values use the canonical TOON encoder and
96
+ round-trip through the strict decoder.
84
97
  Commands without a row collection, including a dependency tree or leaf `get`,
85
98
  declare `row_kind: "none"`, an empty `row_keys` array, and omit `jq_selector`.
86
99
  The absence is therefore distinguishable from a legitimate empty collection.
@@ -94,8 +107,8 @@ publish a row contract.
94
107
  SDK and package authors can import `PM_READ_ROW_CONTRACTS`,
95
108
  `PM_READ_ROW_JQ_SELECTOR`, and `resolveReadRowContract` from
96
109
  `@unbrained/pm-cli/sdk`. Existing package declarations are preserved only
97
- when `command`, `row_kind`, `row_keys`, `fields`, and the conditional
98
- `jq_selector` form a structurally valid row contract; malformed declarations
110
+ when `command`, `row_kind`, `row_keys`, `fields`, the conditional
111
+ `jq_selector`, and any supplied `toon_encoding` form a structurally valid row contract; malformed declarations
99
112
  are replaced by the canonical built-in contract when one applies.
100
113
 
101
114
  ## Self-Describing SDK Projections
package/docs/README.md CHANGED
@@ -54,7 +54,9 @@ pm guide release --json
54
54
  - [SDK Agent Session and Episode Context](SDK_AGENT_SESSION_CONTEXT.md) - inherited role/topic context, cross-process episode identity, and deterministic history grouping.
55
55
  - [Improvement Ledger and History Analytics](IMPROVEMENT_ANALYTICS.md) - audited quantitative observations, live provenance coverage, and bounded observational fleet outcomes.
56
56
  - [Project Assurance Primitives](ASSURANCE.md) - SDK-owned measurements, assertions, lifecycle gates, cost receipts, and durable verdict history shared by CLI and MCP.
57
+ - [Trustworthy Context and Evidence Contracts](TRUSTWORTHY_CONTEXT_EVIDENCE.md) - full-record assurance, graph composition, boolean health rows, lossless linked-test removal, and role-labelled recovery.
57
58
  - [SDK Evidence Traceability and Integrity](SDK_EVIDENCE_TRACEABILITY.md) - reverse source-to-item lookup, atomic evidence replacement, no-op history, linked-test collision classification, and telemetry drain receipts.
59
+ - [SDK Context and Evidence Contracts](SDK_CONTEXT_EVIDENCE_CONTRACTS.md) - material omission receipts, scoped preflight activation, truthful merge preference, claim-race classification, and versioned history hashes.
58
60
  - [Reproducible Workspaces and Snapshots](REPRODUCIBLE_WORKSPACES.md) - deterministic SDK recipes and content-addressed authoritative tracker restore points.
59
61
  - [Portable Corpus Shapes](CORPUS_SHAPES.md) - versioned SDK populations for realistic benchmarks, evaluations, and package tests.
60
62
  - [Agent UX Contracts](AGENT_UX_CONTRACTS.md) - ordering-cycle advisories, graph count units, collision safety, compact context, ownership wording, and recovery behavior.
@@ -1,6 +1,6 @@
1
1
  # Universal Read Output Contracts
2
2
 
3
- Tracker references: [pm-hb7ug8](../.agents/pm/features/pm-hb7ug8.toon), [pm-cxr0jb](../.agents/pm/features/pm-cxr0jb.toon), [pm-hid9g1](../.agents/pm/features/pm-hid9g1.toon), and [pm-sb0tns](../.agents/pm/issues/pm-sb0tns.toon).
3
+ Tracker references: [pm-hb7ug8](../.agents/pm/features/pm-hb7ug8.toon), [pm-cxr0jb](../.agents/pm/features/pm-cxr0jb.toon), [pm-hid9g1](../.agents/pm/features/pm-hid9g1.toon), [pm-sb0tns](../.agents/pm/issues/pm-sb0tns.toon), and [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon).
4
4
 
5
5
  ## Agent Quick Context
6
6
 
@@ -19,6 +19,10 @@ Row shaping follows each envelope's `row_contract.row_keys`, including
19
19
  dot-delimited nested arrays and object maps such as `graph.nodes`. Include,
20
20
  amount, repeat suppression, and cost compaction therefore operate on the same
21
21
  machine-declared rows; they do not rely on command-specific top-level keys.
22
+ The runtime uses that declaration internally on every read but omits the
23
+ repeated metadata from results by default. Request
24
+ `--output-row-contract` / `outputRowContract: true` when a consumer needs the
25
+ row paths, jq selector, and active TOON encoding contract.
22
26
 
23
27
  ## Cross-Call Context Sessions
24
28
 
@@ -46,6 +50,15 @@ tokens separately when the remaining group allowance is smaller than the
46
50
  minimum control envelope, plus the accumulated spend, remaining capacity,
47
51
  newly served items, and suppressed repeats.
48
52
 
53
+ The carried served-item set accepts at most 10,000 identities. A receipt always
54
+ preserves identities already present in the supplied state and retains newly
55
+ served identities in deterministic order until that capacity is full. When a
56
+ single read crosses the boundary, `seen_item_overflow_count` reports how many
57
+ new identities were not carried forward; those facts remain in the current
58
+ envelope and may be served in full again on a later read. The emitted
59
+ `next_state` therefore always remains valid input to the next call without
60
+ silently widening the safety bound.
61
+
49
62
  Session state is deliberately caller-carried: CLI processes, SDK clients, MCP
50
63
  hosts, and packages share the same deterministic primitive without a hidden
51
64
  daemon or mutable cache. Validation rejects unknown fields, invalid identifiers,
@@ -69,12 +82,13 @@ tracker content.
69
82
 
70
83
  ## Precedence and Compatibility
71
84
 
72
- Resolution is deterministic: canonical controls win over command-local compatibility options, which win over intent defaults, which win over command defaults. Existing options such as `--fields`, `--limit`, `--token-budget`, `--format`, `--brief`, and `--full` remain accepted. Contract output marks them as hidden compatibility aliases and supplies a migration hint; traversal, cursor, side-effect, and streaming controls instead receive an explicit behavior-preservation hint because a static output control cannot replace their semantics. Callers that omit the canonical controls receive the byte-identical established result.
85
+ Resolution is deterministic: canonical controls win over command-local compatibility options, which win over intent defaults, which win over command defaults. Existing options such as `--fields`, `--limit`, `--token-budget`, `--format`, `--brief`, and `--full` remain accepted. Contract output marks them as hidden compatibility aliases and supplies a migration hint; traversal, cursor, side-effect, and streaming controls instead receive an explicit behavior-preservation hint because a static output control cannot replace their semantics. Callers that omit the four shaping dimensions retain the established data projection; the one intentional envelope correction is that repeated `row_contract` metadata is now opt-in.
73
86
 
74
87
  ```bash
75
88
  pm list-open --output-include id,title,status --output-limit 10
76
89
  pm context --for orient --output-budget 900 --output-format toon
77
90
  pm search "runtime contracts" --output-limit 5 --output-format json
91
+ pm stats --output-row-contract
78
92
  pm contracts --full --json
79
93
  ```
80
94
 
@@ -93,6 +107,7 @@ const result = await pm.list({
93
107
  outputInclude: "id,title,status",
94
108
  outputLimit: 10,
95
109
  outputBudget: 800,
110
+ outputRowContract: true,
96
111
  outputSession: {
97
112
  version: 1,
98
113
  id: "orientation",
@@ -5,7 +5,8 @@ Tracker references: [pm-9wbiye](../.agents/pm/issues/pm-9wbiye.toon),
5
5
  [pm-oqo9l2](../.agents/pm/features/pm-oqo9l2.toon),
6
6
  [pm-3zgh2c](../.agents/pm/features/pm-3zgh2c.toon),
7
7
  [pm-eq9dlw](../.agents/pm/issues/pm-eq9dlw.toon), and
8
- [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon).
8
+ [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon), plus
9
+ [pm-5q8wa0](../.agents/pm/issues/pm-5q8wa0.toon).
9
10
 
10
11
  Project management is context management. The public SDK therefore carries a
11
12
  session's purpose and episode boundary through the same immutable history that
@@ -137,6 +138,16 @@ without confusing an unavailable harness signal with a failed resolver. The
137
138
  warning is advisory and the storage check includes the bounded attempt and
138
139
  success counters for diagnosis.
139
140
 
141
+ Older immutable history can also contain roles outside the controlled domain,
142
+ including values recorded from presence-only harness flags before semantic role
143
+ validation existed. `pm health` retains the privacy-safe
144
+ `provenance_value_domain_invalid:<harness>:<dimension>:<value-shape>:<count>`
145
+ warning and its bounded storage aggregate, but treats the finding as advisory:
146
+ truthful append-only history is not rewritten merely to make health green. New
147
+ session, environment, MCP, and inferred provenance still pass through the
148
+ controlled write-time validator, so this disposition does not permit new
149
+ invalid values.
150
+
140
151
  ## Cross an MCP boundary
141
152
 
142
153
  An embedding MCP client can add bounded `provenance` and `episode` fields to
@@ -0,0 +1,53 @@
1
+ # SDK Context and Evidence Contracts
2
+
3
+ Tracked by [pm-gok2km](../.agents/pm/issues/pm-gok2km.toon), [pm-zryb9d](../.agents/pm/issues/pm-zryb9d.toon), [pm-qckpnq](../.agents/pm/issues/pm-qckpnq.toon), [pm-hfqju5](../.agents/pm/issues/pm-hfqju5.toon), [pm-2htk4p](../.agents/pm/issues/pm-2htk4p.toon), and [pm-v0a0un](../.agents/pm/issues/pm-v0a0un.toon).
4
+
5
+ These contracts keep SDK context truthful, bounded, and reusable across the CLI, MCP, packages, and automation. They are designed around the project principle that project management is context management: a compact response must reveal material omissions, merge evidence must describe what actually survived, and compatibility failures must not masquerade as corruption.
6
+
7
+ ## Material omission receipts
8
+
9
+ `pm get` derives omission receipts from non-serialized materiality evidence. Empty bodies and zero-cardinality collections do not consume receipt tokens merely because a richer projection could render them. Material body, linked-artifact, collection, schedule, child, and claim-state groups retain exact `--fields` restoration guidance.
10
+
11
+ Package authors can use `registerOutputMaterialFieldGroups(result, groups)` before the shared output boundary attaches a receipt. The registration is held in process memory through a `WeakMap`; it never appears in JSON, TOON, item storage, history, or package output.
12
+
13
+ ## Scoped preflight ownership
14
+
15
+ An extension contribution inventory can declare `preflight_ownership` command sets. Static activation uses those same sets as runtime dispatch:
16
+
17
+ - a scoped preflight activates only for an owned command;
18
+ - disjoint scoped preflights do not collide or activate for `pm health` merely because both advertise the `preflight` capability;
19
+ - `preflight_overrides` entries without corresponding ownership remain global.
20
+
21
+ This keeps health diagnostics and lazy runtime behavior on one ownership contract.
22
+
23
+ ## Merge provenance
24
+
25
+ Stable-value item merges distinguish a caller request from the outcome. Low-level item results, driver results, clone-local receipts, and privacy-safe summaries expose `requested_preference`. The actual outcome remains in each decision's `retained` and `discarded` values or hashes. New receipts do not emit the ambiguous `preferred` key; readers still ingest legacy schema-v1 receipts and normalize that key to `requested_preference`.
26
+
27
+ ## Claim race classification
28
+
29
+ Extensions can import `isAlreadyClaimedError` from either supported lifecycle entrypoint:
30
+
31
+ ```ts
32
+ import { isAlreadyClaimedError } from "@unbrained/pm-cli/sdk";
33
+ // or the compact lifecycle surface
34
+ import { isAlreadyClaimedError as isCoreAlreadyClaimedError } from "@unbrained/pm-cli/sdk/core";
35
+ ```
36
+
37
+ The predicate recognizes only the canonical `PmCliError` code `already_claimed_by`; consumers do not need to duplicate an internal string check.
38
+
39
+ ## Versioned history item hashes
40
+
41
+ New history events carry `item_hash_version: 2`, whose canonicalization preserves linked-test insertion order. The verifier auto-detects unversioned legacy streams against both the legacy sorted-test epoch and the order-preserving epoch. `hashDocumentForVersion` and `verifyHistoryChainWithVersion` expose the same compatibility logic to SDK consumers.
42
+
43
+ Unknown explicit epochs return `verify_failed:unsupported_item_hash_version:<version>:entry_<n>`. Repair refuses those streams instead of rewriting evidence with a guessed algorithm. Re-anchored supported streams are normalized to the current epoch, and the drift cache records the detected epoch so item-versus-history comparison uses the same canonicalization.
44
+
45
+ ## Assurance mutation refusals
46
+
47
+ Assurance `put` and `remove` operations validate untrusted declaration shapes at the shared action boundary used by the CLI, SDK, and MCP. Malformed definitions, referenced-declaration removals, and unauthorized assertion weakening return `PmCliError` with the canonical `invalid_argument_value` code and usage exit semantics. Evaluation and storage failures that are not input `TypeError`s remain unexpected and fail closed.
48
+
49
+ This boundary keeps deterministic operator refusals out of unexpected-error reporting while preserving Sentry and release-gate signal for genuine runtime faults.
50
+
51
+ ## Verification expectations
52
+
53
+ Changes to these contracts require focused unit coverage, exact repository coverage, packed ESM and TypeScript consumption, and temporary-workspace CLI acceptance. Merge changes additionally require the temporary-Git workflow in [Multi-Branch Merge Safety](MERGE_SAFETY.md).
@@ -1,6 +1,6 @@
1
1
  # SDK Context Integrity
2
2
 
3
- Tracker: [pm-0k19l7](../.agents/pm/issues/pm-0k19l7.toon), [pm-9stazf](../.agents/pm/issues/pm-9stazf.toon), [pm-tu71](../.agents/pm/issues/pm-tu71.toon), [pm-0xmajx](../.agents/pm/issues/pm-0xmajx.toon), [pm-7rrqsk](../.agents/pm/issues/pm-7rrqsk.toon), [pm-ety1qc](../.agents/pm/issues/pm-ety1qc.toon), and [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon).
3
+ Tracker: [pm-0k19l7](../.agents/pm/issues/pm-0k19l7.toon), [pm-9stazf](../.agents/pm/issues/pm-9stazf.toon), [pm-tu71](../.agents/pm/issues/pm-tu71.toon), [pm-0xmajx](../.agents/pm/issues/pm-0xmajx.toon), [pm-7rrqsk](../.agents/pm/issues/pm-7rrqsk.toon), [pm-ety1qc](../.agents/pm/issues/pm-ety1qc.toon), [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon), [pm-5y05kq](../.agents/pm/issues/pm-5y05kq.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), and [pm-h97qxd](../.agents/pm/issues/pm-h97qxd.toon).
4
4
 
5
5
  ## Agent Quick Context
6
6
 
@@ -31,6 +31,28 @@ selector grammar and omission receipts as any other SDK-owned item field.
31
31
 
32
32
  The same SDK-owned read-output registry now declares `package manage` as a first-class read surface. Package authors can resolve either `package manage` or `package-manage` to its canonical contract and discover the universal include, amount, cost, and encoding dimensions without copying CLI knowledge.
33
33
 
34
+ ## Row discovery and exact output receipts
35
+
36
+ Row locations and encoding capabilities remain part of the SDK-owned read
37
+ contract, but the `row_contract` discovery block is opt-in on rendered command
38
+ results. Use `--output-row-contract` in the CLI or `outputRowContract: true` in
39
+ SDK and MCP options when a generic consumer must discover row selectors. Normal
40
+ agent reads omit the repeated metadata and retain the same internal projections.
41
+
42
+ Uniform flat object arrays use canonical tabular TOON when TOON output is
43
+ selected. Mixed, nested, or scalar collections retain the general recursive
44
+ encoding, so package authors can add richer shapes without pretending they are
45
+ tabular. The optional row contract declares
46
+ `toon_encoding: tabular_when_uniform` for consumers that negotiate this
47
+ optimization.
48
+
49
+ When discovery metadata is omitted, every `context_intent`, `read_output`, and
50
+ `read_session` estimate is stabilized against the final serialized envelope.
51
+ Consequently `estimated_tokens` and `spent_this_call_tokens` never charge an
52
+ agent for hidden row metadata, and a caller-carried output session remains an
53
+ exact cross-command budget rather than an approximation of an intermediate
54
+ shape.
55
+
34
56
  ## Bounded annotation mutations
35
57
 
36
58
  Adding, editing, or deleting a comment, note, or learning returns the changed entry plus mutation and omission receipts. The reply size therefore stays independent of the item’s existing annotation history. Pass `--full-history` when a human or integration genuinely needs the complete post-mutation collection:
@@ -68,6 +90,11 @@ reader. Validation uses collection-bearing metadata for evidence and
68
90
  relationship checks and materializes bodies only when strict history-drift
69
91
  verification is requested.
70
92
 
93
+ Every health check row exposes both its tri-state `status` and a required
94
+ boolean `ok`. The boolean is exactly `status === "ok"` in full, brief, and
95
+ summary projections, so generic SDK and package consumers can use a stable
96
+ success predicate without discarding warning-versus-error detail.
97
+
71
98
  The storage check also reads at most 10,000 local immutable events for bounded
72
99
  agent-provenance resolver outcomes. This scan performs no network or provider
73
100
  I/O, tolerates malformed streams already owned by integrity diagnostics, and
@@ -0,0 +1,106 @@
1
+ # Trustworthy Context and Evidence Contracts
2
+
3
+ Tracker: [pm-py7qv2](../.agents/pm/issues/pm-py7qv2.toon), [pm-33mjrw](../.agents/pm/issues/pm-33mjrw.toon), [pm-q6n8sj](../.agents/pm/issues/pm-q6n8sj.toon), [pm-h97qxd](../.agents/pm/issues/pm-h97qxd.toon), [pm-rncuf7](../.agents/pm/issues/pm-rncuf7.toon), [pm-m0b7h8](../.agents/pm/issues/pm-m0b7h8.toon), [pm-wqhzhg](../.agents/pm/issues/pm-wqhzhg.toon)
4
+
5
+ ## Agent Quick Context
6
+
7
+ Project management is context management. These contracts make absence, identity, composition, and mutation outcomes explicit across CLI, SDK, MCP, packages, and persisted history:
8
+
9
+ - Assurance evaluates authoritative full item records, supports first-class field presence predicates, canonicalizes relationship aliases, fingerprints measurement definitions, and attributes writes through the normal detected-author chain.
10
+ - Graph audit reports both counts and ratios: `edge_share_by_kind`, `semantic_edges`, and `semantic_edge_share` alongside the existing structural profile.
11
+ - Every health check row carries `ok: boolean` beside its compatible `status: ok|warn` value, including brief, summary, skipped, and full projections.
12
+ - Linked-test removal preserves commands containing commas or equals signs, offers a lossless 1-based index selector, reports `removed`, and refuses a zero-match removal.
13
+ - Collection grammar recovery labels positional roles when noun-verb-object input is transposed, then provides the accepted object-first command.
14
+
15
+ Use runtime contracts for the exact active surface:
16
+
17
+ ```bash
18
+ pm contracts --command test --flags-only --json
19
+ pm contracts --action test --schema-only --json
20
+ pm health --summary --json
21
+ pm graph audit --summary --json
22
+ ```
23
+
24
+ ## Assurance Predicates and Verdict Identity
25
+
26
+ An item-field measurement must choose exactly one predicate:
27
+
28
+ ```json
29
+ {
30
+ "id": "missing-tests",
31
+ "source": { "kind": "items", "field": "tests", "state": "missing" }
32
+ }
33
+ ```
34
+
35
+ ```json
36
+ {
37
+ "id": "priority-one",
38
+ "source": { "kind": "items", "field": "priority", "equals": 1 }
39
+ }
40
+ ```
41
+
42
+ `state: missing` covers absent properties, `null`, empty strings, and empty arrays. `state: present` is its complement. Explicit `equals: null` remains an exact-value predicate and is not conflated with missing configuration.
43
+
44
+ Each measurement result carries `definition_fingerprint`; assertion verdicts copy it as `measurement_definition_fingerprint`. A stored verdict can therefore be joined to the exact declaration semantics that produced it. Older verdicts remain readable and are visibly legacy because the fingerprint field is absent.
45
+
46
+ ## Graph Composition
47
+
48
+ `pm graph audit` uses deduplicated directed edges as the denominator:
49
+
50
+ ```json
51
+ {
52
+ "edges": 12,
53
+ "edges_by_kind": { "parent": 4, "related": 6, "verifies": 2 },
54
+ "edge_share_by_kind": {
55
+ "parent": 0.3333333333333333,
56
+ "related": 0.5,
57
+ "verifies": 0.16666666666666666
58
+ },
59
+ "semantic_edges": 2,
60
+ "semantic_edge_share": 0.16666666666666666
61
+ }
62
+ ```
63
+
64
+ The semantic numerator is the sum of `discovered_from`, `incident_from`, `supersedes`, and `verifies`. Audit baselines preserve the new fields, accept older snapshots with explicit zero defaults, and report signed count/share deltas.
65
+
66
+ ## Health Row Predicate
67
+
68
+ Every entry in `health.checks` has this stable shape:
69
+
70
+ ```json
71
+ { "name": "storage", "status": "ok", "ok": true, "details": {} }
72
+ ```
73
+
74
+ `status` remains for compatibility and human rendering. `ok` is the direct machine predicate; it survives brief and summary projections. Assurance health sources accept either `field: status` or `field: ok` and normalize success to `0`, warning to `1`.
75
+
76
+ ## Lossless Linked-Test Removal
77
+
78
+ List first when selecting an index:
79
+
80
+ ```bash
81
+ pm test pm-example --list --json
82
+ pm test pm-example --remove-index 2 --json
83
+ ```
84
+
85
+ `--remove-index` is repeatable and uses the current 1-based list order. Exact identity selectors remain available:
86
+
87
+ ```bash
88
+ pm test pm-example --remove "command=node -e 'console.log(\"left=right,still-command\")'" --json
89
+ pm test pm-example --remove 'path=tests/example.spec.ts' --json
90
+ ```
91
+
92
+ For `command=` and `path=`, everything after the first identity prefix is the value; commas and equals signs are not re-parsed as fields. A successful mutation reports `removed`; a selector matching nothing raises `linked_test_remove_no_match` with unmatched selectors and a list-first recovery instead of returning a false-success no-op.
93
+
94
+ ## Collection Grammar Recovery
95
+
96
+ Collection mutations use object-first grammar:
97
+
98
+ ```bash
99
+ pm notes pm-example --add "context"
100
+ pm comments pm-example --add "reviewed"
101
+ pm files pm-example --add path=src/example.ts
102
+ pm docs pm-example --add path=docs/example.md
103
+ pm test pm-example --add 'command=pnpm test'
104
+ ```
105
+
106
+ Inputs such as `pm notes add pm-example --note context` are refused as a transposed `add` subcommand. Structured recovery reports `transposed_subcommand=add` and `item_id=pm-example`, then supplies `pm notes pm-example --add context`. The visible notes `--note` alias remains accepted for compatibility, but new automation should use canonical `--add`.
@@ -1,13 +1,17 @@
1
1
  # SDK entrypoint import costs
2
2
 
3
- Tracked by [pm-38bskj](../../.agents/pm/tasks/pm-38bskj.toon).
3
+ Tracked by [pm-38bskj](../../.agents/pm/tasks/pm-38bskj.toon) and
4
+ [pm-cg1sjb](../../.agents/pm/issues/pm-cg1sjb.toon).
4
5
 
5
6
  This table measures fresh-process ESM import and module evaluation. The bare
6
7
  Node v26.5.0 process floor on linux/x64
7
8
  was 41 ms p50 (48 ms p95) across
8
9
  5 measured runs after one warm-up. Focused entrypoints are
9
10
  compared with the compatibility aggregate; negative reduction means the focused
10
- entrypoint was slower in this sample.
11
+ entrypoint was slower in this sample. The gate admits the median measured run
12
+ against the unchanged upper-bound budget and 30 ms scheduler margin. A single
13
+ cold or descheduled process therefore cannot fail the gate, while a majority of
14
+ over-budget samples still does; p95 remains visible as diagnostic evidence.
11
15
 
12
16
  | Package export | p50 | p95 | p50 above Node | Reduction vs aggregate |
13
17
  |---|---:|---:|---:|---:|
package/marketplace.json CHANGED
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
9
- "version": "2026.8.11"
9
+ "version": "2026.8.12"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "pm-claude",
14
14
  "source": "./plugins/pm-claude",
15
15
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
16
- "version": "2026.8.11",
16
+ "version": "2026.8.12",
17
17
  "author": {
18
18
  "name": "unbrained",
19
19
  "url": "https://github.com/unbraind/pm-cli"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -120,7 +120,7 @@
120
120
  "lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
121
121
  "lint:duplicates": "jscpd --config .jscpd.json",
122
122
  "lint:codefactor": "pnpm quality:static",
123
- "quality:static": "pnpm build && pnpm exec tsx scripts/release/static-quality-gate.mts --max-eslint-suppressions 114 --max-coverage-ignore-pragmas 477 --min-docstring-coverage 100 --min-exported-docstring-coverage 100 --min-member-docstring-coverage 100 && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/absence-tolerance-gate.mjs && node scripts/release/token-budget-gate.mjs && node scripts/release/context-intent-calibration-gate.mjs && node scripts/release/tracker-measurement-gate.mjs && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check",
123
+ "quality:static": "pnpm build && pnpm exec tsx scripts/release/static-quality-gate.mts --max-eslint-suppressions 114 --max-coverage-ignore-pragmas 477 --min-docstring-coverage 100 --min-exported-docstring-coverage 100 --min-member-docstring-coverage 100 && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/absence-tolerance-gate.mjs && node scripts/release/token-budget-gate.mjs && node scripts/release/context-intent-calibration-gate.mjs && node scripts/release/tracker-measurement-gate.mjs && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check && node dist/cli.js assurance run graph-composition --trigger ci --dry-run --json && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json",
124
124
  "quality:token-budget": "node scripts/release/token-budget-gate.mjs",
125
125
  "quality:token-surface": "node scripts/measure-agent-token-surface.mjs --check",
126
126
  "quality:token-surface:update": "pnpm build && node scripts/measure-agent-token-surface.mjs --update",
@@ -198,7 +198,7 @@
198
198
  "node": ">=22.18.0"
199
199
  },
200
200
  "dependencies": {
201
- "@sentry/node": "10.69.0",
201
+ "@sentry/node": "10.70.0",
202
202
  "@toon-format/toon": "^4.1.1",
203
203
  "@types/node": ">=22",
204
204
  "commander": "^15.0.0",
@@ -214,14 +214,14 @@
214
214
  "@types/node": "^26.2.0",
215
215
  "@types/npm-package-arg": "^6.1.4",
216
216
  "@vitest/coverage-v8": "^4.1.10",
217
- "esbuild": "0.28.1",
217
+ "esbuild": "0.28.2",
218
218
  "eslint": "^10.8.1",
219
219
  "eslint-plugin-sonarjs": "^4.2.0",
220
220
  "eslint-plugin-unicorn": "^73.0.0",
221
221
  "fast-check": "^4.9.0",
222
222
  "greptile": "^3.3.1",
223
223
  "jscpd": "^5.0.14",
224
- "tsx": "^4.23.11",
224
+ "tsx": "^4.23.12",
225
225
  "typescript": "^6.0.3",
226
226
  "typescript-eslint": "^8.66.0",
227
227
  "vitest": "^4.1.10",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for importing Beads JSONL records.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-calendar",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for calendar and agenda views.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-command-kit",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-digital-twin",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-governance-audit",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for governance audit and normalization workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-guide-shell",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for guide and shell completion workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-kanban",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-lifecycle-hooks",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package demonstrating safe lifecycle hook registration.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-linked-test-adapters",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for optional linked-test run management adapters and reporters.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-search-advanced",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for semantic, hybrid, and reindex search workflows.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-templates",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for reusable create templates.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-todos",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "First-party pm package for Todo markdown import and export.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-vcs-sdk-exemplar",
3
- "version": "2026.8.11",
3
+ "version": "2026.8.12",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Beyond-PM exemplar: a VCS-style changeset workflow built entirely on public pm SDK and extension primitives.",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pm-claude",
3
3
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
4
- "version": "2026.8.11",
4
+ "version": "2026.8.12",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"