The front door is the slowest page on the forge because it asks the decider about every ask card while the person waits.
Measured against production, same session, same machine: / in studio mode takes 344-697 ms for 101 KB, while /?mode=dev takes 128 ms and /trevato/forge takes 127 ms. studioHome calls withLikely (src/web/pages/studio.ts), which per ask card asks the decider which option a careful owner would pick, with an 800 ms budget each — eight cards on this forge today, every render, cached nowhere. The lean is worth showing; it is not worth the first paint, and the studio cannot be the default front door while it costs half a second (#28).
Done looks like
[ ] Rendering the studio home and the studio app page makes no decider call in the request path: the page is built from leans already known.
[ ] A lean is remembered against the thing it is about — the pull's head commit and the card's kind — so a lean survives a reload and is dropped when the head moves. The decision ledger (src/core/decisions.ts) is where it belongs if it fits; a new table needs a sentence saying why.
[ ] A lean that is not known yet is asked for off the request path, and the card renders without it; no layout shift when it arrives on a later render.
[ ] A forge with no decider configured behaves exactly as today (no leans, no change in wording).
[ ] With a decider that sleeps 800 ms, a test asserts the studio home responds in well under that, and that the second render shows the lean the first render asked for.
[ ] test/decide.test.ts or test/studio.test.ts covers: lean stored per head, lean ignored once the head moves, and no decider call during a render.
[ ] docs/STUDIO.md says when a lean appears and that it is never in the way of the page.
Files I expect to change
src/web/pages/studio.ts (withLikely becomes a read plus a request off the path), src/core/decisions.ts, src/crew/decide.ts if the asking moves there, test/studio.test.ts, test/decide.test.ts, docs/STUDIO.md.
Risks
A lean shown for a head that has moved is worse than no lean: key it on the head oid and drop it with the head.
Asking off the request path must not become an unbounded fan-out of decider calls — one in flight per card at most.
decisionsFor still does per-pull point queries in a loop (activeRunFor, lastHumanWord, automaticRunsSince, latestDecision); that is real but separate, and worth its own issue with bench/run.ts numbers.
Suggested: Scout — a small, measurable change on one page, with the tests that prove the wait is gone.
The front door is the slowest page on the forge because it asks the decider about every ask card while the person waits.
Measured against production, same session, same machine:
/in studio mode takes 344-697 ms for 101 KB, while/?mode=devtakes 128 ms and/trevato/forgetakes 127 ms.studioHomecallswithLikely(src/web/pages/studio.ts), which per ask card asks the decider which option a careful owner would pick, with an 800 ms budget each — eight cards on this forge today, every render, cached nowhere. The lean is worth showing; it is not worth the first paint, and the studio cannot be the default front door while it costs half a second (#28).Done looks like
src/core/decisions.ts) is where it belongs if it fits; a new table needs a sentence saying why.test/decide.test.tsortest/studio.test.tscovers: lean stored per head, lean ignored once the head moves, and no decider call during a render.docs/STUDIO.mdsays when a lean appears and that it is never in the way of the page.Files I expect to change
src/web/pages/studio.ts(withLikelybecomes a read plus a request off the path),src/core/decisions.ts,src/crew/decide.tsif the asking moves there,test/studio.test.ts,test/decide.test.ts,docs/STUDIO.md.Risks
decisionsForstill does per-pull point queries in a loop (activeRunFor,lastHumanWord,automaticRunsSince,latestDecision); that is real but separate, and worth its own issue withbench/run.tsnumbers.Suggested: Scout — a small, measurable change on one page, with the tests that prove the wait is gone.