# Nov5 focused UI regressions — full matrix NOT RUN by user instruction

Retain the new source/ROM-bound targeted report and original failures. Future
explicit qualification must add: frame-by-frame unchanged main help borders in
all five modes; transfer same-page movement limited to old/new rows with exact
finished pictures and full SRAM; page/source/trade fallback; native cursor ABI;
actual transferred-roster Line Editor highlight/banner, nested selector, all
three exit options, palette/pattern restoration and post-editor replay return.
See [scope and actual focused results](MENU_CURSOR_LINE_20261105_PREVIEW.md).
Do not transplant the old release's128 passes to this private preview.

# Current combined qualification —128 required groups

## Current public website release — 2026-11-04-r2

Exact already-qualified ROM `89734acf17e7412e4b0aef71039cdcd4737231ba2fa801ccaece72f6eb794355` (CRC32 `2C608F83`),472 native/test sources, source-set `58ff79db84a60e54628e7ac96cbf450f226b3d7984de1af8790f7275da4a772d`.128/128 mandatory groups plus13 supplemental groups pass, with the initial127/128 capture-selector failure and complete18-child affected requalification disclosed.768 footer contexts and real opened H32/H40 pictures pass; grey fields, calibrated Edmonton94→99 OVR, replay continuation and player-centre blue-line penalty rules are included.

Website-only publication: no ROM edits, new test matrix, local/Bodin installation, save reset or user RetroArch operation. Downloads/remaps/progress are preserved. The latest-BIN button is centred first;101-word English introduction precedes the retained4:57 film, accurately labelled as a2026-11-03-r2 recording. Manual controller/live-multiplayer acceptance remains. [Current release, rules, source and QA](H32_FOOTER_RELEASE_20261104_R2.md). Earlier dated sections below are history; the former Nov5 wait was explicitly revoked and the full qualification is complete.


## Private player blue-line penalty rule —2026-11-04; full gate NOV5 ONLY

User confirmed shooter position (native88 body centre) activates first-crossing
latch; actual retreat then ends as native miss, never a steering clamp. Free
pre-line and purely lateral post-line movement; no new puck retreat/still rule.
Private Beta3 SHA0c9763eef54cc35812bbbb95b6fefb6e0dcfbea2fc86de1b9641f3515b62c4f6.
Targeted64 boundary/ABI,3 resets,5 native routes,6 controller-result variants,
2 complete autonomousCPU attempts, retouch/ordinary controls and exact repeat/
legacy rollback pass.37 native and6 browser pictures opened. See private handoff
penalty-blue-line-20261104/REPORT.md. Revised shared whole-group oracle/input
cases syntax checked ONLY. Full matrix expressly deferred until2026-11-05;
no official release/public-image promotion or old128-pass transplant today.


## User feedback fixes —2026-11-04; FULL MATRIX DEFERRED TO NOV5

- [x] Remove flat light/dark name backings with actual patterned font masks;
 native glyph/frame RGB checks and opened UI pictures, separate test2 preview.
- [x] Restore original team-OVR scale: EDM94 unchanged,99 after copied user trades;
 native seven-case/whole-SRAM controls and real94/99 Matchups images.
- [x] Reproduce automatic replay freeze; preserve alternate native9CDC entry;
 targeted clean/post-LineEditor replay→active clock and manual return checks.
- [x] Archive/verify then remove about380MB inactive /tmp data under NAS backups.
- [ ] **2026-11-05, at jdc's explicit request:** run the full shared release gate
 on the exact frozen/versioned final candidate. Include all32 calibrated OVR
 cases/direct ABI and automatic/manual/post-LineEditor replay continuation;
 no stale128 passes, relaxed requirements or silent ROM replacement.
- [ ] After that gate passes: proper new release, source/IPS/rollback/deployment
 policy and affected current website images/accurate video-version labels.

Today is targeted private testing only. Do not start the large matrix on Nov4.
[Source/evidence/scope](GREY_FEEDBACK_PREVIEW2_20261104.md).


## Grey-panel preview regressions for next authorized qualified release

The private2026-11-04 grey preview897c575f… has only targeted checks, expressly
requested by jdc. Do not add its passes to the current128-qualified native ROM.
At next integration, include these scenarios in the applicable native UI and
storage groups on the exact final ROM/source:

1. Main-menu last-row corner in all five modes, plus common-theme inactive
 guards for root main menu, pause, pregame, replay and native HUD.
2. Transfer home/buy/sell/scroll/club-change, dense dollar amounts and actual
 sale/buy: grey frame and true trimmed centring, no padded-text frame overwrite;
 paired resulting SRAM, budget/roster rules unchanged.
3. Native Line Editor, game/player/scoring/penalty summaries, roster,
 standings/leaders, cards and period stats: navigation, populated+empty lists,
 nested exits, page changes and closed-menu return; all names/values retained.
4. Preserve original Window background priority. Do not promote/erase stale
 B-plane rink data or its camera. No ghost header or missing scroll values.
5. Preserve all72 native period-logo tiles9F..E6, including formerly hidden lower
 rows, and original club palettes2/3; complete lower badge+numbers fit above
 footer. Verify other club combinations, not merely the currently visible tiles.
6. Cards branded header, forward/goalie/team/next portraits; no palette mutation,
 exact closed restoration of extra tiles25C/25D and all native pattern banks.
7. Custom post-match division table (green qualification bands), completed-season
 actions/confirmation-cancel, dense18-row last-column/goalie lists and leader
 paging: grey transparent backdrop, correct text and native palette on exit.
8. Help row25/26/27, max-width strings, no overlapping text/frame or cropped
 image; original native instructions and actual button meanings agree. The
 pre-existing new-season XboxX+B label is corrected to actual B/A/Start.
9. Preserve current user saves/controllers/frontend during isolated verification;
 exact rebuild/source hash, properly versioned release and current-image refresh
 remain required when this preview is promoted through the normal release gate.

[Preview evidence and precise limitations](GREY_MENU_PREVIEW_20261104.md).



## Penaltys50% investigation complete —2026-11-03-r2

Exact released20793fce… unchanged.24 matched simulation cohorts per setting:100%442/442 candidates admitted,50%241/468 (51.5%),227 filtered. Actual committed432 versus236; icing662 versus664. Cohort50% fractions39.1–71.4%,7–33 candidates each; no exact per-match/whistle-halving claim. Current live-input measurement observer E900/HUD collision exposed and old live counts withdrawn. Final exact-ROM host-only read observer validated72 whole emulated-state controls, with typed host-pointer ELF relocation and active clock/target negatives. Actual naturally completed Full/Light/Mini saves retain50% after reboot/lock attempts. No native game-rule fix or new ROM release required. [Full current audit](PENALTIES50_AUDIT_20261103_R2.md).


## Final current checkpoint —2026-11-03-r2 (Beta)

Released locally and publicly: SHA256 `20793fce15e640bf60d31c48e95bd0d284105fc07f8ae01ed08b1a579b37e99f`;
CRC32 `966FE68B`. **128/128 required groups pass on465 exact native/test
source hashes**, with the original failed full batch retained and four entire
affected groups requalified through an audited six-file host-test-only closure.
Twenty independent control/rollback builds, extracted-source exact rebuild and
original-base IPS reconstruction pass. No later website task changes this ROM.

Main-menu speed/sequencer continuity, exact root Games credits URL, eligible
downed-skater Y selection and consistent actual-roster team OVR are qualified.
Quickgame retains four human splits; Allstar additionally offers CPU and black/
red uniforms. Preseason transfers and the restored native presentation remain.

The separate image-to-title audit checks123 original image files/232 old placements,
corrects21 explicit bindings and inventories **239 final placements/128 image URLs**.
Fresh same-ROM captures show actual owned purchases, framed centred menu help,
dollar amounts, keeper possession/arrows, faceoff stars, Overall and a matched
172KMH shot/replay pair. Historical originals/notes/audit bytes are retained;
fixture scopes, current captions and manual limits are explicit.
Final public desktop1440/mobile390/320 browser evidence and image/body/link checks
are recorded in [the completed image audit](IMAGE_TITLE_AUDIT_20261103_R2.md).

The public market guide explicitly explains separate cash transactions, Free
Agents, no automatic player swaps/replacements or CPU recruitment, legal squad/
budget guards and a conditional McDavid/Draisaitl example. This is documentation
of existing behavior; the native transfer economy/rules remain unchanged.

Local installation preserves configs/remaps and138 unrelated saves. Three old
matching progress files were cleared only at this new release, after normal user
frontend exit. All three original runtime histories remain hash-preserved and
are merged into the current item. Legitimate new-version play is preserved.
Bodin delivery remains queued while the known host is offline; no remote install
is claimed. Physical controllers, extended human play/audio preference and live
jdc/Bodin multiplayer remain beta acceptance. The older9:33 film is clearly dated
2026-11-02-r2. Earlier dated sections below are historical snapshots, superseded
by this current checkpoint.


## Main-menu, explicit Y and actual-roster OVR —2026-11-03-r2

Main-menu-only sequencer service preserves complete checksums and continuous
music timing; maximum blocked frames24→10 for scrolling and69→57 for mode changes.
Both final traces match idle clock/channels exactly. A literal restart command
was not reproduced. Startup credits show https://games.jdc.se. Explicit Y admits
an eligible downed human's keeper request without healing or bypassing native
guards. Ordinary team presentations now use the actual roster mean before/after
transfers: fresh Edmonton57, improving trades61 (two sales) or62 (four sales).
Player attributes, OVR-based prices/budgets and season accounting remain unchanged.

**128/128 mandatory groups pass on465 exact native/test source hashes**;20 independent
full controls/rollbacks, extracted-source rebuild and original-base IPS pass.
123 actual native originals are opened, refreshing102 existing current picture IDs.
[Behavior/scope](MAIN_MENU_Y_OVR_20261103_R2.md) ·
[Exact qualification](QA_20261103_R2_LOGS.md) · [Native review](GRAPHICAL_FINAL_20261103_R2.md).
Local/public delivery and opened public desktop/mobile review: pending.
Physical controllers/live multiplayer and subjective feel remain manual beta limits.
Older dated sections below are historical snapshots, superseded by this checkpoint.


## Cosmetic follow-up scope inputs —2026-11-03

For this UI version, --friendly-reference accepts an explicit JSON fixture
manifest with schema `friendly-ui-scope-v1`, `regression_parent` (exact failed61
ROM) and `released_reference` (exact qualifiedr2 ROM). Both hashes are required
by the unchanged original friendly scope and the separately declared cosmetic
scope. No private path or earlier success is inferred. All other reference
arguments remain explicit. The final shared validator requires the original full
reference CLI even in --validate-report mode.

## Transfer dollars and framed menu controls —2026-11-03

