@unbrained/pm-cli 2026.8.7 → 2026.8.9
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.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +54 -0
- package/dist/cli/main.js +4 -3
- package/dist/cli/register-annotations.d.ts +11 -0
- package/dist/cli/register-annotations.js +195 -0
- package/dist/cli/register-history-author.js +7 -30
- package/dist/cli/register-mutation.js +25 -206
- package/dist/cli/runtime-compatibility-boundary.d.ts +17 -0
- package/dist/cli/runtime-compatibility-boundary.js +43 -0
- package/dist/cli-bundle/bundle-manifest.json +158 -694
- package/dist/cli-bundle/chunks/chunk-2DTCZXSD.js +13 -0
- package/dist/cli-bundle/chunks/chunk-5JO6R4BS.js +3 -0
- package/dist/cli-bundle/chunks/chunk-5KN4DZYV.js +194 -0
- package/dist/cli-bundle/chunks/chunk-EF43KODO.js +2 -0
- package/dist/cli-bundle/chunks/chunk-GMX5YOI3.js +77 -0
- package/dist/cli-bundle/chunks/chunk-HUV2Z7IS.js +28 -0
- package/dist/cli-bundle/chunks/chunk-MHBVCUF2.js +2 -0
- package/dist/cli-bundle/chunks/chunk-PYO5GZU6.js +5 -0
- package/dist/cli-bundle/chunks/chunk-QWRRFYK3.js +2 -0
- package/dist/cli-bundle/chunks/chunk-RJC7TPF4.js +8 -0
- package/dist/cli-bundle/chunks/chunk-YC3UF2IO.js +2068 -0
- package/dist/cli-bundle/chunks/{register-list-query-FJZCJ67O.js → register-list-query-BUE7PTCU.js} +8 -8
- package/dist/cli-bundle/chunks/register-mutation-FC3XLVIK.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-YH2WAOXU.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-UQDTNTLJ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-2VVP5RAA.js +153 -0
- package/dist/cli-bundle/focused-chunks/{chunk-4VJQTS3P.js → chunk-3GSFUDAI.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-3WVHTUAW.js +5 -0
- package/dist/cli-bundle/focused-chunks/chunk-4H6MVCK3.js +16 -0
- package/dist/cli-bundle/focused-chunks/{chunk-73JUDYXT.js → chunk-54TZJ4BM.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5NK5TJ5D.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-HNL6IFGS.js → chunk-6DO4YQWZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-73FIJONU.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-TIKDBG4D.js → chunk-C3GCHDSQ.js} +29 -27
- package/dist/cli-bundle/focused-chunks/chunk-JGRSQZJT.js +18 -0
- package/dist/cli-bundle/focused-chunks/{chunk-YZEZAPJK.js → chunk-KNEHLPBF.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-MRWVJ3ZG.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-NL57J7BZ.js +4 -0
- package/dist/cli-bundle/focused-chunks/{chunk-NBJKQP4S.js → chunk-P6BBIQRG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-QHRTT7WT.js → chunk-PZAGVQNN.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-QDAO3XEK.js +14 -0
- package/dist/cli-bundle/focused-chunks/chunk-T4IGQCSY.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-U46GQJNY.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-RPNYG5MO.js → chunk-VRXJSGIT.js} +6 -6
- package/dist/cli-bundle/focused-chunks/{chunk-R2LEMEV5.js → chunk-XC2ZW3CJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-ZG54B4XG.js +2 -0
- package/dist/cli-bundle/main.js +13 -13
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +1 -1
- package/dist/cli-bundle/sdk-core.js +38 -38
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +1 -1
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +2 -1
- package/dist/cli.js +14 -4
- package/dist/core/diagnostics/remediation.js +12 -2
- package/dist/core/history/history.js +13 -4
- package/dist/core/item/actionability.d.ts +7 -1
- package/dist/core/item/actionability.js +71 -15
- package/dist/core/output/output.js +9 -2
- package/dist/core/sentry/helpers.d.ts +10 -0
- package/dist/core/sentry/helpers.js +59 -4
- package/dist/core/shared/author.d.ts +25 -0
- package/dist/core/shared/author.js +114 -9
- package/dist/core/shared/constants.d.ts +2 -0
- package/dist/core/shared/constants.js +4 -2
- package/dist/sdk/actionability.d.ts +1 -1
- package/dist/sdk/actionability.js +3 -3
- package/dist/sdk/annotations.d.ts +40 -0
- package/dist/sdk/annotations.js +61 -9
- package/dist/sdk/author-attribution.d.ts +12 -0
- package/dist/sdk/author-attribution.js +73 -11
- package/dist/sdk/cli-contracts/command-exit-contracts.d.ts +118 -0
- package/dist/sdk/cli-contracts/command-exit-contracts.js +152 -0
- package/dist/sdk/cli-contracts/completeness.js +5 -3
- package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +19 -0
- package/dist/sdk/cli-contracts/runtime-contracts.js +44 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +15 -2
- package/dist/sdk/cli-contracts/tool-schema.d.ts +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +6 -3
- package/dist/sdk/comments.d.ts +7 -0
- package/dist/sdk/comments.js +2 -2
- package/dist/sdk/completion.js +9 -5
- package/dist/sdk/contracts.d.ts +1 -0
- package/dist/sdk/contracts.js +3 -2
- package/dist/sdk/core-governance.d.ts +1 -1
- package/dist/sdk/core-governance.js +3 -3
- package/dist/sdk/dependencies.d.ts +2 -0
- package/dist/sdk/dependencies.js +7 -6
- package/dist/sdk/environment/host-environment-errors.d.ts +27 -0
- package/dist/sdk/environment/host-environment-errors.js +124 -0
- package/dist/sdk/environment/project-runtime-compatibility.d.ts +65 -0
- package/dist/sdk/environment/project-runtime-compatibility.js +385 -0
- package/dist/sdk/environment/source-context.d.ts +23 -0
- package/dist/sdk/environment/source-context.js +29 -0
- package/dist/sdk/error-code-catalog.d.ts +6 -0
- package/dist/sdk/error-code-catalog.js +62 -8
- package/dist/sdk/extension/bundled-catalog.js +19 -6
- package/dist/sdk/generated-error-code-catalog.js +665 -3
- package/dist/sdk/governance/health.d.ts +11 -3
- package/dist/sdk/governance/health.js +32 -13
- package/dist/sdk/governance/provenance-health.d.ts +26 -0
- package/dist/sdk/governance/provenance-health.js +139 -0
- package/dist/sdk/governance/validate.js +13 -8
- package/dist/sdk/governance.d.ts +1 -0
- package/dist/sdk/governance.js +3 -2
- package/dist/sdk/graph/assembly.d.ts +4 -0
- package/dist/sdk/graph/assembly.js +22 -2
- package/dist/sdk/graph/run.d.ts +2 -0
- package/dist/sdk/graph/run.js +3 -2
- package/dist/sdk/index.d.ts +7 -3
- package/dist/sdk/index.js +9 -5
- package/dist/sdk/learnings.d.ts +15 -0
- package/dist/sdk/learnings.js +2 -2
- package/dist/sdk/lifecycle/close-many.d.ts +6 -1
- package/dist/sdk/lifecycle/close-many.js +43 -5
- package/dist/sdk/lifecycle/close.js +13 -8
- package/dist/sdk/lifecycle/create.js +6 -12
- package/dist/sdk/lifecycle/plan.js +6 -3
- package/dist/sdk/lifecycle/update-many.d.ts +2 -1
- package/dist/sdk/lifecycle/update-many.js +29 -5
- package/dist/sdk/lifecycle/update.js +6 -20
- package/dist/sdk/merge/driver.d.ts +2 -1
- package/dist/sdk/merge/driver.js +7 -4
- package/dist/sdk/merge/index.d.ts +1 -1
- package/dist/sdk/merge/index.js +3 -3
- package/dist/sdk/merge/install.d.ts +21 -0
- package/dist/sdk/merge/install.js +51 -21
- package/dist/sdk/merge/receipts.d.ts +14 -1
- package/dist/sdk/merge/receipts.js +36 -8
- package/dist/sdk/merge/reconcile.js +21 -4
- package/dist/sdk/merge/three-way.d.ts +6 -2
- package/dist/sdk/merge/three-way.js +24 -10
- package/dist/sdk/notes.d.ts +7 -0
- package/dist/sdk/notes.js +2 -2
- package/dist/sdk/query/get.d.ts +11 -0
- package/dist/sdk/query/get.js +37 -3
- package/dist/sdk/read-output-contracts.d.ts +1 -1
- package/dist/sdk/read-output-contracts.js +103 -5
- package/dist/sdk/relationship-kinds/contract.d.ts +48 -0
- package/dist/sdk/relationship-kinds/contract.js +22 -0
- package/dist/sdk/relationships.d.ts +6 -41
- package/dist/sdk/relationships.js +12 -126
- package/dist/sdk/runtime-primitives.d.ts +1 -1
- package/dist/sdk/runtime-primitives.js +3 -3
- package/dist/sdk/runtime.d.ts +1 -1
- package/dist/sdk/runtime.js +9 -25
- package/dist/sdk/similarity.d.ts +5 -0
- package/dist/sdk/similarity.js +40 -10
- package/dist/sdk/structured-mutations.js +5 -2
- package/dist/sdk/test/execution.js +4 -2
- package/dist/sdk/test/linked-command-detection.d.ts +2 -7
- package/dist/sdk/test/linked-command-detection.js +22 -9
- package/dist/sdk/test/parsers.js +5 -2
- package/dist/sdk/workspace-snapshot.d.ts +9 -0
- package/dist/sdk/workspace-snapshot.js +48 -16
- package/docs/AGENT_GUIDE.md +2 -1
- package/docs/AGENT_RUNTIME_PRIMITIVES.md +11 -4
- package/docs/COMMANDS.md +19 -1
- package/docs/DEPENDENCY_KIND_CONTRACT.md +29 -0
- package/docs/ITEM_READ_PROJECTIONS.md +26 -0
- package/docs/MERGE_SAFETY.md +10 -3
- package/docs/README.md +1 -0
- package/docs/RELATIONSHIP_GRAPH.md +1 -1
- package/docs/RELEASING.md +27 -2
- package/docs/SCRIPTING.md +27 -1
- package/docs/SDK_AGENT_SESSION_CONTEXT.md +35 -2
- package/docs/SDK_CONTEXT_INTEGRITY.md +81 -0
- package/docs/SDK_RUNTIME_BOUNDARIES.md +58 -0
- package/docs/SELF_DESCRIBING_CONTEXT_CONTRACTS.md +13 -0
- package/docs/SENTRY_CONTRACT_EPOCHS.md +20 -0
- package/docs/TESTING.md +17 -0
- package/docs/agent-task-token-baseline.json +2 -2
- package/marketplace.json +2 -2
- package/package.json +5 -3
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/sdk/public-surface.json +756 -57
- package/dist/cli-bundle/chunks/append-7BXBFDGD.js +0 -2
- package/dist/cli-bundle/chunks/chunk-2AXF3VSK.js +0 -2
- package/dist/cli-bundle/chunks/chunk-2XS43CCV.js +0 -2
- package/dist/cli-bundle/chunks/chunk-3A6KWB72.js +0 -8
- package/dist/cli-bundle/chunks/chunk-3ISTDB42.js +0 -8
- package/dist/cli-bundle/chunks/chunk-4MTI7XOV.js +0 -5
- package/dist/cli-bundle/chunks/chunk-6BX5UDCN.js +0 -3
- package/dist/cli-bundle/chunks/chunk-6QPO7KLR.js +0 -2
- package/dist/cli-bundle/chunks/chunk-7MXHZHSQ.js +0 -5
- package/dist/cli-bundle/chunks/chunk-7ZPMJW4U.js +0 -2
- package/dist/cli-bundle/chunks/chunk-A6KGKEWT.js +0 -2
- package/dist/cli-bundle/chunks/chunk-AGYNSNCI.js +0 -2
- package/dist/cli-bundle/chunks/chunk-B4H7FEFH.js +0 -5
- package/dist/cli-bundle/chunks/chunk-B4KLBBMN.js +0 -2
- package/dist/cli-bundle/chunks/chunk-BXCSXK4J.js +0 -2
- package/dist/cli-bundle/chunks/chunk-CALJHNBL.js +0 -23
- package/dist/cli-bundle/chunks/chunk-CFIGP5LY.js +0 -2
- package/dist/cli-bundle/chunks/chunk-CHOQ2VAW.js +0 -2
- package/dist/cli-bundle/chunks/chunk-CS6MRHG7.js +0 -2
- package/dist/cli-bundle/chunks/chunk-CUGNQQKH.js +0 -2
- package/dist/cli-bundle/chunks/chunk-D4FPS43D.js +0 -164
- package/dist/cli-bundle/chunks/chunk-E2ZSLTOP.js +0 -2
- package/dist/cli-bundle/chunks/chunk-FB7G2HY2.js +0 -2
- package/dist/cli-bundle/chunks/chunk-H5Y5YE6A.js +0 -2
- package/dist/cli-bundle/chunks/chunk-H5Y6UV6E.js +0 -2
- package/dist/cli-bundle/chunks/chunk-H7KGWPDF.js +0 -2
- package/dist/cli-bundle/chunks/chunk-HFSD77TQ.js +0 -2
- package/dist/cli-bundle/chunks/chunk-HX2GTA6L.js +0 -2
- package/dist/cli-bundle/chunks/chunk-J2IEKAVR.js +0 -2
- package/dist/cli-bundle/chunks/chunk-JC6FKIFM.js +0 -2
- package/dist/cli-bundle/chunks/chunk-K44PYFXH.js +0 -2
- package/dist/cli-bundle/chunks/chunk-K4KGEEBT.js +0 -2
- package/dist/cli-bundle/chunks/chunk-KFLK5TRH.js +0 -21
- package/dist/cli-bundle/chunks/chunk-KL6IEBV2.js +0 -2
- package/dist/cli-bundle/chunks/chunk-KWQZDZSS.js +0 -2
- package/dist/cli-bundle/chunks/chunk-KZ4X3DGU.js +0 -3
- package/dist/cli-bundle/chunks/chunk-LD77HJMQ.js +0 -13
- package/dist/cli-bundle/chunks/chunk-LEPJJ6QC.js +0 -2
- package/dist/cli-bundle/chunks/chunk-ME2JJ4LA.js +0 -3
- package/dist/cli-bundle/chunks/chunk-NE5VRDAI.js +0 -2
- package/dist/cli-bundle/chunks/chunk-NFLJ3FHD.js +0 -2
- package/dist/cli-bundle/chunks/chunk-NG6OXIBR.js +0 -19
- package/dist/cli-bundle/chunks/chunk-NYIGHWQY.js +0 -8
- package/dist/cli-bundle/chunks/chunk-NZ75GNSA.js +0 -2
- package/dist/cli-bundle/chunks/chunk-PCJWJNC2.js +0 -2
- package/dist/cli-bundle/chunks/chunk-PD3225AM.js +0 -2
- package/dist/cli-bundle/chunks/chunk-PDEGKG7P.js +0 -2
- package/dist/cli-bundle/chunks/chunk-PIE5HBNA.js +0 -2
- package/dist/cli-bundle/chunks/chunk-PW2H7YJR.js +0 -56
- package/dist/cli-bundle/chunks/chunk-RSIC5OPE.js +0 -2
- package/dist/cli-bundle/chunks/chunk-TPKN3S7S.js +0 -2
- package/dist/cli-bundle/chunks/chunk-TPXAXTCO.js +0 -2
- package/dist/cli-bundle/chunks/chunk-UFWUJO4V.js +0 -2
- package/dist/cli-bundle/chunks/chunk-UQLZQVFW.js +0 -55
- package/dist/cli-bundle/chunks/chunk-VT3Z5G7D.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WOD3WWUN.js +0 -2
- package/dist/cli-bundle/chunks/chunk-WSJEIGJF.js +0 -3
- package/dist/cli-bundle/chunks/chunk-WYNUU7ZW.js +0 -2008
- package/dist/cli-bundle/chunks/chunk-YGPNCCXZ.js +0 -2
- package/dist/cli-bundle/chunks/close-CMY3BAUG.js +0 -2
- package/dist/cli-bundle/chunks/close-many-SA4XZCTK.js +0 -2
- package/dist/cli-bundle/chunks/comments-EZ556ZD3.js +0 -2
- package/dist/cli-bundle/chunks/copy-ZSGPA52X.js +0 -2
- package/dist/cli-bundle/chunks/create-I5DVV4YG.js +0 -2
- package/dist/cli-bundle/chunks/delete-RL3JACSW.js +0 -2
- package/dist/cli-bundle/chunks/deps-S7UBCECS.js +0 -2
- package/dist/cli-bundle/chunks/docs-ZZNVBBYO.js +0 -2
- package/dist/cli-bundle/chunks/files-27C337VT.js +0 -2
- package/dist/cli-bundle/chunks/focus-5Z2SG7LU.js +0 -2
- package/dist/cli-bundle/chunks/history-compact-HJQK67CZ.js +0 -2
- package/dist/cli-bundle/chunks/history-redact-PWC6PDWA.js +0 -2
- package/dist/cli-bundle/chunks/history-repair-N3CY4WBF.js +0 -2
- package/dist/cli-bundle/chunks/learnings-4FH23XDT.js +0 -2
- package/dist/cli-bundle/chunks/profile-5Y5XXH5N.js +0 -2
- package/dist/cli-bundle/chunks/register-mutation-YGYPW3BL.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-WMDSUMQF.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-DL7FFABC.js +0 -2
- package/dist/cli-bundle/chunks/restore-6KYBV5BY.js +0 -2
- package/dist/cli-bundle/chunks/schema-EQGKBYXJ.js +0 -2
- package/dist/cli-bundle/chunks/update-QVTYOD6I.js +0 -2
- package/dist/cli-bundle/chunks/update-many-DJSBU525.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-2ECLECMK.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-3K4XV2BF.js +0 -16
- package/dist/cli-bundle/focused-chunks/chunk-4EX25PXM.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-CIXVQPB7.js +0 -5
- package/dist/cli-bundle/focused-chunks/chunk-DLTS3IHM.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-DQ6FKGL3.js +0 -14
- package/dist/cli-bundle/focused-chunks/chunk-JLG2C4EQ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-MHMTKV5V.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-MOTJFQ3F.js +0 -153
- package/dist/cli-bundle/focused-chunks/chunk-RW5IYD4J.js +0 -4
- package/dist/cli-bundle/focused-chunks/chunk-VZFU2R4M.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-ZJIMJHDB.js +0 -2
package/docs/MERGE_SAFETY.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Multi-Branch Tracker Merge Safety
|
|
2
2
|
|
|
3
|
-
Tracked by [pm-wc1r](../.agents/pm/features/pm-wc1r.toon), with the integrity and concurrency fixes [pm-9q2t](../.agents/pm/issues/pm-9q2t.toon), [pm-cxyv](../.agents/pm/issues/pm-cxyv.toon), [pm-gpo7](../.agents/pm/issues/pm-gpo7.toon), [pm-m3nl](../.agents/pm/issues/pm-m3nl.toon), [pm-wwfd](../.agents/pm/issues/pm-wwfd.toon), and [pm-xdn6](../.agents/pm/issues/pm-xdn6.toon). Fresh-init fence ownership is tracked by [pm-1w3ljt](../.agents/pm/issues/pm-1w3ljt.toon); runtime-cache index governance by [pm-hous](../.agents/pm/issues/pm-hous.toon); local allocation safety by [pm-khdq](../.agents/pm/issues/pm-khdq.toon); fence-coverage completeness and drift detection by [pm-i4fx](../.agents/pm/issues/pm-i4fx.toon); package-defined item coverage by [pm-5rexki](../.agents/pm/issues/pm-5rexki.toon); non-item JSON coverage by [pm-gjicmx](../.agents/pm/issues/pm-gjicmx.toon); portable driver identity by [pm-w91mvg](../.agents/pm/issues/pm-w91mvg.toon); pending receipt validation by [pm-ysqb6n](../.agents/pm/issues/pm-ysqb6n.toon); cross-branch id collision safety by [pm-pibw](../.agents/pm/issues/pm-pibw.toon); auditable merge history by [pm-9j2r3b](../.agents/pm/tasks/pm-9j2r3b.toon); durable conflict decisions by [pm-rh98vo](../.agents/pm/issues/pm-rh98vo.toon); continuous conformance by [pm-76dnfg](../.agents/pm/tasks/pm-76dnfg.toon); workspace-wide CI enforcement by [pm-pdr8t1](../.agents/pm/tasks/pm-pdr8t1.toon); post-merge reconciliation by [pm-mfkv92](../.agents/pm/issues/pm-mfkv92.toon); this repository's own adoption by [pm-iwsj](../.agents/pm/chores/pm-iwsj.toon).
|
|
3
|
+
Tracked by [pm-wc1r](../.agents/pm/features/pm-wc1r.toon), with the integrity and concurrency fixes [pm-9q2t](../.agents/pm/issues/pm-9q2t.toon), [pm-cxyv](../.agents/pm/issues/pm-cxyv.toon), [pm-gpo7](../.agents/pm/issues/pm-gpo7.toon), [pm-m3nl](../.agents/pm/issues/pm-m3nl.toon), [pm-wwfd](../.agents/pm/issues/pm-wwfd.toon), and [pm-xdn6](../.agents/pm/issues/pm-xdn6.toon). Fresh-init fence ownership is tracked by [pm-1w3ljt](../.agents/pm/issues/pm-1w3ljt.toon); runtime-cache index governance by [pm-hous](../.agents/pm/issues/pm-hous.toon); local allocation safety by [pm-khdq](../.agents/pm/issues/pm-khdq.toon); fence-coverage completeness and drift detection by [pm-i4fx](../.agents/pm/issues/pm-i4fx.toon); package-defined item coverage by [pm-5rexki](../.agents/pm/issues/pm-5rexki.toon); non-item JSON coverage by [pm-gjicmx](../.agents/pm/issues/pm-gjicmx.toon); portable driver identity by [pm-w91mvg](../.agents/pm/issues/pm-w91mvg.toon); pending receipt validation by [pm-ysqb6n](../.agents/pm/issues/pm-ysqb6n.toon); receipt classification by [pm-jtwsct](../.agents/pm/issues/pm-jtwsct.toon); direction-independent item conflict selection by [pm-dlx7v7](../.agents/pm/issues/pm-dlx7v7.toon); corrected reconciliation guidance by [pm-lwmstb](../.agents/pm/issues/pm-lwmstb.toon); cross-branch id collision safety by [pm-pibw](../.agents/pm/issues/pm-pibw.toon); auditable merge history by [pm-9j2r3b](../.agents/pm/tasks/pm-9j2r3b.toon); durable conflict decisions by [pm-rh98vo](../.agents/pm/issues/pm-rh98vo.toon); continuous conformance by [pm-76dnfg](../.agents/pm/tasks/pm-76dnfg.toon); workspace-wide CI enforcement by [pm-pdr8t1](../.agents/pm/tasks/pm-pdr8t1.toon); post-merge reconciliation by [pm-mfkv92](../.agents/pm/issues/pm-mfkv92.toon); this repository's own adoption by [pm-iwsj](../.agents/pm/chores/pm-iwsj.toon).
|
|
4
4
|
|
|
5
5
|
pm stores project context as reviewable repository files. Concurrent agents can therefore use ordinary branches and worktrees, but tracker artifacts need semantic merge behavior: raw line merging cannot preserve TOON collection counts, JSON object structure, or append-only history hash chains.
|
|
6
6
|
|
|
@@ -56,12 +56,12 @@ pm merge install --dry-run --json
|
|
|
56
56
|
|
|
57
57
|
| Artifact | Driver | Merge behavior |
|
|
58
58
|
| ---------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
59
|
-
| Item `.toon` / `.md` | `pm-item-toon` / `pm-item-markdown` | Three-way field merge;
|
|
59
|
+
| Item `.toon` / `.md` | `pm-item-toon` / `pm-item-markdown` | Three-way field merge; append-like collections use set union, `updated_at` uses latest timestamp, scalar conflicts select a stable direction-independent value, and canonical serialization recomputes TOON counts. |
|
|
60
60
|
| `history/*.jsonl` | `pm-history` | Preserves the common prefix and both divergent suffixes, orders deterministically, then re-anchors the resulting hash chain. |
|
|
61
61
|
| tracker `**/*.jsonl` except the later `history/*.jsonl` override | `pm-relationship` | Covers default and package-owned custom relationship event paths, unions divergent suffixes by `eventId` (timestamp-ordered, ours-first on ties), and renumbers `sequence` consecutively so the strict-sequence store loader accepts the merged stream. |
|
|
62
62
|
| root `settings.json` and nested `**/*.json` | `pm-json` | Recursively merges objects per key. Arrays compose when both branches preserve the base and add distinct entries, so independent extension installs and evaluation additions merge without weakening edit/removal conflict detection. |
|
|
63
63
|
|
|
64
|
-
When both sides change the same scalar
|
|
64
|
+
When both sides change the same item scalar differently, the driver writes the same stable value regardless of which branch Git labels ours or theirs, but exits nonzero. JSON leaf conflicts retain the explicit preferred-side policy. Git keeps either path conflicted so a human or coordinating agent must review the discarded value and explicitly `git add` the resolution.
|
|
65
65
|
|
|
66
66
|
The driver result's `guidance` always points unresolved conflicts to `pm merge report`. When a clone-local receipt exists, guidance includes its privacy-safe receipt and item ids for exact correlation; discarded values remain confined to the local receipt and never appear in generic logs or tracker history. Tracked by [pm-fbrz7p](../.agents/pm/issues/pm-fbrz7p.toon).
|
|
67
67
|
|
|
@@ -97,9 +97,16 @@ After every branch merge that touches `.agents/pm`, run:
|
|
|
97
97
|
```bash
|
|
98
98
|
pm merge reconcile --dry-run --json
|
|
99
99
|
pm merge reconcile --message "Reconcile merged tracker histories" --json
|
|
100
|
+
# Required only after every discarded field has been reviewed or re-applied:
|
|
101
|
+
pm merge reconcile --force --message "Accept reviewed merge decisions" --json
|
|
100
102
|
```
|
|
101
103
|
|
|
102
104
|
The preview reports every drifted stream and pending receipt without mutation.
|
|
105
|
+
Lossless receipts are reported as provenance but do not become blocking merge
|
|
106
|
+
decisions. Receipts with discarded scalar values remain blocking and the apply
|
|
107
|
+
pass refuses them unless the coordinator explicitly supplies `--force` after
|
|
108
|
+
review. This prevents a routine history repair from silently accepting data
|
|
109
|
+
loss while preserving a zero-noise path for merges that retained both changes.
|
|
103
110
|
It exits nonzero while either merge-critical validation check is non-green, so
|
|
104
111
|
CI and explicit post-merge hooks cannot approve unresolved receipts or drift.
|
|
105
112
|
The apply pass uses the audited history rewrite boundary to append a
|
package/docs/README.md
CHANGED
|
@@ -56,6 +56,7 @@ pm guide release --json
|
|
|
56
56
|
- [Improvement Ledger and History Analytics](IMPROVEMENT_ANALYTICS.md) - audited quantitative observations, live provenance coverage, and bounded observational fleet outcomes.
|
|
57
57
|
- [SDK Evidence Traceability and Integrity](SDK_EVIDENCE_TRACEABILITY.md) - reverse source-to-item lookup, atomic evidence replacement, no-op history, linked-test collision classification, and telemetry drain receipts.
|
|
58
58
|
- [SDK Context Integrity Primitives](SDK_CONTEXT_INTEGRITY_PRIMITIVES.md) - batch duplicate discovery, structured errors, Plan evidence/lifecycle, sparse settings, tombstones, linked-test output, relocation diagnostics, and scoped output services.
|
|
59
|
+
- [SDK Context Integrity](SDK_CONTEXT_INTEGRITY.md) - truthful `get` projections, bounded annotation mutations, shared author coordinates, health provider boundaries, and changeset-aware replication gates.
|
|
59
60
|
- [Reproducible Workspaces and Snapshots](REPRODUCIBLE_WORKSPACES.md) - deterministic SDK recipes and content-addressed authoritative tracker restore points.
|
|
60
61
|
- [Portable Corpus Shapes](CORPUS_SHAPES.md) - versioned SDK populations for realistic benchmarks, evaluations, and package tests.
|
|
61
62
|
- [Agent UX Contracts](AGENT_UX_CONTRACTS.md) - ordering-cycle advisories, graph count units, collision safety, compact context, ownership wording, and recovery behavior.
|
|
@@ -16,7 +16,7 @@ Ordering-cycle validation considers only kinds whose registry definition sets `o
|
|
|
16
16
|
|
|
17
17
|
SDK queries are deterministic, bounded, cancellation-aware, and return explicit visited-node, inspected-edge, truncation, and continuation metadata. The graph kernel supplies adjacency, incoming and outgoing traversal, closure, shortest path, reverse impact through incoming traversal, and induced subgraphs. The in-memory index is rebuildable directly from item metadata; durable large-workspace indexes remain an interchangeable storage implementation.
|
|
18
18
|
|
|
19
|
-
Ordering kinds also declare precedence. `source_before_target` means the source must execute first; `target_before_source` models dependency-shaped edges such as `blocked_by`. Custom kinds default to source-first for compatibility, but domain packages should declare the direction explicitly. Analytics consume this field and never infer execution meaning from the label.
|
|
19
|
+
Ordering kinds also declare precedence. `source_before_target` means the source must execute first; `target_before_source` models dependency-shaped edges such as `blocked_by`. Custom kinds default to source-first for compatibility, but domain packages should declare the direction explicitly. Analytics consume this field and never infer execution meaning from the label. Built-in canonical spellings, compatibility aliases, and inverse actionability are defined in [Dependency-kind contract](DEPENDENCY_KIND_CONTRACT.md).
|
|
20
20
|
|
|
21
21
|
Hierarchy kinds likewise declare which endpoint is the structural parent. `source_parent` supports domain edges such as company `owns` asset, while `target_parent` preserves item-shaped child `parent` parent storage. Custom hierarchy kinds default to `source_parent`; packages should declare the orientation explicitly when their persisted edge shape differs. Context explanations use this contract instead of inferring ancestry from a kind name.
|
|
22
22
|
|
package/docs/RELEASING.md
CHANGED
|
@@ -21,7 +21,10 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon),
|
|
|
21
21
|
[pm-39cqqx](../.agents/pm/tasks/pm-39cqqx.toon), stable peer compatibility
|
|
22
22
|
[pm-csuce0](../.agents/pm/issues/pm-csuce0.toon), and artifact budgets
|
|
23
23
|
[pm-998juj](../.agents/pm/tasks/pm-998juj.toon), plus exact-tag recovery
|
|
24
|
-
[pm-lwnifd](../.agents/pm/issues/pm-lwnifd.toon)
|
|
24
|
+
[pm-lwnifd](../.agents/pm/issues/pm-lwnifd.toon), and SDK-bound reliability
|
|
25
|
+
classification [pm-dqtzva](../.agents/pm/issues/pm-dqtzva.toon).
|
|
26
|
+
The local/hosted gate selection contract is tracked by
|
|
27
|
+
[pm-ei6x66](../.agents/pm/tasks/pm-ei6x66.toon).
|
|
25
28
|
|
|
26
29
|
## Version Policy
|
|
27
30
|
|
|
@@ -177,6 +180,16 @@ Run the public Sentry/telemetry threshold gate through the package script alias:
|
|
|
177
180
|
pnpm sentry:telemetry:gate -- --telemetry-mode best-effort
|
|
178
181
|
```
|
|
179
182
|
|
|
183
|
+
The Sentry threshold gate reads the latest event for each issue and classifies
|
|
184
|
+
expected handled failures from the SDK error catalog. An event is ignored only
|
|
185
|
+
when it is handled, its `pm.error_code` resolves to a declared canonical code,
|
|
186
|
+
its `pm.exit_code` exactly matches that code's transport contract, and the
|
|
187
|
+
semantic class is `usage`, `not_found`, or `conflict`. Message and title prose
|
|
188
|
+
never participate. Unknown codes, missing or mismatched exits, unhandled
|
|
189
|
+
events, and every `generic_failure` or `dependency_failed` remain blocking.
|
|
190
|
+
This keeps rewording independent from release policy and makes stale or broad
|
|
191
|
+
message allowlists impossible.
|
|
192
|
+
|
|
180
193
|
If private reliability checks identify repeated user friction, either confirm the current release already contains the remediation with regression coverage or fix it before continuing.
|
|
181
194
|
|
|
182
195
|
The build writes `dist/cli-bundle/bundle-manifest.json` atomically with SHA-256 digests for every emitted bundle file. At startup, `pm` reports `bundle_integrity_torn_install` only when a module-loader failure is accompanied by manifest proof that an upgrade or rebuild changed, removed, or corrupted the active bundle. Reinstall `@unbrained/pm-cli` and retry after that diagnostic. Ordinary `ERR_MODULE_NOT_FOUND` and export failures with an intact manifest remain unexpected failures and must continue to block reliability gates.
|
|
@@ -184,7 +197,19 @@ The build writes `dist/cli-bundle/bundle-manifest.json` atomically with SHA-256
|
|
|
184
197
|
4. Run the same release pipeline locally.
|
|
185
198
|
|
|
186
199
|
Push the final implementation commit first, wait for DeepScan and CodeFactor to
|
|
187
|
-
finish on that reviewed SHA,
|
|
200
|
+
finish on that reviewed SHA, then run the canonical registry-owned preflight:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
pnpm verify:preflight
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
The registry supplies the ordered executable plan, command arguments,
|
|
207
|
+
environment, capture policy, and explicit skip policy. Its receipt distinguishes
|
|
208
|
+
passed checks from declared skips. The same registry maps named PR, nightly,
|
|
209
|
+
and release workflow gates; hosted-only entries must explain why no faithful
|
|
210
|
+
local equivalent exists.
|
|
211
|
+
|
|
212
|
+
The preflight includes the mandatory local hosted-analysis proof:
|
|
188
213
|
|
|
189
214
|
```bash
|
|
190
215
|
pnpm quality:hosted-analysis
|
package/docs/SCRIPTING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CLI Scripting Contract
|
|
2
2
|
|
|
3
|
-
Tracked by [pm-psy1](../.agents/pm/tasks/pm-psy1.toon), [pm-gknu](../.agents/pm/issues/pm-gknu.toon), [pm-999jh7](../.agents/pm/issues/pm-999jh7.toon), and [pm-srns](../.agents/pm/issues/pm-srns.toon).
|
|
3
|
+
Tracked by [pm-psy1](../.agents/pm/tasks/pm-psy1.toon), [pm-hqa8g1](../.agents/pm/tasks/pm-hqa8g1.toon), [pm-gknu](../.agents/pm/issues/pm-gknu.toon), [pm-999jh7](../.agents/pm/issues/pm-999jh7.toon), and [pm-srns](../.agents/pm/issues/pm-srns.toon).
|
|
4
4
|
|
|
5
5
|
Use this contract when composing `pm` with shells, CI runners, `jq`, or another process. Exact flags remain discoverable from `pm <command> --help --json` and `pm contracts --command <command> --flags-only --json`.
|
|
6
6
|
|
|
@@ -14,6 +14,32 @@ Use this contract when composing `pm` with shells, CI runners, `jq`, or another
|
|
|
14
14
|
| `3` | Requested tracker or resource was not found. | Correct the path or ID. |
|
|
15
15
|
| `4` | State or concurrency conflict. | Refresh live state before deciding whether to retry. |
|
|
16
16
|
| `5` | A required dependency operation failed. | Inspect the dependency evidence before retrying. |
|
|
17
|
+
| `6` | The request succeeded but matched nothing to change. | Treat as success and inspect the effect receipt. |
|
|
18
|
+
| `7` | The request succeeded and changed only part of the selected targets. | Treat as success and inspect unmatched/skipped rows. |
|
|
19
|
+
|
|
20
|
+
Exits `0`, `6`, and `7` are successful outcomes. Bulk mutation envelopes repeat
|
|
21
|
+
the distinction as `outcome: effect`, `outcome: no_effect`, or `outcome:
|
|
22
|
+
partial_effect` with the same `exit_code`. Because POSIX shells treat every
|
|
23
|
+
nonzero exit as a false condition, scripts invoking effect-aware bulk commands
|
|
24
|
+
must preserve and classify the status explicitly rather than relying on a bare
|
|
25
|
+
`if` condition:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
set +e
|
|
29
|
+
result=$(pm update-many --ids "$ids" --tags reviewed --json)
|
|
30
|
+
status=$?
|
|
31
|
+
set -e
|
|
32
|
+
|
|
33
|
+
case "$status" in
|
|
34
|
+
0|6|7) printf '%s\n' "$result" | jq '{outcome, matched_count, updated_count}' ;;
|
|
35
|
+
*) printf '%s\n' "pm update-many failed with exit $status" >&2; exit "$status" ;;
|
|
36
|
+
esac
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The generated contract is authoritative. `pm contracts --command update-many
|
|
40
|
+
--full --json` returns `command_exit_contracts.vocabulary` and the selected
|
|
41
|
+
command's exhaustive `exit_codes`; SDK consumers can use the same declarations
|
|
42
|
+
and `isPmSuccessfulExitCode` from `@unbrained/pm-cli/sdk/contracts`.
|
|
17
43
|
|
|
18
44
|
Successful structured results are written to stdout. Diagnostics, warnings, profiles, and errors are written to stderr so `--json`, `--format ndjson`, CSV, and table stdout remain pipe-safe. Never merge stderr into stdout before parsing structured output.
|
|
19
45
|
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Tracker references: [pm-9wbiye](../.agents/pm/issues/pm-9wbiye.toon),
|
|
4
4
|
[pm-rbg1qo](../.agents/pm/issues/pm-rbg1qo.toon), and
|
|
5
|
-
[pm-oqo9l2](../.agents/pm/features/pm-oqo9l2.toon)
|
|
5
|
+
[pm-oqo9l2](../.agents/pm/features/pm-oqo9l2.toon),
|
|
6
|
+
[pm-3zgh2c](../.agents/pm/features/pm-3zgh2c.toon),
|
|
7
|
+
[pm-eq9dlw](../.agents/pm/issues/pm-eq9dlw.toon), and
|
|
8
|
+
[pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon).
|
|
6
9
|
|
|
7
10
|
Project management is context management. The public SDK therefore carries a
|
|
8
11
|
session's purpose and episode boundary through the same immutable history that
|
|
@@ -59,7 +62,7 @@ import { spawn } from "node:child_process";
|
|
|
59
62
|
import { agentSessionEnvironment } from "@unbrained/pm-cli/sdk";
|
|
60
63
|
|
|
61
64
|
const session = {
|
|
62
|
-
provenance: { role: "
|
|
65
|
+
provenance: { role: "release-operator", topic: "package acceptance" },
|
|
63
66
|
episode: { id: "package-acceptance", label: "Package acceptance" },
|
|
64
67
|
};
|
|
65
68
|
|
|
@@ -75,6 +78,36 @@ The environment contract is `PM_AGENT_SESSION_ROLE`,
|
|
|
75
78
|
context keys, distinct from intentional per-observation overrides such as
|
|
76
79
|
`PM_AGENT_MODEL`.
|
|
77
80
|
|
|
81
|
+
Roles use the controlled values `implementer`, `implementation`,
|
|
82
|
+
`investigator`, `orchestrator`, `planner`, `release-operator`, and `reviewer`.
|
|
83
|
+
Case, spaces, and underscores normalize to lowercase hyphenated values. Other
|
|
84
|
+
values are ignored instead of polluting analytics. Presence-only harness flags,
|
|
85
|
+
including `CLAUDE_CODE_CHILD_SESSION=1`, are detection evidence and are never
|
|
86
|
+
persisted as semantic roles.
|
|
87
|
+
|
|
88
|
+
For ordinary CLI mutations, the detector can infer an `implementer` or
|
|
89
|
+
`reviewer` role from the bounded command verb and a topic from an explicit
|
|
90
|
+
`pm-...` item argument. Explicit overrides, session declarations, and trusted
|
|
91
|
+
host declarations retain precedence over this inference.
|
|
92
|
+
|
|
93
|
+
## Diagnose missing provenance
|
|
94
|
+
|
|
95
|
+
`diagnoseAgentIdentity()` is the additive diagnostic companion to
|
|
96
|
+
`detectAgentIdentity()`. It returns the same privacy-safe identity plus a
|
|
97
|
+
`provenance_outcomes` row for every built-in dimension. Each row is
|
|
98
|
+
`resolved`, `unavailable`, or `failed`, carries rule version `v1`, and may name
|
|
99
|
+
the bounded built-in resolver. It never contains environment values, session
|
|
100
|
+
paths, prompts, or file contents.
|
|
101
|
+
|
|
102
|
+
New mutation history records failed resolver outcomes under
|
|
103
|
+
`context.agent_provenance_outcomes`; ordinary unavailable dimensions retain
|
|
104
|
+
the compact legacy-compatible null projection. A resolver is only counted as
|
|
105
|
+
attempted when its required input exists. Consequently `pm health` can report
|
|
106
|
+
`provenance_resolver_zero_success:<harness>:<dimension>:<resolver>:<attempts>`
|
|
107
|
+
without confusing an unavailable harness signal with a failed resolver. The
|
|
108
|
+
warning is advisory and the storage check includes the bounded attempt and
|
|
109
|
+
success counters for diagnosis.
|
|
110
|
+
|
|
78
111
|
## Cross an MCP boundary
|
|
79
112
|
|
|
80
113
|
An embedding MCP client can add bounded `provenance` and `episode` fields to
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# SDK Context Integrity
|
|
2
|
+
|
|
3
|
+
Tracker: [pm-0k19l7](../.agents/pm/issues/pm-0k19l7.toon), [pm-9stazf](../.agents/pm/issues/pm-9stazf.toon), [pm-tu71](../.agents/pm/issues/pm-tu71.toon), [pm-0xmajx](../.agents/pm/issues/pm-0xmajx.toon), [pm-7rrqsk](../.agents/pm/issues/pm-7rrqsk.toon), [pm-ety1qc](../.agents/pm/issues/pm-ety1qc.toon), and [pm-lu6sca](../.agents/pm/features/pm-lu6sca.toon).
|
|
4
|
+
|
|
5
|
+
## Agent Quick Context
|
|
6
|
+
|
|
7
|
+
These contracts keep project management equal to context management: reads say what they omit, writes return only newly useful context, diagnostics do not unexpectedly call remote providers, and every transport delegates domain validation to the same SDK primitive. Package authors can use the same primitives without reproducing CLI parsing rules.
|
|
8
|
+
|
|
9
|
+
## `get` output selectors
|
|
10
|
+
|
|
11
|
+
`pm get` has one declared selector namespace. Top-level sections use their names, while item fields may be written as either a bare field or `item.<field>`:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pm get pm-a1b2 --output-include id,title
|
|
15
|
+
pm get pm-a1b2 --output-include item.id,item.title,linked
|
|
16
|
+
pm get pm-a1b2 --output-include item,claim_state
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
An unknown selector is a usage refusal that lists the valid vocabulary. Selecting the complete `item` object together with an item field is also refused because the two selectors express conflicting projection depths. Every successful projection carries an `omission_receipt` with the exact selectors needed to restore withheld item fields or sections.
|
|
20
|
+
|
|
21
|
+
Standard and brief item reads expose the stable `collection_counts` selector;
|
|
22
|
+
full reads retain those counts and normalize every supported collection key to
|
|
23
|
+
an array. `--output-include item.collection_counts` therefore uses the same
|
|
24
|
+
selector grammar and omission receipts as any other SDK-owned item field.
|
|
25
|
+
|
|
26
|
+
The same SDK-owned read-output registry now declares `package manage` as a first-class read surface. Package authors can resolve either `package manage` or `package-manage` to its canonical contract and discover the universal include, amount, cost, and encoding dimensions without copying CLI knowledge.
|
|
27
|
+
|
|
28
|
+
## Bounded annotation mutations
|
|
29
|
+
|
|
30
|
+
Adding, editing, or deleting a comment, note, or learning returns the changed entry plus mutation and omission receipts. The reply size therefore stays independent of the item’s existing annotation history. Pass `--full-history` when a human or integration genuinely needs the complete post-mutation collection:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pm comments pm-a1b2 "Decision evidence"
|
|
34
|
+
pm comments pm-a1b2 --edit 3 --message "Corrected evidence" --full-history
|
|
35
|
+
pm notes pm-a1b2 --delete 2 --full-history
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
SDK callers use `fullHistory: true`; MCP callers use `full: true`. The default stays bounded on every transport. An omission receipt identifies the semantic `full_history` selector and includes its CLI (`--full-history`), SDK (`fullHistory`), and MCP (`full`) spellings, so non-CLI consumers never need to interpret shell-only guidance.
|
|
39
|
+
|
|
40
|
+
## Author acknowledgment coordinates
|
|
41
|
+
|
|
42
|
+
CLI, SDK, and MCP use the same selector and coordinate parser for `history-author-acknowledge`. A coordinate is `<item-id>:<line>` or `_workspace:<line>`, with a positive one-based line number. Exactly one of explicit events or `all_actionable` is required.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pm history-author-acknowledge \
|
|
46
|
+
--event _workspace:4 \
|
|
47
|
+
--attributed-author import-agent \
|
|
48
|
+
--reviewer maintainer \
|
|
49
|
+
--reason "Verified workspace provenance"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The SDK exposes `resolveUnknownAuthorAcknowledgmentSelector` and `parseUnknownAuthorHistoryEventCoordinates` so packages never need a private copy of this grammar.
|
|
53
|
+
|
|
54
|
+
## Health provider boundary
|
|
55
|
+
|
|
56
|
+
`pm health` is read-only by default and never refreshes embeddings merely because a semantic provider is configured. Provider I/O requires `--refresh-vectors`; `--skip-vectors` or `--no-refresh` records the explicit non-provider path. Provider requests remain bounded by the configured embedding timeout, and a failed refresh reports the responsible vector diagnostic plus the skip remediation.
|
|
57
|
+
|
|
58
|
+
Storage integrity is evaluated independently of that provider boundary. Lossless merge receipts remain visible as provenance, while only receipts containing discarded scalar values produce `merge_decisions_unreviewed` guidance; neither classification enables vector refresh or remote provider I/O.
|
|
59
|
+
|
|
60
|
+
The storage check also reads at most 10,000 local immutable events for bounded
|
|
61
|
+
agent-provenance resolver outcomes. This scan performs no network or provider
|
|
62
|
+
I/O, tolerates malformed streams already owned by integrity diagnostics, and
|
|
63
|
+
reports an advisory warning only when a resolver was actually attempted but
|
|
64
|
+
never succeeded.
|
|
65
|
+
|
|
66
|
+
## Replication and refusal gate
|
|
67
|
+
|
|
68
|
+
`scripts/release/surface-replication-sets.json` declares replicated SDK, CLI, MCP, documentation, and test members. `pnpm quality:surface-replication` activates sets from the Git changeset, verifies every member invariant, and reports:
|
|
69
|
+
|
|
70
|
+
- active set recurrence density;
|
|
71
|
+
- the largest source member’s utilization of the mandatory file-size cap;
|
|
72
|
+
- every remaining CLI-owned `PmCliError`, grouped by an explicit adapter-level disposition;
|
|
73
|
+
- applied waivers, including their PM owner and expiry.
|
|
74
|
+
|
|
75
|
+
Query waivers directly with:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
node scripts/release/surface-replication-gate.mjs --list-waivers
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Waivers are never implicit: they require a canonical PM item, a reason, an exact set member, and an expiry date. New or moved CLI refusals fail until the inventory is updated or the rule is delegated into the SDK. The same declaration runs locally and inside the required static-quality workflow.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# SDK Runtime Boundaries
|
|
2
|
+
|
|
3
|
+
Tracker: [pm-1eted6](../.agents/pm/issues/pm-1eted6.toon),
|
|
4
|
+
[pm-3lhth4](../.agents/pm/issues/pm-3lhth4.toon), and
|
|
5
|
+
[pm-0xmajx](../.agents/pm/issues/pm-0xmajx.toon).
|
|
6
|
+
|
|
7
|
+
These SDK primitives keep host and project-runtime policy consistent across the
|
|
8
|
+
bundled CLI, packages, and automation without requiring consumers to reproduce
|
|
9
|
+
private CLI parsing rules.
|
|
10
|
+
|
|
11
|
+
## Project runtime compatibility
|
|
12
|
+
|
|
13
|
+
Packages and automation can call `inspectProjectRuntimeCompatibility` before a
|
|
14
|
+
mutation, or `assertProjectRuntimeCompatibility` when refusal semantics are
|
|
15
|
+
preferred. The SDK discovers the strongest project-local pm version pin from
|
|
16
|
+
the package manifest, installed package metadata, and supported lockfiles. A
|
|
17
|
+
CLI older than that pin refuses mutation with
|
|
18
|
+
`project_runtime_stale_mutation`; read commands stay available so an agent can
|
|
19
|
+
recover context before upgrading. Stale reads, including `context` and
|
|
20
|
+
read-only `health` invocations, emit the non-blocking
|
|
21
|
+
`project_runtime_stale_read` warning. JSON modes write a single structured
|
|
22
|
+
warning object to stderr, leaving the command's normal stdout envelope valid;
|
|
23
|
+
human modes identify both versions, the redaction-safe pin source, and a
|
|
24
|
+
package-manager-neutral recovery action. SDK callers receive the same warning
|
|
25
|
+
inside `ProjectRuntimeCompatibilityResult`. `PM_ALLOW_STALE_CLI=1` is the
|
|
26
|
+
explicit, auditable emergency override.
|
|
27
|
+
|
|
28
|
+
The public `isProjectMutatingInvocation` classifier applies the same decision
|
|
29
|
+
to package hosts and the bundled CLI. It resolves mixed command families by
|
|
30
|
+
their effective action: configuration, merge, schema, profile, package,
|
|
31
|
+
telemetry, workspace snapshot, template, VCS, validation, health, test, linked
|
|
32
|
+
artifact, and changelog reads remain available while their write forms are
|
|
33
|
+
fenced. Help, checks, previews, and dry runs remain reads, so compatibility
|
|
34
|
+
enforcement does not turn diagnostics into writes.
|
|
35
|
+
|
|
36
|
+
## Host-environment fault boundary
|
|
37
|
+
|
|
38
|
+
Use `withHostEnvironmentBoundary` around filesystem and resource operations
|
|
39
|
+
that cross into the host. It translates recognized Node errno failures into
|
|
40
|
+
the stable, path-redacted `host_environment_capacity_fault`,
|
|
41
|
+
`host_environment_permission_fault`, or `host_environment_resource_fault`
|
|
42
|
+
contracts. `classifyHostEnvironmentFault` supports diagnostics that need a
|
|
43
|
+
non-throwing classification, while `translateHostEnvironmentFault` supports an
|
|
44
|
+
existing catch boundary. Non-errno failures are returned unchanged and must
|
|
45
|
+
not be relabeled as environment faults.
|
|
46
|
+
|
|
47
|
+
Existing SDK surfaces can supply category-specific `codes` to preserve their
|
|
48
|
+
published error vocabulary while still sharing classification, path redaction,
|
|
49
|
+
and recovery guidance. Workspace snapshots use this compatibility path for
|
|
50
|
+
their stable storage, resource, and permission fault codes.
|
|
51
|
+
|
|
52
|
+
## CLI refusal ownership
|
|
53
|
+
|
|
54
|
+
CLI adapters preserve SDK error codes, exit semantics, and actionable recovery
|
|
55
|
+
guidance when presenting refusals as human-readable or structured output.
|
|
56
|
+
Host-only validation remains at the transport boundary, while rules shared by
|
|
57
|
+
packages and commands live in public SDK primitives so callers receive the
|
|
58
|
+
same refusal contract regardless of entrypoint.
|
|
@@ -79,6 +79,7 @@ The default summary stays bounded. Larger intent and error catalogs are emitted
|
|
|
79
79
|
- recovery guidance;
|
|
80
80
|
- source modules that emit the code.
|
|
81
81
|
- inferred CLI command roots (`*` for cross-cutting runtime failures).
|
|
82
|
+
- canonical code and compatibility aliases for concept-level handling.
|
|
82
83
|
|
|
83
84
|
Existing catalog entries are recorded in `scripts/error-code-stability.json`.
|
|
84
85
|
The generator refuses to remove one of those stable codes unless the reviewed
|
|
@@ -86,6 +87,18 @@ compatibility ledger is changed explicitly. Newly discovered codes are emitted
|
|
|
86
87
|
as provisional until deliberately promoted, so adding a runtime declaration
|
|
87
88
|
does not accidentally promise permanent compatibility.
|
|
88
89
|
|
|
90
|
+
The compatibility ledger also pins every stable code to its reviewed process
|
|
91
|
+
exit. An executable `PmCliError` declaration that disagrees with that mapping
|
|
92
|
+
fails generation, and a stable code without a mapping fails the drift check.
|
|
93
|
+
Reviewed alias groups preserve every emitted legacy spelling while exposing one
|
|
94
|
+
canonical concept to SDK, package, CLI-contract, and observability consumers.
|
|
95
|
+
Aliases must resolve directly to a declared stable canonical code and share its
|
|
96
|
+
exit class; cycles, missing targets, and transport mismatches fail closed.
|
|
97
|
+
|
|
98
|
+
Use `resolvePmErrorCodeContract` when the exact emitted spelling matters, and
|
|
99
|
+
`resolveCanonicalPmErrorCodeContract` when one handler should cover a complete
|
|
100
|
+
compatibility group.
|
|
101
|
+
|
|
89
102
|
`PM_ERROR_CODE_EXIT_CLASS_CONTRACTS` is the portable shell taxonomy: exit 1 is
|
|
90
103
|
generic failure, 2 is usage, 3 is not-found, 4 is conflict, and 5 is dependency
|
|
91
104
|
failure. Catalog validation rejects a code whose declared semantic class and
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Sentry Error Contract Epochs
|
|
2
|
+
|
|
3
|
+
Tracker reference: [pm-h75tjh](../.agents/pm/issues/pm-h75tjh.toon).
|
|
4
|
+
|
|
5
|
+
The release reliability gate declares `2026.8.7` as the minimum producer
|
|
6
|
+
version for canonical `pm.error_code` and `pm.exit_code` tags. An unresolved
|
|
7
|
+
event with a known older release is reported as `legacy_pre_contract`; it does
|
|
8
|
+
not block a current release merely because it cannot satisfy a future
|
|
9
|
+
producer contract.
|
|
10
|
+
|
|
11
|
+
Events from the minimum producer or newer remain blocking when they are
|
|
12
|
+
unexpected faults or lack the required tags. Events with no parseable producer
|
|
13
|
+
version are also blocking. JSON output includes the minimum version,
|
|
14
|
+
`legacy_pre_contract_total`, bounded legacy ids, and a bounded blocking-reason
|
|
15
|
+
row for each current issue. Expected handled usage, not-found, and conflict
|
|
16
|
+
errors remain a separate non-blocking class.
|
|
17
|
+
|
|
18
|
+
This epoch rule only changes gate classification. It does not resolve, delete,
|
|
19
|
+
or hide Sentry issues, and it does not weaken fatal or error thresholds for
|
|
20
|
+
current producers.
|
package/docs/TESTING.md
CHANGED
|
@@ -16,6 +16,8 @@ Tracked implementation updates: [pm-52eh](../.agents/pm/features/pm-52eh.toon),
|
|
|
16
16
|
|
|
17
17
|
Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon).
|
|
18
18
|
|
|
19
|
+
Local/hosted gate parity is tracked by [pm-ei6x66](../.agents/pm/tasks/pm-ei6x66.toon).
|
|
20
|
+
|
|
19
21
|
## Standard Local Checks
|
|
20
22
|
|
|
21
23
|
```bash
|
|
@@ -26,6 +28,21 @@ node scripts/run-tests.mjs test
|
|
|
26
28
|
node scripts/run-tests.mjs coverage
|
|
27
29
|
```
|
|
28
30
|
|
|
31
|
+
For the exact ordered local preflight used to make release-readiness claims,
|
|
32
|
+
run the registry-owned entrypoint:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pnpm verify:preflight
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`scripts/release/gate-registry.json` is the executable plan for this command:
|
|
39
|
+
each ordered step declares its command, arguments, environment, capture mode,
|
|
40
|
+
and whether an explicit skip flag is permitted. Receipts distinguish passed
|
|
41
|
+
steps from declared skips, and `quality:gate-registry` maps hosted workflow
|
|
42
|
+
claims to the same canonical gate IDs. Hosted-only environment isolation and
|
|
43
|
+
tracker-integrity steps remain explicit entries with reasons rather than
|
|
44
|
+
silently disappearing from local parity.
|
|
45
|
+
|
|
29
46
|
`node scripts/run-tests.mjs` wraps Vitest in temporary tracker roots, then cleans them up.
|
|
30
47
|
|
|
31
48
|
Public SDK changes additionally run semantic surface and import-cost contracts:
|
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"id": "returning-agent",
|
|
17
|
-
"max_estimated_tokens":
|
|
17
|
+
"max_estimated_tokens": 383
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"id": "failing-command",
|
|
21
21
|
"max_estimated_tokens": 197
|
|
22
22
|
}
|
|
23
23
|
],
|
|
24
|
-
"composite_max_estimated_tokens":
|
|
24
|
+
"composite_max_estimated_tokens": 2437
|
|
25
25
|
}
|
package/marketplace.json
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Official marketplace for pm CLI — native git-based project management for Claude Code and AI coding agents.",
|
|
9
|
-
"version": "2026.8.
|
|
9
|
+
"version": "2026.8.9"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "pm-claude",
|
|
14
14
|
"source": "./plugins/pm-claude",
|
|
15
15
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents, hybrid TUI task tracking, session context injection, and coordination subagents for git-based project management without leaving Claude Code.",
|
|
16
|
-
"version": "2026.8.
|
|
16
|
+
"version": "2026.8.9",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "unbrained",
|
|
19
19
|
"url": "https://github.com/unbraind/pm-cli"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.9",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@11.10.0",
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
"lint:complexity:baseline": "eslint . --suppress-rule complexity --suppress-rule sonarjs/cognitive-complexity",
|
|
121
121
|
"lint:duplicates": "jscpd --config .jscpd.json",
|
|
122
122
|
"lint:codefactor": "pnpm quality:static",
|
|
123
|
-
"quality:static": "pnpm build && pnpm exec tsx scripts/release/static-quality-gate.mts --max-eslint-suppressions 114 --max-coverage-ignore-pragmas 477 --min-docstring-coverage 100 --min-exported-docstring-coverage 100 --min-member-docstring-coverage 100 && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/token-budget-gate.mjs && node scripts/release/context-intent-calibration-gate.mjs && node scripts/release/tracker-measurement-gate.mjs && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check",
|
|
123
|
+
"quality:static": "pnpm build && pnpm exec tsx scripts/release/static-quality-gate.mts --max-eslint-suppressions 114 --max-coverage-ignore-pragmas 477 --min-docstring-coverage 100 --min-exported-docstring-coverage 100 --min-member-docstring-coverage 100 && node scripts/release/audit-package-boundary.mjs && node scripts/release/package-sdk-contract-parity.mjs && node scripts/release/surface-replication-gate.mjs && node scripts/release/token-budget-gate.mjs && node scripts/release/context-intent-calibration-gate.mjs && node scripts/release/tracker-measurement-gate.mjs && node scripts/release/gate-registry.mjs && node scripts/sdk-surface-snapshot.mjs --check && node scripts/bench/sdk-entrypoint-costs.mjs --check && node scripts/bench/cli-transport-floor.mjs --check",
|
|
124
124
|
"quality:token-budget": "node scripts/release/token-budget-gate.mjs",
|
|
125
125
|
"quality:token-surface": "node scripts/measure-agent-token-surface.mjs --check",
|
|
126
126
|
"quality:token-surface:update": "pnpm build && node scripts/measure-agent-token-surface.mjs --update",
|
|
@@ -132,6 +132,7 @@
|
|
|
132
132
|
"quality:gate-registry": "pnpm build && node scripts/release/gate-registry.mjs",
|
|
133
133
|
"quality:tracker-measurements": "pnpm build && node scripts/release/tracker-measurement-gate.mjs",
|
|
134
134
|
"quality:package-artifact": "pnpm build && node scripts/release/package-artifact-gate.mjs",
|
|
135
|
+
"quality:surface-replication": "node scripts/release/surface-replication-gate.mjs",
|
|
135
136
|
"quality:docs-skills": "node scripts/release/docs-skills-gate.mjs",
|
|
136
137
|
"quality:docs-links": "node scripts/release/docs-skills-gate.mjs --links-only",
|
|
137
138
|
"quality:hosted-analysis": "node scripts/release/hosted-analysis-gate.mjs",
|
|
@@ -163,6 +164,7 @@
|
|
|
163
164
|
"changelog:pm:check": "pnpm changelog:pm:install && node dist/cli.js changelog generate --output CHANGELOG.md --title \"Changelog\" --mode replace --all-release-tags --status closed --item-url-base https://github.com/unbraind/pm-cli/blob/main/.agents/pm --check",
|
|
164
165
|
"release:notes": "node scripts/generate-release-notes.mjs",
|
|
165
166
|
"release:gates": "node scripts/release/run-gates.mjs --telemetry-mode best-effort",
|
|
167
|
+
"verify:preflight": "node scripts/release/run-gates.mjs --telemetry-mode best-effort",
|
|
166
168
|
"release:pipeline": "node scripts/release/run-release-pipeline.mjs",
|
|
167
169
|
"release:pipeline:dry-run": "node scripts/release/run-release-pipeline.mjs --dry-run",
|
|
168
170
|
"release:verify-published": "node scripts/release/verify-published-release.mjs",
|
|
@@ -218,7 +220,7 @@
|
|
|
218
220
|
"fast-check": "^4.9.0",
|
|
219
221
|
"greptile": "^3.3.1",
|
|
220
222
|
"jscpd": "^5.0.14",
|
|
221
|
-
"tsx": "^4.23.
|
|
223
|
+
"tsx": "^4.23.11",
|
|
222
224
|
"typescript": "^6.0.3",
|
|
223
225
|
"typescript-eslint": "^8.66.0",
|
|
224
226
|
"vitest": "^4.1.10",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-digital-twin",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.9",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
|