@unbrained/pm-cli 2026.8.4 → 2026.8.5
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 +39 -13
- package/dist/cli/error-guidance.js +4 -4
- package/dist/cli/register-structured-mutation.d.ts +2 -0
- package/dist/cli/register-structured-mutation.js +124 -12
- package/dist/cli-bundle/bundle-manifest.json +407 -407
- package/dist/cli-bundle/chunks/append-VXXGOXSG.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-QVO3VTA4.js → chunk-2WFXWAYX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NM5G7RLU.js → chunk-3FTILRJ2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VH2EAGUG.js → chunk-42E7YPLG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RB65T4RX.js → chunk-43HQQI6S.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-J4EPW4GT.js → chunk-45G53IU4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-PQXEB7W4.js → chunk-4VN6GS4U.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-4YUBDMQM.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-D2MBVMVE.js → chunk-54FNT7U2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NRDKVOUE.js → chunk-5ZBOIPGP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3XZYTRPC.js → chunk-6MSQJOTG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GOICHIX4.js → chunk-7A5OT5J2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HTYC76A4.js → chunk-7C4PTJG6.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BKMZTZYL.js → chunk-A62CYISG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5H47J5FG.js → chunk-BPELKUQD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HE3DZFN4.js → chunk-BXQLRKWF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BLINBTMX.js → chunk-CSI3WS5I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KH4GVBMC.js → chunk-DXDREUXT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KIKLF2W4.js → chunk-E2RKBKWB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-377OOXUF.js → chunk-EGJ4JTUG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SULWTPQO.js → chunk-FPBQHMFT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-V5K52PYW.js → chunk-GE4KCSZP.js} +35 -35
- package/dist/cli-bundle/chunks/{chunk-NPUJ7OLK.js → chunk-HNFD72UK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QMWUL66F.js → chunk-HWRRMBJO.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-L3AZOELJ.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-CGY5I2GO.js → chunk-LKDGK44W.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-LN2WFEU4.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-ZSH4GNBH.js → chunk-M72BKL5Q.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HQ2WU7OY.js → chunk-MHK6LIWE.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-H6FITE7D.js → chunk-NE5VRDAI.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-NY4T3JWN.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-DCJ6CM6F.js → chunk-OMXVBQ2N.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-OPVH7SKD.js +8 -0
- package/dist/cli-bundle/chunks/{chunk-CU5ENFNP.js → chunk-OTHLDSFP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NH35JNK5.js → chunk-PMXJEU3F.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SVDH5CHC.js → chunk-Q35VBGOQ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-5PZGZMPG.js → chunk-R546TPDE.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-Q5F6OI7C.js → chunk-RKAVWO3O.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JMKVCQSE.js → chunk-SSF4PIUR.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-PA5XRN2A.js → chunk-UN66FZRO.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-FQ4EFFDU.js → chunk-UP7DTVMD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NFF3JAQR.js → chunk-UZBWIUYD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2POYGY53.js → chunk-V3774P7D.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-B5ZLCD5Z.js → chunk-V3EUXXOF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-6S7I3UKV.js → chunk-VCKLFEUN.js} +19 -19
- package/dist/cli-bundle/chunks/{chunk-PYYPQLHC.js → chunk-VN5VITU3.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-WRL4KNDL.js +20 -0
- package/dist/cli-bundle/chunks/{chunk-UJHUR3LZ.js → chunk-XCEZYMNI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JDPKBV5P.js → chunk-YEWNL576.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OB7TRZ2G.js → chunk-YSO3YFZ4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-UVZREFZU.js → chunk-ZYHOB3SN.js} +2 -2
- package/dist/cli-bundle/chunks/close-VZ3OQPN5.js +2 -0
- package/dist/cli-bundle/chunks/close-many-SB4TI27P.js +2 -0
- package/dist/cli-bundle/chunks/comments-BIF3Q4KY.js +2 -0
- package/dist/cli-bundle/chunks/copy-6AI5Z57X.js +2 -0
- package/dist/cli-bundle/chunks/{create-RLLCBCXM.js → create-XLKTXTUF.js} +2 -2
- package/dist/cli-bundle/chunks/delete-ZY2VHQTP.js +2 -0
- package/dist/cli-bundle/chunks/{deps-J4ONTF4X.js → deps-ITTY3GIC.js} +2 -2
- package/dist/cli-bundle/chunks/{docs-YL2DJ4WD.js → docs-W4OSRTYR.js} +2 -2
- package/dist/cli-bundle/chunks/{files-NGNAIYKK.js → files-EOK4AZI4.js} +2 -2
- package/dist/cli-bundle/chunks/focus-DLBNWL7L.js +2 -0
- package/dist/cli-bundle/chunks/{history-compact-HW62K5XP.js → history-compact-7UGTMLL3.js} +2 -2
- package/dist/cli-bundle/chunks/{history-redact-HVBKUJOW.js → history-redact-4DZRMD6Z.js} +2 -2
- package/dist/cli-bundle/chunks/{history-repair-OPNBH5JJ.js → history-repair-UPOSZW5R.js} +2 -2
- package/dist/cli-bundle/chunks/{learnings-F36PZXT6.js → learnings-GMRNCBS3.js} +2 -2
- package/dist/cli-bundle/chunks/{profile-N3XMWBM7.js → profile-2MUUMHRE.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-BKGHBI7Y.js → register-list-query-LR3SQ5ZF.js} +2 -2
- package/dist/cli-bundle/chunks/register-mutation-SUOHFVWM.js +20 -0
- package/dist/cli-bundle/chunks/register-operations-ARRRKOVN.js +2 -0
- package/dist/cli-bundle/chunks/{register-setup-KWV6UD77.js → register-setup-O6AYP6NP.js} +2 -2
- package/dist/cli-bundle/chunks/restore-ZVCVHTB5.js +2 -0
- package/dist/cli-bundle/chunks/{schema-4PJQMGUY.js → schema-FJ4EA3XF.js} +2 -2
- package/dist/cli-bundle/chunks/update-YHV52CSS.js +2 -0
- package/dist/cli-bundle/chunks/update-many-M6YHVNXM.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-7J5TUBUJ.js +153 -0
- package/dist/cli-bundle/focused-chunks/{chunk-ONIX2KKW.js → chunk-A7BJ5SS6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-B7LJWAZE.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-QM2BIVK7.js → chunk-BIMTMOS7.js} +3 -3
- package/dist/cli-bundle/focused-chunks/{chunk-BOGRY7M6.js → chunk-FGKY4MBE.js} +10 -10
- package/dist/cli-bundle/focused-chunks/chunk-G6ETT4QK.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-C2QSL62X.js → chunk-GJ2TG2CW.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-RO5BQFG3.js → chunk-IPWSFADF.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-UFCPSWIL.js → chunk-MJ7HWSFK.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-2VIIXOAD.js → chunk-N5XU5UVK.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-PG2RIZBX.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-OYTK4VNH.js → chunk-PIMMYG7Q.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-K37BB4JL.js → chunk-QVHKCI4T.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-SQXVGHMH.js → chunk-RUR5I3TK.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-SV3O7TSH.js +8 -0
- package/dist/cli-bundle/focused-chunks/{chunk-L6A4NVQC.js → chunk-UIL2M2NA.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-WVGJAD7L.js → chunk-VLYOEYML.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-W7BJEWHX.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-DQ4PLKEE.js → chunk-WEM2E2PE.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-WVIVUWVL.js +5 -0
- package/dist/cli-bundle/focused-chunks/chunk-Y4LDYLLT.js +2 -0
- package/dist/cli-bundle/main.js +4 -4
- 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 +28 -28
- 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 +1 -1
- package/dist/core/extensions/loader.js +5 -2
- package/dist/core/item/item-format.js +14 -20
- package/dist/core/shared/constants.js +3 -2
- package/dist/core/store/item-store.js +2 -2
- package/dist/core/store/settings.js +2 -2
- package/dist/mcp/server.js +12 -6
- package/dist/mcp/tool-definitions.js +14 -7
- package/dist/sdk/cli-contracts/agent-output-contracts.d.ts +18 -18
- package/dist/sdk/cli-contracts/agent-output-contracts.js +51 -23
- package/dist/sdk/cli-contracts/commander-mutation-options.js +26 -2
- package/dist/sdk/cli-contracts/flag-contracts.d.ts +2 -0
- package/dist/sdk/cli-contracts/flag-contracts.js +28 -2
- package/dist/sdk/cli-contracts/registration-helpers.js +4 -2
- package/dist/sdk/cli-contracts/runtime-contracts.d.ts +10 -2
- package/dist/sdk/cli-contracts/runtime-contracts.js +20 -5
- package/dist/sdk/cli-contracts/tool-schema.js +4 -2
- package/dist/sdk/cli-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts.js +4 -4
- package/dist/sdk/cli-program.js +3 -3
- package/dist/sdk/contracts.d.ts +1 -0
- package/dist/sdk/contracts.js +3 -2
- package/dist/sdk/dependency-provenance.d.ts +2 -0
- package/dist/sdk/dependency-provenance.js +7 -3
- package/dist/sdk/error-code-catalog.d.ts +23 -0
- package/dist/sdk/error-code-catalog.js +25 -5
- package/dist/sdk/generated-error-code-catalog.js +499 -3
- package/dist/sdk/graph/governance.js +3 -3
- package/dist/sdk/graph/remediation.js +3 -3
- package/dist/sdk/graph/run.js +4 -8
- package/dist/sdk/index.d.ts +2 -1
- package/dist/sdk/index.js +4 -3
- package/dist/sdk/item-transaction.d.ts +51 -6
- package/dist/sdk/item-transaction.js +132 -22
- package/dist/sdk/lifecycle/create.d.ts +4 -0
- package/dist/sdk/lifecycle/create.js +26 -10
- package/dist/sdk/lifecycle-policy.d.ts +9 -0
- package/dist/sdk/lifecycle-policy.js +22 -9
- package/dist/sdk/merge/driver.js +6 -3
- package/dist/sdk/output-contracts.d.ts +67 -0
- package/dist/sdk/output-contracts.js +173 -0
- package/dist/sdk/package-import-adapters.js +2 -2
- package/dist/sdk/structured-mutations.d.ts +23 -0
- package/dist/sdk/structured-mutations.js +219 -10
- package/dist/sdk/workspace-snapshot.js +58 -12
- package/dist/sdk/workspace.js +30 -4
- package/docs/COMMANDS.md +40 -10
- package/docs/EXTENSIONS.md +1 -1
- package/docs/MERGE_SAFETY.md +2 -0
- package/docs/PR_REVIEW_LOOP.md +10 -4
- package/docs/README.md +22 -22
- package/docs/RELEASING.md +3 -3
- package/docs/SCRIPTING.md +32 -9
- package/docs/SDK.md +91 -11
- package/docs/SELF_DESCRIBING_CONTEXT_CONTRACTS.md +13 -0
- package/docs/TESTING.md +25 -0
- package/docs/examples/sdk-contract-consumer/README.md +11 -1
- package/docs/examples/sdk-contract-consumer/package.json +2 -1
- package/docs/examples/sdk-contract-consumer/parse-receipt.mjs +22 -0
- package/marketplace.json +2 -2
- package/package.json +3 -2
- 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 +292 -14
- package/dist/cli-bundle/chunks/append-DHBRLHHS.js +0 -2
- package/dist/cli-bundle/chunks/chunk-2INN52SU.js +0 -8
- package/dist/cli-bundle/chunks/chunk-6RSK4IFN.js +0 -20
- package/dist/cli-bundle/chunks/chunk-ASJJKA57.js +0 -2
- package/dist/cli-bundle/chunks/chunk-IYAVULRN.js +0 -2
- package/dist/cli-bundle/chunks/chunk-RRQBHQOV.js +0 -2
- package/dist/cli-bundle/chunks/chunk-XBLOD5TZ.js +0 -2
- package/dist/cli-bundle/chunks/close-VLHNN6YB.js +0 -2
- package/dist/cli-bundle/chunks/close-many-LSJNZKU6.js +0 -2
- package/dist/cli-bundle/chunks/comments-AAIA6A6X.js +0 -2
- package/dist/cli-bundle/chunks/copy-Z7YMLEHN.js +0 -2
- package/dist/cli-bundle/chunks/delete-KNOHHQJM.js +0 -2
- package/dist/cli-bundle/chunks/focus-LFRCGALV.js +0 -2
- package/dist/cli-bundle/chunks/register-mutation-GU3DCECN.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-PTWH727R.js +0 -2
- package/dist/cli-bundle/chunks/restore-4HZSLILR.js +0 -2
- package/dist/cli-bundle/chunks/update-E6LPS5IV.js +0 -2
- package/dist/cli-bundle/chunks/update-many-OSIC6KRO.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-5MTKO7TV.js +0 -153
- package/dist/cli-bundle/focused-chunks/chunk-6GIZK7VQ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AOP2WIZZ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-CL75YW32.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-E7OFMWGT.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-I5F5UK3Q.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-T5TSY36R.js +0 -5
- package/dist/cli-bundle/focused-chunks/chunk-VT6BF2IX.js +0 -2
package/docs/SDK.md
CHANGED
|
@@ -290,7 +290,8 @@ Command/action contract exports:
|
|
|
290
290
|
- Relationship graph primitives: `RelationshipKindRegistry`, `createRelationshipKindRegistry`, `assertRelationshipEdgeAllowed`, `RelationshipGraph`, `RelationshipEventLog`, `RelationshipEventStore`, `planRelationshipEventBackfill`, `buildRelationshipContext`, `buildDepsRelationshipContext`, `hierarchyAncestors`, `hierarchyDescendants`, `orderingPredecessors`, `orderingSuccessors`, `enumerateRelationshipPaths`, `auditWorkspaceRelationshipGraph`, `isOrderingRelationshipKind`, and `dependencyToRelationship` provide application-defined edge semantics, durable replay, deterministic legacy migration, bounded semantic traversal, policy-aware governance, and explainable context queries. Mutation adapters should call `assertRelationshipEdgeAllowed` with the active registry before persistence; it resolves aliases and honors custom `allowSelf` definitions while built-in self edges fail before item or history writes. `RelationshipEventLog.stream/project` and their durable-store equivalents page immutable prefixes and fold them into deterministic application state with exact version, processed-count, and as-of metadata. `RelationshipEventStore.appendBatch` validates a complete import under one cross-process lock and atomically publishes it; `skip_identical` resume mode rejects same-id semantic collisions. `RelationshipGraphAdapter`, `createRelationshipGraphSnapshot`, `syncRelationshipGraphAdapter`, `loadRelationshipGraphAdapter`, and `federateRelationshipGraphSnapshots` form the backend-neutral content-addressed projection boundary for database or remote graph packages. `MemoryRelationshipGraphAdapter`, `assertRelationshipGraphAdapterConformance`, and `createRelationshipGraphScaleFixture` give package authors a reference implementation, reusable compatibility contract, and lazy deterministic fixtures through one million nodes. See [Relationship graph semantics](RELATIONSHIP_GRAPH.md).
|
|
291
291
|
- Atomic application transactions: `commitWorkspaceTransaction` coordinates ordered, idempotent item and relationship mutations under one workspace writer lock and a durable replay journal. Interrupted work resumes from step inspection; ordinary failures append reverse-order compensations without rewriting immutable histories.
|
|
292
292
|
- Multi-branch merge primitives: `mergeItemDocuments`, `mergeHistoryStreams`, `mergeRelationshipEventStreams`, `mergeJsonDocuments`, `runMergeDriver`, `runMergeInstall`, and `runMergeReconcile` provide the same field-aware item, hash-chain-preserving history, sequence-renumbering relationship-event, key-level configuration, and audited post-merge repair-and-verify semantics as `pm merge`; `installMergeFence` and `findGitWorkspaceRoot` let custom init hosts install the same contract with explicit roots, while `buildMergeAttributePatterns`, `refreshMergeAttributeFenceIfInstalled`, and `auditMergeAttributeFence` expose fence coverage, refresh, and validation. See [Multi-Branch Merge Safety](MERGE_SAFETY.md).
|
|
293
|
-
- Dependency provenance primitives: `EXTERNAL_DEPENDENCY_SOURCE_KIND`, `isExternalDependencySourceKind`, and `normalizeDependencySeedId` let custom importers preserve cross-workspace dependency ids explicitly while retaining local prefix normalization for ordinary seeds. Newly created dependency rows also carry the effective `author`, `author_source` (`asserted` or `detected`), and a mutation `source_kind`; legacy rows remain readable without invented provenance.
|
|
293
|
+
- Dependency provenance primitives: `EXTERNAL_DEPENDENCY_SOURCE_KIND`, `EXTERNAL_DEPENDENCY_SOURCE_KIND_ALIAS`, `isExternalDependencySourceKind`, and `normalizeDependencySeedId` let custom importers preserve cross-workspace dependency ids explicitly while retaining local prefix normalization for ordinary seeds. `source_kind: "external"` is the human-facing alias and persists canonically as `global`; a `blocked_by` row with that provenance is a real external predecessor, so graph governance does not require a fabricated local item or misreport `stale_lifecycle_block`. Newly created dependency rows also carry the effective `author`, `author_source` (`asserted` or `detected`), and a mutation `source_kind`; legacy rows remain readable without invented provenance. Tracked by [pm-6sc8jq](../.agents/pm/issues/pm-6sc8jq.toon).
|
|
294
|
+
- Terminal-create primitive: `CreateCommandOptions.closeReason` and `completedAt` allow importers to create an already-terminal item in the same atomic item/history transaction while preserving the source completion time separately from the local `closed_at` mutation time. The equivalent CLI flags are `--close-reason` and `--completed-at`; direct JSON documents map `close_reason` and `completed_at` to the same SDK operation. A missing governed reason returns `close_reason_required` with same-command `pm create` recovery examples. Tracked by [pm-ykdt4m](../.agents/pm/issues/pm-ykdt4m.toon) and [pm-5uclvd](../.agents/pm/issues/pm-5uclvd.toon).
|
|
294
295
|
- Compile-cache lifecycle primitive: `pruneCompileCacheGenerations` bounds pm-owned Node bytecode caches to the current package generation; embedded hosts can apply the same upgrade cleanup without importing the executable entrypoint.
|
|
295
296
|
- Typed mutation inputs (pm-x29o / GH-601): `PmCreateActionOptions`, `PmUpdateActionOptions`, and `PmCloseActionOptions` (`PmClientCloseActionOptions` on the client method) strip the permissive custom-field index signature from the executable command-option contracts, retaining their exact public keys and value types without a second hand-written shape; the free `create`/`update`/`close` functions and `PmClient` methods share those types. `PmUpdateManyActionOptions`, `PmCloseManyActionOptions`, and `OptionsFromContracts` cover flat action-contract composition. Field typos, object values, invalid scalar kinds, and MCP-only aliases on a `PmClient` command-option bag fail `tsc` under strict. Runtime-schema custom fields use the repeatable `field` option and `PmClient.run` remains the wide escape hatch. Projected list rows expose the typed `ListProjectedItemCore` fields (`row.id` is `string | undefined`, never `unknown`).
|
|
296
297
|
- Typed customization primitives on `PmClient`: `init`, `config`, `schema`, `schemaList`, `schemaShow`, `schemaAddType`, `schemaRemoveType`, `schemaAddStatus`, `schemaRemoveStatus`, `schemaAddField`, `schemaRemoveField`, `schemaListFields`, `schemaShowField`, `schemaApplyPreset`, `schemaInferTypes`, `schemaShowStatus`, `profile`, `profileList`, `profileShow`, `profileApply`, and `profileLint`
|
|
@@ -567,18 +568,20 @@ Tracked by [pm-5t33or](../.agents/pm/features/pm-5t33or.toon),
|
|
|
567
568
|
[pm-gmdzaa](../.agents/pm/issues/pm-gmdzaa.toon), and
|
|
568
569
|
[pm-dpqa3h](../.agents/pm/chores/pm-dpqa3h.toon).
|
|
569
570
|
|
|
570
|
-
`PM_COMMAND_OUTPUT_BUDGET_CONTRACTS` declares
|
|
571
|
-
|
|
571
|
+
`PM_COMMAND_OUTPUT_BUDGET_CONTRACTS` declares generated TOON and JSON
|
|
572
|
+
estimated-token ceilings for every built-in command. Each row also carries its workload class,
|
|
572
573
|
the stable `ceil(UTF-8 bytes / 4)` estimate, whether an explicit unbounded
|
|
573
574
|
request is allowed, and the shared deterministic degradation ladder:
|
|
574
575
|
`full → compact → brief → summary → counts`. These contracts are policy data,
|
|
575
576
|
not renderer-specific code, so package authors can reuse
|
|
576
|
-
`
|
|
577
|
+
`createPmCommandOutputBudget`, `definePmCommandOutputBudget`,
|
|
578
|
+
`resolvePmCommandOutputBudget`, and
|
|
577
579
|
`estimatePmOutputTokens` in custom transports.
|
|
578
580
|
|
|
579
581
|
```ts
|
|
580
582
|
import {
|
|
581
583
|
definePmCommandOutputBudget,
|
|
584
|
+
parseMutationReceipt,
|
|
582
585
|
estimatePmOutputTokens,
|
|
583
586
|
resolvePmCommandOutputBudget,
|
|
584
587
|
} from "@unbraind/pm-cli/sdk/contracts";
|
|
@@ -587,6 +590,7 @@ const compactRead = definePmCommandOutputBudget({
|
|
|
587
590
|
command: "get",
|
|
588
591
|
budget_class: "read",
|
|
589
592
|
default_max_estimated_tokens: 800,
|
|
593
|
+
default_max_estimated_tokens_by_format: { toon: 800, json: 1200 },
|
|
590
594
|
degradation_ladder: ["compact", "summary"],
|
|
591
595
|
allows_unbounded_opt_out: false,
|
|
592
596
|
token_estimate: "ceil(utf8_bytes / 4)",
|
|
@@ -596,8 +600,21 @@ const builtIn = resolvePmCommandOutputBudget("contracts --summary");
|
|
|
596
600
|
const measured = estimatePmOutputTokens(
|
|
597
601
|
new TextEncoder().encode(JSON.stringify(result)).byteLength,
|
|
598
602
|
);
|
|
603
|
+
|
|
604
|
+
const receipt = parseMutationReceipt(mutationStdout);
|
|
605
|
+
// receipt.id and receipt.changedFieldCount are typed; wrapped read envelopes
|
|
606
|
+
// throw instead of silently producing an undefined id.
|
|
599
607
|
```
|
|
600
608
|
|
|
609
|
+
`PM_COMMAND_OUTPUT_ENVELOPE_CONTRACTS` and
|
|
610
|
+
`resolvePmCommandOutputEnvelope` declare whether the default structured result
|
|
611
|
+
is a flat mutation receipt, wrapped entity, collection, diagnostic, or stream.
|
|
612
|
+
The contracts command keeps summary bootstrap output compact and publishes
|
|
613
|
+
complete budget/envelope pairs under `command_output_contracts` only in the
|
|
614
|
+
explicit full projection. Active package commands receive deterministic
|
|
615
|
+
fallback contracts, so extension authors can discover a bounded surface before
|
|
616
|
+
they invoke it.
|
|
617
|
+
|
|
601
618
|
`pm activity` applies a compact 20-row default bound; direct SDK calls default
|
|
602
619
|
to five full rows. Results disclose `total_count`, `omitted_count`, `has_more`,
|
|
603
620
|
and `applied_bound`. An explicit `limit` remains authoritative, while
|
|
@@ -1053,7 +1070,10 @@ tools that need to own item state without spawning `pm`.
|
|
|
1053
1070
|
Tracked by [pm-4e12](../.agents/pm/features/pm-4e12.toon), with the VCS
|
|
1054
1071
|
acceptance story [pm-8ngt](../.agents/pm/stories/pm-8ngt.toon) and the structured
|
|
1055
1072
|
SDK adapters tracked by [pm-xm7c](../.agents/pm/features/pm-xm7c.toon) and
|
|
1056
|
-
[pm-kipd](../.agents/pm/features/pm-kipd.toon)
|
|
1073
|
+
[pm-kipd](../.agents/pm/features/pm-kipd.toon), versioned batch-local
|
|
1074
|
+
references tracked by [pm-o8z748](../.agents/pm/issues/pm-o8z748.toon), and
|
|
1075
|
+
atomic evidence-backed completion tracked by
|
|
1076
|
+
[pm-cyn0y6](../.agents/pm/issues/pm-cyn0y6.toon).
|
|
1057
1077
|
|
|
1058
1078
|
`commitWorkspaceTransaction` is the public unit-of-work primitive for domain
|
|
1059
1079
|
commands that must coordinate several SDK mutations. A plan supplies a stable
|
|
@@ -1193,12 +1213,15 @@ previously compensated retry without package-private file access.
|
|
|
1193
1213
|
For the ubiquitous "commit N item mutations atomically" case (bulk import,
|
|
1194
1214
|
bulk sync), `commitItemMutations` wraps the coordinator so callers describe
|
|
1195
1215
|
the mutations instead of hand-writing a step array. The helper wires the
|
|
1196
|
-
crash-consistency contract for you: creates use their
|
|
1216
|
+
crash-consistency contract for you: creates use their resolved stable `id` as
|
|
1197
1217
|
the idempotency key (exists-by-id inspection) and are compensated by closing
|
|
1198
1218
|
the item (or deleting it with `createCompensation: "delete"`); updates stamp a
|
|
1199
1219
|
durable history marker for applied-detection and are compensated by restoring
|
|
1200
1220
|
the captured pre-mutation version; closes treat an already-terminal target as
|
|
1201
|
-
applied and are likewise compensated by version restore
|
|
1221
|
+
applied and are likewise compensated by version restore; releases restore the
|
|
1222
|
+
prior claim when a later step fails. The journal step identity includes a
|
|
1223
|
+
canonical mutation fingerprint, so reusing a transaction id with changed
|
|
1224
|
+
payload fails before new work. A stable
|
|
1202
1225
|
`transactionId` makes interrupted batches resumable across processes and
|
|
1203
1226
|
agents.
|
|
1204
1227
|
|
|
@@ -1249,7 +1272,7 @@ each `addAc`/`removeAc` entry must be semicolon-free; unmatched removals are
|
|
|
1249
1272
|
reported as `remove_ac_unmatched:<text>` warnings rather than disappearing as
|
|
1250
1273
|
silent no-ops.
|
|
1251
1274
|
|
|
1252
|
-
`parseItemMutationBatch` is the strict JSON boundary for that primitive. It
|
|
1275
|
+
`parseItemMutationBatch` is the strict legacy JSON boundary for that primitive. It
|
|
1253
1276
|
accepts either a non-empty mutation array or `{ "mutations": [...] }`, derives
|
|
1254
1277
|
allowed option names from the exported create/update/close command contracts,
|
|
1255
1278
|
and rejects unknown row or option keys with a did-you-mean diagnostic before a
|
|
@@ -1271,6 +1294,61 @@ await commitItemMutations({
|
|
|
1271
1294
|
});
|
|
1272
1295
|
```
|
|
1273
1296
|
|
|
1297
|
+
For coherent heterogeneous specifications, use
|
|
1298
|
+
`resolveItemMutationDocument`. It accepts the legacy array or a versioned
|
|
1299
|
+
`{ schema_version: 1, mutations }` document. Create rows may declare a unique
|
|
1300
|
+
`ref`, omit `id`, and use exact `@ref` values in target ids, `parent`,
|
|
1301
|
+
`blockedBy`, and dependency `id` fields. Omitted ids are derived from the
|
|
1302
|
+
transaction id, alias, and workspace prefix; explicit ids are normalized.
|
|
1303
|
+
Malformed, duplicate, unknown, and cyclic references fail before tracker
|
|
1304
|
+
mutation. Commit the returned mutations and retain its alias-to-id receipt:
|
|
1305
|
+
|
|
1306
|
+
```ts
|
|
1307
|
+
import {
|
|
1308
|
+
commitItemMutations,
|
|
1309
|
+
resolveItemMutationDocument,
|
|
1310
|
+
} from "@unbrained/pm-cli/sdk";
|
|
1311
|
+
import path from "node:path";
|
|
1312
|
+
|
|
1313
|
+
const pmRoot = path.join(process.cwd(), ".agents", "pm");
|
|
1314
|
+
const specificationJson = JSON.stringify({
|
|
1315
|
+
schema_version: 1,
|
|
1316
|
+
mutations: [
|
|
1317
|
+
{
|
|
1318
|
+
op: "create",
|
|
1319
|
+
ref: "initiative",
|
|
1320
|
+
options: { title: "Initiative", type: "Epic" },
|
|
1321
|
+
},
|
|
1322
|
+
{
|
|
1323
|
+
op: "create",
|
|
1324
|
+
ref: "delivery",
|
|
1325
|
+
options: {
|
|
1326
|
+
title: "Delivery",
|
|
1327
|
+
type: "Feature",
|
|
1328
|
+
parent: "@initiative",
|
|
1329
|
+
},
|
|
1330
|
+
},
|
|
1331
|
+
],
|
|
1332
|
+
});
|
|
1333
|
+
|
|
1334
|
+
const resolved = resolveItemMutationDocument(specificationJson, {
|
|
1335
|
+
transactionId: "specification-2026-08-05-001",
|
|
1336
|
+
idPrefix: "pm-",
|
|
1337
|
+
});
|
|
1338
|
+
await commitItemMutations({
|
|
1339
|
+
pmRoot,
|
|
1340
|
+
author: "specification-agent",
|
|
1341
|
+
transactionId: "specification-2026-08-05-001",
|
|
1342
|
+
mutations: resolved.mutations,
|
|
1343
|
+
});
|
|
1344
|
+
```
|
|
1345
|
+
|
|
1346
|
+
`buildItemCompletionMutations` creates the ordered evidence/update, close, and
|
|
1347
|
+
release plan for inspection. `commitItemCompletion` executes that plan through
|
|
1348
|
+
the same durable coordinator, restoring annotations, linked artifacts,
|
|
1349
|
+
lifecycle fields, and claim ownership on failure. It is the SDK primitive
|
|
1350
|
+
behind `pm item complete`.
|
|
1351
|
+
|
|
1274
1352
|
`itemDocumentToMutationOptions` is the companion full-document adapter. It
|
|
1275
1353
|
accepts either a direct `ItemDocument` or the envelope returned by
|
|
1276
1354
|
`pm get <id> --json`, strips read-only metadata, maps canonical snake-case item
|
|
@@ -1281,9 +1359,11 @@ through the public `field` escape hatch.
|
|
|
1281
1359
|
|
|
1282
1360
|
The built-in adapters stay deliberately thin:
|
|
1283
1361
|
|
|
1284
|
-
- `pm item mutate --transaction-id <stable-id> --stdin-json`
|
|
1285
|
-
commits a batch
|
|
1286
|
-
|
|
1362
|
+
- `pm item mutate --transaction-id <stable-id> --stdin-json` resolves aliases,
|
|
1363
|
+
validates, and commits a versioned batch; `--dry-run` returns the concrete
|
|
1364
|
+
graph and alias receipt without writes.
|
|
1365
|
+
- `pm item complete <id> <reason> --transaction-id <stable-id>` records linked
|
|
1366
|
+
evidence, closes, and releases a claim as one compensating transaction.
|
|
1287
1367
|
- `pm create --stdin-json` and `pm update <id> --stdin-json` accept a whole item
|
|
1288
1368
|
document. This supports the lossless `get → edit → update` agent workflow
|
|
1289
1369
|
without translating every field into argv.
|
|
@@ -75,8 +75,21 @@ The default summary stays bounded. Larger intent and error catalogs are emitted
|
|
|
75
75
|
- the stable snake-case code;
|
|
76
76
|
- meaning and stability;
|
|
77
77
|
- CLI exit code;
|
|
78
|
+
- semantic exit class (`generic_failure`, `usage`, `not_found`, `conflict`, or `dependency_failed`);
|
|
78
79
|
- recovery guidance;
|
|
79
80
|
- source modules that emit the code.
|
|
81
|
+
- inferred CLI command roots (`*` for cross-cutting runtime failures).
|
|
82
|
+
|
|
83
|
+
Existing catalog entries are recorded in `scripts/error-code-stability.json`.
|
|
84
|
+
The generator refuses to remove one of those stable codes unless the reviewed
|
|
85
|
+
compatibility ledger is changed explicitly. Newly discovered codes are emitted
|
|
86
|
+
as provisional until deliberately promoted, so adding a runtime declaration
|
|
87
|
+
does not accidentally promise permanent compatibility.
|
|
88
|
+
|
|
89
|
+
`PM_ERROR_CODE_EXIT_CLASS_CONTRACTS` is the portable shell taxonomy: exit 1 is
|
|
90
|
+
generic failure, 2 is usage, 3 is not-found, 4 is conflict, and 5 is dependency
|
|
91
|
+
failure. Catalog validation rejects a code whose declared semantic class and
|
|
92
|
+
transport exit disagree.
|
|
80
93
|
|
|
81
94
|
Run the drift gate after adding or removing a structured error:
|
|
82
95
|
|
package/docs/TESTING.md
CHANGED
|
@@ -248,6 +248,31 @@ step also fails until stale policy is reconciled. Public source claims are
|
|
|
248
248
|
mapped to exact evidence strings and an enforced registry entry so
|
|
249
249
|
documentation cannot silently advertise advisory behavior.
|
|
250
250
|
|
|
251
|
+
## Tracker Context-Quality Ratchets
|
|
252
|
+
|
|
253
|
+
Tracked by [pm-ips23h](../.agents/pm/issues/pm-ips23h.toon) and
|
|
254
|
+
[pm-kpftft](../.agents/pm/tasks/pm-kpftft.toon).
|
|
255
|
+
|
|
256
|
+
`scripts/release/tracker-measurements.json` turns measured tracker populations
|
|
257
|
+
into reviewed, shrinking-only ceilings. Each declaration names its canonical
|
|
258
|
+
pm owner and a selector over stored dependency kinds, validator warnings,
|
|
259
|
+
graph-profile fields, or health-check severity. Open owners enforce their
|
|
260
|
+
ceiling; terminal owners retire it. Validator warnings and health checks are
|
|
261
|
+
exhaustive, so a newly observed class fails until it has a canonical owner and
|
|
262
|
+
reviewed declaration.
|
|
263
|
+
|
|
264
|
+
Run the same gate used by hosted CI:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
pnpm quality:tracker-measurements
|
|
268
|
+
node scripts/release/tracker-measurement-gate.mjs --negative-control
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
`--update` can only lower a ceiling. It refuses to write while any population
|
|
272
|
+
has regressed or remains undeclared, so updating the baseline cannot absorb a
|
|
273
|
+
failure. Dependency-kind regressions include the post-measurement item, target,
|
|
274
|
+
author, timestamp, and mutation-source rows in the JSON receipt.
|
|
275
|
+
|
|
251
276
|
## Agent Output Token Budgets
|
|
252
277
|
|
|
253
278
|
Run the required PR gate locally:
|
|
@@ -6,6 +6,7 @@ This example shows how to consume `pm` contracts programmatically in a script an
|
|
|
6
6
|
|
|
7
7
|
- `package.json` -> installs `@unbrained/pm-cli` and script aliases
|
|
8
8
|
- `inspect-contracts.mjs` -> loads contracts + SDK helpers and prints required/optional parameter metadata
|
|
9
|
+
- `parse-receipt.mjs` -> executes a real create and parses its flat mutation receipt with the SDK
|
|
9
10
|
|
|
10
11
|
## Run
|
|
11
12
|
|
|
@@ -20,6 +21,7 @@ npm install "$PM_CLI_REPO_ROOT"
|
|
|
20
21
|
# npm install @unbrained/pm-cli@latest
|
|
21
22
|
|
|
22
23
|
node inspect-contracts.mjs create
|
|
24
|
+
npm run parse:receipt
|
|
23
25
|
```
|
|
24
26
|
|
|
25
27
|
Expected output shape:
|
|
@@ -27,7 +29,14 @@ Expected output shape:
|
|
|
27
29
|
```json
|
|
28
30
|
{
|
|
29
31
|
"action": "create",
|
|
30
|
-
"required_parameters": [
|
|
32
|
+
"required_parameters": [
|
|
33
|
+
"title",
|
|
34
|
+
"description",
|
|
35
|
+
"type",
|
|
36
|
+
"status",
|
|
37
|
+
"priority",
|
|
38
|
+
"message"
|
|
39
|
+
],
|
|
31
40
|
"optional_parameters": ["template", "createMode", "schedulePreset"],
|
|
32
41
|
"any_of_required_groups": [],
|
|
33
42
|
"runtime_available": true,
|
|
@@ -55,3 +64,4 @@ node inspect-contracts.mjs extension-reload
|
|
|
55
64
|
- Uses `PM_TOOL_ACTION_PARAMETER_CONTRACTS` for deterministic required/optional metadata.
|
|
56
65
|
- Uses runtime `pm contracts --json` so extension-provided actions and command availability are reflected.
|
|
57
66
|
- Includes policy-state and compatibility metadata so CI/app callers can gate behavior during v1 -> v2 migrations.
|
|
67
|
+
- Uses `parseMutationReceipt()` at the process boundary instead of guessing that mutation output has the read-only `{ item: ... }` wrapper.
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"scripts": {
|
|
6
6
|
"inspect:create": "node inspect-contracts.mjs create",
|
|
7
7
|
"inspect:update": "node inspect-contracts.mjs update",
|
|
8
|
-
"inspect:reload": "node inspect-contracts.mjs extension-reload"
|
|
8
|
+
"inspect:reload": "node inspect-contracts.mjs extension-reload",
|
|
9
|
+
"parse:receipt": "node parse-receipt.mjs"
|
|
9
10
|
}
|
|
10
11
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { parseMutationReceipt } from "@unbrained/pm-cli/sdk";
|
|
3
|
+
|
|
4
|
+
const completed = spawnSync(
|
|
5
|
+
"pm",
|
|
6
|
+
["create", "SDK receipt example", "--type", "Task", "--json"],
|
|
7
|
+
{ encoding: "utf8", env: { ...process.env, NO_COLOR: "1" } },
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
if (completed.error) {
|
|
11
|
+
throw new Error(`Failed to run pm create: ${completed.error.message}`, {
|
|
12
|
+
cause: completed.error,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
if (completed.status !== 0) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
completed.stderr.trim() || `pm create failed with ${completed.status}`,
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const receipt = parseMutationReceipt(completed.stdout);
|
|
22
|
+
process.stdout.write(`${JSON.stringify(receipt, null, 2)}\n`);
|
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.5"
|
|
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.5",
|
|
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.5",
|
|
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
|
|
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",
|
|
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",
|
|
@@ -130,6 +130,7 @@
|
|
|
130
130
|
"quality:retrieval-eval": "pnpm build && node scripts/release/retrieval-eval-gate.mjs",
|
|
131
131
|
"quality:retrieval-eval:update": "pnpm build && node scripts/release/retrieval-eval-gate.mjs --update",
|
|
132
132
|
"quality:gate-registry": "pnpm build && node scripts/release/gate-registry.mjs",
|
|
133
|
+
"quality:tracker-measurements": "pnpm build && node scripts/release/tracker-measurement-gate.mjs",
|
|
133
134
|
"quality:package-artifact": "pnpm build && node scripts/release/package-artifact-gate.mjs",
|
|
134
135
|
"quality:docs-skills": "node scripts/release/docs-skills-gate.mjs",
|
|
135
136
|
"quality:docs-links": "node scripts/release/docs-skills-gate.mjs --links-only",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-digital-twin",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.5",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Beyond-PM exemplar: a temporal production-facility digital twin built entirely on public pm SDK and extension primitives.",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-claude",
|
|
3
3
|
"description": "Native pm CLI integration for Claude Code — 28 MCP tools, 5 workflow skills, 14 slash commands, 4 subagents (coordinator, delivery-chain, triage, verification), hybrid TUI task tracking (pm as persistent store + Claude Code task panel as live view), session context injection, and full git-based project management without leaving Claude Code.",
|
|
4
|
-
"version": "2026.8.
|
|
4
|
+
"version": "2026.8.5",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "unbrained",
|
|
7
7
|
"url": "https://github.com/unbraind/pm-cli"
|