Archilyzer · Source

archilyzer

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

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:
Meditor/app/components/lanes/LaneDeck.tsx | 22++++++++++++++--------
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({