Transfer prices, budgets, purchases and sales now display dollar amounts with dot
thousands separators: one unchanged internal unit is $1.000. Initial $16.042.000
still exactly funds an OVR99 star plus an OVR79 middle player. The native economy,
rosters and save accounting remain unchanged. Main-menu help is centred inside
the existing native frame style; all 26 settings remain selectable through five
visible rows. QG-V01 was already repaired in r2; fresh reproductions correct the
previous stale unresolved label without changing Stars native code.

**125/125 required groups pass on 444 native/test source hashes**, with all original
failed batches retained and complete affected test-only requalification disclosed.
Fifteen independent controls/rollbacks, exact ZIP-source rebuild and original-base
IPS reconstruction pass. All 102 current website picture IDs use this final ROM;
123 native captures and 18 public desktop/mobile screenshots are opened and pass.
718 public HTTPS checks pass; historical assets are preserved.
The sound tour remains explicitly the authentic r2 recording.

SHA256 `7d1fc931f5a5a4958b1eefcc05f00661b5321a6a1b2404d7563c98a22b8eb262`; CRC32 `61F87B0A`.
[Behavior/scale/Stars erratum](USD_FOOTER_20261103.md) ·
[Exact qualification](QA_20261103_LOGS.md) · [Opened graphics](GRAPHICAL_FINAL_20261103.md).
Local/public delivery: installed and verified. Bodin: offline, authorized queue pending.
Physical USB/phone operation and subjective play feel remain manual.


## Final website and native-sound tour acceptance — 2026-11-02-r2

M24 complete:102 opened native images +36 opened public desktop/mobile pages.
M25 delivered with disclosed limits:9:33/71 native-sound clips, highest homepage
player;9 final public playback screenshots opened at1440/390/320. Actual H264/AAC
playback, nonsilent audio graph and71 chapter links pass. All50 public game-feature
sections +4 groups inventoried; not every edge case is filmed.
[Movie/coverage](../../video/) · [Playback report](VIDEO_FEATURE_TOUR_20261102_R2.md).
ROM remains qualified124/124 on443 sources, unchanged c68333a8422b6e3754350ef2abd646951d85f6e2c2cd0f987dff1f184aa53b17.
Local/site released; Bodin offline queued. No user frontend or new progress touched.
Physical USB/phones, subjective play feel/loudness and explicit unshown cases
remain limitations; inherited compact Stars shootout tie remains documented.


## Transfers, Allstar CPU and presentation —2026-11-02-r2

Preseason Transfers On/Off sits directly below Icing. Native OVR² prices and
budget16042 cover one star(85–99) plus one middle(60–79) at both upper bounds;
valid squads, nonnegative funds, Free Agents, atomic storage and played-season
locks are retained. The original native overall/hot-cold presentation is restored
with current ordinary, transferred and Allstar data. Allstar adds1vsCPU and keeps
four human splits with blackA/redB uniforms; Quickgame offers only four human
splits under the latest explicit policy. Ordinary32club uniforms stay exact.

HUD/menu/default refinements include right-side Momentum bars, framed above-clock
powerplay, clean replay, shared shot/pass charge, KMH/MPH, optional fragile glass,
permanent painted dots/OT rules, consistent readable page help and five native
0:40 beeps. Real Draisaitl line editing is repaired and permanently regression-tested.
The friendly planned-catch guard preserves native movement/physics and general
busy-shot exclusions; no new Hard strength search or win-rate claim.

**124/124 required checks pass** on **443 native/test source hashes**.
The complete same-ROM matrix plus complete affected test-only observer rechecks
and strict host-timeout retry are separately recorded, with original failed
batches retained.14 independent controls/rollbacks, byte-exact source/ZIP rebuild
and original-base IPS reconstruction pass.102 native originals are opened; current
website images replace77 old slots, while32logos/115historical assets are retained.
Local installation and public browser checks are tracked separately; Bodin delivery
requires connection/normal exit. Physical USB/play feel/audio salience stay manual.

SHA256 `c68333a8422b6e3754350ef2abd646951d85f6e2c2cd0f987dff1f184aa53b17`; CRC32 `4B82D65A`.
[Current behavior/pricing](TRANSFERS_REFINEMENTS_20261102_R2.md) ·
[Exact qualification](QA_20261102_R2_LOGS.md) ·
[Opened graphics](GRAPHICAL_FINAL_20261102_R2.md).
M25 native-sound video remains LAST after release and M24 public review.


Retain all119 transfer suites and all original thresholds. Add Allstar CPU
allocation/flow/shootout, the combined refinements group, and friendly_reception.
No preceding candidate's result approves the final image. Freeze current sources,
run every required group freshly on the exact final ROM and retain every failure.
Supply --refinements-reference exact runtime18 and --friendly-reference exact
failed private61; scope comparisons are not behavior or release approvals.

The friendly-interception repair must preserve original native105A2 and finisher
positioning bytes. The actual native B24 motion is retained. Only a genuine
same-team buffered receiver may retain the CPU request through that motion and
use the unchanged catch-opening geometry after true possession. General shot
policy keeps its busy exclusions. Require all IRQ/CCR, complete caller context,
whole declared RAM/SRAM canaries, native caught-target IDs and active guard
mutants. Preserve original finisher geometry/non-regression and Smart Aim
retained-catch continuation criteria; add B24 native catch positives/negatives
and general-policy exclusions. No forced catches, RNG/stat changes or resumed
Hard win-rate search. Full current Shot Plan flow still requires every original
native immediate-chain and observer criterion.

Final real screenshots must come from the unmodified exact candidate, with
hashes, paired states/SRAM and actual opened review. Refresh all current website
screenshots only after features qualify, retain historical assets/captions,
and open final desktop1440/mobile390/mobile320 browser captures. Rebuild, exact
rollback chain, fresh matched controls, original-base IPS, source ZIP and release/
controller/save policy remain required. Never close an active RetroArch for QA.
Physical USB/play feel remain explicit manual acceptance limits.

# Transfer qualification revision — candidate only, no release approval yet

The preseason-transfer candidate requires **119 mandatory suites**: all112
historical suites plus seven freshly executed transfer groups (model, engine,
persistence, runtime, season, journal, flow). No prototype receipt approves a
new ROM. Each subcase has exact source/ROM hashes and its own retained log.

New native getters necessarily execute conditional Off paths. Fresh diagnostic
against R7 recorded26/40 raw-exact AutoOn and27/40 AutoOff scenes; differences
include both isolated native initialization samples and longer native timing
changes. These are **not** normalized away, passed as unchanged trajectories,
or evidence of a new Hard win rate. The actual candidate must execute all40
600-frame AutoOn AND40 AutoOff comparisons against exact qualified Nov2, retaining
every field difference and both full raw traces. Declared native code/data scope
must pass; original roster/uniform/startup/physical movement/replay decoder bytes
must remain exact. Transfer Off getter semantics additionally require4576 paired
full native fragment/IRQ/CCR/register/SP/SRAM contracts against exact Nov2.

Preserve the original replay repair's strict assertions by **freshly** running
exact Nov2 against R7, including40 raw-exact AutoOff pairs, all original packed
record/PC/GPR commit criteria, calibration and10 active negatives. That historical
comparison must be labelled Nov2 and nested separately from the current-ROM
transfer report; its equality must never be attributed to the transfer candidate.
The entire earlier comparison chain still executes freshly. This explicit new
native-hook scope replaces the assumption that every future feature leaves the
Nov2 image's precise CPU/video phase unchanged. No existing native functional,
storage, menu, geometry, controller, physics, ABI, lock or corruption threshold
is removed. Transfer engine adds real831-identity/currency/roster constraints,
all actual2050 saver and8210 reset-journal write prefixes, active bad-restoration
controls, and actual four-pad buy/sell/Ready→90kframes→save/reboot/cancel/lock/reset.
Native stat rows/leaders/finished browser must follow current identities.

Use --transfers-reference exact qualified Nov2 b29af4...c3d8. Pre-neon controls
are now freshly rebuilt from the **same current version/features**, using only
--legacy-neon-marker; require only the palette word/checksum binary difference
and every original CRAM/rendering assertion. The old fixed df56 remains a valid
historical control for Nov2, never a matched full-image transfer control.

Independent final rebuild/exact Nov2 rollback, six fresh matched AI controls,
IPS, actual opened final-ROM screenshots, website1440/390/320, public-source ZIP
and delivery policy remain mandatory. Physical USB/four-person feel remains
manual. Existing RetroArch stays open; new-release cleanup must defer while active.

--- Qualified public release policy/history follows ---

# Shared test and release checklist — Claude and Codex

Qualified 2026-11-02 matrix: 112 mandatory suites. Retain all 106 earlier suites
and their criteria; add replay_hud, quickgame_cpu, quickgame_cpu_flow,
quickgame_cpu_shootout, menu_background and neon_marker. Supply exact R7
--replay-hud-reference and freshly rebuilt pre-neon df56 --neon-reference,
alongside every earlier reference and the six fresh matched AI controls.
Source receipts also bind both supplied menu assets.

Require native replay title/map, frozen panel/bar/units, actual queued-minor
ownership, dropped-SR negative, menu cycles/CPU ownership/flow/shootouts, all
1,120 background cells/pixels and unchanged actual startup pictures. Audit all
40 original AutoReplayOn scenes with native packed-decoder commit proof, plus
40 strict raw-exact declared AutoReplayOff pairs and 10 active negative controls.
Calibrate native CPU state offsets against all 16 known GPRs and a known loop
PC. Preserve all older comparison chains. Long-pass native input continues to
frame 50,001, retaining both exact original 15,501-frame event prefixes and all
original minima/lift/fraction/solver/ABI/menu/lock/reboot assertions.

The entire fresh 112-suite gate, independent rebuild/exact R7 rollback,
original-base IPS, exact public sources/ZIP/hooks, opened real images and
1440/390/320 browser review must finish before installation. No earlier failed
candidate passes approve the current qualification. Physical USB/four-person
play feel remains manual; no new Hard strength claim.


Shot Plan's nine-section verifier has a 2,400-second host wall budget after a
retained 1,200-second timeout. All its child timeouts, native-frame deadlines,
ABI/coverage thresholds and nine required sections remain unchanged. Every
new report records the wall budget separately from the functional assertions.


Shot Plan flow additionally requires --flow-reference exact R7 (the wrapper
supplies its existing --replay-hud-reference). Keep the two original current
cold-boot observations and report their native one-timer occurrence honestly.
For mechanics, capture fresh genuine R7 pre-goal/pre-shot/pre-catch On/Off
states and paired SRAM, then run matched starts for current and reference.
Require real native same-team catch/passer/receiver/sequence/serial one-timer
chains within the original two-frame bound in matched On cases. Retain all
original route/movement/leg/end/shot/pass/catch/clock minima, 256/512/512 observer
ABI cases, four active chain negatives, and actual native PC event-commit
coherence with at most two-frame deferral. Preserve the original cold-boot
coverage failure and diagnostic separately; no forced outcome or win-rate claim.


