@unbrained/pm-cli 2026.10.20 → 2026.10.22

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 (196) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +142 -77
  3. package/dist/cli/error-guidance.d.ts +8 -0
  4. package/dist/cli/error-guidance.js +2 -2
  5. package/dist/cli/main.js +1 -1
  6. package/dist/cli/register-list-query.js +2 -2
  7. package/dist/cli/register-operations.js +1 -1
  8. package/dist/cli-bundle/bundle-manifest.json +1 -1
  9. package/dist/cli-bundle/chunks/{chunk-QMZ73FCW.js → chunk-2B5HAZFK.js} +2 -2
  10. package/dist/cli-bundle/chunks/chunk-35ISFIPC.js +113 -0
  11. package/dist/cli-bundle/chunks/chunk-4D25HF3V.js +2 -0
  12. package/dist/cli-bundle/chunks/chunk-5LSN7K4N.js +2 -0
  13. package/dist/cli-bundle/chunks/chunk-7OTYULIJ.js +30 -0
  14. package/dist/cli-bundle/chunks/{chunk-GHJOMRSF.js → chunk-AOAQDCXX.js} +2 -2
  15. package/dist/cli-bundle/chunks/{chunk-ZA3XXHEE.js → chunk-BAIVTLJM.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-LS55VKRK.js → chunk-C37RDYZI.js} +2 -2
  17. package/dist/cli-bundle/chunks/{chunk-YT2Z3JPC.js → chunk-E3JC3WQL.js} +47 -47
  18. package/dist/cli-bundle/chunks/{chunk-YECCKB4E.js → chunk-GWIGZDRS.js} +2 -2
  19. package/dist/cli-bundle/chunks/{chunk-YTHI5DTH.js → chunk-HC2DCGFA.js} +2 -2
  20. package/dist/cli-bundle/chunks/chunk-IB7UB5TE.js +2 -0
  21. package/dist/cli-bundle/chunks/chunk-J444ZX23.js +126 -0
  22. package/dist/cli-bundle/chunks/{chunk-VLJLWZBO.js → chunk-LIC5EUQS.js} +2 -2
  23. package/dist/cli-bundle/chunks/{chunk-KU4Q3MSI.js → chunk-MV3KYY2A.js} +6 -6
  24. package/dist/cli-bundle/chunks/chunk-O67N62DT.js +2 -0
  25. package/dist/cli-bundle/chunks/{chunk-TZU6U5ZE.js → chunk-PCPOTFJP.js} +2 -2
  26. package/dist/cli-bundle/chunks/chunk-TNU3XVPC.js +20 -0
  27. package/dist/cli-bundle/chunks/{chunk-7ZOIZ2AZ.js → chunk-URV4VHQ4.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-YW6SIKYP.js → chunk-UYYTV2TX.js} +2 -2
  29. package/dist/cli-bundle/chunks/chunk-VO3KDIU7.js +9 -0
  30. package/dist/cli-bundle/chunks/{indexed-receipt-blobs-U7VGKIYC.js → indexed-receipt-blobs-L3BOTMZN.js} +2 -2
  31. package/dist/cli-bundle/chunks/mutation-admission-TATOFEXF.js +2 -0
  32. package/dist/cli-bundle/chunks/{register-list-query-NNDV6F6I.js → register-list-query-GULR2IYO.js} +5 -5
  33. package/dist/cli-bundle/chunks/{register-mutation-3GCBSNQS.js → register-mutation-HLSQ4WVW.js} +4 -4
  34. package/dist/cli-bundle/chunks/register-operations-FE3GGA7O.js +2 -0
  35. package/dist/cli-bundle/chunks/register-setup-XUIKAIZA.js +2 -0
  36. package/dist/cli-bundle/chunks/{settlement-hook-CLRGA6O7.js → settlement-hook-UVFYSBMU.js} +2 -2
  37. package/dist/cli-bundle/chunks/stage-QCPZBZRC.js +2 -0
  38. package/dist/cli-bundle/focused-chunks/chunk-25L3L2PF.js +2 -0
  39. package/dist/cli-bundle/focused-chunks/chunk-25NQRZ7J.js +8 -0
  40. package/dist/cli-bundle/focused-chunks/chunk-2GFTVXKZ.js +8 -0
  41. package/dist/cli-bundle/focused-chunks/{chunk-HUZAXSIJ.js → chunk-3LWH2RJC.js} +2 -2
  42. package/dist/cli-bundle/focused-chunks/chunk-46HBJC6J.js +2 -0
  43. package/dist/cli-bundle/focused-chunks/chunk-A52W6GLA.js +2 -0
  44. package/dist/cli-bundle/focused-chunks/chunk-CB7TSZ7P.js +3 -0
  45. package/dist/cli-bundle/focused-chunks/{chunk-VLSER3XW.js → chunk-CX5FNEFC.js} +2 -2
  46. package/dist/cli-bundle/focused-chunks/chunk-DVNUHTVK.js +9 -0
  47. package/dist/cli-bundle/focused-chunks/{chunk-LJPUJ2KK.js → chunk-EHPRSWJE.js} +2 -2
  48. package/dist/cli-bundle/focused-chunks/chunk-GC4VMLXL.js +20 -0
  49. package/dist/cli-bundle/focused-chunks/chunk-GHQVM6K6.js +2 -0
  50. package/dist/cli-bundle/focused-chunks/{chunk-KKRFSI2N.js → chunk-GVKYTDOH.js} +2 -2
  51. package/dist/cli-bundle/focused-chunks/{chunk-NI6NS44Q.js → chunk-KM77WU5U.js} +2 -2
  52. package/dist/cli-bundle/focused-chunks/chunk-QGDKWULS.js +2 -0
  53. package/dist/cli-bundle/focused-chunks/chunk-QWKCQ5PW.js +91 -0
  54. package/dist/cli-bundle/focused-chunks/chunk-SOVXHW6Z.js +2 -0
  55. package/dist/cli-bundle/focused-chunks/chunk-SVOOGGAK.js +2 -0
  56. package/dist/cli-bundle/focused-chunks/chunk-SXVJRLLP.js +2 -0
  57. package/dist/cli-bundle/focused-chunks/{chunk-E4II2D2B.js → chunk-TMN3RAXZ.js} +2 -2
  58. package/dist/cli-bundle/focused-chunks/{chunk-F7FD25TG.js → chunk-UQ5JPBY2.js} +11 -11
  59. package/dist/cli-bundle/focused-chunks/chunk-UUPJ6OZL.js +26 -0
  60. package/dist/cli-bundle/focused-chunks/chunk-VYAZND5Q.js +78 -0
  61. package/dist/cli-bundle/focused-chunks/chunk-W2CND3BD.js +65 -0
  62. package/dist/cli-bundle/focused-chunks/{chunk-ZGEK57KD.js → chunk-XX5JQCLF.js} +2 -2
  63. package/dist/cli-bundle/focused-chunks/{indexed-receipt-blobs-H2G6CCGO.js → indexed-receipt-blobs-AAQOKO5B.js} +2 -2
  64. package/dist/cli-bundle/focused-chunks/mutation-admission-TBKR4KRM.js +2 -0
  65. package/dist/cli-bundle/focused-chunks/{settlement-hook-5SNBBT7C.js → settlement-hook-MNCHFCAX.js} +2 -2
  66. package/dist/cli-bundle/focused-chunks/stage-RM6MJIMT.js +2 -0
  67. package/dist/cli-bundle/main.js +21 -21
  68. package/dist/cli-bundle/sdk-authoring.js +1 -1
  69. package/dist/cli-bundle/sdk-contracts.js +2 -2
  70. package/dist/cli-bundle/sdk-core.js +23 -23
  71. package/dist/cli-bundle/sdk-governance.js +1 -1
  72. package/dist/cli-bundle/sdk-graph.js +1 -1
  73. package/dist/cli-bundle/sdk-merge.js +58 -57
  74. package/dist/cli-bundle/sdk-query.js +1 -1
  75. package/dist/cli-bundle/sdk-runtime.js +1 -1
  76. package/dist/cli-bundle/sdk-testing.js +1 -1
  77. package/dist/cli-bundle/sdk.js +7 -7
  78. package/dist/core/item/actionability.js +1 -1
  79. package/dist/core/lock/lock-gc.d.ts +12 -5
  80. package/dist/core/lock/lock-gc.js +1 -1
  81. package/dist/core/lock/lock-owner.d.ts +33 -0
  82. package/dist/core/lock/lock-owner.js +2 -0
  83. package/dist/core/lock/lock.d.ts +11 -22
  84. package/dist/core/lock/lock.js +4 -3
  85. package/dist/core/output/output.js +3 -3
  86. package/dist/core/shared/errors.d.ts +2 -0
  87. package/dist/core/shared/errors.js +1 -1
  88. package/dist/mcp/server.d.ts +2 -2
  89. package/dist/mcp/server.js +1 -1
  90. package/dist/sdk/agent/command-recovery.d.ts +2 -0
  91. package/dist/sdk/agent/command-recovery.js +1 -1
  92. package/dist/sdk/cli-contracts/runtime-contracts.js +1 -1
  93. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +6 -0
  94. package/dist/sdk/cli-contracts/tool-option-contracts.js +1 -1
  95. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  96. package/dist/sdk/context-intent-contracts.d.ts +13 -0
  97. package/dist/sdk/context-intent-contracts.js +1 -1
  98. package/dist/sdk/contracts.d.ts +1 -1
  99. package/dist/sdk/contracts.js +1 -1
  100. package/dist/sdk/core.d.ts +2 -2
  101. package/dist/sdk/core.js +1 -1
  102. package/dist/sdk/define.d.ts +15 -16
  103. package/dist/sdk/define.js +1 -1
  104. package/dist/sdk/dependencies.js +1 -1
  105. package/dist/sdk/extension-command-context.js +2 -2
  106. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  107. package/dist/sdk/governance/assurance-action.js +1 -1
  108. package/dist/sdk/governance/assurance.js +1 -1
  109. package/dist/sdk/governance/health.js +2 -2
  110. package/dist/sdk/merge/install.js +2 -2
  111. package/dist/sdk/output/list-envelope.js +1 -1
  112. package/dist/sdk/pagination.d.ts +3 -3
  113. package/dist/sdk/pagination.js +1 -1
  114. package/dist/sdk/public-surface.json +1 -1
  115. package/dist/sdk/query/context.d.ts +5 -0
  116. package/dist/sdk/query/context.js +2 -2
  117. package/dist/sdk/query/list.d.ts +2 -0
  118. package/dist/sdk/query/list.js +1 -1
  119. package/dist/sdk/query/projection-contracts.d.ts +1 -1
  120. package/dist/sdk/query/projection-contracts.js +1 -1
  121. package/dist/sdk/read-output/session-result.d.ts +39 -0
  122. package/dist/sdk/read-output/session-result.js +2 -0
  123. package/dist/sdk/read-output-contracts.d.ts +18 -5
  124. package/dist/sdk/read-output-contracts.js +1 -1
  125. package/dist/sdk/read-output-session.d.ts +2 -0
  126. package/dist/sdk/read-output-session.js +1 -1
  127. package/dist/sdk/relationship-context.js +1 -1
  128. package/dist/sdk/runtime/mutation-admission.d.ts +2 -0
  129. package/dist/sdk/runtime/mutation-admission.js +2 -0
  130. package/dist/sdk/runtime-input.d.ts +2 -0
  131. package/dist/sdk/runtime-input.js +1 -1
  132. package/dist/sdk/runtime-primitives.d.ts +6 -0
  133. package/dist/sdk/runtime-primitives.js +1 -1
  134. package/dist/sdk/runtime.d.ts +10 -8
  135. package/dist/sdk/runtime.js +1 -1
  136. package/dist/sdk/test/execution.d.ts +1 -0
  137. package/dist/sdk/test/execution.js +2 -2
  138. package/dist/sdk/workspace.d.ts +3 -1
  139. package/dist/sdk/workspace.js +8 -5
  140. package/docs/AGENT_RUNTIME_PRIMITIVES.md +9 -0
  141. package/docs/ASSURANCE.md +17 -2
  142. package/docs/COMMANDS.md +17 -3
  143. package/docs/CONFIGURATION.md +38 -0
  144. package/docs/CONTEXT_RELEVANCE.md +15 -0
  145. package/docs/DEVELOPMENT_DEPENDENCY_SECURITY.md +56 -3
  146. package/docs/MCP_OPTION_CONFORMANCE.md +27 -1
  147. package/docs/MERGE_SAFETY.md +8 -0
  148. package/docs/READ_OUTPUT_CONTRACTS.md +79 -0
  149. package/docs/RELATIONSHIP_GRAPH.md +15 -0
  150. package/docs/RELEASING.md +8 -0
  151. package/docs/SDK.md +104 -7
  152. package/docs/TESTING.md +23 -0
  153. package/docs/agent-task-token-baseline.json +1 -1
  154. package/marketplace.json +1 -1
  155. package/package.json +1 -1
  156. package/packages/pm-beads/package.json +1 -1
  157. package/packages/pm-calendar/package.json +1 -1
  158. package/packages/pm-command-kit/package.json +1 -1
  159. package/packages/pm-digital-twin/package.json +1 -1
  160. package/packages/pm-governance-audit/package.json +1 -1
  161. package/packages/pm-guide-shell/package.json +1 -1
  162. package/packages/pm-kanban/package.json +1 -1
  163. package/packages/pm-lifecycle-hooks/package.json +1 -1
  164. package/packages/pm-linked-test-adapters/package.json +1 -1
  165. package/packages/pm-search-advanced/package.json +1 -1
  166. package/packages/pm-templates/package.json +1 -1
  167. package/packages/pm-todos/package.json +1 -1
  168. package/packages/pm-vcs/package.json +1 -1
  169. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  170. package/plugins/pm-claude/package.json +1 -1
  171. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  172. package/plugins/pm-codex/package.json +1 -1
  173. package/plugins/pm-codex/plugin.json +1 -1
  174. package/runtime-dependencies.json +1 -1
  175. package/dist/cli-bundle/chunks/chunk-2GGGOD7P.js +0 -30
  176. package/dist/cli-bundle/chunks/chunk-7NHA5K77.js +0 -126
  177. package/dist/cli-bundle/chunks/chunk-PNPE2OVJ.js +0 -112
  178. package/dist/cli-bundle/chunks/chunk-PTL3TBT6.js +0 -20
  179. package/dist/cli-bundle/chunks/chunk-QETMESEB.js +0 -6
  180. package/dist/cli-bundle/chunks/chunk-QQYCB2LO.js +0 -2
  181. package/dist/cli-bundle/chunks/register-operations-YKDGNKUL.js +0 -2
  182. package/dist/cli-bundle/chunks/register-setup-AOUZQQWB.js +0 -2
  183. package/dist/cli-bundle/chunks/stage-6QXYRMSU.js +0 -2
  184. package/dist/cli-bundle/focused-chunks/chunk-37SU7BZI.js +0 -3
  185. package/dist/cli-bundle/focused-chunks/chunk-6IU7BESB.js +0 -65
  186. package/dist/cli-bundle/focused-chunks/chunk-AS3MOBO3.js +0 -25
  187. package/dist/cli-bundle/focused-chunks/chunk-AW35RDKA.js +0 -78
  188. package/dist/cli-bundle/focused-chunks/chunk-GYHZ7W6O.js +0 -2
  189. package/dist/cli-bundle/focused-chunks/chunk-H5Q2HUU6.js +0 -8
  190. package/dist/cli-bundle/focused-chunks/chunk-J6EYUGAR.js +0 -6
  191. package/dist/cli-bundle/focused-chunks/chunk-JEXZEIAX.js +0 -91
  192. package/dist/cli-bundle/focused-chunks/chunk-KDGUIIRU.js +0 -20
  193. package/dist/cli-bundle/focused-chunks/chunk-MQ42BFGX.js +0 -2
  194. package/dist/cli-bundle/focused-chunks/chunk-VAYS754X.js +0 -2
  195. package/dist/cli-bundle/focused-chunks/chunk-VS6VTWTZ.js +0 -8
  196. package/dist/cli-bundle/focused-chunks/stage-EMTISXR7.js +0 -2
