The app is now fixture-free. All product screens render live data (via the
reconcile bridge + view builders) or an EmptyState — no hardcoded demo data,
metrics, or prose anywhere in the UI.
- Removed the `?? FIXTURE` fallbacks and embedded fake strings (fixed dates,
'reconcile 3.2s', 'ahead of forecast', mock forecast prose) from all 10 product
screens; each now shows an EmptyState when its live data is absent.
- directives-screen: fully live off pmstate.directives() (was seeded from a
fixture with a fake consequence-diff card) — loading + empty states, no seed.
- use-chat: drop the CHAT seed (the model-status effect already sets the greeting).
- data/fixtures.ts → data/view-types.ts: stripped every const design fixture,
kept only the view-model TYPES (the builder↔screen contract). Repointed imports.
Testing fixture (no live gitea), per the user's call:
- New apps/desktop/src/main/demo-snapshot.ts — one deterministic, gitea-shaped
snapshot (issues/milestones/deps/timelines + capacity + directives + collaborators).
Served by the reconcile/boot/collaborators/capacity/directives handlers when
COMMITEA_E2E=1, so e2e renders it through the REAL builders with no token.
- smoke.spec rewritten to assert on the demo snapshot through the live render path;
onboarding/offline-toggle assertions dropped (wizard is live → live-onboarding;
offline is real state now). 12/12 smoke pass.
Verify: core tsc clean · desktop tsc clean · 12/12 smoke green (perf#32 benchmark
flakes under machine load — unrelated, passes in isolation).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>