Repository navigation
fix(signals): writes that net in an action's tick pend nothing for a verdict reader (#4485) - #4498
Conversation
…verdict reader (#4485) Writes that net to a signal's committed value, made in the tick an action opens a hold (`setS(2); setS(1)` in the body after `setX(1)`, or on the mainline just before it), made no proposal (D-8): the seam drops the staging and nothing is held. A render effect reading `[s(), isPending(s)]` still showed `[1, true]` for the whole hold and re-ran at the landing as `[1, false]`. Its plain read took `read`'s verdict-reader `stagedScreen` arm before the netted check, listing it as a stale reader of the flush's hold, and its probe was the seam's verdict (`provisionalVerdict`): not final, routed into the verdict lane with a re-run at the landing. `read`'s plain arm now checks netting before the `stagedScreen` arm, and `provisionalVerdict` answers a netted signal staging final: the reader is still the tick's verdict reader, shown now (D-25), with no re-run at the landing. The seat table's plain staged rows gain the same netted check (SLOT_P, nothing raised), which also clears the world mismatches #4452's netted read left in the shadow (10 classes -> 0). #4367's opening tick (`act(3)` then a mainline `set(2)` on s = 2) is the same netted tick, so its interim `pending` frame is re-pinned to the D-8 screen (`F`); its settle after the later writes is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
+69 B minified over next on every bundle that imports the verdict engine (`provisionalVerdict`'s netted arm, and `read`'s plain arm no longer folding into one ternary). Only "signals: + isPending/latest" crosses its cap: 11.12 -> 11.14 KB at measured 11,130 B + 10 B, recorded minified 30,641 -> 30,725 B. The live server-components frozen floor stays within its cap (38,816 B against 38.85 KB) and is not raised. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
seat.ts: next's #4452 netted rows (D1''/L1''/V3'') and this branch's early netted return meet; the early return keeps next's row ids. D-23 Status: the #4485 pin note becomes the fixed note. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
🦋 Changeset detectedLatest commit: 31d7847 The changes in this PR will be included in the next version bump. This PR includes changesets to release 15 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Size (brotli, eager entry chunk)
|
Coverage Report for CI Build 41126172154Warning Build has drifted: This PR's base is out of sync with its target branch, so coverage data may include unrelated changes. Coverage remained the same at 78.1%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
|
Size gate ( CodSpeed on 0001839 flags one bench, Generated by Claude Code |
Merging this PR will improve performance by 14.22%1 warning
Performance Changes
Tip Curious why performance improved? Comment Comparing Footnotes
|
…lue's call site Restores read's single return-the-screen tail (the netted staging returns the committed value through it, shadow slot P) and moves the D-8 netted route out of provisionalVerdict into its one caller in verdictValue, so provisionalVerdict keeps its old signature. No behaviour change: signals 6103 passed / 15 expected fail; web 1581 passed / 7 expected fail. Pins #4367's re-pinned frames exactly (run counts included) instead of de-duplicated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
…4499, #4500, #4493, #4488, #4498) (#4507) next @ b5077ea is over six caps after the batch merged back to back (each fix PR carried no ledger edits, per the batch process). Re-records, measured over next @ b5077ea (linux): - signals: + createStore: 14.97 -> 14.99 KB, minified 43,924 -> 43,956 - signals: + isPending/latest: 11.29 -> 11.35 KB, minified 31,101 -> 31,245 - app: compiled CSR: 26.33 -> 26.36 KB, minified 80,035 -> 80,074 - page: live server components (frozen floor): 38.98 -> 39.10 KB, minified 117,858 -> 118,033 - page: compiled live server components: 42.95 -> 43.01 KB, minified 126,018 -> 126,181 - page: live + router: 48.58 -> 48.65 KB, minified 143,269 -> 143,439 and the recorded minified only (caps unchanged) where the batch drifted more than 20 B: hydrating + every store (98,535 -> 98,561), compiled hydrating (100,803 -> 100,836), base server components (frozen, 101,675 -> 101,706), compiled base server components (108,048 -> 108,081), base + router (125,503 -> 125,539). Hello world is 9,971 B (cap 9.98 KB). The build leaves the pinned mangle-props.json unchanged. Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2 Co-authored-by: Claude <noreply@anthropic.com>
Before: when an action opens a hold and, in the same tick, a signal is written and written back to its committed value (
setS(2); setS(1)), a render effect reading[s(), isPending(s)]showed[1, true]for the whole hold, then re-ran at the landing as[1, false].After: the effect shows
[1, false]at once and does not re-run at the landing. Writes that net made no proposal (D-8), so the reader is not the hold's stale reader.How:
read's plain arm now checks netting before the verdict-readerstagedScreenarm.provisionalVerdicttreats a netted signal staging as final: the reader is still the tick's verdict reader and is shown now (D-25), but it is not re-run at the landing. The test-only seat table gets the same netted check on its plain staged rows. #4367's opening tick is the same netted tick, so its interimpendingframe is re-pinned to the D-8 screen (F). Its settle after the later writes is unchanged. RULES-DERIVED D-23's Status line records the fix.Rules: D-8 (netted writes made no proposal), D-23 (stale reader of the tick's hold), D-25 (posture is the pass's), F-9.
Tests:
tests/netted-verdict-reader-4485.test.ts(wasit.fails, now passing); #4367 re-pinned in signals and web. Signals 6082 passed / 15 expected fail; web 1579 passed / 7 expected fail.Size (client, vs next 643a7a7; no ledger edits in this PR):
Every other scenario is unchanged. Hello world stays at 9,973 B. The measurement is deterministic across two builds.
Closes #4485
Generated by Claude Code