@unbrained/pm-cli 2026.10.25 → 2026.10.27

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 (211) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +44 -1
  3. package/dist/cli/error-guidance.d.ts +5 -0
  4. package/dist/cli/error-guidance.js +2 -2
  5. package/dist/cli/register-list-query.js +5 -5
  6. package/dist/cli/register-mutation.js +2 -2
  7. package/dist/cli-bundle/bundle-manifest.json +1 -1
  8. package/dist/cli-bundle/chunks/{chunk-O3ZTGRIH.js → chunk-25MTQAHX.js} +2 -2
  9. package/dist/cli-bundle/chunks/{chunk-YCCGZHOR.js → chunk-2XUDAQK5.js} +2 -2
  10. package/dist/cli-bundle/chunks/{chunk-VAEB6IUQ.js → chunk-32QK43XG.js} +2 -2
  11. package/dist/cli-bundle/chunks/{chunk-RD6UW3MW.js → chunk-34OQP43K.js} +3 -3
  12. package/dist/cli-bundle/chunks/{chunk-TLMXSYJA.js → chunk-57YPOOED.js} +2 -2
  13. package/dist/cli-bundle/chunks/chunk-5PTMQBKJ.js +30 -0
  14. package/dist/cli-bundle/chunks/{chunk-FNZT4BTE.js → chunk-EKV5GP6P.js} +86 -86
  15. package/dist/cli-bundle/chunks/{chunk-LNKPH2DD.js → chunk-ER7RLJW5.js} +2 -2
  16. package/dist/cli-bundle/chunks/chunk-F26MRQZY.js +6 -0
  17. package/dist/cli-bundle/chunks/chunk-H434DKYU.js +2 -0
  18. package/dist/cli-bundle/chunks/{chunk-MVJGGCGQ.js → chunk-HIX2OMEZ.js} +2 -2
  19. package/dist/cli-bundle/chunks/{chunk-4GD6QOP6.js → chunk-NNIYQHYT.js} +3 -3
  20. package/dist/cli-bundle/chunks/chunk-O3LPT34G.js +20 -0
  21. package/dist/cli-bundle/chunks/{chunk-3CYXE6BV.js → chunk-ONC4BBQP.js} +2 -2
  22. package/dist/cli-bundle/chunks/{chunk-UI3FD3DW.js → chunk-OQOEBWHU.js} +2 -2
  23. package/dist/cli-bundle/chunks/chunk-Q55KZDNF.js +2 -0
  24. package/dist/cli-bundle/chunks/chunk-QQYLNHZK.js +128 -0
  25. package/dist/cli-bundle/chunks/chunk-SPPHDVZE.js +2 -0
  26. package/dist/cli-bundle/chunks/chunk-UHKN6TJM.js +114 -0
  27. package/dist/cli-bundle/chunks/{chunk-7T3H24HN.js → chunk-X5TMR7KC.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-EYCVAAIP.js → chunk-XERBUA6A.js} +2 -2
  29. package/dist/cli-bundle/chunks/indexed-receipt-blobs-63WYG2PY.js +4 -0
  30. package/dist/cli-bundle/chunks/{mutation-admission-747C6IUR.js → mutation-admission-L3A6FSZ7.js} +2 -2
  31. package/dist/cli-bundle/chunks/{register-list-query-COST6KRV.js → register-list-query-YSQ7UTFI.js} +9 -9
  32. package/dist/cli-bundle/chunks/register-mutation-6HRXYASW.js +20 -0
  33. package/dist/cli-bundle/chunks/{register-operations-S4LKLUBJ.js → register-operations-4O3YOYXF.js} +2 -2
  34. package/dist/cli-bundle/chunks/{register-setup-3ITZXPOL.js → register-setup-3WAXNDMY.js} +2 -2
  35. package/dist/cli-bundle/chunks/{settlement-hook-5IVCF6ZY.js → settlement-hook-CRW6PVQK.js} +2 -2
  36. package/dist/cli-bundle/chunks/{stage-3UUIYROS.js → stage-I46WD4EN.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/{chunk-U6HXIF6G.js → chunk-4TXZBGOR.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/{chunk-22727JYL.js → chunk-B266DDBJ.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/{chunk-Y4JHHY24.js → chunk-BH7RE2ZY.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-ZYCOMRFT.js → chunk-E5C24MCV.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/chunk-EGN2HFRU.js +2 -0
  42. package/dist/cli-bundle/focused-chunks/chunk-HWD63G54.js +2 -0
  43. package/dist/cli-bundle/focused-chunks/chunk-J67PFM3O.js +91 -0
  44. package/dist/cli-bundle/focused-chunks/{chunk-46KDJH3K.js → chunk-KTXU5WU6.js} +2 -2
  45. package/dist/cli-bundle/focused-chunks/chunk-MVY6JDIH.js +12 -0
  46. package/dist/cli-bundle/focused-chunks/{chunk-NC5HUGHU.js → chunk-NLZUI234.js} +4 -4
  47. package/dist/cli-bundle/focused-chunks/{chunk-B5JOVH5F.js → chunk-R2MTHS2H.js} +2 -2
  48. package/dist/cli-bundle/focused-chunks/chunk-SM2KGD4J.js +79 -0
  49. package/dist/cli-bundle/focused-chunks/{chunk-HMYDUEQK.js → chunk-SYL73MEI.js} +3 -3
  50. package/dist/cli-bundle/focused-chunks/{chunk-77NU7NPN.js → chunk-TAFMNTA5.js} +2 -2
  51. package/dist/cli-bundle/focused-chunks/{chunk-74KC7FUQ.js → chunk-TGUOEOKP.js} +2 -2
  52. package/dist/cli-bundle/focused-chunks/chunk-U4UBQBS7.js +2 -0
  53. package/dist/cli-bundle/focused-chunks/{chunk-URWYYJ7K.js → chunk-WDKZB3V6.js} +2 -2
  54. package/dist/cli-bundle/focused-chunks/chunk-XK3XMZM4.js +2 -0
  55. package/dist/cli-bundle/focused-chunks/{chunk-3M5FZCMC.js → chunk-Y57A4ZDI.js} +55 -55
  56. package/dist/cli-bundle/focused-chunks/chunk-YC6NCPLK.js +22 -0
  57. package/dist/cli-bundle/focused-chunks/{chunk-7DEZT4JN.js → chunk-YQKLKRMW.js} +2 -2
  58. package/dist/cli-bundle/focused-chunks/{chunk-3FM75SBJ.js → chunk-YW5GHQN2.js} +2 -2
  59. package/dist/cli-bundle/focused-chunks/chunk-ZA6AEYIM.js +2 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-ZH7GTEWL.js +3 -0
  61. package/dist/cli-bundle/focused-chunks/indexed-receipt-blobs-GAFC52LQ.js +4 -0
  62. package/dist/cli-bundle/focused-chunks/{mutation-admission-BQBQXILV.js → mutation-admission-ENBFMV2X.js} +2 -2
  63. package/dist/cli-bundle/focused-chunks/{settlement-hook-XVS6P2XI.js → settlement-hook-PUYJJDFL.js} +2 -2
  64. package/dist/cli-bundle/focused-chunks/{stage-VSIL4MTZ.js → stage-MAWZTM2H.js} +2 -2
  65. package/dist/cli-bundle/main.js +4 -4
  66. package/dist/cli-bundle/sdk-authoring.js +1 -1
  67. package/dist/cli-bundle/sdk-contracts.js +2 -2
  68. package/dist/cli-bundle/sdk-core.js +33 -33
  69. package/dist/cli-bundle/sdk-governance.js +1 -1
  70. package/dist/cli-bundle/sdk-graph.js +1 -1
  71. package/dist/cli-bundle/sdk-merge.js +57 -57
  72. package/dist/cli-bundle/sdk-query.js +1 -1
  73. package/dist/cli-bundle/sdk-runtime.js +1 -1
  74. package/dist/cli-bundle/sdk-testing.js +1 -1
  75. package/dist/cli-bundle/sdk.js +9 -9
  76. package/dist/core/extensions/extension-types.d.ts +3 -0
  77. package/dist/core/extensions/extension-types.js +1 -1
  78. package/dist/core/history/event-index.d.ts +6 -0
  79. package/dist/core/history/event-index.js +7 -6
  80. package/dist/core/history/read.d.ts +3 -1
  81. package/dist/core/history/read.js +1 -1
  82. package/dist/core/output/mutation-projection.js +1 -1
  83. package/dist/core/policy/workflow-policy-store.js +1 -1
  84. package/dist/core/shared/errors.d.ts +9 -0
  85. package/dist/core/shared/errors.js +1 -1
  86. package/dist/core/shared/secret-rules.d.ts +17 -0
  87. package/dist/core/shared/secret-rules.js +2 -1
  88. package/dist/core/store/item-mutation-precondition.d.ts +8 -0
  89. package/dist/core/store/item-mutation-precondition.js +1 -1
  90. package/dist/core/store/item-store.js +1 -1
  91. package/dist/mcp/tool-definitions.js +1 -1
  92. package/dist/sdk/cli-contracts/commander-mutation-options.js +1 -1
  93. package/dist/sdk/cli-contracts/completeness.js +1 -1
  94. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  95. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  96. package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
  97. package/dist/sdk/cli-contracts/registration-helpers.d.ts +1 -1
  98. package/dist/sdk/cli-contracts/registration-helpers.js +1 -1
  99. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +4 -0
  100. package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -1
  101. package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
  102. package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
  103. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  104. package/dist/sdk/context-signal-store.js +2 -2
  105. package/dist/sdk/core.d.ts +1 -1
  106. package/dist/sdk/core.js +1 -1
  107. package/dist/sdk/extension-command-context.js +2 -2
  108. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  109. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  110. package/dist/sdk/index.d.ts +2 -1
  111. package/dist/sdk/index.js +1 -1
  112. package/dist/sdk/item-transaction.js +1 -1
  113. package/dist/sdk/lifecycle/close-many.d.ts +3 -0
  114. package/dist/sdk/lifecycle/close-many.js +1 -1
  115. package/dist/sdk/lifecycle/close.d.ts +3 -1
  116. package/dist/sdk/lifecycle/close.js +1 -1
  117. package/dist/sdk/lifecycle/create.d.ts +2 -0
  118. package/dist/sdk/lifecycle/create.js +1 -1
  119. package/dist/sdk/lifecycle/plan.d.ts +2 -0
  120. package/dist/sdk/lifecycle/plan.js +1 -1
  121. package/dist/sdk/lifecycle/restore.js +1 -1
  122. package/dist/sdk/lifecycle-policy.d.ts +11 -0
  123. package/dist/sdk/lifecycle-policy.js +1 -1
  124. package/dist/sdk/merge/indexed-receipt-blobs.d.ts +3 -1
  125. package/dist/sdk/merge/indexed-receipt-blobs.js +2 -2
  126. package/dist/sdk/merge/receipt-file-boundary.d.ts +2 -0
  127. package/dist/sdk/merge/receipt-file-boundary.js +1 -1
  128. package/dist/sdk/merge/receipts.js +2 -2
  129. package/dist/sdk/mutation-events.d.ts +6 -0
  130. package/dist/sdk/mutation-events.js +1 -1
  131. package/dist/sdk/mutation-guard.d.ts +6 -1
  132. package/dist/sdk/mutation-guard.js +1 -1
  133. package/dist/sdk/output/fit-envelope.d.ts +98 -0
  134. package/dist/sdk/output/fit-envelope.js +2 -0
  135. package/dist/sdk/public-surface.json +1 -1
  136. package/dist/sdk/query.d.ts +1 -0
  137. package/dist/sdk/query.js +1 -1
  138. package/dist/sdk/read-output-session.d.ts +1 -1
  139. package/dist/sdk/read-output-session.js +1 -1
  140. package/dist/sdk/runtime-extended-actions.js +1 -1
  141. package/dist/sdk/runtime-input.js +1 -1
  142. package/dist/sdk/runtime-primitives.d.ts +1 -1
  143. package/dist/sdk/runtime-primitives.js +1 -1
  144. package/dist/sdk/runtime.d.ts +2 -2
  145. package/dist/sdk/runtime.js +1 -1
  146. package/dist/sdk/scheduling-shortcuts.d.ts +2 -0
  147. package/dist/sdk/scheduling-shortcuts.js +1 -1
  148. package/dist/sdk/test/execution.js +2 -2
  149. package/dist/sdk/test/receipt-index-snapshot.d.ts +2 -0
  150. package/dist/sdk/test/receipt-index-snapshot.js +2 -0
  151. package/dist/sdk/test/workspace-snapshot.d.ts +1 -1
  152. package/dist/sdk/test/workspace-snapshot.js +1 -1
  153. package/dist/sdk/workspace-transaction.d.ts +3 -1
  154. package/dist/sdk/workspace-transaction.js +2 -2
  155. package/docs/COMMANDS.md +2 -1
  156. package/docs/MUTATION_INTEGRITY.md +33 -0
  157. package/docs/PERFORMANCE.md +21 -6
  158. package/docs/QUALITY_EVIDENCE.md +9 -0
  159. package/docs/READ_OUTPUT_CONTRACTS.md +55 -1
  160. package/docs/RELEASING.md +11 -0
  161. package/docs/SDK.md +88 -6
  162. package/docs/SDK_CONTEXT_COORDINATION.md +35 -4
  163. package/docs/TESTING.md +14 -1
  164. package/docs/WORKFLOW_POLICIES.md +14 -1
  165. package/docs/agent-task-token-baseline.json +1 -1
  166. package/docs/agent-task-transcripts.json +1 -1
  167. package/docs/generated/FLAG_LEXICON_BUDGETS.md +4 -4
  168. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +5 -3
  169. package/marketplace.json +1 -1
  170. package/package.json +1 -1
  171. package/packages/pm-beads/package.json +1 -1
  172. package/packages/pm-calendar/extensions/calendar/shortcuts.ts +2 -2
  173. package/packages/pm-calendar/package.json +1 -1
  174. package/packages/pm-command-kit/package.json +1 -1
  175. package/packages/pm-digital-twin/package.json +1 -1
  176. package/packages/pm-governance-audit/package.json +1 -1
  177. package/packages/pm-guide-shell/package.json +1 -1
  178. package/packages/pm-kanban/package.json +1 -1
  179. package/packages/pm-lifecycle-hooks/package.json +1 -1
  180. package/packages/pm-linked-test-adapters/package.json +1 -1
  181. package/packages/pm-search-advanced/package.json +1 -1
  182. package/packages/pm-templates/package.json +1 -1
  183. package/packages/pm-todos/package.json +1 -1
  184. package/packages/pm-vcs/package.json +1 -1
  185. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  186. package/plugins/pm-claude/package.json +1 -1
  187. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  188. package/plugins/pm-codex/package.json +1 -1
  189. package/plugins/pm-codex/plugin.json +1 -1
  190. package/runtime-dependencies.json +1 -1
  191. package/dist/cli-bundle/chunks/chunk-444VPGQT.js +0 -20
  192. package/dist/cli-bundle/chunks/chunk-5ZPT67NJ.js +0 -127
  193. package/dist/cli-bundle/chunks/chunk-7C3GCLOO.js +0 -30
  194. package/dist/cli-bundle/chunks/chunk-HMJSFWHK.js +0 -2
  195. package/dist/cli-bundle/chunks/chunk-RLXK2S7P.js +0 -2
  196. package/dist/cli-bundle/chunks/chunk-RQKDANP7.js +0 -113
  197. package/dist/cli-bundle/chunks/chunk-RUKSEZE7.js +0 -2
  198. package/dist/cli-bundle/chunks/chunk-XYLBOXSH.js +0 -6
  199. package/dist/cli-bundle/chunks/indexed-receipt-blobs-47I6KKDO.js +0 -4
  200. package/dist/cli-bundle/chunks/register-mutation-JZVVJUHY.js +0 -20
  201. package/dist/cli-bundle/focused-chunks/chunk-5LBZR6YW.js +0 -2
  202. package/dist/cli-bundle/focused-chunks/chunk-IVLIUPVV.js +0 -12
  203. package/dist/cli-bundle/focused-chunks/chunk-KIIGME23.js +0 -2
  204. package/dist/cli-bundle/focused-chunks/chunk-LWJ2X75I.js +0 -78
  205. package/dist/cli-bundle/focused-chunks/chunk-MT5TYMEU.js +0 -3
  206. package/dist/cli-bundle/focused-chunks/chunk-NI5SG2M2.js +0 -2
  207. package/dist/cli-bundle/focused-chunks/chunk-QH5KMIYZ.js +0 -91
  208. package/dist/cli-bundle/focused-chunks/chunk-VVRXF4JO.js +0 -2
  209. package/dist/cli-bundle/focused-chunks/chunk-W7MCCFYV.js +0 -2
  210. package/dist/cli-bundle/focused-chunks/chunk-WMPDY5ZU.js +0 -21
  211. package/dist/cli-bundle/focused-chunks/indexed-receipt-blobs-YCLN2ZZG.js +0 -4
@@ -54,6 +54,15 @@ their real emitted-byte counts may differ. Output growth still fails the
54
54
  unchanged ceilings; normalization does not waive accounting, payload parity,
55
55
  required-field or executable-recovery checks.
56
56
 
57
+ The completion-provenance delivery
58
+ ([pm-gh1579](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1579.toon),
59
+ a repository-only tracker record excluded from npm) makes the existing close and
60
+ partial-bulk transcripts consume completion timestamp, source and correction
61
+ guidance. Their reviewed ceilings increase by 76 and 80 estimated tokens
62
+ respectively to account for this new required context. Other task and step
63
+ ceilings, orientation selection, output accounting and the seeded growth
64
+ negative control retain their existing enforcement.
65
+
57
66
  ## SDK mutation testing
58
67
 
59
68
  `pnpm quality:mutation` uses Stryker's Vitest runner to mutate the SDK cursor and
@@ -4,6 +4,10 @@ Tracker references: [pm-15yuly](../.agents/pm/issues/pm-15yuly.toon), [pm-g8oh0f
4
4
 
5
5
  ## Agent Quick Context
6
6
 
7
+ Complete package-envelope fitting and session-reference recovery are tracked by
8
+ [pm-gh1567](../.agents/pm/issues/pm-gh1567.toon) and
9
+ [pm-session-reference-recovery](../.agents/pm/issues/pm-session-reference-recovery.toon).
10
+
7
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.
8
12
 
9
13
  | Dimension | CLI | SDK and MCP | Meaning |
@@ -27,6 +31,56 @@ repeated metadata from results by default. Request
27
31
  `--output-row-contract` / `outputRowContract: true` when a consumer needs the
28
32
  row paths, jq selector, and active TOON encoding contract.
29
33
 
34
+ ### Package-defined complete envelopes
35
+
36
+ `fitOutputEnvelope` is available from `@unbrained/pm-cli/sdk/query`, the
37
+ aggregate SDK, and an extension command's `sdk.fitOutputEnvelope`. It fits
38
+ ordered whole rows into a caller-defined envelope without changing domain
39
+ ranking, metadata or transport policy:
40
+
41
+ ```ts
42
+ import { fitOutputEnvelope } from "@unbrained/pm-cli/sdk/query";
43
+
44
+ const fitted = fitOutputEnvelope([{ id: "one", title: "Context" }], {
45
+ tokenBudget: 800,
46
+ buildEnvelope: (items) => ({ source: "my-package", items }),
47
+ renderers: { json: (value) => JSON.stringify(value) + "\n" },
48
+ });
49
+ process.stdout.write(fitted.renderings[0]!.text);
50
+ ```
51
+
52
+ The SDK reserves `output_fit`, attaches the omission/accounting receipt, and
53
+ stabilizes its `estimated_tokens` and `output_bytes` against complete output,
54
+ including the receipt itself and caller-supplied framing. Multiple required
55
+ renderers may be supplied, such as JSON and TOON; each must fit, and the receipt
56
+ records the greatest token estimate and byte count independently. Emit a cached
57
+ rendering directly: another serializer or extra newline changes its cost.
58
+ `buildEnvelope` can read the receipt for a package-owned self-accounting field.
59
+
60
+ The default estimator is `ceil(UTF-8 bytes / 4)`. Supply `estimateTokens` for
61
+ another contract, including a stronger one-token-per-byte bound. Estimates are
62
+ not a tokenizer guarantee. Callbacks must be pure, deterministic, promptly
63
+ returning, and include mandatory metadata in every rendering. The SDK does not
64
+ interpret package fields or provider authentication.
65
+
66
+ The default `prefix` policy stops at the first row that does not fit. `skip`
67
+ tries later rows without changing their order. The receipt retains original
68
+ `included_indices`, `total_candidates` and `omitted_count`; `complete` on the
69
+ result means all candidate rows fit. Neither policy splits rows or assumes
70
+ serialized size is monotone. A smaller budget does not promise nested selected
71
+ sets under `skip`; use `prefix` when prefix continuity matters.
72
+
73
+ The empty mandatory envelope must fit before any row is attempted.
74
+ `OutputEnvelopeFitError.code` distinguishes `output_envelope_infeasible`
75
+ (with `minimum_tokens`), `output_envelope_work_limit`, and
76
+ `output_envelope_unstable`. No unverified or oversized packet is returned.
77
+ `maxRenderCalls` defaults to 10,000 across every trial and renderer;
78
+ `maxStabilizationPasses` defaults to 16 per trial. Actual renderer calls and
79
+ evaluated candidates are reported in `work`, outside the measured packet.
80
+ These ceilings bound fitting work; they cannot interrupt arbitrary callback
81
+ execution. Existing candidate-projection packing and pre-receipt token
82
+ attribution retain their distinct contracts.
83
+
30
84
  ### Include Modes
31
85
 
32
86
  `--output-include` accepts two kinds of token. A **field selector** names a row
@@ -195,7 +249,7 @@ The session ceiling and an explicit `--output-budget` both bind; the smaller
195
249
  remaining allowance wins. Rows for item facts already present in the caller's
196
250
  context become `{ "id": "pm-a1b2", "context_ref":
197
251
  "session:orientation:pm-a1b2" }` instead of repeating prose. References retain
198
- stable item identity and can be restored with `pm get <item-id> --brief` when
252
+ stable item identity and can be restored with `pm get <item-id> --depth brief` when
199
253
  the prior context is unavailable. The receipt reports estimated and charged
200
254
  tokens separately when the remaining group allowance is smaller than the
201
255
  minimum control envelope, plus the accumulated spend, remaining capacity,
package/docs/RELEASING.md CHANGED
@@ -572,6 +572,17 @@ never move a published tag or mint a second automatic version for the same UTC d
572
572
  - GitHub Release creation
573
573
  - GitHub Release metadata verification through the same local verification script
574
574
 
575
+ The Auto Release parent has a 180-minute orchestration limit: 60 minutes for
576
+ preparation and gates, 30 for aggregate runner queue delays, the unchanged
577
+ 60-minute publication, 15-minute acceptance and 5-minute advertisement job
578
+ limits, and 10 minutes for orchestration overhead. Runner queue time consumes
579
+ the waiting parent's wall time even when no child job is executing. The
580
+ reserve accommodates delays without extending a child job or changing a
581
+ quality gate. Extreme queue delays can still exhaust the parent; recover the
582
+ existing immutable tag after checking its publication evidence rather than
583
+ creating another daily version. Tracked by
584
+ [pm-29bwud](../.agents/pm/issues/pm-29bwud.toon).
585
+
575
586
  Monitor:
576
587
 
577
588
  ```bash
package/docs/SDK.md CHANGED
@@ -599,6 +599,17 @@ sentinel rather than presenting it as a mistyped pm id.
599
599
 
600
600
  ### Agent output budgets and discovery
601
601
 
602
+ Package-defined packets can use `fitOutputEnvelope` from the query entrypoint
603
+ or `CommandHandlerContext.sdk.fitOutputEnvelope` to fit complete JSON/TOON
604
+ renderings, including self-accounting receipts and framing. See
605
+ [complete envelope fitting](READ_OUTPUT_CONTRACTS.md#package-defined-complete-envelopes)
606
+ for policies, work ceilings and refusal contracts, tracked by
607
+ [pm-gh1567](../.agents/pm/issues/pm-gh1567.toon).
608
+ Session receipts now advertise `pm get <item-id> --depth brief`; the
609
+ `restore_reference_with` literal type changes accordingly. Hosts constructing
610
+ `ExtensionCommandSdk` implementations must supply `fitOutputEnvelope` from the
611
+ public SDK; host-created command contexts already provide it.
612
+
602
613
  Tracked by [pm-5t33or](../.agents/pm/features/pm-5t33or.toon),
603
614
  [pm-gmdzaa](../.agents/pm/issues/pm-gmdzaa.toon), and
604
615
  [pm-dpqa3h](../.agents/pm/chores/pm-dpqa3h.toon).
@@ -1123,6 +1134,28 @@ recurrence reason, accepts only the workspace open or in-progress target, and
1123
1134
  returns the terminal evidence captured atomically before the update path clears
1124
1135
  it from active metadata.
1125
1136
 
1137
+ Create focus policy is tracked by [pm-gh1577](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1577.toon)
1138
+ (this tracker record is repository-only and excluded from npm).
1139
+ Programmatic `create`, `PmClient.create`, `runCreate`, and MCP `pm_create`
1140
+ ignore saved session focus unless `inheritFocus: true` is supplied. An explicit
1141
+ parent, a parent from the selected template, or `unset: ["parent"]` takes
1142
+ precedence. Create receipts report `parent_source: "focus"`; the effective
1143
+ parent remains in the item and immutable create event. Plan results expose the
1144
+ effective parent as `plan.parent`. `pm create` and
1145
+ `pm plan create` enable this convenience by default; `--no-inherit-focus` or
1146
+ `--parent none` suppresses it (`pm create` also accepts `--unset parent`).
1147
+ SDK `planCreate` and MCP plan creation follow the same explicit opt-in policy.
1148
+ SDK scheduling shortcuts follow the same opt-in policy; package scheduling
1149
+ commands retain their focused creation convenience.
1150
+
1151
+ Other create defaults still apply: an explicitly selected template supplies
1152
+ options before explicit caller values, workspace governance selects the default
1153
+ type/create mode, the type workflow selects its initial status, priority defaults
1154
+ to 2, tags to an empty array, and author identity comes from invocation/workspace
1155
+ policy. There is no implicit saved assignee or tag default outside the selected
1156
+ template. Importers should supply explicit type, status, priority, tags, assignee,
1157
+ and parent/unset policy when those values are part of their source contract.
1158
+
1126
1159
  Lifecycle handoff and receipt guidance are tracked by
1127
1160
  [pm-gh1465](../.agents/pm/features/pm-gh1465.toon) and
1128
1161
  [pm-gh1464](../.agents/pm/issues/pm-gh1464.toon). Register a project-specific
@@ -1174,10 +1207,31 @@ If a process stops between the domain write and the journal update, rerunning
1174
1207
  the same plan discovers the already-applied step and continues. An ordinary
1175
1208
  error switches the journal to compensation mode and runs applied steps in
1176
1209
  reverse order, limited to steps whose forward attempt was durably recorded.
1210
+ Adapters can opt into `compensatePending: true` when `apply()` may fail after
1211
+ an internal write while inspection still reports `pending`. Such compensators
1212
+ must handle absent and partial effects idempotently. The default preserves
1213
+ applied-only compensation; an inspected `compensated` step is skipped.
1214
+ If compensation refuses, the journal retains its started steps
1215
+ and recovery data in `compensating` state instead of claiming a rollback.
1177
1216
  Compensations are new item-history or relationship events: the
1178
1217
  coordinator never deletes or rewrites immutable history. A crash during
1179
1218
  compensation resumes compensation before a new attempt begins.
1180
1219
 
1220
+ Guarded terminal updates are tracked by
1221
+ [pm-pllp78](../.agents/pm/issues/pm-pllp78.toon). A bulk update's `match` guard
1222
+ is checked under each item lock and advances to the operation's own committed
1223
+ key value before its next internal lifecycle write. A stale starting value
1224
+ still refuses without item or history writes. Item updates opt into pending
1225
+ compensation and attribute every internal write in immutable history. New
1226
+ receipts bind the history fingerprint, integer prefix length and exact version, so writes sharing
1227
+ one timestamp remain distinguishable. Recovery restores exclusively owned
1228
+ effects and preserves peer-only changes. Mixed ownership, rewritten receipts,
1229
+ or a peer write before the restore lock refuse with
1230
+ `transaction_partial_mutation`; the surfaced `AggregateError` retains both
1231
+ failures and the journal keeps recovery data. Repeated compensation recognizes
1232
+ its durable marker even when a peer adds context afterward. Legacy timestamp
1233
+ receipts remain supported, with ambiguous partial effects refused.
1234
+
1181
1235
  ### Schema evolution and workspace history
1182
1236
 
1183
1237
  Tracked by [pm-dijg](../.agents/pm/features/pm-dijg.toon) and
@@ -1527,8 +1581,9 @@ handlers remain disabled. Package-backed `--template` create input cannot be
1527
1581
  semantically previewed through its package handler; expand it into explicit core
1528
1582
  mutation options before preview.
1529
1583
 
1530
- Actionable previews are tracked by [pm-ekf2gu](../.agents/pm/issues/pm-ekf2gu.toon)
1531
- and [pm-fa9olc](../.agents/pm/tasks/pm-fa9olc.toon).
1584
+ Actionable previews are tracked by [pm-ekf2gu](../.agents/pm/issues/pm-ekf2gu.toon),
1585
+ [pm-fa9olc](../.agents/pm/tasks/pm-fa9olc.toon), and
1586
+ [pm-jhkzk0](../.agents/pm/features/pm-jhkzk0.toon).
1532
1587
  `previewItemMutations` returns `warnings` grouped by zero-based operation
1533
1588
  `index`, canonical `id`, and `op`. These are the original create lifecycle
1534
1589
  warnings, including advisory `likely_duplicates` and duplicate-recovery tokens.
@@ -1544,7 +1599,14 @@ use this same projection. A `replayed_committed_plan` has no newly evaluated
1544
1599
  warnings; an empty warning list in that state does not certify current policy.
1545
1600
 
1546
1601
  Staging excludes derived `search` and `locks` content and unrelated runtime state,
1547
- retaining registered item folders, explicitly configured schema files, and
1602
+ plus `extensions/<directory>/node_modules` dependency trees. These trees are
1603
+ excluded before entry inspection or traversal, including dependency links;
1604
+ configured schema files and registered item folders take precedence and retain
1605
+ the regular-file safety checks even inside a dependency tree. Extension source,
1606
+ manifests and managed-package metadata remain in the snapshot. The receipt
1607
+ declares `derived_extension_dependencies_excluded` among its unresolved commit
1608
+ constraints because executable package dependencies are not validated.
1609
+ Staging retains registered item folders, explicitly configured schema files, and
1548
1610
  `runtime/session.json` for core focus and inherited-parent semantics. Root-layout
1549
1611
  trackers copy only tracker-owned files and directories, including standard and
1550
1612
  custom item folders and configured schema files; unrelated project content is
@@ -2067,9 +2129,15 @@ signal-set metadata are supported, its item source matches, and its cursor,
2067
2129
  complete item-id set, and substantive recency-evidence fingerprint match.
2068
2130
  Missing, stale, version-incompatible, or corrupt state is rebuilt from the
2069
2131
  authoritative items and atomically replaced. The result reports `cache_status`
2070
- and non-fatal `context_signal_store_stale`,
2071
- `context_signal_store_invalid`, or `context_signal_store_write_failed`
2072
- warnings. A write failure still serves the in-memory rebuilt candidates because
2132
+ without a warning for a successful missing/stale refresh
2133
+ ([pm-gh1581](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1581.toon);
2134
+ this tracker record is repository-only and excluded from npm). Rebuilt signals are used in
2135
+ the current response; another read is unnecessary. With `explainRanking`,
2136
+ `ranking.feature_store.cache_status` exposes the refresh on context receipts.
2137
+ Corrupt/unreadable state and failed persistence retain actionable
2138
+ `context_signal_store_invalid` and `context_signal_store_write_failed` warnings.
2139
+ The exported stale-warning descriptor remains for compatibility with older
2140
+ receipts. A write failure still serves the in-memory rebuilt candidates because
2073
2141
  the snapshot is derived, never authoritative. Optional maps for activity density,
2074
2142
  graph proximity, claim/focus, knowledge density, author affinity, usage
2075
2143
  affinity, and semantic similarity let an index or application-specific host
@@ -3510,6 +3578,20 @@ search degrades gracefully and emits warning codes instead of hard-failing.
3510
3578
 
3511
3579
  ## Completion-aware reporting and migration
3512
3580
 
3581
+ Close provenance is tracked by [pm-gh1579](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1579.toon)
3582
+ (a repository-only tracker record excluded from npm).
3583
+ `closeItem`, `PmClient.close`, CLI/MCP close receipts and successful `closeMany`
3584
+ rows return `completion` with the persisted `timestamp` and `source`:
3585
+ `asserted` means this close supplied `completedAt`, `existing` preserves an
3586
+ earlier metadata value, and `close_time` means completion was inferred from the
3587
+ tracker close time. Timestamp and source are sealed in the close event's
3588
+ `context.completion`; the local correction hint remains in the response.
3589
+ Existing records without it have unknown provenance;
3590
+ `existing` does not assert how an earlier value was obtained. No prior events are
3591
+ rewritten. Inferred receipts include a tracker-bound `update --completed-at`
3592
+ correction hint. Pass `completedAt` (CLI `--completed-at`) when closing delivered
3593
+ work retroactively; core never extracts a delivery date from reason prose.
3594
+
3513
3595
  `resolveCompletionTimestamp(item)` gives reports one canonical timestamp plus a
3514
3596
  `source` and `fallback` disclosure. It prefers `completed_at` (when the work
3515
3597
  actually finished), then legacy `closed_at`, then `updated_at`.
@@ -22,6 +22,8 @@ bounded at scale without shelling out from an SDK host.
22
22
 
23
23
  ## Durable mutation events
24
24
 
25
+ Integrity contracts: [pm-gh1593](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1593.toon).
26
+
25
27
  Read committed history facts as newline-delimited JSON:
26
28
 
27
29
  ```bash
@@ -33,13 +35,42 @@ pm events --cursor-mode row --since <cursor>
33
35
 
34
36
  By default, event rows carry `item_id`, `version`, `ts`, `author`, `type`, and
35
37
  `patch_count`, followed by one `pm.stream.trailer` record with `count`,
36
- `has_more`, `next_cursor`, and `source`. Persist the trailer cursor only after
38
+ `has_more`, `next_cursor`, `source`, and `integrity`. Persist the trailer cursor only after
37
39
  the batch is durable. A crash before cursor persistence can replay the last
38
40
  batch repeatedly, including across multiple crashes. Consumers must process
39
41
  idempotently or deduplicate replays. `--cursor-mode row` preserves the previous
40
42
  shape with one `cursor` per event and no trailer for consumers that checkpoint
41
43
  every row. Already issued version-1 cursors remain accepted by `--since`.
42
44
 
45
+ Every SDK page declares `integrity: "unverified"` by default. Full-file content
46
+ matching prevents a stale cache from hiding same-length edits to any record,
47
+ including an earlier record when the final record is unchanged. This freshness
48
+ check alone does not verify the chain.
49
+ The public `readHistorySnapshot` result retains `raw_bytes` alongside decoded
50
+ `raw` and `entries`. Content receipts use those original bytes, including when
51
+ UTF-8 decoding replaces an invalid byte; parsing behavior remains unchanged.
52
+
53
+ Use `listMutationEvents({ item: "pm-abcd", verify: true })` or
54
+ `pm events --item pm-abcd --verify --json` before acting on verified events.
55
+ The SDK reads authoritative bytes and verifies each complete selected stream
56
+ before applying operation, author, timestamp, cursor, or row-limit filters.
57
+ Selected-record failures are detected even outside the returned page. JSON
58
+ parsing failures from `readHistorySnapshot` report `history_json_invalid`;
59
+ chain-verification failures report `event_history_integrity_failed` with
60
+ history-inspection recovery. Follow the returned typed recovery guidance. Select
61
+ `item` to bound verification cost and exclude unrelated streams. With no item
62
+ filter, all available item and workspace streams are checked. Successful pages
63
+ return `integrity: "verified"`, `verified_streams`, and
64
+ `source: "authoritative_history"`; this proves the recorded chain, not agreement
65
+ with the current materialized item or an external author signature. Empty
66
+ selections report zero verified streams. Subscriptions verify each yielded
67
+ batch with the same options. MCP `pm_events` accepts `verify: true` too.
68
+ Both strict reads and the authoritative fallback preserve typed history refusals
69
+ and report other host read failures as `event_index_unavailable`. Cache receipts
70
+ and ordered rows are published together, including across concurrent reads.
71
+ Batch-mode NDJSON trailers retain the integrity receipt; compatibility row mode
72
+ has no trailer, so use JSON or batch mode when persisting page receipts.
73
+
43
74
  Version-1 cursor ordering uses recorded timestamps, stream ids, and offsets.
44
75
  A fact committed later with an older timestamp falls before an advanced cursor.
45
76
  Clock-independent ordering and late-commit recovery remain tracked by
@@ -53,15 +84,15 @@ streams with the same ordering, filters, pagination, and cursor contract; pages
53
84
  identify that path with `source: "authoritative_history"`.
54
85
  Writers without SQLite use the same pending and committed invalidation protocol,
55
86
  so a later Node writer cannot certify a cache that omitted their facts.
56
- Incremental writes also verify the previous size receipt before advancing it,
87
+ Incremental writes also verify the previous full-content receipt before advancing it,
57
88
  so merged history cannot be hidden by a later append. Upgraded runtimes rebuild
58
89
  legacy projections that could contain omitted facts with apparently current
59
90
  receipts; authoritative history does not require a format migration.
60
91
 
61
92
  Index readers take a synchronous SQLite read transaction containing both event
62
- rows and their stream-size receipts, then close the database before checking
93
+ rows and their full-stream SHA-256 content receipts, then close the database before checking
63
94
  authoritative files. They acquire neither history-index writer lock. File
64
- identity and write timestamps, authoritative stream sizes, and pending or
95
+ identity and write timestamps, complete authoritative content digests, and pending or
65
96
  committed invalidations must still match before a snapshot is returned. A
66
97
  concurrent change refuses the optional snapshot; it cannot certify older rows
67
98
  using a newer size receipt.
package/docs/TESTING.md CHANGED
@@ -678,8 +678,21 @@ pm test <item-id> --run --workspace-context snapshot --override-linked-workspace
678
678
  `.git`, `.agents`, coverage output, and common cache directories are excluded
679
679
  at every directory depth, with reserved names matched case-insensitively for
680
680
  portable admission. Git sources receive an independent commit/tag object store
681
- with fresh configuration, no source hooks, and no origin remote. Repository
681
+ with an index initially based on HEAD, fresh configuration, no source hooks,
682
+ and no origin remote. Repository
682
683
  history remains available; this is execution isolation, not history redaction.
684
+ Receipt verification is tracked by [pm-ycyymg](../.agents/pm/issues/pm-ycyymg.toon).
685
+ Source-mode tracker copies authenticate matching durable receipts against the
686
+ explicitly inherited read-only source index. Snapshot-mode copies use their
687
+ own index and the exact bound tracker path. Only bounded stage-zero receipt
688
+ blobs from the selected source tracker index are copied into that independent
689
+ object store and rebased into the snapshot namespace, including staged-only
690
+ receipts and custom tracker roots. Inherited receipts from another tracker
691
+ namespace are removed. Untracked, missing, conflicted, malformed, or
692
+ provenance-divergent sidecars remain untrusted; no source receipt, index,
693
+ or history is written by verification. A failed source index/object read aborts
694
+ snapshot setup before its receipt namespace is changed. A workspace without
695
+ Git authority or without indexed receipts still supplies no durable proof.
683
696
  See [Faithful package acceptance](PACKAGE_GATE_ACCEPTANCE.md) for limits.
684
697
  Each existing root or nested `node_modules`
685
698
  directory is linked at its original relative path, including installations
@@ -80,7 +80,20 @@ reviewable history and skip approval requirements; use `transition` rules with
80
80
  of the current record, using the same content and independent-actor checks.
81
81
 
82
82
  Refused mutations preserve item state and item history, and append a workspace
83
- refusal event. Accepted mutations attach bounded policy decisions to their normal
83
+ refusal event. This append changes the tracked `history/_workspace.jsonl` file
84
+ under the selected tracker. Retain it with the workspace changes. The typed SDK
85
+ error's `context.side_effects` and CLI JSON `side_effects` disclose the
86
+ tracker-relative `path`, `op: "policy_refused"`, and sealed `record_hash`; MCP
87
+ error details retain the same context. Human-readable diagnostics also name the
88
+ write. Every refused attempt records a distinct event and returns its own record
89
+ identity, including repeated identical requests. This preserves attempt history
90
+ instead of silently coalescing it. Dry-run refusals have `side_effects: []` and
91
+ append nothing. An audit failure retains its separate error contract below and
92
+ does not claim a completed append. This disclosure is tracked by
93
+ [pm-gh1585](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1585.toon)
94
+ (a repository-only tracker record excluded from npm).
95
+
96
+ Accepted mutations attach bounded policy decisions to their normal
84
97
  history event. Diagnostics contain policy ids and missing field paths, without
85
98
  copying reviewed content into errors.
86
99
  If the mandatory refusal audit cannot be appended, the mutation instead raises
@@ -1 +1 @@
1
- {"version":5,"transcript_version":2,"transcript_digest":"sha256:6d4041acfaa4075dde1972d6127a74f18916f7661738b4f5d5fd47a61c179a78","estimator":"ceil(utf8_bytes / 4)","comparison_scope":"plan_recovery_tracker_root_canonicalized","measurement_scope":"output_before_token_accounting","published_with_release":true,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["actionable_work","active_ownership","workspace_state"],"measured_winner_tokens":1087,"protocols":[{"task_id":"orientation-context-intent","command_count":1,"estimated_tokens":1087,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"context","field_path":"hierarchy"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-operating-rules","command_count":4,"estimated_tokens":2139,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"open","field_path":"items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-contracts-next","command_count":2,"estimated_tokens":5203,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"next","field_path":"recommended.id"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}]}}]},"tasks":[{"id":"orientation-context-intent","max_estimated_tokens":1087,"steps":[{"id":"context","max_estimated_tokens":1087,"accounting_mode":"self_reported"}]},{"id":"orientation-contracts-next","max_estimated_tokens":5203,"steps":[{"id":"contracts","max_estimated_tokens":4481,"accounting_mode":"self_reported"},{"id":"next","max_estimated_tokens":722,"accounting_mode":"self_reported"}]},{"id":"orientation-operating-rules","max_estimated_tokens":2139,"steps":[{"id":"context","max_estimated_tokens":1087,"accounting_mode":"self_reported"},{"id":"search","max_estimated_tokens":164,"accounting_mode":"self_reported"},{"id":"open","max_estimated_tokens":712,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":176,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2077,"steps":[{"id":"triage","max_estimated_tokens":619,"accounting_mode":"self_reported"},{"id":"orient","max_estimated_tokens":1087,"accounting_mode":"self_reported"},{"id":"inspect","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"closed-domain-recovery","max_estimated_tokens":630,"steps":[{"id":"refuse-intent","max_estimated_tokens":259,"accounting_mode":"self_reported"},{"id":"retry-intent","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"unknown-option-recovery","max_estimated_tokens":596,"steps":[{"id":"refuse-option","max_estimated_tokens":433,"accounting_mode":"self_reported"},{"id":"retry-option","max_estimated_tokens":163,"accounting_mode":"self_reported"}]},{"id":"lifecycle-mutation","max_estimated_tokens":812,"steps":[{"id":"create","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"inspect-open","max_estimated_tokens":363,"accounting_mode":"self_reported"},{"id":"close","max_estimated_tokens":31,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":398,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":326,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":174,"accounting_mode":"self_reported"},{"id":"no-effect","max_estimated_tokens":132,"accounting_mode":"self_reported"}]},{"id":"plan-execution-mutations","max_estimated_tokens":806,"steps":[{"id":"create-plan","max_estimated_tokens":21,"accounting_mode":"self_reported"},{"id":"add-step","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"complete-step","max_estimated_tokens":253,"accounting_mode":"self_reported"},{"id":"inspect-plan","max_estimated_tokens":278,"accounting_mode":"self_reported"}]}],"composite_max_estimated_tokens":13676}
1
+ {"version":5,"transcript_version":2,"transcript_digest":"sha256:83d4523ca528ad5e8801cf5c7c02dcebbf2b87dc72422d4b8e648755dcdc36c2","estimator":"ceil(utf8_bytes / 4)","comparison_scope":"plan_recovery_tracker_root_canonicalized","measurement_scope":"output_before_token_accounting","published_with_release":true,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["actionable_work","active_ownership","workspace_state"],"measured_winner_tokens":1087,"protocols":[{"task_id":"orientation-context-intent","command_count":1,"estimated_tokens":1087,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"context","field_path":"hierarchy"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-operating-rules","command_count":4,"estimated_tokens":2139,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"open","field_path":"items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-contracts-next","command_count":2,"estimated_tokens":5203,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"next","field_path":"recommended.id"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}]}}]},"tasks":[{"id":"orientation-context-intent","max_estimated_tokens":1087,"steps":[{"id":"context","max_estimated_tokens":1087,"accounting_mode":"self_reported"}]},{"id":"orientation-contracts-next","max_estimated_tokens":5203,"steps":[{"id":"contracts","max_estimated_tokens":4481,"accounting_mode":"self_reported"},{"id":"next","max_estimated_tokens":722,"accounting_mode":"self_reported"}]},{"id":"orientation-operating-rules","max_estimated_tokens":2139,"steps":[{"id":"context","max_estimated_tokens":1087,"accounting_mode":"self_reported"},{"id":"search","max_estimated_tokens":164,"accounting_mode":"self_reported"},{"id":"open","max_estimated_tokens":712,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":176,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2077,"steps":[{"id":"triage","max_estimated_tokens":619,"accounting_mode":"self_reported"},{"id":"orient","max_estimated_tokens":1087,"accounting_mode":"self_reported"},{"id":"inspect","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"closed-domain-recovery","max_estimated_tokens":630,"steps":[{"id":"refuse-intent","max_estimated_tokens":259,"accounting_mode":"self_reported"},{"id":"retry-intent","max_estimated_tokens":371,"accounting_mode":"self_reported"}]},{"id":"unknown-option-recovery","max_estimated_tokens":596,"steps":[{"id":"refuse-option","max_estimated_tokens":433,"accounting_mode":"self_reported"},{"id":"retry-option","max_estimated_tokens":163,"accounting_mode":"self_reported"}]},{"id":"lifecycle-mutation","max_estimated_tokens":888,"steps":[{"id":"create","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"inspect-open","max_estimated_tokens":363,"accounting_mode":"self_reported"},{"id":"close","max_estimated_tokens":107,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":398,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":406,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"no-effect","max_estimated_tokens":132,"accounting_mode":"self_reported"}]},{"id":"plan-execution-mutations","max_estimated_tokens":806,"steps":[{"id":"create-plan","max_estimated_tokens":21,"accounting_mode":"self_reported"},{"id":"add-step","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"complete-step","max_estimated_tokens":253,"accounting_mode":"self_reported"},{"id":"inspect-plan","max_estimated_tokens":278,"accounting_mode":"self_reported"}]}],"composite_max_estimated_tokens":13832}
@@ -1 +1 @@
1
- {"version":2,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["workspace_state","active_ownership","actionable_work"],"protocols":[{"task_id":"orientation-context-intent","capabilities":["workspace_state","active_ownership","actionable_work"],"capability_evidence":{"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"actionable_work":[{"step_id":"context","field_path":"hierarchy"}]}},{"task_id":"orientation-contracts-next","capabilities":["workspace_state","active_ownership","actionable_work"],"capability_evidence":{"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"actionable_work":[{"step_id":"next","field_path":"recommended.id"}]}},{"task_id":"orientation-operating-rules","capabilities":["workspace_state","active_ownership","actionable_work"],"capability_evidence":{"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"actionable_work":[{"step_id":"open","field_path":"items"}]}}]},"tasks":[{"id":"orientation-context-intent","description":"Build sufficient cold-start workspace, ownership, and actionable-work context with the bounded orientation intent.","steps":[{"id":"context","args":["context","--for","orient","--limit","10"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["summary.active_items","hierarchy","activity"]}]},{"id":"orientation-contracts-next","description":"Compare the proposed contracts-summary plus next cold-start protocol on the same fixed workspace.","steps":[{"id":"contracts","args":["contracts","--summary"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["commands"]},{"id":"next","args":["next","--for","execute","--ready-only","--limit","3"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["summary.in_progress","held_by_others","recommended.id"]}]},{"id":"orientation-operating-rules","description":"Compare the historical context, search, open-list, and in-progress-list orientation sequence.","steps":[{"id":"context","args":["context","--for","orient","--limit","10"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["summary.active_items","hierarchy","activity"]},{"id":"search","args":["search","agent task","--status","all","--limit","10"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"]},{"id":"open","args":["list","--status","open","--limit","20"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"]},{"id":"in-progress","args":["list","--status","in_progress","--limit","20"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"]}]},{"id":"context-bootstrap","description":"Orient in a scaled workspace and inspect the canonical focus item.","steps":[{"id":"triage","args":["list","--for","triage","--limit","2"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"]},{"id":"orient","args":["context","--for","orient","--limit","5"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["summary.active_items","hierarchy","activity"]},{"id":"inspect","args":["get","$ANCHOR_ID","--for","inspect"],"expected_exit_code":0,"expected_output_kind":"entity","expected_accounting_mode":"self_reported","required_fields":["item.id"]}]},{"id":"closed-domain-recovery","description":"Reject an invalid context intent and execute the advertised shell-free retry.","steps":[{"id":"refuse-intent","args":["get","$ANCHOR_ID","--for","invalid-agent-intent"],"expected_exit_code":2,"expected_output_kind":"refusal","expected_accounting_mode":"self_reported","required_fields":["code","refusal","recovery"],"expected_error_code":"unknown_context_intent","expected_field_values":{"recovery.recovery_mode":"compact"},"expected_refusal_surface":"--for"},{"id":"retry-intent","args":["get","$ANCHOR_ID","--for","inspect"],"expected_exit_code":0,"expected_output_kind":"entity","expected_accounting_mode":"self_reported","required_fields":["item.id"],"recovery_for":"refuse-intent"}]},{"id":"unknown-option-recovery","description":"Identify an unsupported option after valid flags and continue with the corrected command.","steps":[{"id":"refuse-option","args":["search","agent task","--status","open","--limit","5","--include-body"],"expected_exit_code":2,"expected_output_kind":"refusal","expected_accounting_mode":"self_reported","required_fields":["code","refusal","recovery"],"expected_error_code":"unknown_option","expected_refusal_surface":"--include-body"},{"id":"retry-option","args":["search","agent task","--status","open","--limit","5"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"],"recovery_for":"refuse-option"}]},{"id":"lifecycle-mutation","description":"Create, inspect, close, and confirm a project item through public CLI receipts.","steps":[{"id":"create","args":["create","--id","$LIFECYCLE_ID","--title","Transcript lifecycle item","--description","Golden multi-step lifecycle task","--type","Task","--status","open","--create-mode","progressive"],"expected_exit_code":0,"expected_output_kind":"mutation_receipt","expected_accounting_mode":"self_reported","required_fields":["id","changed_field_count"]},{"id":"inspect-open","args":["get","$LIFECYCLE_ID","--for","inspect"],"expected_exit_code":0,"expected_output_kind":"entity","expected_accounting_mode":"self_reported","required_fields":["item.id","item.status"],"expected_field_values":{"item.status":"open"}},{"id":"close","args":["close","$LIFECYCLE_ID","Golden task completed"],"expected_exit_code":0,"expected_output_kind":"mutation_receipt","expected_accounting_mode":"self_reported","required_fields":["id","status","close_reason"]},{"id":"inspect-closed","args":["get","$LIFECYCLE_ID","--for","inspect"],"expected_exit_code":0,"expected_output_kind":"entity","expected_accounting_mode":"self_reported","required_fields":["item.id","item.status"],"expected_field_values":{"item.status":"closed"}}]},{"id":"bulk-effect-outcomes","description":"Preserve successful partial-effect and no-effect outcomes across a bulk lifecycle task.","steps":[{"id":"create-bulk-target","args":["create","--id","$BULK_ID","--title","Transcript bulk effect target","--description","Golden bulk outcome transcript target","--type","Task","--status","open","--create-mode","progressive"],"expected_exit_code":0,"expected_output_kind":"mutation_receipt","expected_accounting_mode":"self_reported","required_fields":["id","status","changed_field_count"]},{"id":"partial-effect","args":["close-many","--ids","$BULK_ID,pm-transcript-missing","--reason","Golden partial-effect transcript","--validate-close","off","--no-checkpoint"],"expected_exit_code":7,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["rows","outcome","exit_code"],"expected_field_values":{"outcome":"partial_effect"}},{"id":"no-effect","args":["close-many","--ids","$BULK_ID","--reason","Golden no-effect transcript","--validate-close","off","--no-checkpoint"],"expected_exit_code":6,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["rows","outcome","exit_code"],"expected_field_values":{"outcome":"no_effect"}}]},{"id":"plan-execution-mutations","description":"Create a Plan, add and complete a step, then inspect its durable evidence without echoing the full Plan on each mutation.","steps":[{"id":"create-plan","args":["create","--id","pm-transcript-plan","--type","Plan","--title","Transcript execution Plan","--create-mode","progressive"],"expected_exit_code":0,"expected_output_kind":"mutation_receipt","expected_accounting_mode":"self_reported","required_fields":["id","status"]},{"id":"add-step","args":["plan","add-step","pm-transcript-plan","--step-title","Verify result","--step-body","Durable execution context retained for later inspection."],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["id","step.id","steps_summary.total","inspection_command"],"expected_field_values":{"kind":"plan_mutation","steps_summary.total":1}},{"id":"complete-step","args":["plan","complete-step","pm-transcript-plan","plan-step-001","--step-evidence","Verified result"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["id","step.status","steps_summary.completed","omission_receipt"],"expected_field_values":{"step.status":"completed","steps_summary.completed":1}},{"id":"inspect-plan","args":["plan","show","pm-transcript-plan","--depth","deep"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["plan.steps","plan.steps_summary.completed"],"expected_field_values":{"plan.steps_summary.completed":1}}]}]}
1
+ {"version":2,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["workspace_state","active_ownership","actionable_work"],"protocols":[{"task_id":"orientation-context-intent","capabilities":["workspace_state","active_ownership","actionable_work"],"capability_evidence":{"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"actionable_work":[{"step_id":"context","field_path":"hierarchy"}]}},{"task_id":"orientation-contracts-next","capabilities":["workspace_state","active_ownership","actionable_work"],"capability_evidence":{"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"actionable_work":[{"step_id":"next","field_path":"recommended.id"}]}},{"task_id":"orientation-operating-rules","capabilities":["workspace_state","active_ownership","actionable_work"],"capability_evidence":{"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"actionable_work":[{"step_id":"open","field_path":"items"}]}}]},"tasks":[{"id":"orientation-context-intent","description":"Build sufficient cold-start workspace, ownership, and actionable-work context with the bounded orientation intent.","steps":[{"id":"context","args":["context","--for","orient","--limit","10"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["summary.active_items","hierarchy","activity"]}]},{"id":"orientation-contracts-next","description":"Compare the proposed contracts-summary plus next cold-start protocol on the same fixed workspace.","steps":[{"id":"contracts","args":["contracts","--summary"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["commands"]},{"id":"next","args":["next","--for","execute","--ready-only","--limit","3"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["summary.in_progress","held_by_others","recommended.id"]}]},{"id":"orientation-operating-rules","description":"Compare the historical context, search, open-list, and in-progress-list orientation sequence.","steps":[{"id":"context","args":["context","--for","orient","--limit","10"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["summary.active_items","hierarchy","activity"]},{"id":"search","args":["search","agent task","--status","all","--limit","10"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"]},{"id":"open","args":["list","--status","open","--limit","20"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"]},{"id":"in-progress","args":["list","--status","in_progress","--limit","20"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"]}]},{"id":"context-bootstrap","description":"Orient in a scaled workspace and inspect the canonical focus item.","steps":[{"id":"triage","args":["list","--for","triage","--limit","2"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"]},{"id":"orient","args":["context","--for","orient","--limit","5"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["summary.active_items","hierarchy","activity"]},{"id":"inspect","args":["get","$ANCHOR_ID","--for","inspect"],"expected_exit_code":0,"expected_output_kind":"entity","expected_accounting_mode":"self_reported","required_fields":["item.id"]}]},{"id":"closed-domain-recovery","description":"Reject an invalid context intent and execute the advertised shell-free retry.","steps":[{"id":"refuse-intent","args":["get","$ANCHOR_ID","--for","invalid-agent-intent"],"expected_exit_code":2,"expected_output_kind":"refusal","expected_accounting_mode":"self_reported","required_fields":["code","refusal","recovery"],"expected_error_code":"unknown_context_intent","expected_field_values":{"recovery.recovery_mode":"compact"},"expected_refusal_surface":"--for"},{"id":"retry-intent","args":["get","$ANCHOR_ID","--for","inspect"],"expected_exit_code":0,"expected_output_kind":"entity","expected_accounting_mode":"self_reported","required_fields":["item.id"],"recovery_for":"refuse-intent"}]},{"id":"unknown-option-recovery","description":"Identify an unsupported option after valid flags and continue with the corrected command.","steps":[{"id":"refuse-option","args":["search","agent task","--status","open","--limit","5","--include-body"],"expected_exit_code":2,"expected_output_kind":"refusal","expected_accounting_mode":"self_reported","required_fields":["code","refusal","recovery"],"expected_error_code":"unknown_option","expected_refusal_surface":"--include-body"},{"id":"retry-option","args":["search","agent task","--status","open","--limit","5"],"expected_exit_code":0,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["items"],"recovery_for":"refuse-option"}]},{"id":"lifecycle-mutation","description":"Create, inspect, close, and confirm a project item through public CLI receipts.","steps":[{"id":"create","args":["create","--id","$LIFECYCLE_ID","--title","Transcript lifecycle item","--description","Golden multi-step lifecycle task","--type","Task","--status","open","--create-mode","progressive"],"expected_exit_code":0,"expected_output_kind":"mutation_receipt","expected_accounting_mode":"self_reported","required_fields":["id","changed_field_count"]},{"id":"inspect-open","args":["get","$LIFECYCLE_ID","--for","inspect"],"expected_exit_code":0,"expected_output_kind":"entity","expected_accounting_mode":"self_reported","required_fields":["item.id","item.status"],"expected_field_values":{"item.status":"open"}},{"id":"close","args":["close","$LIFECYCLE_ID","Golden task completed"],"expected_exit_code":0,"expected_output_kind":"mutation_receipt","expected_accounting_mode":"self_reported","required_fields":["id","status","close_reason","completion.timestamp","completion.source","completion.hint"],"expected_field_values":{"completion.source":"close_time"}},{"id":"inspect-closed","args":["get","$LIFECYCLE_ID","--for","inspect"],"expected_exit_code":0,"expected_output_kind":"entity","expected_accounting_mode":"self_reported","required_fields":["item.id","item.status"],"expected_field_values":{"item.status":"closed"}}]},{"id":"bulk-effect-outcomes","description":"Preserve successful partial-effect and no-effect outcomes across a bulk lifecycle task.","steps":[{"id":"create-bulk-target","args":["create","--id","$BULK_ID","--title","Transcript bulk effect target","--description","Golden bulk outcome transcript target","--type","Task","--status","open","--create-mode","progressive"],"expected_exit_code":0,"expected_output_kind":"mutation_receipt","expected_accounting_mode":"self_reported","required_fields":["id","status","changed_field_count"]},{"id":"partial-effect","args":["close-many","--ids","$BULK_ID,pm-transcript-missing","--reason","Golden partial-effect transcript","--validate-close","off","--no-checkpoint"],"expected_exit_code":7,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["rows","outcome","exit_code","rows.0.completion.timestamp","rows.0.completion.source","rows.0.completion.hint"],"expected_field_values":{"outcome":"partial_effect","rows.0.completion.source":"close_time"}},{"id":"no-effect","args":["close-many","--ids","$BULK_ID","--reason","Golden no-effect transcript","--validate-close","off","--no-checkpoint"],"expected_exit_code":6,"expected_output_kind":"collection","expected_accounting_mode":"self_reported","required_fields":["rows","outcome","exit_code"],"expected_field_values":{"outcome":"no_effect"}}]},{"id":"plan-execution-mutations","description":"Create a Plan, add and complete a step, then inspect its durable evidence without echoing the full Plan on each mutation.","steps":[{"id":"create-plan","args":["create","--id","pm-transcript-plan","--type","Plan","--title","Transcript execution Plan","--create-mode","progressive"],"expected_exit_code":0,"expected_output_kind":"mutation_receipt","expected_accounting_mode":"self_reported","required_fields":["id","status"]},{"id":"add-step","args":["plan","add-step","pm-transcript-plan","--step-title","Verify result","--step-body","Durable execution context retained for later inspection."],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["id","step.id","steps_summary.total","inspection_command"],"expected_field_values":{"kind":"plan_mutation","steps_summary.total":1}},{"id":"complete-step","args":["plan","complete-step","pm-transcript-plan","plan-step-001","--step-evidence","Verified result"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["id","step.status","steps_summary.completed","omission_receipt"],"expected_field_values":{"step.status":"completed","steps_summary.completed":1}},{"id":"inspect-plan","args":["plan","show","pm-transcript-plan","--depth","deep"],"expected_exit_code":0,"expected_output_kind":"diagnostic","expected_accounting_mode":"self_reported","required_fields":["plan.steps","plan.steps_summary.completed"],"expected_field_values":{"plan.steps_summary.completed":1}}]}]}
@@ -12,7 +12,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
12
12
  | `packages` | extensions | 56 | 56 |
13
13
  | `install` | extensions | 27 | 27 |
14
14
  | `upgrade` | extensions | 29 | 29 |
15
- | `create` | intake | 100 | 100 |
15
+ | `create` | intake | 102 | 102 |
16
16
  | `copy` | intake | 24 | 24 |
17
17
  | `focus` | intake | 22 | 22 |
18
18
  | `list` | context | 86 | 86 |
@@ -33,7 +33,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
33
33
  | `eval` | context | 25 | 25 |
34
34
  | `next` | context | 38 | 38 |
35
35
  | `history` | evidence | 35 | 35 |
36
- | `events` | evidence | 33 | 33 |
36
+ | `events` | evidence | 34 | 34 |
37
37
  | `history-attest` | evidence | 23 | 23 |
38
38
  | `history-redact` | evidence | 27 | 27 |
39
39
  | `history-repair` | evidence | 27 | 27 |
@@ -56,7 +56,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
56
56
  | `files` | evidence | 39 | 39 |
57
57
  | `docs` | evidence | 30 | 30 |
58
58
  | `deps` | graph | 32 | 32 |
59
- | `plan` | graph | 109 | 109 |
59
+ | `plan` | graph | 111 | 111 |
60
60
  | `test` | quality | 56 | 56 |
61
61
  | `test-all` | quality | 40 | 40 |
62
62
  | `telemetry` | workspace | 21 | 21 |
@@ -91,7 +91,7 @@ This file is generated by `listPmFlagLexicon()`. Compatibility aliases do not co
91
91
  | `ops telemetry` | workspace | 21 | 21 |
92
92
  | `ops eval` | context | 25 | 25 |
93
93
  | `ops test-all` | quality | 40 | 40 |
94
- | `history events` | evidence | 33 | 33 |
94
+ | `history events` | evidence | 34 | 34 |
95
95
  | `update many` | lifecycle | 146 | 146 |
96
96
  | `close many` | lifecycle | 72 | 72 |
97
97
  | `close delete` | lifecycle | 24 | 24 |
@@ -4,12 +4,12 @@ Tracker: `pm-f05lsg`.
4
4
 
5
5
  Every catalog code is listed. An `uncovered` row is an explicit closure obligation, never an omission or implied approval.
6
6
 
7
- - Catalog error codes: 429
7
+ - Catalog error codes: 431
8
8
  - Executable error codes: 19
9
9
  - Executable-code ratchet floor: 18
10
10
  - Required executable canonical codes: `bulk_ids_input_empty`, `bulk_ids_input_missing_path`, `bulk_ids_input_unreadable`, `invalid_argument_value`, `manifest_unknown_key`, `missing_lifecycle_target`, `missing_required_argument`, `no_version_bounds_declared`, `projection_options_mutually_exclusive`, `tracker_not_initialized`, `tracker_root_missing`, `tracker_root_not_directory`, `tracker_root_unreadable`, `unknown_context_intent`, `unknown_field_projection`, `unknown_option`, `unknown_subcommand`
11
- - Uncovered error codes: 410
12
- - Coverage fraction: 0.044289
11
+ - Uncovered error codes: 412
12
+ - Coverage fraction: 0.044084
13
13
  - Closed-domain probes: 19
14
14
  - Grammar probes: 117
15
15
 
@@ -84,6 +84,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
84
84
  | `empty_surface` | `empty_surface` | uncovered | none | 0 |
85
85
  | `error_code_mismatch` | `error_code_mismatch` | uncovered | none | 0 |
86
86
  | `event_cursor_query_mismatch` | `event_cursor_query_mismatch` | uncovered | none | 0 |
87
+ | `event_history_integrity_failed` | `event_history_integrity_failed` | uncovered | none | 0 |
87
88
  | `event_index_unavailable` | `event_index_unavailable` | uncovered | none | 0 |
88
89
  | `exit_code_mismatch` | `exit_code_mismatch` | uncovered | none | 0 |
89
90
  | `extension_command_activation_failed` | `extension_command_activation_failed` | uncovered | none | 0 |
@@ -350,6 +351,7 @@ Every catalog code is listed. An `uncovered` row is an explicit closure obligati
350
351
  | `tracker_root_unreadable` | `tracker_root_unreadable` | executable | owned_state | 1 |
351
352
  | `transaction_create_compensated` | `transaction_create_compensated` | uncovered | none | 0 |
352
353
  | `transaction_journal_invalid` | `transaction_journal_invalid` | uncovered | none | 0 |
354
+ | `transaction_partial_mutation` | `transaction_partial_mutation` | uncovered | none | 0 |
353
355
  | `transaction_plan_mismatch` | `transaction_plan_mismatch` | uncovered | none | 0 |
354
356
  | `transaction_preview_external_schema` | `transaction_preview_external_schema` | uncovered | none | 0 |
355
357
  | `transaction_preview_non_regular_file` | `transaction_preview_non_regular_file` | uncovered | none | 0 |
package/marketplace.json CHANGED
@@ -1 +1 @@
1
- {"name":"pm","owner":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"description":"Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.","version":"2026.10.25","plugins":[{"name":"pm-claude","source":"./plugins/pm-claude","description":"Native pm CLI integration for Claude Code — 32 MCP tools, 14 workflow skills with slash invocations, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.","version":"2026.10.25","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","project-management","mcp","tasks","agents","workflows","git-native","task-tracker","ai"],"category":"productivity"}]}
1
+ {"name":"pm","owner":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"description":"Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.","version":"2026.10.27","plugins":[{"name":"pm-claude","source":"./plugins/pm-claude","description":"Native pm CLI integration for Claude Code — 32 MCP tools, 14 workflow skills with slash invocations, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.","version":"2026.10.27","author":{"name":"unbrained","url":"https://github.com/unbraind/pm-cli"},"homepage":"https://github.com/unbraind/pm-cli","repository":"https://github.com/unbraind/pm-cli","license":"MIT","keywords":["pm-cli","project-management","mcp","tasks","agents","workflows","git-native","task-tracker","ai"],"category":"productivity"}]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.10.25",
3
+ "version": "2026.10.27",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.28.5",
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-beads","version":"2026.10.25","private":true,"type":"module","description":"First-party pm package for importing Beads JSONL records.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-beads"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","beads"],"pm":{"aliases":["beads"],"extensions":["extensions/beads"],"catalog":{"display_name":"Beads Import","category":"migration","summary":"Import Beads JSONL records into pm while preserving source IDs.","tags":["migration","beads","import"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-beads","version":"2026.10.27","private":true,"type":"module","description":"First-party pm package for importing Beads JSONL records.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-beads"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","beads"],"pm":{"aliases":["beads"],"extensions":["extensions/beads"],"catalog":{"display_name":"Beads Import","category":"migration","summary":"Import Beads JSONL records into pm while preserving source IDs.","tags":["migration","beads","import"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-beads","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -6,10 +6,10 @@
6
6
  import { runEvent, runMeet, runRemind, type CommandDefinition } from "@unbrained/pm-cli/sdk";
7
7
  import { schedulingCommandDefinitions } from "./command-definitions.ts";
8
8
 
9
- /** Scheduling handlers preserve native SDK validation, history, and output receipts. */
9
+ /** Preserve CLI focus for absent policy, explicit opt-out, and native SDK validation/history/receipts. */
10
10
  export const schedulingCommands: CommandDefinition[] = schedulingCommandDefinitions.map((definition) => ({
11
11
  ...definition,
12
12
  run: (context) => (
13
13
  definition.name === "meet" ? runMeet : definition.name === "event" ? runEvent : runRemind
14
- )(context.args[0], context.options, context.global),
14
+ )(context.args[0], { ...context.options, inheritFocus: (context.options.inheritFocus ?? true) === true }, context.global),
15
15
  }));
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-calendar","version":"2026.10.25","private":true,"type":"module","description":"First-party pm package for calendar and agenda views.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-calendar"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","calendar","agenda"],"pm":{"aliases":["calendar"],"extensions":["extensions/calendar"],"catalog":{"display_name":"Calendar Views","category":"workflow","summary":"Show agenda, day, week, and month views for deadlines, reminders, and scheduled events.","tags":["calendar","agenda","workflow"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-calendar","version":"2026.10.27","private":true,"type":"module","description":"First-party pm package for calendar and agenda views.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-calendar"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","calendar","agenda"],"pm":{"aliases":["calendar"],"extensions":["extensions/calendar"],"catalog":{"display_name":"Calendar Views","category":"workflow","summary":"Show agenda, day, week, and month views for deadlines, reminders, and scheduled events.","tags":["calendar","agenda","workflow"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-calendar","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}