You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 82b2437
Browse filesBrowse the repository at this point in the historyBrowse files
autonomy: the question rules are asked off the update loop, and a row without them says nothing rather than "ask me"
#919 brought the offLoop law to dev and my four call sites break it: reading the
rules when the settings page opens, writing one on a keystroke, and the two
reads behind /autonomy. Every one is a call to another process — bare `aforge`
talks to its engine over a socket — made from Update, where the window cannot
draw, take a key, or hear its own answer.
THE READ IS NOW ONE PREFETCH. app.readAutonomy is in Init's standing list, so
neither the page nor a raised question ever pays a round trip, and autonomyRuled
reads the cache and never the door. Its fold RE-STAMPS THE QUESTIONS ALREADY
OPEN, because WatchQuestions replays everything waiting the moment a surface
attaches — the ordinary resume path raises questions before the rules land, and
`ruled` is the tail of a running countdown (`start it in 9s · your rule`). A
clock with no reason on it is DESIGN.md's NEVER A HIDDEN RULE.
THE WRITE DECIDES WHAT IS SEEN IMMEDIATELY AND REPAIRS ITSELF ON A REFUSAL,
which is offloop.go's own pattern: the row moves on the keystroke, the engine is
asked off the loop, and a refusal puts the row back with the engine's sentence.
AND NIL NO LONGER MEANS TWO THINGS. It meant both "no project to keep rules in"
and "not read yet", so the page drew no rows at all in the instant before the
first answer — and coercing it to an empty map draws `ask me` on every row of a
project that may be on `decide`, which is the worst sentence this page can say.
Whether the door EXISTS is a type assertion, local and free (sheet.autonomyDoor);
what it SAYS is the call. So the rows are there from the first frame and a row
whose value has not arrived draws an empty column.
Co-Authored-By: Claude Opus 5 <[email protected]>
0 commit comments