test(signals): visibility oracle — posture matrix, and the postures brought to a ruling - #3483
Merged
Merged
Conversation
…rought to a ruling Adds the reader's POSTURE as an axis to the visibility oracle: where the reader lives when it is built (mainline / inside another live action / inside another action's optimistic lane / behind a showing fallback / disposed before the source's hold releases), and a second observable, ENTANGLEMENT — release only the source's hold and see whether it reveals or is blocked by the reader's context. 280 cells, discovery mode: every cell is recorded (VISIBILITY_POSTURE_REPORT), none pinned. The oracle's states move to visibility-oracle.states.ts so both runners share them; the existing runner is unchanged. Rulings from the first pass (posture-born-held-and-observation.test.ts): - A, same-tick adoption is BY DESIGN (spec O1): transitions are ambient; an action is the special case that links one across async; an action started later in the same tick owns the ambient writes made before it. - C, latest() ENTANGLES (A15): lanes are transition-bound, so a latest() read inside another live action merges that action with the source's — the value pokes through at once, the reveal is joint. - B, creation under a transaction escapes the hold — RECORDED, not ruled (spec O2): a memo + render effect created inside a live action over a held value publishes the held value while untracked reads keep the committed frame. Mainline creation is born held (A29); the every-posture extension was prototyped (+83 B, suite green) and set aside — "capture things as they are". A change flips the pin loudly. Also recorded, not yet brought to a ruling: behind a showing fallback, isPending(x) answers false where mainline says true, and boundary content under a live override reads the committed value; a disposed reader holds and entangles nothing in every cell. Co-authored-by: Claude via Cursor <noreply@cursor.com> Co-authored-by: Cursor <cursoragent@cursor.com>
|
Coverage Report for CI Build 35055053703Coverage remained the same at 71.46%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
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.
Tests and spec only — no runtime change.
What
The visibility oracle pins node state × reader kind with every reader built mainline. This adds the reader's posture — where it lives when built — and a second observable, entanglement: release only the source's hold and see whether
xreveals or is blocked by the reader's context.Postures:
mainline,foreignAction(built inside another live action's body),foreignLane(that action holds its own optimistic write),behindFallback(inside acreateLoadingBoundarywhose content is pending on a sibling flight),disposedReader(root disposed before the source's hold releases).tests/visibility-oracle-posture.test.ts— 280 cells, discovery mode: every cell is recorded toVISIBILITY_POSTURE_REPORTas a markdown table; none pinned. The oracle's states move tovisibility-oracle.states.tsso both runners share them; the existing runner is unchanged (126 cells, same results).Rulings from the first pass —
tests/posture-born-held-and-observation.test.tslatest()entangles (A15, ruled): lanes are transition-bound, solatest(x)inside another live action merges that action withx's — the value pokes through at once, the reveal is joint (8 cells).Recorded, not yet brought to a ruling
isPending(x)answersfalsewhere mainline saystrue(held, superseded ×2, pending own async, body ended, held truth) — possibly A19 exception (1) applied to the reader's boundary.disposedReaderis clean in all 56 cells.undefinedrather than throwing — the boundary's collection semantics, expected.Why now
This is the file the fuzzer's (#3446) confirmed findings fold into as cells, and it gives O1/O2 a home on
nextfor the triage to cite.signals 2,369 green on the rebase.