@research-engineering/agentic-proofkit 0.10.1 → 0.11.0

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/ADOPTION.md CHANGED
@@ -217,23 +217,46 @@ Resolve the approved installed launcher for each session. An absent or
217
217
  ambiguous binding needs an owner decision, not an install, network fallback,
218
218
  package-manager default, or persisted machine-local executable path.
219
219
 
220
- For one manual export, first inspect the explicit repository root and every
221
- component of the selected path. Stop on symlinks, aliases, unknown ownership,
222
- local edits, or an existing target; do not overwrite it. The example below
223
- assumes the owner has approved the npm launcher, inspected and prepared the
224
- ordinary parent directories, and ensured no concurrent writer can replace
225
- them. Replace the example absolute root with that inspected root. The shell,
226
- not Proofkit, creates the file; noclobber protects an existing final file but
227
- does not establish race-free parent traversal or transactional installation.
220
+ For managed installation, select the tool and root explicitly, inspect the
221
+ plan, then apply its exact transaction and desired-state identities. The
222
+ following example assumes a repository-approved, already installed npm
223
+ launcher; other approved carriers expose the same logical routes. Replace the
224
+ root and identity placeholders with the reviewed plan's values.
228
225
 
229
226
  ```bash
230
- (set -o noclobber; npm exec --offline -- agentic-proofkit integration source --tool codex --format text > /absolute/inspected/repository/.agents/skills/agentic-proofkit/SKILL.md)
227
+ npm exec --offline -- agentic-proofkit integration plan --tool codex --operation install --repo-root /absolute/inspected/repository --format text
228
+ npm exec --offline -- agentic-proofkit integration apply --tool codex --operation install --repo-root /absolute/inspected/repository --expect-transaction <reviewed-transaction-sha256-ref> --expect-desired-state <reviewed-desired-state-sha256-ref>
231
229
  npm exec --offline -- agentic-proofkit integration check --tool codex --repo-root /absolute/inspected/repository
232
230
  ```
233
231
 
234
- Check a failed export before treating its output as usable: shell redirection
235
- may leave an empty or partial new file if generation or transport fails.
236
- Resolve such a file manually under repository ownership; check never repairs it.
232
+ `REQ-PROOFKIT-WORKFLOW-019` owns managed file lifecycle. Use `--operation
233
+ update` or `--operation remove` with a fresh reviewed plan for those operations.
234
+ The fixed bootstrap and `proofkit/integrations/<tool>.v1.json` baseline share
235
+ one native transaction. Local byte or mode edits are conflicts, not overwrite
236
+ permission. An exact current manually exported bootstrap can be enrolled by
237
+ install; an unknown or stale unbaselined file requires an owner decision.
238
+ The baseline records exact cooperative before-state, not authenticated origin.
239
+ Removal deletes selected managed files only, leaving their directories and
240
+ adjacent instructions. It does not archive or replace instructions with an
241
+ empty file. Baseline-only removal can clean a valid orphan baseline.
242
+
243
+ After interruption, use `integration recover --repo-root <root> --transaction
244
+ <pending-sha256-ref> --action <resume|rollback>`. It uses the existing native
245
+ journal, not the current bootstrap source. A completed recovery is historical
246
+ evidence; inspect current files separately. Desired-absence journals and new
247
+ identity-bound terminal receipts use schema v2 and require this or a later
248
+ supporting binary. Finishing recovery alone does not establish downgrade
249
+ compatibility; no automatic downgrade or control-state deletion is supported.
250
+ Present-only v1 journals and historical v1 receipts remain readable. A legacy
251
+ receipt does not bind its missing desired identity: replan before applying.
252
+ Repeated apply checks that the retained applied transaction binds the exact
253
+ current desired state under one native lock; pending work blocks replay.
254
+
255
+ Plan and apply default to JSON. Ready plans and passed receipts exit 0;
256
+ classified conflicts, recovery, cleanup or durability outcomes exit 1 with a
257
+ report and empty stderr. Invocation and operational failures use stderr.
258
+ `--format text --color auto` colors labels only on a capable TTY without
259
+ `NO_COLOR`; the default is uncolored. Check never repairs files.
237
260
  The checker admits flags before I/O and reads only the selected fixed path
238
261
  through an application-write-free confined lease with bounded reobservation.
239
262
  Exit 0 and `current` mean exact generated-byte equality; exit 2 reports
@@ -249,8 +272,7 @@ identity when consumed projections remain unchanged. Shared native source
249
272
  digests may conservatively invalidate freshness. This is materialization
250
273
  freshness, not proof of every transitive runtime behavior.
251
274
 
252
- Phase5B managed install/update/remove remains open. Manual export is not an
253
- installer, rollback protocol, or proof of host activation. Installed npm/Python
275
+ Managed file lifecycle is not proof of host activation. Installed npm/Python
254
276
  integration proof requires actual carrier execution; source-only tests do not
255
277
  discharge it. Native-host file discovery, body loading, and approved-launcher calls
256
278
  are separate observations requiring isolated sessions and absent/altered-file
@@ -41,7 +41,7 @@ owner boundaries. It is not a second command-family inventory.
41
41
 
42
42
  | Family | Main commands | Caller provides | Proofkit owns | Consumer owns | Output authority |
43
43
  |---|---|---|---|---|---|
44
- | Agent integration generation/check | `integration source`, `integration check` | explicit `claude` or `codex` tool; explicit repository root for check only | one portable bounded bootstrap, exact consumed registered-contract identity, descriptor-owned path, and confined read-only generated-byte freshness | launcher admission, manual materialization, instruction ownership, host discovery/activation, permissions, native verification, and any future managed lifecycle | generated source or missing/current/stale/invalid freshness report; neither is installation or execution authority |
44
+ | Agent integrations | `integration source`, `integration check`, `integration plan`, `integration apply`, `integration recover` | explicit tool for source/check/plan/apply; root for filesystem operations; operation and both reviewed identities for apply; transaction/action for recovery | one bounded renderer, read-only freshness, canonical cooperative baseline, and managed file lifecycle through the native transaction owner | launcher admission, instruction ownership, host discovery/activation, permissions and native verification | generated source, freshness classification, reviewed transaction plan or historical transaction receipt; none proves host activation |
45
45
  | Project state navigation | `status`, `next` | explicit repository root | bounded transaction-first materialized-project inspection, normalized observation identity, deterministic project-state classification, and one non-executable next action; admitted in-bound records bind exact content digests, while unread out-of-bound records intentionally identify only their invalid class | repository policy, byte identity for unread out-of-bound records, witness execution, receipt trust/currentness/scope, merge, release, deployment, rollout, and production readiness | project-status report, next-action packet, or bounded text projection |
46
46
  | Agent workflow planning | `change plan`, `native-evidence-guidance` | explicit checkpoint, completed stage ids, bounded context refs, governing authority ref, and required context ref ids | optional built-in `proofkit.reviewed-change.v1` checkpoint relation, reference-closed next-stage context, deterministic agent prompts, bounded text/JSON/envelope projections, and repository-neutral native-evidence guidance with closed applicability classes | custom workflow topology, repository state discovery, stage execution, native witness semantics, evidence collection, review conclusions, merge, release, deployment, and rollout authority | next-action plan, terminal workflow report, bounded agent envelope, or guidance catalog |
47
47
  | Adoption and scaffolding | `adopt plan`, `adopt materialize plan`, `adopt materialize apply`, `adopt materialize recover`, `repository-inventory`, `adoption-contract-envelope`, `adoption-workflow-plan`, `adoption-checklist`, `adoption-doctor`, `gradual-adoption`, `gradual-adoption-bootstrap`, `gradual-adoption-guidance`, `capability-map-admission`, `pilot-admission`, `scaffold-profile-plan`, `scaffold-project-structure`, `stack-preset` | explicit repository root, explicit fresh/code-baseline/audit-from-code intent, optional stack hint, owner-reviewed candidate packet, expected transaction and desired-state identities, recovery action, aggregate adoption contract envelope, checklist facts, target paths, owner routes, caller-extracted stale authority vocabulary facts, explicit pre-spec capability observations, and pilot records | bounded fixed-catalog root inventory, candidate-only front-door tasks, owner-closed read-only materialization plans, confined transactional apply and recovery receipts, aggregate contract-envelope admission, deterministic starter plans, checklist/report admission, bounded guidance envelopes, dry-run manifests, pre-spec trust-mode admission, adoption gap and stale-authority classification, and pilot shape admission | stack selection, arbitrary source inspection, candidate review, final requirement meaning, proof adequacy, rollout policy, text extraction, code observation extraction, and pilot truth | inventory, candidate-only plan, transaction-bound materialization plan or receipt, selected child output, report, seed packet, or agent envelope |
@@ -132,7 +132,9 @@ Semantic context routes are `requirement-context-compose`,
132
132
 
133
133
  | State or goal | Next Proofkit route | Stop or escalation condition |
134
134
  |---|---|---|
