# Implementation decisions — 2026-09-21

User authorization: implement the accepted seven-day plan. No TypeSafe calls. GPU collection/training waits until the agreed three-day window and a fresh availability check; do not use the live RL server (its weights change). All original RL artifacts remain read-only.

- This is the independent paper-jev experiment, not a resumption of the auto-post-training RSI controller. The accepted experiment plan and project-local run records define its scope.
- Fixed seed 20260921; one development task from each of the eight pilot repositories, with remaining 32 training tasks. Candidate selection is a seeded hash of source trial ID, never outcome-dependent. Test selection excludes the exact 150-task pool and the other paper's holdout100.
- Runtime only reads exported public state/history. Original result metadata (including hidden outcomes and CF patches) is never given to the model. Submission labels live in a separate labels directory; runtime does not load it.
- The old final patch is reconstructable. No assumption of surviving intermediate Git objects. continue restores saved visible message history; retry uses pristine code and fresh messages. Initial fresh-test-candidate collection is a separately budgeted stage.
- Public test discovery uses AST over baseline tracked Python tests, not gold/test_patch paths. Parameterized test functions are excluded in v1 so a menu item is a method/function, not an unbounded parameter group. Django uses its native runtests.py; pytest elsewhere. Unsupported test discovery is reported, not substituted with hidden tests.
- Candidate edits to baseline tests are preserved as part of the starting patch but changed test files are not allowed in the public menu. A repair branch that alters a selected public test has an explicit integrity flag. Candidate menus are available before public results and identical across compared actions.
- A test action's 300-second pretest allowance precedes the 1200-second repair allowance. Both count in reported branch wall cost. All non-submit actions share the same repair limits. The paper reports candidate-generation, decision, pretest, repair-tool, and final-grading costs separately; the scalar policy cost is only a selection objective.
- Outcome heads predict action-conditional success, not a probability simplex. Missing/failed infrastructure outcomes are masked. Cost observations can remain usable even when correctness is unavailable. No CPU/GPU efficacy result is implied by smoke tests.
- Runtime dependencies are reused read-only from the existing skyrl-rl container. Code and experiment data are under paper-jev. No packages are installed into the shared RL environment.

Review fixes before GPU deployment:
- Qwen's chat template strips historical reasoning_content when a new user message is appended. Continuation therefore explicitly renders saved reasoning text inside the historical assistant content; raw history stays immutable. This preserves text, not an identical old TITO prefix. Histories that exceed context are reported unjudged instead of silently truncated.
- Fresh test candidates are generated with hidden verification disabled and only after development policy freeze. Submit labels are obtained through the same gated test collection stage as other actions.
- Training masks an entire action when its required seed pair is incomplete. A failed infrastructure branch is retained as missing; it cannot silently turn into a single-seed action target. Headline evaluation requires complete selected-action seed coverage for every frozen state.
- CPU sanity first reproduced one original candidate grade (0=0) and executed 5/20 public tests; observed test failures are legitimate public outcomes, not a method improvement.
- Cached prebuilt `sbv/*:uv1` images are explicitly selected in project task copies. The first unbound image path triggered a slow redundant build, which eventually completed; no existing training process was stopped.

- Distributed CPU retry: gpu23 had baseline SWE images but not the local uv1 tags. Copied the11sanity prebuilt images fromgpu08 with low-priority Docker save/load; verified exact image IDs on both hosts. New gpu23 attempt20260921c follows this repair; earlier infrastructure failures are preserved.

CPU pilot amendment (before any learned-model training):
- Native SymPy repositories have no pytest installed. The original generic pytest probe returned `No module named pytest`; those records are infrastructure errors, not failed tests. The raw records remain preserved, and their classification correction is recorded separately.
- SymPy menus use its native `sympy.test` with an exact-function matcher and a declared-node collection check. pytest remains unchanged for pytest repositories; Django uses runtests.py. The old active SymPy menu is archived before regeneration.
- First observed public-check service times are approximately2–3seconds, while full reconstruction+official grading was165.5seconds. Prior210-second CF timings include different work and cannot be substituted for public-test cost.

- First-week GPU allocation is centralized on gpu08 (up to its8A100s); gpu23 remains a CPUworker host in this implementation. GPU launch refuses other hosts, preventing independent local budget ledgers on the two nonshared filesystems. Future multi-host GPU allocation needs a shared coordinator before being enabled.

2026-09-21 user extension: start the manuscript now and use spare CPUs for small models. Authorizes CPU profiling and a current-patch-correctness baseline trained only on existing submit labels. This is not an action-utility model: non-submit labels remain unavailable. Keep this checkpoint and results separate from the main action-conditioned runs. Initial CPU budget:8 threads per small-model process on gpu23, at most8hours for a finite correctness-training run; classical baselines on gpu08 use2threads. GPU allocation rules are unchanged.

CPU extension: after finite-step profiling and seed0 real-data training progressed, launched seeds1/2 with the same frozen cohort/configuration. Each uses8CPUthreads,3epochs and an8-hour outer timeout;total24threads on gpu23. No GPU allocation. CPU correctness runs remain separate from the later action-outcome study.

2026-09-22 early GPU release: latest user message reports two local cards now available. Read-only inventory confirms A10080GB physicalindices6and7 at4MiB/0%,with0–5running other workloads. This explicitly supersedes the previousnot-beforedate. Use two independent TP1 frozen9B services on6/7, initially reserve8hours each (16GPUhours maximum);keep total384GPU-hourbudget. First verify a real model request and a bounded branch before96-branch expansion. No liveRL service is reused or stopped.

2026-09-22 throughput revision: user explicitly requested both released cards be fully used. Pilot now permits8 branch workers per TP1 replica (16total,2CPU/environment). Server supports8sequences and measured KV capacity is1,500,027tokens/card (~15×98k contexts);128CPU cores with load~62 before ramp. Smoke remains one branch/card until judged. This updates the old conservative2localworkers default for this owned GPU pilot only. No inference that100% utilization is guaranteed during official grading.