Current R7 matrix:106 mandatory suites, retaining all103 and thresholds. Add
allstar,allstar_flow,allstar_shootout and exact R6 --allstar-reference. Keep
R5 --quickgame-reference and all older references, with six freshly built
matched controls. All106 executed freshly and pass; source/ROM hashes must match. Prior104/106 candidate failure retained.


Current R6 matrix: **103 mandatory suites**, all100 prior tests plus
quickgame,quickgame_flow,quickgame_shootout. Supply exact R5
--quickgame-reference and all older references/fresh matched controls. Candidate
49c8b23b940a9c5368580dfcad11626a3ffbd4a51cdcae10ca8c9ce01f642487.
All103 pass on the current exact image; never import historical successes. Source freezeV3 has
333files. Five observer files changed after the retained100/103 failed matrix;
see QUICKGAME_R6.md for exact evidence and original thresholds retained.


Historical R5 matrix: **100 required suites**, all mandatory. The new suites are
`finisher_position`, `momentum` and `shot_panel_left`; retain all 97 prior suites,
original numerical thresholds and every historical comparison. Supply exact r4
`--presentation-reference`, all earlier references and freshly built matched AI
controls. Bind both source hashes and exact ROM. No skip/stale pass is allowed.

## Momentum, lower-left shot meter and native positioning — 2026-11-01-r5

**Momentum: On/Off**, default On, controls the existing earned up-to-±10% boost.
Off removes scaling, consumes events and hides bars; Easy100/20/full energy is
independent. The dual-unit shot meter replaces the lower-left NHL badge, with
an automatic power-play-caption fallback. Native receiving and Hard defensive
arrival now retain actual tracking and braking without writing motion/results.

All **100 required suites pass** on this exact image and 325 hashed test/build
sources. The formerly retained receiver geometry check passes. Independent
rebuild, exact Nov1r4 rollback and original-base IPS reconstruction pass.
7/40 ordinary 600-frame scenes are raw-exact to fresh r4 controls; every
difference and the complete older comparison chain remain recorded. No new
Hard win-rate series. Earlier 90/100, 95/100 and 99/100 failures are retained.

See [MOMENTUM_LEFT_R5.md](MOMENTUM_LEFT_R5.md),
[MOMENTUM_LEFT_RESULT.json](MOMENTUM_LEFT_RESULT.json), and the additional
[request-by-request audit](FINAL_AUDIT_R5.md). Human keeper-outlet confirmation,
retained-variant preferences and unreachable Bodin delivery remain explicit.
ROM SHA256: `db244dd005f960a9923c44f0dc4168fb938af227a5e9aa97f24d376fd295291e`; CRC32: `99166AFE`.

Prior Nov1r4 matrix:97 required suites. Add `faceoff_dots` with all seven sections
(geometry, commit, storage, menu, observer, flow, lifetime). Require
`--faceoff-dots-reference` exact Nov1 r3 SHA0b4b104c... and retain all older
references and independent comparison chains. Actual native minors, both clubs
and controller devices, all valid coordinate pairs, native boundary ABI,
separate SRAM, first-match locks and view/shootout option lifetimes are required.

## Optional painted-dot faceoffs — 2026-11-01-r4

Independent start-menu **Faceoff Dots: Off/On**, default Off. On maps the final
native stoppage point to the nearest painted point within its native region.
Off retains the inherited free neutral-zone point policy. Native formations,
puck placement, line selection, camera and renderer remain responsible.
Native and Full/Light/Mini save separately and seasons lock after match one.

The whole-formation displacement is reproduced on exact unmodified old/current
ROMs after a declared native queued minor: point(-14,-12), centres(-14,-27) and
(-14,3). On gives point(0,0), centres(0,-15) and(0,15). This matches the reported
appearance; the exact original incident history is not authenticated. Earlier
centre-only observers excluded displaced points. This is an optional coordinate
policy, not a claim of full NHL faceoff-location rules or a renderer repair.

All 97 suites execute:96 pass; retained finisher_hold remains failed with current
measurements disclosed. Strict gate FAILED. New geometry/ABI/save/menu/native
foul/lifetime tests pass. Independent rebuild, exact Nov1 r3 rollback, five matched
AI controls and original-base IPS reconstruction pass. 38/40 ordinary scenes
are raw-exact to fresh Nov1 r3; every difference and older comparison is retained.
See FACEOFF_DOTS_R4.md and FACEOFF_DOTS_RESULT.json.

ROM SHA256:c32a79e34127757b52cd488c124c9247bf7b875088bac89956a6b7ca2b132cf6; CRC32:AD52D7BA.

Prior Nov1r3 matrix:96 required suites. Add `shot_plan` with all nine sections
(geometry, decision, target, commit, flow, input, storage, menu, lifetime)
and `--shot-plan-reference` exact Nov1 r2 SHA98485464... while retaining every
previous reference. All native target/commit and observer CCR/IRQ contexts,
actual native routing/pass/catch/shots and the whole context/lock lifecycle
are required. Strict gate still retains finisher_hold as FAILED.

## Optional Hard AI shot planning — 2026-11-01-r3

Independent start-menu **AI Shot Plan: Off/On**, default Off. On lets a quiet
Hard CPU carrier defer a covered middle-distance ordinary shot, preserving
native passing and using two lateral approach targets when space permits.
Real keeper openings, close finishes, useful long shots and already buffered
one-timers retain native decisions. Pressure keeps native steering/evasion;
after 96 actual carrier-target observations the deferral ends. Native movement,
attributes, shot/pass physics, ownership and results remain responsible for play.

Native and Full/Light/Mini preferences save separately and lock after match one.
Normal/Easy and every active human pad are guarded. The accepted38-win base
remains complete; this optional experiment makes no new win-rate claim.

All 96 required suites execute:95 pass; the retained receiver-hold test remains
failed, with changed measurements explicitly recorded. Strict gate FAILED.
The original complete matrix and its Easy test-observer failure are preserved;
the entire Easy suite passes after correcting its loaded-actor packet predicate,
with256 native observer ABI cases and an active bad-skill negative control.
No cartridge byte changes for that correction. Independent rebuild, exact Nov1 r2
rollback, five matched AI controls and original-base IPS reconstruction pass.
21/40 ordinary scenes are raw-exact to fresh Nov1 r2; every difference and the
entire earlier chain remain recorded. See AI_SHOT_PLAN_R3.md and
AI_SHOT_PLAN_RESULT.json for behavior, all hooks, tests and limits.

ROM SHA256:0b4b104cf31e3b78d5f686349bbaad73ed54ba491c23c6ac661aca02eca396ca; CRC32:BD66F658.

Prior Nov1 r2 matrix:95 required suites. Add `strict_so` with all nine sections
(capture, selection, spin, setup, storage, menu, gameplay, input, lifetime)
and `--strict-so-reference` exactNov1 SHA331a1216... while retaining every
previous reference. Private invocation: shootout-extras-20261101/qa95-command.json.

## Optional overtime shootout roster and spin rules — 2026-11-01-r2

Independent start-menu **OT SO Rules: Off/On**, default Off. On rotates the
available native skaters before reuse, excluding every actual goalkeeper
and native injury states. Both clubs may reuse when the smaller eligible pool
has shot. Actual native roster/attribute loading, attempt advancement, goals,
keeper paths and single-miss accounting remain responsible for the result.
A full signed body rotation before the shot ends the attempt. Facing uses its
complete native16.16 angle, so a nearly complete spin remains legal.

This applies to the tied-overtime extension; native standalone Arcade Shootout
keeps its original roster behavior. Native play and Full/Light/Mini save
separately; seasons lock after match one. Existing auto-start, progress,
single-shot and controller behavior remain independent.

All 95 required suites execute:94 pass; only the inherited receiver-hold
geometry failure remains. Strict gate FAILED. 4 complete affected suites
were requalified after scope/navigation test corrections; the first full matrix
and every original failure remain retained. Independent rebuild, exactNov1
rollback, five matched AI controls and original-base IPS reconstruction pass.
40/40 ordinary scenes are raw-exact to fresh Nov1; every earlier comparison
and retained difference remains recorded. No Hard win-rate search.
See STRICT_SO_R2.md and STRICT_SO_RESULT.json.

ROM SHA256:984854649bb9528f9dfc2200d43237cb2a3ab2cbe5cc847fde1ef10d375e660f; CRC32:95D98D33.

Prior Nov1 matrix:94 required suites. Add `alt_goalies` with all12 sections
(velocity, policy, provenance, reach, save, pickup, accounting, observer, physics,
input, storage, menu), and `--alt-goalies-reference` exactr11 SHA3d1f54ae...
in addition to every earlier reference. Private invocation: goalie-rebounds-20261101/qa94-command.json.

## Optional alternative goalkeepers — 2026-11-01

Independent start-menu **Alt Goalies: Off/On**, default Off, implements an
experimental reach21 and catch/rebound model from floating#217606. On keeps
native keeper animations, ownership, saves and outlets; real released shots
may produce cornerward, short/long rinkward or slow/fast goalward rebounds.
Distance and screening change the explicit experimental outcome distribution.
Rebound speed is conservatively capped by incoming horizontal speed. A same-shot
rebound entering the net counts one native goal, one SOG and one keeper SA.
Native play and Full/Light/Mini save separately; seasons lock after match one.

All94 required suites execute:93 pass; only the inherited receiver-hold
geometry failure remains, so the strict gate is FAILED. One complete pass-mode
suite was requalified on the sameROM after extending its actual-input window;
the first full matrix and its P3 coverage failure remain retained. Independent rebuild,
exact r11 rollback, matched AI controls and original-base IPS reconstruction
pass. 19/40 ordinary scenes are raw-exact to fresh r11 controls; every
difference and earlier parent chain remain recorded. No Hard win-rate search.
See ALT_GOALIES_20261101.md and ALT_GOALIES_RESULT.json.

ROM SHA256:331a12164cd1102d4dbbaecea21d7ea12d7f710b79d9c6eaa971cb7d31bc1840; CRC32:C1A1B3B5.

Prior r11 matrix: 93 required suites. Add `pickup_delay` with all six sections
(release, collision, storage, menu, input, passes), and supply
`--pickup-delay-reference` with exact r10 SHA5e3d4aed... in addition to every
earlier control. Invocation: work/pass-pickup-20261031/qa93-command.json.

## Optional pass pickup delay — 2026-10-31-r11

The start menu now has an independent **Pickup Delay: Off/On**, default Off.
On adds a minimum six native updates of contact cooldown to active skaters on
both teams when an ordinary human B pass is actually released. During this
short interval skaters cannot take stick possession or make body deflections.
Goalkeepers, boards and nets retain their native response. Existing longer
cooldowns stay intact; CPU passes and requested CPU keeper outlets stay native.
This is an experimental passing choice, separate from all other pass settings.
It saves separately for native play and each season and locks after match one.

