Skip to content

GUESS_WHILE_LOADING (AC-3a), with round 12's results and the XState arm - #53

Merged
ryansolid merged 26 commits into
mainfrom
claude/project-thread-t6465s
Nov 12, 2026
Merged

ryansolid merged 26 commits into
mainfrom
claude/project-thread-t6465s

Conversation

@ryansolid

Copy link
Copy Markdown
Member

The check

GUESS_WHILE_LOADING (spec 06 AC-3a) is Solid's OPTIMISTIC_WRITE_WHILE_LOADING (solidjs/solid#4795, #4797) at compile time.

What goes wrong. While x loads a new question, a guess on it composes on the previous answer. When the new answer lands it replaces the guess (D-34), so the user's change disappears while its action is still out.

When it fires. A handler guesses x and x's question reads something the click reads. The guess can be in the handler, an inferred or inline action, or a named action the handler calls. What the click reads is a selection or a row, for example.

When it doesn't. The handler is covered as in R-8:

  • the element sits inside x's loading region; or
  • the element is disabled on x; or
  • for a form's onSubmit, every submit button is disabled on x.

The message offers Solid's repairs. The check follows the principle that a write must not read stale state.

Evidence from round 12:

  • It flags 8 handlers in 5 .rx apps. A browser probe (select an issue, then rename or post while it loads) loses the change in every flagged app and in none of the unflagged ones. The probe is in eval/results/desk12-2026-11-11/repro/.
  • It also fired on the eval's own references and on examples/ai/feed.rx. Those now disable the control while its value loads. Every reference still passes all its visible, hidden and overlap tests.

Checks run:

  • cargo test passes, including the diagnostics page and a new unit test.
  • ref npm run crate: the crate agrees with ref on all 351 programs.
  • ref npm test passes.
  • ref npm run compiled: 4 fails, the same 4 as on the branch without this change.

Also on this branch

Eval:

  • XState arm, and the XState side-check results.
  • Round 12: frozen pre-registration and results in eval/results/desk12-2026-11-11. Two Solid bugs traced, #4786 and #4787. Includes the plain-Solid repro for #4795.

Guide:

  • A guide line on guessing a prop.
  • "Guess only on a value that is shown", in general wording, following the #4795 ruling.

Generated by Claude Code

claude added 26 commits November 8, 2026 10:08
PREREG-desk-11 (DRAFT): round 10's design again on Solid next 2789ca9c
(every eval bug fixed, #4689 included) with the current guide. H11a
replicates H10a; H11c compares frontier .rx with frontier React. The
brief now says the detail's retry button is always present while an
issue is selected, which round 10 left unclear (25 of 36 desks failed
the rename-reload overlap test over it).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
A whole guess on an optimistic store (optimistic rows := rs => rs.map(...)) was written into the draft index by index,
which replaces each matched row object. It is now the setter's return, which Solid diffs shallowly against the view as
guesses. Clears round 10 rx-8 fuzz seed 3 on next 2789ca9c; the other 11 desks grade unchanged. Gate result recorded
in PREREG-desk-11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
…; prereg says so

The overlap test 'two issues assigned at once' required the declined row to revert while the other assignment was
still out. A list held whole until both settle is a legal hold, not a defect, so the test now checks that the decline
leaves the other row alone and that both rows are right once everything has answered. PREREG-desk-11 states that only
defects are counted and that round 10's numbers are regraded the same way (without the brief-caused retry test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
…12 notes it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
…ep a write from going out early

The rule was listed under 'things that look like bugs and aren't' with an
optional fix, so agents treated a void guess (D-34) as acceptable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
…sed layer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
58 of 60 round 12 apps (every arm) keep the rename editable while the detail
loads, so that is fair UX; the guide lists the three fixes without ranking them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
…don't send it')

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
…s nouns

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
…wser probe and plain-Solid repro

The check fires when a click starts a guess on a value that may have no answer yet,
whose question reads what the click is about, and the control is neither inside that
value's loading region nor disabled on it. Over round 12's .rx apps it flags 8 sites,
all of which lose a change in the browser probe. Off unless RX_PROTO_GBS is set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
… loads a new question

Follows Solid's ruling on solidjs/solid#4795 (OPTIMISTIC_WRITE_WHILE_LOADING, at
compile time): while x loads a new question a guess composes on the previous answer
and the new answer replaces it (D-34). A handler that guesses x, where x's question
reads what the click reads, must be covered as in R-8: inside x's loading region, or
disabled on x (for a form's onSubmit, its submit buttons).

Round 12: flags 8 handlers in 5 .rx apps; the browser probe loses the change in every
one and in no unflagged app. It also fired on the eval's own references and on
examples/ai/feed.rx, which now disable the control while it loads; every reference
still passes its visible, hidden and overlap tests. Spec 06 AC-3a, both diagnostics
tables, a diagnostics.md section, a unit test; the guide line follows the ruling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117BoWKEv4MghW8Ns9LeUUX
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​xstate/​react@​6.1.01001008494100
Addednpm/​xstate@​5.32.610010010098100

View full report

@ryansolid
ryansolid merged commit 607b51c into main Nov 12, 2026
17 checks passed
ryansolid pushed a commit that referenced this pull request Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants