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
fix(showcase): seed all five projects through the FSM, and surface seed outcomes in the boot banner (#3415)
The project seed wrote terminal statuses directly on insert, but
project_status_flow gates inserts to initialStates: ['planned'] — so 4/5
projects, 9/10 master-detail tasks and 3/3 memberships were rejected on
every boot, silently: SeedLoader's logs sit under the default warn level
AND inside serve's boot-quiet stdout window.
Fixture: seed projects in three phases. Phase 1 inserts all five as
'planned' (explicitly — seed inserts do not apply select defaults) with
mode 'ignore' so replays leave walked rows untouched; phases 2-3 then walk
them along legal transitions (planned→active→on_hold/completed), doubling
as a live FSM demo. A new 'completed → active' reopen transition (a real
PM affordance — cancelled could already be revived) keeps the walk legal
on replay. Fresh boot: 5 projects across four statuses, 10 tasks, 3
memberships, zero rejections; replay preserves walked states.
Surfacing: AppPlugin stashes per-boot seed counters on the kernel
('seed-summary'); the serve banner prints 'Seeds: X inserted · Y updated
· Z skipped', escalating to a yellow '⚠ … N REJECTED' line when rows
dropped — before the fix that line read '114 inserted · 30 REJECTED',
after it reads '130 inserted · 6 updated'.
Gates: seed.test.ts now statically replays every FSM-gated object's seed
phases (two rounds — fresh boot AND replay) against initialStates and
transitions; format.seed-summary.test.ts covers the banner contract. Both
proven red against the old fixture / a dead-end terminal state.
Known pre-existing follow-up (#3434): mode:'insert' datasets (memberships)
duplicate on every replay boot — masked until now because the rows never
inserted at all.
Closes#3415
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Surface seed outcomes in the `os dev` / `os serve` boot banner (#3415). Seeds run inside the boot-quiet stdout window and SeedLoader's logs sit under the default warn level, so a fixture could silently lose most of its rows — the showcase shipped 1 of 5 projects with zero terminal signal. AppPlugin now stashes the per-boot seed counters on the kernel (`seed-summary` service) and the banner prints `Seeds: X inserted · Y updated · Z skipped`, escalating to a yellow `⚠ … N REJECTED` line when records were dropped.
0 commit comments