@@ -1,7 +1,9 @@
1
1
  # Development dependency security
2
2
 
3
3
  Tracked by [pm-r61juc](../.agents/pm/issues/pm-r61juc.toon) and
4
- [pm-fnx3np](../.agents/pm/issues/pm-fnx3np.toon).
4
+ [pm-fnx3np](../.agents/pm/issues/pm-fnx3np.toon), with independent advisory evidence in
5
+ [pm-eqxjzl](../.agents/pm/tasks/pm-eqxjzl.toon) and MCP/Vite remediation in
6
+ [pm-5sgx37](../.agents/pm/issues/pm-5sgx37.toon).
5
7
 
6
8
  Development tools execute during tests, benchmarks and release preparation.
7
9
  Their dependencies have the same admission requirement as production packages:
@@ -12,8 +14,34 @@ pnpm install --frozen-lockfile
12
14
  pnpm quality:dependencies
13
15
  ```
14
16
 
15
- This runs the full `pnpm audit`, with no production-only or severity filter,
16
- then verifies the installed CodSpeed bundle policy. Network/audit errors,
17
+ This collects the full `pnpm audit --json`, with no production-only or severity
18
+ filter, and queries every npm name/version in the pnpm v9 lockfile against
19
+ [OSV querybatch](https://google.github.io/osv.dev/post-v1-querybatch/). The inventory
20
+ includes development, optional and platform-specific packages. Either source's
21
+ positive result blocks, even when the other returns zero. Unsupported resolutions,
22
+ empty inventories, malformed or partial responses, pagination and network failures
23
+ also block. Collection has bounded batch sizes, deadlines and no automatic retries.
24
+ Only public npm names and versions are sent to OSV.
25
+
26
+ The ignored local `.cache/dependency-security/receipt.json` records input hashes,
27
+ complete per-package OSV coverage, feed retrieval times, registry counts and
28
+ advisory IDs. Collection invalidates the prior receipt before querying. Database
29
+ update times are explicitly unknown: fresh retrieval does not prove a feed is
30
+ current. The SDK-owned `repository-static-quality` assurance gate composes a
31
+ `repository-quality/dependency-advisories` provider that verifies this receipt
32
+ without network access. It rejects evidence older than fifteen minutes, changed
33
+ manifests or lockfiles, incomplete coverage and unavailable sources. Fresh evidence
34
+ is required again on each CI/static or release run. Static checks refresh collection
35
+ immediately before SDK assurance evaluation, which verifies advisory evidence
36
+ before slower providers. The blocking registry command settles before OSV starts
37
+ its network deadlines.
38
+
39
+ CI retains this single receipt after successful and failed static jobs, with a
40
+ separate artifact name for each run attempt and seven-day retention. Inspect both
41
+ feeds before diagnosing a blocked collector: a positive advisory is a refusal,
42
+ even when the other feed is clean.
43
+
44
+ The command then verifies the installed CodSpeed bundle policy. Network/audit errors,
17
45
  missing packages, incomplete policy entries, changed package files, and unreviewed
18
46
  upgrades all fail. `quality:static` includes this command, so the existing CI,
19
47
  nightly quality and release paths enforce it. The registry-owned local
@@ -27,6 +55,31 @@ defaults to the `latest` image. The workflow contract checks both values on
27
55
  every TruffleHog step. Recheck the action's executable selectors when renewing
28
56
  its commit pin.
29
57
 
58
+ ## Vitest mocker advisory pair
59
+
60
+ [pm-vitest4112](../.agents/pm/tasks/pm-vitest4112.toon) coordinates the
61
+ [manual-registration finding](../.agents/pm/issues/pm-vitestmanual.toon) and
62
+ [Windows redirect finding](../.agents/pm/issues/pm-vitestredirect.toon).
63
+ [GHSA-qxg6-89mg-rqv8](https://github.com/advisories/GHSA-qxg6-89mg-rqv8)
64
+ and [GHSA-xp26-3454-mjgp](https://github.com/advisories/GHSA-xp26-3454-mjgp)
65
+ affect the previously locked `@vitest/mocker` 4.1.11. The compatible Vitest and
66
+ coverage-provider pair now requires 4.1.12, whose shared mock-source generator
67
+ serializes module URLs and export names, including asynchronous rebinding, and
68
+ whose public redirect handler normalizes backslashes before the file allowlist
69
+ check. Both fixes apply to public mocker/interceptor WebSocket handlers. The
70
+ repository's Node test configurations do not register these handlers, so the
71
+ affected development dependency does not establish an exploitable CLI or SDK
72
+ route.
73
+
74
+ The retained hosted OSV receipt identified both advisories while the registry
75
+ audit returned zero. Keep full-lock admission mandatory and verify the patched
76
+ graph against both feeds. This patch keeps Vitest 4, the CodSpeed peer contract
77
+ and the Vite 7 override; the broader Vitest 5 migration remains separate. The
78
+ installed-handler regressions run in coverage and the required native Windows
79
+ cohort, whose aggregate refuses failed, canceled or skipped partitions. The
80
+ October 15 patch releases meet pnpm's one-day minimum age on October 21 without
81
+ an exclusion. Dependabot's seven-day scheduling cooldown is unchanged.
82
+
30
83
  ## Indexed source-map offsets
31
84
 
32
85
  [pm-dba47](../.agents/pm/issues/pm-dba47.toon) tracks Dependabot alert 47 and
@@ -1,12 +1,38 @@
1
1
  # MCP Option Conformance
2
2
 
3
- Tracked by [pm-v0s2rm](../.agents/pm/chores/pm-v0s2rm.toon).
3
+ Tracked by [pm-v0s2rm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/chores/pm-v0s2rm.toon), [pm-gh1538](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1538.toon), and [pm-ap7ilf](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ap7ilf.toon).
4
+ These repository-only tracking records are excluded from npm.
4
5
 
5
6
  An integration test can pass while an undeclared option is ignored. That leaves
6
7
  the test asserting a behavior it never exercised. The repository therefore
7
8
  treats emitted MCP unknown-option diagnostics as test failures, while the
8
9
  production server retains its advisory warning behavior for clients.
9
10
 
11
+ `pm_create` and `pm_update` accept the canonical mutation fields advertised by
12
+ their input schemas either at the top level or inside `options`. `pm_run` with
13
+ the corresponding action uses the same SDK normalization. Explicit nested
14
+ options take precedence, including CLI
15
+ aliases for the same field. Repeatable inputs, numeric values, and linked-resource
16
+ aliases use the shared mutation contracts before persistence. Native SDK `run`
17
+ callers continue to put update fields inside `options`.
18
+
19
+ Malformed option containers, values discarded from known scalar fields, and malformed repeatable
20
+ entries refuse before execution with `invalid_argument_value` and
21
+ `changed: false`. Declared boolean mutation fields, their aliases, and receipt
22
+ controls must be booleans, including `false`; this covers clear/replace flags,
23
+ parent/dependency exceptions, duplicate allowance, and `force`. These checks preserve project-defined
24
+ custom fields and template-based type resolution while preventing a bad field
25
+ from disappearing as a sibling field is written.
26
+ Array values that become CLI CSV inputs, such as `tags`, must contain only
27
+ strings and are checked before conversion. Validation follows nested precedence:
28
+ an explicit valid nested value replaces a flat value before either is normalized.
29
+
30
+ For example, `{ "id": "pm-one", "options": {}, "priority": 4 }` changes priority;
31
+ with `"options": { "priority": 2 }`, priority becomes `2`. Create also honors its
32
+ advertised explicit `id`, `deadline`, and other metadata. Regressions check the
33
+ discovered schema, persisted values and verified history, and compare item and
34
+ history bytes after invalid mutations to prove atomic refusal.
35
+
10
36
  Every run using [vitest.config.ts](../vitest.config.ts) installs
11
37
  [McpContractReporter](../scripts/mcp-contract-reporter.mts). The reporter records
12
38
  the emitting file, full test name, option, tool, and action, and rejects the run
@@ -667,6 +667,14 @@ Never remove conflict markers manually while leaving the authoritative item and
667
667
 
668
668
  `transactions/` and `checkpoints/` are per-branch crash-recovery state, not shared project context. `pm init` places both below the resolved tracker root in the managed `.gitignore` block, including custom `--pm-path` roots.
669
669
 
670
+ Each tracker sharing a repository retains its own cache exclusions and merge
671
+ patterns in either initialization order. Tracker names containing Git wildcard
672
+ characters are escaped as literal paths, while the generated item/history globs
673
+ remain active. Unrelated user rules and curated evaluation files are preserved.
674
+ These contracts are tracked by
675
+ [pm-nl60tbxzkjwp](../.agents/pm/issues/pm-nl60tbxzkjwp.toon) and
676
+ [pm-47wuv8awpqvj](../.agents/pm/issues/pm-47wuv8awpqvj.toon).
677
+
670
678
  Ignore rules do not remove files that were already committed. `pm health`
671
679
  (`integrity`) and `pm validate` (`storage_integrity`) therefore scan Git's
672
680
  index for tracked files below `runtime/`, `search/`, `locks/`,
@@ -85,8 +85,87 @@ If brief still exceeds the ceiling, normal compaction and eventual refusal
85
85
  apply. `estimated_tokens` measures the emitted envelope;
86
86
  `omitted_result_estimated_tokens` measures the useful result that could not fit.
87
87
 
88
+ ## Typed producer pages
89
+
90
+ Tracked by [pm-oybmsd](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-oybmsd.toon),
91
+ [pm-jqgkis](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-jqgkis.toon), and
92
+ [pm-qal1uw](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-qal1uw.toon)
93
+ (repository-only tracker records excluded from npm).
94
+ Native `PmClient.list`, `search`, and `context` reads and their standalone
95
+ convenience functions return sparse metadata when `after` resumes a producer
96
+ page. Retain the first page's filters, projection, sorting, totals and completeness
97
+ certificate. Subsequent pages carry `continuation_contract` with
98
+ `metadata: "reference"` and `restore_with: "omit --after"`; repeated metadata
99
+ is optional in `PmReadOutputProducerContinuation<Result>`. Follow `next_cursor`
100
+ until it is empty, rather than relying on the optional `has_more` field.
101
+
102
+ Calls whose options contain no producer cursor retain their first-page types.
103
+ Omitting the options argument has the same precise type as passing `{}` for
104
+ client and standalone `list`, `context`, and `search` calls; it does not imply
105
+ that an explicit budget, session, or output cursor was supplied.
106
+ Options with an optional cursor can return either page shape. When a budget,
107
+ session, or output cursor is possible, first use `isReadOutputBudgetExceeded`
108
+ to narrow the omission branch before accessing rows. This remains required for
109
+ unions of option shapes: a budgeted variant cannot be erased by an unbudgeted
110
+ variant. The low-level query producers retain their original result contracts;
111
+ metadata suppression belongs to the shared native SDK transport.
112
+
113
+ ```ts
114
+ const first = await client.list({ brief: true, limit: "10" });
115
+ consume(first.items);
116
+ let cursor = first.next_cursor;
117
+ while (cursor) {
118
+ const page = await client.list({ brief: true, limit: "10", after: cursor });
119
+ consume(page.items);
120
+ cursor = page.next_cursor;
121
+ }
122
+ ```
123
+
88
124
  ## Cross-Call Context Sessions
89
125
 
126
+ Typed session results are tracked by
127
+ [pm-t1p1jv](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-t1p1jv.toon)
128
+ (repository-only tracker record excluded from npm). After narrowing budget
129
+ omission with `isReadOutputBudgetExceeded`, use `isReadOutputSessionReference`
130
+ from the SDK or `sdk/core` before accessing row prose or a search hit's nested
131
+ `item`. A reference contains only `id` and `context_ref`. Calls with no session,
132
+ including calls that specify only an output budget, retain their ordinary row
133
+ types. The direct `applyReadOutputDimensions` helper also infers session
134
+ capability from its options, including the accepted `output_session` spelling.
135
+ Unspecified or explicitly undefined session options retain ordinary rows;
136
+ optional, union, or dynamically typed session options admit references.
137
+ `PmReadOutputSessionResult<Result>` models literal `row_contract.row_keys`
138
+ paths (including nested arrays and keyed maps). Dynamic path declarations
139
+ conservatively admit references in nested collections, and envelopes without a
140
+ row declaration use the top-level array fallback. Keep package row paths literal
141
+ with `as const` to preserve precision in package result declarations.
142
+
143
+ ```ts
144
+ const page = await client.context({ outputSession: sessionState });
145
+ if (!isReadOutputBudgetExceeded(page)) {
146
+ for (const row of page.high_level) {
147
+ if (isReadOutputSessionReference(row)) consumeReference(row.context_ref);
148
+ else consumeTitle(row.title);
149
+ }
150
+ }
151
+ ```
152
+
153
+ Read-option recovery is tracked by
154
+ [pm-7gpx34](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-7gpx34.toon)
155
+ (repository-only tracker record excluded from npm). For explicit static encoding,
156
+ use `--output-format toon|json` across read commands. Completeness uses
157
+ `--output-include full` on list, search and get; context detail depth uses
158
+ `--depth full`. These controls retain the normal row and token ceilings.
159
+ When `context --full`, `list/search --depth full`, or `--toon` on list, search,
160
+ context or get is refused,
161
+ the error provides `recovery.suggested_retry_args` for the same command with the
162
+ supported spelling. The SDK's `resolveReadOptionRetryArgs` exposes the same
163
+ token-preserving correction. Conflicting controls or ambiguous operands do not
164
+ receive a guessed retry.
165
+ An explicit `--json` conflicts with `--toon`, so that invocation receives no
166
+ encoding-changing retry. Non-conflicting TOON refusals include the corrected
167
+ command in human output without requiring JSON diagnostics.
168
+
90
169
  `--output-session <json>` / `outputSession` composes the four per-call
91
170
  dimensions across a request group. The caller supplies versioned state and
92
171
  passes the returned `read_session.next_state` to the next read:
@@ -238,6 +238,21 @@ Every returned node is explainable: `role` names its semantic family (`prerequis
238
238
 
