Parity ledger · scenescript-web @ f5ce242 · Adam amendment 3
What the product actually is
Khoa’s direction, via Tom: stop designing from written specs, go look at the running
product and port what is there. This ledger was built in two passes — first from
source at the exact commit staging serves while the app was down, then corrected by
walking the signed-in product once it came back. Both passes are recorded, including where
the first was wrong, because the difference between them is the most useful thing on this page.
Corrected by walking the running app. This ledger was first
built from source alone, because staging was down with a billing outage. Vercel is now restored
and I have walked the product signed in. The largest claim below was wrong and is fixed in
place: I reported that /film/:filmId renders three tabs, read from
film-detail.tsx. It does not. The live Analyze page renders a
six-step narrative spine — 01 Identity · 02 Shot grammar · 03 Rhythm · 04 Dialogue ·
05 Evidence · 06 Use as a style — with a persistent Instrument Readout pane on the right.
film-detail.tsx is a Studio component, not the Analyze route.
Reading the file the brief points at is not the same as reading the route.
Resolved — kept as the record. For about an hour the
running product was down, and not only staging.
staging.wideshot.app, wideshot.app and
www.wideshot.app all return HTTP 402 with
x-vercel-error: DEPLOYMENT_DISABLED.
greenpen.app and mentalmodelhub.com return the
same. emubrain.com is up, so the Floor cockpit is unaffected. That is
Vercel’s billing shutdown, and it matches the organisation spend limit Adam reported on
PR #78 for GitHub Actions — now reaching live product surfaces rather than only CI.
Escalated to Adam as T1, who confirmed it: the EmuBrain Pro team billing status was
overdue, disabling production and staging frontends fleet-wide while the Railway APIs stayed
healthy. It is now restored — every host above returns 200 — and the walk below was
done after that. Kept here rather than deleted, because it is why the first pass was
source-only.
1 · The finding that changes the plan
The ratified route map describes a product that does not exist.
Amendment 9 §1 — which Adam ratified and I have been designing against —
maps /create/unit, /create/:runId/plan,
/my-work and /admin/bench. In the source at
f5ce242, every one of those path roots is absent: there is no
/create, no /my-work, no
/admin, no /warroom, no
/unit. Meanwhile the product’s real second workspace,
/studio and /studio/[filmId] — whose
branch is literally named feat/studio-routing-phase2 and which carries
6,754 lines across 21 components — does not appear in the ten-surface checklist or in
my route map at all.
I am not proposing we adopt the current routes uncritically; a redesign is allowed to
move them. But a parity ledger cannot mark routes carry/replace/retire against a map that
was never derived from the product, and I should have caught this when I wrote the map. Flagging
for Adam, because the route map is a ratified contract item.
2 · Route inventory — every page and handler at f5ce242
Ten pages, four API handlers. Evidence is the path in
emubrain-studio/scenescript-web at that commit.
3 · The Analyze page is not what the brief describes
This is the surface Khoa most wants to see, so it is worth being exact. Three sources disagree,
and the source of truth is the last one.
Everything in this section is true of the file and false of the
route. It is kept because the mistake is instructive: the brief said “Analyze film page
= film-detail.tsx”, I verified the file carefully, and the file was not the page. Verifying
the wrong artifact thoroughly still gets you a wrong answer.
Three tab triggers exist in 3,559 lines.
FILM_DETAIL_TABS (line 130) declares eight; the rendered
TabsList (line 3508) contains exactly three — Script spine,
Generated Output, Cuts. The evidence workbench that the brief says is included is
commented out at line 3551. Five declared tabs render no trigger at all, and
review — named in the brief — is not in either list.
The consequence for my own earlier work: the R1 Analyze redesign collapsed
“four peer tabs” into one narrative spine. The product does not have four peer tabs;
it has three, one of which is a spine already, and a conditional tab model
(FilmDetailTabContext, line 143) that varies the set per film. A design
that flattens tabs the product computes conditionally would fight the product rather than port
it.
3b · The top-level IA is two modes, and neither of us had it
Analyze and Create. A 56px icon rail on the far left switches between
Analyze — real films → measured grammar — and Create —
grammar → generated films. That single line is the clearest statement of what this
product is that exists anywhere, and it is on the running app rather than in any brief. The
Directors nav item is not a route: it is
/studio?contentType=director. Studio itself carries Projects · Cuts · Media tabs.
My pack's IA — crew room → plan → analyze → cuts → re-cut —
does not map onto this, and my drawer would displace a pane the product already uses for the
Instrument Readout. I am not proposing we keep the current shape uncritically, but a redesign
should know it is moving a working two-mode IA, not filling an empty one.
4 · What the ten-surface checklist missed
Tom asked for these explicitly: “anything you find in the running product that my
ten-surface checklist missed is a finding I want, not a scope problem.” There are several.
5 · Deep links that actually exist
My contract map proposes ?fan=, ?scene=,
?shot=, ?school= and friends. The parameters
the product actually reads are these — and only these.
6 · Where this leaves the design work
I have not designed Analyze in this round, deliberately. The brief was to
port what is there, and what is there contradicts the route map I would have hung it on. Designing
a film page against a /create/* hierarchy that does not exist would
produce a handsome mock that no build could adopt — which is the failure this whole
exercise was meant to prevent. The ledger is the deliverable that unblocks the design, and it
needed to come first.
What I need before Analyze: a ruling on whether the design keeps the product’s
/studio + /film structure or the map’s
/create/* structure. That is an architecture question, not a taste one,
so it is Adam’s with Tom’s input rather than mine to pick.
Read-only throughout: I browsed no
running surface (none was reachable), created nothing, started no run, spent no credits and
touched no account settings. Source was read at a pinned commit in a scratch clone, never in a
shared checkout. QA risk tier: T3 — analysis and mocks. No production action taken.