Repository navigation
docs(signals): executable rulings, derived rules collapsed, seat table re-derived - #4695
Conversation
Co-authored-by: tembo[bot] <208362400+tembo-io[bot]@users.noreply.github.com>
|
Size (brotli, eager entry chunk)
Bundled with Rolldown (what Vite ships), brotli q11, decimal KB. A scenario fails only when it is over its brotli cap and its minified size is more than 20 B over the minified recorded with the cap; over the cap within that allowance is brotli layout noise and passes with a warning. Caps and their recorded minified in |
Coverage Report for CI Build 42166703395Coverage remained the same at 78.249%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
…he commit; DV-19 is Solid's - H-11: an answer is compared with the guess and corrects the graph now, but the screen, the guess's effects and `latest x` of a guess the screen shows keep it until the hold commits (Solid D-22, D-34, decision 3). H-7's "after a correction, the truth" narrowed to a guess the screen never showed. - Interpreter: `latest` of a shown, answer-corrected guess answers the guess until the commit. - S-latest-reask back to `2 / 2`, with the changed-truth variant; DV-19 recorded at four instants (#4689 ruled, not built). - CN-3e message, spec/08 and guide/reference.md back to what holds: both fixes show the guess. - References keep the count under the list's region (right by the spec either way, and not dependent on #4689). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0117BoWMbSPnht6GSU1vp8Pe
Merging this PR will not alter performance1 warning
Comparing Footnotes
|
Summary
The async rules were written as prose for agents to work from, and a week of fixes showed they do not survive that: the rule table and the code disagreed in 80 places (the seat shadow), and the rules themselves tripped a reader four times in one afternoon, each time on a sentence whose status or vocabulary could not be told from its neighbours. This PR makes rulings executable and collapses the prose around them. It is the M0 step of
documentation/plans/optimism-seam-spike-brief.md(new here; §8 records the four rulings made on 2026-11-05, §9–§12 the work below).packages/web/test/async-gen/rulings/S-<n>.ts: a scenario in the generator's grammar, the expected screen after each step, the ✗ screens, a status.rulings.spec.tsruns them inpnpm test;scenarios-md.tsgenerates each ruling's block inpackages/signals/docs/SCENARIOS.mdbetween<!-- ruling:S-n -->markers, and the spec fails when a block is stale (RULINGS_WRITE=1 pnpm exec vitest run test/async-gen/rulingsinpackages/webregenerates). Fifteen rows are executable: S-3, S-6, S-21, S-25, S-26, S-27, S-29, S-31, S-33, S-44, S-45, S-46, and the new S-48, S-49, S-50. Six cases areruled-not-built(it.failsat the ruled screen; the block records today's screen beside it): S-44, S-45 leaf and memo, S-46 plain, S-49, S-50. Three of those were documented as standing or fixed: S-45's through-a-memo form shows the fallback today; S-46's plain content attaches with its hole empty (the ✗ row the doc records as fixed by [2.0 / next] A display-ahead <Show> opened under a plain write's hold attaches its branch with an empty text hole until the landing (S-46, F-2) #4574); S-44's ownedisPendingprobe reads false after the outside change where the pin's imperative probe reads true.Loading on, actions with several writes, guesses and refreshes ({ t: "action", before, after, refresh }), optimistic memos and signals, memo inputspendingandwhen(a gated probe), the read kindpendingLatest(isPending(() => latest(x))), branch-owned memos (show.owns, born held).Result.settlesrecords which flight each settle step landed. The hydration campaign's step driver throws on the ruling-only steps rather than diverging silently;emitAppdoes the same.INTERNALS-ASYNC-STATE.md§7).RULES-DERIVED.md: 40 rules / 14,335 words → 24 live rules / ~7,600 words. Glossary entries inRULES-FUNDAMENTALS.md: display-ahead read, answer, produced, the hold's work, guess. D-25's "a verdict posture outlives the pass that asked" (2026-10-28) is withdrawn; its ruled screen is D-17's.scripts/rules-index.mjsindexes D-/F-/S- ids (every one of the ~360 hyphenated citations insrc/resolves) and checks that every ruling block has its file.core/seat.ts,__TEST__only; dist unchanged). Posture is the pass's own reads with the same-node clause;isPending-window reads compare side effects only; the verdict-seat andFl-rank comparisons go (the join stays); rows corrected per the triage in the brief §10–§11. Shadow over the 275 scalar pin files: 80 classes → 6 classes (8 reads), with 538 reads under three labelled allow-list predicates that are the mechanism the spike's M3 replaces (the sticky verdict bit, the verdict lane, the carry-over), not issues to file.No changeset: docs, tests and test-only code; no package behaviour changes.
Reviewer pointers: the brief §8 for the four rulings (each walked through with code), §10–§11 for the seat triage and what was tried and reverted, §12 for the collapse table;
SCENARIOS.mdfor the generated blocks; one ruling file (S-27.ts) for the shape.How did you test this change?
Row-move check after the collapse: every
S-id a folded rule listed is listed by its absorber (scripted; zero missing).