239
239
  `meta.completeness` reports result quality: the exact in-memory kernel emits `complete` or `truncated`, and the contract reserves `sampled`, `approximate`, `stale_index`, and `redacted` for index-backed or policy-filtered providers so consumers can branch on one field.
240
240
 
241
+ The packer orders direct prerequisite and ancestor endpoints before optional
242
+ descendants or related nodes, reserves their direct relationship costs, and
243
+ emits root-incident edges first. An oversized edge is skipped so later feasible
244
+ edges can still be returned. The same order governs cursor pages; the cursor
245
+ fingerprint identifies this packing policy and rejects earlier-policy cursors. An
246
+ edge limit or a budget too small for an endpoint and its edges can still omit
247
+ evidence: inspect the direct-family totals, omitted counts and completeness
248
+ before using the packet to make a decision. The native adapter also reports
249
+ `relationship_context_bounds` in `omission_receipt` whenever the producer is
250
+ truncated. Increase the relevant bounds or follow the node cursor for more
251
+ detail; a full projection alone does not remove traversal limits.
252
+
253
+ Tracked by [pm-gh1534](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1534.toon)
254
+ (repository tracker records are excluded from npm).
255
+
241
256
  Node, edge, depth, kind, direction, and token bounds are independent. The cursor fingerprint covers semantic filters and traversal shape, so it is rejected when reused for a different root or query. Output remains a plain object suitable for TOON, JSON, JSONL, MCP, or a custom UI; adapters own rendering and do not reimplement traversal.