135
- | A repository owner requests a portable Proofkit bootstrap or its exact-byte freshness. | `integration source --tool <tool>` generates JSON or exact file bytes with `--format text`; `integration check --tool <tool> --repo-root <caller-selected-root>` checks only the selected fixed path. Select `claude` or `codex` explicitly. | Source writes nothing; neither route accepts `--output` or install. Source exits 0/1 for success/error; check exits 0 for current, 2 for missing/stale/invalid, and 1 for invocation or operation error. Current proves only generated-byte equality. Use `ADOPTION.md` for inspected manual export; Phase5B installation/update/removal and host activation remain open. |
135
+ | A repository owner requests a portable Proofkit bootstrap or its exact-byte freshness. | `integration source --tool <tool>` generates JSON or exact file bytes with `--format text`; `integration check --tool <tool> --repo-root <caller-selected-root>` checks only the selected fixed path. Select `claude` or `codex` explicitly. | Source writes nothing; neither route accepts `--output` or install. Source exits 0/1 for success/error; check exits 0 for current, 2 for missing/stale/invalid, and 1 for invocation or operation error. Current proves only generated-byte equality. Managed lifecycle is a separate explicit route; host activation remains an independent observation. |
136
+ | A repository owner approves managed bootstrap installation, update or removal. | `integration plan --tool <tool> --operation <operation> --repo-root <root>`; inspect both identities, then `integration apply` with the same tool/operation/root and `--expect-transaction` plus `--expect-desired-state`. | The native transaction changes only the selected bootstrap and cooperative baseline; unknown content, local edits, stale identities and invalid baselines block mutation. Ready/passed exits 0; classified conflicts or recovery states exit 1 with a report. Text/color are opt-in. |
137
+ | A managed file transaction was interrupted. | `integration recover --repo-root <root> --transaction <pending-id> --action <action>`; select resume or rollback explicitly. | Recovery does not generate the current source or infer a tool. Its result is historical; inspect current files separately. Finish v2 desired-absence recovery before downgrading. |
136
138
  | The repository may already contain a materialized Proofkit project. | `status --repo-root <caller-selected-root>` for the full bounded classification or `next --repo-root <caller-selected-root>` for its single action projection. | Treat `verification_required` as a request to run repository-owned verification, never as completion or approval. Stop on blocked or recovery-required states; the packet does not execute its route or own policy. |
137
139
  | The agent does not know where to start. | `adopt plan --mode <mode> --repo-root <caller-selected-root>`, where mode is `fresh`, `code-baseline`, or `audit-from-code` | Choose the trust intent explicitly. Treat the fixed-catalog inventory and tasks as a read-only candidate plan; stop before arbitrary source inspection, writing files, or making requirements authoritative. |
138
140
  | An agent needs a bounded, deterministic stage transition for an engineering change. | `change plan` selects the optional built-in `proofkit.reviewed-change.v1` profile; use `--agent-envelope` for the compact work packet and `native-evidence-guidance` when the consuming repository has not yet materialized repository-specific evidence instructions. | Supply only explicit current checkpoint, completed stages, and admitted context references. Apply conditional guidance slots only when their applicability class matches a declared consumer mechanism. Stop before treating the profile, plan, or guidance as repository policy or as proof that a stage ran, evidence exists, review passed, or merge/release is authorized. |
@@ -28,7 +28,7 @@ The public capability is deliberately small:
28
28
  bootstrap without reading repositories or writing files;
29
29
  `integration check --tool <claude|codex> --repo-root <path>` compares only
30
30
  the selected descriptor-owned file through confined read-only inspection.
31
- These are generation/check targets, not managed integration support.
31
+ Generation/check remain read-only; separate lifecycle routes manage files.
32
32
 
33
33
  The change planner and evidence-guidance cores are stateless pure projections.
34
34
  Project status reads only an explicit repository root, the conventional routing
@@ -132,9 +132,15 @@ identity and a bounded freshness classification, never observed content, its
132
132
  digest, or caller root paths. Exit 0 means current, exit 2 means a classified
133
133
  missing/stale/invalid file, and exit 1 means an invocation or operation error.
134
134
  Source returns 0 on success and 1 on error. Neither accepts `--output` or an
135
- install option. Manual export guidance is owned by `ADOPTION.md`.
135
+ install option. Managed lifecycle guidance is owned by `ADOPTION.md`.
136
136
 
137
- Phase5B managed installation, update, and safe removal remains explicitly open.
137
+ `REQ-PROOFKIT-WORKFLOW-019` owns `integration plan`, `integration apply`, and
138
+ `integration recover`. A reviewed install/update/remove changes only the
139
+ selected bootstrap and its canonical cooperative baseline through the existing
140
+ repository transaction owner. Both expected identities are required for apply;
141
+ local edits or malformed baselines block mutation. Recovery uses historical
142
+ journal state without assuming the current tool renderer. Desired absence
143
+ selects journal v2, while present-only v1 identities and recovery remain stable.
138
144
  Host discovery, body loading, and approved-launcher invocation require separate
139
145
  isolated native-host observations; direct CLI execution cannot prove skill use.
140
146
 