All 93 suites execute: 92 pass; the inherited receiver-hold geometry failure
remains failed. Strict gate: FAILED. Four affected complete suites were
requalified on this unchanged ROM after observer corrections; the first complete
matrix and every original failure remain recorded. Rebuild, exact r10 rollback, matched AI
controls and original-base IPS reconstruction pass. All 40 ordinary scenes are
freshly compared with r10: 40 are raw-exact; every difference and the earlier
comparison chain remain recorded. No Hard win-rate search resumes.
See PICKUP_DELAY_R11.md and PICKUP_DELAY_RESULT.json.

ROM SHA256: 3d1f54ae96b0308163474b8c138be9ed880fa96d2213e871a8e77e71bdbcccc5; CRC32: E07B3785.

Prior r10 matrix:92 required suites. Add `pass_charge`, with all seven sections
(gate,power,storage,menu,input,physics,guards), and supply `--charge-reference`
with exactr9 SHA443c96a2... while retaining every prior reference. `pad_colors`
now requires native cold-boot physical-star renders and an independent r9
regression control. Invocation:work/pass-charge-20261031/qa92-command.json.

## Hold/release passing and corrected controller stars — 2026-10-31-r10

Start-menu Pass Charge Off/On, default Off. With On, ordinary owned human B
passes wait for release. Holding increases native pass power from25%to100%,
capped after30 owning input updates; the cap never auto-releases. Aim can change
while held. Assisted/Directional, both teams, P1–P4 and manual keepers are
covered. CPU keeper requests and B switching without puck stay immediate.
Height/Speed/Cone/Mode/Penaltys remain independent. Native and each season save
separate charge records; the first-match season lock still applies.

Physical stars: **P1blue, P2red, P3green, P4yellow**. This is jdc's final mapping,
superseding the earlier P2green/P3red request. The original red goal is restored.
All fixed rink palette bytes and the native rendering instructions are original;
P3 uses its own identical-shape green art in proven low-ROM padding. Its signed
native tile key is validated through actual cache/DMA/VRAM/SAT rendering.

All92 suites execute;91pass and the retained finisher_hold geometry failure
remains failed. Strict gate:FAILED. Six complete affected suites were
requalified on the same ROM after test-only record, observation and report
corrections; every original functional criterion stays covered. Fresh rebuild,
exactr9rollback, matched AI controls and original-base IPS reconstruction pass.
All40 ordinary scenes are freshly compared with r9;40are raw-exact, with
all earlier r8-and-prior comparisons retained independently. No Hard win-rate
search resumes. See PASS_CHARGE_COLORS_R10.md and PASS_CHARGE_COLORS_RESULT.json.

ROM SHA256:5e3d4aedcf006f2c92dacdae965f79b15dfd078fae6a0862f77b6520a60d1eee; CRC32:0301E4D0.

Prior r9 matrix:91 required suites. Add `easy_stats` and `pad_colors`; supply
`--easy-reference` with exactr8 SHA501da8aa... in addition to every earlier
reference. Invocation:work/easy-colors-20261031/qa91-static-command.json.

## Easy assistance and distinct controller markers — 2026-10-31-r9

Easy gives the entire human club maximum skills (100-equivalent), the CPU-only
opposition fixed20-equivalent skills, and refills all26 human roster energies
to4096 every game frame. Keepers, AI teammates, co-op and native roster
substitutions are covered. Native energy/physics routines are unchanged.
In-game skill/Overall columns actually draw100/20, bypassing the native low-
rating lift only in Easy. Weight/jersey/handedness retain their native identity;
awareness uses the correct inverted timers. Normal/Hard, Crit Off, defaults and
season settings locks retain their established behavior.

P2 green, P3 red, P4 yellow; P1 retains its original appearance. Static star art,
source indices and three fixed rink palette entries change. No runtime drawing
hook or new RAM/SRAM. All869 native sprite frames retain their shape; only the
three requested marker frames change indexed artwork/attributes. Team uniform
and palette0 rink-line colors are untouched; edge pixels sharing those three
palette1 entries take their new hues.

All91 exact-source suites execute:90pass, only the retained finisher_hold
geometry failure. The strict release gate remains FAILED. All original positive
criteria pass on the final image. The first complete91matrix was rejected for
7new failures; its exact ROM/source/results remain recorded. Rebuild, exactr8
rollback, matched AI controls and original-base IPS reconstruction pass.
All40 ordinary scenes are recorded against fresh r8 controls;33 are raw-
exact and every difference plus the complete earlier audit chain is retained.
No Hard win-rate search resumes. See EASY_COLORS_R9.md, EASY_COLORS_RESULT.json
and QA_STATUS.json for precise field scales, native tests and limitations.

ROM SHA256:443c96a23923e96529120cd19c486db1483101896787c76a8d2082e5836e6186; CRC32:9108C83B.

Prior r8 matrix:89 required suites. `penalty_rate` requires all seven sections:
awards, advancing native RNG, whole-fight gate, injury caller, exhaustive storage,
native menu lifecycle and real input. Supply `--penalty-rate-reference` with the
exact 2026-10-31-r7 image and `--contact-race-reference` for the pre-atomic r8
control (SHA4c5023ec...). Build that control with `--legacy-contact-atomic`;
retain every earlier reference. Invocation:
work/penalty-rate-20261031/qa89-release-command.json.

## Separate penalty frequency and preserved native rules — 2026-10-31-r8

The new final start-menu row is Penaltys: 100% / 50% / Off, default 100%. The original
combined Penalties option is renamed Rules and keeps Off/On/On except offside.
The percentage affects ordinary foul admission and whole new fighting incidents;
icing, offside and penalty-shot eligibility retain their existing controls.
A suppressed injury foul uses the native injury-only stoppage instead of losing
its report. Existing pending calls are not rerolled or erased.

All five independent percentage/pass choices save per season and lock after the
first match; native play has separate preferences. No extra SRAM bytes are used.
Buffered human contact-to-shot setup now runs as one protected transition, so an
intervening native sprite update cannot change the measured stick hotspot. The
old42px failure is reproduced independently; native register/CCR/IRQ-mask/stack
contracts are compared at every IRQ level. All 89 exact-source suites execute: 88 pass, only the retained finisher_hold geometry
failure, strict gate FAILED. Independent rebuild, exact r7 rollback and original-
base IPS reconstruction pass. See PENALTYS_R8.md and PENALTYS_RESULT.json.

All 40 ordinary 600-frame scenes are recorded against fresh exact r7 controls;37 are raw-exact. Every difference and the complete earlier audit chain remain retained. No Hard win-rate investigation resumes.

ROM SHA256:501da8aaf8fc1fb4f5fdd22f4d8f8d893a8fe06de9ec28cb4ecaf0a6e18297eb; CRC32:F2C8334E.

Prior r7 matrix: 88 required suites. `pass_mode` requires all seven sections:
dispatch, cone, full passes, scans, records, menu and real input. Supply
`--directional-reference /private/exact-2026-10-31-r6.bin` with earlier references.
Exact invocation:work/directional-pass-20261031/qa88-final-command.json.

## Optional directional passing and vector targeting cone — 2026-10-31-r7

Two new start-menu rows: Pass Mode Assisted/Directional (default Assisted), and
Target Cone Default/15 degrees/30 degrees/45 degrees (default Default).
Directional sends ordinary human B passes along the actual eight-direction aim,
without selecting a receiver or transferring control at release. The explicit
cone choices limit Assisted receivers using actual vector half-angles; Default
retains the previous native octant policy. P1–P4 and manual keepers are covered;
CPU keeper outlet requests retain their requested receiver. Height and Speed
remain independent. Seasons save all four choices and lock after the first game;
standalone preferences are separate. Hold/release charging remains research.

The first shared-path prototype reduced AI finish releases in the gameplay test
and was rejected. The final design hooks human B input and existing human-only
scan branches, preserving the CPU pass/scan/outlet instruction paths exactly.
All 40 ordinary 600-frame scenes match fresh r6 controls byte-for-byte; the earlier
comparison chain is retained. This is bounded regression evidence, not a claim
that every possible game is identical. No Hard win-rate investigation resumes.

All 88 shared suites execute: 87 pass and the retained receiver-hold geometry check
fails, so the strict release gate remains FAILED. No new regression is waived.
Independent rebuild, exact r6 rollback and original-base IPS reconstruction pass.
See PASS_MODE_R7.md and PASS_MODE_RESULT.json for code, tests and delivery.

ROM SHA256: 8172a7e4b3d55754076d4f31de2def263d423bad832b2057538fa3b5c1ca86c7; CRC32: 5DC93C86.

Prior r6 matrix:87 required suites. `fair_pickup` covers native assignment, guards,
ABI, collision, advancing RNG and physical P1–P4 input. Supply
`--pickup-reference /private/exact-2026-10-31-r5.bin` with previous references.
Exact invocation: work/fair-pickup-20261031/qa87-command.json.

## Fair automatic co-op pickup control — 2026-10-31-r6

When a free CPU skater on your team takes possession, eligible active human pads
now share a random chance to control that skater. Native P1 priority no longer
wins every such co-op pickup. Only actual accepted pickups are considered.
Already controlled receivers, requested keeper outlets, manual keepers, pending Y,
locked skaters, single-human teams and special modes retain their native paths.
Other pads keep their existing skaters. There is no new menu setting here.

The hook at1538A calls a bounded helper at2EFC00. It uses the real controller-side
map, native RNG and native C0F8 handoff, with temporary eligibility data on the
stack. No RAM/SRAM field, forced pickup, rating or movement change is added.
Native tests cover316 assignment contexts,36 unchanged guards,112 paired ABI cases,
32 full collision contexts and48 physical-pad input branches.24 advancing-RNG series
exercise 144000 controlled native pickup draws, exactly matching the native RNG
control. These are automated fixtures, not 144000 matches or a hardware playtest.

All 87 shared suites execute;86 pass and the retained finisher_hold geometry failure
remains, so the strict gate is FAILED. All 40 current ordinary scenes and fresh r5
controls are recorded, including timing differences. Rebuild, exact r5 rollback
and original-base IPS reconstruction pass. No new Hard-strength claim.
See FAIR_PICKUP_R6.md and FAIR_PICKUP_RESULT.json.

ROM SHA256: 548615ad01079d6a93fc62a0409b4a8d6ec4e53676f8a629081f8cc34da712fa; CRC32: 26911EBB.

Prior r5 matrix:86 required suites. `pass_speed` adds native lower-power intercept,
ABI, independent height/speed lifecycle and the standalone goalie-storage regression.
Supply `--speed-reference /private/exact-2026-10-31-r4.bin` with previous references.
Exact invocation:work/pass-speed-menu-20261031/qa86-final-command.json.

## Independent pass speed and safe standalone preferences — 2026-10-31-r5