242
257
 
243
258
  The native adapter is `pm deps <id> --format context`. It is also available through `PmClient.deps`, `runAction({ action: "deps" })`, and the MCP `pm_deps` tool. `--max-depth`, `--node-limit`, `--edge-limit`, `--token-budget`, `--cursor`, `--direction`, and repeatable or comma-separated `--kind` map directly to the public SDK context options; `--summary` keeps only counts. Unknown `--kind` values fail fast with the registered-kind list instead of silently matching nothing. Tree and graph formats share those first four bounds, use safe defaults when omitted, and report deterministic truncation metadata instead of recursively expanding a cyclic or multiply-linked graph without limit.
package/docs/RELEASING.md CHANGED
@@ -315,6 +315,14 @@ missing locked package. npm 12 ignores published shrinkwraps; shipping
315
315
  a shrinkwrap alone therefore cannot enforce this contract. SDK consumers
316
316
  supply the bounded optional Node types peer themselves.
317
317
 
318
+ Physical entrypoint verification is tracked by
319
+ [pm-tl7vlu](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-tl7vlu.toon)
320
+ (repository-only tracker record excluded from npm). The dependency advisory CLI
321
+ resolves both its invocation and module to physical paths, so directory aliases
322
+ and Node's symlink-preserving main-module mode still execute verification and
323
+ return a receipt or failure status. Module imports expose the collector without
324
+ starting verification.
325
+
318
326
  Push the final implementation commit through a reviewed pull request first,
