@research-engineering/agentic-proofkit 0.10.1 → 0.12.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. |
@@ -152,6 +154,7 @@ Semantic context routes are `requirement-context-compose`,
152
154
  | Does a TypeScript package public API match a caller-owned manifest? | `agent-route` with `goal: "verify_typescript_public_api"` and explicit `typescript_public_api_manifest` plus `typescript_public_api_repo_root`, then `typescript-public-api-surfaces --repo-root <caller-selected-root>` | The manifest must name each referenced `package.json`, sorted-unique export conditions, and a non-JSX `.ts`, `.mts`, or `.cts` `sourcePath` whose canonical target has the same admitted extension class. The bounded scanner accepts only the fail-closed export grammar in `proofkit/cli-contract.v2.json`; it does not parse unrestricted TypeScript or TSX, infer conventional layouts, or prove compiler output provenance, checkout freshness, package-manager truth, or merge readiness. |
153
155
  | Receipts are available for planned checks. | `selective-gate-evidence --agent-envelope`; then materialize a caller-owned `obligation_decision_input` from the evidence output plus command routes, currentness, and trust facts; then run `selective-gate-obligation-decision-input`; then materialize the resulting `obligation_decision` input and run `obligation-decision --agent-envelope` | Escalate on missing, stale, invalid, untrusted, blocked, unavailable, or unknown-scope evidence. |
154
156
  | Human inspection, semantic comparison, or traceability navigation is needed. | `requirement-source-view`, `requirement-proof-view`, `requirement-coverage-view`, `requirement-spec-tree-view`, `requirement-semantic-diff`, `requirement-traceability-graph`, or `requirement-browser-server` | Semantic diff compares admitted owner fields rather than lines. Traceability keeps specification, proof, code, and native execution evidence planes separate. Browser and rendered outputs remain presentation only unless the consumer admits a tracked artifact freshness gate. |
157
+ | Find a requirement in a large admitted workspace. | `requirement-browser-server --view workspace --serve --input <workspace-input>`; use Browse to select a descendant scope, owner, lifecycle, or literal search, then inspect the bounded result page. | Search covers the whole admitted cohort before paging, not just visible rows. Selection retains original source anchors; handoff adds context closure through its owner. Browse and Inspector become mutually exclusive native panels on smaller viewports. Retry preserves the failed operation, while stale snapshots require explicit reload. The browser does not execute agents or turn a lookup count into proof coverage. |
155
158
  | Temporary external document lifecycle facts, generated views, or rendered views need authority classification. | `document-lifecycle-boundary` | Treat lifecycle records as caller-owned metadata. Temporary design docs and implementation plans are not retained repository authority unless rewritten into deterministic specs, proof bindings, tests, package-public docs, or backlog rows. |
156
159
  | A JavaScript/TypeScript consumer needs less wrapper code. | `json-report-cli-adapter-source --language typescript --format json` | Generated adapter source is caller-owned after materialization. The consumer still owns package pin, binary path, repo paths, local policy, and freshness proof. It is a CLI runner adapter, not a separate SDK authority. |
157
160
  | A Python consumer needs Proofkit from Python tooling. | Install the Python package when available and invoke the same CLI/JSON contract. | The Python package is a runner wrapper over the Go CLI, not a Python SDK or alternate schema owner. |
@@ -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": [
@@ -207,6 +207,13 @@ execution receipts, and merge policy.
207
207
  change-plan route replacement, and omitted-route policy to one breaking
208
208
  release record without reinterpreting the frozen prior edge.
209
209
 
210
+ - `REQ-PROOFKIT-SPEC-036`: full-cohort requirement lookup intersects literal
211
+ search, owner, lifecycle, and typed descendant scope before byte-bounded
212
+ paging; navigation and handoff preserve their distinct identities and closure.
213
+ - `REQ-PROOFKIT-SPEC-037`: generation-owned requests, exact explicit Retry,
214
+ distinct error actions, and responsive native panels preserve keyboard
215
+ focus, source selection, and drafts without promoting presentation authority.
216
+
210
217
  ## Non-Claims
211
218
 
212
219
  - This spec does not claim consumer repository adoption.
@@ -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"],
@@ -711,6 +711,32 @@
711
711
  "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
712
712
  "deferral": null,
713
713
  "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