The last main-menu row now offers Pass Speed: Normal / Slow, default Normal.
Slow reruns the native intercept calculation at80%of nominal pass power, keeping
receiver movement, native time bounds and catch timers in the calculation.
It never chooses an earlier arrival. Fast receivers outside that lower-power
range retain their native pass. This is not an exact20%reduction for every pass.
Pass Height Normal/Low remains independent, using the original arrival estimate
and preserving native fractional lift. Both teams and keeper targeted B passes
share these settings; A flips, C shots and blind-pass code retain their paths.

Each season saves both choices and locks them after the first completed match.
Standalone play has separate preferences. A paired native test also exposed
r4's standalone height record at2E20overlapping Full-season goalie data. Both
standalone preferences now use4D20in Light's excluded shared-profile gap; menu
writes preserve Full goalie bytes and survive slot circles and cold boots.

Native tests cover120direct clamp ABI cases,1152Normal/invalid full solver ABI
comparisons,384Slow comparisons against the original native lower-power solver,
34real menu/lifecycle cases, paired r4/current goalie-storage reproduction and
four co-op input games covering both speeds and heights. All86shared suites run;
85pass and the retained finisher_hold geometry failure remains, strict gate
FAILED. All40current ordinary scenes and fresh r4controls are recorded; additional
instructions may change native HV-counter decisions. No unchanged-gameplay,
pass-completion or new Hard-strength claim. Rebuild, exactr4rollback and original-
base IPS reconstruction pass. See PASS_SPEED_R5.md and PASS_SPEED_RESULT.json.

ROM SHA256:40f388dc0beaedbd0883fdd4101a30debfb0fbbe62aab9d7a382e61476d513e0; CRC32:F82519B6.

Prior r4 matrix:85 required suites. `pass_height` adds native lift ABI/arithmetic,
real menu persistence/lock/lifecycle and co-op input cases. Supply
`--height-reference /private/exact-2026-10-31-r3.bin` with previous references.
Exact invocation:work/pass-height-menu-20261031/qa85-command.json.

## Optional pass height — 2026-10-31-r4

The main menu now has Pass Height: Normal / Low, default Normal. Low lowers the
vertical lift of targeted B passes on both teams, including keeper passes.
Short passes retain their existing lift. The native horizontal velocity,
arrival-time estimate and receiver intercept arithmetic remain unchanged.
A flips, C shots and blind passes retain their code. Lower lift can change
landing and interception; no pass-completion or competitive balance claim.

Full, Light and Mini save their own setting, which locks after the first
completed game and survives a reboot. Native exhibition/playoffs have a separate
preference. Missing/corrupt records default Normal without unlocking a season.
Confirmed season restart resets only that season to Normal.

Native tests cover80paired register/CCR/stack/fraction contexts,64moving-target
contexts across5profiles,28controller/menu/slot/boot/lock/restart cases, and real
co-op directional/B input with both Normal and Low passes above the lower cap.
The full85-suite exact-source matrix has84pass and the retained finisher_hold
geometry failure; the strict gate remains FAILED. Forty ordinary native scenes
and fresh r3 controls are recorded; added dispatch timing may change HV-based
decisions, so no identical-gameplay claim. The earlier strict chain is retained.
Independent rebuild, exact r3rollback and original-base IPS reconstruction pass.
No Hard win-rate investigation is resumed. See PASS_HEIGHT_R4.md and
PASS_HEIGHT_RESULT.json for the exact evidence, scope and delivery status.

ROM SHA256:0f7f080a30b52e536d7107ffc75044c21c1c617aa5d0007ad6203349604e2a69; CRC32:4B4E78D6.

Prior r3 matrix:84 required suites. `downed_receiver` adds paired native eligibility,
ABI/collision and co-op input/fall/recovery cases. Supply `--receiver-reference /private/exact-shootout-r2.bin`
with previous references. Exact invocation:work/downed-receiver-20261031/qa84-command.json.

## Downed pass receivers — 2026-10-31-r3

Falling/downed skaters are no longer selected by the native B-pass search or
keeper fallback, and cannot take stick possession while the fall/recovery
animation remains active. A receiver knocked down after launch is protected too.
The puck can still hit the body and deflect. Standing windups/one-timers, keeper
dives/catches and skaters who have recovered retain their native eligibility.

Two pass-scan eligibility tests and the existing actual stick-contact gate call
one small helper. No general frame/animation hook, RAM field, forced movement,
physics, rating or RNG write is added. The original pickup/crit gate and native
body response remain. Additional instructions can alter native HV-counter timing,
so ordinary game trajectories are recorded rather than claimed byte-identical.

The paired native tests cover84CCR/register/stack contexts,114real receiver
searches and44full stick/body collision cases. A native co-op input test injects
only a synthetic receiver fall after an actual pass: the parent shows6downed
possession episodes (579observations); current has zero. Recovery and subsequent
legal possession occur naturally. These are not physical-controller recordings.

All84shared suites execute:83pass and the retained finisher_hold geometry failure;
the strict gate remains FAILED. All40current ordinary scenes and fresh exact
r2controls are recorded, including every difference. The complete earlier strict
comparison chain remains on those parent controls. Rebuild, exact r2 rollback
and original-base IPS reconstruction pass. No Hard win-rate search is resumed.
See DOWNED_RECEIVER_R3.md, DOWNED_RECEIVER_RESULT.json and QA_STATUS.json.

ROM SHA256:40b3a5700ae7c3ce6f0536b878a22b2e7284a8e418231ed6a6ea4ce891fb3548; CRC32:16DD6925.

Prior r2 matrix:83 required suites. `shootout_rules` adds both-end progress, native
retouch, ABI and input-free start tests. Supply `--shootout-reference /private/exact-2026-10-31.bin`
with previous references. Exact invocation:work/shootout-rules-20261031/qa83-command.json.

## Shootout puck progress and automatic start — 2026-10-31-r2

Shootout attempts now start without a controller shortcut. The tied-OT fixture
reaches the first live human attempt with no input in180frames (about3seconds),
previously619frames. A player may react before starting the approach; the normal
attempt timeout still applies. Human and CPU countdowns both use60native ticks.

Before a shot, the puck must keep moving toward the opponent's goal. Substantial
retracement, a stopped approach or crossing the goal line outside the mouth ends
the attempt through the existing native miss event. Body orientation alone is
not a foul: an unshot loose puck still moving forward may be recovered. Stick
movement uses an8-world-unit retracement allowance and12non-forward native
observations of stop tolerance. These are game tolerances, not literal NHL units.

Native shot/windup, loose-shot retouch, keeper ownership and shot-flight handling
remain. The native post-shot retouch queues one ending; no general pickup or
physics hook was added. This is an attempt-control fix, not complete NHL roster,
spinorama or eligibility parity. Custom OT lengths and season formats remain.

All83 exact-source suites execute:82pass and the identical inherited
finisher_hold geometry failure; strict gate remains FAILED.54paired native
boundary/ABI contexts,28both-end native-input cases and the no-input starts pass.
All40 ordinary raw scenes match40fresh2026-10-31 controls exactly. Earlier net
impact differences versus r13 remain independently audited. Rebuild, exact
2026-10-31 rollback and original-base IPS reconstruction pass. No Hard search.
See SHOOTOUT_RULES_R2.md, SHOOTOUT_RULES_RESULT.json and QA_STATUS.json.

ROM SHA256:dc279e63f35b2607ebba4eb5fb439eeb47f36239bddcfaae7c3d24e29f99cb08; CRC32:90081498.

Prior2026-10-31 matrix:82 required suites. `net_contact` adds native net-release
boundaries and paired unforced gameplay. Supply `--net-reference /private/exact-r13.bin`
with the previous references. Exact invocation:work/net-contact-20261031/qa82-command.json.

## Less sensitive goal nets — 2026-10-31

Goal nets now require a50%higher impact-speed component before the existing
native dislodgement can trigger:8192→12288 in either direction on either axis.
Ordinary collisions keep the solid-net response; a heavy burst can still move
it. Both ends and every skater/keeper use the same rule. Four threshold immediate
bytes change; instruction timing, random gate, puck proximity, native release
velocity, stoppage, scoring and reset code remain exact.

A genuine CPU-play sequence reproduced one old dislodgement with40moving-net
observations; the corrected sequence has none. A real human burst reaches13868,
above the new threshold, with its input/motion trace exact to r13. The native
helper passes368paired boundary/actor/end/direction/guard/ABI contexts. No user
recording or physical-controller playtest is claimed.

All82 exact-source suites execute:81pass, only the identical inherited
finisher_hold geometry failure. Strict gate remains FAILED. All40 scenes are compared with fresh r13 controls: raw-exact, or exact until
a verified native net release. Post-impact differences are recorded. Rebuild,
exact r13 rollback and original-base IPS reconstruction pass. No new Hard win-rate series. See NET_CONTACT_20261031.md,
NET_CONTACT_RESULT.json and QA_STATUS.json.

ROM SHA256:aa035e55db8b43d1d38f3b178a739cc0edfab1fb8ef7837de718248fde5721f1; CRC32:BF43956E.

Prior r13 matrix:81 required suites. `manual_keeper_pass` adds paired native
keeper pass and physical-pad ownership cases. Supply
`--manual-reference /private/exact-r12.bin` with previous references.
Exact invocation:work/manual-keeper-pass-r13-20261030/qa81-command.json.

## Manually controlled keeper passes — 2026-10-30-r13

A fresh pass press while your manually selected keeper holds the puck now
reaches the native keeper passing routine. The immediate B-switch correction
previously treated an owned keeper as a switch request. Owned skaters retain
their native pass path; without possession B still switches to an eligible
skater nearest the puck. Automatic keeper catches and P1–P4 CPU-outlet requests
retain their established behavior.

Only the early ownership branch in switch.s and fourgoalie.s changes. There is
no new RAM, global hook, pass target override, physics, AI or season change.
Mini remains seven games. Native control may move to a receiver when the pass
is released; this is separate from switching away before executing the pass.

All81 exact-source suites execute:80pass, only the identical inherited
finisher_hold geometry failure. Strict gate remains FAILED. All40 current raw
ordinary-game traces match40 fresh r12 controls. Independent rebuild, exact
r12 rollback and original-base IPS reconstruction pass. No Hard strength series.
See MANUAL_KEEPER_R13.md, MANUAL_KEEPER_RESULT.json and QA_STATUS.json.

ROM SHA256:3070c2bbac4ec9fe6cf578c7fd0a3260869371a232b05ed76f33e44ca71ea899; CRC32:4D62BA8E.

Prior r12 matrix:80 required suites. `mini_seven` adds the seventh-game playoff
boundary; `mini_division` now exercises224fixture cases and seven real simulated
rounds with a cold boot. Supply `--seven-reference /private/exact-r11.bin`.
Exact invocation:work/mini-seven-20261030/qa80-command.json.

## Mini is seven games — 2026-10-30-r12

Mini now has seven regular-season games: one against each of the seven other
clubs in your division. The new-game menu shows1/7, the saved length is7 and
all32 clubs finish with7GP. The eighth return fixture is no longer scheduled.
Single-player home/away alternation and co-op home games retain their policy.