319
327
  wait for DeepScan and CodeFactor to finish on that reviewed SHA, then run the
320
328
  canonical registry-owned preflight:
package/docs/SDK.md CHANGED
@@ -164,6 +164,19 @@ snapshot. Breaking SDK changes require a date-based release and matching
164
164
  package compatibility bounds or migration guidance. Never refresh the snapshot
165
165
  merely to silence an unexplained diff.
166
166
 
167
+ The mutation-admission update adds optional `changed?: false` to
168
+ `PmCliErrorContext`. The conservative signature gate records this interface
169
+ addition with a breaking acknowledgement; existing context objects and error
170
+ codes remain valid. Consumers need no data migration or new dependency bounds.
171
+ When adopting this update, read `error.context?.changed === false` as proof of a
172
+ preflight refusal. An absent property gives no guarantee about writes; do not
173
+ coerce it to `false` or treat an executed failure as safe to retry. Consumers
174
+ that enumerate error keys should accept the additional optional property.
175
+ JavaScript create/update callers must also remove misspelled keys and move
176
+ mutation fields into `options` on generic `run` calls: these requests now fail
177
+ instead of silently dropping fields. See [Robust Automation Pattern](#robust-automation-pattern)
178
+ for supported aliases and runtime schema discovery.
179
+
167
180
  The snapshot also records an aggregate-completeness census. Every public symbol
168
181
  from every non-testing SDK subpath must be available from
169
182
  `@unbrained/pm-cli/sdk`; deliberate test-only exclusions require a named reason.
@@ -210,6 +223,36 @@ follow the migration guidance for changed unions or error codes. The shared
210
223
  [primitive inventory](SDK_PRIMITIVE_INVENTORY.md) records CLI/MCP ownership:
211
224
  presentation modules import the SDK and have zero private-core edges.
212
225
 
226
+ ### Lock ownership and recovery
227
+
228
+ Use the public `acquireLock` primitive when a package must serialize its own
229
+ state changes. Always await its release in `finally`:
230
+
231
+ ```ts
232
+ import { acquireLock } from "@unbrained/pm-cli/sdk";
233
+
234
+ async function writePackageState(pmRoot: string, write: () => Promise<void>) {
235
+ const release = await acquireLock(pmRoot, "example.state", 3600, "example-package", false, true, 30_000);
236
+ try {
237
+ await write();
238
+ } finally {
239
+ await release();
240
+ }
241
+ }
242
+ ```
243
+
244
+ The built-in provider automatically recovers a provably dead original Linux
245
+ owner before TTL. Unknown owners retain the existing lease policy. Conflicts
246
+ expose the lock identity, observed process state and wait advice through
247
+ `PmCliError.context`. Force does not bypass an unexpired lock whose owner is
248
+ alive or unverifiable. TTL expiry permits removal regardless of owner liveness.
249
+ An expired holder can continue writing, so mutual exclusion beyond TTL is not
250
+ guaranteed. Choose a TTL longer than the critical section, or fence protected
251
+ resource writes at the caller. See
252
+ [Configuration](CONFIGURATION.md#common-settings) for host identity, local
253
+ recovery audit receipts and `PM_LOCK_WAIT_MS` precedence. Extension lock
254
+ providers retain responsibility for their own ownership and recovery policy.
255
+
213
256
  ### Portable merge settlement
214
257
 
215
258
  Tracked by [pm-gh1475](../.agents/pm/issues/pm-gh1475.toon) and
@@ -1659,6 +1702,16 @@ contract compact and fail-safe for newly added flags. Use
1659
1702
  package-authored query surface. `encodeQueryCursor`, `decodeQueryCursorState`, and
1660
1703
  `paginateQueryRows` remain the transport-neutral continuation primitives.
1661
1704
 
1705
+ `decodeQueryCursorEnvelope`, `decodeQueryCursorState`, and
1706
+ `resolveQueryCursorStart` accept an optional final `cursorFlag` argument
1707
+ (`"--after"`, the default, or `"--cursor"`) so package-authored queries can
1708
+ name their actual producer flag in refusal guidance. Relationship packets use
1709
+ `--cursor`. The deps action additionally returns a scoped executable
1710
+ `recovery.suggested_retry_args` for a fresh query after a malformed or mismatched
1711
+ cursor; it preserves traversal and output policy while removing the rejected
1712
+ producer cursor and stale output continuation. See
1713
+ [pm-ohgg1b](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-ohgg1b.toon).
1714
+
1662
1715
  At the storage boundary, the metadata cache maintains a rebuildable SQLite
1663
1716
  query projection under the same source cursor and cross-process writer lock as
1664
1717
  the JSON metadata/body/collection tiers. Bounded default-order light `list`
@@ -1846,6 +1899,22 @@ compact rounded report metrics for stable machine output.
1846
1899
 
1847
1900
  ### Context relevance and evaluation
1848
1901
 
1902
+ Context test health is tracked by
1903
+ [pm-gh1535](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1535.toon)
1904
+ (repository tracker records are excluded from npm). `ContextResult.tests` counts
1905
+ the complete matching active population, independently of the focus page and
1906
+ token selection. `scope: "matching_active_items"` and `total_items` declare its
1907
+ denominator, including active items without tests. Draft, blocked-lifecycle and
1908
+ terminal items are excluded unless the project schema classifies their status
1909
+ as active. The main summary still counts every matching lifecycle status.
1910
+ Consumers constructing `TestHealthSummary` values must supply the new scope and
1911
+ denominator fields; consumers reading results can use them directly.
1912
+ Markdown limits failing-item identities to the effective focus limit (or the
1913
+ default context limit) and native token budget, with `items_failing_omitted`
1914
+ when detail is withheld. Population counters remain exact. Structured SDK and
1915
+ MCP results retain the complete failing-item collection before their normal
1916
+ read-output budget handling.
1917
+
1849
1918
  Tracked by [pm-4k6b](../.agents/pm/features/pm-4k6b.toon),
1850
1919
  [pm-h3no](../.agents/pm/tasks/pm-h3no.toon),
1851
1920
  [pm-3hps](../.agents/pm/tasks/pm-3hps.toon),
@@ -2576,7 +2645,8 @@ import { createPmCliExpectedError } from "@unbrained/pm-cli/sdk/runtime";
2576
2645
 
2577
2646
  ## Authoring Builders
2578
2647
 
2579
- Tracked: [pm-12tj](../.agents/pm/features/pm-12tj.toon) (design rationale: ADR [pm-3mph](../.agents/pm/decisions/pm-3mph.toon)).
2648
+ Tracked: [pm-12tj](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/features/pm-12tj.toon) (design rationale: ADR [pm-3mph](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/decisions/pm-3mph.toon)); exactness and literal inference: [pm-gh1539](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-gh1539.toon).
2649
+ These repository-only tracking records are excluded from npm.
2580
2650
 
2581
2651
  The `define*` builders are the authoring half of the `author → register → test`
2582
2652
  loop: they type a registration definition where you write it, before it ever
@@ -2619,7 +2689,8 @@ export function activate(api: ExtensionApi): void {
2619
2689
 
2620
2690
  Object-definition builders (`defineExtensionManifest`, `defineCommand`,
2621
2691
  `defineFlag`, `defineItemType`, `defineItemField`, `defineMigration`,
2622
- `defineSearchProvider`, `defineVectorStoreAdapter`) preserve the narrow literal
2692
+ `defineSearchProvider`, `defineVectorStoreAdapter`, `defineProjectProfile`) use
2693
+ const type parameters to preserve the narrow literal
2623
2694
  type. `defineExtensionManifest` additionally contract-checks the in-module
2624
2695
  manifest mirror where it is authored and pairs with `deriveExtensionCapabilities`
2625
2696
  (see [Declarative Authoring](#declarative-authoring)). Function-definition
@@ -2632,11 +2703,16 @@ parameter is contextually typed instead of falling back to `any`. The
2632
2703
  [`assertRegistered*`](#testing-helpers) helpers below verify these same
2633
2704
  definitions once registered.
2634
2705
 
2635
- The object builders reject unknown keys at the call site, including
2636
- `defineFlag`, item type/field, migration, search-provider, and vector-adapter
2637
- definitions. This catches misspellings without weakening the runtime registry's
2638
- forward-compatible storage boundary. Schema builders explicitly include their
2639
- supported `default`/`values` and item-type description/default-status fields.
2706
+ The object builders reject unknown top-level keys, including command, manifest,
2707
+ and profile definitions and separately authored variables. This catches
2708
+ misspellings without changing the runtime registry's storage boundary. Keep
2709
+ package-specific annotations beside the registration definition. Existing values
2710
+ already typed as a registration contract remain usable; a builder cannot recover
2711
+ literal information that was widened before the call. Flag builders support
2712
+ `repeatable` and `value_validation`; schema builders include their supported
2713
+ `default`/`values` and item-type description/default-status fields. Scoped renderer
2714
+ and preflight object builders also retain literal command ownership while
2715
+ contextually typing their callbacks.
2640
2716
 
2641
2717
  ## Declarative Authoring
2642
2718
 
@@ -3289,6 +3365,27 @@ history and retains mutation governance.
3289
3365
 
3290
3366
  ## Robust Automation Pattern
3291
3367
 
3368
+ Native `PmClient.create`, `update`, and their generic `run` routes reject unknown
3369
+ option names at runtime, including JavaScript callers and injected extension
3370
+ clients ([pm-fl3phm](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-fl3phm.toon),
3371
+ a repository-only tracker record excluded from npm). A typo such as
3372
+ `priorty` refuses the whole request with `PmCliError.code =
3373
+ "invalid_argument_value"`, `context.reason = "unknown_mutation_option"`, a
3374
+ nearest-name hint when available, and `context.changed = false`. Put mutation
3375
+ fields under `options` when using `run`; existing declared top-level aliases
3376
+ remain accepted. Workspace schema option identities remain available through
3377
+ `run`, while typed convenience methods support extension item fields through `field`.
3378
+ MCP retains its existing transport-specific admission contract. The no-change
3379
+ receipt applies to these preflight refusals; an executed operation's outcome
3380
+ and evidence must be assessed separately.
3381
+
3382
+ MCP create/update normalize their advertised mutation fields through the SDK and
3383
+ refuse malformed values atomically; see [MCP option conformance](MCP_OPTION_CONFORMANCE.md).
3384
+ Embedded hosts can use `readRuntimeFieldOptionValue(options, definition)` with
3385
+ definitions from `resolveRuntimeFieldRegistry(settings.schema)` to recognize the
3386
+ same project-field aliases as persistence. These helpers are exported from the
3387
+ aggregate SDK, so hosts can preserve customization without copying key mappings.
3388
+
3292
3389
  1. Read `PM_TOOL_ACTIONS` or `PM_TOOL_PARAMETERS_SCHEMA` for baseline static validation.
3293
3390
  2. Load runtime contracts with `getContracts(pmRoot, { runtimeOnly: true })` or run `pm contracts --runtime-only --json` inside the target project.
3294
3391
  3. Verify the action appears in `actions` and has `action_availability[].invocable: true`.
package/docs/TESTING.md CHANGED
@@ -56,6 +56,17 @@ policy-check budget. This allocation is tracked by
56
56
  [pm-a3c6g4](../.agents/pm/tasks/pm-a3c6g4.toon); broader runner qualification
57
57
  remains with [pm-bj7rq0](../.agents/pm/issues/pm-bj7rq0.toon).
58
58
 
59
+ The same serial cohort runs the ten-thousand-item aggregation, cold governance
60
+ read, and surface-replication fixture files after parallel contracts
61
+ ([pm-ckb8w5](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-ckb8w5.toon),
62
+ a repository-only tracker record excluded from npm). Their original input
63
+ populations, assertions, per-test deadlines and retry policy remain in force.
64
+
65
+ The context decision keeper also runs in that phase, preserving its 200-item
66
+ corpus and 30-second completion-regression deadline. Allocation is tracked by
67
+ [pm-j2vwbh](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/tasks/pm-j2vwbh.toon)
68
+ (a repository-only tracker record excluded from npm).
69
+
59
70
  `node scripts/run-tests.mjs` wraps Vitest in temporary tracker roots, disables
60
71
  external Sentry delivery for the build, test workers, and their nested CLI
61
72
  children, then cleans the roots up. Instrumentation tests can still exercise
@@ -567,6 +578,18 @@ the descriptor registry does not yet know about.
567
578
  For in-place metadata corrections and context admission/refusal semantics, see
568
579
  [Linked-test edits](LINKED_TEST_EDITS.md).
569
580
 
581
+ Run-option admission is tracked by
582
+ [pm-hdvxqg](https://github.com/unbraind/pm-cli/blob/main/.agents/pm/issues/pm-hdvxqg.toon)
583
+ (a repository-only tracker record excluded from npm).
584
+ `pm test` requires `--run` for `--timeout`, `--progress`, execution context,
585
+ environment directives, and run selectors. Registration-only calls refuse these
586
+ options before saving links. Combined edits and execution validate the effective
587
+ post-edit selection under the item lock before persistence, including out-of-range
588
+ indexes and unmatched selectors. These admission errors carry `changed: false`
589
+ in structured output. A valid request that executes a failing child can still
590
+ save its accepted edits and execution evidence; inspect its run results before
591
+ retrying.
592
+
570
593
  Add tests to the item that owns the work:
571
594
 
572
595
  ```bash
@@ -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":2325,"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":2325,"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":878,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":196,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2010,"steps":[{"id":"triage","max_estimated_tokens":552,"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":13795}
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}
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.20","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.20","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.22","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.22","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.20",
3
+ "version": "2026.10.22",
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.20","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.22","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 +1 @@
1
- {"name":"@unbrained/pm-calendar","version":"2026.10.20","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.22","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 +1 @@
1
- {"name":"@unbrained/pm-command-kit","version":"2026.10.20","private":true,"type":"module","description":"First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-command-kit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","commands","exemplar"],"pm":{"aliases":["command-kit"],"extensions":["extensions/command-kit"],"catalog":{"display_name":"Command Kit Exemplar","category":"sdk","summary":"Copy-paste-able exemplar for registerCommand, registerFlags, and registerParser.","tags":["sdk","commands","parser","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-command-kit","version":"2026.10.22","private":true,"type":"module","description":"First-party pm exemplar package for the commands capability: registerCommand, registerFlags, and registerParser.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-command-kit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","commands","exemplar"],"pm":{"aliases":["command-kit"],"extensions":["extensions/command-kit"],"catalog":{"display_name":"Command Kit Exemplar","category":"sdk","summary":"Copy-paste-able exemplar for registerCommand, registerFlags, and registerParser.","tags":["sdk","commands","parser","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-command-kit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-digital-twin","version":"2026.10.20","private":true,"type":"module","description":"Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-digital-twin"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","sdk","digital-twin","event-sourcing","temporal-graph","exemplar"],"pm":{"aliases":["digital-twin","twin"],"extensions":["extensions/digital-twin"],"catalog":{"display_name":"Digital Twin SDK Exemplar","category":"sdk","summary":"Temporal facility graph proving event replay, point-in-time state, invariants, federation, checkpoints, and compact exports through public SDK contracts.","tags":["sdk","digital-twin","event-sourcing","graph","offline-first","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin","report":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin/GAP_REPORT.md"}},"docs":["README.md","GAP_REPORT.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-digital-twin","version":"2026.10.22","private":true,"type":"module","description":"Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-digital-twin"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","sdk","digital-twin","event-sourcing","temporal-graph","exemplar"],"pm":{"aliases":["digital-twin","twin"],"extensions":["extensions/digital-twin"],"catalog":{"display_name":"Digital Twin SDK Exemplar","category":"sdk","summary":"Temporal facility graph proving event replay, point-in-time state, invariants, federation, checkpoints, and compact exports through public SDK contracts.","tags":["sdk","digital-twin","event-sourcing","graph","offline-first","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin","report":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-digital-twin/GAP_REPORT.md"}},"docs":["README.md","GAP_REPORT.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-governance-audit","version":"2026.10.20","private":true,"type":"module","description":"First-party pm package for governance audit and normalization workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-governance-audit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","governance","audit","normalize","hooks"],"pm":{"aliases":["governance-audit","audit"],"extensions":["extensions/governance-audit"],"catalog":{"display_name":"Governance Audit","category":"governance","summary":"Run dedupe audits, comments audits, and normalize sweeps as package-owned workflows.","tags":["governance","audit","normalize","hooks"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-governance-audit","version":"2026.10.22","private":true,"type":"module","description":"First-party pm package for governance audit and normalization workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-governance-audit"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","governance","audit","normalize","hooks"],"pm":{"aliases":["governance-audit","audit"],"extensions":["extensions/governance-audit"],"catalog":{"display_name":"Governance Audit","category":"governance","summary":"Run dedupe audits, comments audits, and normalize sweeps as package-owned workflows.","tags":["governance","audit","normalize","hooks"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-governance-audit","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-guide-shell","version":"2026.10.20","private":true,"type":"module","description":"First-party pm package for guide and shell completion workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-guide-shell"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","guide","completion","shell"],"pm":{"aliases":["guide-shell"],"extensions":["extensions/guide-shell"],"catalog":{"display_name":"Guide + Shell UX","category":"workflow","summary":"Restore guide documentation and shell completion commands as package-owned UX surfaces.","tags":["guide","completion","shell"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-guide-shell","version":"2026.10.22","private":true,"type":"module","description":"First-party pm package for guide and shell completion workflows.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-guide-shell"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","guide","completion","shell"],"pm":{"aliases":["guide-shell"],"extensions":["extensions/guide-shell"],"catalog":{"display_name":"Guide + Shell UX","category":"workflow","summary":"Restore guide documentation and shell completion commands as package-owned UX surfaces.","tags":["guide","completion","shell"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-guide-shell","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-kanban","version":"2026.10.20","private":true,"type":"module","description":"First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-kanban"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","profile","archetype","kanban","exemplar"],"pm":{"aliases":["kanban"],"extensions":["extensions/kanban"],"catalog":{"display_name":"Kanban Archetype","category":"sdk","summary":"Installable Kanban continuous-flow archetype: Card item type, flow fields, and a ProjectProfileDefinition built on public SDK primitives.","tags":["sdk","profile","archetype","kanban","schema","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-kanban","version":"2026.10.22","private":true,"type":"module","description":"First-party pm archetype package: a complete Kanban continuous-flow profile built on public SDK primitives.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-kanban"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","sdk","profile","archetype","kanban","exemplar"],"pm":{"aliases":["kanban"],"extensions":["extensions/kanban"],"catalog":{"display_name":"Kanban Archetype","category":"sdk","summary":"Installable Kanban continuous-flow archetype: Card item type, flow fields, and a ProjectProfileDefinition built on public SDK primitives.","tags":["sdk","profile","archetype","kanban","schema","exemplar"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-kanban","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
@@ -1 +1 @@
1
- {"name":"@unbrained/pm-lifecycle-hooks","version":"2026.10.20","private":true,"type":"module","description":"First-party pm package demonstrating safe lifecycle hook registration.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-lifecycle-hooks"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","hooks","lifecycle","sdk"],"pm":{"aliases":["lifecycle-hooks"],"extensions":["extensions/lifecycle-hooks"],"catalog":{"display_name":"Lifecycle Hooks","category":"sdk","summary":"Default-inert lifecycle hook exemplar for package authors.","tags":["hooks","lifecycle","sdk"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}
1
+ {"name":"@unbrained/pm-lifecycle-hooks","version":"2026.10.22","private":true,"type":"module","description":"First-party pm package demonstrating safe lifecycle hook registration.","homepage":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":{"type":"git","url":"git+https://github.com/unbraind/pm-cli.git","directory":"packages/pm-lifecycle-hooks"},"bugs":{"url":"https://github.com/unbraind/pm-cli/issues"},"keywords":["pm-package","project-management","hooks","lifecycle","sdk"],"pm":{"aliases":["lifecycle-hooks"],"extensions":["extensions/lifecycle-hooks"],"catalog":{"display_name":"Lifecycle Hooks","category":"sdk","summary":"Default-inert lifecycle hook exemplar for package authors.","tags":["hooks","lifecycle","sdk"],"links":{"docs":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks#readme","repository":"https://github.com/unbraind/pm-cli/tree/main/packages/pm-lifecycle-hooks","report":"https://github.com/unbraind/pm-cli/issues"}},"docs":["README.md"],"examples":["README.md"]}}