@@ -240,7 +240,7 @@
240
240
  {
241
241
  "requirementId": "REQ-PROOFKIT-WORKFLOW-018",
242
242
  "ownerId": "proofkit.agent-workflow",
243
- "invariant": "Exactly two no-input commands expose Phase5A: integration-source through integration source with built_in_package_catalog scope, and integration-check through integration check with explicit_filesystem_scan scope. Both require exactly one --tool from claude/codex, admit at most one --format from json/text with JSON default, reject input transport, surplus operands, color, carrier, output-file, and install options; check additionally requires exactly one --repo-root, which source rejects. Source JSON has exactly schemaVersion, kind, tool, targetPath, integrationId, content, contentDigest, capabilityDigest, metadataBytes, bodyBytes, and nonClaims; check JSON has exactly schemaVersion, kind, tool, targetPath, integrationId, expectedContentDigest, state, and nonClaims. Both schema versions are 1; kinds are proofkit.integration-source.v1 and proofkit.integration-check.v1. Source text is the exact generated content. Source exits 0 on success and 1 on error; check exits 0 only for current, 2 for missing/stale/invalid classified reports with empty stderr, and 1 for operation or invocation error. Cancellation observed before emission and serialization/cleanup failures produce no success report. Descriptor, dispatch, help, the agent-integrations source/check-only family, root-shape definitions and their hashes, CLI contracts, contract-map routes, exact native witnesses, generated metadata, and installed npm/Python carriers must close over the same bounded invocation/output relation without a second semantic owner; native source bindings include internal/command/agentintegration. Source-carrier independence and installed-carrier execution are separate obligations. Phase5B managed install/update/remove remains open and is not discharged by generation, check, manual export, or this contract closure.",
243
+ "invariant": "Exactly two no-input commands expose Phase5A: integration-source through integration source with built_in_package_catalog scope, and integration-check through integration check with explicit_filesystem_scan scope. Both require exactly one --tool from claude/codex, admit at most one --format from json/text with JSON default, reject input transport, surplus operands, color, carrier, output-file, and install options; check additionally requires exactly one --repo-root, which source rejects. Source JSON has exactly schemaVersion, kind, tool, targetPath, integrationId, content, contentDigest, capabilityDigest, metadataBytes, bodyBytes, and nonClaims; check JSON has exactly schemaVersion, kind, tool, targetPath, integrationId, expectedContentDigest, state, and nonClaims. Both schema versions are 1; kinds are proofkit.integration-source.v1 and proofkit.integration-check.v1. Source text is the exact generated content. Source exits 0 on success and 1 on error; check exits 0 only for current, 2 for missing/stale/invalid classified reports with empty stderr, and 1 for operation or invocation error. Cancellation observed before emission and serialization/cleanup failures produce no success report. Descriptor, dispatch, help, the agent-integrations family, root-shape definitions and their hashes, CLI contracts, contract-map routes, exact native witnesses, generated metadata, and installed npm/Python carriers must close over the same bounded invocation/output relation without a second semantic owner; native source bindings include internal/command/agentintegration. Source-carrier independence and installed-carrier execution are separate obligations. Managed install/update/remove is a separate lifecycle contract and is not discharged by generation, check, manual export, or this contract closure.",
244
244
  "claimLevel": "blocking",
245
245
  "riskClass": "high",
246
246
  "proofBindingRefs": ["proofkit/requirement-bindings.json"],
@@ -254,6 +254,23 @@
254
254
  "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
255
255
  "deferral": null,
256
256
  "updatePolicy": {"reviewOwnerId": "proofkit.agent-workflow", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
257
+ },
258
+ {
259
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
260
+ "ownerId": "proofkit.agent-workflow",
261
+ "invariant": "Explicit integration plan/apply/recover routes reuse the native repository transaction owner, not a second installer. Plan and apply require a selected claude/codex tool, repository root and install/update/remove operation; apply additionally binds both reviewed transaction and desired-state identities. Recognition uses only native captured before snapshots and bytes for the fixed bootstrap and proofkit/integrations/<tool>.v1.json; the baseline is bounded canonical compact JSON with one LF, exact tool/path/content digest/byte count/mode and no unknown fields. Bootstrap and baseline use mode 0644. Install creates an absent pair or enrolls exact current unbaselined bytes, but rejects unknown or stale unbaselined content and requires update for a matched older pair. Update requires a matched baseline; removal accepts a matched pair, a valid orphan baseline, or both absent. Invalid baselines, local edits, unsafe paths, stale reviewed identities and pending transactions never authorize overwrite. Both targets share one native transaction and deletion/recovery protocol; adjacent and global instructions are unchanged. Replay uses the native locked current-state replay operation. Recovery requires only root, transaction and resume/rollback action, without current source generation or tool assumptions. JSON is default; explicit text and capability-bound auto/never color preserve the same outcome. Flags, multiplicity, enumerated values and identity syntax are admitted before I/O. Ready plans and passed receipts exit 0; classified conflict, recovery, cleanup or durability reports exit 1 with empty stderr; invocation or operational errors exit 1 with non-disclosing stderr. Descriptor, help, family, machine contract, owner projections, whole-CLI tests and installed npm/Python carrier witnesses cover the same operation relation.",
262
+ "claimLevel": "blocking",
263
+ "riskClass": "critical",
264
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
265
+ "nonClaimRefs": ["NC-PROOFKIT-WORKFLOW-019"],
266
+ "nonClaims": [
267
+ "A completed file lifecycle does not prove host discovery, instruction loading, approved-launcher invocation, permission grants, native verification, or production readiness.",
268
+ "Recovery reports a historical transaction, not current installed/removed state or post-return stability; cancellation after the final effect cannot retract a committed operation.",
269
+ "The baseline is cooperative bookkeeping, not authenticated origin, owner approval, or protection from coordinated same-user edits or rollback."
270
+ ],
271
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
272
+ "deferral": null,
273
+ "updatePolicy": {"reviewOwnerId": "proofkit.agent-workflow", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
257
274
  }
258
275
  ],
259
276
  "nonClaims": [
@@ -676,7 +676,7 @@
676
676
  {
677
677
  "requirementId": "REQ-PROOFKIT-SPEC-033",
678
678
  "ownerId": "proofkit.spec-proof-core",
679
- "invariant": "The repository-transaction owner confines every effect to one explicit repository root; freezes a bounded canonical execution plan before effects; rejects non-canonical, reserved, symlinked, case-folding, Unicode-folding, and prefix-alias target identities; keeps staged payloads, backups, ownership records, and publish temporaries in one private transaction namespace; records each created directory by exact filesystem identity; and performs each target replacement by same-filesystem atomic rename. A bounded durable journal identifies the exact before-state prefix, applied-target count, and terminal result; apply fails closed on stale state, unknown control records, and cooperative concurrency; rollback removes only transaction-owned artifacts and restores exact bytes and modes; resume and rollback are state-compatible, action-stable, cancellation-aware, and replay-idempotent; terminal receipts preserve the complete observable result until a later valid transaction replaces them. Native construction binds Apply to the complete transaction identity; public JSON re-admission remains descriptive even for empty payloads, while recovery retains its separate confined journal and staged-object admission. These guarantees cover process interruption at every injected mutation boundary but do not claim filesystem-wide atomic visibility, power-loss durability beyond successful synchronization, protection from arbitrary readers, or safety against a non-cooperative same-user process mutating the private namespace.",
679
+ "invariant": "The repository-transaction owner confines every effect to one explicit repository root; freezes a bounded canonical execution plan before effects; rejects non-canonical, reserved, symlinked, case-folding, Unicode-folding, and prefix-alias target identities; keeps staged payloads, backups, ownership records, and publish temporaries in one private transaction namespace; records each created directory by exact filesystem identity; and performs each target replacement by same-filesystem atomic rename. Desired absence has no mode or payload, never creates parent directories, and selects snapshot/action journal schema v2 even for unchanged absence; present-only v1 plan/journal bytes and identities remain unchanged. Delete requires exact before-image comparison, same-filesystem rollback staging, unlink, parent synchronization and observed absence; rollback must never overwrite a replacement created after deletion. Staging retains only existing changed before/after snapshots. Current-state replay requires a native unchanged plan, exact desired state, absence of pending work and the retained applied receipt binding the same desired-state identity under one existing native lock; historical terminal inspection alone cannot prove current state. New terminal receipts use schema v2 and bind desiredStateId. Legacy v1 receipts remain readable and recoverable without invented identity; acknowledgement retries require a newly reviewed plan. Interrupted terminal archival preserves the validated historical result; the current recovery action changes only the invocation projection. Retained v2 receipts require a supporting binary even after recovery completes. A bounded durable journal identifies the exact before-state prefix, applied-target count, and terminal result; apply fails closed on stale state, unknown control records, and cooperative concurrency; rollback removes only transaction-owned artifacts and restores exact bytes and modes; resume and rollback are state-compatible, action-stable, cancellation-aware, and replay-idempotent; terminal receipts preserve the complete observable result until a later valid transaction replaces them. Native construction binds Apply to the complete transaction identity; public JSON re-admission remains descriptive even for empty payloads, while recovery retains its separate confined journal and staged-object admission. These guarantees cover process interruption at every injected mutation boundary but do not claim filesystem-wide atomic visibility, power-loss durability beyond successful synchronization, protection from arbitrary readers, or safety against a non-cooperative same-user process mutating the private namespace.",
680
680
  "claimLevel": "blocking",
681
681
  "riskClass": "critical",
682
682
  "proofBindingRefs": ["proofkit/requirement-bindings.json"],
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@research-engineering/agentic-proofkit",
3
3
  "description": "Reusable proof profile, report, graph, and witness-planning primitives.",
4
- "version": "0.10.1",
4
+ "version": "0.11.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "sideEffects": false,
@@ -112,7 +112,7 @@
112
112
  "rootDefinitionDigest": "sha256:3dbf760a8f8b0a4093c1dd4edc23367c5ef8027b31c18a01490afb657fcc03ad",
113
113
  "nativeSource": {
114
114
  "path": "internal/command/adoptionmaterialization",
115
- "canonicalDigest": "sha256:2940a39db54e51167e3f3373aa38525fc734fddc3902ac7d7ed1fdf326066cfe",
115
+ "canonicalDigest": "sha256:a02e36ec07451d0923b79f102edf984b6b34eee255dc7d0fa1f7bc41440c306e",
116
116
  "evidenceClass": "source_checkout"
117
117
  },
118
118
  "nativeAdmissionWitnessSelector": {
@@ -143,17 +143,17 @@
143
143
  "nativeSources": [
144
144
  {
145
145
  "path": "internal/app",
146
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
146
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
147
147
  "evidenceClass": "source_checkout"
148
148
  },
149
149
  {
150
150
  "path": "internal/command/adoptionmaterialization",
151
- "canonicalDigest": "sha256:2940a39db54e51167e3f3373aa38525fc734fddc3902ac7d7ed1fdf326066cfe",
151
+ "canonicalDigest": "sha256:a02e36ec07451d0923b79f102edf984b6b34eee255dc7d0fa1f7bc41440c306e",
152
152
  "evidenceClass": "source_checkout"
153
153
  },
154
154
  {
155
155
  "path": "internal/kernel/repositorytransaction",
156
- "canonicalDigest": "sha256:927d0a6fcdd5bfcb3961b78cc0bad7ccad1d991f3bdb2c7af1f476afcd215bfc",
156
+ "canonicalDigest": "sha256:005381c2fc6760a2a225a4853a2d75c3fc044286c2819cfd09908301d15b3b1b",
157
157
  "evidenceClass": "source_checkout"
158
158
  }
159
159
  ],
@@ -167,7 +167,8 @@
167
167
  "schemaVersion=1",
168
168
  "apply receipt binds expected transaction and desired-state identities to the transaction result",
169
169
  "JSON receipt and bounded text projection preserve the same operation outcome",
170
- "root-shape-only definition proofkit.adoption-materialization.apply-output.v1.root-shape; nested fields, types, and cardinalities remain native-owner claims"
170
+ "root-shape-only definition proofkit.adoption-materialization.apply-output.v1.root-shape; nested fields, types, and cardinalities remain native-owner claims",
171
+ "Replay requires a retained generation-2 terminal receipt binding the exact desiredStateId under the native lock; generation-1 receipts remain recoverable but acknowledgement retries require a newly reviewed plan. Roots with generation-2 receipts require a supporting binary even after recovery completes."
171
172
  ],
172
173
  "ownerRequirementRefs": [
173
174
  "REQ-PROOFKIT-PACKAGE-002",
@@ -250,7 +251,7 @@
250
251
  "rootDefinitionDigest": "sha256:c18995fb310dbde102bea231d83ec3756ffdf863199acbc88237471d06278c9e",
251
252
  "nativeSource": {
252
253
  "path": "internal/command/adoptionmaterialization",
253
- "canonicalDigest": "sha256:2940a39db54e51167e3f3373aa38525fc734fddc3902ac7d7ed1fdf326066cfe",
254
+ "canonicalDigest": "sha256:a02e36ec07451d0923b79f102edf984b6b34eee255dc7d0fa1f7bc41440c306e",
254
255
  "evidenceClass": "source_checkout"
255
256
  },
256
257
  "nativeAdmissionWitnessSelector": {
@@ -281,17 +282,17 @@
281
282
  "nativeSources": [
282
283
  {
283
284
  "path": "internal/app",
284
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
285
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
285
286
  "evidenceClass": "source_checkout"
286
287
  },
287
288
  {
288
289
  "path": "internal/command/adoptionmaterialization",
289
- "canonicalDigest": "sha256:2940a39db54e51167e3f3373aa38525fc734fddc3902ac7d7ed1fdf326066cfe",
290
+ "canonicalDigest": "sha256:a02e36ec07451d0923b79f102edf984b6b34eee255dc7d0fa1f7bc41440c306e",
290
291
  "evidenceClass": "source_checkout"
291
292
  },
292
293
  {
293
294
  "path": "internal/kernel/repositorytransaction",
294
- "canonicalDigest": "sha256:927d0a6fcdd5bfcb3961b78cc0bad7ccad1d991f3bdb2c7af1f476afcd215bfc",
295
+ "canonicalDigest": "sha256:005381c2fc6760a2a225a4853a2d75c3fc044286c2819cfd09908301d15b3b1b",
295
296
  "evidenceClass": "source_checkout"
296
297
  }
297
298
  ],
@@ -395,17 +396,17 @@
395
396
  "nativeSources": [
396
397
  {
397
398
  "path": "internal/app",
398
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
399
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
399
400
  "evidenceClass": "source_checkout"
400
401
  },
401
402
  {
402
403
  "path": "internal/command/adoptionmaterialization",
403
- "canonicalDigest": "sha256:2940a39db54e51167e3f3373aa38525fc734fddc3902ac7d7ed1fdf326066cfe",
404
+ "canonicalDigest": "sha256:a02e36ec07451d0923b79f102edf984b6b34eee255dc7d0fa1f7bc41440c306e",
404
405
  "evidenceClass": "source_checkout"
405
406
  },
406
407
  {
407
408
  "path": "internal/kernel/repositorytransaction",
408
- "canonicalDigest": "sha256:927d0a6fcdd5bfcb3961b78cc0bad7ccad1d991f3bdb2c7af1f476afcd215bfc",
409
+ "canonicalDigest": "sha256:005381c2fc6760a2a225a4853a2d75c3fc044286c2819cfd09908301d15b3b1b",
409
410
  "evidenceClass": "source_checkout"
410
411
  }
411
412
  ],
@@ -1186,7 +1187,7 @@
1186
1187
  "nativeSources": [
1187
1188
  {
1188
1189
  "path": "internal/app",
1189
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
1190
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
1190
1191
  "evidenceClass": "source_checkout"
1191
1192
  },
1192
1193
  {
@@ -2425,6 +2426,144 @@
2425
2426
  ]
2426
2427
  }
2427
2428
  },
2429
+ {
2430
+ "command": "integration-apply",
2431
+ "route": [
2432
+ "integration",
2433
+ "apply"
2434
+ ],
2435
+ "input": "none",
2436
+ "stdin": false,
2437
+ "inputPointer": false,
2438
+ "scopeClass": "explicit_filesystem_mutation",
2439
+ "outputModes": [
2440
+ "json",
2441
+ "text"
2442
+ ],
2443
+ "allowedFlags": [
2444
+ "--color",
2445
+ "--expect-desired-state",
2446
+ "--expect-transaction",
2447
+ "--format",
2448
+ "--operation",
2449
+ "--repo-root",
2450
+ "--tool"
2451
+ ],
2452
+ "requiredFlags": [
2453
+ "--expect-desired-state",
2454
+ "--expect-transaction",
2455
+ "--operation",
2456
+ "--repo-root",
2457
+ "--tool"
2458
+ ],
2459
+ "singleOccurrenceFlags": [
2460
+ "--color",
2461
+ "--expect-desired-state",
2462
+ "--expect-transaction",
2463
+ "--format",
2464
+ "--operation",
2465
+ "--repo-root",
2466
+ "--tool"
2467
+ ],
2468
+ "flagChoices": {
2469
+ "--color": [
2470
+ "auto",
2471
+ "never"
2472
+ ],
2473
+ "--format": [
2474
+ "json",
2475
+ "text"
2476
+ ],
2477
+ "--operation": [
2478
+ "install",
2479
+ "remove",
2480
+ "update"
2481
+ ],
2482
+ "--tool": [
2483
+ "claude",
2484
+ "codex"
2485
+ ]
2486
+ },
2487
+ "flagPresenceRequirements": [
2488
+ {
2489
+ "flag": "--color",
2490
+ "requiredFlagValues": [
2491
+ {
2492
+ "flag": "--format",
2493
+ "value": "text"
2494
+ }
2495
+ ],
2496
+ "requiredFlags": []
2497
+ }
2498
+ ],
2499
+ "outputContract": {
2500
+ "contractId": "proofkit.integration-apply.output.v1",
2501
+ "schemaVersion": 1,
2502
+ "rootType": "object",
2503
+ "closed": true,
2504
+ "rootDefinitionRef": "proofkit.integration-apply.output.v1.root-shape",
2505
+ "rootDefinitionDigest": "sha256:9072801d4aa7a9820e81f0de02ff04e22ced6188958c31d2f3682d01d2cc84ed",
2506
+ "nativeSources": [
2507
+ {
2508
+ "path": "internal/app",
2509
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
2510
+ "evidenceClass": "source_checkout"
2511
+ },
2512
+ {
2513
+ "path": "internal/command/agentintegration",
2514
+ "canonicalDigest": "sha256:e03209a37e8c7cc7c59c56c80c2906b789091e8de25679a6fe37704bfb2009c4",
2515
+ "evidenceClass": "source_checkout"
2516
+ },
2517
+ {
2518
+ "path": "internal/kernel/repositorytransaction",
2519
+ "canonicalDigest": "sha256:005381c2fc6760a2a225a4853a2d75c3fc044286c2819cfd09908301d15b3b1b",
2520
+ "evidenceClass": "source_checkout"
2521
+ }
2522
+ ],
2523
+ "nativeOutputWitnessSelector": {
2524
+ "path": "internal/app/agent_integration_lifecycle_command_test.go",
2525
+ "test": "TestIntegrationApplyCLI",
2526
+ "command": "go test ./internal/app -run '^TestIntegrationApplyCLI$'",
2527
+ "evidenceClass": "source_checkout"
2528
+ },
2529
+ "compatibilitySummary": [
2530
+ "schemaVersion=1",
2531
+ "kind=proofkit.integration-receipt.v1; state=passed|blocked|failed|recovery_required|cleanup_required|durability_unknown; transactionResult is the native owner projection or null",
2532
+ "JSON is the default; text is opt-in with color=auto|never, default never; color requires explicit --format text and ANSI requires a capable TTY without NO_COLOR",
2533
+ "No input, stdin, input pointer, output-file, implicit tool selection, package installation or native host activation",
2534
+ "Invocation flags and SHA256 identity references are admitted before repository I/O; unsafe routes, I/O, pre-effect cancellation and output errors use exit 1 and non-disclosing stderr without a classified JSON packet",
2535
+ "Ready plans and passed receipts exit 0; classified conflict, recovery, cleanup and durability outcomes exit 1 with exactly one report and empty stderr",
2536
+ "Selected fixed bootstrap and proofkit/integrations/<tool>.v1.json form one native transaction; canonical baseline is cooperative byte/mode bookkeeping, not authenticated origin",
2537
+ "Apply requires both reviewed transaction and desired-state identities; replay requires exact current desired files, no pending transaction and the retained applied receipt under one native lock",
2538
+ "root-shape-only definition proofkit.integration-apply.output.v1.root-shape; nested field shapes, leaf types and relational semantics remain native-owner claims"
2539
+ ],
2540
+ "ownerRequirementRefs": [
2541
+ "REQ-PROOFKIT-PACKAGE-002",
2542
+ "REQ-PROOFKIT-QUALITY-004",
2543
+ "REQ-PROOFKIT-SPEC-033",
2544
+ "REQ-PROOFKIT-WORKFLOW-019"
2545
+ ],
2546
+ "flagChoices": {
2547
+ "--color": [
2548
+ "auto",
2549
+ "never"
2550
+ ],
2551
+ "--format": [
2552
+ "json",
2553
+ "text"
2554
+ ],
2555
+ "--operation": [
2556
+ "install",
2557
+ "remove",
2558
+ "update"
2559
+ ],
2560
+ "--tool": [
2561
+ "claude",
2562
+ "codex"
2563
+ ]
2564
+ }
2565
+ }
2566
+ },
2428
2567
  {
2429
2568
  "command": "integration-check",
2430
2569
  "route": [
@@ -2473,17 +2612,17 @@
2473
2612
  "nativeSources": [
2474
2613
  {
2475
2614
  "path": "internal/app",
2476
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
2615
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
2477
2616
  "evidenceClass": "source_checkout"
2478
2617
  },
2479
2618
  {
2480
2619
  "path": "internal/command/agentintegration",
2481
- "canonicalDigest": "sha256:d85cf0fc38bbd28f86ececb3e41f9e04fca7f2741507bf006cd1a55500484505",
2620
+ "canonicalDigest": "sha256:e03209a37e8c7cc7c59c56c80c2906b789091e8de25679a6fe37704bfb2009c4",
2482
2621
  "evidenceClass": "source_checkout"
2483
2622
  },
2484
2623
  {
2485
2624
  "path": "internal/kernel/repositorytransaction",
2486
- "canonicalDigest": "sha256:927d0a6fcdd5bfcb3961b78cc0bad7ccad1d991f3bdb2c7af1f476afcd215bfc",
2625
+ "canonicalDigest": "sha256:005381c2fc6760a2a225a4853a2d75c3fc044286c2819cfd09908301d15b3b1b",
2487
2626
  "evidenceClass": "source_checkout"
2488
2627
  },
2489
2628
  {
@@ -2527,6 +2666,260 @@
2527
2666
  }
2528
2667
  }
2529
2668
  },
2669
+ {
2670
+ "command": "integration-plan",
2671
+ "route": [
2672
+ "integration",
2673
+ "plan"
2674
+ ],
2675
+ "input": "none",
2676
+ "stdin": false,
2677
+ "inputPointer": false,
2678
+ "scopeClass": "explicit_filesystem_scan",
2679
+ "outputModes": [
2680
+ "json",
2681
+ "text"
2682
+ ],
2683
+ "allowedFlags": [
2684
+ "--color",
2685
+ "--format",
2686
+ "--operation",
2687
+ "--repo-root",
2688
+ "--tool"
2689
+ ],
2690
+ "requiredFlags": [
2691
+ "--operation",
2692
+ "--repo-root",
2693
+ "--tool"
2694
+ ],
2695
+ "singleOccurrenceFlags": [
2696
+ "--color",
2697
+ "--format",
2698
+ "--operation",
2699
+ "--repo-root",
2700
+ "--tool"
2701
+ ],
2702
+ "flagChoices": {
2703
+ "--color": [
2704
+ "auto",
2705
+ "never"
2706
+ ],
2707
+ "--format": [
2708
+ "json",
2709
+ "text"
2710
+ ],
2711
+ "--operation": [
2712
+ "install",
2713
+ "remove",
2714
+ "update"
2715
+ ],
2716
+ "--tool": [
2717
+ "claude",
2718
+ "codex"
2719
+ ]
2720
+ },
2721
+ "flagPresenceRequirements": [
2722
+ {
2723
+ "flag": "--color",
2724
+ "requiredFlagValues": [
2725
+ {
2726
+ "flag": "--format",
2727
+ "value": "text"
2728
+ }
2729
+ ],
2730
+ "requiredFlags": []
2731
+ }
2732
+ ],
2733
+ "outputContract": {
2734
+ "contractId": "proofkit.integration-plan.output.v1",
2735
+ "schemaVersion": 1,
2736
+ "rootType": "object",
2737
+ "closed": true,
2738
+ "rootDefinitionRef": "proofkit.integration-plan.output.v1.root-shape",
2739
+ "rootDefinitionDigest": "sha256:2f1c3c16d0a794ed7f2cbc8a71062e8f8d1d0a6076980a729b6f62dfb131cedd",
2740
+ "nativeSources": [
2741
+ {
2742
+ "path": "internal/app",
2743
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
2744
+ "evidenceClass": "source_checkout"
2745
+ },
2746
+ {
2747
+ "path": "internal/command/agentintegration",
2748
+ "canonicalDigest": "sha256:e03209a37e8c7cc7c59c56c80c2906b789091e8de25679a6fe37704bfb2009c4",
2749
+ "evidenceClass": "source_checkout"
2750
+ },
2751
+ {
2752
+ "path": "internal/kernel/repositorytransaction",
2753
+ "canonicalDigest": "sha256:005381c2fc6760a2a225a4853a2d75c3fc044286c2819cfd09908301d15b3b1b",
2754
+ "evidenceClass": "source_checkout"
2755
+ }
2756
+ ],
2757
+ "nativeOutputWitnessSelector": {
2758
+ "path": "internal/app/agent_integration_lifecycle_command_test.go",
2759
+ "test": "TestIntegrationPlanCLI",
2760
+ "command": "go test ./internal/app -run '^TestIntegrationPlanCLI$'",
2761
+ "evidenceClass": "source_checkout"
2762
+ },
2763
+ "compatibilitySummary": [
2764
+ "schemaVersion=1",
2765
+ "kind=proofkit.integration-plan.v1; state=ready|blocked|recovery_required; ready contains an owner-admitted descriptive transaction, conflict has transaction=null",
2766
+ "JSON is the default; text is opt-in with color=auto|never, default never; color requires explicit --format text and ANSI requires a capable TTY without NO_COLOR",
2767
+ "No input, stdin, input pointer, output-file, implicit tool selection, package installation or native host activation",
2768
+ "Invocation flags and SHA256 identity references are admitted before repository I/O; unsafe routes, I/O, pre-effect cancellation and output errors use exit 1 and non-disclosing stderr without a classified JSON packet",
2769
+ "Ready plans and passed receipts exit 0; classified conflict, recovery, cleanup and durability outcomes exit 1 with exactly one report and empty stderr",
2770
+ "Selected fixed bootstrap and proofkit/integrations/<tool>.v1.json form one native transaction; canonical baseline is cooperative byte/mode bookkeeping, not authenticated origin",
2771
+ "Install never overwrites unknown or stale unbaselined content; update requires a matched prior baseline; remove deletes only a matched pair or valid orphan baseline, never adjacent instructions",
2772
+ "root-shape-only definition proofkit.integration-plan.output.v1.root-shape; nested field shapes, leaf types and relational semantics remain native-owner claims"
2773
+ ],
2774
+ "ownerRequirementRefs": [
2775
+ "REQ-PROOFKIT-PACKAGE-002",
2776
+ "REQ-PROOFKIT-QUALITY-004",
2777
+ "REQ-PROOFKIT-SPEC-033",
2778
+ "REQ-PROOFKIT-WORKFLOW-019"
2779
+ ],
2780
+ "flagChoices": {
2781
+ "--color": [
2782
+ "auto",
2783
+ "never"
2784
+ ],
2785
+ "--format": [
2786
+ "json",
2787
+ "text"
2788
+ ],
2789
+ "--operation": [
2790
+ "install",
2791
+ "remove",
2792
+ "update"
2793
+ ],
2794
+ "--tool": [
2795
+ "claude",
2796
+ "codex"
2797
+ ]
2798
+ }
2799
+ }
2800
+ },
2801
+ {
2802
+ "command": "integration-recover",
2803
+ "route": [
2804
+ "integration",
2805
+ "recover"
2806
+ ],
2807
+ "input": "none",
2808
+ "stdin": false,
2809
+ "inputPointer": false,
2810
+ "scopeClass": "explicit_filesystem_mutation",
2811
+ "outputModes": [
2812
+ "json",
2813
+ "text"
2814
+ ],
2815
+ "allowedFlags": [
2816
+ "--action",
2817
+ "--color",
2818
+ "--format",
2819
+ "--repo-root",
2820
+ "--transaction"
2821
+ ],
2822
+ "requiredFlags": [
2823
+ "--action",
2824
+ "--repo-root",
2825
+ "--transaction"
2826
+ ],
2827
+ "singleOccurrenceFlags": [
2828
+ "--action",
2829
+ "--color",
2830
+ "--format",
2831
+ "--repo-root",
2832
+ "--transaction"
2833
+ ],
2834
+ "flagChoices": {
2835
+ "--color": [
2836
+ "auto",
2837
+ "never"
2838
+ ],
2839
+ "--format": [
2840
+ "json",
2841
+ "text"
2842
+ ],
2843
+ "--action": [
2844
+ "resume",
2845
+ "rollback"
2846
+ ]
2847
+ },
2848
+ "flagPresenceRequirements": [
2849
+ {
2850
+ "flag": "--color",
2851
+ "requiredFlagValues": [
2852
+ {
2853
+ "flag": "--format",
2854
+ "value": "text"
2855
+ }
2856
+ ],
2857
+ "requiredFlags": []
2858
+ }
2859
+ ],
2860
+ "outputContract": {
2861
+ "contractId": "proofkit.integration-recover.output.v1",
2862
+ "schemaVersion": 1,
2863
+ "rootType": "object",
2864
+ "closed": true,
2865
+ "rootDefinitionRef": "proofkit.integration-recover.output.v1.root-shape",
2866
+ "rootDefinitionDigest": "sha256:c833d7c58535cc55b77c0cbbac27899ff3eb3be3ec9ceddad24ed17808f3b7a9",
2867
+ "nativeSources": [
2868
+ {
2869
+ "path": "internal/app",
2870
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
2871
+ "evidenceClass": "source_checkout"
2872
+ },
2873
+ {
2874
+ "path": "internal/command/agentintegration",
2875
+ "canonicalDigest": "sha256:e03209a37e8c7cc7c59c56c80c2906b789091e8de25679a6fe37704bfb2009c4",
2876
+ "evidenceClass": "source_checkout"
2877
+ },
2878
+ {
2879
+ "path": "internal/kernel/repositorytransaction",
2880
+ "canonicalDigest": "sha256:005381c2fc6760a2a225a4853a2d75c3fc044286c2819cfd09908301d15b3b1b",
2881
+ "evidenceClass": "source_checkout"
2882
+ }
2883
+ ],
2884
+ "nativeOutputWitnessSelector": {
2885
+ "path": "internal/app/agent_integration_lifecycle_command_test.go",
2886
+ "test": "TestIntegrationRecoverCLI",
2887
+ "command": "go test ./internal/app -run '^TestIntegrationRecoverCLI$'",
2888
+ "evidenceClass": "source_checkout"
2889
+ },
2890
+ "compatibilitySummary": [
2891
+ "schemaVersion=1",
2892
+ "kind=proofkit.integration-receipt.v1; state=passed|blocked|failed|recovery_required|cleanup_required|durability_unknown; transactionResult is the native owner projection or null",
2893
+ "JSON is the default; text is opt-in with color=auto|never, default never; color requires explicit --format text and ANSI requires a capable TTY without NO_COLOR",
2894
+ "No input, stdin, input pointer, output-file, implicit tool selection, package installation or native host activation",
2895
+ "Invocation flags and SHA256 identity references are admitted before repository I/O; unsafe routes, I/O, pre-effect cancellation and output errors use exit 1 and non-disclosing stderr without a classified JSON packet",
2896
+ "Ready plans and passed receipts exit 0; classified conflict, recovery, cleanup and durability outcomes exit 1 with exactly one report and empty stderr",
2897
+ "Recovery requires only root, transaction and action; tool and expectedDesiredStateId are null; historical recovery does not prove current installed or removed state",
2898
+ "A committed transaction cannot be rolled back; native incomplete transactions retain the native resume and rollback rules",
2899
+ "root-shape-only definition proofkit.integration-recover.output.v1.root-shape; nested field shapes, leaf types and relational semantics remain native-owner claims"
2900
+ ],
2901
+ "ownerRequirementRefs": [
2902
+ "REQ-PROOFKIT-PACKAGE-002",
2903
+ "REQ-PROOFKIT-QUALITY-004",
2904
+ "REQ-PROOFKIT-SPEC-033",
2905
+ "REQ-PROOFKIT-WORKFLOW-019"
2906
+ ],
2907
+ "flagChoices": {
2908
+ "--color": [
2909
+ "auto",
2910
+ "never"
2911
+ ],
2912
+ "--format": [
2913
+ "json",
2914
+ "text"
2915
+ ],
2916
+ "--action": [
2917
+ "resume",
2918
+ "rollback"
2919
+ ]
2920
+ }
2921
+ }
2922
+ },
2530
2923
  {
2531
2924
  "command": "integration-source",
2532
2925
  "route": [
@@ -2572,12 +2965,12 @@
2572
2965
  "nativeSources": [
2573
2966
  {
2574
2967
  "path": "internal/app",
2575
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
2968
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
2576
2969
  "evidenceClass": "source_checkout"
2577
2970
  },
2578
2971
  {
2579
2972
  "path": "internal/command/agentintegration",
2580
- "canonicalDigest": "sha256:d85cf0fc38bbd28f86ececb3e41f9e04fca7f2741507bf006cd1a55500484505",
2973
+ "canonicalDigest": "sha256:e03209a37e8c7cc7c59c56c80c2906b789091e8de25679a6fe37704bfb2009c4",
2581
2974
  "evidenceClass": "source_checkout"
2582
2975
  }
2583
2976
  ],
@@ -3247,7 +3640,7 @@
3247
3640
  "nativeSources": [
3248
3641
  {
3249
3642
  "path": "internal/app",
3250
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
3643
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
3251
3644
  "evidenceClass": "source_checkout"
3252
3645
  },
3253
3646
  {
@@ -6537,7 +6930,7 @@
6537
6930
  "rootDefinitionDigest": "sha256:3c842174dff5361e7f83166469b832805e05aa314b073c16234b5b64e346281e",
6538
6931
  "nativeSource": {
6539
6932
  "path": "internal/app",
6540
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
6933
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
6541
6934
  "evidenceClass": "source_checkout"
6542
6935
  },
6543
6936
  "nativeAdmissionWitnessSelector": {
@@ -6566,7 +6959,7 @@
6566
6959
  "rootDefinitionDigest": "sha256:0ea95e277ebe44cd2de42c29b47c38686ac0b6b390d8965367437b3fe138e209",
6567
6960
  "nativeSource": {
6568
6961
  "path": "internal/app",
6569
- "canonicalDigest": "sha256:8cf495d309f3447cc7743e8c2e9ff303e5f4bb78d69eeff27fd48d37fa47d605",
6962
+ "canonicalDigest": "sha256:2bea687b114cac5e816ae754ab7c27cdaf953f9b81134733373ba27ff86fc2e3",
6570
6963
  "evidenceClass": "source_checkout"
6571
6964
  },
6572
6965
  "nativeOutputWitnessSelector": {
@@ -10980,6 +11373,54 @@
10980
11373
  },
10981
11374
  "canonicalDigest": "sha256:e6dacd55cace039ca8e24bdec628b1498d0c12bbfcdb60c46854ab2047c3f2d7"
10982
11375
  },
11376
+ {
11377
+ "definitionId": "proofkit.integration-apply.output.v1.root-shape",
11378
+ "schemaVersion": 1,
11379
+ "rootType": "object",
11380
+ "closed": true,
11381
+ "definitionRefs": [],
11382
+ "fieldTree": {
11383
+ "kind": "root_shape_only",
11384
+ "nonClaims": [
11385
+ "Root-shape definitions do not claim nested field shapes, leaf types, cardinalities, or semantic validity.",
11386
+ "Root-shape definitions do not replace direct public-CLI runtime witnesses for variant selection."
11387
+ ],
11388
+ "variants": [
11389
+ {
11390
+ "allowedFields": [
11391
+ "expectedDesiredStateId",
11392
+ "expectedTransactionId",
11393
+ "failureClass",
11394
+ "kind",
11395
+ "nonClaims",
11396
+ "operation",
11397
+ "schemaVersion",
11398
+ "state",
11399
+ "tool",
11400
+ "transactionResult"
11401
+ ],
11402
+ "requiredFields": [
11403
+ "expectedDesiredStateId",
11404
+ "expectedTransactionId",
11405
+ "failureClass",
11406
+ "kind",
11407
+ "nonClaims",
11408
+ "operation",
11409
+ "schemaVersion",
11410
+ "state",
11411
+ "tool",
11412
+ "transactionResult"
11413
+ ],
11414
+ "rootKind": "object",
11415
+ "variantId": "01-root",
11416
+ "when": [
11417
+ "default JSON mode"
11418
+ ]
11419
+ }
11420
+ ]
11421
+ },
11422
+ "canonicalDigest": "sha256:9072801d4aa7a9820e81f0de02ff04e22ced6188958c31d2f3682d01d2cc84ed"
11423
+ },
10983
11424
  {
10984
11425
  "definitionId": "proofkit.integration-check.output.v1.root-shape",
10985
11426
  "schemaVersion": 1,
@@ -11024,6 +11465,100 @@
11024
11465
  },
11025
11466
  "canonicalDigest": "sha256:309c5f43b8d5596d88859819ed59e4486926d75d5f41d2b2b6e252389f5913ca"
11026
11467
  },
11468
+ {
11469
+ "definitionId": "proofkit.integration-plan.output.v1.root-shape",
11470
+ "schemaVersion": 1,
11471
+ "rootType": "object",
11472
+ "closed": true,
11473
+ "definitionRefs": [],
11474
+ "fieldTree": {
11475
+ "kind": "root_shape_only",
11476
+ "nonClaims": [
11477
+ "Root-shape definitions do not claim nested field shapes, leaf types, cardinalities, or semantic validity.",
11478
+ "Root-shape definitions do not replace direct public-CLI runtime witnesses for variant selection."
11479
+ ],
11480
+ "variants": [
11481
+ {
11482
+ "allowedFields": [
11483
+ "failureClass",
11484
+ "kind",
11485
+ "nonClaims",
11486
+ "operation",
11487
+ "recoveryTransactionId",
11488
+ "schemaVersion",
11489
+ "state",
11490
+ "tool",
11491
+ "transaction"
11492
+ ],
11493
+ "requiredFields": [
11494
+ "failureClass",
11495
+ "kind",
11496
+ "nonClaims",
11497
+ "operation",
11498
+ "recoveryTransactionId",
11499
+ "schemaVersion",
11500
+ "state",
11501
+ "tool",
11502
+ "transaction"
11503
+ ],
11504
+ "rootKind": "object",
11505
+ "variantId": "01-root",
11506
+ "when": [
11507
+ "default JSON mode"
11508
+ ]
11509
+ }
11510
+ ]
11511
+ },
11512
+ "canonicalDigest": "sha256:2f1c3c16d0a794ed7f2cbc8a71062e8f8d1d0a6076980a729b6f62dfb131cedd"
11513
+ },
11514
+ {
11515
+ "definitionId": "proofkit.integration-recover.output.v1.root-shape",
11516
+ "schemaVersion": 1,
11517
+ "rootType": "object",
11518
+ "closed": true,
11519
+ "definitionRefs": [],
11520
+ "fieldTree": {
11521
+ "kind": "root_shape_only",
11522
+ "nonClaims": [
11523
+ "Root-shape definitions do not claim nested field shapes, leaf types, cardinalities, or semantic validity.",
11524
+ "Root-shape definitions do not replace direct public-CLI runtime witnesses for variant selection."
11525
+ ],
11526
+ "variants": [
11527
+ {
11528
+ "allowedFields": [
11529
+ "expectedDesiredStateId",
11530
+ "expectedTransactionId",
11531
+ "failureClass",
11532
+ "kind",
11533
+ "nonClaims",
11534
+ "operation",
11535
+ "schemaVersion",
11536
+ "state",
11537
+ "tool",
11538
+ "transactionResult"
11539
+ ],
11540
+ "requiredFields": [
11541
+ "expectedDesiredStateId",
11542
+ "expectedTransactionId",
11543
+ "failureClass",
11544
+ "kind",
11545
+ "nonClaims",
11546
+ "operation",
11547
+ "schemaVersion",
11548
+ "state",
11549
+ "tool",
11550
+ "transactionResult"
11551
+ ],
11552
+ "rootKind": "object",
11553
+ "variantId": "01-root",
11554
+ "when": [
11555
+ "default JSON mode"
11556
+ ]
11557
+ }
11558
+ ]
11559
+ },
11560
+ "canonicalDigest": "sha256:c833d7c58535cc55b77c0cbbac27899ff3eb3be3ec9ceddad24ed17808f3b7a9"
11561
+ },
11027
11562
  {
11028
11563
  "definitionId": "proofkit.integration-source.output.v1.root-shape",
11029
11564
  "schemaVersion": 1,
@@ -30,9 +30,12 @@
30
30
  {
31
31
  "familyId": "agent-integrations",
32
32
  "label": "Agent integrations",
33
- "purpose": "Generate portable bootstrap source and check generated-byte freshness without installation or host activation.",
33
+ "purpose": "Generate and check portable bootstrap source, then explicitly plan, apply or recover its managed file lifecycle without claiming native host activation.",
34
34
  "commands": [
35
+ "integration-apply",
35
36
  "integration-check",
37
+ "integration-plan",
38
+ "integration-recover",
36
39
  "integration-source"
37
40
  ]
38
41
  },
@@ -943,6 +943,18 @@
943
943
  "Cancellation after the final pre-emission checkpoint cannot retract accepted output, and a caller-provided writer that accepts a prefix before failure is not an atomic sink.",
944
944
  "Phase5A is generation/check only, not managed installation, update, removal, host activation, permission grant, semantic full proof, merge approval, or production readiness."
945
945
  ]
946
+ },
947
+ {
948
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
949
+ "ownerId": "proofkit.agent-workflow",
950
+ "specPath": "docs/specs/proofkit-agent-workflow/requirements.v1.json",
951
+ "claimLevel": "blocking",
952
+ "proofState": "witness_backed",
953
+ "nonClaims": [
954
+ "A completed file lifecycle does not prove host discovery, instruction loading, approved-launcher invocation, permission grants, native verification, or production readiness.",
955
+ "Recovery reports a historical transaction, not current installed/removed state or post-return stability; cancellation after the final effect cannot retract a committed operation.",
956
+ "The baseline is cooperative bookkeeping, not authenticated origin, owner approval, or protection from coordinated same-user edits or rollback."
957
+ ]
946
958
  }
947
959
  ],
948
960
  "bindings": [
@@ -7113,6 +7125,324 @@
7113
7125
  "environmentClasses": [
7114
7126
  "local-go"
7115
7127
  ]
7128
+ },
7129
+ {
7130
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7131
+ "scenarioId": "proofkit.agent-workflow.integration-lifecycle-pair-recognition",
7132
+ "witnessId": "proofkit.agent-integration.integration-lifecycle-pair-recognition-falsifier",
7133
+ "witnessKind": "contract",
7134
+ "witnessPath": "internal/command/agentintegration/lifecycle_test.go",
7135
+ "witnessSelectors": [
7136
+ {
7137
+ "selector": "TestLifecycleBaselineCanonicalAdmission",
7138
+ "command": "go test ./internal/command/agentintegration -run '^TestLifecycleBaselineCanonicalAdmission$'"
7139
+ },
7140
+ {
7141
+ "selector": "TestLifecyclePairRecognition",
7142
+ "command": "go test ./internal/command/agentintegration -run '^TestLifecyclePairRecognition$'"
7143
+ }
7144
+ ],
7145
+ "commandIds": [
7146
+ "proofkit.go-test"
7147
+ ],
7148
+ "environmentClasses": [
7149
+ "local-go"
7150
+ ]
7151
+ },
7152
+ {
7153
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7154
+ "scenarioId": "proofkit.agent-workflow.integration-lifecycle-whole-operation",
7155
+ "witnessId": "proofkit.agent-integration.integration-lifecycle-whole-operation-falsifier",
7156
+ "witnessKind": "contract",
7157
+ "witnessPath": "internal/command/agentintegration/lifecycle_test.go",
7158
+ "witnessSelectors": [
7159
+ {
7160
+ "selector": "TestLifecycleAppliesReplaysAndPreservesNeighbors",
7161
+ "command": "go test ./internal/command/agentintegration -run '^TestLifecycleAppliesReplaysAndPreservesNeighbors$'"
7162
+ },
7163
+ {
7164
+ "selector": "TestLifecycleRejectsChangedIdentityAndLocalEdits",
7165
+ "command": "go test ./internal/command/agentintegration -run '^TestLifecycleRejectsChangedIdentityAndLocalEdits$'"
7166
+ }
7167
+ ],
7168
+ "commandIds": [
7169
+ "proofkit.go-test"
7170
+ ],
7171
+ "environmentClasses": [
7172
+ "local-go"
7173
+ ]
7174
+ },
7175
+ {
7176
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7177
+ "scenarioId": "proofkit.agent-workflow.integration-lifecycle-cli",
7178
+ "witnessId": "proofkit.agent-integration.integration-lifecycle-cli-falsifier",
7179
+ "witnessKind": "contract",
7180
+ "witnessPath": "internal/app/agent_integration_lifecycle_command_test.go",
7181
+ "witnessSelectors": [
7182
+ {
7183
+ "selector": "TestIntegrationApplyCLI",
7184
+ "command": "go test ./internal/app -run '^TestIntegrationApplyCLI$'"
7185
+ },
7186
+ {
7187
+ "selector": "TestIntegrationLifecycleInvocationAndPresentation",
7188
+ "command": "go test ./internal/app -run '^TestIntegrationLifecycleInvocationAndPresentation$'"
7189
+ },
7190
+ {
7191
+ "selector": "TestIntegrationPlanCLI",
7192
+ "command": "go test ./internal/app -run '^TestIntegrationPlanCLI$'"
7193
+ },
7194
+ {
7195
+ "selector": "TestIntegrationRecoverCLI",
7196
+ "command": "go test ./internal/app -run '^TestIntegrationRecoverCLI$'"
7197
+ }
7198
+ ],
7199
+ "commandIds": [
7200
+ "proofkit.go-test"
7201
+ ],
7202
+ "environmentClasses": [
7203
+ "local-go"
7204
+ ]
7205
+ },
7206
+ {
7207
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7208
+ "scenarioId": "proofkit.agent-workflow.integration-lifecycle-version-edge",
7209
+ "witnessId": "proofkit.agent-integration.integration-lifecycle-version-edge-falsifier",
7210
+ "witnessKind": "contract",
7211
+ "witnessPath": "internal/app/integration_version_edge_test.go",
7212
+ "witnessSelectors": [
7213
+ {
7214
+ "selector": "TestManagedIntegrationVersionEdgeClosesDeclaredPublicABIDelta",
7215
+ "command": "go test ./internal/app -run '^TestManagedIntegrationVersionEdgeClosesDeclaredPublicABIDelta$'"
7216
+ }
7217
+ ],
7218
+ "commandIds": [
7219
+ "proofkit.go-test"
7220
+ ],
7221
+ "environmentClasses": [
7222
+ "local-go"
7223
+ ]
7224
+ },
7225
+ {
7226
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7227
+ "scenarioId": "proofkit.agent-workflow.integration-lifecycle-version-edge-mutants",
7228
+ "witnessId": "proofkit.agent-integration.integration-lifecycle-version-edge-mutants-falsifier",
7229
+ "witnessKind": "contract",
7230
+ "witnessPath": "internal/app/public_abi_mutation_test.go",
7231
+ "witnessSelectors": [
7232
+ {
7233
+ "selector": "TestManagedIntegrationVersionEdgeRejectsUndeclaredPublicABIDrift",
7234
+ "command": "go test ./internal/app -run '^TestManagedIntegrationVersionEdgeRejectsUndeclaredPublicABIDrift$'"
7235
+ }
7236
+ ],
7237
+ "commandIds": [
7238
+ "proofkit.go-test"
7239
+ ],
7240
+ "environmentClasses": [
7241
+ "local-go"
7242
+ ]
7243
+ },
7244
+ {
7245
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7246
+ "scenarioId": "proofkit.agent-workflow.integration-lifecycle-npm-carrier",
7247
+ "witnessId": "proofkit.agent-integration.integration-lifecycle-npm-carrier-falsifier",
7248
+ "witnessKind": "contract",
7249
+ "witnessPath": "internal/tools/packageverify/workflow_carrier_test.go",
7250
+ "witnessSelectors": [
7251
+ {
7252
+ "selector": "TestInstalledNPMWorkflowCarrierClosure",
7253
+ "command": "go test ./internal/tools/packageverify -run '^TestInstalledNPMWorkflowCarrierClosure$'"
7254
+ }
7255
+ ],
7256
+ "commandIds": [
7257
+ "proofkit.go-test"
7258
+ ],
7259
+ "environmentClasses": [
7260
+ "local-go"
7261
+ ]
7262
+ },
7263
+ {
7264
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7265
+ "scenarioId": "proofkit.agent-workflow.integration-lifecycle-wheel-carrier",
7266
+ "witnessId": "proofkit.agent-integration.integration-lifecycle-wheel-carrier-falsifier",
7267
+ "witnessKind": "contract",
7268
+ "witnessPath": "internal/tools/pythonpackage/workflow_carrier_test.go",
7269
+ "witnessSelectors": [
7270
+ {
7271
+ "selector": "TestInstalledPythonWorkflowCarrierClosure",
7272
+ "command": "go test ./internal/tools/pythonpackage -run '^TestInstalledPythonWorkflowCarrierClosure$'"
7273
+ }
7274
+ ],
7275
+ "commandIds": [
7276
+ "proofkit.go-test"
7277
+ ],
7278
+ "environmentClasses": [
7279
+ "local-go"
7280
+ ]
7281
+ },
7282
+ {
7283
+ "requirementId": "REQ-PROOFKIT-SPEC-033",
7284
+ "scenarioId": "proofkit.repository-transaction.desired-absence-action-and-admission",
7285
+ "witnessId": "proofkit.repository-transaction.desired-absence-action-and-admission-falsifier",
7286
+ "witnessKind": "contract",
7287
+ "witnessPath": "internal/kernel/repositorytransaction/delete_test.go",
7288
+ "witnessSelectors": [
7289
+ {
7290
+ "selector": "TestAbsentTargetRejectsPayloadAndNoncanonicalVersionWithoutMutation",
7291
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestAbsentTargetRejectsPayloadAndNoncanonicalVersionWithoutMutation$'"
7292
+ },
7293
+ {
7294
+ "selector": "TestAbsentTargetsDistinguishDeletionEmptyAndUnchanged",
7295
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestAbsentTargetsDistinguishDeletionEmptyAndUnchanged$'"
7296
+ },
7297
+ {
7298
+ "selector": "TestDeleteChecksLastBeforeImageAndPreservesForeignRecreation",
7299
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestDeleteChecksLastBeforeImageAndPreservesForeignRecreation$'"
7300
+ },
7301
+ {
7302
+ "selector": "TestMixedAbsentTargetDoesNotRequireOrCreateItsParents",
7303
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestMixedAbsentTargetDoesNotRequireOrCreateItsParents$'"
7304
+ }
7305
+ ],
7306
+ "commandIds": [
7307
+ "proofkit.go-test"
7308
+ ],
7309
+ "environmentClasses": [
7310
+ "local-go"
7311
+ ]
7312
+ },
7313
+ {
7314
+ "requirementId": "REQ-PROOFKIT-SPEC-033",
7315
+ "scenarioId": "proofkit.repository-transaction.desired-absence-recovery-and-interruption",
7316
+ "witnessId": "proofkit.repository-transaction.desired-absence-recovery-and-interruption-falsifier",
7317
+ "witnessKind": "contract",
7318
+ "witnessPath": "internal/kernel/repositorytransaction/delete_recovery_test.go",
7319
+ "witnessSelectors": [
7320
+ {
7321
+ "selector": "TestDeletionProcessInterruptionAtMutationBoundaries",
7322
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestDeletionProcessInterruptionAtMutationBoundaries$'"
7323
+ },
7324
+ {
7325
+ "selector": "TestDeletionRecoversEveryMixedPrefixAndHistoricalResult",
7326
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestDeletionRecoversEveryMixedPrefixAndHistoricalResult$'"
7327
+ },
7328
+ {
7329
+ "selector": "TestDeletionRejectsMissingCorruptAndUnexpectedStagedObjects",
7330
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestDeletionRejectsMissingCorruptAndUnexpectedStagedObjects$'"
7331
+ }
7332
+ ],
7333
+ "commandIds": [
7334
+ "proofkit.go-test"
7335
+ ],
7336
+ "environmentClasses": [
7337
+ "local-go"
7338
+ ]
7339
+ },
7340
+ {
7341
+ "requirementId": "REQ-PROOFKIT-SPEC-033",
7342
+ "scenarioId": "proofkit.repository-transaction.current-state-locked-replay",
7343
+ "witnessId": "proofkit.repository-transaction.current-state-locked-replay-falsifier",
7344
+ "witnessKind": "contract",
7345
+ "witnessPath": "internal/kernel/repositorytransaction/replay_test.go",
7346
+ "witnessSelectors": [
7347
+ {
7348
+ "selector": "TestReplayAppliedRequiresCurrentNativePlanAndExactRetainedResult",
7349
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestReplayAppliedRequiresCurrentNativePlanAndExactRetainedResult$'"
7350
+ }
7351
+ ],
7352
+ "commandIds": [
7353
+ "proofkit.go-test"
7354
+ ],
7355
+ "environmentClasses": [
7356
+ "local-go"
7357
+ ]
7358
+ },
7359
+ {
7360
+ "requirementId": "REQ-PROOFKIT-SPEC-033",
7361
+ "scenarioId": "proofkit.repository-transaction.predecessor-v1-compatibility",
7362
+ "witnessId": "proofkit.repository-transaction.predecessor-v1-compatibility-falsifier",
7363
+ "witnessKind": "contract",
7364
+ "witnessPath": "internal/kernel/repositorytransaction/v1_compatibility_test.go",
7365
+ "witnessSelectors": [
7366
+ {
7367
+ "selector": "TestPresentOnlyPlansPreserveIndependentPredecessorBytes",
7368
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestPresentOnlyPlansPreserveIndependentPredecessorBytes$'"
7369
+ },
7370
+ {
7371
+ "selector": "TestRecoverIndependentPredecessorJournalAndStagedBytes",
7372
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestRecoverIndependentPredecessorJournalAndStagedBytes$'"
7373
+ }
7374
+ ],
7375
+ "commandIds": [
7376
+ "proofkit.go-test"
7377
+ ],
7378
+ "environmentClasses": [
7379
+ "local-go"
7380
+ ]
7381
+ },
7382
+ {
7383
+ "requirementId": "REQ-PROOFKIT-SPEC-033",
7384
+ "scenarioId": "proofkit.repository-transaction.bound-terminal-identity",
7385
+ "witnessId": "proofkit.repository-transaction.bound-terminal-identity-falsifier",
7386
+ "witnessKind": "contract",
7387
+ "witnessPath": "internal/kernel/repositorytransaction/terminal_identity_test.go",
7388
+ "witnessSelectors": [
7389
+ {
7390
+ "selector": "TestBoundTerminalRecoveryCompletesInterruptedArchive",
7391
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestBoundTerminalRecoveryCompletesInterruptedArchive$'"
7392
+ },
7393
+ {
7394
+ "selector": "TestLegacyTerminalRecoveryPreservesHistoricalIdentity",
7395
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestLegacyTerminalRecoveryPreservesHistoricalIdentity$'"
7396
+ },
7397
+ {
7398
+ "selector": "TestTerminalReceiptDesiredIdentityAdmission",
7399
+ "command": "go test ./internal/kernel/repositorytransaction -run '^TestTerminalReceiptDesiredIdentityAdmission$'"
7400
+ }
7401
+ ],
7402
+ "commandIds": [
7403
+ "proofkit.go-test"
7404
+ ],
7405
+ "environmentClasses": [
7406
+ "local-go"
7407
+ ]
7408
+ },
7409
+ {
7410
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7411
+ "scenarioId": "proofkit.agent-workflow.integration-recover-busy-stream",
7412
+ "witnessId": "proofkit.agent-workflow.integration-recover-busy-stream-falsifier",
7413
+ "witnessKind": "contract",
7414
+ "witnessPath": "internal/app/agent_integration_lifecycle_unix_test.go",
7415
+ "witnessSelectors": [
7416
+ {
7417
+ "selector": "TestIntegrationRecoverBusyCLIIsClassified",
7418
+ "command": "go test ./internal/app -run '^TestIntegrationRecoverBusyCLIIsClassified$'"
7419
+ }
7420
+ ],
7421
+ "commandIds": [
7422
+ "proofkit.go-test"
7423
+ ],
7424
+ "environmentClasses": [
7425
+ "local-go"
7426
+ ]
7427
+ },
7428
+ {
7429
+ "requirementId": "REQ-PROOFKIT-WORKFLOW-019",
7430
+ "scenarioId": "proofkit.agent-workflow.integration-update-effect-oracle",
7431
+ "witnessId": "proofkit.agent-workflow.integration-update-effect-oracle-falsifier",
7432
+ "witnessKind": "contract",
7433
+ "witnessPath": "internal/tools/workflowsmoke/integration_lifecycle_mutation_test.go",
7434
+ "witnessSelectors": [
7435
+ {
7436
+ "selector": "TestInstalledLifecycleWitnessRejectsUpdateWithoutEffects",
7437
+ "command": "go test ./internal/tools/workflowsmoke -run '^TestInstalledLifecycleWitnessRejectsUpdateWithoutEffects$'"
7438
+ }
7439
+ ],
7440
+ "commandIds": [
7441
+ "proofkit.go-test"
7442
+ ],
7443
+ "environmentClasses": [
7444
+ "local-go"
7445
+ ]
7116
7446
  }
7117
7447
  ],
7118
7448
  "witnessCommands": [