commit b0d77057b5c08feea65e2ec1e1e00975d5e85051
parent c49b42b9ca5e7c8afe5fe3ee8c96eaaa350ee8c1
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Mon, 7 Sep 2026 22:50:40 -0400
editor: the dashboard arms a lane without discarding its rules
`armLaneAction(lane, {})` is not the same call as `armLaneAction(lane)`: an
empty scope object is still a scope, so the deck was writing a catch-all root
over whatever tree an operator had authored on the lane's console. Three channel
rules, one click on the dashboard, gone — and disarming would not bring them
back.
The button it replaces did the opposite: `startDigestSweepAction()` with no
argument inherited `sweepChannels` off disk, so a narrowed sweep stayed narrowed.
That behaviour is restored by passing no scope at all, and the label follows the
truth — "Run the lane" rather than "Run every channel", because on a narrowed
lane every channel is not what it would do. The aria-labels are unchanged.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/editor/app/components/lanes/LaneDeck.tsx b/editor/app/components/lanes/LaneDeck.tsx
@@ -27,8 +27,14 @@ import { armLaneAction, disarmLaneAction } from "../../jobs/actions";
// backfill are catch-up over a corpus that already exists, so theirs also carry
// the switch that arms the lane — which since slice 1.3 writes
// `autoQueue[lane].enabled` and starts the runner, where it used to arm a sweep.
-// The SCOPE is the lane's tree and is authored on its console; from here the
-// switch means the whole corpus, exactly as "Sweep every channel" did.
+//
+// IT PASSES NO SCOPE, and that is the important half. `armLaneAction` writes a
+// tree when it is given one and keeps the stored tree when it is not, so a click
+// here cannot discard rules somebody authored on the lane's console — which is
+// also what the button it replaces did (`startDigestSweepAction()` with no
+// argument inherited `sweepChannels` off disk). The label says "the lane" rather
+// than "every channel" for exactly that reason: on a narrowed lane, every
+// channel is not what it would do.
export function LaneDeck({
workers,
@@ -230,13 +236,13 @@ export function LaneDeck({
}
: {
key: "digest-arm",
- label: "Run every channel",
+ label: "Run the lane",
glyph: "⟳",
ariaLabel: "arm digest lane",
title:
- "Switch the digest lane on across every channel and start its runner. Survives a restart. To scope it to particular channels, use the rules on the digest operation page.",
+ "Switch the digest lane on and start its runner, on whatever its rules claim — every channel unless somebody has narrowed them. Survives a restart. The rules are on the digest operation page.",
variant: "idle",
- action: () => armLaneAction("digest", {}),
+ action: () => armLaneAction("digest"),
onChange: onSynced,
},
];
@@ -366,13 +372,13 @@ export function LaneDeck({
}
: {
key: "backfill-arm",
- label: "Run every channel",
+ label: "Run the lane",
glyph: "⟳",
ariaLabel: "arm backfill lane",
title:
- "Switch the backfill lane on across every channel and start its runner. Survives a restart. To scope it to particular channels or operations, use the rules on one of its operation pages.",
+ "Switch the backfill lane on and start its runner, on whatever its rules claim — every channel and every operation unless somebody has narrowed them. Survives a restart. The rules are on any of its operation pages.",
variant: "idle",
- action: () => armLaneAction("backfill", {}),
+ action: () => armLaneAction("backfill"),
onChange: onSynced,
},
pauseLaneControl({