Fence unsettled runs by recorded provider subject across auth locators (model + production replay) - #388
Open
0thernet wants to merge 13 commits into
Open
Fence unsettled runs by recorded provider subject across auth locators (model + production replay)#3880thernet wants to merge 13 commits into
0thernet wants to merge 13 commits into
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… identity preflight Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ournal subject parsing Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ed-fence # Conflicts: # docs/assurance.md
The subject-fence outcomes claim -> withheld and scan -> withheld need a seven-trace greedy cover; five traces left them unseen.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
… bound Apalache for shared CPUs - A locator whose auth record names no provider subject cannot preview an R2/R3 action at all, so a no-subject run journal exists only in records written before the field did; the legacy-journal case already covers the claim's no-subject semantics. - Remeasure the package: 23,475,086 unpacked bytes on this branch across the unchanged 596-file inventory; the Linux package job measured the same. Restores the reviewed allowance. - With QUINT_CONCURRENCY two checker jobs share the runner's four vCPUs, so a fence.qnt Apalache check that finished in about ten minutes alone can need roughly twice that; raise the per-check bound to 20 minutes. The bound still fails a genuinely stuck check.
…ed-fence # Conflicts: # docs/assurance.md
The hash-keyed mutant world names its auth locators fence-second-0 and fence-main-1, with a generation suffix. The refusal classifier matched [a-z-]+, so the mutant world's subject-fence refusal read as an unexpected reason instead of a refusal, and the divergence check failed before reaching the trace assertions.
…ed-fence # Conflicts: # docs/assurance.md # kb/plans/formal-verification-assurance.md # scripts/npm-release-workflow.test.ts # scripts/package-budget.ts
…dget The file-backed replay diverged: after finish(r3, succeeded) production's repair sweep marks the elected source superseded — its recovery releases and the run is durably settled — while the model kept reconciled empty. Settling a successor through reconcile does the same. Both steps now reconcile the elected source, matching supersedeSettledDuplicateSources: dispatched, settled, never failed. The enlarged model also outgrew its budgets: six Apalache checks plus the replay approached the step's 20 minutes on the shared 4-vCPU runner, and the weight from run 36028981199 predates the subject dimension. The step gets 30 minutes inside a 35-minute job, the fence weight rises to 1150 s so the packer isolates it, and the file-backed cover cap becomes a ceiling — it bounds replay cost rather than pinning the greedy minimizer's exact count.
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The confirmed-write fence keyed unsettled runs by auth locator ID, so the same provider account reached through two auth records could run a duplicate write. New journals now record the auth record's provider subject, and the fence also refuses while an unsettled run of the same provider target, operation, canonical input, and duplicate-risk source recorded the same subject under a different locator — in the journal scan and again in a recheck after the run's own claim is on record.
Claims moved
intent-fence-subject-across-locators(new)fence.qntmodels two locators that may each record one subject or none, checksfenceSafetyover 5,000 simulated samples of up to 12 steps and Apalache to length 8, adds thestepSubjectBlindmutant, and replays through the production fence cores and the file-backed state layerEvidence and how the evidence fails when broken
stepSubjectBlinddrops the cross-locator subject check; bothquint runand Apalache find thefenceSafetyviolation it allows.scripts/verification-fence-replay.test.tsreplays every seeded trace through the production fence cores, then replays a greedy seven-trace cover — one that reaches every action result, including the newclaim -> withheldandscan -> withheld— through the real file-backed state layer. A hash-keyed fence and a reconciler that releases on a caller's claim each diverge from the model traces on named states.authSubjectexisted parse unchanged and fence per locator only;parseAuthSubjectnormalizes and rejects malformed values. The fence can only refuse more.src/confirmed-write-intent-fence.test.tsgained per-locator subject cases (one test each) and strict journal subject parsing pins;src/run-journal.test.tsandsrc/read-path-preparation.test.tscover the new field and the identity-preflight scope note.Defects found
withheldnever appeared in a five-trace greedy cover. The cover is now sized at the measured minimum of seven traces (FILE_BACKED_TRACES = 7); eight fails because the greedy stops once coverage is complete.Package budget
src/run-journal.ts,src/runtime.ts, andsrc/confirmed-write-*.tsship, so the packed and unpacked measurements were rerun andscripts/package-budget.tsupdated on this branch's earlier commits; the merge keeps main's measurement where the shipped set is unchanged by the merge itself.CI cost
The Required verification job runs the enlarged
fence.qntwith Apalache at length 8 (unchanged) and 5,000 simulation samples of up to 12 steps (was 3,000/10); the replay file adds the per-locator subject cases and two more file-backed cover traces, each a full bound-state-helper run.Not covered
🤖 Generated with Claude Code