Repository navigation
Run leases: bind effect-host certification to the admitted instance; test expiry on the fenced commit paths (#253) - #257
Merged
Merged
Conversation
…expiry on the fenced commit paths (#253) The v0.12.0 pre-release batch from the security re-read of #251. - R1: both lease kits now refuse a store whose commitHistoryFenced or commitContextSnapshotFenced accepts an expired fence, at equal time and after. - R2: the effect-host kit makes its authority fail, and a host that performs then fails it. certifyEffectHost / CertifyEffectHost call the factory once, over an authority that answers from the kit until the checks pass and from the real authority after, and admit that exact instance: a frozen TypeScript wrapper that refuses once the instance's dispatch is not the one checked, a Go *CertifiedEffectHost whose identity is the evidence. The reference host's dispatch is sealed on the instance. Unattended admission accepts only these, and only when their authority is the run's own store. - N1: Go keeps no registry of hosts; admitted hosts are collectable. - N2: the Go agent adapter's pre-effect save follows DurableReadingTool. Nine mutation rows (agent#253) and ten Go twins, all caught; L17 re-anchored. Storage docs updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: kikashy <35789537+kikashy@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: kikashy <35789537+kikashy@users.noreply.github.com>
…pied reference host (#253) From the narrow re-check of #257. TypeScript certification reads the host's dispatch once, runs the kit through that function and admits only it, so a getter or a Proxy trap cannot show the kit one function and admission another; the reference host's authority, admitted set and queue are #private fields. In Go only the pointer NewReferenceEffectHost made is evidence (a self pointer), not a shallow copy that would share its key map without the lock. Rows C1-C3 added; L4, L9 and B4 re-anchored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: kikashy <35789537+kikashy@users.noreply.github.com>
Contributor
Author
|
Verdict: merge once the pending Review record: agent PR #257 (issue #253), the lease batch after the #251 re-readCandidate and toolchains
A Claude Opus review over a Claude Opus build; not a cross-vendor claim. This is a narrow re-check of the batch that answers my #251 re-read. Nothing was posted, pushed or edited outside the room. Method
Probes
Mutants
Findings
From #251, finding 6 (Go accepts a lone-surrogate identifier) and finding 8 (mutation-check tooling) are unchanged and outside this PR. What was not established
Maintainer disposition (2026-10-30)
|
Contributor
|
🎉 Thank you for your contribution to Judgment Pack! If you’d like another task, choose a path that interests you: |
kikashy
added a commit
that referenced
this pull request
Oct 29, 2026
Conflict resolved: mutation-rows.json keeps main's agent#253 rows, then the agent#252 rows; generated files regenerated with their generators. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: kikashy <35789537+kikashy@users.noreply.github.com>
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.
Closes #253. Milestone v0.12.0. This is the pre-release batch from the security re-read of #251; it covers R1, R2, N1 and N2 from that review record.
What changed
R1 (MEDIUM): expiry on the fenced commit paths. Both lease kits (
runStoreLeaseConformance, GoCheckRunStoreLeaseConformance) now requirecommitHistoryFencedandcommitContextSnapshotFencedto refuse an expired fence, both at equal time and 1 ms after. Tests: a store that skips the expiry check on either path now fails the kit atlease.history.expired.equal-time/lease.snapshot.expired.equal-time(TS "the kits test expiry on every fenced commit path"; GoTestLeaseKitsTestExpiryOnEveryFencedCommitPath).R2 (MEDIUM): certification is bound to the admitted instance.
host.authority-unavailable, because unavailable ownership evidence closes dispatch.certifyEffectHost/CertifyEffectHostcall the factory once. The host is built over an authority that answers from the kit until the checks pass and from the real authority after that. The exact instance the kit exercised is the one admitted:dispatchis not the one the kit checked.*CertifiedEffectHostwhose identity is the evidence; a copy of the value is refused.ReferenceEffectHost'sdispatchandeffectFencingare sealed on the instance. A subclass, or a Go type embedding it, carries no evidence.admitUnattended/AdmitUnattendedaccept only the package's reference host or a certified host, and only when that host enforces against the run's own store. A no-op authority, another store, or a certification over another store is refused.TestLeaseCertificationIsBoundToTheInstanceItChecked(authority-unavailable, factory-called-once, identity-not-equality, authority-is-the-store). Each covers a bypass from the record: a different factory product, a swapped dispatch (TS), an equal-but-different value (Go), a no-op or foreign authority, and evidence on another instance or a subclass.N1 (LOW). Go keeps no registry of hosts, so admitted reference and certified hosts are collected. Test:
TestLeaseAdmittedHostsAreCollectable(100 of 100 collected after GC).N2 (LOW). The Go agent adapter's pre-effect checkpoint save now follows the new exported
DurableReadingTool, so a source act is saved before it runs. Test:TestASourceActIsSavedBeforeItRuns(go/adapter/agent; light).Docs:
docs/design/storage.md(certifying an effect host, the kit's expiry cases). No schema, record or moved Desk file changed, so the parity table is unchanged.Mutation rows (
origin: agent#253)B1–B9, all caught by
storage/lease.test.tsitself (caught: selected, not the whole-suite fallback). Twins applied by hand in a scratch copy, all caught:self), "made by NewReferenceEffectHost", the N1 registry and N2.L17 from #223 is re-anchored to the new admission check. All 18 L rows are still caught.
Checks
Candidate
75f884c67905296dfb350ca36ef1864ce34186e3(branchrun-leases-batch-253, clean tree). Command:jpdev check --changed origin/main, run with Go 1.26.10 (the manifest's version) and Node 22. Parity was run against a shallow Desk checkout atdesk_pin.The first full run failed only
reference(event-reference line numbers moved); the second commit regenerates that page. The exact-head gates and the push-to-main mutation table belong to CI.Left as is
LOW 6 (Go lone-surrogate identifiers, pre-existing), LOW 7 (already documented) and LOW 8 (mutation-check tooling) are unchanged, as the issue scopes.
🤖 Generated with Claude Code