Qualification and the season-summary boundary use the seventh game. Mini
retains one game per playoff pairing; Full remains best-of-seven and Light
retains its own schedule. Existing played legacy eight-game saves retain their
original length, lock and eighth-game cursor limit. Changed releases still use
fresh progress; an already running older ROM is left alone.

All80 exact-source suites execute:79pass, only the identical inherited
finisher_hold geometry failure. Strict release gate remains FAILED. All40 raw
ordinary-game traces match40fresh r11 controls exactly. Rebuild, exact r11
rollback and original-base IPS reconstruction pass. No new Hard strength series.
See MINI_SEVEN_R12.md, MINI_SEVEN_RESULT.json and QA_STATUS.json.

ROM SHA256:2ca0be4ef69f1d875c5a25e1ef91e42bda6b87396c5471fa8a417eb652ec8d60; CRC32:FB7FA2F0.

Prior r11 matrix:79 required suites, adding `penalty_owner`. Supply
`--penalty-reference /private/exact-r10.bin` with all existing references.
Exact invocation:work/coop-penalty-owner-20261030/qa79-command.json.

## Fouled player keeps the penalty shot — 2026-10-30-r11

P1–P4 now retain the penalty shot awarded for a foul against their controlled
breakaway attacker. Native setup can move the shooter to another object slot;
the physical controller is captured when getBAplayerInfo accepts the award,
then used when the two penalty-shot participants are assigned. Other attacking
pads cannot claim the shooter first. Existing team-side settings are restored
before returning from setup; normal assignment resumes after the attempt.

This release addresses priority1 only. Manual-keeper passing, downed receivers,
fair random unassigned pickup ownership, Penaltys100%/50%/Off and seven-game
Mini remain queued in TODO.md. Mini currently still has eight divisional games.

The native capture/setup, both teams and P1–P4 input/return regressions pass.
The full79-suite exact-source matrix has78pass and the identical inherited
finisher_hold failure; strict gate FAILED. All40 current ordinary-game raw
traces match40 fresh r10 controls exactly. Independent rebuild, exact r10
rollback and original-base IPS reconstruction pass. No new Hard strength
series or39/50 qualification is claimed. See PENALTY_OWNER_R11.md,
PENALTY_OWNER_RESULT.json and QA_STATUS.json for exact evidence and limits.

ROM SHA256:8f84f537ab945ea849ffc69eeba6794e9e1651556d3f878648ed846f8ebc4703; CRC32:41B60F46.

Prior r10 matrix:78 required suites, adding `human_contact`. Supply
`--contact-reference /private/exact-r9.bin` with all prior references.
Exact invocation:work/onetimer-contact-20261030/qa78-command.json.

## Human one-timer stick contact — 2026-10-30-r10

jdc reported that receiving a pass while repeatedly shooting launched the puck
far from the stick. Native co-op input tests reproduced buffered releases up to
36.8 game pixels from GetHot's stick hotspot, with the shot animation at0.
The human buffer now waits for actual stick contact (radius4), then starts the
native contact/follow-through phase24. A fresh owned C cannot start a competing
ordinary windup while that request waits, and another pad's C cannot erase it.

The request stays responsive to native movement and possession loss. No puck
teleport or pickup-radius change is used; AI and normal shot physics retain
their code. Mini's divisional schedule, OT, momentum, defaults and locks remain.
See HUMAN_CONTACT_R10.md, HUMAN_CONTACT_RESULT.json and exact QA_STATUS.json.
The inherited finisher_hold geometry limitation remains failed; no new Hard
strength series is claimed. SHA256:b28fa2c8f42bd792f3118bc3d71df2fed5f959957d4adc60f372f2d4863c2038; CRC32:F157EFEB.

Prior r9 matrix:77 required suites, adding `mini_division`. Supply
`--mini-reference /private/exact-r8.bin` along with all prior references.
Exact invocation:work/mini-division-20261030/qa77-command.json.

## Division-only Mini season — 2026-10-30-r9

Mini now plays eight regular-season games exclusively within the selected club's
own division. Its first seven rounds cover every divisional rival once; round8
is a return against the round4 opponent. All four simulated divisions use the
same eight-team round robin. Every team still plays eight games. Existing
single-player home/away alternation, co-op home fixtures, season locks and NHL
playoff qualification remain. Full and Light retain their league-wide schedules.

jdc reported Edmonton meeting Detroit in Mini. Exact r8 reproduces this from a
saved first-opponent choice; r9 restricts the cursor and actual fixtures to the
Pacific division. See MINI_DIVISION_R9.md, MINI_DIVISION_RESULT.json and current
QA_STATUS.json. The pre-existing receiver-hold geometry limitation is retained;
no new Hard win-rate series is claimed. ROM SHA256:29672052309b0bcad831716cd0edf35b498a265f0063d99173c70dff4df47c3a; CRC32:FD1A8A3A.

Prior r8 matrix:76 required suites, including `whistle_momentum`.
Supply `--rules-reference /private/exact-r7.bin` along with all previous reference
arguments. Exact private invocation:work/overtime-momentum-20261030/qa76-command.json.
The overtime/shootout suites now cover all four selected durations and playoff
transitions. The old fixed-600 expectation is intentionally replaced.

## Selected-length overtime and whistle momentum — 2026-10-30-r8

Overtime now uses the selected period length:5,7,10 or20 minutes. Native sudden
death and the existing shootout after a tied overtime remain. Shots/checks while
the clock is stopped, during a faceoff, pause, foreign view, replay or Stars no
longer earn crowd momentum or rating boosts. Blocked counters are consumed
immediately; resuming cannot bank them. Existing earned momentum is retained.
Normal and Hard retain the same earned-meter rules; Easy retains fixed ratings.

Changes are confined to shootout.s and crowd.s, plus release strings/checksum.
Rebuild, exact r7 rollback and original-base IPS reconstruction pass. All shared
checks are freshly run against this image; see OVERTIME_MOMENTUM_R8.md and
QA_STATUS.json for the exact results and retained AI limitation. No new Hard
strength matches are claimed. ROM SHA256:083f45ffbfff3986d55fbe2ea13384916c4c5b4f1d0b6c5e21e39aa80af80e02; CRC32:D813665F.

## Icing On default restored — 2026-10-30-r7

jdc clarified that **Icing must default On**, despite Off in the previous menu
screenshot. Fresh boot, empty Full/Light/Mini formats and explicit restarts now
use On. All other r6 menu defaults and keeper/current-skater outlet behavior stay
unchanged. Manually chosen saved settings and played-season locks still apply.

Only three default immediate bytes change1→0 outside version/checksum fields;
all other game code is byte-identical to r6. The 75 shared checks ran:74pass,
only the known inherited finisher_hold geometry failure; strict gate FAILED.
All40 current raw no-B scenes match fresh r6 controls exactly. The older r6/r5
observation audit remains separately disclosed. Rebuild, exactr6 rollback and
original-base IPS reconstruction pass. See ICING_DEFAULT_R7.md and QA_STATUS.json.
Current QA also requires `--icing-reference /private/exact-r6.bin` and
`--icing-default 0`. Exact private invocation:
work/icing-on-default-20261030/qa75-command.json.
SHA256 48af31f9f7c85766951bf42745360571d6e7bf025bdce936363a58a178ab05f6; CRC32 273334B0.

## Keeper catch handoff and requested defaults — 2026-10-30-r6

A keeper already selected before catching the puck now returns to CPU control
on the accepted catch, and that pad receives an eligible free skater. The native
AI marker follows this ownership change. P1–P4 request an outlet to their current
skater; pass no longer switches that requester first. Explicit Y after the catch,
CPU-only keepers, opposing human teams and special modes retain their rules.

Fresh defaults follow jdc's latest screenshot: Auto lines, Fighting Off, Hard,
Auto Replays Off, Crit Shots Off and Icing Off; Edmonton remains the default club.
The screenshot's Icing Off supersedes the earlier r5 On request in this release.
Existing valid saved choices and played-season locks remain readable.

All75 shared checks ran:74pass,only the inherited finisher_hold geometry failure.
Strict gate remains FAILED. New coverage includes44 native ABI/object guards,
148 four-pad keeper cases (68 added handoff/current-requester cases),5 branches
of the reported r5 catch and6 native default/menu-render cases. All40 current puck/clock/action timelines match fresh controls.35 raw traces
are exact;15 isolated position/cache/render observations across5 traces are
recorded separately with exact whole rows before and after each difference. Rebuild, exactr5 rollback and original-base IPS reconstruction pass.
No new Hard win-rate series. See GOALIE_CATCH_R6.md and QA_STATUS.json.
Current QA additionally requires `--control-reference /private/exact-r5.bin`
and uses `--icing-default 1`. The exact private invocation is preserved at
work/goalie-control-defaults-20261030/qa75-final-command.json. The older abbreviated
examples remain historical.
SHA256 74f099b10459e000b4b50870e41617983641445f83c813328dba019b6b02fd7d; CRC32 25BBB406.

## Icing switch and Edmonton defaults — 2026-10-30-r5

Icing has its own **On / Off** row at the bottom of the start menu, after
Crit Shots. **On is the default**, explicitly confirmed by jdc. Off suppresses
the native touch-icing award. It follows the ordinary season-settings lock
after the first completed match and is saved independently for Full/Light/Mini.
Fresh startup, new empty formats and an explicit restart default to Edmonton;
manual team selection and the identity of an ongoing saved season still work.

All 72 shared checks executed: 71 pass; only the inherited finisher_hold geometry
failure remains. The strict gate remains FAILED. The new suites cover 34 native
menu/persistence/default-team cases and 56 synthetic native rule cases. Forty
current no-B scenes match fresh r4 and r3 controls exactly; all40 fresh r2 controls
still reproduce the immutable original traces. Rebuild, exact r4 rollback and
original-base IPS reconstruction pass. No new Hard win-rate series was run.
See ICING_MENU_R5.md and QA_STATUS.json for scope and exact-source evidence.
The current runner additionally requires exact r2/r3/r4 controls via
`--keeper-reference`, `--outlet-reference` and `--menu-reference`. Its private
complete command is retained in work/icing-edmonton-20261030/qa72-final-command.json.
The older abbreviated example below is historical; retain all current mandatory
fixtures/ablation options. `--jobs 3` is available with `--keep-going`; diagnostic
completion never converts a failed required check into a passing strict gate.
SHA256 a7e8bef0e8c78da6d37eacb432769af3f6d4b99e0196e451875c7991656ca182; CRC32 33894753.

## Keeper pass request at the possession deadline — 2026-10-30-r4

A timely pass request could switch the skater yet lose the keeper outlet to the
native possession timeout before it was processed. The first accepted request
now reserves up to four native processing ticks when the counter is still
nonnegative. Holding B does not refresh that reservation. An already queued
native timeout, negative counter or actual whistle retains the native outcome.
On jdc's controller this is physical A, the game's logical B. Y keeps its outlet
behavior. Native passing, target choice, physics, ratings and the r3 keeper
correction remain. No new Hard-versus-Normal strength series was run.

