doc-update: gascity-routing-model.md — the --on <formula> sling is an undocumented fourth delivery path: it routes the WISP ROOT (so the work bead legitimately has no gc.routed_to) and its --reassign is IsFormula-gated, leaving assignee residue that makes the bead invisible to pool demand (tk-wd9do)#223
doc-update: gascity-routing-model.md — the --on <formula> sling is an undocumented fourth delivery path: it routes the WISP ROOT (so the work bead legitimately has no gc.routed_to) and its --reassign is IsFormula-gated, leaving assignee residue that makes the bead invisible to pool demand (tk-wd9do)#223zook-bot wants to merge 2 commits into
--on <formula> sling is an undocumented fourth delivery path: it routes the WISP ROOT (so the work bead legitimately has no gc.routed_to) and its --reassign is IsFormula-gated, leaving assignee residue that makes the bead invisible to pool demand (tk-wd9do)#223Conversation
…sling as Lane 4, correcting two inverted claims (tk-wd9do) The brief is the authority on which routing field each delivery path sets, but its lanes covered only the bare sling, the direct `--assignee` write, and `--reassign`. The formula sling was an undocumented fourth path. Adds Lane 4 plus three subsections: the graph.v2 duplicate-wisp trap, the standalone-launch contrast, and why assignee residue strands a routed bead. Re-verifying at the pinned revision (the bead asked for this explicitly) showed the filing bead's two central claims were INVERTED. Both are corrected here; the doc states the verified behavior, not the premise: 1. Bead: "`gc.routed_to` lands on the WISP ROOT, not the target bead." Actual: `--on` routes the SOURCE bead and deliberately leaves the wisp root unrouted. `TestOnFormulaAttachesAndRoutes` (cmd/gc/cmd_sling_test.go:4105) asserts both halves; sling_core.go:488 says "Do not 'fix' this to wispRootID — it would orphan the work" (gastownhall/gascity#2848). Routing the root is the STANDALONE LAUNCH shape (slingFormula, sling_core.go:373) — the path the premise actually describes. 2. Bead: "`--reassign` is IsFormula-gated on this path, leaving assignee residue." Actual: `--formula` and `--on` are mutually exclusive (cmd_sling.go:158) and AttachFormula leaves IsFormula false (sling.go:326), so `shouldReopenForReassign` runs normally on `--on`. The guaranteed no-op is a standalone LaunchFormula — exactly what upstream's own comment says (sling.go:273-279). The bead's operational conclusion still holds, via a different mechanism worth documenting: a graph.v2-attached work bead really does show no `gc.routed_to` and no assignee while fully dispatched — not because routing moved to the wisp root, but because the graph path returns before the routing call (sling_core.go:477-481 -> doStartGraphWorkflow). Re-slinging on that misread still pours a duplicate wisp. Claim 3 (pool demand counts routed AND unassigned) verified as stated: workquery.go:41-43. Scope note: cites canonical gastownhall/gascity only, pinned at upstream/main 1dbf0731e. Per the operator ruling on the sibling PR #209 ("do not commit details about fork local routing models"), no fork-local content is added — all four behaviors were differentially confirmed identical in fork and upstream, so the canonical citation is also correct for the running city. Stays out of Lane 1/Lane 3 assignee semantics, which are tk-qxocm's territory.
…after Lane 4 (tk-wd9do rework)
Pre-open signoff (tk-sbxze) requested changes: after Lane 4 was added,
two count references still read "three":
- the targetless-resolution intro ("All three lanes above name an
explicit target")
- the upstream-tutorial note ("does not cover the broader three-lane
model")
Both now say "four", consistent with the "## The four lanes" heading.
Docs-only, no behavioral change.
|
Codex signoff (pre-open, comment-only — not an approval): COMMENT on pre-open branch No blocking findings. Rework tk-52mw8 fixed the prior review issue: no stale Verified the corrected Lane 4 content against local Gas City commit Validation: Review artifact: /tmp/compound-engineering/ce-code-review/20260724-051401-14521167/ |
Summary
Target
Change
gc sling <target> <bead> --on <formula>) to the brief'slane taxonomy as its own delivery path, and state its field contract. The brief is
the authority on "which routing field each delivery path is responsible for setting",
but its three lanes only cover the bare sling, the direct
--assigneewrite, and--reassign; the--onpath behaves differently on BOTH fields:gc.routed_tolands on the WISP ROOT, not the target bead. The routed bead isthe wisp root (title = the formula name); the work bead legitimately shows
gc.routed_toabsent andassigneenull even while it IS dispatched. That shape isnormal, not evidence of a stranded/undispatched bead — and re-slinging on that false
read creates a DUPLICATE wisp (two workers converging on one shared worktree). To
check dispatch, look for the wisp root, not the work bead's routing.
--reassigndoes not clear the assignee on this path. The clear(
reopenForReassignInStore) is gated byshouldReopenForReassign = opts.Reassign && !opts.IsFormula && !opts.DryRun, andupstream's own comment on the field calls
--reassign"a guaranteed no-op on afresh LaunchFormula, whose IsFormula route is skipped by shouldReopenForReassign".
Lane 3 currently states the assignee clear unconditionally, and the
--reassignidempotency subsection tells callers to "pass
--reassignunconditionally and trustthe routing call to be safe" — both need the formula-route caveat.
scale_checkdemand query countsonly routed beads that are unassigned, so a formula re-pour that leaves assignee
residue is invisible to demand and no worker spawns. A live worker's
gc hookpollpicks up routed+open beads regardless of assignee, so the stall shows up only when
the pool is at zero — which is exactly when it is hardest to spot.
writing (the memory entry cites
internal/sling/sling_core.go~303-305 and ~1681-1695and
internal/sling/sling.go~273-277); cite what you confirm, not the rememberedline numbers.
tk-qxocmalso edits Lane 1 / Lane 3 assigneesemantics (bare sling now clearing a stale assignee). Distinct provenance and a
distinct claim, but the same lines — check whether it has landed and rebase/fold the
wording rather than contradicting it.
named brief(s). If the entry carries operator PII, internal URLs, or absolute home
paths, paraphrase rather than promoting verbatim. If review shows the fact is already
covered or does not belong, close as a no-op.
Provenance
--onformula-slingdelivery path's field contract — the doc's distinctive charge — but the brief has no
coverage of it (no
--onlane; "wisp" appears once, incidentally, in Lane 2; theunassigned-demand requirement appears nowhere).
Implementation notes
Implemented: added Lane 4 (
gc sling <bead> --on <formula>) to docs/gascity-routing-model.md, plus subsections for the graph.v2 duplicate-wisp trap, the standalone-launch contrast, and the routed-AND-unassigned demand gate. +105/-4, docs-only.VERIFICATION CORRECTED THE PREMISE. The bead asked to re-verify at the pinned revision; doing so showed its two central claims were inverted, and the doc now states the verified behavior instead:
The bead's operational conclusion survives via a different mechanism, which is what got documented: a graph.v2-attached work bead genuinely shows no gc.routed_to and no assignee while fully dispatched — not because routing moved to the wisp root, but because the graph path returns before the routing call (sling_core.go:477-481 -> doStartGraphWorkflow:645). Re-slinging on that misread still pours a duplicate wisp.
UPSTREAM MEMORY NEEDS CORRECTION (not actioned by me — polecat scope): the two cited source entries, reference-on-sling-routes-wisp-root-not-work-bead.md and reference-handback-repour-must-clear-assignee.md, conflate 'gc sling --on ' (attach) with 'gc sling ' (launch). Both attribute launch behavior to the attach path. Whoever owns that mechanik auto-memory should re-key them by path.
FORK-LOCAL SCOPE: cites canonical gastownhall/gascity only, pinned upstream/main 1dbf0731e. Per the operator ruling on sibling PR #209 ('Absolutely do not commit details about fork local routing models'), no fork-local content added; all four behaviors differentially confirmed identical in fork and upstream, so the canonical citation is also correct for the running city. Deliberately stays out of Lane 1/Lane 3 assignee semantics (tk-qxocm's territory) to avoid contradicting it.
Rework tk-52mw8 landed on polecat/tk-wd9do at 693b164; re-review tk-k0dw0 dispatched (one-anchor-per-PR, tk-ynz4b).
Refinery handoff
tk-wd9do(task, P2)polecat/tk-wd9domain693b1643; PR opened codex-green.