@unbrained/pm-cli 2026.11.3 → 2026.11.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/.agents/skills/HARNESS_COMPATIBILITY.md +1 -1
- package/.agents/skills/README.md +14 -14
- package/.agents/skills/pm-developer/SKILL.md +16 -16
- package/.agents/skills/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +14 -14
- package/.agents/skills/pm-developer/references/SCRIPTING_COMPOSITION.md +10 -10
- package/.agents/skills/pm-extensions/SKILL.md +13 -13
- package/.agents/skills/pm-extensions/references/AUTHORING.md +12 -12
- package/.agents/skills/pm-sdk/SKILL.md +27 -27
- package/.agents/skills/pm-sdk/references/SURFACE_MAP.md +32 -32
- package/.agents/skills/pm-test-audit/references/AUDIT.md +1 -1
- package/.agents/skills/pm-user/SKILL.md +35 -35
- package/.claude-plugin/marketplace.json +1 -1
- package/AGENTS.md +9 -9
- package/CHANGELOG.md +19 -0
- package/README.md +13 -13
- package/dist/cli/error-guidance.d.ts +14 -35
- package/dist/cli/error-guidance.js +2 -2
- package/dist/cli/expected-revisions.d.ts +55 -0
- package/dist/cli/expected-revisions.js +2 -0
- package/dist/cli/main.js +2 -2
- package/dist/cli/register-setup.js +1 -1
- package/dist/cli/runtime/invocation-options.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +1 -1
- package/dist/cli-bundle/chunks/chunk-2RPORE7M.js +31 -0
- package/dist/cli-bundle/chunks/{chunk-Y7H55PCY.js → chunk-335BZ75D.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-5GWEY4P6.js +122 -0
- package/dist/cli-bundle/chunks/chunk-6VRX2CM7.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-5JZMF4M5.js → chunk-7DEKAXVA.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-32BCU6HN.js → chunk-7ZRCYESH.js} +47 -46
- package/dist/cli-bundle/chunks/chunk-AUEKTX7V.js +6 -0
- package/dist/cli-bundle/chunks/chunk-D7KYPRK4.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-2CBHQXYJ.js → chunk-DAX3AOFI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JPKIUWLG.js → chunk-F6NDMKZ4.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FRNMQM45.js +2 -0
- package/dist/cli-bundle/chunks/chunk-HNGLDMSZ.js +9 -0
- package/dist/cli-bundle/chunks/{chunk-DEJHTFEF.js → chunk-HRCMORE7.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-HRFGFIYU.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-5IPXDZKU.js → chunk-JI2GDE4I.js} +66 -66
- package/dist/cli-bundle/chunks/{chunk-MQJXZX3Q.js → chunk-LS3GI3H4.js} +53 -53
- package/dist/cli-bundle/chunks/chunk-OH6WQ7VT.js +3 -0
- package/dist/cli-bundle/chunks/{chunk-TZ3D3DPQ.js → chunk-OJDMJT7Y.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-S4LPZ4TN.js +20 -0
- package/dist/cli-bundle/chunks/chunk-UEGXWXUZ.js +2 -0
- package/dist/cli-bundle/chunks/chunk-XLSHFYXZ.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-UYNMKUGA.js → chunk-YKXATU2G.js} +2 -2
- package/dist/cli-bundle/chunks/item-revision-OJJVPQY7.js +2 -0
- package/dist/cli-bundle/chunks/item-transaction-QEPBUCMY.js +2 -0
- package/dist/cli-bundle/chunks/mutation-admission-INMM3HHG.js +2 -0
- package/dist/cli-bundle/chunks/{register-list-query-I6AZA3IX.js → register-list-query-5Y5JKWU5.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-3DAXCLXR.js → register-mutation-WC7OSQID.js} +2 -2
- package/dist/cli-bundle/chunks/register-operations-PO63DBZH.js +2 -0
- package/dist/cli-bundle/chunks/register-setup-RRFOS7IT.js +2 -0
- package/dist/cli-bundle/chunks/{stage-7H36OTDJ.js → stage-E3MMV4TV.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-5PMJOJCZ.js +44 -0
- package/dist/cli-bundle/focused-chunks/chunk-7KK66ISG.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-D4XQOMG4.js → chunk-AHWJPZSJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-C3O6JJPO.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LKN2WGGB.js → chunk-C6P6HPCX.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-CPMSL4HS.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-CZM75DE3.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-TYHDZUL4.js → chunk-D2TBEBNW.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-E56OXRYH.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-I5FODKYB.js → chunk-F62XGAAY.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-G4QP365K.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-G5PJCR7R.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-GS3JC5UU.js +23 -0
- package/dist/cli-bundle/focused-chunks/chunk-I5LGPUWH.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-LW64TINU.js +3 -0
- package/dist/cli-bundle/focused-chunks/chunk-M6V7UMWL.js +26 -0
- package/dist/cli-bundle/focused-chunks/chunk-MC7IE7D7.js +8 -0
- package/dist/cli-bundle/focused-chunks/chunk-MG7C3JUY.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-F3X6UWMI.js → chunk-MK4HV4JO.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ZQRCVRGS.js → chunk-NQ7GYFOX.js} +54 -54
- package/dist/cli-bundle/focused-chunks/chunk-O7EI33NP.js +91 -0
- package/dist/cli-bundle/focused-chunks/{chunk-RY4QEMAE.js → chunk-RFTJZ5VB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-SNOXXRSJ.js +2 -0
- package/dist/cli-bundle/focused-chunks/chunk-UPJUTP2V.js +12 -0
- package/dist/cli-bundle/focused-chunks/{chunk-HJ27QLZV.js → chunk-VWWTIX5L.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-HOXIIZEO.js → chunk-XHOBYCVE.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-YMGB2O4E.js +81 -0
- package/dist/cli-bundle/focused-chunks/item-revision-CTDO4H3I.js +2 -0
- package/dist/cli-bundle/focused-chunks/item-transaction-AEAYVVHA.js +2 -0
- package/dist/cli-bundle/focused-chunks/mutation-admission-4WM7TNHZ.js +2 -0
- package/dist/cli-bundle/focused-chunks/{stage-4SQHVI3O.js → stage-WV7QXR4C.js} +2 -2
- package/dist/cli-bundle/main.js +25 -25
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +5 -5
- package/dist/cli-bundle/sdk-core.js +1 -1
- 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 +57 -57
- 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 +11 -11
- package/dist/core/config/positional-value.d.ts +7 -1
- package/dist/core/config/positional-value.js +1 -1
- package/dist/core/extensions/reserved-host-flags.js +1 -1
- package/dist/core/history/history-rewrite.js +1 -1
- package/dist/core/item/literal-mutation-input.d.ts +17 -0
- package/dist/core/item/literal-mutation-input.js +1 -1
- package/dist/core/item/parent-reference-policy.d.ts +8 -4
- package/dist/core/item/parent-reference-policy.js +1 -1
- package/dist/core/item/sprint-release-format.d.ts +2 -1
- package/dist/core/item/sprint-release-format.js +1 -1
- package/dist/core/output/mutation-projection.js +1 -1
- package/dist/core/shared/command-types.d.ts +7 -0
- package/dist/core/store/item-mutation-precondition.d.ts +72 -6
- package/dist/core/store/item-mutation-precondition.js +1 -1
- package/dist/core/store/item-store.js +1 -1
- package/dist/core/store/settings-validator.js +1 -1
- package/dist/core/store/settings.d.ts +14 -0
- package/dist/core/store/settings.js +5 -4
- package/dist/core/telemetry/policy.d.ts +27 -1
- package/dist/core/telemetry/policy.js +1 -1
- package/dist/core/telemetry/runtime.d.ts +18 -7
- package/dist/core/telemetry/runtime.js +4 -4
- package/dist/sdk/cli-contracts/bootstrap-command-scanner.js +1 -1
- package/dist/sdk/cli-contracts/completeness.js +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +11 -0
- package/dist/sdk/cli-contracts/enum-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
- package/dist/sdk/cli-contracts/registration-helpers.js +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/cli-contracts/typed-action-inputs.d.ts +8 -5
- package/dist/sdk/cli-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts.js +1 -1
- package/dist/sdk/cli-program.js +1 -1
- package/dist/sdk/config.d.ts +3 -3
- package/dist/sdk/config.js +1 -1
- package/dist/sdk/environment/project-runtime-compatibility.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/governance/health.d.ts +2 -2
- package/dist/sdk/governance/health.js +2 -2
- package/dist/sdk/governance/validate.js +1 -1
- package/dist/sdk/history/salvage.js +3 -3
- package/dist/sdk/history-compact.d.ts +7 -1
- package/dist/sdk/history-compact.js +1 -1
- package/dist/sdk/history-repair.d.ts +2 -1
- package/dist/sdk/history-repair.js +1 -1
- package/dist/sdk/index.d.ts +6 -1
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/init.d.ts +4 -4
- package/dist/sdk/init.js +8 -8
- package/dist/sdk/lifecycle/checkpoint-rollback.d.ts +10 -2
- package/dist/sdk/lifecycle/checkpoint-rollback.js +1 -1
- package/dist/sdk/lifecycle/claim.d.ts +4 -0
- package/dist/sdk/lifecycle/claim.js +1 -1
- package/dist/sdk/lifecycle/close-many.d.ts +11 -2
- package/dist/sdk/lifecycle/close-many.js +1 -1
- package/dist/sdk/lifecycle/close.d.ts +25 -0
- package/dist/sdk/lifecycle/close.js +1 -1
- package/dist/sdk/lifecycle/create.d.ts +7 -5
- package/dist/sdk/lifecycle/create.js +1 -1
- package/dist/sdk/lifecycle/item-revision.d.ts +162 -0
- package/dist/sdk/lifecycle/item-revision.js +2 -0
- package/dist/sdk/lifecycle/restore.js +1 -1
- package/dist/sdk/lifecycle/shared-unset-fields.d.ts +628 -4
- package/dist/sdk/lifecycle/shared-unset-fields.js +1 -1
- package/dist/sdk/lifecycle/start-blockers.d.ts +52 -0
- package/dist/sdk/lifecycle/start-blockers.js +2 -0
- package/dist/sdk/lifecycle/task-composition.d.ts +11 -0
- package/dist/sdk/lifecycle/task-composition.js +1 -1
- package/dist/sdk/lifecycle/update-many.d.ts +11 -2
- package/dist/sdk/lifecycle/update-many.js +1 -1
- package/dist/sdk/lifecycle/update.d.ts +5 -4
- package/dist/sdk/lifecycle/update.js +2 -2
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/declared-blockers.d.ts +16 -0
- package/dist/sdk/query/declared-blockers.js +2 -0
- package/dist/sdk/query/get.d.ts +7 -0
- package/dist/sdk/query/get.js +1 -1
- package/dist/sdk/query/projection-contracts.js +1 -1
- package/dist/sdk/runtime/actions.js +1 -1
- package/dist/sdk/runtime/mutation-value-validation.js +1 -1
- package/dist/sdk/runtime-input.d.ts +12 -0
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime-primitives.d.ts +1 -0
- package/dist/sdk/runtime-primitives.js +1 -1
- package/dist/sdk/runtime.d.ts +10 -0
- package/dist/sdk/runtime.js +1 -1
- package/dist/sdk/structured-mutations.js +1 -1
- package/dist/sdk/telemetry.d.ts +1 -1
- package/dist/sdk/telemetry.js +2 -2
- package/dist/sdk/test/batch.js +2 -2
- package/dist/sdk/test/execution.js +2 -2
- package/dist/sdk/test/linked-command-detection.js +1 -1
- package/dist/sdk/workspace-transaction.d.ts +17 -6
- package/dist/sdk/workspace-transaction.js +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js +1 -1
- package/docs/AGENT_GUIDE.md +48 -48
- package/docs/AGENT_OUTPUT_ENCODINGS.md +20 -20
- package/docs/ASSURANCE.md +10 -10
- package/docs/BOUNDED_CONTEXT_READS.md +3 -3
- package/docs/CLAUDE_CODE_PLUGIN.md +1 -1
- package/docs/CLI_GRAMMAR.md +2 -2
- package/docs/COMMANDS.md +144 -32
- package/docs/COMMAND_NAMESPACES.md +1 -1
- package/docs/CONFIGURATION.md +82 -70
- package/docs/CONTEXT_ALGORITHM_PORTFOLIO.md +2 -2
- package/docs/CONTEXT_INTEGRITY_CONTRACTS.md +5 -5
- package/docs/CORPUS_SHAPES.md +1 -1
- package/docs/DEPENDENCY_KIND_CONTRACT.md +6 -6
- package/docs/DIAGNOSTIC_OUTPUT_CONTRACTS.md +5 -5
- package/docs/ECOSYSTEM_PLANNING_REVIEW.md +3 -3
- package/docs/EXTENSION_AUTHOR_CONTRACTS.md +4 -4
- package/docs/HISTORY_ATTESTATION.md +1 -1
- package/docs/HISTORY_MAINTENANCE.md +1 -1
- package/docs/LIFECYCLE_COMMANDS.md +1 -1
- package/docs/MCP_2026_07_28.md +16 -16
- package/docs/MCP_2026_07_28_CONFORMANCE.md +19 -19
- package/docs/MCP_REMOTE_TRANSPORT_SECURITY.md +22 -22
- package/docs/MCP_SKILLS_AND_APPS.md +1 -1
- package/docs/MERGE_SAFETY.md +6 -6
- package/docs/MUTATION_INTEGRITY.md +5 -5
- package/docs/OUTPUT_PROJECTION_CONTRACTS.md +14 -14
- package/docs/PACKED_FIRST_RUN.md +1 -1
- package/docs/QUICKSTART.md +10 -10
- package/docs/README.md +21 -21
- package/docs/READ_OUTPUT_CONTRACTS.md +9 -9
- package/docs/RECURRENCE_RECOVERY_CONTRACTS.md +1 -1
- package/docs/RELEASING.md +19 -10
- package/docs/SCRIPTING.md +10 -10
- package/docs/SDK.md +183 -38
- package/docs/SDK_ARTIFACT_OUTPUT.md +1 -1
- package/docs/SDK_PRIMITIVE_INVENTORY.md +2 -2
- package/docs/SELF_DESCRIBING_CONTEXT_CONTRACTS.md +7 -7
- package/docs/TESTING.md +1 -1
- package/docs/WORKFLOW_POLICIES.md +2 -2
- package/docs/WORKSPACE_POSITION_AND_LIFECYCLE.md +8 -8
- package/docs/agent-task-token-baseline.json +1 -1
- package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
- package/docs/generated/AGENT_COMMAND_SURFACE.md +1 -1
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +112 -112
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +13 -4
- package/docs/performance/cli-transport-overhead.md +7 -7
- package/marketplace.json +1 -1
- package/package.json +1 -1
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/README.md +5 -5
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/GAP_REPORT.md +16 -16
- 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/README.md +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/GAP_REPORT.md +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +6 -6
- package/plugins/pm-claude/package.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +1 -1
- package/plugins/pm-codex/plugin.json +1 -1
- package/runtime-dependencies.json +1 -1
- package/dist/cli-bundle/chunks/chunk-7ZEFHFAU.js +0 -2
- package/dist/cli-bundle/chunks/chunk-B6UTLYLM.js +0 -3
- package/dist/cli-bundle/chunks/chunk-HBKD5HZB.js +0 -2
- package/dist/cli-bundle/chunks/chunk-L6LCLC37.js +0 -2
- package/dist/cli-bundle/chunks/chunk-NR4KABHC.js +0 -31
- package/dist/cli-bundle/chunks/chunk-PWD5RY2D.js +0 -2
- package/dist/cli-bundle/chunks/chunk-XRMYA4R7.js +0 -20
- package/dist/cli-bundle/chunks/chunk-YWS4XV4I.js +0 -6
- package/dist/cli-bundle/chunks/chunk-ZOAJNPBL.js +0 -129
- package/dist/cli-bundle/chunks/item-transaction-ZHLJTBD7.js +0 -2
- package/dist/cli-bundle/chunks/mutation-admission-ZQMRMGIB.js +0 -2
- package/dist/cli-bundle/chunks/register-operations-G3QGGQ5Z.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-LDXHMNOT.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-3XGKBVJ3.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-4HY6EGPB.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-AK2CI2GI.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-HUXZCPWT.js +0 -26
- package/dist/cli-bundle/focused-chunks/chunk-IKXJ57XA.js +0 -8
- package/dist/cli-bundle/focused-chunks/chunk-MOY6KZGJ.js +0 -44
- package/dist/cli-bundle/focused-chunks/chunk-PWUTFKSI.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-PZRB7IXH.js +0 -91
- package/dist/cli-bundle/focused-chunks/chunk-WSYPVBKS.js +0 -80
- package/dist/cli-bundle/focused-chunks/chunk-WXLG7HZ5.js +0 -3
- package/dist/cli-bundle/focused-chunks/chunk-WZDFCVLX.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-YGO3FWA2.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-YVLAP3BL.js +0 -23
- package/dist/cli-bundle/focused-chunks/chunk-ZYXQACPB.js +0 -2
- package/dist/cli-bundle/focused-chunks/item-transaction-PZ2FQ6B2.js +0 -2
- package/dist/cli-bundle/focused-chunks/mutation-admission-XOOK6XFH.js +0 -2
package/docs/SDK.md
CHANGED
|
@@ -107,19 +107,19 @@ Choose the narrowest stable entrypoint that owns the capability you need. This
|
|
|
107
107
|
keeps package startup and memory proportional to its purpose while the aggregate
|
|
108
108
|
barrel remains source-compatible:
|
|
109
109
|
|
|
110
|
-
| Package export
|
|
111
|
-
|
|
112
|
-
| `@unbrained/pm-cli/sdk/authoring`
|
|
113
|
-
| `@unbrained/pm-cli/sdk/contracts`
|
|
114
|
-
| `@unbrained/pm-cli/sdk/core`
|
|
115
|
-
| `@unbrained/pm-cli/sdk/governance`
|
|
116
|
-
| `@unbrained/pm-cli/sdk/graph`
|
|
117
|
-
| `@unbrained/pm-cli/sdk/merge`
|
|
118
|
-
| `@unbrained/pm-cli/sdk/query`
|
|
119
|
-
| `@unbrained/pm-cli/sdk/runtime`
|
|
120
|
-
| `@unbrained/pm-cli/sdk/testing`
|
|
121
|
-
| `@unbrained/pm-cli/sdk/public-surface.json` | Published machine-readable SDK compatibility snapshot
|
|
122
|
-
| `@unbrained/pm-cli/sdk`
|
|
110
|
+
| Package export | Intended capability family |
|
|
111
|
+
|---|---|
|
|
112
|
+
| `@unbrained/pm-cli/sdk/authoring` | Extension blueprints, builders, manifests, and package-author helpers |
|
|
113
|
+
| `@unbrained/pm-cli/sdk/contracts` | Static CLI command/action contracts and expected-error protocol |
|
|
114
|
+
| `@unbrained/pm-cli/sdk/core` | Broad item, schema, profile, transaction, and runtime primitives |
|
|
115
|
+
| `@unbrained/pm-cli/sdk/governance` | Validation, health, garbage collection, and transaction cleanup |
|
|
116
|
+
| `@unbrained/pm-cli/sdk/graph` | Relationship stores, graph assembly, traversal, analytics, and remediation |
|
|
117
|
+
| `@unbrained/pm-cli/sdk/merge` | VCS-neutral tracker merge contracts |
|
|
118
|
+
| `@unbrained/pm-cli/sdk/query` | List/search engines, filtering, pagination, and query rendering |
|
|
119
|
+
| `@unbrained/pm-cli/sdk/runtime` | Embedded command execution and package runtime helpers |
|
|
120
|
+
| `@unbrained/pm-cli/sdk/testing` | Package and extension assertion/invocation helpers |
|
|
121
|
+
| `@unbrained/pm-cli/sdk/public-surface.json` | Published machine-readable SDK compatibility snapshot |
|
|
122
|
+
| `@unbrained/pm-cli/sdk` | Compatibility aggregate containing every supported SDK export |
|
|
123
123
|
|
|
124
124
|
`@unbrained/pm-cli/cli` is the supported embeddable CLI entrypoint and exports
|
|
125
125
|
only `runPmCli`. Repository tests import their internal seams from source; those
|
|
@@ -177,6 +177,13 @@ preflight refusal. An absent property gives no guarantee about writes; do not
|
|
|
177
177
|
coerce it to `false` or treat an executed failure as safe to retry. Consumers
|
|
178
178
|
that enumerate error keys should accept the additional optional property.
|
|
179
179
|
|
|
180
|
+
The telemetry consent update (pm-gh1660) records two conservative breaking
|
|
181
|
+
acknowledgements. `WriteSettingsOptions` gains optional `omitSections` and
|
|
182
|
+
`skipIfStored`; existing calls compile and behave unchanged. `ConfigResult.values`
|
|
183
|
+
becomes `Partial`, because project-scope `list` and `export` omit the global-only
|
|
184
|
+
`telemetry_tracking` key: treat that key as possibly absent, and read consent
|
|
185
|
+
from a global-scope export. No data migration or new dependency bounds are needed.
|
|
186
|
+
|
|
180
187
|
Validation refusals for item status and priority carry producer-owned
|
|
181
188
|
`code: "invalid_argument_value"` and `context.field`, `context.value` and
|
|
182
189
|
`context.allowed`. The allowed spellings come from the active status schema or
|
|
@@ -228,7 +235,7 @@ entrypoint from [Import Surfaces](#import-surfaces) for direct primitives.
|
|
|
228
235
|
Use these focused guides to choose the primitive and understand its policy:
|
|
229
236
|
|
|
230
237
|
| Capability | Reference |
|
|
231
|
-
|
|
238
|
+
|---|---|
|
|
232
239
|
| Item lifecycle, schema, profiles and initialization | [Customization primitives](SDK_CUSTOMIZATION_PRIMITIVES.md), [Lifecycle](SDK_LIFECYCLE.md) |
|
|
233
240
|
| History, whole-item input, transactions and previews | [Audited mutations](SDK_AUDITED_MUTATIONS.md), [Atomic transactions](#atomic-workspace-transactions), [Schema evolution](#schema-evolution-and-workspace-history) |
|
|
234
241
|
| Context ranking, packing, memory and evaluation | [Context relevance](#context-relevance-and-evaluation), [Context coordination](SDK_CONTEXT_COORDINATION.md) |
|
|
@@ -1220,8 +1227,31 @@ SDK `create`, `update`, and `append` inputs are data: `"-"` remains text,
|
|
|
1220
1227
|
file. This also applies to the corresponding `runCreate`, `runUpdate`,
|
|
1221
1228
|
`runAppend` operations and update-many mutation values. Normal field validation,
|
|
1222
1229
|
whitespace handling, structured collection syntax, and project schemas still
|
|
1223
|
-
apply. Clear
|
|
1224
|
-
`
|
|
1230
|
+
apply. Clear a scalar field with `unset: ["assignee"]`, or pass JavaScript
|
|
1231
|
+
`null` for any option the command's `unset` list covers: `{ parent: null }` is
|
|
1232
|
+
`unset: ["parent"]`, and `tags: null` clears the tags (`tags` takes a CSV string,
|
|
1233
|
+
not an array, and has no `clearTags`).
|
|
1234
|
+
The nullable keys are exactly the unset table's option keys
|
|
1235
|
+
(`CreateNullClearableOptionKey`, `UpdateNullClearableOptionKey`). `rank` is only
|
|
1236
|
+
an unset alias of `order`, so `rank: null` is refused (pass `order: null`), and
|
|
1237
|
+
create accepts `unset: ["author"]` but refuses `author: null`. `null` on any
|
|
1238
|
+
other option (`title`, `author`, collection options such as `comment` or `dep`)
|
|
1239
|
+
refuses by name; clear collections with their `clear*` options. When typed input
|
|
1240
|
+
stores a former clear sentinel (`"none"`, `"null"` or `"-"`) in a clearable
|
|
1241
|
+
field, the result warns `literal_sentinel_stored:<field>:<value>`: the value is
|
|
1242
|
+
now data (an assignee called `none`). The advisory appears only while the
|
|
1243
|
+
document pm committed and recorded in history still holds the value, so an
|
|
1244
|
+
`item_store_write` override that rewrites stored contents can drop it from
|
|
1245
|
+
storage while the advisory still reports it. Typed SDK and MCP refusals name the
|
|
1246
|
+
option key and the `unset` remedy both accept, for example `parent must not be
|
|
1247
|
+
the placeholder "none". Pass unset: ["parent"] to clear it, or omit parent.`;
|
|
1248
|
+
CLI refusals keep their flag wording. `PmCreateActionOptions`,
|
|
1249
|
+
`PmUpdateActionOptions`, `CreateOperationOptions` and `UpdateOperationOptions`
|
|
1250
|
+
type the clearable fields as nullable, so `runCreate`/`runUpdate` accept the
|
|
1251
|
+
same input as `PmClient.create`/`update`. A direct SDK `runUpdateMany` folds a
|
|
1252
|
+
null in its update record like `runUpdate`, but `runAction("update-many")` drops
|
|
1253
|
+
it (pm-w7clh6), so `PmUpdateManyActionOptions` stays non-nullable: use `unset`
|
|
1254
|
+
there and in MCP tools.
|
|
1225
1255
|
CLI adapters retain `--description -`, append stdin, file flags, and legacy
|
|
1226
1256
|
clear-token compatibility. Values inside CLI `--stdin-json` documents are
|
|
1227
1257
|
literal data, including `"none"` and `"null"`. Explicit CLI flags override
|
|
@@ -1236,7 +1266,7 @@ For example, `estimatedMinutes` requires `"45"`, while `priority` accepts a
|
|
|
1236
1266
|
string or finite number. JavaScript and JSON bridge callers must correct invalid
|
|
1237
1267
|
types instead of relying on coercion. Integrations that previously used `"-"`
|
|
1238
1268
|
to request stdin should read that input themselves and pass the resulting text;
|
|
1239
|
-
integrations that used `"none"` to clear must migrate to `unset`.
|
|
1269
|
+
integrations that used `"none"` to clear must migrate to `unset` or `null`.
|
|
1240
1270
|
Direct `runCreate`/`runUpdate` calls require the declared string arrays for
|
|
1241
1271
|
repeatable fields. Generic action dispatch retains its documented scalar-to-array
|
|
1242
1272
|
normalization before invoking those operations.
|
|
@@ -1307,8 +1337,21 @@ atomic evidence-backed completion tracked by
|
|
|
1307
1337
|
commands that must coordinate several SDK mutations. A plan supplies a stable
|
|
1308
1338
|
transaction id plus ordered steps. Each step can inspect its durable state,
|
|
1309
1339
|
apply an idempotent forward mutation, and append an idempotent compensation.
|
|
1310
|
-
The coordinator serializes transaction
|
|
1340
|
+
The coordinator serializes transaction coordinators with one workspace lock and
|
|
1311
1341
|
persists `.agents/pm/transactions/sdk/<transaction-id>.json` after every step.
|
|
1342
|
+
That lock does not exclude ordinary writers ([GH-1620](https://github.com/unbraind/pm-cli/issues/1620)):
|
|
1343
|
+
`update`, `close`, `pm comments --add` and every other SDK, CLI or MCP mutation
|
|
1344
|
+
take per-item locks, so a peer can commit between a step's `inspect()` and
|
|
1345
|
+
`apply()`. A step that decides from what it read guards its write with an
|
|
1346
|
+
[expected item revision](#expected-item-revisions): in `inspect()`, take both
|
|
1347
|
+
the decision data and `item_hash` from one `get()`, then run the write inside
|
|
1348
|
+
`withExpectedItemRevisions()`. The
|
|
1349
|
+
write then refuses with `item_revision_conflict` instead of overwriting the
|
|
1350
|
+
peer's change, and the transaction compensates. The coordinator invokes
|
|
1351
|
+
`compensate()`, including during recovery, without an expected revision.
|
|
1352
|
+
Built-in item compensations detect intervening writes. A custom adapter must
|
|
1353
|
+
fence or reconcile its own compensation, or it can restore a stale value over a
|
|
1354
|
+
peer's write.
|
|
1312
1355
|
Before invoking a pending step, it also persists that step's durable ownership
|
|
1313
1356
|
marker. Recovery and compensation therefore distinguish mutations begun by
|
|
1314
1357
|
this transaction from matching domain state that existed before the attempt.
|
|
@@ -1348,6 +1391,108 @@ failures and the journal keeps recovery data. Repeated compensation recognizes
|
|
|
1348
1391
|
its durable marker even when a peer adds context afterward. Legacy timestamp
|
|
1349
1392
|
receipts remain supported, with ambiguous partial effects refused.
|
|
1350
1393
|
|
|
1394
|
+
### Expected item revisions
|
|
1395
|
+
|
|
1396
|
+
Expected-revision preconditions are tracked by
|
|
1397
|
+
[pm-gh1576](../.agents/pm/features/pm-gh1576.toon).
|
|
1398
|
+
|
|
1399
|
+
Read-decide-write agents and packages guard a write with the revision their
|
|
1400
|
+
decision was based on. Every current `pm get` / `PmClient.get` read reports
|
|
1401
|
+
`item_hash`, the SHA-256 of the canonical item document and the same value as
|
|
1402
|
+
the item's latest history `after_hash` (a field-projected read includes it only
|
|
1403
|
+
when the selection names the bare `item_hash`, for example `--fields title,tags,item_hash`;
|
|
1404
|
+
the item-qualified `item.item_hash` still projects a custom metadata field of that name).
|
|
1405
|
+
`readItemRevision(id)` returns it alone. Take the hash from the same read your
|
|
1406
|
+
decision uses: a separate read could observe a newer revision than the data you
|
|
1407
|
+
decided on. Run the write inside `withExpectedItemRevisions`:
|
|
1408
|
+
|
|
1409
|
+
```ts
|
|
1410
|
+
import { PmClient, isItemRevisionConflict } from "@unbrained/pm-cli/sdk";
|
|
1411
|
+
|
|
1412
|
+
const pm = new PmClient({ pmRoot });
|
|
1413
|
+
// Decide from the same read that reports the revision, never from a separate one.
|
|
1414
|
+
const read = await pm.get(id);
|
|
1415
|
+
const reason = `Delivered by ${read.item.tags?.find((tag) => tag.startsWith("delivery-pr:"))}`;
|
|
1416
|
+
try {
|
|
1417
|
+
const { result, unchecked } = await pm.withExpectedItemRevisions(
|
|
1418
|
+
[{ id, itemHash: read.item_hash! }],
|
|
1419
|
+
() => pm.close(id, reason),
|
|
1420
|
+
);
|
|
1421
|
+
} catch (error) {
|
|
1422
|
+
if (!isItemRevisionConflict(error)) throw error;
|
|
1423
|
+
// error.context.current_revision and error.context.details.changes_since
|
|
1424
|
+
// describe what changed; re-read, decide again, retry with the new hash.
|
|
1425
|
+
}
|
|
1426
|
+
```
|
|
1427
|
+
|
|
1428
|
+
The check runs inside the locked item store, after the item lock is held and
|
|
1429
|
+
before that write. It therefore covers every item write the wrapped
|
|
1430
|
+
operation makes: lifecycle commands, annotations, linked files/docs/tests,
|
|
1431
|
+
dependency edits, `restore`, `delete`, history maintenance (`history-redact`,
|
|
1432
|
+
`history-repair`, `history-compact`, checked under the stream lock), bulk
|
|
1433
|
+
transactions and extension commands that mutate through the SDK. A `delete`
|
|
1434
|
+
advances the expectation to the item's absent (tombstone) revision, and a
|
|
1435
|
+
`restore` of a deleted item is judged under its own id, so a peer deletion
|
|
1436
|
+
between the read and the restore refuses instead of being resurrected over. A mismatch refuses that write with `item_revision_conflict`
|
|
1437
|
+
(exit 4); writes the operation already committed stay durable. The refusal carries `item_id`, `expected_revision`,
|
|
1438
|
+
`current_revision` and `details` with `changes_since`, the newest
|
|
1439
|
+
10 history entries after the declared revision
|
|
1440
|
+
(`op`, `author`, `ts`, top-level `fields`), plus `changes_since_omitted`.
|
|
1441
|
+
`expected_revision_recorded: false` means no history entry ever had that hash.
|
|
1442
|
+
After one of the operation's own writes commits, the expectation advances to
|
|
1443
|
+
that revision, so a multi-write composition such as `claim --start` does not
|
|
1444
|
+
refuse itself; an interleaved peer write still refuses the next step. The
|
|
1445
|
+
result lists `checked` ids and `unchecked` ids that the operation never wrote:
|
|
1446
|
+
an unchecked expectation proved nothing. Expectations bind to the item's embedded id, so every
|
|
1447
|
+
spelling that locates the item (a short id, or a case variant on a
|
|
1448
|
+
case-insensitive filesystem) is guarded. The scope is shared process-wide across the
|
|
1449
|
+
published SDK entrypoints (`/sdk`, `/sdk/core`, ...), and
|
|
1450
|
+
`isItemRevisionConflict` checks the refusal structurally, so mixing entrypoints
|
|
1451
|
+
neither drops a guard nor hides its conflict. Trackers are compared by physical
|
|
1452
|
+
path (`realpath`), so a symlinked spelling of the same tracker is guarded too. `PmClient.readItemRevision` and
|
|
1453
|
+
`PmClient.withExpectedItemRevisions` resolve targets inside the client's
|
|
1454
|
+
extension context, so extension item types bind exactly as `get` reads them,
|
|
1455
|
+
then run the operation outside it, so its own actions (extension commands
|
|
1456
|
+
included) activate and dispatch normally. The standalone `readItemRevision` /
|
|
1457
|
+
`withExpectedItemRevisions` functions use the registrations already active in
|
|
1458
|
+
the calling context. A deleted item with retained history binds too: its
|
|
1459
|
+
revision is the empty tombstone its `delete` recorded (the delete entry's
|
|
1460
|
+
`after_hash`), so a guarded `restore` or history maintenance of a deleted item
|
|
1461
|
+
can declare it. Bulk `update-many`
|
|
1462
|
+
and `close-many` keep their partial-success semantics: a stale row fails with
|
|
1463
|
+
`error_code: "item_revision_conflict"` plus its `expected_revision`,
|
|
1464
|
+
`current_revision` and the same `details` (`changes_since`,
|
|
1465
|
+
`changes_since_omitted`) a single-item refusal carries, while fresh rows
|
|
1466
|
+
proceed. The exported `ItemRevisionConflictRowFields` type declares those row
|
|
1467
|
+
fields; `HistoryCompactBulkItemResult` and `HistoryRepairAllStreamResult` extend
|
|
1468
|
+
it. When an `item_store_write` or `item_store_delete` override transforms,
|
|
1469
|
+
redirects or skips a guarded write, the scope advances to the revision read back
|
|
1470
|
+
from storage under the item lock: its own next write is admitted, a competing
|
|
1471
|
+
one refuses. If the item cannot be read back, or its embedded id was rewritten,
|
|
1472
|
+
the next guarded write refuses (fail closed). When a peer writes while `restore` or history maintenance waits for
|
|
1473
|
+
its lock, a declared revision turns the generic drift refusal into this typed
|
|
1474
|
+
conflict. Linked-test result recording (`test --run`, `test-all` with
|
|
1475
|
+
`test_result_tracking` enabled) stays best-effort, except that a stale declared
|
|
1476
|
+
revision refuses with `item_revision_conflict` instead of a warning. A guard cannot reach a `--background` test worker,
|
|
1477
|
+
which runs in another process, so `test`/`test-all --background` with an
|
|
1478
|
+
expected revision refuses with `expect_hash_background_unsupported`. Only the CLI invocation scope reads `GlobalOptions.expectHash`;
|
|
1479
|
+
direct `run*` SDK calls ignore it, so guard SDK writes with the functions above
|
|
1480
|
+
or `runAction`/MCP `expectHash`.
|
|
1481
|
+
|
|
1482
|
+
Transports use the same grammar. The CLI's global `--expect-hash <item_hash>`
|
|
1483
|
+
binds to the command's `<id>`; `--expect-hash <id>=<item_hash>` (repeatable or
|
|
1484
|
+
comma-separated) names targets explicitly and is required for bulk commands.
|
|
1485
|
+
MCP tools and `PmClient.run` accept `expectHash` (string or string array) on
|
|
1486
|
+
every item-writing action, at the top level or inside `options`; either
|
|
1487
|
+
placement is enforced. A native read action refuses the flag with
|
|
1488
|
+
`expect_hash_requires_mutation`, and a malformed, supplied-but-empty or `null`
|
|
1489
|
+
value (for example an unset shell variable) refuses with `expect_hash_invalid`
|
|
1490
|
+
rather than silently dropping the guard. An expectation no write reached is reported as the
|
|
1491
|
+
warning `expect_hash_unchecked:<id>:no_locked_write_reached_this_item`. This
|
|
1492
|
+
precondition guards the gap between an agent's read and its write; lease
|
|
1493
|
+
fencing ([pm-gh1549](../.agents/pm/issues/pm-gh1549.toon)) still guards the
|
|
1494
|
+
write itself against lock takeover, and the two compose.
|
|
1495
|
+
|
|
1351
1496
|
### Schema evolution and workspace history
|
|
1352
1497
|
|
|
1353
1498
|
Tracked by [pm-dijg](../.agents/pm/features/pm-dijg.toon) and
|
|
@@ -2559,25 +2704,25 @@ For provider-safe schemas, use `PM_PROVIDER_TOOL_PARAMETERS_SCHEMA`. It is flat
|
|
|
2559
2704
|
|
|
2560
2705
|
## Capability Requirements
|
|
2561
2706
|
|
|
2562
|
-
| Registration
|
|
2563
|
-
|
|
2564
|
-
| `registerCommand`
|
|
2565
|
-
| inline command flags
|
|
2566
|
-
| `registerFlags`
|
|
2567
|
-
| `registerItemFields`
|
|
2568
|
-
| `registerItemTypes`
|
|
2569
|
-
| `registerRelationshipKinds`
|
|
2570
|
-
| `registerMigration`
|
|
2571
|
-
| `registerProfile`
|
|
2572
|
-
| `registerImporter`
|
|
2573
|
-
| `registerExporter`
|
|
2574
|
-
| `registerParser`
|
|
2575
|
-
| `registerPreflight`
|
|
2576
|
-
| `registerService`
|
|
2577
|
-
| `registerRenderer`
|
|
2578
|
-
| lifecycle hooks
|
|
2579
|
-
| `registerSearchProvider`
|
|
2580
|
-
| `registerVectorStoreAdapter` | `search`
|
|
2707
|
+
| Registration | Manifest capability |
|
|
2708
|
+
|---|---|
|
|
2709
|
+
| `registerCommand` | `commands` |
|
|
2710
|
+
| inline command flags | `schema` |
|
|
2711
|
+
| `registerFlags` | `schema` |
|
|
2712
|
+
| `registerItemFields` | `schema` |
|
|
2713
|
+
| `registerItemTypes` | `schema` |
|
|
2714
|
+
| `registerRelationshipKinds` | `schema` |
|
|
2715
|
+
| `registerMigration` | `schema` |
|
|
2716
|
+
| `registerProfile` | `schema` |
|
|
2717
|
+
| `registerImporter` | `importers` |
|
|
2718
|
+
| `registerExporter` | `importers` |
|
|
2719
|
+
| `registerParser` | `parser` |
|
|
2720
|
+
| `registerPreflight` | `preflight` |
|
|
2721
|
+
| `registerService` | `services` |
|
|
2722
|
+
| `registerRenderer` | `renderers` |
|
|
2723
|
+
| lifecycle hooks | `hooks` |
|
|
2724
|
+
| `registerSearchProvider` | `search` |
|
|
2725
|
+
| `registerVectorStoreAdapter` | `search` |
|
|
2581
2726
|
|
|
2582
2727
|
Some override surfaces are single-winner: command overrides, parser overrides,
|
|
2583
2728
|
preflight overrides, and output renderers. Preflight overrides can declare
|
|
@@ -3608,7 +3753,7 @@ const report = assertExtensionPreflight(blueprint, {
|
|
|
3608
3753
|
When a custom harness needs individual registries, use this ownership map:
|
|
3609
3754
|
|
|
3610
3755
|
| Surface | Registry from `activateExtensionForTest` | Assertion / invocation |
|
|
3611
|
-
|
|
3756
|
+
|---|---|---|
|
|
3612
3757
|
| Commands, schema types/fields, migrations, importers/exporters, search/vector providers | `registrations` | `assertRegisteredCommandContract`, corresponding `assertRegistered*` |
|
|
3613
3758
|
| Command overrides | `commands` | `assertRegisteredCommandOverride`, `runRegisteredCommandOverrideForTest` |
|
|
3614
3759
|
| Parser overrides | `parsers` | `assertRegisteredParserOverride`, `runRegisteredParserOverrideForTest` |
|
|
@@ -49,7 +49,7 @@ description.
|
|
|
49
49
|
## Channel behavior
|
|
50
50
|
|
|
51
51
|
| Artifact channel | Default receipt | stdout | stderr |
|
|
52
|
-
|
|
52
|
+
|---|---|---|---|
|
|
53
53
|
| `stdout` | `suppress` | Artifact bytes only | Extension-owned diagnostics or summary |
|
|
54
54
|
| `file` | `render` | Bounded structured receipt | Extension-owned diagnostics |
|
|
55
55
|
|
|
@@ -35,7 +35,7 @@ inline tracker-not-initialized message anywhere under `src/sdk`.
|
|
|
35
35
|
## Promotion Partition
|
|
36
36
|
|
|
37
37
|
| Promotion item | Primitive family | Primary private domains to promote |
|
|
38
|
-
|
|
38
|
+
|---|---|---|
|
|
39
39
|
| [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Item lifecycle | `core/item`, `core/store`, `core/lock`, mutation checkpoints |
|
|
40
40
|
| [pm-rjqr](../.agents/pm/features/pm-rjqr.toon) | Query and read | `core/search`, read projections, context/next/list/get aggregation |
|
|
41
41
|
| [pm-zwpp](../.agents/pm/features/pm-zwpp.toon) | Annotations and links | comments, notes, learnings, files, docs, deps, append metadata |
|
|
@@ -48,7 +48,7 @@ inline tracker-not-initialized message anywhere under `src/sdk`.
|
|
|
48
48
|
## Command Family Map
|
|
49
49
|
|
|
50
50
|
| CLI/MCP source family | SDK destination | Notes |
|
|
51
|
-
|
|
51
|
+
|---|---|---|
|
|
52
52
|
| `create`, `update`, `update-many`, `copy`, `delete`, `restore` | [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Item CRUD and replay paths should become typed lifecycle SDK calls. |
|
|
53
53
|
| `claim`, `release`, `focus`, lifecycle shortcut helpers | [pm-98cz](../.agents/pm/features/pm-98cz.toon) | Ownership and actionable-state changes belong beside lifecycle primitives. |
|
|
54
54
|
| `list`, `get`, `search`, `context`, `next`, `aggregate`, `stats` | [pm-rjqr](../.agents/pm/features/pm-rjqr.toon) | `list` and `search` implementations now live under `src/sdk/query/**`; remaining read models should follow the same SDK-owned pattern. |
|
|
@@ -17,13 +17,13 @@ Use `pm contracts --summary --json` for the bounded bootstrap and `pm contracts
|
|
|
17
17
|
|
|
18
18
|
The read primitives accept `--for <intent>`:
|
|
19
19
|
|
|
20
|
-
| Command
|
|
21
|
-
|
|
22
|
-
| `context`
|
|
23
|
-
| `get`
|
|
24
|
-
| `list` and list aliases | `triage`
|
|
25
|
-
| `next`
|
|
26
|
-
| `search`
|
|
20
|
+
| Command | Built-in intent | Purpose |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `context` | `orient`, `handoff` | Active hierarchy or continuation context |
|
|
23
|
+
| `get` | `inspect` | Complete item lifecycle and relationship context |
|
|
24
|
+
| `list` and list aliases | `triage` | Compact governance and ownership fields |
|
|
25
|
+
| `next` | `execute` | One actionable recommendation |
|
|
26
|
+
| `search` | `discover` | Ranked canonical-lineage candidates |
|
|
27
27
|
|
|
28
28
|
Explicit projection and token flags win over intent defaults:
|
|
29
29
|
|
package/docs/TESTING.md
CHANGED
|
@@ -280,7 +280,7 @@ required CI asks for as few runners as the proofs allow
|
|
|
280
280
|
([pm-m6ig79](../.agents/pm/issues/pm-m6ig79.toon)):
|
|
281
281
|
|
|
282
282
|
| Job | Runs |
|
|
283
|
-
|
|
283
|
+
|---|---|
|
|
284
284
|
| `Build foundation (Ubuntu, Node 24)` | Build, `dist` artifact, packed tarball. |
|
|
285
285
|
| `Packed runtime (<os>)` × 3 | Packed first run on Node 22.18.0 and 24 in isolated prefixes, dist version smoke; Ubuntu adds the Node 22 telemetry and snapshot regressions, macOS the native shell and portability checks, Windows the full npm npx and Bun bunx acceptance. |
|
|
286
286
|
| `Gates (static)` | Typecheck, version, changelog, secret scan, `pnpm lint` (`quality:static`), package artifact, token budgets, tracker merge-safety and assurance gates. |
|
|
@@ -40,7 +40,7 @@ match the destination; other selectors inspect both snapshots so a mutation cann
|
|
|
40
40
|
escape a protected scope by removing its tag or changing its type.
|
|
41
41
|
|
|
42
42
|
| Rule kind | Required properties | Behavior |
|
|
43
|
-
|
|
43
|
+
|---|---|---|
|
|
44
44
|
| `require_fields` | `fields` | Checks evidence on lifecycle, scope, or required-field changes |
|
|
45
45
|
| `transition` | `allowed` | Allows listed `[from, to]` status pairs; `$create` and `$delete` represent absent records |
|
|
46
46
|
| `authors` | `authors` | Requires a listed mutation actor |
|
|
@@ -153,7 +153,7 @@ violated. It does not establish that a project declared any requirements.
|
|
|
153
153
|
The receipt exposes these independent measurements even in counts mode:
|
|
154
154
|
|
|
155
155
|
| Field | Meaning |
|
|
156
|
-
|
|
156
|
+
|---|---|
|
|
157
157
|
| `declared_requirement_count` | Number of `require_fields` declarations, including operation-specific ones |
|
|
158
158
|
| `state_requirement_count` | Number eligible for a state scan, without operation selectors |
|
|
159
159
|
| `applicable_requirement_count` | Distinct requirements that matched at least one supplied item |
|
|
@@ -69,14 +69,14 @@ tokenized recovery actions.
|
|
|
69
69
|
|
|
70
70
|
Recovery precedence is intentional:
|
|
71
71
|
|
|
72
|
-
| State
|
|
73
|
-
|
|
74
|
-
| `merge_evidence_invalid`
|
|
75
|
-
| `history_evidence_invalid`
|
|
76
|
-
| `merge_reconciliation_required` | `pm merge reconcile`
|
|
77
|
-
| `history_repair_required`
|
|
78
|
-
| `merge_fence_unprepared`
|
|
79
|
-
| `ready`
|
|
72
|
+
| State | Next action | Why it comes first |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `merge_evidence_invalid` | `pm merge report` | Untrusted evidence must be inspected before it can drive repair. |
|
|
75
|
+
| `history_evidence_invalid` | `pm validate --check-history-drift --full` | Required history evidence could not be interpreted safely. |
|
|
76
|
+
| `merge_reconciliation_required` | `pm merge reconcile` | Pending scalar decisions can explain and settle merge-created divergence. |
|
|
77
|
+
| `history_repair_required` | `pm history-repair --all` | Remaining append-only drift needs an audited re-anchor. |
|
|
78
|
+
| `merge_fence_unprepared` | `pm merge install` | The committed fence or clone-local drivers are absent or drifted. |
|
|
79
|
+
| `ready` | none | All included readiness predicates passed. |
|
|
80
80
|
|
|
81
81
|
`pm health --strict-exit` also treats missing clone-local merge drivers as blocking. Default health remains advisory for never-installed drivers so ordinary diagnostics retain backward compatibility.
|
|
82
82
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":5,"transcript_version":2,"transcript_digest":"sha256:b4b151f3d36860e73cd535d0520e9f03b4ecec4444ee81a8b868896b5b0bba47","estimator":"ceil(utf8_bytes / 4)","comparison_scope":"plan_recovery_tracker_root_canonicalized","measurement_scope":"output_before_token_accounting","published_with_release":true,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["actionable_work","active_ownership","workspace_state"],"measured_winner_tokens":1051,"protocols":[{"task_id":"orientation-context-intent","command_count":1,"estimated_tokens":1051,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"context","field_path":"hierarchy"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-operating-rules","command_count":4,"estimated_tokens":2067,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"open","field_path":"items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-contracts-next","command_count":2,"estimated_tokens":5213,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"next","field_path":"recommended.id"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}]}}]},"tasks":[{"id":"orientation-context-intent","max_estimated_tokens":1051,"steps":[{"id":"context","max_estimated_tokens":1051,"accounting_mode":"self_reported"}]},{"id":"orientation-contracts-next","max_estimated_tokens":5213,"steps":[{"id":"contracts","max_estimated_tokens":4481,"accounting_mode":"self_reported"},{"id":"next","max_estimated_tokens":732,"accounting_mode":"self_reported"}]},{"id":"orientation-operating-rules","max_estimated_tokens":2067,"steps":[{"id":"context","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"search","max_estimated_tokens":164,"accounting_mode":"self_reported"},{"id":"open","max_estimated_tokens":712,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":176,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":
|
|
1
|
+
{"version":5,"transcript_version":2,"transcript_digest":"sha256:b4b151f3d36860e73cd535d0520e9f03b4ecec4444ee81a8b868896b5b0bba47","estimator":"ceil(utf8_bytes / 4)","comparison_scope":"plan_recovery_tracker_root_canonicalized","measurement_scope":"output_before_token_accounting","published_with_release":true,"orientation":{"canonical_task_id":"orientation-context-intent","required_capabilities":["actionable_work","active_ownership","workspace_state"],"measured_winner_tokens":1051,"protocols":[{"task_id":"orientation-context-intent","command_count":1,"estimated_tokens":1051,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"context","field_path":"hierarchy"}],"active_ownership":[{"step_id":"context","field_path":"activity"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-operating-rules","command_count":4,"estimated_tokens":2067,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"open","field_path":"items"}],"active_ownership":[{"step_id":"in-progress","field_path":"items"}],"workspace_state":[{"step_id":"context","field_path":"summary.active_items"}]}},{"task_id":"orientation-contracts-next","command_count":2,"estimated_tokens":5213,"capabilities":["actionable_work","active_ownership","workspace_state"],"capability_evidence":{"actionable_work":[{"step_id":"next","field_path":"recommended.id"}],"active_ownership":[{"step_id":"next","field_path":"held_by_others"}],"workspace_state":[{"step_id":"next","field_path":"summary.in_progress"}]}}]},"tasks":[{"id":"orientation-context-intent","max_estimated_tokens":1051,"steps":[{"id":"context","max_estimated_tokens":1051,"accounting_mode":"self_reported"}]},{"id":"orientation-contracts-next","max_estimated_tokens":5213,"steps":[{"id":"contracts","max_estimated_tokens":4481,"accounting_mode":"self_reported"},{"id":"next","max_estimated_tokens":732,"accounting_mode":"self_reported"}]},{"id":"orientation-operating-rules","max_estimated_tokens":2067,"steps":[{"id":"context","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"search","max_estimated_tokens":164,"accounting_mode":"self_reported"},{"id":"open","max_estimated_tokens":712,"accounting_mode":"self_reported"},{"id":"in-progress","max_estimated_tokens":176,"accounting_mode":"self_reported"}]},{"id":"context-bootstrap","max_estimated_tokens":2025,"steps":[{"id":"triage","max_estimated_tokens":619,"accounting_mode":"self_reported"},{"id":"orient","max_estimated_tokens":1015,"accounting_mode":"self_reported"},{"id":"inspect","max_estimated_tokens":391,"accounting_mode":"self_reported"}]},{"id":"closed-domain-recovery","max_estimated_tokens":650,"steps":[{"id":"refuse-intent","max_estimated_tokens":259,"accounting_mode":"self_reported"},{"id":"retry-intent","max_estimated_tokens":391,"accounting_mode":"self_reported"}]},{"id":"unknown-option-recovery","max_estimated_tokens":596,"steps":[{"id":"refuse-option","max_estimated_tokens":433,"accounting_mode":"self_reported"},{"id":"retry-option","max_estimated_tokens":163,"accounting_mode":"self_reported"}]},{"id":"lifecycle-mutation","max_estimated_tokens":915,"steps":[{"id":"create","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"inspect-open","max_estimated_tokens":384,"accounting_mode":"self_reported"},{"id":"close","max_estimated_tokens":92,"accounting_mode":"self_reported"},{"id":"inspect-closed","max_estimated_tokens":419,"accounting_mode":"self_reported"}]},{"id":"bulk-effect-outcomes","max_estimated_tokens":392,"steps":[{"id":"create-bulk-target","max_estimated_tokens":20,"accounting_mode":"self_reported"},{"id":"partial-effect","max_estimated_tokens":240,"accounting_mode":"self_reported"},{"id":"no-effect","max_estimated_tokens":132,"accounting_mode":"self_reported"}]},{"id":"plan-execution-mutations","max_estimated_tokens":806,"steps":[{"id":"create-plan","max_estimated_tokens":21,"accounting_mode":"self_reported"},{"id":"add-step","max_estimated_tokens":254,"accounting_mode":"self_reported"},{"id":"complete-step","max_estimated_tokens":253,"accounting_mode":"self_reported"},{"id":"inspect-plan","max_estimated_tokens":278,"accounting_mode":"self_reported"}]}],"composite_max_estimated_tokens":13715}
|
|
@@ -5,7 +5,7 @@ Tracker: `pm-kxci8x`.
|
|
|
5
5
|
This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.
|
|
6
6
|
|
|
7
7
|
| Capability family | Commands |
|
|
8
|
-
|
|
8
|
+
|---|---|
|
|
9
9
|
| workspace | `workspace init`, `workspace config`, `workspace merge`, `workspace schema`, `workspace profile`, `ops telemetry`, `ops health`, `ops gc`, `workspace` |
|
|
10
10
|
| intake | `create`, `item`, `item copy`, `context focus`, `history restore` |
|
|
11
11
|
| context | `list`, `aggregate`, `context`, `get`, `search`, `item duplicates`, `ops eval`, `context next`, `history activity`, `ops stats`, `help` |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
This file is generated from `PM_COMMAND_CAPABILITY_CONTRACTS`. Do not edit it manually.
|
|
4
4
|
|
|
5
5
|
| Command | Minimum visibility tier | Capability family |
|
|
6
|
-
|
|
6
|
+
|---|---|---|
|
|
7
7
|
| `init` | core | workspace |
|
|
8
8
|
| `workspace init` | core | workspace |
|
|
9
9
|
| `config` | standard | workspace |
|