The docs described Phase 2 as 'future work' while the code had already
shipped it: spin is wired through the uniform into the shader's Kerr deriv(),
the integrator is adaptive RK45, disk_inner is ISCO-derived, render_scale
runs a real offscreen render-to-texture + upscale pass, and the UI exposes a
Spin slider with live ISCO/Horizon readouts. Anyone reading the docs got a
wrong picture of completeness.
README:
- Intro: 'Schwarzschild' -> 'black-hole (Kerr at spin>0, Schwarzschild at 0)'.
- How it works: RK4 -> adaptive Dormand-Prince RK45; add the frame-dragging
term to the bending accel; capture radius r+(chi); ISCO-tracked inner edge.
- Controls: add Black Hole section (Spin, ISCO/Horizon); render_scale slider.
- Performance: render_scale now wired (0.75 desktop / 0.5 web), not reserved.
- Status: Phase 1 shipped; Phase 2 implemented-pending-human-validation;
Phase 3 (exact pseudo-Hamiltonian) is the actual future work.
AGENTS.md:
- Intro + mirror contract: name the Kerr/RK45 functions the mirror must track
(kerr_bending_accel, rk45_step, is_captured_rk45) and the exact shader lines.
- Conventions: 'render_scale and spin are reserved' is false now — both wired;
update the perf-lever and web-defaults notes accordingly.
- Reference docs: list both Phase 2 docs, not just Phase 1.
Phase 2 plan (docs/superpowers/plans/2026-07-13-...-kerr.md):
- Status banner: Tasks 1-7 implemented+committed, Task 8 (human visual/perf
checklist) is what remains.
- Check the Task 1-7 step/commit boxes; leave all Task 8 manual steps and the
visual/fps acceptance items unchecked. Check only the code-verifiable
acceptance items (cargo test green, RK45+render_scale running, Spin slider
shipped).
Compact onboarding file capturing hard-won, non-obvious repo facts:
- Dual-target build (desktop + web/WebGPU) and the wasm-only
web_sys_unstable_apis rustflag (.cargo/config.toml) that is a no-op
on desktop — easy to break during cleanup.
- Always run --release for visual checks; the debug ray tracer is too
slow and will look broken.
- The CPU<->shader mirror in src/physics.rs: it is a hand-maintained
duplicate of black_hole.wgsl kept solely so the capture/escape
boundary is testable. Editing one side without the other makes tests
pass on code the shader contradicts.
- The three Bevy 0.19 gotchas that cause the recurring grey screen
(nudge_camera for issue #24448, EguiPrimaryContextPass placement,
real storage buffer asset instead of default handle) — exactly what
this branch's recent commits fix.
- Reserved-but-intentionally-unwired fields (render_scale, spin) and
the Rs=1 natural-units convention so an agent does not 'fix'
intentional dead code or invent unit conversions.
- Git workflow: self-judge whether to commit, granular detailed
commits, never push.
No code changes.