Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit ecc096ccc5f507f7342acc5f9a688f7278f4d48b
parent becadcda1ec1de85ae019f90ab59253a8b4b57bc
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Wed, 26 Aug 2026 17:35:27 -0400

editor: the lane form must not say "the plan" — the console beside it does

Moving the lane settings inside `section[data-lane]` put its explanatory
paragraph in the same scope as the sweep console's own heading, and the
paragraph still ended "...so it lives with the plan it produces". `getByText`
matches substrings, so `backfill.spec.ts:484` — which scopes `The plan` to that
section precisely because the plan is the thing being read before a sweep is
armed — resolved to two elements and failed on strict mode. The paragraph says
"beside the itinerary they draw" instead, and a comment marks the phrase as
off-limits in that file so the next edit does not walk back into it.

Also keys the two settings slots. A React element created in a SERVER component
and rendered by a client component arrives in that component's children array
with dev-only key validation still pending, and React warns naming
`SweepOperationView` — a render method that did not create the element. A key
short-circuits the check.

backfill.spec.ts, auto-subs-replace.spec.ts and cadence-ui.spec.ts: 28/28, with
no key warning in the log. The other two failures in the first full run
(auto-subs-replace.spec.ts:394, cadence-ui.spec.ts:212) were timeouts and pass
on a re-run untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Diffstat:
Meditor/app/operations/[id]/page.tsx | 25++++++++++++++++++++++---
Meditor/app/operations/components/settings/LaneSettingsForm.tsx | 11++++++++---
2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/editor/app/operations/[id]/page.tsx b/editor/app/operations/[id]/page.tsx @@ -68,15 +68,32 @@ function settingsFormFor( digestApps: DigestAppDescriptor[], ) { switch (block) { + // KEYED, though none of these is in a list. An element created in a SERVER + // component and handed to a client component to render lands in that + // component's children array already deserialized, with React's dev-only + // key validation still to run over it — and it warns, naming a render + // method that did not create it. A key short-circuits that check. It costs + // nothing and it is the difference between a clean console and a warning + // that sends the next reader to the wrong file. case "digest": return ( - <DigestSettingsForm initial={settings.digest} digestApps={digestApps} /> + <DigestSettingsForm + key="digest" + initial={settings.digest} + digestApps={digestApps} + /> ); case "diarization": - return <DiarizationSettingsForm initial={settings.diarization} />; + return ( + <DiarizationSettingsForm + key="diarization" + initial={settings.diarization} + /> + ); case "attribution": return ( <AttributionSettingsForm + key="attribution" initial={settings.attribution} digestApps={digestApps} /> @@ -145,7 +162,9 @@ export default async function OperationPage({ // no equivalent — its lane facts (`sweepEnabled`, order and reach) live in the // digest block and the OrderReach control. const laneSettings = - laneId === "backfill" ? <LaneSettingsForm initial={settings.backfill} /> : null; + laneId === "backfill" ? ( + <LaneSettingsForm key="backfill-lane" initial={settings.backfill} /> + ) : null; const laneJobKinds = runnerKind || !laneId ? [] : JOB_KINDS_BY_LANE[laneId]; diff --git a/editor/app/operations/components/settings/LaneSettingsForm.tsx b/editor/app/operations/components/settings/LaneSettingsForm.tsx @@ -53,10 +53,15 @@ export function LaneSettingsForm({ </strong>{" "} That scope has to be written at the moment the sweep is armed — a scope saved separately would be resurrected as a corpus-wide run by - the next restart &mdash; so it lives with the plan it produces, in the - sweep controls directly above, where you can read the itinerary before - committing to it. + the next restart &mdash; so it lives in the sweep controls directly + above, beside the itinerary they draw, which is what lets you read the + commitment before making it. </p> + {/* DELIBERATELY NOT THE WORDS "the plan". That phrase is the heading of + the sweep console this paragraph points at, and this form now + renders inside the same section — backfill.spec.ts scopes + getByText("The plan") to section[data-lane], and a second match + here is a strict-mode violation, not a near miss. */} <label className="flex items-start gap-2 text-sm"> <input type="checkbox"