Capture quality gate passed for all 32 quest files:
JSON parse/load succeeds for every file,
creature_update_micro_rows > 0, angle_approach > 0, and creature_update_window > 0 in all files.
Remaining frontier is stable at quest_1_7:
pre-divergence tail at tick 8528: rand_calls capture/rewrite = 157/166 with stream prefix match for the captured head,
first stream value mismatch at tick 8529 (idx=0, capture branch id 0x004263b1).
Divergence-report evidence points to projectile presentation/decal branch skew near the 8528 -> 8529 handoff, with downstream XP/perk drift in later quest splits.
original focus-trace currently rejects quest-mode captures (mode=3), so we cannot obtain rewrite-side per-callsite attribution at the frontier from existing tooling.
Current wall for this capture family: earliest unresolved divergence (quest_1_7 tick 8529) needs rewrite-side per-callsite RNG attribution in quest mode; current tooling cannot provide that because focus-trace is survival-only.
Next probe should be tooling-first before more gameplay patches:
add quest-mode support to original focus-trace, or
add rewrite-side RNG callsite/branch-id trace capture for quest ticks around 8528..8530.
The quest tooling wall is removed; focus-trace now produces actionable quest tick reports at the frontier.
Next probe remains the unresolved gameplay divergence at quest_1_7 tick 8529, now using quest-mode focus traces for per-callsite attribution around 8528..8530.
uv run pytest tests/test_original_capture_conversion.py::test_convert_capture_to_replay_emits_quest_creature_spawn_events tests/test_original_capture_conversion.py::test_convert_capture_to_replay_emits_quest_added_head_without_spawn_rows tests/test_replay_runners.py::test_capture_creature_spawn_event_applies_added_head_overrides tests/test_replay_runners.py::test_capture_creature_spawn_event_applies_added_head_without_spawn_rows
uv run pytest tests/test_replay_runners.py::test_quest_runner_disables_world_dt_steps_for_original_capture_dt_overrides tests/test_replay_runners.py::test_quest_runner_uses_capture_creature_spawn_events_for_original_capture_replay
Focused frontier recheck:
uv run crimson original divergence-report artifacts/frida/share/gameplay_diff_capture.quest_1_8.json --float-abs-tol 1e-3 --window 24 --lead-lookback 2048 --run-summary-short --run-summary-focus-context --run-summary-focus-before 8 --run-summary-focus-after 6 --run-summary-short-max-rows 40 --no-cache --json-out analysis/frida/reports/session20_sweep_current/gameplay_diff_capture.quest_1_8_after_added_head_lifecycle_fix_nocache.json(expected non-zero exit while diverged)
Full post-commit sweep:
for f in artifacts/frida/share/gameplay_diff_capture.quest_*.json; do uv run crimson original divergence-report "$f" --float-abs-tol 1e-3 --window 24 --lead-lookback 2048 --run-summary-short --run-summary-short-max-rows 10 --no-cache --json-out "analysis/frida/reports/session20_sweep_after_commits/${f##*/}_baseline_nocache_after_commits.json"; done
Current wall with this capture data: earliest unresolved frontier (quest_1_8 tick 9760) is driven by sub-ULP cumulative movement/heading drift that flips a branch before focus; existing telemetry is head-capped and insufficient to isolate the first causative arithmetic branch for all relevant slots.
Required next capture probe:
increase creature_update_micro head budget (or targeted-slot capture) around tick 9400..9760,
include deterministic per-slot pre/post movement internals for all candidate slots in the drift ancestry window.
Session 17 (continued: full added-head replay fields)¶
Replay previously carried only a subset of lifecycle added_head fields (heading/target_heading/ai_mode/link_index).
Extending conversion+replay application to include full added_head row state (pos/hp/hitbox/orbit/flags/type_id) is structurally required for parity across capture families, even though it does not move this specific frontier.
quest_1_8 remains stable at tick 9760 after the full-field patch.
Focused quest probes show the same dominant profile:
slot 0 branch split near tick 9694,
missing second projectile hit and missing RNG tail (-98) at tick 9760.
Additional player-movement precision probes identified a one-ULP player pos.y drift beginning at tick 9402, but source-level movement-rounding experiments did not move the first divergence tick and were not kept.
Current wall remains:quest_1_8 tick 9760 with unchanged missing RNG-tail/hit profile.
Existing capture data is still insufficient to isolate the first causative arithmetic branch across the full drift ancestry.
Next recapture should add targeted player+creature movement internals in the 9400..9760 ancestry window (not only head-capped micro rows) so the first precision split can be attributed deterministically.
The active gameplay wall is capture quality at the frontier, not missing replay hooks:
quest_1_7 is clean with current code/tooling,
quest_1_8 remains stable at tick 9760 (missing_tail=98), with branch ancestry already traced back to earlier movement precision drift.
Existing default micro capture settings can saturate per-tick head budgets in dense windows, which obscures first-cause attribution for slot-level drift ancestry.
Differential tooling should explicitly call out likely head-capped focus ticks and provide a direct recapture path.
Tooling now supports high-signal recaptures for the known wall instead of repeating low-head-budget captures.
Next required artifact to continue gameplay fixes is a recapture of quest_1_8 drift ancestry window (~9400..9760) using targeted slots + raised micro cap.
widened default micro head budget from 128 to 256 for broader parity coverage without per-run tuning.
src/crimson/original/divergence_report.py
added divergence_category classification output (console + JSON) so investigations can compare mismatches by class/signature across different captures,
retained and reframed micro-cap saturation lead as a category-level signal, not a tick-window recapture prescription.
Docs:
docs/frida/gameplay-diff-capture.md
docs/frida/differential-playbook.md
updated to emphasize category/signature tracking over absolute tick targeting.