@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/AGENT_GUIDE.md
CHANGED
|
@@ -124,54 +124,54 @@ tests compare complete history bytes while the unrelated tracker's claims change
|
|
|
124
124
|
|
|
125
125
|
## Token-Minimal Retrieval
|
|
126
126
|
|
|
127
|
-
| Need
|
|
128
|
-
|
|
129
|
-
| The single next action + why
|
|
130
|
-
| Next ready work in one epic
|
|
131
|
-
| Canonical cold-start orientation
|
|
132
|
-
| Next work and agenda
|
|
133
|
-
| Comprehensive whole-tracker snapshot | `pm context --depth full` (every section, no per-section row cap)
|
|
134
|
-
| Status of one epic/subtree
|
|
135
|
-
| Relevant items
|
|
136
|
-
| Require every query token
|
|
137
|
-
| Just the match count
|
|
138
|
-
| Per-query score threshold
|
|
139
|
-
| Every matched row (no cap)
|
|
140
|
-
| Item bodies in bulk (one call)
|
|
141
|
-
| Open work only
|
|
142
|
-
| Scope search like list
|
|
143
|
-
| Items changed since last window
|
|
144
|
-
| Open items changed today
|
|
145
|
-
| Items changed recently
|
|
146
|
-
| Single item
|
|
147
|
-
| Full machine payload
|
|
148
|
-
| Command flags
|
|
149
|
-
| Command intent map
|
|
150
|
-
| Low-noise machine contracts
|
|
151
|
-
| Semantic index refresh
|
|
152
|
-
| Timeline
|
|
153
|
-
| Audited history redaction
|
|
154
|
-
| Audited history re-anchor
|
|
155
|
-
| Register custom item type
|
|
156
|
-
| Remove custom item type
|
|
157
|
-
| Register custom status
|
|
158
|
-
| Remove custom status
|
|
159
|
-
| Agent plan create
|
|
160
|
-
| Agent plan create with steps
|
|
161
|
-
| Agent plan step update
|
|
162
|
-
| Agent plan read
|
|
163
|
-
| Materialize plan steps
|
|
164
|
-
| Dependencies
|
|
165
|
-
| Graph queries
|
|
166
|
-
| Bulk update by id allowlist
|
|
167
|
-
| Audited bulk close (sprint closeout) | `pm close-many --filter-sprint <s> --reason "<text>" --dry-run` (full `pm close` semantics per item; `--rollback <id>` to undo)
|
|
168
|
-
| Local docs routing
|
|
169
|
-
| Compact mutation echo
|
|
170
|
-
| Minimal mutation echo
|
|
171
|
-
| Duplicate close
|
|
172
|
-
| Long body from a file
|
|
173
|
-
| Close with short flags
|
|
174
|
-
| Close via resolution only
|
|
127
|
+
| Need | Command |
|
|
128
|
+
|---|---|
|
|
129
|
+
| The single next action + why | `pm next` (concrete ready leaves first; completed-container closeout rows surface only when no leaf work is ready; `--ready-only` for the tightest output) |
|
|
130
|
+
| Next ready work in one epic | `pm next --parent <id>` |
|
|
131
|
+
| Canonical cold-start orientation | `pm context --for orient` (1,055 estimated tokens on the fixed 101-item replay corpus) |
|
|
132
|
+
| Next work and agenda | `pm context --limit 10` |
|
|
133
|
+
| Comprehensive whole-tracker snapshot | `pm context --depth full` (every section, no per-section row cap) |
|
|
134
|
+
| Status of one epic/subtree | `pm context --parent <id> --depth deep` |
|
|
135
|
+
| Relevant items | `pm search "<keywords>" --limit 10` (keyword hits are score-ranked; keyword mode defaults to 50 results, `result.total` reports the full pre-limit count) |
|
|
136
|
+
| Require every query token | `pm search "<keywords>" --match-mode and` (hard-filter; `exact` = contiguous phrase; default `or` adds an all-terms ranking bonus) |
|
|
137
|
+
| Just the match count | `pm search "<keywords>" --count` (no hit rows; `count`/`total` carry the matched total) |
|
|
138
|
+
| Per-query score threshold | `pm search "<keywords>" --min-score 5` (overrides settings `search.score_threshold` for this query) |
|
|
139
|
+
| Every matched row (no cap) | `pm list --all --no-truncate --brief` (`result.total` reports the full count when a `--limit`/`--offset` truncates) |
|
|
140
|
+
| Item bodies in bulk (one call) | `pm list --status open --json --include-body` (avoids one `pm get` per item) |
|
|
141
|
+
| Open work only | `pm search "<keywords>" --status open` (drops closed-history noise; did-you-mean on typos) |
|
|
142
|
+
| Scope search like list | `pm search "<keywords>" --type Task --assignee <name> --parent <id>` (full `pm list` filter parity) |
|
|
143
|
+
| Items changed since last window | `pm list --all --updated-after <prev-run-ISO> --brief` (relative `-2h`/`-7d` also work) |
|
|
144
|
+
| Open items changed today | `pm list --status open --today --brief` (local-midnight shorthand; mutually exclusive with `--updated-after`) |
|
|
145
|
+
| Items changed recently | `pm list --all --recent --brief` (last seven days; mutually exclusive with `--updated-after`) |
|
|
146
|
+
| Single item | `pm get <id>` |
|
|
147
|
+
| Full machine payload | `pm get <id> --full --json` |
|
|
148
|
+
| Command flags | `pm <command> --help --json` |
|
|
149
|
+
| Command intent map | `pm contracts --summary --json` (one command plus terse intent per row; use before command-scoped contracts) |
|
|
150
|
+
| Low-noise machine contracts | `pm contracts --command <command> --flags-only --json` |
|
|
151
|
+
| Semantic index refresh | `pm reindex --mode semantic --progress` (stale-first by default; add `--full` to force full rebuild; requires the `search-advanced` package) |
|
|
152
|
+
| Timeline | `pm activity --id <id> --limit 20` |
|
|
153
|
+
| Audited history redaction | `pm history-redact <id> --literal "<secret>" --replacement "[redacted]" --dry-run` |
|
|
154
|
+
| Audited history re-anchor | `pm history-repair <id> --dry-run` (clears drift flagged by `pm health`/`pm validate`) |
|
|
155
|
+
| Register custom item type | `pm schema add-type <Name> --description "<text>" --default-status open` (then `pm create <Name> "..."`) |
|
|
156
|
+
| Remove custom item type | `pm schema remove-type <Name>` (warns if items still use it; built-ins refused) |
|
|
157
|
+
| Register custom status | `pm schema add-status <id> --role <active\|terminal\|...> --alias <name> --order <n>` |
|
|
158
|
+
| Remove custom status | `pm schema remove-status <id>` (warns if items use it; built-in statuses refused) |
|
|
159
|
+
| Agent plan create | `pm plan create --title "<scope>" --harness claude-code --scope "<short>" --claim` |
|
|
160
|
+
| Agent plan create with steps | `pm plan create --title "<scope>" --step "<step 1>" --step "<step 2>" --step "<step 3>"` (repeated `--step` seeds ordered steps) |
|
|
161
|
+
| Agent plan step update | `pm plan update-step <plan-id> plan-step-001 --step-status in_progress --step-evidence "<short>"` |
|
|
162
|
+
| Agent plan read | `pm plan show <plan-id> --depth brief` (or `--fields id,title,steps_summary`) |
|
|
163
|
+
| Materialize plan steps | `pm plan materialize <plan-id> --steps plan-step-002 --materialize-type Task` |
|
|
164
|
+
| Dependencies | `pm deps <id> --format tree` |
|
|
165
|
+
| Graph queries | `pm graph successors <id> --limit 20` (also `ancestors`, `paths`, `impact`, `analyze`, `audit`, `communities`, `redundancy`, `dominators`, `plan`) |
|
|
166
|
+
| Bulk update by id allowlist | `pm update-many --ids pm-a,pm-b --priority 1 --dry-run` (preview, then drop `--dry-run`) |
|
|
167
|
+
| Audited bulk close (sprint closeout) | `pm close-many --filter-sprint <s> --reason "<text>" --dry-run` (full `pm close` semantics per item; `--rollback <id>` to undo) |
|
|
168
|
+
| Local docs routing | `pm install guide-shell --project`, then `pm guide <topic>` |
|
|
169
|
+
| Compact mutation echo | `pm --no-changed-fields create "..."` (drops the redundant `changed_fields` array, keeps `changed_field_count`) |
|
|
170
|
+
| Minimal mutation echo | `pm --id-only create "..."` (prints only id and status for single-item mutations) |
|
|
171
|
+
| Duplicate close | `pm close <duplicate> --duplicate-of <canonical>` (or `-d <canonical>`) |
|
|
172
|
+
| Long body from a file | `pm create <Type> "<title>" --body-file ./spec.md` (also on `pm update`; mutually exclusive with `--body`) |
|
|
173
|
+
| Close with short flags | `pm close <id> -r "<reason>"` / `-m "<history msg>"` / `-d <canonical>` |
|
|
174
|
+
| Close via resolution only | `pm close <id> --resolution "<summary>"` (used as the close reason when one is required) |
|
|
175
175
|
|
|
176
176
|
Default TOON output is preferred for model-readable loops. Use `--json` only when strict parsing is needed.
|
|
177
177
|
|
|
@@ -55,19 +55,19 @@ Each includes nested facts. The historical renderer is measured at commit
|
|
|
55
55
|
Measurements are committed in `tests/fixtures/agent-encoding-baseline.json`.
|
|
56
56
|
|
|
57
57
|
| Surface / rows | Previous TOON | JSON | Nested TOON | Hoisted cells | Ordinal | Selected |
|
|
58
|
-
|
|
59
|
-
| search / 1
|
|
60
|
-
| search / 8
|
|
61
|
-
| search / 32
|
|
62
|
-
| next / 1
|
|
63
|
-
| next / 8
|
|
64
|
-
| next / 32
|
|
65
|
-
| context / 1
|
|
66
|
-
| context / 8
|
|
67
|
-
| context / 32
|
|
68
|
-
| get / 1
|
|
69
|
-
| get / 8
|
|
70
|
-
| get / 32
|
|
58
|
+
|---|---:|---:|---:|---:|---:|---:|
|
|
59
|
+
| search / 1 | 83 | 110 | 70 | 86 | 88 | 73 |
|
|
60
|
+
| search / 8 | 503 | 607 | 406 | 303 | 417 | 303 |
|
|
61
|
+
| search / 32 | 1943 | 2311 | 1558 | 1047 | 1545 | 1047 |
|
|
62
|
+
| next / 1 | 86 | 122 | 76 | 94 | 93 | 79 |
|
|
63
|
+
| next / 8 | 527 | 703 | 454 | 367 | 457 | 367 |
|
|
64
|
+
| next / 32 | 2039 | 2695 | 1750 | 1303 | 1705 | 1303 |
|
|
65
|
+
| context / 1 | 89 | 118 | 76 | 89 | 95 | 79 |
|
|
66
|
+
| context / 8 | 544 | 664 | 447 | 320 | 459 | 321 |
|
|
67
|
+
| context / 32 | 2104 | 2536 | 1719 | 1112 | 1707 | 1113 |
|
|
68
|
+
| get / 1 | 86 | 124 | 76 | 115 | 106 | 80 |
|
|
69
|
+
| get / 8 | 408 | 551 | 279 | 311 | 400 | 264 |
|
|
70
|
+
| get / 32 | 1512 | 2015 | 975 | 983 | 1408 | 840 |
|
|
71
71
|
|
|
72
72
|
These are fixture measurements, not universal compression guarantees. Selected
|
|
73
73
|
output combines the existing scalar presentation with a per-collection choice,
|
|
@@ -83,13 +83,13 @@ one for an extra JSON-cell decoding step or two for positional row interpretatio
|
|
|
83
83
|
The minimum adopted score is four; it is a design criterion alongside the
|
|
84
84
|
independent executable equivalence gate.
|
|
85
85
|
|
|
86
|
-
| Candidate
|
|
87
|
-
|
|
88
|
-
| JSON
|
|
89
|
-
| Nested TOON
|
|
90
|
-
| Hoisted cells
|
|
91
|
-
| Ordinal
|
|
92
|
-
| Selected hybrid |
|
|
86
|
+
| Candidate | Readability score / 5 | Interpretation |
|
|
87
|
+
|---|---:|---|
|
|
88
|
+
| JSON | 5 | Named fields and native nested values |
|
|
89
|
+
| Nested TOON | 5 | Named fields and standard nested decoding |
|
|
90
|
+
| Hoisted cells | 4 | Named columns and declared JSON cells |
|
|
91
|
+
| Ordinal | 3 | Column lookup plus positional nested rows |
|
|
92
|
+
| Selected hybrid | 4–5 | Expanded small rows or declared tables |
|
|
93
93
|
|
|
94
94
|
Ordinal arrays require an additional positional interpretation and save nothing
|
|
95
95
|
on these nested fixtures, so they are not adopted. The complete brief-list
|
package/docs/ASSURANCE.md
CHANGED
|
@@ -33,17 +33,17 @@ The assurance SDK keeps those semantics independent from presentation. Commander
|
|
|
33
33
|
|
|
34
34
|
Measurements support these built-in sources:
|
|
35
35
|
|
|
36
|
-
| Source
|
|
37
|
-
|
|
38
|
-
| `items`
|
|
36
|
+
| Source | Purpose |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `items` | Count authoritative full item records matching status, type, tags, an exact metadata field, or a field `state` of `present`/`missing`. |
|
|
39
39
|
| `dependency_kind` | Count typed relationship edges such as `blocked_by` or `verifies`; accepted aliases and canonical spellings measure the same population. |
|
|
40
|
-
| `graph`
|
|
41
|
-
| `validate`
|
|
42
|
-
| `health`
|
|
43
|
-
| `history`
|
|
44
|
-
| `links`
|
|
45
|
-
| `derived`
|
|
46
|
-
| `provider`
|
|
40
|
+
| `graph` | Select a numeric or labelled-set field from a public graph SDK result. |
|
|
41
|
+
| `validate` | Select a validator check status or numeric detail. |
|
|
42
|
+
| `health` | Select a health check status, numeric detail, or labelled set. |
|
|
43
|
+
| `history` | Count immutable events by operation, author, harness, or model. |
|
|
44
|
+
| `links` | Count items with present or missing file, test, or documentation evidence. |
|
|
45
|
+
| `derived` | Combine numeric measurements with deterministic arithmetic and cycle detection. |
|
|
46
|
+
| `provider` | Delegate a measurement to an explicitly supplied host/package resolver. |
|
|
47
47
|
|
|
48
48
|
`ASSURANCE_MEASUREMENT_SOURCE_KINDS` and `ASSURANCE_GATE_TRIGGERS` are the
|
|
49
49
|
public SDK constants for these closed vocabularies. Runtime validation rejects
|
|
@@ -153,7 +153,7 @@ projection, including feedback writes). The explicit scan includes the cold
|
|
|
153
153
|
derived-index rebuild; these are host observations rather than latency gates.
|
|
154
154
|
|
|
155
155
|
| Corpus items | Standard p95 | Brief p95 | Fields p95 | Explicit full scan | Verified scan rows |
|
|
156
|
-
|
|
156
|
+
|---:|---:|---:|---:|---:|---:|
|
|
157
157
|
| 100 | 4.53 ms | 4.24 ms | 3.54 ms | 48 ms | 100 |
|
|
158
158
|
| 10,000 | 3.61 ms | 3.03 ms | 4.08 ms | 4.91 s | 10,000 |
|
|
159
159
|
| 100,000 | 3.69 ms | 11.00 ms | 3.11 ms | 48.59 s | 100,000 |
|
|
@@ -162,7 +162,7 @@ Measured on 2026-09-05 with Node 26.7.0; these are observations, not portable
|
|
|
162
162
|
latency guarantees. Duplicate timings exclude filesystem ingestion.
|
|
163
163
|
|
|
164
164
|
| Items | Possible pairs | Scored pairs | Analysis time | Mean bytes written per serve | Compactions / serves | Final ledger bytes |
|
|
165
|
-
|
|
165
|
+
|---:|---:|---:|---:|---:|---:|---:|
|
|
166
166
|
| 10,000 | 49,995,000 | 5,000 | 92 ms | 18,138 | 2 / 40 | 237,785 |
|
|
167
167
|
| 100,000 | 4,999,950,000 | 50,000 | 864 ms | 18,149 | 2 / 40 | 237,821 |
|
|
168
168
|
| 1,000,000 | 499,999,500,000 | 500,000 | 10,367 ms | 18,135 | 2 / 40 | 237,857 |
|
|
@@ -175,7 +175,7 @@ receipts; these are four concurrent tasks sharing a cross-process lock, not a
|
|
|
175
175
|
measurement of four separate OS processes.
|
|
176
176
|
|
|
177
177
|
| Candidate rows per serve | Serves/s/workspace | Minimum wait | p50 wait | p95 wait | Maximum wait |
|
|
178
|
-
|
|
178
|
+
|---:|---:|---:|---:|---:|---:|
|
|
179
179
|
| 10,000 | 46.73 | 3.11 ms | 25.15 ms | 84.97 ms | 105.66 ms |
|
|
180
180
|
| 100,000 | 20.82 | 18.29 ms | 50.10 ms | 193.86 ms | 229.60 ms |
|
|
181
181
|
| 1,000,000 | 1.92 | 198.10 ms | 809.52 ms | 1,367.67 ms | 1,622.77 ms |
|
|
@@ -197,7 +197,7 @@ After installing the plugin:
|
|
|
197
197
|
## Compatibility
|
|
198
198
|
|
|
199
199
|
| pm-cli version | Plugin version | Claude Code version |
|
|
200
|
-
|
|
200
|
+
|---|---|---|
|
|
201
201
|
| Exact same date-based version as the plugin | Exact same date-based version as pm-cli | Current supported Claude Code |
|
|
202
202
|
|
|
203
203
|
The authoritative plugin version is `plugins/pm-claude/.claude-plugin/plugin.json`; `pnpm version:check` also verifies the pinned runtime dependency.
|
package/docs/CLI_GRAMMAR.md
CHANGED
|
@@ -133,7 +133,7 @@ and cross-workspace evidence exist, published aliases remain executable.
|
|
|
133
133
|
Tracked by [pm-m6g87m](../.agents/pm/tasks/pm-m6g87m.toon), [pm-fmy9ih](../.agents/pm/tasks/pm-fmy9ih.toon), and [pm-wfskfn](../.agents/pm/tasks/pm-wfskfn.toon).
|
|
134
134
|
|
|
135
135
|
| Canonical command | Compatibility alias | Responsibility |
|
|
136
|
-
|
|
136
|
+
|---|---|---|
|
|
137
137
|
| `item copy` | `copy` | Copy one item to a new ID |
|
|
138
138
|
| `workspace merge` | `merge` | Install, inspect, or run Git tracker merge drivers |
|
|
139
139
|
| `item duplicates` | `duplicates` | Discover bounded duplicate clusters in core |
|
|
@@ -216,7 +216,7 @@ Tracked by [pm-npr3](../.agents/pm/tasks/pm-npr3.toon) and
|
|
|
216
216
|
[pm-uk9dwh](../.agents/pm/tasks/pm-uk9dwh.toon).
|
|
217
217
|
|
|
218
218
|
| Canonical command | Compatibility spelling | Responsibility |
|
|
219
|
-
|
|
219
|
+
|---|---|---|
|
|
220
220
|
| `workspace init` | `init` | Bootstrap storage, settings, and optional guidance |
|
|
221
221
|
| `workspace config` | `config` | Read or change individual project/global settings |
|
|
222
222
|
| `workspace schema` | `schema` | Define types, statuses, fields, and validation contracts |
|
package/docs/COMMANDS.md
CHANGED
|
@@ -51,21 +51,21 @@ JSON ceiling; TOON uses the smaller default agent ceiling.
|
|
|
51
51
|
|
|
52
52
|
## Command Families
|
|
53
53
|
|
|
54
|
-
| Family
|
|
55
|
-
|
|
56
|
-
| Bootstrap
|
|
57
|
-
| Lifecycle
|
|
58
|
-
| Bulk
|
|
59
|
-
| Scheduling
|
|
60
|
-
| Planning
|
|
61
|
-
| Links
|
|
62
|
-
| Verification | `test`, `test-all`, `test-runs`†, `validate`, `gc`
|
|
63
|
-
| History
|
|
64
|
-
| Schema
|
|
65
|
-
| Profiles
|
|
66
|
-
| Calendar
|
|
67
|
-
| Packages
|
|
68
|
-
| Machines
|
|
54
|
+
| Family | Commands | Purpose |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| Bootstrap | `init`, `config`, `health`, `telemetry` | create and inspect tracker setup |
|
|
57
|
+
| Lifecycle | `create`, `copy`, `focus`, `claim`, `update`, `item reopen`, `append`, `close`, `release`, `close delete` | mutate item state, including terminal-work recurrence without duplicate creation |
|
|
58
|
+
| Bulk | `item mutate`, `item complete`, `update many`, `close many` | atomically commit heterogeneous SDK mutation batches or evidence-backed completion, or apply one change across a matched, dry-run-previewed set with a rollback checkpoint |
|
|
59
|
+
| Scheduling | `meet`, `event`, `remind` | low-friction Meeting/Event/Reminder creation |
|
|
60
|
+
| Planning | `plan create`, `plan add-step`, `plan update-step`, `plan complete-step`, `plan link`, `plan approve`, `plan materialize` | agent-optimized living plans with ordered steps, evidence, decisions, validation, and materialization |
|
|
61
|
+
| Links | `files`, `docs`, `test`, `deps` | connect items to artifacts, tests, and relationships |
|
|
62
|
+
| Verification | `test`, `test-all`, `test-runs`†, `validate`, `gc` | run linked tests and repository checks |
|
|
63
|
+
| History | `history`, `history-compact`, `history-redact`, `history-repair`, `activity`, `restore`, `stats` | inspect, compact, redact, re-anchor, and recover item state |
|
|
64
|
+
| Schema | `schema add/remove-*` / `rename-type` / `rename-field` / `remap-status` / `apply-preset` | manage config-driven types, statuses, and fields; losslessly migrate existing items when definitions evolve; adopt presets or infer types |
|
|
65
|
+
| Profiles | `profile list` / `show` / `apply` / `lint` | compose item types, statuses, fields, workflows, config, templates, and recommended packages into archetype bundles (agile/ops/research); `apply` stages every dimension idempotently; `lint` reports author-time consistency findings without writing |
|
|
66
|
+
| Calendar | `calendar`, `cal` | project deadlines, reminders, and events |
|
|
67
|
+
| Packages | `install`, `upgrade`, `package`, `packages`, `extension`, package/extension command groups | install, upgrade, manage, and run package-backed extension commands |
|
|
68
|
+
| Machines | `contracts`, `help`, optional `guide`/`completion` | command contracts plus optional guide-shell docs routing and shell helpers |
|
|
69
69
|
|
|
70
70
|
`†` `test-runs` subcommands are provided by the optional `linked-test-adapters` package (`pm package install linked-test-adapters --project`).
|
|
71
71
|
|
|
@@ -963,6 +963,118 @@ pm release <id>
|
|
|
963
963
|
`--author` on claim/release flows, not a metadata update. Use `--force` only when
|
|
964
964
|
explicitly overriding terminal-state or lock conflicts.
|
|
965
965
|
|
|
966
|
+
Starting work respects declared blockers
|
|
967
|
+
([pm-urzubi](../.agents/pm/issues/pm-urzubi.toon)). `pm update <id> --status
|
|
968
|
+
in_progress`, `pm claim <id> --start`, `pm claim --next --start` and the
|
|
969
|
+
`start-task` action refuse with `start_blocked_by_open_dependency` (exit 4)
|
|
970
|
+
when the item moves into the start status while a `blocked_by` target is still
|
|
971
|
+
open. `pm claim --next --start` skips a ranked candidate refused this way (its
|
|
972
|
+
blocker opened after ranking, and nothing is written to it), claims the next
|
|
973
|
+
eligible candidate, and lists the skipped ids in `start_refused`. When the walk
|
|
974
|
+
is exhausted, the `no_available_next_item` refusal (or the `--if-available`
|
|
975
|
+
empty result) carries them too. An item already in that status is not
|
|
976
|
+
rechecked, so `claim --start` on it succeeds. The check runs before any write: the
|
|
977
|
+
explicit `claim <id> --start` judges it under the claim's item lock, and its
|
|
978
|
+
status update judges again under its own lock. When the first check refuses,
|
|
979
|
+
nothing is written. When a blocker opens between the two writes, the start
|
|
980
|
+
refuses and, if it took the item from no owner, releases that claim. The release
|
|
981
|
+
is fenced by assignee and claim principal, so another principal's takeover is
|
|
982
|
+
never cleared; principal is pm's unit of ownership, so a concurrent reclaim by
|
|
983
|
+
the same principal is indistinguishable from the original claim. If the item already had an owner, or that
|
|
984
|
+
release cannot run, the claim stays and the refusal's `why` reports the partial
|
|
985
|
+
completion. The
|
|
986
|
+
refusal lists the open blockers in `details.open_blockers` and suggests the
|
|
987
|
+
exact `pm update` that drops the edge. When no single command can do that
|
|
988
|
+
safely (clearing the `blocked_by` scalar would also drop an independent
|
|
989
|
+
`blocked_by` edge, or a legacy row's short id, alias kind or external locator
|
|
990
|
+
would not match a removal selector; see
|
|
991
|
+
[pm-4yxzvd](../.agents/pm/issues/pm-4yxzvd.toon)), it suggests inspecting the
|
|
992
|
+
item instead. The check uses the effective start status, including the
|
|
993
|
+
registered `in_progress` fallback when the workflow names `open`.
|
|
994
|
+
A terminal blocker never blocks, and an update that removes the blocker in the
|
|
995
|
+
same call is admitted. `--force` starts anyway and records
|
|
996
|
+
`start_blocker_override:<id>:<blockers>`. `governance.start_blocker_enforcement`
|
|
997
|
+
selects `strict` (default), `warn` (start and record
|
|
998
|
+
`start_with_open_blockers:<id>:<blockers>`), or `off`. A blocker whose record
|
|
999
|
+
cannot be judged (an invalid or non-UTF-8 document, an unsupported item format,
|
|
1000
|
+
or an ambiguous or conflicting identity) refuses under `strict` with that typed
|
|
1001
|
+
error. `warn` and `--force` still admit the start and record
|
|
1002
|
+
`start_blocker_unverifiable:<id>:<code>`. Filesystem failures and merge-conflict
|
|
1003
|
+
markers always propagate.
|
|
1004
|
+
|
|
1005
|
+
### Expected revisions (`--expect-hash`)
|
|
1006
|
+
|
|
1007
|
+
Read-decide-write agents guard a write with the revision they decided on
|
|
1008
|
+
([pm-gh1576](../.agents/pm/features/pm-gh1576.toon)). `pm get <id> --json`
|
|
1009
|
+
reports `item_hash`. The global `--expect-hash <item_hash>` flag makes every
|
|
1010
|
+
locked write the command makes to that item refuse with `item_revision_conflict`
|
|
1011
|
+
(exit 4) if the item changed since:
|
|
1012
|
+
|
|
1013
|
+
```bash
|
|
1014
|
+
H=$(pm get pm-a1b2 --json | jq -r .item_hash)
|
|
1015
|
+
pm close pm-a1b2 "Delivered by PR 1" --expect-hash "$H"
|
|
1016
|
+
H1=$(pm get pm-a1b2 --json | jq -r .item_hash)
|
|
1017
|
+
H2=$(pm get pm-c3d4 --json | jq -r .item_hash)
|
|
1018
|
+
pm update-many --ids pm-a1b2,pm-c3d4 --priority 1 \
|
|
1019
|
+
--expect-hash "pm-a1b2=$H1" --expect-hash "pm-c3d4=$H2"
|
|
1020
|
+
```
|
|
1021
|
+
|
|
1022
|
+
A bare hash binds to the command's `<id>` argument (for `plan`, the id after
|
|
1023
|
+
the subcommand; `plan create` has none). `<id>=<item_hash>`
|
|
1024
|
+
(repeatable or comma-separated) names targets explicitly and is required for
|
|
1025
|
+
commands without one item argument. The refusal reports `expected_revision`,
|
|
1026
|
+
`current_revision`, and `details.changes_since` (the newest 10 history entries
|
|
1027
|
+
since the declared revision, with their top-level `fields`). The refused write
|
|
1028
|
+
is suppressed; writes the same command already committed (for example the
|
|
1029
|
+
claim of a composed `claim --start`) stay durable, and the message then says
|
|
1030
|
+
so ("Earlier writes by this same invocation already committed"). Read commands refuse the flag with
|
|
1031
|
+
`expect_hash_requires_mutation`, and an empty value (such as an unset `$H`)
|
|
1032
|
+
refuses with `expect_hash_invalid` instead of running unguarded. Bulk
|
|
1033
|
+
`update-many`/`close-many` fail only stale rows, forward and `--rollback` alike, each
|
|
1034
|
+
carrying `error_code`, `expected_revision`, `current_revision` and
|
|
1035
|
+
`details.changes_since`. When `close` auto-unblocks a guarded dependent whose revision
|
|
1036
|
+
moved, the close stays committed and the command refuses with that dependent's
|
|
1037
|
+
`item_revision_conflict` once the fan-out finishes. `side_effects` names every
|
|
1038
|
+
write that committed first: the close and each dependent already unblocked. Do
|
|
1039
|
+
not retry the close; it is already terminal. `required` and `nextSteps` name
|
|
1040
|
+
only the remaining step for each refused guarded dependent
|
|
1041
|
+
(`details.pending_unblock`): re-read it, confirm every blocker it declares is
|
|
1042
|
+
resolved, then run the scoped unblock `nextSteps` lists (`pm update <dependent>
|
|
1043
|
+
--status <open-status> --unset blocked_by --unset blocked_reason --expect-hash
|
|
1044
|
+
<dependent>=<item_hash>`, carrying the configured open status and tracker
|
|
1045
|
+
scope). `--unset blocked_by` removes every `blocked_by` edge, including one a
|
|
1046
|
+
concurrent change added, so skipping the check can reopen a still-blocked item.
|
|
1047
|
+
Dependents whose unblock failed for another reason are in
|
|
1048
|
+
`details.auto_unblock_failed` with that reason; fix the cause first. Each list
|
|
1049
|
+
names at most 10 ids and counts the rest in `*_omitted`, keeping the details
|
|
1050
|
+
within the error-details size limit. When ids were omitted, or the steps exceed
|
|
1051
|
+
the 20-step cap (ten conflicts plus one other failure make 21), the last step
|
|
1052
|
+
lists every item in a blocked-role status (`pm list --status <blocked-statuses>
|
|
1053
|
+
--fields id,title,blocked_by,dependencies`, over the statuses the fan-out drew
|
|
1054
|
+
from), so a dependent whose step was cut is still found; it returns 200 rows per
|
|
1055
|
+
page, so follow `--after <next_cursor>` while `has_more: true`. `close-many` reports such a row as `closed` (`update-many` closing
|
|
1056
|
+
through `--status`, as `updated`), with the dependent's conflict under
|
|
1057
|
+
`dependent_revision_conflict`. A guarded `restore` refuses to recover
|
|
1058
|
+
over a live file that cannot be read as a document; an unguarded restore still
|
|
1059
|
+
recovers it. `deps` only reads, so it refuses the flag. History maintenance
|
|
1060
|
+
(`history-redact`, `history-repair` including `--salvage-tail`, `history-compact`)
|
|
1061
|
+
is checked under the stream lock. Its bulk forms (`history-compact --ids`,
|
|
1062
|
+
`history-repair --all`) carry the same typed conflict fields on refused rows. An
|
|
1063
|
+
item file whose embedded id differs from its physical file name (even by case on a
|
|
1064
|
+
case-sensitive filesystem) binds no revision: reading or declaring one refuses with
|
|
1065
|
+
`item_identity_conflict` until the identity is repaired. `validate --auto-fix`/`--prune-missing` refuses typed once every fix
|
|
1066
|
+
was attempted. When an extension parser or preflight override rewrites the
|
|
1067
|
+
invocation's tracker or arguments, a guarded invocation refuses with
|
|
1068
|
+
`expect_hash_invocation_rewritten`, since which item it writes cannot be proved.
|
|
1069
|
+
The same refusal covers a parser pass during final dispatch, which must also keep
|
|
1070
|
+
the guard admissible (adding `--background` late refuses with
|
|
1071
|
+
`expect_hash_background_unsupported`). Inventory commands
|
|
1072
|
+
(`package inventory`, `extension inventory`) never write items, so they validate
|
|
1073
|
+
the flag and then refuse with `expect_hash_requires_mutation`. An item the command never wrote produces the
|
|
1074
|
+
warning `expect_hash_unchecked:<id>:no_locked_write_reached_this_item`. MCP
|
|
1075
|
+
tools accept the same tokens as `expectHash`; the SDK exposes
|
|
1076
|
+
`withExpectedItemRevisions` (see [SDK](SDK.md#expected-item-revisions)).
|
|
1077
|
+
|
|
966
1078
|
## Logs
|
|
967
1079
|
|
|
968
1080
|
```bash
|
|
@@ -1487,23 +1599,23 @@ pm plan show <plan-id> --fields id,title,steps_summary
|
|
|
1487
1599
|
|
|
1488
1600
|
Subcommand cheatsheet:
|
|
1489
1601
|
|
|
1490
|
-
| Subcommand
|
|
1491
|
-
|
|
1492
|
-
| `create`
|
|
1493
|
-
| `show`
|
|
1494
|
-
| `add-step`
|
|
1495
|
-
| `update-step`
|
|
1496
|
-
| `complete-step`
|
|
1497
|
-
| `block-step`
|
|
1498
|
-
| `reorder-step`
|
|
1499
|
-
| `remove-step`
|
|
1500
|
-
| `link` / `unlink` | Add or remove `linked_items` on a step (with optional `--promote-to-item-dep`)
|
|
1501
|
-
| `decision`
|
|
1502
|
-
| `discovery`
|
|
1503
|
-
| `validation`
|
|
1504
|
-
| `resume`
|
|
1505
|
-
| `approve`
|
|
1506
|
-
| `materialize`
|
|
1602
|
+
| Subcommand | Purpose |
|
|
1603
|
+
|---|---|
|
|
1604
|
+
| `create` | Create a Plan item with scope, harness, parent, related, blocked-by, and optional auto-claim |
|
|
1605
|
+
| `show` | Progressive-disclosure read (brief / standard / deep) with current step + next-action hints |
|
|
1606
|
+
| `add-step` | Append a step with title/body/owner/status/dependencies/files/tests/docs |
|
|
1607
|
+
| `update-step` | Patch one step (title, body, status, evidence, owner, blocked reason) |
|
|
1608
|
+
| `complete-step` | Shortcut for setting a step to `completed` with evidence |
|
|
1609
|
+
| `block-step` | Shortcut for setting a step to `blocked` with required `--step-blocked-reason` |
|
|
1610
|
+
| `reorder-step` | Move a step to a new 1-based order |
|
|
1611
|
+
| `remove-step` | Drop a step and renumber remaining steps |
|
|
1612
|
+
| `link` / `unlink` | Add or remove `linked_items` on a step (with optional `--promote-to-item-dep`) |
|
|
1613
|
+
| `decision` | Append a decision log entry (decision/rationale/evidence) |
|
|
1614
|
+
| `discovery` | Append a discovery log entry |
|
|
1615
|
+
| `validation` | Append a validation check (text/command/expected) |
|
|
1616
|
+
| `resume` | Replace the resume-context summary for stateless agents |
|
|
1617
|
+
| `approve` | Move `plan_mode` to `approved` (default) or any other mode via `--mode` |
|
|
1618
|
+
| `materialize` | Create real pm items (default `Task`) from selected steps with bidirectional links |
|
|
1507
1619
|
|
|
1508
1620
|
Invariants:
|
|
1509
1621
|
|
|
@@ -9,7 +9,7 @@ spellings remain executable compatibility aliases with the same arguments,
|
|
|
9
9
|
results, exit codes, and SDK behavior.
|
|
10
10
|
|
|
11
11
|
| Native invocation | Compatibility spelling | Purpose |
|
|
12
|
-
|
|
12
|
+
|---|---|---|
|
|
13
13
|
| `pm context next` | `pm next` | Select ready work and explain blockers |
|
|
14
14
|
| `pm context focus` | `pm focus` | Read, set, or clear the focused item |
|
|
15
15
|
| `pm ops stats` | `pm stats` | Inspect tracker statistics |
|