--- enabled: true touches: [crates/layout/src/generated/**, crates/generation/**, docs/model-first-cost.md, docs/rig-capacity.md, roadmap.md, corpus/**] depends-on: [repair-loop-live-run] --- # Draw a large free batch from the rig for the absolute seam's unsolved categories The absolute seam's committed candidate (`crates/layout/src/generated/absolute.rs` header line, 74/108) leaves four categories at 0: `BottomHeightTopAuto`, `OffsetsDefineSize`, `OverConstrainedRtl`, `PercentageOffsetsAndSizes` (`docs/model-first-cost.md` → the absolute batch narrative). Every batch so far drew eight candidates from a paid or subscription model. The rig's own gateway alias (`qwen3.8-flash-next`, one TabbyAPI replica per Spark on all four Sparks, `docs/rig-capacity.md` → "Serving — four single-Spark replicas") costs nothing per token, draws up to 32 candidates concurrently across the four replicas (each saturates at eight in flight), and has already produced an admitted width candidate at a 32-candidate width (14 of 32 compiled, best 140/227, 7 m 49 s wall, over the previous 132/227 from `claude-opus-5`). This track runs the same free-hardware batch against the absolute seam's four unsolved categories. The model endpoint and keys are read from the environment, and the binaries do not load `.env` themselves. Before every run: `set -a; source .env; set +a` in the worktree (`.env` is a symlink installed by `tracks.json`). Never print or commit any value from it. `GENERA_MODEL_URL` names the rig gateway; confirm it answers (`curl` its models list with the bearer key, output discarded) before drawing, and if it does not, record that in the handoff and stop rather than switching provider: `GENERA_PROVIDER` stays unset for this track (the rig path), never `anthropic`. Steps, each as `cargo run --release -p generation --bin `: 1. `absolute_ground_truth_cache` and `absolute_generation_loop` if `corpus/absolute-ground-truth/` and `corpus/absolute-regression-set.json` are not present in this worktree (they are gitignored and do not survive a worktree's removal); the seeded-wrong fixtures must still be rejected. 2. `GENERA_MODEL=qwen3.8-flash-next GENERA_CANDIDATES=32 GENERA_CONCURRENCY=32 absolute_real_model_run`. The loop's stop condition (two batches without per-category improvement, or six batches) applies unchanged; each batch is 32 candidates instead of 8. If `absolute_real_model_run.rs` still hard-codes `CANDIDATE_COUNT = 8` rather than reading `orchestrate::candidate_count()` the way the width, margin and percentage binaries do, switch it to `candidate_count()` first (the `automated-repair-iteration` track recorded leaving that as-is), with a unit test in the style of `orchestrate.rs`'s `candidate_count_reads_env_unset_valid_and_invalid`. 3. Record, per batch, in `docs/model-first-cost.md` → "Batch scores and token totals": candidates compiled of drawn, null-content replies (the fast alias returned 3 of 8 last time), best score, per-category tally, prompt and output tokens (the rig path reports them), and wall-clock. Add a row to `docs/rig-capacity.md` → "Measured — real batches through the gateway" for the 32-candidate batch shape. The committed candidate is replaced only through `crates/generation/src/admit.rs` `beats_committed`: a candidate scoring strictly above the committed score on the same 108-case corpus, committed byte for byte as `crates/layout/src/generated/absolute.rs` with the header line naming candidate, model and score, and `absolute.provenance.json` beside it. Anything lower is reported, not committed. Write the comparison that is the point of this track into `docs/model-first-cost.md` as a short subsection: the paid eight-candidate batches' best per-category tally versus the free 32-candidate batches', with the wall-clock and token cost of each, and one sentence on whether free volume from the rig solved any category the paid batches did not. `roadmap.md` → "Phase 1 — Engine bootstrap" step 4 gets one line pointing at it. `cargo test --workspace` must pass. `fragment_check` on the seeded-random recipe corpus (`cargo run --release --bin fragment_check -p layout -- --random`) must still report at least 216/227; an admitted candidate that lowers it is not committed, and the discrepancy is recorded instead.