Paired timing tests: 1,792 valid requests per ROM; r3 passed 1,776 and r4 passes
all 1,792. All 128 late/stopped requests remain without a pass. The 1,920 cases
per ROM vary two native catches, timing and 1/2/5/12-frame taps; they are not
independent matches. Shared regression: 38 native ABI/object/guard cases and
108 paired input contexts pass. All 70 matrix checks executed: 69 pass; only the
same inherited finisher_hold geometry failure remains. Strict gate: FAILED.
The affected replay check was rerun after declaring the input modules; all
40 current no-B trajectories exactly match fresh r3 controls, and all 40 fresh
r2 controls still match the immutable original scenes. The original rejected
scope check is retained. Five rebuild/rollback comparisons and original-base
IPS reconstruction pass. See OUTLET_DEADLINE_R4.md and QA_STATUS.json.

SHA256 4dd53440a7a4b4b7920a432b1e70a18e0ddb43e2a57a553b65cd052a0a0dca50;
CRC32 4884D486. Fresh progress for this release; remaps/config/history retained.
The intermittent faceoff alignment report is still open.


## CPU keeper lateral-carry correction — 2026-10-30-r3

CPU keepers follow the actual carried puck instead of the body/stick midpoint.
If an opposing carrier moves across a committed lateral save, its stale final
hold is capped at eight native ticks and its cached movement choice is cleared.
Natural recovery, manual keepers, real loose-shot saves, catches and physics
retain their rules. Crit/B/Stars fixes from r2 remain.

All 69 exact-source checks ran: 68 passed. The inherited receiver-hold positioning check still fails, so the strict release gate remains FAILED. This is the same documented AI limitation retained in the user-selected playtest.
The new keeper suites pass 82 native ABI/object/guard cases and 48 paired live
approaches: r2 10 goals/15 catches, current 4 goals/22 catches. This is not a new
win-rate series. Five independent rebuild/rollback comparisons and original-base
IPS pass; only 219 declared bytes differ from r2, including header/checksum.
All 40 old r2 control traces were freshly reproduced and all 40 current scenes
recorded; current trajectories may differ because keeper behavior changed.
See GOALIE_LATERAL_R3.md and QA_STATUS.json. Fresh progress; remaps/config/history
preserved. The Hard win-rate investigation stays stopped.
SHA256 3453b3fba1a4e3b76c8f859311a499f3f2bf8d9a493280f43ad41eca8b784057; CRC32 A33889B1.


## Current maintenance release — 2026-10-30-r2

Crit Shots locks after the selected season completes match 1; Auto Replays and
other options keep their behavior. Fresh B selects the eligible teammate nearest
the actual puck without skater possession, including own-goalie possession and
old pass animation; Y and own-skater passing retain their rules. A native goalie
outlet goes to that pad's newly selected skater. Stars of the Game keeps its whole
native panel; shot/crowd meters retire before it draws.

The selected 38-win AI base is preserved. All 40 original no-B playbook trajectories
(24,000 frames) match byte-for-byte. New regressions pass; all 67 checks executed:
66 pass and the exact inherited finisher geometry failure remains. Strict QA is
FAILED, as already documented for the chosen playtest. The first draft's new AI
timing regression was rejected; no per-frame guards/padding/RNG forcing remain.
Seven independent build/rollback comparisons and original-base IPS pass.
SHA256 f2a6d2ee40f4ac6c7bfe3277fe1859930fc1c579f1cb15aed742c1798f8fd9a3;
CRC32 AD60AF42. Fresh progress per release; remaps/config/history preserved.
See MAINTENANCE38_R2.md and QA_STATUS.json. The win-rate search stays stopped;
blue-line/one-timer/lateral-deke research is deferred, and human variant tests last.


## Hard cross-ice passing and shot openings (2026-10-30)

User-requested playable test release: Edmonton Hard38/50versus Chicago Normal,
goals132–66,25home each; matchedr3control32/50and immediateparent36/50.
Stable39/50plus independent confirmation remains unfinished; all results retained.
Hard now plans accepted native passes, supports real receivers, checks the
keeper opening on the actual catch and selects only more open native post
targets while retaining height/accuracy/power/physics/ratings. Coverage continues
through real passes. Native scorer cache and keeper attacking/defensive counters
are accounted correctly. See AI_TACTICS.md and HARD_STRENGTH_RESULT.json.

All63 exact-ROM/source checks executed:62pass; finisher_hold fails its live
geometry improvement criterion (slot distance1.90to2.78; early releases2to2).
The strict release gate remains FAILED. This exact38image is provided only as
the interim playtest requested by jdc, with that AI regression retained. Independent current-source rebuild, exact
r3rollback, feature ablations and original-base IPS reconstruction pass. Normal/
Easy/human eligibility and physical-shot contracts pass; two Easy live controls
retain sampled frame-timing differences. No physical-controller session claimed.
SHA256 fdf88b7f1933304dd08917b88e1b2e4805072355c1538ff41d876e6e015688c4; CRC32 853481AF.
Fresh progress each release, controller/remap/config/history retained.


## Current run:2026-10-29-r3

All40 checks required, adding crit_menu_render to the preceding39. Its native
probe verifies row22 reaches the renderer with actual On/Off text, native width
and the Replay column, including initial draws and both adapter tables.
Eight cases/32 observations. Standalone baseline reproduces the original r2
failure. Preference/RAM assertions alone do not establish that text was drawn.
Full fresh evidence: Crit-render-fix qa-final/. Earlier interrupted run retained;
its screenshot helper needed RGB565 support, with no ROM change for that.


## Current run:2026-10-29-r2

All39 checks are mandatory for this exact build, including crit_option (43
targeted cases) and all preceding38 checks. The shared gate requires the new
suite and binds all results to the candidate ROM and current source hashes.
The forced-end season-slot fixture skips native other-game highlights with C
inputs; all original strict bracket/password/save assertions remain in force.
First failed gate and diagnostic/baseline evidence are retained in the private
Crit work directory. The final fresh run is qa-final/, not the failed run.


Workspace policy (2026-10-29): run commands from the NHL94 project root.
Use `.workspace/work` as the canonical fixtures/evidence root; the previous
`~/.config/retroarch/roms/claude` path below is a compatibility symlink.
A workspace move requires file/hash/path and headless loading checks, not a
new ROM release or replacement of historical exact-build test results.

## Current run:2026-10-29

All38 checks are required for this exact release. New coach_goalie (46cases),
coach_lines (46), goalie_season (12), rewind_wrap (6) and pwrplay_clear (4)
join the existing matrix. Full CPU validation compares every actual keeper's
individual counters; multiple keepers may each have a GP. Expanded playbook
suite retains32original cases and strict criteria, adding8relay lanes. OT goal
fixture isolates live actors from the scripted puck path while keeping native
goal/statistics assertions. Full receipts remain private; QA_STATUS.json is
current. Full CPU natural accounting failure is now a passing regression.


**Required for both agents. Read before changes.** A reported bug becomes a
regression case. Do not call a version tested because an older build passed.
A checklist reduces repeat mistakes; it is not a promise that all bugs are gone.

## Before changing code

1. Read AGENTS.md / CLAUDE.md, WORKFLOW.md, SESSION_LOG.md, the current release.json
   and the relevant feature note. Identify the current released SHA256.
2. Write the expected behavior and a reproducible case. Use a private copy of
   the actual save when needed. Reproduce on the preceding ROM if practical.
3. Record scope and preserved behavior. For a settings fix, state which options
   lock, when they lock, what survives a reboot, and whether Players stays editable.
4. Never close a live RetroArch without asking. Test headlessly with isolated
   batteries; never pass an installed user .srm to a writable test harness.

## Every ROM change: common checks

Run `tools/experimental/run_release_checks.py`. It runs the matrix below, writes
one SHA-bound receipt per check and stops on failure. It never installs a ROM.
It records the SHA256 of the tested ROM and source files, rejecting a changed
ROM/source or an incomplete/failed report. Logs and screenshots stay in a
private evidence directory. Missing fixtures are a blocked check, not a pass.

| Area | Required script / observable behavior |
|---|---|
| Season settings | verify_season_settings: all six settings rows reject Left/Right after game 1; valid/old/corrupt saves; cold boots; three independent slots; Auto remains Auto; all period lengths and line-change choices; a real first game saved and locked after reboot |
| Main menus | season_navigation, menu_font, menu_team: forward/reverse circles, sharp text, matching team name/logo, no self fixture or stalls |
| Independent progress | season_slots, finished_season: Full/Light/Mini, suspend/continue, cold boot, completion, review, confirmed restart resets only that slot |
| Controllers | four_goalie, goalie_request, four_lifecycle: 1–4 humans, both sides, B request to the right skater, Y takeover, hold without a request, no stealing, movement, pause/resume, two games and cold boots |
| OT / playoffs | shootout for ordinary and four pads: 10-minute OT, attempts/alternation, winner, bracket, stats/checksum, extra-pad disable/restore |
| Shots / presentation | critical, critical_flash, critical_trail, critical_velocity, shot_panel, shot_colour: eligibility/power/sign, red puck/flames, native sprite/VRAM limits, shot meter and replay lifetime; white/orange/solid-red native windups on all pads and difficulties |
| Forum fixes | forum_fixes: boxed receivers, friction, penalty award/setup flags, awareness and native short-pass velocities |
| AI coverage | ai_defence and ai_defence_gameplay: 44 paired native target/guard/register cases and 19 live skating comparisons (11 Hard improvements, eight unchanged Normal/Easy), both teams/ends, no movement resets in observation frames |
| Attack AI / crowd | ai_attack: 76 native cases; ai_attack_gameplay: 16 paired scenarios; crowd_modes: Hard=Normal and unchanged Easy, events/ratings/reset/decay |
| Defensive pair | ai_gap: 44 exact native target/guard/register/RNG cases; ai_gap_gameplay: 24 spacing and 24 rush scenarios, both sides/ends, advancing carrier, real clocks and bounded regressions |
| Hard pressure / point / combinations | ai_playbook and ai_playbook_gameplay: exact native guards/registers/RNG,32 paired live scenarios, real receptions and releases, buffer expiry/interception and both teams/ends |
| Boot credits | credits: no auto timeout, wrong buttons ignored, Start on both ordinary ports; auto-Start harness helper disabled for this test |
| Intermission / ticker | leaders_exit: eight pre/during-period3 exits with clean/stale latch and short/long Start; visible menu and native resume. hud_overlay: native penalty ticker matches the crowd-disabled reference, then meters return |
| Team ownership / replay preference | season_identity:16 cases x2 cold boots, native controller side/actor/club in all3 leagues and1..4 humans. replay_option: seven locked-slot/switch/reboot/corrupt-record and real-goal Off/manual replay cases |
| Complete game | full_cpu_game: full native game finishes, result/league/keeper/scorer invariants and checksum are valid; no fake score/result credit |

