@unbrained/pm-cli 2026.9.28 → 2026.9.30
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/pm-developer/references/GRAPH_AND_RELATIONSHIPS.md +7 -6
- package/.agents/skills/pm-user/references/BACKLOG_SHAPING.md +1 -1
- package/.agents/skills/pm-user/references/ECOSYSTEM_PLANNING.md +26 -3
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +26 -0
- package/dist/cli/error-guidance.js +1 -1
- package/dist/cli/help-json-payload.js +2 -2
- package/dist/cli/main.js +2 -2
- package/dist/cli/runtime/invocation-options.d.ts +3 -1
- package/dist/cli/runtime/invocation-options.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +152 -152
- package/dist/cli-bundle/chunks/{chunk-UT7GRGHY.js → chunk-6XTJLOKW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VMJLM7P2.js → chunk-6YEET7XI.js} +22 -22
- package/dist/cli-bundle/chunks/{chunk-NEUIVBFO.js → chunk-A6NDNRCK.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-GLH2LNRH.js → chunk-BNAT4EYR.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-CPOWTIIS.js → chunk-BTCE36JS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-35DME35A.js → chunk-BX4LEJX4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-A2G5OG6W.js → chunk-EGAIIWI3.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-FYTXVVZG.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-ZFHJP7YD.js → chunk-O23CQ5T4.js} +31 -29
- package/dist/cli-bundle/chunks/{chunk-NBDB3SRC.js → chunk-UIAH7UFK.js} +67 -67
- package/dist/cli-bundle/chunks/{chunk-OYCCWPBM.js → chunk-USTAFHIM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-PR4UAMI5.js → chunk-XRN3JYNN.js} +85 -85
- package/dist/cli-bundle/chunks/{chunk-PLNNUAFZ.js → chunk-YM342ELM.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-N6RP6PSP.js → register-list-query-SYNBVMNG.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-CY7JGQE6.js → register-mutation-4GSUK23D.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-53HAD3QP.js → register-operations-7FCJUC4Z.js} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-NVX6374E.js → register-setup-YTWW2KL5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-BRLXKRI2.js → chunk-3CAZ7Z4R.js} +4 -4
- package/dist/cli-bundle/focused-chunks/{chunk-K7GSZ7YZ.js → chunk-4AORVUT4.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-AZA4AEOR.js → chunk-AKB3JN57.js} +33 -33
- package/dist/cli-bundle/focused-chunks/{chunk-OVVCXTIE.js → chunk-EFD4ATS7.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-IJXZQE3D.js → chunk-EVMH4SKN.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-IWLMQLBO.js → chunk-IDB6E3ZV.js} +28 -28
- package/dist/cli-bundle/focused-chunks/{chunk-YZB7IPR6.js → chunk-IQBFYQF2.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-BGWF6CMP.js → chunk-KZULQIAG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ZMQTIS3L.js → chunk-MOUCTR72.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-6IVQPNYN.js → chunk-OMBDUJWZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-DTLRXY77.js → chunk-RIJQQOEZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-A5O3VYWV.js → chunk-T4PZJQG4.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-V7OPZRL6.js → chunk-UPOMLSW7.js} +14 -14
- package/dist/cli-bundle/focused-chunks/{chunk-5KJXX2TZ.js → chunk-XB5Q2P7Z.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ONDNR3VU.js → chunk-XUCXRZZZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-Y5Z3XNGY.js → chunk-ZJ3CLTV4.js} +2 -2
- package/dist/cli-bundle/main.js +22 -22
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +1 -1
- package/dist/cli-bundle/sdk-core.js +22 -21
- 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 +38 -38
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +2 -2
- package/dist/core/extensions/extension-types.d.ts +13 -0
- package/dist/core/extensions/extension-types.js +1 -1
- package/dist/core/history/replay.js +1 -1
- package/dist/core/history/workspace-history.d.ts +17 -0
- package/dist/core/history/workspace-history.js +1 -1
- package/dist/core/output/mutation-projection.js +1 -1
- package/dist/core/telemetry/runtime.js +2 -2
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/extension-command-context.d.ts +1 -7
- package/dist/sdk/extension-command-context.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/index.d.ts +1 -0
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/lifecycle/plan-mutation-receipt.d.ts +53 -0
- package/dist/sdk/lifecycle/plan-mutation-receipt.js +2 -0
- package/dist/sdk/lifecycle/plan.d.ts +3 -0
- package/dist/sdk/lifecycle/plan.js +1 -1
- package/dist/sdk/lifecycle/update.d.ts +2 -0
- package/dist/sdk/lifecycle/update.js +1 -1
- package/dist/sdk/linked-artifacts.js +1 -1
- package/dist/sdk/merge/install.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/runtime/actions.js +1 -1
- package/dist/sdk/runtime-input.d.ts +2 -0
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime.js +1 -1
- package/dist/sdk/similarity-scoring.js +1 -1
- package/dist/sdk/structured-mutations.js +1 -1
- package/dist/sdk/telemetry.d.ts +2 -0
- package/dist/sdk/telemetry.js +3 -1
- package/dist/sdk/testing.js +1 -1
- package/docs/CLI_GRAMMAR.md +18 -1
- package/docs/ECOSYSTEM_PLANNING_REVIEW.md +270 -0
- package/docs/MERGE_SAFETY.md +11 -6
- package/docs/README.md +2 -0
- package/docs/RELEASE_RELIABILITY.md +26 -4
- package/docs/SDK_AUDITED_MUTATIONS.md +52 -0
- package/docs/SDK_EVIDENCE_TRACEABILITY.md +34 -0
- package/docs/agent-task-token-baseline.json +28 -2
- package/docs/agent-task-transcripts.json +137 -14
- package/docs/ecosystem-review-2026-09-28.json +3159 -0
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -3
- package/marketplace.json +2 -2
- 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/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/package.json +2 -2
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +2 -2
- package/plugins/pm-codex/plugin.json +1 -1
- package/dist/cli-bundle/chunks/chunk-YERBAGQD.js +0 -2
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Audited SDK Settings and Item Updates
|
|
2
|
+
|
|
3
|
+
The extension settings contract is tracked by
|
|
4
|
+
[pm-wtqltn](../.agents/pm/issues/pm-wtqltn.toon). Full-item JSON annotation
|
|
5
|
+
integrity is tracked by [pm-2589e6](../.agents/pm/issues/pm-2589e6.toon).
|
|
6
|
+
|
|
7
|
+
## Extension settings
|
|
8
|
+
|
|
9
|
+
An extension command receives a host-bound `sdk` in its `run` context. Use
|
|
10
|
+
`sdk.mutateWorkspaceSettings` to change the current project's `settings.json`.
|
|
11
|
+
The host chooses the tracker path and author, validates the complete result,
|
|
12
|
+
serializes concurrent changes under the workspace lock, and records the change
|
|
13
|
+
in workspace history. A copied extension needs no local SDK installation.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
api.registerCommand({
|
|
17
|
+
name: "example hints",
|
|
18
|
+
flags: [{ long: "--operation-id", value_name: "id", value_type: "string" }],
|
|
19
|
+
run: ({ sdk, options }) =>
|
|
20
|
+
sdk.mutateWorkspaceSettings({
|
|
21
|
+
operationId: options.operationId,
|
|
22
|
+
mutate: (current) => ({
|
|
23
|
+
...current,
|
|
24
|
+
ux: { ...current.ux, deprecation_hints: true },
|
|
25
|
+
}),
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Supply a stable `operationId` for a logical operation within its registered
|
|
31
|
+
command. The host scopes the ID to that command, so another command can use
|
|
32
|
+
the same ID independently. Retrying an already recorded operation returns
|
|
33
|
+
`replayed: true` without invoking `mutate`, writing settings, or appending
|
|
34
|
+
another history event. `dryRun: true` calculates `changed` without changing settings or history;
|
|
35
|
+
the same operation ID can then be used for the real mutation. A normal return
|
|
36
|
+
also reports `changed` and `dry_run`. Invalid results fail before writing, and
|
|
37
|
+
a history-append failure restores the previous settings bytes. The callback
|
|
38
|
+
must derive its complete next settings object from the locked `current` value.
|
|
39
|
+
The host applies the standard settings serializer, including legacy format
|
|
40
|
+
coercion and collection-name sanitization, and runs active `onWrite` hooks
|
|
41
|
+
after a changed write.
|
|
42
|
+
|
|
43
|
+
## Full-item JSON updates
|
|
44
|
+
|
|
45
|
+
`pm update <id> --stdin-json` accepts a full item read document. New comments,
|
|
46
|
+
notes, and learnings in that document are appended through the normal item
|
|
47
|
+
mutation. Persisted entries are an audit trail: changing or removing one in
|
|
48
|
+
the submitted document now fails with
|
|
49
|
+
`stdin_json_persisted_annotation_changed` before any item fields are written.
|
|
50
|
+
This check also applies when the only submitted change is an annotation. Use
|
|
51
|
+
`pm comments`, `pm notes`, or `pm learnings` with `--edit` to correct an
|
|
52
|
+
existing entry; those commands write a history event for the correction.
|
|
@@ -103,12 +103,46 @@ Replacement requires at least one corresponding `--file` or `--doc` value and ca
|
|
|
103
103
|
|
|
104
104
|
Repeating an already-present `pm files --add` or `pm docs --add` batch is a true no-op: `changed` is false, the item file is not rewritten, and append-only history receives no synthetic mutation entry.
|
|
105
105
|
|
|
106
|
+
An explicit non-empty replacement note updates the existing path/scope entry
|
|
107
|
+
atomically. A bare-path retry preserves its note; a different scope identifies
|
|
108
|
+
a separate link. The same rule applies to glob additions and standalone
|
|
109
|
+
`--note`. Migration collisions first retain the established last matching
|
|
110
|
+
entry; an explicit note revision then applies to that surviving identity.
|
|
111
|
+
This fixes [pm-zqxlfs](../.agents/pm/issues/pm-zqxlfs.toon):
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
pm files <id> --add path=src/new.ts,note="verified current implementation"
|
|
115
|
+
pm docs <id> --add docs/new.md --note "verified current contract"
|
|
116
|
+
```
|
|
117
|
+
|
|
106
118
|
Audited history redaction participates in the same projection transaction as
|
|
107
119
|
ordinary item mutation. After rewriting an item and its history stream, pm
|
|
108
120
|
invalidates drift verification state and incrementally refreshes the metadata
|
|
109
121
|
index before releasing the derived-index lock. A warmed index therefore cannot
|
|
110
122
|
pair pre-redaction item content with post-redaction history during validation.
|
|
111
123
|
|
|
124
|
+
## Compact Plan mutation receipts
|
|
125
|
+
|
|
126
|
+
Tracked by [pm-hqy7lr](../.agents/pm/issues/pm-hqy7lr.toon).
|
|
127
|
+
CLI and MCP Plan mutations return identity, action, step identity when available,
|
|
128
|
+
complete step counts, materialization/skip/warning counts, and an inspection
|
|
129
|
+
command. They omit bodies, resume context, and unrelated steps, so a single-step
|
|
130
|
+
update does not grow with the Plan. `pm plan show <id> --depth deep` retrieves
|
|
131
|
+
the complete current Plan without repeating a mutation. The omission receipt
|
|
132
|
+
explicitly distinguishes this acknowledgement from a full read.
|
|
133
|
+
Local CLI/SDK recovery commands include the resolved `--pm-path`, safely quoted,
|
|
134
|
+
so they inspect the same tracker even with a non-default root. MCP receipts
|
|
135
|
+
omit the server-resolved filesystem root in both compact and full output.
|
|
136
|
+
For MCP recovery, call `pm_plan` with `subcommand: "show"`, `depth: "deep"`,
|
|
137
|
+
the receipt ID, and the original request's workspace selection (`path` or `cwd`).
|
|
138
|
+
|
|
139
|
+
SDK `runPlan` retains its full typed result and adds `mutation_receipt` for
|
|
140
|
+
consumers that need a compact acknowledgement. Existing full transport output
|
|
141
|
+
is available with CLI `--full-changed-fields` or MCP `fullChangedFields: true`.
|
|
142
|
+
The named `PlanMutationReceipt` type is exported from `@unbrained/pm-cli/sdk`.
|
|
143
|
+
CLI `--no-changed-fields` also selects a compact Plan receipt.
|
|
144
|
+
Read-only `plan show` retains its existing projection behavior.
|
|
145
|
+
|
|
112
146
|
## Operational receipts
|
|
113
147
|
|
|
114
148
|
Linked tests recognize compound acquisition failures such as “could not acquire … lock” together with contention context such as “already running” or “held by another” as `infra_collision`. Generic assertion text mentioning a lock or timeout remains `assertion_failure`, preventing false infrastructure classifications. A command refused by clone-local provenance policy is classified separately as `trust_refusal`, so reports do not misstate a pre-execution safety decision as an assertion failure.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 4,
|
|
3
3
|
"transcript_version": 2,
|
|
4
|
-
"transcript_digest": "sha256:
|
|
4
|
+
"transcript_digest": "sha256:6d4041acfaa4075dde1972d6127a74f18916f7661738b4f5d5fd47a61c179a78",
|
|
5
5
|
"estimator": "ceil(utf8_bytes / 4)",
|
|
6
6
|
"measurement_scope": "output_before_token_accounting",
|
|
7
7
|
"published_with_release": true,
|
|
@@ -259,7 +259,33 @@
|
|
|
259
259
|
"accounting_mode": "self_reported"
|
|
260
260
|
}
|
|
261
261
|
]
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"id": "plan-execution-mutations",
|
|
265
|
+
"max_estimated_tokens": 848,
|
|
266
|
+
"steps": [
|
|
267
|
+
{
|
|
268
|
+
"id": "create-plan",
|
|
269
|
+
"max_estimated_tokens": 21,
|
|
270
|
+
"accounting_mode": "self_reported"
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"id": "add-step",
|
|
274
|
+
"max_estimated_tokens": 275,
|
|
275
|
+
"accounting_mode": "self_reported"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"id": "complete-step",
|
|
279
|
+
"max_estimated_tokens": 274,
|
|
280
|
+
"accounting_mode": "self_reported"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"id": "inspect-plan",
|
|
284
|
+
"max_estimated_tokens": 278,
|
|
285
|
+
"accounting_mode": "self_reported"
|
|
286
|
+
}
|
|
287
|
+
]
|
|
262
288
|
}
|
|
263
289
|
],
|
|
264
|
-
"composite_max_estimated_tokens":
|
|
290
|
+
"composite_max_estimated_tokens": 13882
|
|
265
291
|
}
|
|
@@ -17,13 +17,22 @@
|
|
|
17
17
|
],
|
|
18
18
|
"capability_evidence": {
|
|
19
19
|
"workspace_state": [
|
|
20
|
-
{
|
|
20
|
+
{
|
|
21
|
+
"step_id": "context",
|
|
22
|
+
"field_path": "summary.active_items"
|
|
23
|
+
}
|
|
21
24
|
],
|
|
22
25
|
"active_ownership": [
|
|
23
|
-
{
|
|
26
|
+
{
|
|
27
|
+
"step_id": "context",
|
|
28
|
+
"field_path": "activity"
|
|
29
|
+
}
|
|
24
30
|
],
|
|
25
31
|
"actionable_work": [
|
|
26
|
-
{
|
|
32
|
+
{
|
|
33
|
+
"step_id": "context",
|
|
34
|
+
"field_path": "hierarchy"
|
|
35
|
+
}
|
|
27
36
|
]
|
|
28
37
|
}
|
|
29
38
|
},
|
|
@@ -36,13 +45,22 @@
|
|
|
36
45
|
],
|
|
37
46
|
"capability_evidence": {
|
|
38
47
|
"workspace_state": [
|
|
39
|
-
{
|
|
48
|
+
{
|
|
49
|
+
"step_id": "next",
|
|
50
|
+
"field_path": "summary.in_progress"
|
|
51
|
+
}
|
|
40
52
|
],
|
|
41
53
|
"active_ownership": [
|
|
42
|
-
{
|
|
54
|
+
{
|
|
55
|
+
"step_id": "next",
|
|
56
|
+
"field_path": "held_by_others"
|
|
57
|
+
}
|
|
43
58
|
],
|
|
44
59
|
"actionable_work": [
|
|
45
|
-
{
|
|
60
|
+
{
|
|
61
|
+
"step_id": "next",
|
|
62
|
+
"field_path": "recommended.id"
|
|
63
|
+
}
|
|
46
64
|
]
|
|
47
65
|
}
|
|
48
66
|
},
|
|
@@ -55,12 +73,23 @@
|
|
|
55
73
|
],
|
|
56
74
|
"capability_evidence": {
|
|
57
75
|
"workspace_state": [
|
|
58
|
-
{
|
|
76
|
+
{
|
|
77
|
+
"step_id": "context",
|
|
78
|
+
"field_path": "summary.active_items"
|
|
79
|
+
}
|
|
59
80
|
],
|
|
60
81
|
"active_ownership": [
|
|
61
|
-
{
|
|
82
|
+
{
|
|
83
|
+
"step_id": "in-progress",
|
|
84
|
+
"field_path": "items"
|
|
85
|
+
}
|
|
62
86
|
],
|
|
63
|
-
"actionable_work": [
|
|
87
|
+
"actionable_work": [
|
|
88
|
+
{
|
|
89
|
+
"step_id": "open",
|
|
90
|
+
"field_path": "items"
|
|
91
|
+
}
|
|
92
|
+
]
|
|
64
93
|
}
|
|
65
94
|
}
|
|
66
95
|
]
|
|
@@ -186,7 +215,9 @@
|
|
|
186
215
|
"expected_accounting_mode": "self_reported",
|
|
187
216
|
"required_fields": ["code", "refusal", "recovery"],
|
|
188
217
|
"expected_error_code": "unknown_context_intent",
|
|
189
|
-
"expected_field_values": {
|
|
218
|
+
"expected_field_values": {
|
|
219
|
+
"recovery.recovery_mode": "compact"
|
|
220
|
+
},
|
|
190
221
|
"expected_refusal_surface": "--for"
|
|
191
222
|
},
|
|
192
223
|
{
|
|
@@ -266,7 +297,9 @@
|
|
|
266
297
|
"expected_output_kind": "entity",
|
|
267
298
|
"expected_accounting_mode": "self_reported",
|
|
268
299
|
"required_fields": ["item.id", "item.status"],
|
|
269
|
-
"expected_field_values": {
|
|
300
|
+
"expected_field_values": {
|
|
301
|
+
"item.status": "open"
|
|
302
|
+
}
|
|
270
303
|
},
|
|
271
304
|
{
|
|
272
305
|
"id": "close",
|
|
@@ -283,7 +316,9 @@
|
|
|
283
316
|
"expected_output_kind": "entity",
|
|
284
317
|
"expected_accounting_mode": "self_reported",
|
|
285
318
|
"required_fields": ["item.id", "item.status"],
|
|
286
|
-
"expected_field_values": {
|
|
319
|
+
"expected_field_values": {
|
|
320
|
+
"item.status": "closed"
|
|
321
|
+
}
|
|
287
322
|
}
|
|
288
323
|
]
|
|
289
324
|
},
|
|
@@ -329,7 +364,9 @@
|
|
|
329
364
|
"expected_output_kind": "collection",
|
|
330
365
|
"expected_accounting_mode": "self_reported",
|
|
331
366
|
"required_fields": ["rows", "outcome", "exit_code"],
|
|
332
|
-
"expected_field_values": {
|
|
367
|
+
"expected_field_values": {
|
|
368
|
+
"outcome": "partial_effect"
|
|
369
|
+
}
|
|
333
370
|
},
|
|
334
371
|
{
|
|
335
372
|
"id": "no-effect",
|
|
@@ -347,7 +384,93 @@
|
|
|
347
384
|
"expected_output_kind": "collection",
|
|
348
385
|
"expected_accounting_mode": "self_reported",
|
|
349
386
|
"required_fields": ["rows", "outcome", "exit_code"],
|
|
350
|
-
"expected_field_values": {
|
|
387
|
+
"expected_field_values": {
|
|
388
|
+
"outcome": "no_effect"
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
]
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"id": "plan-execution-mutations",
|
|
395
|
+
"description": "Create a Plan, add and complete a step, then inspect its durable evidence without echoing the full Plan on each mutation.",
|
|
396
|
+
"steps": [
|
|
397
|
+
{
|
|
398
|
+
"id": "create-plan",
|
|
399
|
+
"args": [
|
|
400
|
+
"create",
|
|
401
|
+
"--id",
|
|
402
|
+
"pm-transcript-plan",
|
|
403
|
+
"--type",
|
|
404
|
+
"Plan",
|
|
405
|
+
"--title",
|
|
406
|
+
"Transcript execution Plan",
|
|
407
|
+
"--create-mode",
|
|
408
|
+
"progressive"
|
|
409
|
+
],
|
|
410
|
+
"expected_exit_code": 0,
|
|
411
|
+
"expected_output_kind": "mutation_receipt",
|
|
412
|
+
"expected_accounting_mode": "self_reported",
|
|
413
|
+
"required_fields": ["id", "status"]
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"id": "add-step",
|
|
417
|
+
"args": [
|
|
418
|
+
"plan",
|
|
419
|
+
"add-step",
|
|
420
|
+
"pm-transcript-plan",
|
|
421
|
+
"--step-title",
|
|
422
|
+
"Verify result",
|
|
423
|
+
"--step-body",
|
|
424
|
+
"Durable execution context retained for later inspection."
|
|
425
|
+
],
|
|
426
|
+
"expected_exit_code": 0,
|
|
427
|
+
"expected_output_kind": "diagnostic",
|
|
428
|
+
"expected_accounting_mode": "self_reported",
|
|
429
|
+
"required_fields": [
|
|
430
|
+
"id",
|
|
431
|
+
"step.id",
|
|
432
|
+
"steps_summary.total",
|
|
433
|
+
"inspection_command"
|
|
434
|
+
],
|
|
435
|
+
"expected_field_values": {
|
|
436
|
+
"kind": "plan_mutation",
|
|
437
|
+
"steps_summary.total": 1
|
|
438
|
+
}
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"id": "complete-step",
|
|
442
|
+
"args": [
|
|
443
|
+
"plan",
|
|
444
|
+
"complete-step",
|
|
445
|
+
"pm-transcript-plan",
|
|
446
|
+
"plan-step-001",
|
|
447
|
+
"--step-evidence",
|
|
448
|
+
"Verified result"
|
|
449
|
+
],
|
|
450
|
+
"expected_exit_code": 0,
|
|
451
|
+
"expected_output_kind": "diagnostic",
|
|
452
|
+
"expected_accounting_mode": "self_reported",
|
|
453
|
+
"required_fields": [
|
|
454
|
+
"id",
|
|
455
|
+
"step.status",
|
|
456
|
+
"steps_summary.completed",
|
|
457
|
+
"omission_receipt"
|
|
458
|
+
],
|
|
459
|
+
"expected_field_values": {
|
|
460
|
+
"step.status": "completed",
|
|
461
|
+
"steps_summary.completed": 1
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
"id": "inspect-plan",
|
|
466
|
+
"args": ["plan", "show", "pm-transcript-plan", "--depth", "deep"],
|
|
467
|
+
"expected_exit_code": 0,
|
|
468
|
+
"expected_output_kind": "diagnostic",
|
|
469
|
+
"expected_accounting_mode": "self_reported",
|
|
470
|
+
"required_fields": ["plan.steps", "plan.steps_summary.completed"],
|
|
471
|
+
"expected_field_values": {
|
|
472
|
+
"plan.steps_summary.completed": 1
|
|
473
|
+
}
|
|
351
474
|
}
|
|
352
475
|
]
|
|
353
476
|
}
|