714
+ },
715
+ {
716
+ "requirementId": "REQ-PROOFKIT-SPEC-036",
717
+ "ownerId": "proofkit.spec-proof-core",
718
+ "invariant": "Workspace lookup indexes immutable admitted requirement sources once, preserves each original source digest and snapshot JSON pointer, and intersects search, owner, lifecycle, and selected-node descendant scope before stable requirement-ID paging. Scope uses only requirement-role source-ID references, never overview or path-digest aliases or inferred ancestor membership. Search applies Unicode trimming and simple lowercase independently to ID, owner, and invariant, without normalization or cross-field concatenation, after 1024-byte and 256-code-point admission bounds. Available A, matching M, and selected S counts yield filtered A-M, page-omitted M-S, and total-omitted A-S counts. Lookup does not expand lifecycle closure; handoff delegates closure to the existing context owner. Navigation projects only the root or one admitted parent's ordered child window; both lookup routes cap compact response bytes at 16 MiB without truncating invariant text and reject an unfit first row before output. Browser navigation retains at most 256 rows with explicit recovery of discarded sibling pages, while requirement paging returns to actual visited offsets rather than assuming fixed response length.",
719
+ "claimLevel": "blocking",
720
+ "riskClass": "high",
721
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
722
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-036"],
723
+ "nonClaims": ["Lookup fragments do not establish source completeness outside the admitted snapshot, lifecycle-closed context, proof coverage, native execution, provider freshness, merge approval, or production readiness. Private browser HTTP routes are not a separately supported public SDK."],
724
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
725
+ "deferral": null,
726
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
727
+ },
728
+ {
729
+ "requirementId": "REQ-PROOFKIT-SPEC-037",
730
+ "ownerId": "proofkit.spec-proof-core",
731
+ "invariant": "The workspace has one content-generation owner and independent identity-bound navigation requests. Superseded, aborted, or collapsed-branch replies cannot replace current content, selection, focus, or request authority. Retry requires explicit activation and repeats the immutable failed method, route, snapshot, and complete query with a new request ID; unsent form edits do not alter it. Sanitized errors distinguish correction (400), denied and locked without Retry (403), stale and locked with explicit reload (409), explicit Retry for transport/429/5xx, and optional versus required unavailability (404). Responsive panels use one native modal at a time at or below 64rem, restore visible opener focus on close, and release modality on desktop resize while preserving the question draft. Inspector entry commits source selection before moving focus; content transitions clear targets and displayed packets. Navigation render commits preserve a focused node/action identity and derive protected-control state from current authority. Native page focus stays inside the open modal without trapping browser chrome. Invariants precede lazily expanded owner/non-claim details and remain source-bound through Unicode selection and handoff.",
732
+ "claimLevel": "blocking",
733
+ "riskClass": "high",
734
+ "proofBindingRefs": ["proofkit/requirement-bindings.json"],
735
+ "nonClaimRefs": ["NC-PROOFKIT-SPEC-037"],
736
+ "nonClaims": ["Browser runtime witnesses cover the admitted Playwright Chromium, Firefox, and WebKit scenarios, not all browser preferences, assistive technologies, operating-system themes, branded Safari behavior, complete WCAG conformance, annotation persistence, agent execution, or provider delivery."],
737
+ "lifecycle": {"state": "active", "replacementRequirementIds": [], "evidenceRefs": []},
738
+ "deferral": null,
739
+ "updatePolicy": {"reviewOwnerId": "proofkit.spec-proof-core", "requiresImpactDeclaration": true, "requiresProofBindingReview": true}
714
740
  }
715
741
  ],
716
742
  "nonClaims": [
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.12.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "sideEffects": false,
@@ -36,7 +36,7 @@
36
36
  "build": "go run ./internal/tools/packagebuild",
37
37
  "check": "npm run npm:version && npm run source-hygiene && npm run command-contract:check && npm run command-family:check && npm run text-policy && npm run mermaid:check && npm run go:check && npm run browser:check && npm run package:artifact && npm run self:receipt && npm run self:coverage && npm run release:closeout",
38
38
  "browser:check": "npm run browser:static-check && npm run browser:test",
39
- "browser:static-check": "tsc -p tsconfig.browser.json && node --test scripts/browser-proof-execution.test.mjs scripts/browser-proof-inputs.test.mjs scripts/browser-selection-authority.test.mjs scripts/diagnostic-entrypoints.test.mjs scripts/stable-json.test.mjs",
39
+ "browser:static-check": "tsc -p tsconfig.browser.json && node --test scripts/browser-proof-execution.test.mjs scripts/browser-proof-inputs.test.mjs scripts/browser-selection-authority.test.mjs scripts/browser-workspace-requests.test.mjs scripts/diagnostic-entrypoints.test.mjs scripts/stable-json.test.mjs",
40
40
  "browser:test": "go run ./internal/tools/browserproofverify --run",
41
41
  "command-family:check": "go run ./internal/tools/commandfamilygen --check",
42
42
  "go:actionlint": "go tool actionlint",