Files
foxhunt/docs
jgrusewski 834eaec4bd feat(sp18 v2 P4.T1+T2): B-leg next_states hoist + compute_q_next_target_bootstrap skeleton (additive dead code)
Phase 4 lands the additive infrastructure for the B-leg target-Q DDQN
bootstrap that Phase 5 will swap into td_lambda_kernel's q_next argument
at gpu_experience_collector.rs:~4313 (post-Task-4.1 hoist).

Tasks landed:
  - **Task 4.1**: build_next_states_f32 invocation hoisted to BEFORE
    the TD(λ) launch block. Pure ordering change — verified via the
    SP18 audit grep flagging 0 post-TD(λ) consumers of next_states.
  - **Task 4.2**: compute_q_next_target_bootstrap skeleton method on
    GpuExperienceCollector with full plan-aligned signature
    (next_states, target_params_ptr, online_params_ptr, batch_size →
    Result<CudaSlice<f32>, MLError>). Body is a hard-error early-return
    per feedback_no_stubs — no production caller in Phase 4 (the
    caller is wired by Phase 5 Task 5.1, replacing the self-bootstrap
    clone). Returning Err satisfies Invariant 9 (no deferred-work
    markers); any accidental pre-Phase-5 call hard-errors with a
    clear pointer to the open sub-tasks.

Tasks 4.3 (online forward + DDQN per-branch argmax), 4.4 (target
forward + compute_expected_q gather), 4.5 (replace error early-return
with full implementation + GPU oracle test gates) are deferred to a
follow-up subagent dispatch per their plan-defined per-task TDD cycle
scope. Each requires substantial new infrastructure on the collector
(target-net trunk forward chain duplicating gpu_dqn_trainer.rs Pass 2's
VSN+BN+OFI+trunk+branch-head sequence).

Tests:
  - crates/ml/tests/sp18_td_lambda_q_next_oracle_tests.rs (NEW):
    3 introspection tests (no GPU required):
      * compute_q_next_target_bootstrap_method_exists
      * next_states_built_before_td_lambda (Task 4.1 ordering invariant)
      * td_lambda_still_consumes_self_bootstrap_q_next_in_phase4
        (Phase 4→Phase 5 atomic-refactor guard)

Atomic-refactor invariant (HARD — feedback_no_partial_refactor):
  NO L40S DISPATCH between this Phase 4 close-out commit and the
  Phase 5 Task 5.1 commit that replaces the q_next clone with
  self.compute_q_next_target_bootstrap(&next_states, ...).

Verification:
  SQLX_OFFLINE=true CUDA_COMPUTE_CAP=86 cargo check --workspace  → clean
  SQLX_OFFLINE=true CUDA_COMPUTE_CAP=86 \
    cargo test -p ml --test sp18_td_lambda_q_next_oracle_tests
                                                                → 3/3 pass
  bash scripts/audit_sp18_consumers.sh --check                  → exit 0

Files:
  crates/ml/src/cuda_pipeline/gpu_experience_collector.rs (Task 4.1+4.2)
  crates/ml/tests/sp18_td_lambda_q_next_oracle_tests.rs (NEW; 3 tests)
  docs/sp18-wireup-audit.md (Phase 4 close-out section + fingerprint)
  docs/dqn-wire-up-audit.md (Invariant 7 entry)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 11:25:50 +02:00
..