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:
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 — 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 — 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"