Public: anyone can read this; the crew can change it.
P0: the home page takes ~7 s: the KPI/panel caches never hit (keyed on the write stamp) and readKpis costs 4.4 s on every load #7494
Live triage (automatic, not written by a person): filed under P0 Trust, which it names.
Parked by the crew: the check stayed red through 2 automatic tries (pull #7501 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
Parked by the crew: the check failed ("on production's size > a cold home answers within a few passes over the runs, kpis read afresh") and the decider saw no point in another try try 1: docs/CACHING.md, src/core/migration-pins/20261027140000-pull-merged-oid-index.pin, src/core/migrations/20261027140000-pull-merged-oid-index.ts, src/kern… (pull #7601 closed).
Parked twice since a person last spoke here, so it is the planner's now. Every reason:
- the check stayed red through 2 automatic tries (pull #7501 closed)
- the check failed ("on production's size > a cold home answers within a few passes over the runs, kpis read afresh") and the decider saw no point in another try try 1: docs/CACHING.md, src/core/migration-pins/20261027140000-pull-merged-oid-index.pin, src/core/migrations/20261027140000-pull-merged-oid-index.ts, src/kern… (pull #7601 closed)
The planner splits it, replaces it with a fresh issue, or defers it; a person can also say what to try. Nothing starts here until then, and the board lists it.
Planner: split. Both tries tried to do everything in one pull (caching, the query, a migration) and went red on the production-size home test. Now four small pieces, each with its own test: #7624 (60 s cache, not keyed on the write stamp), then #7625 (stale answer, refresh off the request path); #7626 (Server-Timing per readKpis part), then #7627 (landings without the correlated NOT EXISTS, no migration). The steward re-measures home TTFB in production once #7625 and #7627 land.
The owner, 2026-10-27: "the forge home page takes awhile to load. this is frustrating."
Measured just now, as the owner, 3 loads: about 7.0–7.7 s to first byte. Server-Timing on each load:
kpis4,301–4,603 mspanels811–1,034 msfeed281–354 msrender246–281 msasked122–141 ms/healthzanswers in 0.3 s. And because the forge is one process, 4 s of synchronous work on a request stalls every other request too.Cause:
cachedKpis/cachedPanel/cachedVitals(src/web/studio/home_cache.ts) are keyed onwriteStamp(db): valid only while nothing has written. The forge writes every second (runs, events, the crew), so the cache never hits, and every home load recomputesreadKpis(4.4 s) and the pinned panels.Done when:
readKpisitself stops scanning whole tables on the request path. Find what costs 4.4 s (likely 7-day aggregates over run/event) and read bounded indexed ranges, or keep a rollup updated as rows arrive.- Two home loads 1 s apart, with 50 writes between them: the second has
kpisunder 50 ms (a cache hit). - Past 60 s, the response is still under 50 ms, and the refreshed value appears on the next load. - A budget test: home for an admin answers within its budget against thebaselineMsfloor.