Current ordinary-goalie short taps use two frontend frames. Native adapter tests
also exercise one-frame taps. The old ordinary one-frame fixture and legacy
dive transplant are not silently counted as passing; their paired baseline
limitations are documented in FORUM_FIXES.md. A *new* failure must be investigated,
not dismissed because a different old fixture was timing-sensitive.

### Reproduction command

Fixtures are private captured states, not distributed ROMs or live saves:

```sh
python3 tools/experimental/run_release_checks.py /private/candidate.bin /private/qa \
  --fixtures-root /home/jdc/mount/truenas/www/dela.jdc.se/nhl94/.workspace/work \
  --seed /private/preferences.srm \
  --playoffs /private/three-playoffs.srm \
  --four-state /private/four-native.state \
  --trail-fixture /private/fixture-folder \
  --ai-baseline /private/preceding-without-ai.bin \
  --attack-baseline /private/r4.bin \
  --intermission-state /private/pre-period3.st \
  --gap-baseline /private/r7.bin \
  --playbook-baseline /private/r8.bin
```

Known fixture locations in this workspace:

- preferences: work/four-pad-goalie-20261026-111041/seed.srm
- playoffs: work/season-slots-20261025-010418/regression/three-playoffs.srm
- four pads: work/four-pad-goalie-20261026-111041/four-native.state
- intermission: work/intermission-review-20261028/capture-user/intermission.st (native pre-third-period menu)
- attack reference: work/ai-attack-20261028/baseline.bin (exact r4); keep r3 defence reference below
- AI baseline: private work/ai-improvement-20261028/baseline.bin (r3), or exact build with --no-ai-defence --version 2026-10-28-r3
- trail: work/shot-audit-20261026/fixture-10-2-0/ (base.st + fixture.json)

Validate a completed report against the exact candidate before installing:

```sh
python3 tools/experimental/run_release_checks.py /private/candidate.bin /private/qa \
  --keeper-reference /private/exact-r2.bin --menu-reference /private/exact-r4.bin \
  --control-reference /private/exact-r5.bin --icing-reference /private/exact-r6.bin \
  --validate-report /private/qa/qa_report.json
```

The current public summary is [QA_STATUS.json](tools/notes/QA_STATUS.json). Full receipts/logs
remain private. A changed native ROM requires fresh receipts. Documentation-only
changes require link/content checks; no emulator suite rerun unless code,
artwork or unresolved behavior changes justify it.

## Change-specific checks, before release

- Re-run the user's actual failing sequence, not just a synthetic helper.
- Add the smallest meaningful regression that fails for the old behavior and
  passes for the correction. Assert values/ownership/results, not just “no crash”.
- For persistence: close the test core, start a fresh process, switch slots,
  revisit the same menu, and try the prohibited edit. Check all original values.
- For a save/option format change: cover old records, invalid checksums, invalid
  option values, new records and confirmed restart. Never unlock started seasons
  to hide a migration problem. Declare unrecoverable historical fields honestly.
- For visual/input changes: inspect native screenshots or a recording. Report
  separately whether real controllers were physically tested; scripted native
  input is not a claim that a person tested the hardware.
- Check the new build against its immediate predecessor using guarded ROM regions.
  Rebuild from current sources and compare byte-for-byte. Reconstruct the IPS
  against the original v5.1W and compare the complete final ROM.

## Release and delivery

1. New date/revision basename everywhere; correct ROM title and release.json hash.
2. **Fresh progress every new version** (jdc, 2026-10-28): clear the preceding and
   current game's battery saves, states and auto states locally and on Bodin.
   Retain controller remaps/configs; do not delete unrelated games. An active
   emulator must close normally before clearing its saves.
3. Replace Bodin's existing current item; do not append another playlist entry.
   Verify its path, label, CRC, actual ROM SHA and preserved remap hash.
4. Check Downloads/canonical/site copies, ROM+IPS and versioned Download labels.
   Update source/feature notes, WORKFLOW, CHANGELOG, SESSION_LOG and this release's
   QA_STATUS. Keep historical claims explicitly historical.
5. Rebuild tools ZIP. Check archive integrity, new local links and public HTTPS
   bytes/hashes, including the current version and QA summary.
6. Start the newest ROM from Downloads for jdc when no emulator is already open.
   Confirm the process stays alive and the correct version/remap is selected.
7. Final answer: what changed, what was actually tested, delivery and any remaining
   material limitation. Never label unrun checks as passed or claim “bug-free”.

## Current run: 2026-10-28-r9

The wrapper requires33 exact-ROM/source checks. New ai_playbook and
ai_playbook_gameplay cover stationary pressure, clear/blocked blue-line shots,
CPU pass reception/relay/one-touch release, all guards and buffer expiry.
Use --playbook-baseline /private/exact-r8.bin in addition to the existing
references. Current completed receipt: QA_STATUS.json; feature: AI_PLAYBOOK.md.
ROM SHA256 `811c912c42d2aacb6a7326c8131090df71972deb63a597d0298b049c05277cea`.

## Historical run: 2026-10-28-r8

ROM SHA256 `27248d4097dae5f2af9e5f73d02f1811befad2f034a615f2951bf2ff810813c9`. The wrapper requires 31 exact-ROM/source checks,
including the new defensive-pair contract and live rush/spacing tests. Current
completed results are in QA_STATUS.json; see AI_GAP.md for limits. Gap reference:
private work/hard-ai-20261028-175329/baseline.bin (exact r7).

## Historical run: 2026-10-28-r7

Exact ROM SHA256 `a0cd85710be2004a89a5c0b3d8c97ff1fd77649c79d4d5fe487eaa7831aabd65`. The shared wrapper now requires 29 checks,
including 12 native shot-colour windups and unchanged gameplay palettes. The
completed current run is recorded in QA_STATUS.json; previous r6 results below
are historical and do not establish r7 passes. See SHOT_COLOUR.md.

## Historical run: 2026-10-28-r6

Follow-up requested match/season audit: all 28 shared checks freshly rerun,
30 postgame modal flows, three natural first matches, all 123 simulated league
rounds and three actual completed-season reviews passed. Light also completed
four natural CPU playoff wins. See [MENU_AUDIT_R6.md](MENU_AUDIT_R6.md) for exact
coverage, rejected diagnostic probes and limits; QA_STATUS contains the new
exact-ROM/source receipt and supplemental audit summary. No ROM change.

ROM SHA256 `526ae0fd082774a83ca5f74b87b11e638d298f2a672d2a6974fd57d224339c35`.
All **28 required checks** executed by the shared wrapper, no imported receipts.
New regressions: eight native leader exits/resumes; actual penalty ticker pixel
comparison;32 native identity starts across two boots per scenario; seven replay
option cases including a real native goal with Off and manual Instant Replay.
All existing settings/controller/goalie/OT/shootout/AI/menu/shot/HUD checks and a
complete Hard CPU game also pass. Exact rebuild, guarded5,283-byte r5 diff and
original-v5.1W IPS verified. Evidence: work/intermission-review-20261028/qa/.


## Permanent semantic website regressions —2026-11-03-r2

Future graphical release review must open each current image with its heading,
caption, alt and nearest description, maintain an occurrence table and bind all
frames to the exact final ROM. File names/logs alone never approve a picture.
Retain the21 corrected bindings: actual Crit row (not Auto Replays); acquired/
bought-back players visible in owned lists; keeper catch rather than main menu;
season pregame rather than standings; no unrelated menu in statistics; actual
faceoff rather than skating; real offscreen keeper arrow; Overall rather than
Status for ratings; completed-season actions/browser rather than New Playoffs/
goalie card; critical effects separate from blue-line measurement;0:40 clock
rather than Scoring Summary; and one matched measured before/replay pair.
Keep jersey numbers distinct from OVR and native A/B/Start/X help consistent.
Explain independent sessions/legacy geometry/completed-save fixtures explicitly.
Retain historical image bytes in their archives and test their current viewer
URLs. Require opened1440/390/320 views, visible section anchors, all current image
links/hashes and a readable market guide. A website-only correction does not
reset progress or invent another mandatory native group.

## Permanent penalty50% observer/regression requirements

Never approve an observer whose scratch overlaps current HUD E900/EA00 or accept malformed event IDs. The old ROM-ring input counts are superseded. Future native penalty qualification must retain the controlled eligibility/RNG/whole-fight/injury/ABI/storage/menu assertions AND validated read-only host instruction counts of candidates, rejects, admissions, actual positive-duration awards and other stoppages. Prove observer on/off emulated-state equality, preserving host pointer targets if ASLR must be rebased. Do not set RNG/clock/positions/fouls/queues/results in natural behavior samples. Compare fixed complete cohorts under matching input policy and declared exposure, retain failures, show variation, and do not equate candidate probability with exactly halved per-match penalties/whistles. Cold-reboot actual played50% Full/Light/Mini copies and attempt locked changes; include Quickgame and Allstar. Keep Rules/icing/offside/penalty-shot and injury-only behavior distinct.


## Video replacement regression —2026-11-04

For a new current feature film, bind real callback video/native stereo audio and
paired states to the exact qualified ROM/core hashes. Open exported movie images
for every chapter, all filmed menu-value phases, critical-release proof frames
and passing gauge/release/catch frames. Distinct Crits require real full-charge
native critical flags and visible flashing puck/trail; no RNG/outcome injection.
Only explicitly authorized isolated demo tables may use synthetic data, labelled
throughout with coherent result/goal/player totals. Never modify user progress.
Check totalframes, complete H264/AAC decode, audio peak/clipping, same callback
timeline and multiple PCM/AAC waveform alignments after one continuous encode.
Update main player/poster/length/download/chapters/coverage together; old footage
retains its original provenance. Test exact HTTPS movie hash/MIME/Range206,
VTT cue/button counts, current feature links and image URLs; open actual public
desktop/mobile playback/seek/chapter/coverage screenshots, including narrow320px.
Do not equate a menu choice with proof of hidden behavior or human hardware.
Current completed delivery: [short-film report](VIDEO_SHORT_TOUR_20261104_R2.md).


## Main-menu corner regression —2026-11-04 private preview

At the next qualified release, include fifth-visible-row selection while
scrolling both ways in season/Playoffs/Quickgame/Allstar. Original main-menu
outer-bottom redraw must preserve native corner8034 at column16,row24 only
when selected, restore a straight bottom elsewhere, and leave help/text/palettes
unclipped. Open actual before/after captures and check exact tile/opaque-pattern
pixels, allowing only independently established transparent underlying context.
Track the separately observed pre-existing Allstar portrait transition for
reproduction; a transient snapshot alone does not establish a stable defect.
Current preview's260 matched native captures do not replace the full release
matrix. [Exact retained patch and evidence](MENU_BORDER_PREVIEW_20261104.md).
