Skip to content

Release retained portable runs on declared readback and settled successors (retained.qnt + production replay) - #389

Merged
0thernet merged 7 commits into
mainfrom
claude/fv-portable-readback-successors
Sep 25, 2026
Merged

0thernet merged 7 commits into
mainfrom
claude/fv-portable-readback-successors

Conversation

@0thernet

Copy link
Copy Markdown
Member

An indeterminate portable write's intent fence used to wait on retention material that only the operator could clear, and an elected duplicate successor left its source run's ledger and plugin bundle pinned forever. The portable readback-successor path now lets the fence open on a not-applied observation Ghostget itself obtains from the plugin's declared readback — bound to the run, its intent, auth realm, and manifest — and supersedes a source whose successor settled, releasing its recovery material and unpinning its bundle while the indeterminate ledger still fences the intent.

Claims moved

Claim Layer Evidence
portable-retained-release (new) quint retained.qnt models the retained-release protocol, checks retainedSafety over 2,000 simulated samples of up to 12 steps and Apalache to length 8, and replays 300 seeded traces through the production supersession cores

Evidence and how the evidence fails when broken

  • Quint mutants. stepUntruthfulReadback lets the plugin's readback claim anything; stepSupersedeReleasesLedger releases the intent ledger on supersession. Both violate retainedSafety under quint run and Apalache.
  • Replay. scripts/verification-retained-replay.test.ts drives the production reconcile/supersession code through every seeded trace (replay.target: production), so a model/production divergence in fence opening, supersession, or ledger retention fails the test file.
  • Tests. src/provider-plugin-portable-runtime.test.ts (+569) exercises the declared readback, the bound-to-run observation, and supersession release; src/provider-plugin-package.test.ts and src/provider-plugin-protocol.test.ts pin the new protocol surface; src/run-journal.test.ts covers the retained-release journal fields.

Defects found

  • The reconcile path accepted a readback from an undeclared plugin binding: fixed on this lane (guard undeclared reconcile) with a regression test (test the undeclared-plugin path).
  • The supersession cores were made pure so the model and production share one reducer; plan rows D1/D2 are closed in kb/plans/formal-verification-assurance.md.

Package budget

The new protocol/runtime code ships in src/, so bun run verify:package on this head is the budget check; the stored assertions are unchanged.

CI cost

The Required verification job gains one model (retained.qnt: Apalache length 8, 2,000 samples × 12 steps) and one replay file (300 traces through production). Nightly gets the same model at its CI bounds; no nightly deepening was recorded.

Not covered

  • The readback observation is trusted only to the plugin's declared contract and the binding identity at claim time; a truthful-but-wrong readback from the real provider is outside the model's fault set.
  • Supersession releases recovery material only after the successor settles; a successor that never settles keeps the source retained (modeled, and the ledger still fences).
  • Local validation on this host was partial under heavy load: typecheck and the claims render/check pass post-merge; the helper-heavy portable-runtime and retained-replay suites are delegated to the Required CI run on this head.

🤖 Generated with Claude Code

0thernet and others added 4 commits September 24, 2026 16:15
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…oncile; pure supersession cores

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…path; close the D1/D2 plan rows

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…adback-successors

# Conflicts:
#	docs/assurance.md
#	verification/quint/models.json
@vercel

vercel Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
ghostget Ready Ready Preview Sep 25, 2026 3:47am UTC

Request Review

…remeasure the package

- The Quint manifest check required the literal parseItfTrace call; the
  retained replay uses quintTraceCache, the shared wrapper that performs
  the same parse. Accept either path.
- The successor-intent test asserted the source's recovery capsule stayed
  byte-identical after a settled successor; supersession now releases
  that capsule while the indeterminate ledger keeps fencing, which is the
  claim's intended outcome. Assert supersededBy and the capsule's release
  instead.
- Remeasure the package: 23,516,304 unpacked bytes on this branch across
  the unchanged 596-file inventory, restoring the reviewed allowance.
…adback-successors

# Conflicts:
#	docs/assurance.md
@0thernet
0thernet merged commit 3d1292b into main Sep 25, 2026
27 checks passed
@0thernet
0thernet deleted the claude/fv-portable-readback-successors branch September 25, 2026 04:00

This branch was successfully deployed

1 active deployment
Preview — a1e7801b Deployed Sep 25, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant