Context
In a real /github-workflow:execute run (2026-06-24), the Session
prewarm fired three gh calls — candidates, label inventory,
rate_limit — before the Phase 1 fast path (wf pick) returned ok.
The execute body's own note states .claude/candidates.json "is never
read" when the fast path succeeds. So on the happy path (the path that
actually ran), the candidate fetch was provably wasted, and the
~120-line inline fallback it was warming never executed.
The prewarm predates wf owning pick→claim→board→branch in one call. It
eagerly front-loads work for the inline fallback, inverting priorities:
the common path pays to warm the rare path.
See docs/context-optimization-plan.md → Lever F1. This is the
lowest-risk lever: it removes nothing — the inline fallback stays fully
intact for the Python-less / wf-broke case. It only stops pre-paying
for a path that usually never runs.
Requirements (acceptance criteria)
Savings goal
Eliminate 2–3 wasted gh API calls per happy-path run (latency +
rate-limit budget) and remove the ~58-line prewarm section from the hot
path. Target: zero eager candidate/label fetches when wf pick returns
ok.
Context
In a real
/github-workflow:executerun (2026-06-24), the Sessionprewarm fired three
ghcalls —candidates,label inventory,rate_limit— before the Phase 1 fast path (wf pick) returnedok.The execute body's own note states
.claude/candidates.json"is neverread" when the fast path succeeds. So on the happy path (the path that
actually ran), the candidate fetch was provably wasted, and the
~120-line inline fallback it was warming never executed.
The prewarm predates
wfowning pick→claim→board→branch in one call. Iteagerly front-loads work for the inline fallback, inverting priorities:
the common path pays to warm the rare path.
See
docs/context-optimization-plan.md→ Lever F1. This is thelowest-risk lever: it removes nothing — the inline fallback stays fully
intact for the Python-less /
wf-broke case. It only stops pre-payingfor a path that usually never runs.
Requirements (acceptance criteria)
.claude/candidates.json) is gated on thefast path NOT returning
ok— it runs only whenwf pickyieldsunsupported/error/missing-interpreter and the inline fallback isactually entered.
.claude/label-cache.jsonis consumed (board moves nowdone by
wf; finish phase). If no happy-path phase reads it, gate thelabel-inventory fetch the same way; if a later phase still needs it,
document which and keep it (or defer to first use). Record the finding in
the PR.
references/file loaded only whenthe inline fallback fires (one level deep from SKILL.md).
removed; Python never becomes a hard dependency).
on both the
okfast path and a forced-fallback path._shared-skills/source edited if shared, sync run, versions bumped.Savings goal
Eliminate 2–3 wasted
ghAPI calls per happy-path run (latency +rate-limit budget) and remove the ~58-line prewarm section from the hot
path. Target: zero eager candidate/label fetches when
wf pickreturnsok.