@unbrained/pm-cli 2026.8.14 → 2026.8.15

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 (145) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +25 -2
  3. package/dist/cli/commander-usage.js +17 -4
  4. package/dist/cli/error-guidance.d.ts +2 -0
  5. package/dist/cli/error-guidance.js +52 -25
  6. package/dist/cli/main.js +3 -2
  7. package/dist/cli/register-mutation.js +4 -2
  8. package/dist/cli/register-operations.js +5 -5
  9. package/dist/cli-bundle/bundle-manifest.json +150 -150
  10. package/dist/cli-bundle/chunks/{chunk-TXMEUUUY.js → chunk-24GAV7XL.js} +2 -2
  11. package/dist/cli-bundle/chunks/{chunk-TMJ7URWS.js → chunk-AIM6VT2N.js} +9 -9
  12. package/dist/cli-bundle/chunks/chunk-DSWDLTDR.js +197 -0
  13. package/dist/cli-bundle/chunks/{chunk-FIW4P64F.js → chunk-J42EGKDK.js} +2 -2
  14. package/dist/cli-bundle/chunks/chunk-KIEGUBYQ.js +2 -0
  15. package/dist/cli-bundle/chunks/{chunk-SBRKH6OR.js → chunk-KLKYLSDX.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-G5JUB66K.js → chunk-LJHOAVGI.js} +59 -59
  17. package/dist/cli-bundle/chunks/{chunk-BFALV3YP.js → chunk-MEM2ZS3O.js} +2 -2
  18. package/dist/cli-bundle/chunks/chunk-QHPCJWEJ.js +35 -0
  19. package/dist/cli-bundle/chunks/{chunk-XAVMOK6B.js → chunk-WLPDLNEZ.js} +2 -2
  20. package/dist/cli-bundle/chunks/{register-list-query-T3EHHNNV.js → register-list-query-CT3LFDDN.js} +2 -2
  21. package/dist/cli-bundle/chunks/{register-mutation-E27WCLSZ.js → register-mutation-NWEVA5YS.js} +3 -3
  22. package/dist/cli-bundle/chunks/register-operations-AHIAG5KM.js +2 -0
  23. package/dist/cli-bundle/chunks/{register-setup-3YXZ444E.js → register-setup-ZJZFVAKE.js} +2 -2
  24. package/dist/cli-bundle/focused-chunks/chunk-4X57RE4U.js +2 -0
  25. package/dist/cli-bundle/focused-chunks/{chunk-XDNAW5OI.js → chunk-6XKF3PGV.js} +2 -2
  26. package/dist/cli-bundle/focused-chunks/chunk-7NJ4QYQ2.js +2 -0
  27. package/dist/cli-bundle/focused-chunks/{chunk-WCVE2NIG.js → chunk-EXZA4257.js} +2 -2
  28. package/dist/cli-bundle/focused-chunks/chunk-ITAUHSO6.js +50 -0
  29. package/dist/cli-bundle/focused-chunks/{chunk-4DQ2YERC.js → chunk-KLVUMNXJ.js} +2 -2
  30. package/dist/cli-bundle/focused-chunks/{chunk-K7RWWOAG.js → chunk-KT5XMYSX.js} +2 -2
  31. package/dist/cli-bundle/focused-chunks/{chunk-PPFGQDSI.js → chunk-KTKH4IMG.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/chunk-M67F5AIN.js +8 -0
  33. package/dist/cli-bundle/focused-chunks/{chunk-KSEDUWVZ.js → chunk-NSPYTG6G.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/chunk-OKA6ELTL.js +2 -0
  35. package/dist/cli-bundle/focused-chunks/chunk-PUISBOPP.js +2 -0
  36. package/dist/cli-bundle/focused-chunks/chunk-QLNMCESQ.js +155 -0
  37. package/dist/cli-bundle/focused-chunks/{chunk-LZ4MV3RH.js → chunk-SLKC6QLJ.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/chunk-U65UC4G3.js +2 -0
  39. package/dist/cli-bundle/focused-chunks/{chunk-KFSZ3BP6.js → chunk-WTSER4WJ.js} +6 -6
  40. package/dist/cli-bundle/focused-chunks/{chunk-YOOI3UZX.js → chunk-ZMFXQ7VF.js} +2 -2
  41. package/dist/cli-bundle/main.js +13 -13
  42. package/dist/cli-bundle/sdk-authoring.js +1 -1
  43. package/dist/cli-bundle/sdk-contracts.js +1 -1
  44. package/dist/cli-bundle/sdk-core.js +32 -35
  45. package/dist/cli-bundle/sdk-governance.js +1 -1
  46. package/dist/cli-bundle/sdk-graph.js +1 -1
  47. package/dist/cli-bundle/sdk-merge.js +32 -31
  48. package/dist/cli-bundle/sdk-query.js +1 -1
  49. package/dist/cli-bundle/sdk-runtime.js +1 -1
  50. package/dist/cli-bundle/sdk-testing.js +1 -1
  51. package/dist/cli-bundle/sdk.js +2 -2
  52. package/dist/core/diagnostics/remediation.js +7 -2
  53. package/dist/core/extensions/reserved-host-flags.js +3 -2
  54. package/dist/core/history/replay.d.ts +14 -1
  55. package/dist/core/history/replay.js +45 -8
  56. package/dist/core/output/output.d.ts +2 -0
  57. package/dist/core/output/output.js +3 -2
  58. package/dist/core/shared/command-types.d.ts +2 -0
  59. package/dist/core/shared/command-types.js +2 -2
  60. package/dist/core/shared/errors.d.ts +12 -0
  61. package/dist/core/shared/errors.js +2 -2
  62. package/dist/mcp/tool-definitions.js +9 -5
  63. package/dist/sdk/agent/refusal-reachability.d.ts +61 -0
  64. package/dist/sdk/agent/refusal-reachability.js +91 -3
  65. package/dist/sdk/cli-bootstrap.d.ts +2 -0
  66. package/dist/sdk/cli-bootstrap.js +7 -2
  67. package/dist/sdk/cli-contracts/completeness.js +3 -2
  68. package/dist/sdk/cli-contracts/flag-contracts.js +3 -2
  69. package/dist/sdk/cli-contracts/registration-helpers.js +3 -2
  70. package/dist/sdk/cli-contracts/runtime-contracts.d.ts +5 -0
  71. package/dist/sdk/cli-contracts/runtime-contracts.js +23 -7
  72. package/dist/sdk/cli-contracts/tool-parameter-tables.js +15 -5
  73. package/dist/sdk/cli-contracts/tool-schema.js +10 -3
  74. package/dist/sdk/cli-program.js +3 -2
  75. package/dist/sdk/core.d.ts +2 -2
  76. package/dist/sdk/core.js +3 -3
  77. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +26 -2
  78. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +50 -26
  79. package/dist/sdk/governance/assurance-action.d.ts +7 -1
  80. package/dist/sdk/governance/assurance-action.js +7 -6
  81. package/dist/sdk/governance/assurance-mutation-error.d.ts +42 -1
  82. package/dist/sdk/governance/assurance-mutation-error.js +27 -3
  83. package/dist/sdk/governance/assurance-runtime.js +12 -11
  84. package/dist/sdk/governance/assurance.d.ts +9 -0
  85. package/dist/sdk/governance/assurance.js +80 -14
  86. package/dist/sdk/governance/extension-host-version.d.ts +25 -0
  87. package/dist/sdk/governance/extension-host-version.js +105 -0
  88. package/dist/sdk/governance/health.d.ts +32 -1
  89. package/dist/sdk/governance/health.js +119 -27
  90. package/dist/sdk/governance/provenance-health.d.ts +27 -0
  91. package/dist/sdk/governance/provenance-health.js +95 -3
  92. package/dist/sdk/governance/validate.js +7 -8
  93. package/dist/sdk/governance.d.ts +6 -0
  94. package/dist/sdk/governance.js +8 -2
  95. package/dist/sdk/history-repair.d.ts +13 -1
  96. package/dist/sdk/history-repair.js +62 -18
  97. package/dist/sdk/linked-artifacts.js +16 -5
  98. package/dist/sdk/pagination.d.ts +15 -0
  99. package/dist/sdk/pagination.js +9 -5
  100. package/dist/sdk/query/context.d.ts +5 -1
  101. package/dist/sdk/query/context.js +14 -5
  102. package/dist/sdk/read-output/continuation.d.ts +11 -0
  103. package/dist/sdk/read-output/continuation.js +132 -0
  104. package/dist/sdk/read-output-budget.d.ts +1 -1
  105. package/dist/sdk/read-output-budget.js +14 -10
  106. package/dist/sdk/read-output-contracts.d.ts +66 -2
  107. package/dist/sdk/read-output-contracts.js +183 -19
  108. package/dist/sdk/read-output-rows.d.ts +2 -0
  109. package/dist/sdk/read-output-rows.js +15 -2
  110. package/dist/sdk/runtime-input.js +4 -2
  111. package/docs/ASSURANCE.md +59 -2
  112. package/docs/COMMANDS.md +8 -2
  113. package/docs/READ_OUTPUT_CONTRACTS.md +49 -8
  114. package/docs/RELEASING.md +42 -5
  115. package/docs/SDK_CONTEXT_INTEGRITY.md +64 -2
  116. package/marketplace.json +2 -2
  117. package/package.json +3 -3
  118. package/packages/pm-beads/package.json +1 -1
  119. package/packages/pm-calendar/package.json +1 -1
  120. package/packages/pm-command-kit/package.json +1 -1
  121. package/packages/pm-digital-twin/package.json +1 -1
  122. package/packages/pm-governance-audit/package.json +1 -1
  123. package/packages/pm-guide-shell/package.json +1 -1
  124. package/packages/pm-kanban/package.json +1 -1
  125. package/packages/pm-lifecycle-hooks/package.json +1 -1
  126. package/packages/pm-linked-test-adapters/package.json +1 -1
  127. package/packages/pm-search-advanced/package.json +1 -1
  128. package/packages/pm-templates/package.json +1 -1
  129. package/packages/pm-todos/package.json +1 -1
  130. package/packages/pm-vcs/package.json +1 -1
  131. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  132. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  133. package/sdk/public-surface.json +1133 -187
  134. package/dist/cli-bundle/chunks/chunk-BBOFSVAK.js +0 -197
  135. package/dist/cli-bundle/chunks/chunk-YAMTJL6Y.js +0 -34
  136. package/dist/cli-bundle/chunks/chunk-YSVSMJ2B.js +0 -2
  137. package/dist/cli-bundle/chunks/register-operations-4R6I7CPY.js +0 -2
  138. package/dist/cli-bundle/focused-chunks/chunk-F43TT2QQ.js +0 -8
  139. package/dist/cli-bundle/focused-chunks/chunk-KYUQGTSB.js +0 -2
  140. package/dist/cli-bundle/focused-chunks/chunk-PGXJQLCT.js +0 -155
  141. package/dist/cli-bundle/focused-chunks/chunk-Q4YY3XNF.js +0 -2
  142. package/dist/cli-bundle/focused-chunks/chunk-QK753U3U.js +0 -46
  143. package/dist/cli-bundle/focused-chunks/chunk-QUMB2J27.js +0 -2
  144. package/dist/cli-bundle/focused-chunks/chunk-SM7MTG27.js +0 -2
  145. package/dist/cli-bundle/focused-chunks/chunk-ZM6TZVHC.js +0 -2
package/docs/RELEASING.md CHANGED
@@ -24,7 +24,8 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon),
24
24
  [pm-lwnifd](../.agents/pm/issues/pm-lwnifd.toon), and SDK-bound reliability
25
25
  classification [pm-dqtzva](../.agents/pm/issues/pm-dqtzva.toon).
26
26
  The local/hosted gate selection contract is tracked by
27
- [pm-ei6x66](../.agents/pm/tasks/pm-ei6x66.toon).
27
+ [pm-ei6x66](../.agents/pm/tasks/pm-ei6x66.toon). Release-candidate analyzer
28
+ provenance is tracked by [pm-u1baah](../.agents/pm/issues/pm-u1baah.toon).
28
29
 
29
30
  ## Version Policy
30
31
 
@@ -80,6 +81,9 @@ Policy:
80
81
  creating an ordinal replacement; an already-successful run is recorded as
81
82
  recovered without republishing
82
83
  - release preparation must pass all quality and compatibility gates before commit+tag push
84
+ - before dependency installation or build, auto-release verifies that the
85
+ candidate has exact-commit analyzer results or an immutable tree-identical
86
+ reviewed PR head with successful DeepScan and CodeFactor results
83
87
  - `CHANGELOG.md` is generated by the latest npm `pm-changelog` package (`pm install npm:pm-changelog --project`, then `pm changelog generate --mode replace --all-release-tags`) from closed tracker items across git release tag windows and checked in CI; do not edit it by hand
84
88
  - protected-branch pushes require `RELEASE_PAT`; Auto Release fails fast before the expensive release gates when `push=true`, `dry_run=false`, and that secret is not configured
85
89
  - release reliability gating requires `SENTRY_PERSONAL_ADMIN_TOKEN` for issue-threshold checks; Auto Release fails before creating the version commit/tag when the token is missing and `push=true`, while sourcemap upload remains optional through `SENTRY_AUTH_TOKEN`
@@ -196,8 +200,9 @@ The build writes `dist/cli-bundle/bundle-manifest.json` atomically with SHA-256
196
200
 
197
201
  4. Run the same release pipeline locally.
198
202
 
199
- Push the final implementation commit first, wait for DeepScan and CodeFactor to
200
- finish on that reviewed SHA, then run the canonical registry-owned preflight:
203
+ Push the final implementation commit through a reviewed pull request first,
204
+ wait for DeepScan and CodeFactor to finish on that reviewed SHA, then run the
205
+ canonical registry-owned preflight:
201
206
 
202
207
  ```bash
203
208
  pnpm verify:preflight
@@ -207,7 +212,8 @@ The registry supplies the ordered executable plan, command arguments,
207
212
  environment, capture policy, and explicit skip policy. Its receipt distinguishes
208
213
  passed checks from declared skips. The same registry maps named PR, nightly,
209
214
  and release workflow gates; hosted-only entries must explain why no faithful
210
- local equivalent exists.
215
+ local equivalent exists. Analyzer provenance is the first executable step, so
216
+ an unreleasable candidate fails before build, coverage, or package work.
211
217
 
212
218
  The preflight includes the mandatory local hosted-analysis proof:
213
219
 
@@ -218,13 +224,44 @@ pnpm quality:hosted-analysis
218
224
  The gate accepts only DeepScan's explicit zero-new-issue status and
219
225
  CodeFactor's explicit no-issues result. Both contexts are required by `main`
220
226
  branch protection, and the release pipeline reruns the same immutable-tree
221
- proof. It reads the release commit first. When GitHub does not copy app results
227
+ proof. The gate reads branch protection through REST first; if that transport
228
+ is unavailable or its core API quota is exhausted, it queries the equivalent
229
+ GraphQL rules across every cursor-paginated page and still requires one exact
230
+ `main` rule with strict updates plus both analyzer contexts. Malformed,
231
+ truncated, missing, or ambiguous admin policy data fails closed. GitHub Actions'
232
+ ephemeral token cannot request the repository `Administration: read` permission
233
+ required by both of those policy surfaces. When both admin transports reject
234
+ that token, the gate uses the contents-readable `GET /branches/main` summary
235
+ and requires that the exact candidate is the current protected branch head,
236
+ protection is enabled and enforced, and CodeFactor plus DeepScan are effective
237
+ required contexts. That summary intentionally cannot attest the admin-only
238
+ strict-update setting: its receipt reports `strict: null`,
239
+ `strict_verified: false`, and `verification_scope: effective_required_checks`
240
+ instead of inventing a positive result. Exact or immutable identical-tree
241
+ analyzer provenance remains mandatory and is emitted beside the policy receipt,
242
+ so the restricted-token recovery cannot admit an unanalyzed or different-tree
243
+ candidate. A maintainer token with administration-read access still verifies
244
+ and reports `strict: true` through REST or paginated GraphQL. It reads the
245
+ release commit first. When GitHub does not copy app results
222
246
  onto a merge commit, the gate may reuse a reviewed merge-parent or squash-PR
223
247
  head only when its immutable Git tree SHA exactly matches the release commit.
224
248
  Squash provenance additionally requires one unambiguous GitHub association to a
225
249
  closed PR merged into `main` with the release commit as its merge commit.
226
250
  Missing, ambiguous, or different-tree provenance fails closed.
227
251
 
252
+ The supported default-branch arrival path is a reviewed pull request. A direct
253
+ push to `main` is releasable only if both analyzers attached successful evidence
254
+ to that exact commit; when they did not, the gate explicitly refuses the
255
+ candidate instead of letting the next scheduled release discover the missing
256
+ precondition after expensive work. CI runs `Release analyzer readiness (main)`
257
+ on every product-relevant push to `main`, providing continuous visibility
258
+ between release attempts. If GitHub's commit-association endpoint has not yet
259
+ published a new merge, the gate reads the pull-request number from GitHub's
260
+ standard merge message and accepts it only after the immutable PR resource
261
+ confirms that exact merge SHA, `main` base, and reviewed head. Remediate a
262
+ refused direct-main candidate by landing the next tree-changing fix through a
263
+ reviewed PR; never copy, synthesize, or bypass analyzer evidence.
264
+
228
265
  ```bash
229
266
  # Read-only parity check
230
267
  pnpm release:pipeline:dry-run
@@ -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), [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon), [pm-5y05kq](../.agents/pm/issues/pm-5y05kq.toon), [pm-gjjurs](../.agents/pm/issues/pm-gjjurs.toon), [pm-h97qxd](../.agents/pm/issues/pm-h97qxd.toon), [pm-h06944](../.agents/pm/issues/pm-h06944.toon), and [pm-5t33or](../.agents/pm/features/pm-5t33or.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), [pm-h97qxd](../.agents/pm/issues/pm-h97qxd.toon), [pm-h06944](../.agents/pm/issues/pm-h06944.toon), [pm-5t33or](../.agents/pm/features/pm-5t33or.toon), [pm-in23qu](../.agents/pm/issues/pm-in23qu.toon), [pm-h8tpeh](../.agents/pm/features/pm-h8tpeh.toon), [pm-okgxwa](../.agents/pm/issues/pm-okgxwa.toon), [pm-22rzjp](../.agents/pm/issues/pm-22rzjp.toon), [pm-76fkpp](../.agents/pm/issues/pm-76fkpp.toon), [pm-igdvfq](../.agents/pm/issues/pm-igdvfq.toon), [pm-643e0k](../.agents/pm/issues/pm-643e0k.toon), and [pm-larv4r](../.agents/pm/issues/pm-larv4r.toon).
4
4
 
5
5
  ## Agent Quick Context
6
6
 
@@ -54,7 +54,43 @@ rows. This lets governance envelopes reduce diagnostic findings before
54
54
  omitting the whole verdict without redefining a nested tag or remediation list
55
55
  as a pagination row. Receipts name every `compacted_row_paths` entry; a complete
56
56
  omission also records the useful result's pre-omission estimate, while the
57
- universal recovery remains `--output-budget unbounded`.
57
+ recovery names a bounded budget increase when no declared row path can resume.
58
+
59
+ Budget-compacted declared rows instead publish a bounded `outputCursor`
60
+ continuation on every transport. The cursor resumes the first withheld row and
61
+ rejects a command, path, row-total, or stable-identity mismatch. This gives SDK
62
+ and package loops a recursive self-improvement primitive: consume a bounded
63
+ page, update context, and continue without abandoning the ceiling.
64
+
65
+ `context --explain-ranking` projects explanations to the focus rows actually
66
+ served. `candidate_count` records the scorer population and `omitted_count`
67
+ records explanations intentionally withheld, while each returned row retains
68
+ its rank, baseline rank, score, and per-signal contributions. Explanation cost
69
+ therefore scales with the answer rather than with the active workspace.
70
+
71
+ Unknown-option recovery is likewise derived from the declared flag lexicon.
72
+ The structured `option_scope` is `declared_on_path`, `declared_elsewhere`, or
73
+ `declared_nowhere`; accepting command paths are included only for the second
74
+ case, while the third names the nearest current-path spellings and explicitly
75
+ terminates the otherwise-unbounded command search.
76
+
77
+ ## Executable recovery-reference coverage
78
+
79
+ Structured refusal guidance is a forward-reference contract, not decorative
80
+ text. `verifyPmRecoveryReferences` accepts obligations derived from real error
81
+ envelopes and observations produced by executing a retry, resolving a declared
82
+ command path, or linking prose to an already executed recovery. Its report
83
+ includes the total obligation set, pass fraction, sorted findings, and stable
84
+ coverage buckets for `suggested_retry`, `candidate_command`, `example`, and
85
+ `next_step`, including zero-population buckets.
86
+
87
+ The repository integration corpus drives real CLI refusals, executes the
88
+ emitted retry in a temporary tracker, compares candidate commands with the
89
+ unbounded runtime contract enumeration, and binds examples and next steps to
90
+ those proofs. A seeded unreachable observation must lower the pass fraction
91
+ and produce `unreachable_reference`. The same corpus is a provider-backed
92
+ blocking assertion in `repository-context-quality`, so a well-formed but broken
93
+ recovery promise cannot pass CI merely because its text or target flag exists.
58
94
 
59
95
  ## Row discovery and exact output receipts
60
96
 
@@ -134,6 +170,26 @@ never succeeded. The same bounded pass classifies bare boolean and single-digit
134
170
  values across every recorded provenance dimension, publishes only aggregate
135
171
  harness/dimension/kind counts, and never echoes the historical value.
136
172
 
173
+ `historyRepair` and `historyRepairAll` retain the detected history hash epoch
174
+ instead of unconditionally upgrading it. `normalizeProvenance: true` adds a
175
+ privacy-safe repair mode that removes invalid bounded observations and records
176
+ only aggregate counts/classes in the synthetic audit event. The bulk form
177
+ selects both drifted streams and streams requiring provenance normalization.
178
+
179
+ Health results are self-indexing: every retained warning has a `findings` row
180
+ with its owning check, stable code, severity, and either executable remediation
181
+ or an explicit safe refusal. `failed_because` contains the exact warning tokens
182
+ that decide `ok: false` and survives brief/summary projection. Extension health
183
+ adds a host-version census by resolving the pm-cli package visible from each
184
+ loaded extension; npm/pnpm duplicate-version skew is gate-failing while matching
185
+ workspace-linked and deduplicated copies remain green.
186
+
187
+ Linked file/doc add parsing uses one SDK allowlist. Whitespace-free filesystem
188
+ paths and scheme-prefixed URLs remain positional even when a path or query
189
+ contains `=`. Leading assignment syntax, including malformed URL-plus-note
190
+ input, must use the declared `path`, `scope`, and `note` keys or fail before
191
+ mutation.
192
+
137
193
  ## Replication and refusal gate
138
194
 
139
195
  `scripts/release/surface-replication-sets.json` declares replicated SDK, CLI, MCP, documentation, and test members. `pnpm quality:surface-replication` activates sets from the Git changeset, verifies every member invariant, and reports:
@@ -145,6 +201,12 @@ harness/dimension/kind counts, and never echoes the historical value.
145
201
  - an AST-derived denominator of identical named rule bodies, declared coverage,
146
202
  and a non-decreasing detected-cluster floor.
147
203
 
204
+ Trigger entries may constrain a shared file with `changed_lines_contain_any`.
205
+ The set then activates only when an added or removed diff line carries one of
206
+ those contract markers. Missing diff evidence fails closed and activates the
207
+ set, while an unrelated hunk in the same shared table does not force artificial
208
+ edits across every replicated member.
209
+
148
210
  Query waivers directly with:
149
211
 
150
212
  ```bash
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.14"
9
+ "version": "2026.8.15"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "pm-claude",
14
14
  "source": "./plugins/pm-claude",
15
15
  "description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
16
- "version": "2026.8.14",
16
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.10.0",
@@ -120,11 +120,11 @@
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 113 --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 dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && 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 --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded",
123
+ "quality:static": "pnpm build && node scripts/release/repository-assurance.mjs repository-static-quality --trigger ci --json && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node dist/cli.js assurance run tracker-context-quality --trigger ci --dry-run --json --output-budget unbounded && 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 --output-budget unbounded && node dist/cli.js assurance run record-integrity --trigger ci --dry-run --json --output-budget unbounded",
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",
127
- "quality:context-eval": "pnpm build && node scripts/release/context-eval-gate.mjs && node scripts/release/retrieval-eval-gate.mjs --negative-control && node scripts/release/retrieval-eval-gate.mjs && node scripts/release/agent-task-token-gate.mjs --negative-control && node scripts/release/agent-task-token-gate.mjs && pnpm quality:token-surface",
127
+ "quality:context-eval": "pnpm build && node scripts/release/repository-assurance.mjs repository-context-quality --trigger ci --json && pnpm quality:token-surface",
128
128
  "quality:agent-task-token": "pnpm build && node scripts/release/agent-task-token-gate.mjs",
129
129
  "quality:agent-task-token:update": "pnpm build && node scripts/release/agent-task-token-gate.mjs --update",
130
130
  "quality:retrieval-eval": "pnpm build && node scripts/release/retrieval-eval-gate.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-beads",
3
- "version": "2026.8.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
3
+ "version": "2026.8.15",
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.14",
4
+ "version": "2026.8.15",
5
5
  "author": {
6
6
  "name": "unbrained",
7
7
  "url": "https://github.com/unbraind/pm-cli"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-codex",
3
- "version": "2026.8.14",
3
+ "version": "2026.8.15",
4
4
  "description": "Native Codex integration for pm-cli with bundled MCP tools, skills, commands, and agent workflows.",
5
5
  "author": {
6
6
  "name": "unbrained",