# Session log

## 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 framed menus —2026-11-04 private preview

Separately named local Beta preview897c575f… includes native grey panels,
centred trimmed help and the prior corner repair.91 real screenshots/21 groups
opened; matched transfer-sale SRAM, four read-only season saves,10 closed-menu
asset/palette controls, full72 period-logo tiles/all64 colours, two portrait
crops and exact rebuild checked. Full release suite intentionally not run at
jdc's explicit request. Public20793fce…/465 native/test sources stay unchanged.
[Exact source boundaries, evidence and limits](GREY_MENU_PREVIEW_20261104.md).



## Shorter native-sound feature tour completed —2026-11-04

New4:57/45-chapter current2026-11-03-r2 film replaces homepage9:33 tour.
All26 menu rows; three genuine~20sec Crits; actual charged directional pass,
Allstar CPU/black-red, dollar transactions/current roster/OVR/hot-cold and
explicitly labelled coherent synthetic standings/leaders.45 final export images
and27 public browser screenshots opened. Full decode, zero audio clipping,
six zero-lag PCM/AAC controls and1440/390/320 playback/seek/45chapters pass;
68 HTTPS checks pass. Old film/provenance archived unchanged. No native ROM,
controls or user saves changed; no native requalification/reset required.
[Movie/report/scope](VIDEO_SHORT_TOUR_20261104_R2.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.


## Games domain and website structure —2026-11-03

Website restored at https://games.jdc.se/nhl94/; Manager/NHL94 logo links are
available at https://games.jdc.se/. Public images live in pics/, page code in
system/, other content in site/ subdirectories.909 image originals and historical
HTML retained;444 native/test source bytes and current ROM unchanged.2,564 initial
HTTP checks and30 individually opened desktop/mobile screenshots PASS.
[Structure and evidence](WEBSITE_LAYOUT_20261103.md).
Pending next: in-game startup URL and native menu speed/music restart investigation.
This website move does not release a ROM or reset progress.


## Final delivery acceptance —2026-11-03

New release installed in Downloads and published with all current pictures.
125/125 exact-ROM groups/444 sources pass; 123 native images and18 public
browser views actually opened, plus six final evidence-page views.718 public
HTTPS bodies plus37 browser/doc bodies pass. Source ZIP rechecked against all
444 qualified hashes; historical843 public artifacts unchanged. No native changes
after qualification and no reinstall/reset of new progress. No existing emulator
was closed. Ready version started for jdc using preserved Steam configuration and
Genesis Plus GX core after confirming no running RetroArch. Bodin is offline and
the authorized replacement queue remains active. Physical hardware/play feel manual.


## 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.


## Final public graphical review completed

2026-11-02T21:11:21.687565+00:00 — M24 complete:102 native originals and36 actual public HTTPS
browser captures opened; report/gallery published. Current r2 installed/public;
124/124 and443 sources qualify.718 HTTPS bodies previously verified; final report
additions checked separately. Bodin offline/pending. M25 native-sound video now
starts last; no user emulator or progress touched by the review.

## 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.


## Replay HUD, Quickgame CPU option and menu texture — 2026-11-02

Local delivery: installed with fresh progress; config/remap/history hashes preserved.
Bodin: pending connection/installation.

Automatic replay retains the measured shot's coloured bar, both speed units and
pre-replay lower-left clock/frame. REPLAY uses its own native VCR pattern bank,
so the speed text no longer corrupts the heading. Power-play captions retain
ownership of their clock interior, including during a temporary native redraw.

The mode is displayed as **Quickgame**. Its four human splits remain, alongside
**1 vs CPU** (P1 home; entirely CPU away), using ordinary pads or the adapter.
Allstar retains its four human-only splits and black A/red B uniforms. Games,
OT/shootouts and returning to an existing season retain native results/progress.

The supplied image 78 is used only for the menu background. The NHL94/Season
Edition startup picture and routine remain byte-identical, with matching real
startup screenshots. Native club/logo/font/panel palettes remain in use. P3 now uses bright neon
green; P1 blue, P2 red, P4 yellow and the red goal retain their entries. The
fixed green entry is shared with a few small crowd/background details, which
also brighten. Ordinary club and Allstar jersey palettes remain unchanged.

All **112 mandatory suites pass** on this exact ROM and **353 hashed sources**. The whole matrix ran freshly. Nine independent builds, exact R7 rollback, the pre-neon control, six matched controls and original-base IPS reconstruction pass. Original AutoReplayOn scenes: **38/40 raw-exact**; every partial native decoder sample is recorded and proven against the same packed record. Separate declared AutoReplayOff scenes: **40/40 raw-exact**. Ten active negative controls reject invalid changes. Physical USB/four-person play feel remains manual. No new Hard win-rate claim. Preseason transfers and the original season overall/hot-cold screen remain ordered next work.

ROM SHA256: <code style="overflow-wrap:anywhere">b29af4d9300da2f4d989e9537a0c94f2da43f701fdb6054f4c5b9ce5040fc3d8</code>; CRC32: `887FFBD3`.
See [REPLAY_QUICK_MENU_20261102.md](REPLAY_QUICK_MENU_20261102.md),
[exact QA](QA_STATUS.json), and [opened native images](../../audits/replay-quickgame-menu-20261102/).


## Native Allstar teams — 2026-11-01-r7

Local delivery: installed with fresh progress; config/remap/history hashes preserved.
Bodin: pending connection/installation.

**ALLSTAR MODE** uses the same human-only 1v1, 1v2, 1v3 and 2v2 flow as Quickgame.
Two virtual teams contain 52 unique players selected by the actual native
zero-hot/cold overall calculation: best 6 G, 16 D, 10 C, 10 LW and 10 RW. A,B,B,A snake
allocation within each natural position gives each team 3 G, 8 D, 5 C, 5 LW and 5 RW,
with 8 valid native lines. Base attributes, names, portraits and critical-shot
ratings follow the real selected players. Ordinary 32 club records stay intact.

Allstar A/B replace inherited city-title bitmaps. Team overall is the floor of the mean of all 26 actual native zero-hot/cold player overall values (82/82); ordinary club ratings remain unchanged. Allstar A wears all-black uniforms and Allstar B wears all-red uniforms, in both native uniform banks. Original rink/centre-logo artwork remains. Native AI teammates fill
other positions; there is no entirely CPU opponent option. All four human
splits, B/Y control and actual pad rotation in tied-OT shootouts are checked.

All **106 mandatory suites pass** on this exact ROM and **339 hashed sources**. The entire matrix executed freshly. Independent rebuild, exact R6 rollback, six fresh matched controls and original-base IPS reconstruction pass. **36/40** ordinary 600-frame scenes are raw-exact to fresh R6; every difference and the complete older comparison chain remain recorded. No new Hard win-rate claim. Physical USB hardware and subjective play feel remain manual tests.
No new Hard win-rate claim. Transfers and the original overall/hot-cold screen
remain dependent work, not implemented by this release.

ROM SHA256:<code style="overflow-wrap:anywhere">6e66c0afe2496eb3f6a688c29888ca62b17aee0b0f51efec96d11dce5e842b31</code>; CRC32:`9F6EBE75`.
See [ALLSTAR_R7.md](ALLSTAR_R7.md), [exact QA](QA_STATUS.json), and
[opened native screenshots](../../audits/allstar-r7-20261101/).


## Human-versus-human Quickgame — 2026-11-01-r6

Local delivery: installed with fresh progress; config/remap/history hashes preserved.
Bodin: pending connection/installation.

Native **QUICKGAME** offers exactly **1 vs 1,1 vs 2,1 vs 3,2 vs 2** human
controllers. P1 is home; P2 is away in1v1; P2–P3 away in1v2; P2–P4 away in1v3;
P1–P2 home/P3–P4 away in2v2. No CPU-only opponent option is offered. Native AI
teammates fill the other positions. A four-player adapter is required for3/4pads;
without it the menu/actual sides use1v1. Modern Y keeper selection and immediate
B switching cover both human teams. Tied-OT shootouts rotate real physical
pads on each side, including P3/P4, preserving native attempt/keeper/score rules.

Quick pregame, pause and result menus exclude Simulate Match, Abandon Season,
Season Standings and Scoring Leaders. Existing season records are preserved by
Quick matches and by return to Full/Light/Mini; this differs from the mandatory
fresh-progress reset performed when installing any new ROM release.

All **103 mandatory suites pass** on this exact ROM and **333 hashed sources**. Full matrix plus an independently repeated maintenance-report aggregation correction; unchanged checks retain their exact executed source bytes. Independent rebuild, exact R5 rollback, six fresh matched controls and original-base IPS reconstruction pass. Eight of40 ordinary600-frame scenes are raw-exact to fresh R5; every difference and the complete older comparison chain are retained. No new Hard win-rate claim.
ROM SHA256:`49c8b23b940a9c5368580dfcad11626a3ffbd4a51cdcae10ca8c9ce01f642487`;
CRC32:`F137D497`. See [QUICKGAME_R6.md](QUICKGAME_R6.md),
[exact current QA](QA_STATUS.json) and the
[dated native screenshot gallery](../../audits/quickgame-r6-20261101/).


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

Local delivery: installed with fresh progress; config/remap/history hashes preserved.
Bodin: pending connection/installation.

**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`.

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

Local 2026-11-01-r4: installed with fresh progress; controller/config/history hashes verified.
Bodin 2026-11-01-r4: pending connection/installation.

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.

## Faceoff movie follow-up and website consistency — 2026-11-01, unchanged r3 ROM

Decoded the actual20679-frame BSV2 movie and repeated it with explicit preserved
four-player/core settings: RAM and video match on every frame. Seven faceoffs
supply1643readable/1641valid relative sprite samples, all aligned; settled centre
anchors are correct. This is not authenticated reproduction of the original
later session. Declared actual-team1-2PP2/PK2controls and exact unmodified-ROM
pose replays are also aligned. All protocol limits and failed diagnostics remain
recorded; the displaced screenshot is still open. No ROM or installed progress
was changed and no frontend was closed or started.

Public maintenance adds TODO to note navigation, repairs bare Markdown/JSON/CSV
note links and same-page hash navigation, removes stale deferred-AI wording
and duplicated hook tables. Four live headless-browser checks pass after the
retained initial navigation failure; the test heading also now matches the
actual note title. Exact
current code, hex and test qualifications remain visible. Bodin delivery is
still pending connection; no human outlet/variant feedback is invented.

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

Local 2026-11-01-r3: installed with fresh progress; controller/config/history hashes verified.
Bodin 2026-11-01-r3: pending connection/installation.

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.

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

Local 2026-11-01-r2: installed with fresh progress; controller/config/history hashes verified.
Bodin 2026-11-01-r2: pending connection/installation.

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.

## Optional alternative goalkeepers — 2026-11-01

Local 2026-11-01: installed with fresh progress; controller/config/history hashes verified.
Bodin 2026-11-01: pending connection/installation.

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.

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

Local 2026-10-31-r11: installed with fresh progress; controller/config/history hashes verified.
Bodin 2026-10-31-r11: pending connection/installation.

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.

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

Local 2026-10-31-r10: installed with fresh progress; controller/config/history hashes verified.
Bodin 2026-10-31-r10: pending connection/installation.

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.

## Latest controller-star mapping — 2026-10-31

jdc clarified: P1 blue, P2 red, P3 green, P4 yellow, specifically the star
below the controlled player. This supersedes the earlier P2-green/P3-red
request. Restore the original red goal frame; do not recolor shared rink art.


## Queued color regression — 2026-10-31

jdc reported Downloads/44.png while charged passing was in progress. It shows
a yellow goal frame and a red physical P1 marker. Repair after charged passing:
P1 blue at all times, goal red as before; retain distinct P2/P3/P4 colors.
The r9 shared palette edits require actual rendering/physical-pad diagnosis.
No new ROM or save/frontend change is claimed for this report.

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

Local 2026-10-31-r9: installed with fresh progress; controller/config/history hashes verified.
Bodin 2026-10-31-r9: pending connection/installation.

Final same-ROM coverage refresh: both affected complete suites rerun; four test-
only files changed, all original assertions retained. Contact observer now has
the original timing; pass-speed input extends every profile. Other89 checks
retain unchanged dependencies. Details: EASY_COLORS_R9.md and QA_STATUS.json.

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.

## Easy assistance preference — 2026-10-31

jdc proposed fixed 100-equivalent skills for the whole human team and
20-equivalent skills for opponents in Easy, then explicitly selected permanent
full energy for the human team, including CPU teammates. Recorded in TODO.md as
requested and not implemented. No ROM, save or frontend changes in this update.

## Hard mode accepted as complete — 2026-10-31

At jdc's request, mark the released38-win Hard base completed on the website and
in the task list. The earlier39/50 benchmark remains unachieved historical research,
not an open task. Preserve all measured results, failed experiments and known QA
limitations. Status/documentation only; currentr8ROM, saves and controls unchanged.

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

Local 2026-10-31-r8 installed with fresh progress; config/remap/history hashes verified.
Bodin 2026-10-31-r8 synchronization is pending.

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.

## Penalty menu discovery — 2026-10-31

Documented that native Penalties combines Off/On/On except offside at D056;
its value also gates penalty-shot eligibility. The requested frequency menu is
separate work, default 100%, preserving existing rules. Injury/fighting event
handling requires tests. See PENALTYS_RESEARCH.md. Documentation only; r7 and
all save/controller data remain unchanged. Investigation is active.


## Private visitor statistics — 2026-10-31

Added page views and unique visitor IP counts above the existing owner-only
download statistics. Public page content is served unchanged through a fixed
allowlist; counts require no tracking cookies or browser JavaScript. Aliases are
normalized, and private panel views, HEAD, errors and prefetches are excluded.
Existing authentication, HTTP-denied storage and download records are retained.
All 34 live visitor/delivery/security checks passed. No ROM or save changes.

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

Local 2026-10-31-r7 installed with fresh progress; config/remap/history hashes verified.
Bodin 2026-10-31-r7 synchronization is pending.

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.

## Solo nearest-other switching confirmed — 2026-10-31

jdc questioned nearest-player selection in solo play, then explicitly reaffirmed
that a switch request must always change skater. Retain r6's nearest other
eligible teammate policy; do not keep the current actor merely because he is
closer. Normal owned-puck passes and keeper requests retain their paths.

A new automated single-human game used actual controller input and a preserving
private probe at native assignment. All 102 observed switches selected the
nearest other eligible skater and retained that assignment. In 34 cases the old
skater was also available and closer, explaining why always-switch can feel
farther from the puck. This is emulator input evidence, not a physical-controller
playtest. No ROM/code change or new release; r6 and its existing QA remain.

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

Local 2026-10-31-r6 installed with fresh progress; config/remap/history hashes verified.
Bodin 2026-10-31-r6 synchronization is pending.

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.

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

Local 2026-10-31-r5 installed with fresh progress; config/remap/history hashes verified.
Bodin 2026-10-31-r5 synchronization is pending.

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.

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

Local 2026-10-31-r4 installed with fresh progress; config/remap/history hashes verified.
Bodin 2026-10-31-r4 synchronization is pending.

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.

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

Local 2026-10-31-r3 installed with fresh progress; config/remap/history hashes verified.
Bodin 2026-10-31-r3 synchronization is pending.

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.

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

Local 2026-10-31-r2 installed with fresh progress; config/remap/history hashes verified.
Bodin 2026-10-31-r2 synchronization is pending.

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.

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

Local 2026-10-31 files installed; progress reset and config/history migration wait for the open RetroArch to exit normally.
Bodin 2026-10-31 installed and remotely verified.

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.

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

Local r13 files installed; progress reset and config/history migration wait for the open RetroArch to exit normally.
Bodin r13 installed and remotely verified.

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.

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

Local r12 files installed; progress reset and config/history migration wait for the open RetroArch to exit normally.
Bodin r12 installed and remotely verified.

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.

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

Local r11 files installed; progress reset and config/history migration wait for the open RetroArch to exit normally.
Bodin r11 installed and remotely verified.

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.

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

Local r10 ROM/remap installed; the open RetroArch was left untouched at the
user’s explicit request. Old progress cleanup and config/history migration wait
for normal exit; newly played r10 progress is protected. No r10 launch.
Bodin r10 installed and verified: one existing playlist item, fresh game progress,
exact ROM hash and original config/core-options/controller-remap hashes.


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.

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

Local r9 files installed; progress reset and config/history migration wait for the open RetroArch to exit normally.
Bodin r9 installed and remotely verified.

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.

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

Local r8 installed with fresh progress; config/remap/history hashes verified.
Bodin r8 is installed and remotely verified: one existing playlist item updated,
fresh game progress, original controller remap/config/core-option hashes preserved.

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

Local r7 installed with fresh progress; config/remap/history hashes verified.
Bodin r7 is queued; remote installation is not yet confirmed.
R7 started with private input recording; installed configuration unchanged.

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.
SHA256 48af31f9f7c85766951bf42745360571d6e7bf025bdce936363a58a178ab05f6; CRC32 273334B0.

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

Local r6 installed with fresh progress; config/remap/history hashes verified.
Bodin r6 is queued; remote installation is not yet confirmed.
R6 started with private input recording; installed config unchanged at launch.
No running user RetroArch was closed.

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.
SHA256 74f099b10459e000b4b50870e41617983641445f83c813328dba019b6b02fd7d; CRC32 25BBB406.

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

Local r5 installed with fresh progress; config/remap/history hashes verified.
Bodin r5 is queued; remote installation is not yet confirmed.

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.
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.
Local r4 delivery and fresh-progress cleanup completed; remaps/config/history
migrated with hashes. The game was started with input recording. Bodin r4 is
queued for connection; the superseded r3 worker was stopped.


## Reported: goalkeeper pass command only changes skater (2026-10-30)

jdc reports that requesting the puck from his keeper now changes only the
controlled skater. Open report; no code or ROM change. All 41 existing ordinary
keeper-request cases pass. A private BSV2 reader recovered 20,679 complete input
frames and the initial native checkpoint from the recorded playtest. Important
limitation: this core's checkpoints omit SRAM, so the older read-only battery
clone does not establish exact playback of the incident. Do not claim it does.

Seventy-two native replay branches using two captured keeper possessions compare
B, C and Y with different delays/tap lengths. B and Y each produce 18 native
passes out of 24 cases; all their misses follow the native whistle. C produces
no keeper requests. A late B can still select a skater after that whistle.
These results identify behavior to inspect, not a proven cause or a released fix.
The installed SDL2 profile matching the attached Generic X-Box pad (12068:323)
labels physical A as RetroPad B / Genesis B, and physical B as RetroPad A /
Genesis C. The user subsequently confirmed physical A; see the r4 correction above.
Keep the new user report separate from the earlier passing test successes.
Current r3 SHA3453b3f... and strict68/69 QA remain unchanged. Further recording
must preserve the initial SRAM as well as ROM/core/settings and input history.
Private evidence: `.workspace/work/goalie-b-outlet-20261030/RESULT.json`.


## New report: intermittent faceoff alignment (2026-10-30)

jdc reports the whole formation left/down from the centre spot during PP2/PK2;
first occurrence noticed. Screenshot retained. At his request, automated state
replay expanded the investigation: 300,000 restores measured at 6.894 seconds;
36 further native faceoff observations; 6,144 replay plans, repeated exactly
with sprite checks (5,447 distinct source/input combinations). Each pass ran
1,532,592 native frames and 21,876 readable centre checks. An additional
frame-by-frame audit of 549 existing plans found shared camera/render offsets,
not relative rink/player displacement. Exact report still not reproduced;
PP2/PK2 centre transition remains a coverage gap and next target. User incident
state would help (F4), but automated investigation does not require one. No ROM
change; r3 and its existing QA remain unchanged. See FACEOFF_ALIGNMENT_WIP.md,
TODO.md and private stress/RESULT.json. Do not restart the stopped AI search.


## 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.


## Current maintenance priority —2026-10-30

User selected the38-win tactical base for repairs first, then the Downloads
Stars of the Game graphics defect, then other queued work. New attacking
policy (shot-zone/one-timer/lateral goalie deke) recorded as deferred TODO.
Private stage `.workspace/work/maintenance38-20261030/` contains exact public
baseline, complete source and untouched reported screenshot. Crit-lock first
build exposed a short-branch range error; retained, corrected by a long branch
only when the new lock is enabled. No changed ROM delivered yet. AI win-rate
search remains stopped/goal paused. Website headline now explicitly says search
stopped and explains public62/63receiver-position failure; private74QA applies
to the rejected33-win image only. No private passes approve the public38ROM.


## Final Hard test complete — AI search stopped by user,2026-10-30

Final central-combine SHA21d4a4b0c4118054f66bc5811e0a44cdde2930da50ad3e183ba2de8883be0950
passes all74current-source checks,7independent exact rebuild/rollback comparisons,
Native378byte/8veneer/benchmark-source/IPS proof. Fresh primary2881–2930completed
all150: new33/50GF94–62, Native control32/50GF89–65, r3control29/50GF80–69;25homeeach,
no execution errors. All100new/control saves valid;4oldr3scorer errors retained.
No confirmation allocated. Per jdc, STOPAIsearch/use released38fdf88 unchanged.
Stable39not achieved. No new release, installation, save clear or RetroArch closure.
Attribution/time published as Codex GPT-6.1 Sol on High,20+hours perjdc. After next
release TODO Crit-only match1lock then immediate nearest-puck B switching; after
all other work human-test retained variants one by one. Current main testworkers
are terminal; do not restart them or allocate fresh2931inputs. Deferred work is
not implemented. Canonical workspace/headless/noagents policies still apply.


## Final Hard variant and user scheduling —2026-10-30

Codex GPT-6.1 Sol on High, configuration identified by jdc; jdc estimates a little
over20hours of Hard AI attempts/testing. Attribution is user-reported, not a
runtime measurement. Latest strength remains32/50; public38/50 and its62/63failed
QA unchanged. Final central pass/shot variant targeted264caller/112actualNative/
140opening/134choice,14quiet/14central/22retained scenes pass. Full74matrix running;
no new strength pool allocated yet. First marker and comparison-assembly failures
retained; main ROM unchanged. Only this final variant may proceed to fresh primary
and a single qualifying confirmation; otherwise stop AI search/use existing38.
After next release start TODO: Crit-only match1lock, then immediate B switching
when no skater possession/own-goalie possession, preferably nearest eligible
teammate. User reports current intermittent missed/delayed switches. No B/Crit
implementation, new install or RetroArch closure during this test.


- **Private close-slot strength rejected32/50:** all150native games2831..2880complete, no execution errors,25home each. Candidate32GF101–68; Nativecontrol31GF82–56; r3baseline25GF83–72. All100new/control statistics valid;6oldr3scorer failures retained. No confirmation/no unchanged-image reseeding. Strict69functional/current-source QA and5build/rollback/IPS proofs remainPASS. Eight exact paired harm/benefit replays reproduce48original artifacts; defensive-half outlet safety is the next hypothesis, not implemented. Next unused2881; stable39/Crit lock unfinished; public38unchanged.

- **Private Hard close-slot priority preflight passed:** same14scenes now5/8close Native releases,8ownedadvances,11.05-unit mean improvement,7actions180;4Normal/Easy traces and2Human controls exact.181decision/60actual Native action-stack comparisons,169quiet cases and original172hooks pass. Original finisher catches/geometry pass.5independent builds/rollbacks/IPS and dual8per-club probes pass. First68gate retained20passes/old attack-marker failure. Original76/172/126 cases pass with actual relocated entry markers; ROM unchanged. Fresh69exact-source gate/current-source validation PASS, including20actual Native caller/precedence cases and full CPU game. Historical primary launch:2831..2880,150games, newcandidate plus Nativecontrol/r3baseline; completed32/50 and rejected as recorded above. Earlier V1finisher/V2Easy/V3V4close-finish/V5wrong-branch failures retained. Stable39 and deferred Crit lock unfinished; public38unchanged.

- **Private quiet covered-shot candidate preflight passed:** 169 actual Native predicate/guard/ABI cases, 94 existing pass choices and 268 original/extended hook/caller/stack cases pass. Fourteen paired live scenes meet every predeclared criterion: 7/8 owned advances, 10.54-unit mean closer carrying, 4 close releases, unchanged Normal/Easy/Human controls. Historical V1 full66 stopped at finisher after40passes; failure retained. Its independent rebuild/feature-off/38/r3 rollbacks/IPS and eight per-club probes had passed. No new fresh strength pool or release yet. Latest complete strength remains central33, rejected; Crit lock deferred.


- **Covered-centre strength rejected at 33/50:** all 150 predeclared games finished without execution errors. New image 33 wins, goals 101–65; Native-parent and r3 controls each 31 wins, goals 100–57 and 92–67, all with 25 home games per club. Every new candidate/control save passes (100); five old r3 scorer defects remain retained. Functional 66-check success is separate from strength. No confirmation or unchanged-image reseeding. Two exact read-only loss replays diagnose actual releases/catches/turnovers; no fresh credit. Public playtest remains 38/50 and Crit lock remains deferred.


- **Covered-centre candidate passed all 66 checks; fresh strength series running:** the exact image passes the corrected full matrix, independent current-source rebuild, exact Native-parent/38/r3 rollbacks, original-base IPS and eight per-club Native benchmark probes. Fresh predeclared IDs 2781–2830: 50 candidate games and 50 each for Native-parent and r3 controls, 25 home per club. Only the new image can qualify for one independent 50-game confirmation at 39 wins. No complete new result, stable-strength or release claim; public 38/50 image and its known failed QA remain unchanged. Crit lock stays deferred.


- **Unreleased covered-centre outlet, no new strength result:**140actual Native probe/guard cases,134choice and252dispatch cases pass; controlled early wing passes3->8/8with6catches/5following shots. First66gate retained55passes then failed incidental retained-catch coverage. Exact old600-frame scene reproduced; fixed actual incoming-catch replay on both images verifies retain/skate/shot with read-only observation. All12oldscenes/continuation criterion retained; full66reruns from scratch, no ROM phase tuning. Rebuild/feature-off/38/r3rollback/IPS pass. Stable39stillunmet, Critlockdeferred, public38and62/63QAunchanged.


What was done in each working session, written for jdc and anyone following along. Newest first.
Technical details are in `CHANGELOG.md` and `HACKING.md`.

## 2026-10-30

- **Private receiver correction passes64checks:** retire the distant hold that missed actual passes; original8live criteria pass against the preceding38policy,4Normal/Easy traces exact,39actualNative tracking cases pass. Full64exact-image/source gate, independent rebuild,38/r3rollback and original-base IPS pass. New fresh150-game comparison2681..2730running; no39qualification yet. Public38playtest unchanged; Crit lock deferred after39 per user.

- **38/50 playtest released at jdc’s request:** exact2026-10-30image, goals132–66, all63checks executed (62pass, known receiver-hold geometry failure); rebuild/r3rollback/IPS verified. Source, hooks and complete byte exports published. Stable39plus fresh confirmation remains unfinished. Local 2026-10-30 progress cleanup: completed before the first launch; current playtest progress is retained. Remap/config/history hashes preserved; Bodin delivery queued while offline.

- **Hard shot-opening investigation (in progress):** three private Native aim/catch variants enter a predeclared250-game comparison,50each with two controls. All3 pass122target/guard/ABI,28full same-target Native physics,26catch and61accepted-pass cases, plus12paired live scenarios. Normal live traces match; two Easy frame-timing differences are retained. A fresh63-check gate is running. Stable39/50 plus independent confirmation remains required; public r3 and its40-check approval are unchanged. No experimental image installed.

## 2026-10-29

- **Hard target amended to stable39/50 (in progress):** user lowered40to39. An exact-image independent fresh50-game confirmation is required after qualification. Best corrected complete series38/50GF109–58; later forward policy37/50and flight coverage36/50. Completed400-game planning comparison best36/50; following150-game centered-cross comparison33/50. Ten exact-result read-only replays now investigate shot openings. A59-check gate stopped on a HUD fixed-time observation during a legitimate automatic replay; corrected first-return fixture and draw-disabled negative pass, with no ROM change and no full59-check approval. Actual native keeper empty-net goal exposed overloaded defensive counters; targeted correction passes the true goal, pause/resume, highlights and all32-team accounting. Public r3ROM/source/40-check QA unchanged; progress/forum cards and archive refreshed.

- **Forum request tracker and code access (website only):** eight attributed request cards with direct post links, individual statuses, name/topic search and expandable technical details. Added line-addressable source viewer with copy/download, 19 named hook byte pairs and a complete original-to-current JSON/CSV byte diff. Tools archive refreshes byte exports. Verified all 39 source links, exact JSON/CSV reconstruction, public file hashes and ZIP integrity; headless Chromium checks pass for search, expand/collapse, mobile layout and exact code copying. No ROM change; r3 remains current. User's next AI focus is a natural cross-ice pass/direct shot with the keeper still in front of the net; the stronger-Hard target remains unfinished.

- **Crit value rendering corrected (r3):** reproduced missing On/Off text. Native redraw ended at row20; extend to22. New native renderer regression reproduces r2 and passes8cases/32 observations, ordinary/adapter, cold/saved/corrupt, Left/Right/redraw/alignment. All40 exact checks, independent rebuild/exact r2 rollback/original-base IPS pass. Only4 ROM bytes including version/checksum differ. Local r3 progress cleanup: completed after normal exit; remap/config hashes verified. Remaps retained; Bodin r3 queued.

- **AI pool761..810 complete, no AI release:** hold64 port passes155 native/eight live cases/exact r2 rollback, but wins33/50 GF98-67 versus released-r2control31/50 GF91-61.100/100 native games complete, zero errors,25home each.35/50 remains unfinished; next fresh811+. Exact plans/receipts: .workspace/work/hard-strength-r2-20261029/. User display regression took priority.

- **Released Crit Shots On/Off (r2):** saved global twelfth menu row, default On, fully Off on Easy/Normal/Hard for human/CPU power and effects; independently saved from Auto Replays and editable during locked seasons. All39 exact-build checks pass, including43 Crit cases, Replay7 and a complete natural Hard CPU game. Exact29 rollback, independent rebuild, guarded1,311-byte diff and original-base IPS verified. Native-highlight timing issue in forced-end slot fixture corrected using real C presses; strict assertions retained. Local r2 progress cleanup: completed after normal exit; remap/config hashes verified. Controller mappings retained; Bodin delivery queued pending connection. Permanent canonical workspace remains nhl94/.workspace/.

- **Permanent workspace consolidation (user request):** moved all `roms/claude` contents into `/home/jdc/mount/truenas/www/dela.jdc.se/nhl94/.workspace/`; this project is the required working root from now on. All 198,590 files verified by SHA256 and permissions before old-copy removal; complete directory tree preserved; four internal symlinks materialized as exact target copies because SSHFS denies readlink, with mappings/hashes recorded. Old `claude` is a compatibility symlink. Updated tools configuration, primary project instructions and home restart pointer; added home AGENTS instructions. Private workspace HTTP denied (403), public site 200, unchanged ROM/38-check receipt validates, canonical native headless load runs 1,201 frames. Saves/remaps untouched; existing Bodin worker resumed. Full migration records are in `.workspace/.migration/`.

- **User-requested restart checkpoint:** published2026-10-29 is verified (38checks, rebuild/rollback/IPS, local saves/remaps, HTTPS/archive). Crit On/Off main-menu preference requested next, explicitly fullyOff on Easy; not implemented yet. Refined private finisher-hold64 passes155 contract/eight live cases (early1T2->3), no full-match validation or release. Work paused for restart, exact next steps/source hashes/evidence in private RESTART.md and /home/jdc/NHL94_NEXT.md. Bodin29 queue remains authorized and waiting offline; no visible RetroArch running.

- **Released verified test copy2026-10-29:** CPU Hard keeper/first-line coaching, both native crash fixes and reserve-goalie accounting. All38 exact checks, rebuild/r9 rollback/IPS pass. User explicitly requested release before continuing the unfinished strength target. No timing/point/hold prototypes included; Crit toggle requested next. Fresh local progress and retained remaps; remote delivery queued pending connection.

- **Hard strength and pressure waves — active, no release:** identical keeper/first-line benchmark totals 93/150 wins versus r9 controls 72/150; latest 34/50, goals 90–59, remains short of 35/50. Whole-roster 23/50, PP 27/50 and PP+PK 29/50 did not reach the target; native results and failures retained. Keeper-save-timing pilot: eight-frame policy 8/10, 145 native flag/register/guard cases pass, no held-out 50 yet. Two crash fixes pass native regressions and formerly failing matches. The latest private 37-check gate passes its first 36 but fails the natural CPU game on a newly confirmed reserve-goalie accounting defect; private correction built, native accounting/full-gate verification pending. Six read-only native replays preserve exact results and support investigation of momentum waves, third-period line priorities and late 1–2-goal-deficit goalie pulling. No universal comeback switch established. See AI_STRENGTH_WIP.md, MOMENTUM_WAVES.md, GOALIE_STATS_WIP.md and the private CURRENT_STATE / EVIDENCE_INDEX. User explicitly requested full documentation on 2026-10-29; published ROM/source/33-check QA remain r9.

## 2026-10-28

- **Hard strength investigation — ACTIVE, no ROM change:** jdc rejected5-5 EDMHard/CHINormal as insufficient and authorized the measured-improvement plan. A matched Normal/Normal control also yields5-5, goals18-14 versus Hard19-20; SOG136-122 versus146-124. Functional behavior passes do not establish strength. Private six-component ablation screening and exact native goal telemetry are underway in work/hard-strength-20261028-231416/. User requested durable continuation notes: AI_STRENGTH_WIP.md, private HARD_STRENGTH_HANDOFF.md and /home/jdc/NHL94_NEXT.md. No candidate selected or deployed.

- **Hard pressure/point shots/combinations (2026-10-28-r9):** requested more blue-line shots, pass-pass-one-touch finishes and pressure against a stationary carrier. Native nearest pursues carrier; clear blue-line shot decision; wider start for improved pass search; native incoming-puck tracking; buffered CPU one-touch shot on actual reception, using the existing human-buffer shot path. Hard only, no speed/rating/physics boosts. Module at2DD000, transientFFF086..08B; guarded native hooks and conditional ai_attack/onetimer integration. All33 exact-ROM/source checks pass, including131 native decision/guard/register/RNG/action cases and32 paired gameplay scenarios, plus all existing menus/season/settings/controllers/keepers/shootouts/shots/HUD/AI tests and a full Hard CPU match. Comparison: 40.05-unit closer stationary pressure at frame60; blue-line windups0->3/4, early relay catches0->2/4, observed direct one-touch releases1->2/4; native pass-pass-one-touch chain observed. Small sample, no win-rate or universal combo claim. Normal/Easy guard paths are exact; hardware RNG timing can change native live trajectories. Rejected diagnostic timing/fixture attempts remain private and are not credited as passes. Exact rebuild, exact r8 rollback, guarded1054-byte diff and original-base IPS verified; migration rehearsed with all aliases and active-remap precedence. Local r9 progress cleanup: completed after normal exit; remap/config hashes verified. Latest remaps/history migrate directly from the active r6 session, superseding r7/r8 helpers. Bodin r9 delivery queued pending connection. Details: AI_PLAYBOOK.md; evidence work/ai-playbook-20261028-213326/.

- **Hard defensive pair (2026-10-28-r8):** nearest available back contains the carrier goal-side; partner covers a dangerous slot receiver. Hard-only590-byte ai_gap.s at2DC000/CF8A. All31 exact-ROM/source checks pass, including44 native target/guard/register/RNG cases,48 paired spacing/rush cases and all existing control/keeper/season/shootout/HUD/AI tests plus a full Hard CPU game. Mean pressure-gap reduction33.33 units,15/16 improve; one4.11-unit tradeoff with better cover. In24 scripted rushes, observed releases11->7, team goals7->6; small sample, no win-rate claim. A first keeper test mixed Y hold with native skater pickup; the final isolated fixture retains original strict assertions and passes80 cases on both r7/r8. Earlier failures remain private and are not credited as passes. Exact rebuild, exact r7 reproduction with --no-ai-gap, guarded571-byte diff and original-base IPS verified. Local r8 cleanup was superseded by r9 while the older session remained active. Active remap/history will migrate directly to r8, superseding pending r7. The pending Bodin delivery was superseded by r9; no remote success claimed. Details: AI_GAP.md; evidence: work/hard-ai-20261028-175329/.

- **White/orange/solid-red shot charge (2026-10-28-r7):** jdc requested colour progression instead of full-charge blinking. HUD-only shotmeter.s change: white below the first third, native orange while charging, steady red at native raw31/full30px. No palette, physics, power, critical, controller or crowd logic changes. All29 shared exact-ROM/source checks pass, including12 new native colour cases across all pads/difficulties,8 shot/replay/pause/timeout cases, ownership/settings/menus/AI and a full Hard CPU game. R6 fails the new middle-colour check. Independent rebuild identical;596-byte guarded shotmeter/title/checksum diff; original-base IPS verified. Local r7 cleanup was superseded by r8 while the older session remained active. New remap copied unchanged; current download and site replace r6. The queued r7 Bodin delivery was superseded by r8; no successful r7 remote delivery claimed. Source/evidence: SHOT_COLOUR.md, work/shot-meter-colour-20261028-173307/.

- **r6 match/season menu audit (no ROM change):** reran all 28 shared checks against exact r6/source hashes. Three natural CPU first matches (Full/Normal, Light/Hard with OT, Mini/Easy); all 30 postgame statistics/menu entries opened, returned and reached the next fixture with unchanged season data. Simulated all 84/31/8 league rounds with per-round invariants; actual Full/Mini missed-playoff endings and Light's four natural CPU playoff wins reached completed-season results/leaders/main menus. Main-menu Restart/cancel/reset checked in all slots; shared nine prepared completion outcomes also passed. Native screenshots inspected. Initial fixed-frame probes rejected for highlight/fade timing; final event-driven audit passed. No new game defect confirmed, no physical-controller testing claimed. Live RetroArch/save/remaps untouched. QA_STATUS refreshed; details: MENU_AUDIT_R6.md; private evidence: work/menu-audit-20261028-171435/.

- **r5 user reports fixed (2026-10-28-r6):** natural replay->intermission->Scoring Leaders black exit reproduced and fixed; native penalty ticker damage208->0 pixels; solo away control stays on the chosen club; global saved Auto Replays On/Off added without unlocking game settings or disabling manual replay. All28 exact-build checks pass, including32 identity starts, eight modal exits, seven replay cases, native goal/manual replay and the full CPU game. Exact rebuild, guarded5,283-byte diff and original-base IPS verified. Current local/Downloads/site/Bodin entry replaced with fresh progress and unchanged remaps. Details: USER_REPORTS_R6.md; completed handoff: HANDOFF_R5_USER_REPORTS.md.





- **Hard attack / momentum / credits (2026-10-28-r5):** r4 backup verified. Native slot/return support, free improved receiver selection and poor-angle shot deferral, Hard-only; old pass/shot physics retained. Controlled comparisons: pass choices 3/8->8/8, receptions 2/8->4/8; marker-escape frames 87->471/488. Hard crowd momentum/rating effect now matches Normal; fixed handicap removed, Easy unchanged. Credits require Start indefinitely (both ports, wrong buttons ignored). All 24 exact-build checks pass, including 76 attack cases, 16 live scenarios, 12 crowd profiles and full Hard game. Exact r5 rebuild/r4 legacy reproduction, guarded 2,373-byte diff and IPS verified. Source, docs, site and current downloads/Bodin item updated; fresh progress and retained remaps. Details: AI_ATTACK.md; private evidence: work/ai-attack-20261028/.





- **AI weak-side coverage (r4):** requested verified r3 backup; far-side winger covers the low slot/receiver on deep wide opposing carries, with short motion prediction and compact fallback. Both teams/ends, native human/strong-side/keeper/shot behavior retained. 44 paired native target/guard cases, 19 live skating comparisons (11 Hard improvements, 8 unchanged Normal/Easy; 26.82-unit mean coverage-distance reduction) and all 20 shared release checks pass; exact rebuild, r3 reproduction without AI, guarded 483-byte diff, IPS verified. No win-rate or manual hardware claim. AI_DEFENCE.md/source/test gate/site updated; r4 replaces current local/Downloads/public/Bodin entry, with fresh progress and controls retained. Private evidence/backup: work/ai-improvement-20261028/.




- **Shared test scheme:** at jdc's request, TEST_PLAN.md is mandatory for Claude and Codex via both agent instruction files. Published run_release_checks.py runs 18 required checks and binds receipts to the ROM/source hashes; current QA_STATUS.json imports the verified r3 run. Documentation-only checks remain separate.

- **Strict settings lock (r3):** removed the legacy unlock after jdc reported Continue Mini editable. Freeze choices before Start (including Auto lines), validate/recover old records/snapshots and retain locks across reboots/slot changes. 36 cases/261 observations, a real first-game result/cold lock, jdc Mini copy and all 16 existing suites pass. Older Fighting was not serialized; fallback Off, original preference requested. SETTINGS_LOCK.md documents limits and sources. New release replaces r2 on site/Downloads/Bodin. jdc then required every new release to clear game progress: r2/r3 battery saves and savestates cleared on both machines; controller remaps retained. This supersedes earlier save-migration policy.

- **Forum fixes and credits (r2):** five native gameplay fixes tested, inherited goalie-pull credit corrected; startup credits after the first image, forum/credits site sections and versioned Download buttons. All 16 final suites pass; 682 targeted native cases and a complete CPU match. Paired legacy fixture limitations recorded in FORUM_FIXES.md. Brodeur30 diving edit documented and guarded patch tool published; pass-control/AI suggestions triaged, no forum posts sent. New version replaces the current files and Bodin entry. Local save migration: completed automatically after the running RetroArch exited; file hashes verified.

- **Forum fixes (2026-10-28):** season match settings saved per slot (no more locked defaults after a restart; old seasons get the rows unlocked once); per-player penalty minutes saved (league + playoffs) and shown as PM on the club statistics pages. Released everywhere.

## 2026-10-27

- **Restart a finished season from the main menu (2026-10-27):** Play Mode: See Old ... Season, Right = Restart ... Season (X+B confirm); shot bar without see-through rows; crowd-bar tiles back in the old crowd VRAM area (broken-glass garble). Released everywhere.

## 2026-10-26

- **UNRELEASED WIP — live Scoring Leaders sorting:** user requested Goals/Assists/Points sorting between games. tools/season/leaders.s is edited and a private r34 candidate boots/sorts through the real menu; public/current remains r33. Further visual, return/input/read-only and regression checks are required before release. Handoff: `~/.config/retroarch/roms/claude/work/live-leaders-20261026/CHECKPOINT.md` (also `/tmp/nhl94-live-leaders-workpath`). Do not overwrite r33 under its existing basename.

- **Tools zip:** download/nhl94-tools.zip (all tools, sources, tests, notes; 467 files) linked on the site, rebuilt automatically by each release. team.html crit text version r31 -> r38.

- **Meters in front of players; flames fixed (r37/r38):** crowd and shot bars are HUD-plane tiles (players pass behind); trail RAM cleared at game start (season menu text blocked the flame tiles). r37 never shipped alone; r38 released everywhere.

- **Difficulty saved per season (r36):** SRAM record $1EF4/$1EF5 per slot, stored at game start, restored at boot / slot switch; jdc's save set back to Easy. Released everywhere.

- **Faster Scoring Leaders (r35):** one-pass top-32 ranking (r34 took ~1 s with no input, so Start got lost). Same order. Released everywhere.

- **Sortable Scoring Leaders between games (r34):** Codex added PTS/G/A sorting with C (Xbox B) to the live season leaders; Claude fixed leftover name characters on redraw (pad to 16), tested and released. Replaces r33 everywhere.

- **Flames during camera movement(r33):** reproduced Mini Easy5min/no fights,EDM-CHI. Real crit/red puck/sound worked; six flames overlapped in old screen-coordinate history. Store world anchors and project with the drawing camera.20 shots,1424 camera checks pass,median span11->42px; other critical/velocity/flash/HUD/menu tests and full CPU game pass. Source, comparison screenshots and CRITICAL_TRAIL.md published. Replaces r32 everywhere with saved data migrated by hash.

- **Crit overflow and balance audit(r32):** Bouchard32/100 goals;14,400 paired native shots across EDM/COL/TOR, Easy/Normal/Hard and5/7/10/20min.15.03% goalie-bonus roll,0 below threshold,Easy100% actual crits. Found strong crits wrapped signed power*68 and invoked slow fallback;90-byte wide-math fix,88 boundary cases pass. Lower-power outcomes unchanged,three1,000-shot controls,menus/HUD regressions and full CPU game pass. Preliminary repeated-seed samples superseded by immutable final audit. See SHOT_BALANCE_AUDIT.md. Fresh r32 replaces r31 everywhere with matching saves/remaps migrated by hash.

- **Shot box during replay (r31):** box moved above scores and resized8x5, charge meter inside, speed/charge freeze through replay and clear afterward/skip. UI charge now samples to native full31. Native glyphs/frames, no new VRAM patterns; replay uses HUD segments rather than the title's shared bar tiles.8cases/161VRAM checks and regressions pass; documented legacy home-dive fixture baseline comparison. See SHOT_PANEL.md. Released everywhere with save/remap hashes.

- **No replay after the final horn (2026-10-26-r30):** the game zeroes replay.s LASTG at the horn; the goal sum is now tagged so a zeroed value only resyncs. Easy crit verified working (crit = +25 % power, not a sure goal). Released everywhere.

- **Shot speed score box (2026-10-26-r29):** the km/h / mph readout is a real HUD-plane panel with the score box's own frame and font. Released everywhere.

- **Shot meter fixes, score-box hint (2026-10-26-r28):** meter lower, speed text in safe VRAM ($FB00) refreshed by DMA (broken glass garbled it), replay hint styled like the score box. Released everywhere.

- **Shot meter and Easy (2026-10-26-r27):** slapshot charge meter top right (red blink = full) with the shot speed in km/h and mph (honest rink scale; crits can beat Chara's 108.8 mph); Difficulty Easy: your meters full, every forehand slapshot crits. Released everywhere.

- **More crits, better co-op passes (2026-10-26-r26):** +3 percentage points crit chance; passes reach a human teammate within 90 degrees, nearest human among several. Released everywhere.

- **Replay skip hint, no menu flash (2026-10-26-r25):** "X+B SKIP" under REPLAY; the replay leaves straight to the game without the Options box. Released everywhere.

- **Y takes the goalie with four players (2026-10-26-r24):** Y no longer switches skaters when a teammate has the puck; it takes the keeper (pass only with your own or your goalie's puck). Released everywhere.

- **REPLAY title (2026-10-26-r23):** big chrome REPLAY (NHL'94 logo style) instead of the VCR box on the automatic replay. Released everywhere.

- **Four-pad switching and season locks (2026-10-26-r22):** B switches to the free skater with 3-4 teammates (also from a Y goalie); Fighting/Difficulty lock after the first season game. Released everywhere.

- **Original playoffs Three/Four (r21):** BO1/BO7 and Continue offer Three/Four teammates, independent native NC preference, head-to-head retained.10 native results/18 cold resumes and namespace/season/goalie/menu regressions pass. See NATIVE_PLAYOFF_PLAYERS.md. Released everywhere with saves/remaps.

- **Player count editable/persistent in playoffs (2026-10-26-r20):** Continue Playoffs exposes Players; each season remembers One/Two/Three/Four across slot changes and power-off. New optional PC record in existing slot SRAM. PASS24 selection cases/48 cold starts, mixed4/2/3 roundtrip/reboot,18 actual playoff result/save cases and existing goalie/menu/slot regressions. Source/storage/tests in SEASON_PLAYERS.md. Replaces r19 locally/site/Bodin with saves/remaps retained.

- **Four-pad goalie controls and lifecycle fixes (2026-10-26-r19):** extends AI hold/B-to-requester/Y to P3/P4 using the native adapter input-bank identity. Fixed stale Four count after loading a One slot and extra P3/P4 actors during shootouts. PASS 88+41 keeper cases, 14 native games/14 cold boots, 50 OT/shootout cases and menu/slot regressions. r18 backup explicitly requested and verified. Source, RAM and reproduction in FOUR_PAD_GOALIE.md; released locally/site/Bodin with unchanged save/remap hashes.

- **4-Way Play menu freeze fixed (2026-10-26-r18):** a season slot saved without the adapter cleared the adapter flag on Play Mode switch (no input); slots.s keeps the live flag, rows 8-10 never locked. Released everywhere.

- **Three / Four - Teammates season fix (2026-10-26-r17):** the first season game with 3-4 players saved the season without a team (menu could hang); fixed in season.s and slots.s. 4-Way Play must be set on Port 2 and needs a Restart. Released everywhere.

- **Up to four teammates (2026-10-26-r16):** with 4-Way Play, Players offers Three/Four - Teammates; all humans on one team, also in the season. Released everywhere; RetroArch device switch only when playing 3-4.

- **Grey menu picture, menu music back (2026-10-26-r15):** the menu picture uses the constant palette 0 (was the away logo palette); the menu music starts again in the main menu. Released everywhere.

- **Season Edition main menu (2026-10-26-r14):** the start-up picture is now also the main menu background (menubg.s, palette 2 greys). Released everywhere.

- **Goalie outlet during the catch (2026-10-26-r13):** a B tap while your goalie is catching (puck still loose at him) is queued as the outlet instead of switching skaters. Released everywhere.

- **Top 100 scoring leaders (2026-10-26-r12):** Up/Down pages through places 1-100, tab and sort switch in place; seasonend.s moved to $2E7000 behind stubs. Released everywhere.

- **Scoring Leaders in the Season Complete menu (2026-10-26-r11):** new menu choice for that season's top scorers; Start on a statistics page goes straight back to the menu. Released everywhere.

- **Cleaner statistics screens (2026-10-26-r10):** no dark boxes behind the letters (text moved to the front plane), SPORTS background at 3/4 brightness. Released everywhere.

- **Fast team browsing (2026-10-26-r9):** Left/Right (club) and A (tab) on the statistics page rewrite the page in place like the sort. Released everywhere.

- **Statistics sort in place, no music (2026-10-26-r8):** G/A/PTS no longer redraws/fades the page; the menu music (restarted by every page fade, sound $79) is off on the statistics. Released everywhere.

- **Freeze before the faceoff fixed (2026-10-26-r7):** Start Game could stop on "Resume Game". The game intro fills the sprite list almost to its end; the crowd meters drawn first pushed it over the game's pause flag. Meters now go last with an 80-sprite limit; crit flames only after a real crit. jdc's 83/84 Full save carried over. Released everywhere.

- **Season Complete menu first (2026-10-26-r6):** See Old Full/Light/Mini Season opens the Season Complete menu directly; See Results shows the statistics. Released everywhere. jdc's saves cleared and a fresh Full season simulated to game 84/84 (Edmonton).

- **Quicker Season Complete menu (2026-10-26-r5):** Up/Down in the menu after a finished season's results only moves the marker now (was a full redraw and fade each step); the background under the marker is saved from VRAM and put back. Released 2026-10-26-r5 everywhere with remap and save.

- **Goal replay plays, no club-vs-itself (2026-10-26-r4):** the automatic replay showed a still picture because the native replay starts on a C press, not C held; the script now presses C once. A finished season's menu could show Edmonton vs Edmonton (stale Away); Away now differs from your club. jdc's missed playoffs were real (9 pts, 19th). Released 2026-10-26-r4 everywhere with remap and save.

- **Start Game hang after season results (2026-10-26-r3):** reproduced jdc's hang (view old Mini results, start a new Mini, Edmonton vs Montreal, Start: frozen menu). The automatic-replay state lived in RAM that the results screens use for text, so the replay's input hook fed fake buttons to the pre-game menu. State now has a validity mark and is cleared at every game start (also the one-timer and flame-trail state). Released 2026-10-26-r3 everywhere with remap and save.

- **Crit flames longer, crits in shootouts (2026-10-26-r2):** caught up with Codex (r26-r30, 2026-10-26). The crit tail is now six flames, positioned from the puck itself (not the crowded sprite list) and dying out over 24 frames after the flash. In shootouts the red puck and flames ended after one frame because the clock-stop flag is always set there; fixed. Website: version and all three season lengths in the header, goalie section rewritten for today's behaviour. Released 2026-10-26-r2 everywhere with remap and save.

- **Finished seasons are results, not another match:** user's Continue Mini started Winnipeg vs Winnipeg. Actual Mini was Edmonton8/8 champion flag4; force let finished slots fall back to a free native Regular Season menu, with stale Game data and a misleading Continue label. New See Old Full/Light/Mini Season opens the saved all-team stats/leaders. Saved owner stays locked, Game says Season finished. After results, view again / start new selected slot / return; Xbox X+B confirms reset, Start cancels, other seasons preserved. New1104-byte finished.s at2E6000, F843E intercept before native settings writes; live/new/native Start replays original prologue. seasonmenu1966, seasonend3926 +8 browser export, Start release now waits for both pads (P2 could skip leaders).9 native cold-boot flows /108 checks cover3 formats x3 completed outcomes, both pads, readonly review/cancel, selected-slot restart, preserved snapshot banks, and actual first Winnipeg-vs-Columbus gameplay.18/240 menu,12/228 navigation and347 browser checks pass. Actual user results captured with byte-identical save; fresh production state9 prepared. Exact rebuild, guarded3547-byte diff, probes excluded and IPS verified. New2026-10-26 replaces25-r30 in canonical/Downloads/site/Bodin's existing item; saves/remaps across dates carried, source/site/docs updated. SHA256ac1ef1aebc902d14e2df44de23940df13f7a37ab830daee434f46dee222feef5, CRC1F36E9AF. Evidence: work/finished-season-20261025-235908/. FINISHED_SEASONS.md has the full implementation.

## 2026-10-25

- **Completed-season Team text (r30):** reproduced Home30->31->30 with a stale Washington Team label while logos changed. force exits a completed season with FORCED=0 before refreshing USERW; teamrow still used that stale scratch word. Gate the USERW redirection on FORCED, otherwise retain native Home. Text/actual selection/logos now agree; active away games still show the user's club. 18 native cold-boot cases / 798 rendered/actual club checks across all seasons and completed outcomes, all32 choices/wrap/reverse, pending seasons and co-op pass; old ROM fails. 12/228 existing navigation checks pass. Production input/screenshot confirms Winnipeg text+logo and byte-identical current user save. Exact rebuild, guarded962-byte menu/hooks/title/checksum diff, probe exclusion and IPS pass. Statistics module unchanged. r30 replacesr29 across canonical/Downloads/site/Bodin's same item; saves/states/remaps carried. Added MENU_TEAM_LABEL.md, public regression and screenshot, site/source/notes updated. SHA25698fa9b6c17afa0305bf154ad4886320d4f046fc38312f40ee1b275e4801cf770, CRC31257AC4. Evidence: work/menu-team-20261025-235212/.

- **Statistics alignment/spacing (r29):** user's screenshot showed club G/A/PTS/SOG one character right of their values and no gap above the controls. Shifted club/goalie header strings left one cell, keeping all numeric values fixed. Moved both screens' headers/data up one row (header6,18 skaters7..24), leaving blank row25 before help26/footer27. Updated orange glyph positions to row6 C600, club PTS29/G23/A27, leaders+3.347 native browser checks pass with both-plane blank-row assertions, headings, boundary redraws and all SRAM preserved. Visual club/goalie/leaders captures, fresh safe Dallas preview, exact rebuild, guarded591-byte UI/title/checksum diff and IPS verified. r29 replacesr28 across canonical/Downloads/site/Bodin's same item, controls/saves carried; website/source/notes updated. Module3926 bytes. SHA256bd4eb6465d81e72b7a07dcffcee1093719a370eb049307ecf5d100007946bcc7, CRC8170380A. Evidence: work/stats-spacing-20261025-234630/.

- **Xbox sorting help (r28, same task follow-up):** user clarified that the controller has no C button. Added "Sort: Xbox B / Mega Drive C" on row26 of both club and scoring-leader pages, retaining original Genesis footer. No input or save change. Rebuilt/retested347 native browser checks and a fresh production-safe Dallas champion preview; exact rebuild, guarded1896-byte UI/title/checksum diff vsr27 and original-base IPS pass. seasonend3928 bytes,168 free before trail. r28 replaces the just-deliveredr27 across canonical/Downloads/site/Bodin's same item; remaps and saves carried. Source/site/docs updated. SHA256990a751d77fe5b7a4b2fdb46c606ce36e9a604ba34ffe6a75e1c3346be505e81, CRCF96D9E75. Evidence: work/stats-highlight-20261025-233330/.

- **Selected statistics heading and no boundary redraw (r27):** orange G/A/PTS on club and league leaders pages, preserving native font/shadow. Up at the top / Down at the bottom now keep the same display without rebuilding/fading it. VRAM clones in the disabled window B040..B09F;128-cell stride C700 row7.347 native browser checks validate teams/tabs/sorts, both pads, page-boundary setup counters, native glyph/palette state and all SRAM bytes. Paired capture changes only selected heading pixels; exact rebuild, guarded3170-byte UI/title/checksum diff and IPS pass. Prepared a fresh production-safe Dallas champion statistics entry state; Full/Mini saves/remaps preserved. r27 replacesr26 in canonical/Downloads/site/Bodin's same entry; site, source, STATS_DISPLAY.md and notes updated. SHA25668f8f60bd60e9058eb2a9d277ada8672ca5bca8fa66b05dfc23b9a2b368ce7e6, CRCB7B97FA0. Evidence: work/stats-highlight-20261025-233330/.

- **Full-season cup/statistics preview, local only:** user asked to reach the Cup win and see the new statistics browser. Using unchanged r26, simulated84 real menu league rounds with Dallas (53W,15L,16OTL;161GF/121GA), then16 native1–0 OT playoff wins (puck crossed the actual goal line, scorer/keeper/progression/save hooks ran). Simulated other pairings through existing postats; final60 playoff matches/120 goalie GP/60 goalie wins, champion flag4 and valid checksums. Earlier aborted private trials inflated other-pairing totals; cleared only the test playoff block and reran the clean16-win path before installing. Mini's existing Edmonton championship remains byte-identical in its bank. Prepared and verified RetroArch entry state9 at Season + Playoffs / Dallas; installed local r26 SRAM and state9, six-button remap retained. No ROM changes, no new version or Bodin save change, no extra backup. Evidence: work/full-cup-preview-20261025-225416/ (league rounds, clean-playoffs/events.json/screens, native core state, verification.json and successful headless RetroArch entry-state load).

- **Goalie catch/pass and all-team season-end browser (r26):** reproduced B being consumed by the skater-switch latch just before a goalie catch (old r25: switch only, no pass). Outlet requests now precede that latch and accept B held across the catch; native recovery, requester targeting, Y, no-button hold and pass-flight switch guard remain. Added three crossing-catch regressions to41 goalie cases. End statistics now browse all32 clubs with Left/Right; A changes the three tabs, C sorts, Up/Down pages/goalies; Start opens league leaders, B returns.682 browser checks across original and distinctive playoff fixtures, all SRAM bytes unchanged;14/266 navigation and a clean full CPU Mini0–1 pass. Exact source rebuild,3313-byte guarded diff, probe exclusion and IPS verified. Published source/test tools, GOALIE_AND_STATS.md and current controls/screenshots. Newr26 replacesr25 across canonical/Downloads/site/Bodin, remaps carried; latest local r23 progress is migrated. No extra backups. SHA2564b42e4b6fa9079bb3bdb40376ff473bed4a0ef6116d9df98f5fef123d1047c8a, CRC4ACB9735. Evidence: work/goalie-pass-team-stats-20261025-210908/.

- **Automatic goal replay (r25):** 1.5 s after every goal the game's own Instant Replay plays the goal by itself and returns to the game; X + B (A + C) skips it. Released r25 everywhere with remap.

- **Crit trail always visible (r24):** the 64-sprite list was often full when the trail was added at its end; it is now drawn first. Released r24 everywhere with remap. Next: automatic goal replays (native Instant Replay at $9FD0 is a manual VCR mode; needs scripted rewind/play and A+C to skip).

- **Crit flame trail (r23):** a crit puck now pulls a red/orange flame tail (four sprites a few frames behind it). Released r23 everywhere with remap.

- **Goalie outlet and B mashing (r22):** reproduced jdc's report: the goalie passes on the first B, then every extra B while the puck travels switched skaters, so the cursor jumped. Now B is ignored for switching until the pass arrives. Released r22 everywhere with remap.

- **Season statistics with tabs (r21):** playoff statistics are now kept apart from the league; the end-of-season statistics have three tabs (season + playoffs, regular season, playoffs), sorting by points/goals/assists and a league-wide Scoring Leaders page. The other playoff series get simulated games after each of yours, and if you go out the rest of the playoffs is simulated to the end, so the playoff leaders are complete. Released r21 everywhere with remap.

- **Co-op game row (r20):** with Two - Teammates the Game row reads "84/84 FLA (co-op)" instead of switching to "vs". Prepared a Full save at game 84/84 (Edmonton, 83 simulated games) for jdc. Released r20 everywhere with remap.

- **End-of-season summary (r19):** after the Cup page (won), the bracket (out) or the last league game (missed), a Season Summary (record, points, goals, how it ended) and then all players' statistics for the whole run, season + playoffs (playoff games now add to the player and goalie stats), each continued with Start. Fixed: a standalone New Playoffs after the season no longer reopens the season's playoffs. Released r19 everywhere with remap.

- **Season test run (r18):** all three seasons (simulated) reach the playoffs; Mini/Light/Full playoffs run to the end on wins and stop on a loss. Found and fixed: after a season without playoffs, real games still counted into it (45/31). Also found: no champion screen after a Cup win, and the post-season New Playoffs touches the season's playoff flag. Released r18 everywhere with remap.

- **One-timer without stopping (r17):** a human pass receiver who presses or holds C while the pass is on its way keeps skating, catches it and fires an immediate full-power forehand one-timer (crit-eligible). The meter now also scales Crit Chance, also shown in Team Roster. Released r17 everywhere with remap.

- **Crit goal rate measured:** 4800 full slapshots each with forced crit / no crit: goals 6.2% vs 4.9% (+27%, z 2.8); crits beat the goalie more but miss the net more. No ROM change.

- **Roster shows the meter (r16):** Team Roster read the base ratings, so the meter never showed there. During a game Overall and the 0-99 ratings now include the team's current percent; after every game the meter starts over and Roster shows the base values. Released r16 everywhere with remap.

- **Difficulty Normal/Hard (r15):** the hidden User Records row of the main menu is now Difficulty. Hard fixes the meter: human teams always at the bottom (-10%), computer teams always full (+10%). It can be changed even in a locked season, and resets to Normal at power-on. Found that the goalie-request regression is sensitive to CPU cycle timing (HV-counter randomness): even 20 NOPs in r14 break it, so its fixtures need rework. Released r15 everywhere with remap.

- **Team stats screen tidied (r14):** removed the black notch in the title frame for odd-length city names (a padding space was drawn after the big-font end code) and hid the CRT column and footer on that screen. Released r14 everywhere with remap.

- **Meter rows fixed (r13):** jdc scored as EDM and his bar dropped: the score box lists the $C6CE team on the bottom row, and r12 drew the bars swapped. Bonuses were always given to the right team; only the display was mirrored. Released r13 everywhere with remap.

- **Crowd momentum meters (r12):** jdc asked if crowd noise raises stats; the code shows the native crowd meter only drives sound and the Current/Peak Level stats. Added two live bars by the score box: shots on goal and body checks pull a shared momentum toward the team, fading each game-clock second; full bar +10% ratings for everyone on the ice, middle 0, empty -10% (red). Goalie-request and crit-flash tests pass; the shootout fixture's "no goal before injection" no longer holds because play changes (passes 18/18 with --no-crowd, which reproduces r11 exactly). Released r12 everywhere with remap. Evidence: work/crowd-meter-20261025/.

- **Bright red crit puck (r11):** the puck used the dull rink-line colour; it now uses a crowd-only palette slot changed to pure red (a few crowd shirts turn red). Backhand crits: the code already only allows full forehand slapshot animation $07FC; asked jdc for a savestate if he sees one again. Released r11 everywhere with remap.

- **New start-up (r10):** extracted the old NHL intro picture to Downloads for jdc to edit; his new "NHL'94 Season Edition" picture (33.png) replaces it, and the EA Sports logo screen is skipped (set-up kept, drawing and wait removed). Boot goes black -> Season Edition -> menu. Released r10 everywhere with remap.

- **Standalone New Playoffs saved separately (r9):** the original playoff tournament now has its own saved context (password + playoff stats, 238 bytes) in space freed by sharing the user profiles across seasons. A season in its playoffs and a standalone tournament now coexist; each Continue entry continues its own bracket, across season switches and power-off. Tests: standalone game with Mini PO active, round trip through all modes, reboot; slot regression 20/20, navigation 18/342 (expectation updated). Released r9 everywhere with remap.

- **No duplicate Continue Playoffs (r8):** after Mini/Light/Full reached its playoffs, the original Continue Playoffs also appeared and offered the same season playoff outside the season. It is now hidden while the active season is in its playoffs; standalone New Playoffs still shows it. Checked Codex logs first: no changes since r7 (only Q&A about this). Released r8 everywhere with remap.

- **Xbox buttons in the Abandon dialog (r7):** confirm line reads "A + C (Xbox X + B) = yes, abandon". Released everywhere with remap.

- **Abandon Season in the pause menu (r6):** added to the in-game pause menus (normal, after timeout, intermission); cancel returns to the game, A+C discards the season and returns to the main menu. Ignored outside season games. Explained jdc's Xbox pad mapping (pad B = Genesis C). Goalie pass request: all 38 regression cases still pass; jdc reports B switched player in single player — awaiting a savestate to reproduce. Released r6 everywhere with remap.

- **Abandon Season (r5):** renamed the pre-game Restart Season entry and its dialog at jdc's request; behaviour unchanged (A+C discards the selected season and returns to the main menu to pick a new team). Also fixed r3/r4 missing the six-button remap (A/C landed on other buttons); remaps now always follow the ROM name. Released r5 locally, Downloads, site and Bodin.

- **Simulated games follow Per. Length (r4):** measured 118 full CPU-vs-CPU games at 5/7/10/20-minute periods (1.32/1.93/2.82/5.70 goals and 11.7/16.8/24.8/49.5 shots per team). Simulated fixtures and Simulate Match now use 4/6/8/16 scoring tries and matching shot ranges by Per. Length; previously all were like 10-minute games. Verified with 8 simulated Mini rounds per length (checksums OK, stats consistent) and played CPU games. Released 2026-10-25-r4 locally, Downloads, site and Bodin; saves not migrated.

- **Clean SOG column in team stats (r3):** stray goalie SV% characters (`141%`, `1289`) appeared after skater shots on page 1 after visiting page 2; save data was correct. Column 36 is now cleared. Released 2026-10-25-r3 locally, Downloads, site and Bodin; saves not migrated (jdc: not important).

- **Opponent choice only before the first game (r2):** jdc clarified that Left/Right on the Game row was meant for variety in the first match of a new season; after that the schedule should be locked. `opponents.s` change now does nothing once a game has been played (unless a new season is pending). Tested on copies of jdc's save and fresh seasons: free before game 1, locked after one simulated game and at Light 30/31. Released as 2026-10-25-r2, replacing 2026-10-25 locally, in Downloads, on the site and on Bodin; saves migrated unchanged. Evidence: work/lock-opponent-20261025/.

- **Always publish a fresh version, replacing the preceding one:** user changed the naming policy. Renamed current jdc24→25 in canonical ROMs, Downloads, website ROM/IPS and Bodin's same playlist item; migrate matching saves/states/remaps/configs/history rather than retaining the old filename. Builder now reads release.json and supports --version for historical reconstruction; future same-day changes use-r2/-r3. Only header title bytes147/177 change, gameplay/assets/save data remain identical, IPS verified. Updated visible site labels/links, release policy and agent handoff. Existing dated backup files moved out of visible folders to private work/cache; no additional backups. SHA2562d4d53a50b2e153be6f5ebfe4b12b9e31d6b391d87dc75ecef57dd0cefed3f47, CRCFEF0867F. Evidence: work/release-rename-20261025-122347/.

- **Critical slapshots with Twin Cobra effect19:** decoded the selected original PCM command0D, converted4496 nibbles to native unsigned8-bit PCM plus terminator, and added dedicated NHL SFX123/patch6F without replacing existing effects/music/samples or the Z80 driver. Full forehand raw charge>=31 qualifies (including forehand one-timers); quick wrists/backhands skip RNG, boost, flash and special audio. Critical releases play the selected sound once with the red puck. Published extraction/reproduction tool,4497-byte asset, critical_slap.s/.py, guarded hooks and boundary verifier.110,000 native trials plus110,000 without flash, eight live pad/audio cases, native music continuity and a full clean CPU Mini game pass; exact rebuild/legacy baseline/guarded5297-byte diff/IPS verified. Updated the dated canonical/Downloads/public ROM and IPS, Bodin's existing19-entry playlist (24 other files unchanged), homepage/team text, sound preview and CRITICAL_SLAP.md.31 local save/state/remap files and all earlier releases are unchanged; no additional backups, per jdc. Verified22 public HTTPS files byte-for-byte. Dated filename retains matching saves/remaps. Current SHA2560312bd6009741447726088115801a9e2cd0bd9f385b616743e393cadd3396a1a, CRCFC0D6B4F. Evidence: work/critical-twin-cobra-20261025/.

- **Twin Cobra local listening collection:** captured20 native effects (10 SFX,4 PSG,5 digital samples,1 combined helicopter explosion), isolated from music; WAVs, offline soundboard, catalogue and ZIP in Downloads/megadrivesound/Twin Cobra - ljudeffekter. Clip01 is the gameplay-confirmed bomb/fire ring; jdc selected clip19 for critical shots. No source ROM in the audio package; source archive unchanged. Evidence: work/twin-cobra-sounds-20261025-113810/. xdg-open initially selected gedit; listening page then opened explicitly in Brave.

- **Local penultimate-game test setup, at jdc's request:** picked three distinct clubs randomly and ran the ROM's real Simulate Match flow for82/29/6 rounds, including the other30 clubs' matches and player/keeper statistics. Full: Seattle, next83/84 (52W,20L,10OTL,114PTS); Light: Utah, next30/31 (17W,9L,3OTL,37PTS); Mini: NY Islanders, next7/8 (5W,1L,10PTS). Preserved native independent-slot snapshots/settings; all checksums/totals and five boot/slot-switch/return checks pass without changing statistics. Installed the verified64KB battery file locally only, with Full selected. No additional backup, per jdc's instruction; Bodin's save is unchanged. Started the updated portrait ROM from Downloads with its existing game remap. This is local test progress, not data bundled into the ROM download. Evidence: `work/penultimate-three-20261025-113235/`.

- **Correct player-card faces:** diagnosed unchanged portrait links after roster reordering;586 pointers now follow reviewed NHL identity.702 roster slots reuse original portraits (including three aliases resolved by ID),123 have new real official NHL photos and7 explicit neutral cards where current/checked archived headshots were unavailable. Recovered William Trudeau's2025/26 archive picture. Added offline asset catalogue/130 native3bpp records at2B0000..2CBBD3, preparation/conversion tool, reviewed aliases/source overrides and a native832-lookup/832-decode verifier. All26 Washington cards plus team/wrap/return were compared in28 paired screenshots: only portrait pixels differ and SRAM is identical.28 Edmonton views include Devon Levi's new face; full clean CPU1–4 and exact rebuild/feature-off baseline/guarded109010-byte diff/IPS reconstruction pass. Gameplay code, rosters, live RAM and saves keep their existing layout. Updated dated local/Downloads/public ROM/IPS, Bodin's same entry, website, source and dedicated PLAYER_CARDS.md with provenance/remaining neutral names; backups and existing saves/remaps retained. SHA2560e5c8ee01f69d7219456d414a15b58fe593c0b957c5630886d138027822d0461, CRC694C73C2. Evidence: `work/player-cards-20261025-110400/`.

- **10-minute OT and shootouts in league and playoffs:** reuse the native on-rink shootout after a tied ten-minute sudden-death overtime. Three attempts each, early clinch, then paired sudden death; P1/P2 alternate their own club's attempts in Teammates, home or away. Normalize late penalties/line assignment to avoid roster255 crashes, keep one native defending pad, preserve normal G/A/SOG/keeper records and skip Three Stars' nonexistent OT goal-log bonus. Restore controls/score/orientation/line state and add one final team deciding goal; existing OTW/OTL and native BO7/single-game playoff save/password flow record the result. No SRAM layout change. Published900-byte shootout.s/build hooks,18-case native integration runner/hook and updated save reader.18 OT/shootout cases,20 slots,38 goalie requests,14 menu/font cases and a clean CPU1–4 pass; exact rebuild, guarded959-byte diff, no probes and IPS verified. Updated dated local/Downloads/site ROM/IPS, Bodin's existing entry, website and notes with backups, preserving saves/remaps and earlier releases. Launched the updated ROM from Downloads; game-specific six-button remap confirmed. Evidence: `work/overtime-shootout-20261025-025233/`.

- **Sharp original main-menu text while cycling cups/leagues:** reproduced blurry original values after leaving Mini. An unchanged row0 callback with SLOTKEY entered relabel, whose native label routine cleared C2F8 small-font bit3 inside the value redraw; later native values used large glyphs. Move the unchanged-mode comparison before SLOTKEY and bypass redundant relabel. Menu stays1836 bytes; no filter, font art, palette, save or gameplay change.16 circle/reverse cases/3608 native font calls pass with zero bad selections; prior ROM reproduces66. Initial screenshots pixel-identical; changed pixels after mode selection are only text rectangle(16,120)–(296,208). Existing20 slot cases,615 club checks and CPU Mini1–2 OT pass. Exact rebuild/guarded27-byte diff and IPS reconstruction pass. Updated dated local/Downloads/public ROM/IPS, Bodin, source/docs and homepage with before/after images; saves/remaps kept and backed up. SHA256d6483fb99c858b6531f8ca4217e0e5ae0bb85fba5a655b5eedb413d582b34e77, CRC533E9A86. Evidence:work/menu-font-20261025-021645/.


- **Fix menu freeze just after startup:** reproduced jdc's exact empty Mini save going Right to an unavailable native Continue Playoffs. F7AE2 kept retrying validation while SLOTKEY blocked the writes, leaving stale Mini text and ignoring input. Repeated standalone callbacks now run original_modes (including slot restoration on Regular0); season-view duplicates stay blocked. Menu1826→1836 bytes, no save-layout/gameplay change.18 navigation cases/348 circle/reverse checks pass with both captured user saves and three playoffs, plus20 slot cases,615 club checks and complete CPU Mini4–1 with valid stats/checksum. Previous ROM fails the navigation regression. Exact rebuild, guarded551-byte menu/checksum diff and IPS reconstruction pass. Updated dated local/Downloads/public ROM/IPS, Bodin, source and website/docs with backups; captured/retained the user's valid suspended save. SHA256bf489dc5c47f26d22f0f3f3a01ee25977d42daa7604453e5b8d00abffc09c068, CRC131A9424. Evidence:work/slots-menu-freeze-20261025-014252/.


- **Three independent season saves:** Full, Light and Mini now keep separate teams, games, statistics and playoffs, selected with Left/Right. Existing82/31/8 seasons migrate intact; Full84 stays84. Restart resets only the selected slot and is available in season-playoff menus. Added32KB logical/64KB physical SRAM with original8KB active data plus three8KB backups, native checksums/passwords/settings and S3SV directory1EA0..1EF5. slots.s1182 at2AA000; menu1826, reset340, playoffs1074, season-only pre-game list228 at2AB000. Native repeated mode callbacks and amplified direction are normalized/latched. Read tool and core harness support expanded saves.20 migration/roundtrip/reboot/restart/three-playoff cases,615 menu screens and38 goalie requests pass; complete CPU Mini1–2 OT has valid stats/checksum. Native RetroArch save/reload retains populated64KB backup bytes. Prior one-save ROM fails first slot-storage check. Exact rebuild, guarded4420-byte diff and IPS reconstruction pass. Updated dated canonical/Downloads/public ROM/IPS, Bodin's same playlist entry, sources, notes and homepage with screenshots; 34 local save/state/remap files and19 other Bodin files preserved;19 playlist entries retained. Dated save/remap backups kept on both computers, and earlier public releases unchanged. SHA2569a00998859863bda2676add272fd9689d2e0215b5d5d07aeb72eef0d0799720a, CRC8B08E457. Evidence:work/season-slots-20261025-010418/.


- **Goalie holds until requested:** replaced automatic clear/pressure outlet with fresh B-to-requester. One uses P1; Teammates P1/P2 receives on their own controlled skater. A tap queues through dive recovery, first requester wins, B hold/release is consumed, and accepted pickup cancels stale requests. Native finite freeze timer, manual/Y and CPU-only AI retained. outlet748/switch500/goalie_ai90 bytes; new transient request RAMFFF064..067, no SRAM change. Full32-bit DIVU initialization fixes real-pressure validation.38 published real-input request cases,26 existing old/new switch cases and complete CPU Mini1–3 pass with valid stats/checksum. Exact rebuild, guarded1276-byte diff and IPS reconstruction pass. Updated source, notes, homepage, dated local/Downloads/public ROM/IPS and Bodin's existing entry with backups;34 local save/state/remap files and18 other Bodin files preserved,19 playlist entries retained. Dated2026-10-24 name retained for save/remap matching. SHA256b801c6d54168abcd2b9847cb1b2bf30342a047f5430458513625e418555acfbc, CRCB3EF6EF5. Evidence:work/goalie-request-20261025-004956/.

- **Glass-break sound when a shot crits:** replaced only a critical release's pending native shot sound with glass SFX14. The existing shot exit plays it once; red flashing, chance/power/physics remain, and no glass animation/whistle is invoked. critical_sound.s/.py adds12 bytes at2FF600, redirects the success hook at2FF472 and uses the existing sound word at22(SP); no new RAM/save field. Default-on with --no-crit-sound; disabling flash still supports sound.50,000 native sound-stack trials (including preceding-ROM and alternate sound20),40,000 without flash,90,000 existing shot trials/832 lookups and136-render flash checks passed. Six gameplay/WAV cases confirm single-player and both Teammates pads: exactly one14 on crit, normal24 retained, ordinary WAV output byte-identical and crit WAV changed; old/new shot powers match. Clean full CPU Mini0–1 saved valid team/player/goalie totals/checksum. Exact rebuild and --no-crit-sound baseline reproduction; guarded diff only16 bytes. Updated dated canonical/Downloads/public ROM/IPS, Bodin's same19-item playlist entry (17 other files preserved), homepage/team descriptions and full source/docs;29 local save/state/remap files and old releases unchanged. Dated2026-10-24 filename retained to keep saves/remaps matching. SHA256a328835ff33de5ca65545553f542b77856d4b1f208e4c498e62d4e7c14ff4ed2, CRCA45C9184. Evidence:work/critical-sound-20261025-001208/. Launched the updated Downloads ROM once no local game was running; game-specific remap confirmed.

## 2026-10-24

- **Identical/stale team-selection logos, all season formats:** reproduced the user's two Edmonton logos in Mini with the actual fixture already EDM10/DET9. Native logo loading saw changed HOME and old AWAY before the later text redraw recalculated the schedule. Permitted setting writes and Players toggles now call force immediately after WRITEVAL, before the native club comparisons/loads. Shared fix covers Full84, Light31 and Mini8, One and Teammates, plus continued away-game toggles; season team locks and all save fields remain intact. seasonmenu.s1880→1894 bytes with symbol-based hook relinking. All615 controller-driven screen checks passed over all32 teams, both opponent directions/wrap, six first simulated league rounds and continued odd-round player toggles/team locks. Old ROM fails at the first Team Left press in all six format/player cases. Genuine81/82 legacy save passes five checks with season data unchanged. Full CPU Mini ended2–5, valid team/player/goalie totals/checksum including native empty-net differences. Exact source rebuild and guarded1642-byte menu/hook/checksum diff passed. Updated dated canonical/Downloads/public ROM/IPS and Bodin's existing dated entry (19 playlist entries,16 other files preserved), with backups;29 local save/state/remap files and older releases untouched. Source/regression tools, complete notes and homepage screenshot updated. The local game was not interrupted; launched the updated Downloads ROM once no game was running, with its game-specific remap confirmed. Current SHA256ddb73d35bada5a140ac6b1d1f12099ed06a7284b0e36bf836963969a4b7e32ca; CRC558AE79A. Evidence:work/distinct-teams-20261024-233701/.

- **Red flashing crit puck:** a critical shot now alternates the puck red/ordinary for four visible renders each. Possession, a dead puck, another shot or127-render expiry ends the effect. Shared palette colours, shadow, geometry, crit chance/power and ratings remain unchanged. Source critical_flash.s/.py uses234 bytes at2FF500,256 copied puck-pixel bytes at2FFE00, and RAMFFF060..063. The native dead-puck flag is byteC2EA bit0; C3F4 is a penalty report and must not gate live rendering. A136-render lifecycle/cache/DMA test covers all eight tiles, flips, shadow, register preservation, whistle/possession, and the real accepted/failed goalie pickup gate. Final90,000-shot regression and832 lookups match the prior critical-only build; a natural CPU crit shows repeated red/ordinary phases in VRAM/palette/RGB captures without physics overrides. Full final CPU Mini ended1–0 in OT with valid team/player/goalie totals/checksum. Exact source rebuild, --no-crit-flash prior-profile reproduction and guarded511-byte diff passed. Updated dated canonical/Downloads/public ROM/IPS and Bodin's existing dated entry, with previous versions backed up;29 local save/state/remap files,15 other remote files and older releases preserved. Website has a natural-shot animated capture and updated source/docs. Current SHA2564bb1a229251ed1699a1be11040530d15505e204eb310a29bf2772cd00a885c69, CRC B8125156. Evidence:work/critical-flash-20261024-230827/. Launched the updated Downloads ROM with its game-specific remap confirmed.

- **Crit Chance, visible in statistics:** added a separate0..100 roster attribute:100 gives10% chance per actual shot of25% extra release power;50 gives5%. Higher offensive quality gets higher values (MacKinnon100, McDavid/Kucherov96). Native Team Roster now has Crit Chance, season players have CRT, and the site has sortable Crit ratings plus an emulator screenshot. Kept native attributes, goalies, saves and statistical league model intact. 100,000 controlled shots across10 old/new/side/direction/exclusion cases passed; all832 lookup/native-attribute identities and all32 teams' rendered sorted CRT values checked, with both pages, goalies, returns and unchanged SRAM. Instrumented and clean full CPU games finished; final1–3 game saved valid totals/checksum. Exact source rebuild, previous-profile --no-crit reproduction, guarded byte diff and IPS reconstruction passed. Updated dated canonical/Downloads/public ROM/IPS and Bodin's existing dated entry (19 playlist entries,14 other files preserved), with backups;29 local save/state/remap files and earlier releases unchanged. Public HTTPS matches installed artifacts; team-page JavaScript renders/sorts all32 clubs. Full source, formula, overrides, addresses and evidence in EXPERIMENTAL_BUILD.md; private work/critical-shot-20261024-220545/. Current SHA25695a05f76f358ae94a1259d57ca266d4edf0d4ce4b0166be81fd88eabeee53b7a. Launched the updated Downloads ROM in RetroArch with its game-specific six-button remap confirmed.

- **Season scoring / first-line audit:** the other clubs use statistical fixtures rather than emulated games. Strength uses top12 skaters/best goalie; scoring weights include all roster skaters and do not follow first-line/Line Changes selection. Fresh current-ROM eight-round Mini: 120 AI fixtures, 675 goals / 240 team appearances = 2.8125 goals per team/match; eleven team scores >=6, maximum8. All native team/player/goalie totals and checksums passed each round. Earlier full84 fixture average2.8404. Excessive average scoring was not reproduced; specific user scores remain unconfirmed. Documented the model and its line-selection limitation in SEASON_MODE.md. No ROM/save/download/Bodin changes. Evidence: `work/season-scoring-20261024-200805/`.

- **Extra beep at1:00:** traced every sound caller and found penalty expiry reused SFX2, which the earlier warning change had turned into three louder pulses. Reproduced expiry at clock60. The penalty-release sound argument now uses native silent ID-1; release itself and final-five-second ticks are unchanged. Clock warning remains exactly three pulses at40 in periods1/2/3/OT. Ten audio cases, identical old/new penalty arrays, full CPU game and exact source/IPS reconstruction passed. Updated local/Downloads/site ROM/IPS, Bodin and source/docs with backups and save/remap preservation. Private debug taps were excluded from release. Launched the updated copy from Downloads with its game remap confirmed. Evidence: `work/warning-only40-20261024-192406/`.

- **AI goalie outlet to P1/P2:** added an active outlet choice because native AI randomly tried CPU teammates and could hold too long. After recovery/~24 possession ticks, a clear goalie chooses an eligible controlled skater; he holds with an opponent within40px, prefers an unmarked forward player and rejects own-goal crossings. Guarded native-pass hooks retain the selected target/vector; manual/Y, CPU-only and special modes retain their paths. Tested44 old/new cases,6 pressure/dive cases,7 pad/marking/Y extras and complete old/new CPU games. Updated dated local/Downloads/site ROM/IPS, Bodin and all source/docs with backups and save/remap preservation. Launched the updated ROM from Downloads with its game remap confirmed. Evidence: `work/goalie-outlet-20261024-173340/`.

- **More breakable glass, 50%:** expanded the original tiny far-end trigger slot to the flat panes and added one 50% roll for each hard, high puck impact. Positioned native shards/missing pane at the actual pane, retaining non-glass sirens and native sound, whistle, faceoff/resume. Near-end/side/corners/low/soft impacts keep native behavior. Tested 256 seeds at six X positions (50.78% each), exclusions and full old/new CPU games; corrected a test assumption for empty-net keeper counters without changing game statistics. Published glass.s/build wiring and exact bounds/evidence; updated local/Downloads/site ROM/IPS and Bodin's existing dated entry with backups and saved data preserved. Launched the updated ROM from Downloads with its game remap. Evidence: `work/glass-50-20261024-170737/`.

- **Fixed Full Season showing 8:** reproduced jdc's exact empty Mini header (team=0, GP=0, length=8, pending=0): label New Full Season but Game 1/8. `gameinfo` now requires a real saved season before reusing its stored length; empty old headers show 1/84. Tested 24 combinations, real 8/31/82 continuation, pending format priority, navigation and the first simulated game (2/84 with consistent totals/checksum). No save reset needed. Updated local/Downloads/site ROM, IPS, Bodin and source/docs with previous-ROM backups; launched the fixed copy from Downloads with its matching game remap confirmed. Evidence: `work/full-menu-length-20261024-170153/`.

- **New Full Season, 84 games:** verified NHL's official 2026/27 schedule count, renamed the main choice and made new full seasons 84 games. Existing 82-game seasons retain their saved length and finish correctly; Light/Mini remain 31/8. Generic pre-game restart entry/dialog renamed Restart Season. All 84/31/8 chosen-opponent rounds passed full totals/checksum checks; tested full84 playoffs in single/co-op, legacy82 final-game transition, Mini playoff format, and a complete CPU game. Updated the dated local ROM, Downloads copy, website ROM/IPS, Bodin's existing dated entry and public source/docs; backups preserve preceding ROMs, and save/remap contents are unchanged. The running local game was left open and needs a restart to load the change. Evidence: `work/full-season-84-20261024-151721/`.

- **Season - jdc naming:** renamed the current dated download ROM/IPS and visible website links to `NHL 2026 - 94 Edition v5.1W - Season - jdc - 2026-10-24`. Updated Bodin's existing dated playlist entry, ROM and matching save/remap names together; no extra playlist entry and no gameplay/save-content change. The Downloads copy uses this name too.

- **Diving goalie catch fix:** stopped the running game at jdc's request. Found the native dive-catch override gave only 5 possession ticks instead of the normal 180; a nearby opponent could block the AI outlet until the almost immediate freeze whistle after recovery. Changed the single immediate word at `$1531E` to 180. Controlled old/new fixtures confirm recovery followed by a pass, both goalies and single/co-op/CPU; manual B also works after getting up, and continued pressure still causes a finite hold whistle. Standing-catch trace unchanged, full Mini CPU game totals/checksum valid, exact source rebuild and IPS verified. Dated local/download ROM updated with previous-ROM backups and saves preserved; Bodin's existing dated entry also updated after confirming no game was running, with his prior ROM/playlist backed up and saves/remaps unchanged. Source, test details and homepage updated; evidence in `work/goalie-recovery-20261024-145816/`.

- **Dated version 2026-10-24:** fixed slow B player selection (press edge, another eligible skater, no B-hold goalie selection). Checked 26 old/new input cases, repeated taps, both teammates pads, away single-player, Y and native passing; a complete CPU Mini game passed saved totals/checksum. Published full switch source/build wiring, with an exact byte-for-byte rebuild. Separate dated ROM/IPS downloads added; previous release retained. Launched the dated game locally with its own remap confirmed, and delivered it as a new entry to Bodin with its own fresh Mini save and six-button remap. Backed up his playlist and verified all older NHL ROMs/saves/remaps unchanged. Private evidence and delivery report are in `work/player-switch-20261024-142323/`.

- **Ready to play:** launched `NHL 2026 - 94 Edition v5.1W - Mini Test.bin` with its own fresh Mini save and six-button remap. The existing Goalie AI Test ROM was backed up and updated; its save and the original Seasons save were verified unchanged. Public download ROM/IPS remain the earlier release.
- **Mini, opponent selection and published complete test source:** added New Season Mini (8 league games, then the 16-team one-game-per-pairing playoffs). Left/Right on the Game row selects a different unplayed opponent and persists it; the whole league uses that circle round, keeping all GP and GF/GA consistent. Verified 8/31/82 chosen-opponent seasons, no repeats within each 31-round cycle, save/reload, correct end-of-season trees/formats and a one-win playoff advancement. Preserved the longer formats and all earlier test changes.
- **Bodin's report clarified as single-player:** the co-op pad issue is a separate finding, not a confirmed explanation. Single-player stress passed 192 statistics entries (640 checks), and away-team in-game pause/statistics/resume worked. Removed obsolete EXITM/EXITV indirect returns from standings/leaders; controlled stale-state regression crashes the old code and returns normally after the fix. His exact one-off freeze remains unconfirmed. Both pads can separately navigate custom stats in co-op; native single-player/multitap input is retained.
- **Everything needed by a future Claude session is on the site:** current season assembly, `opponents.s`, `statsinput.s`, all earlier experimental goalie/Y/penalty/simulation assembly, one complete experimental builder, headless harness and example commands. Added EXPERIMENTAL_BUILD.md and a Notes tab, updated these notes and the feature page. Building from the site's sources reproduces the tested ROM byte for byte (SHA256 `6919ca464347add0fbe41d1928cffee9505f8d71d1b0ec1dba5766a1794cd990`). Public ROM/IPS remain the earlier release; private evidence is in `work/mini-season-20261024-133459/`.
- **Private stats crash fix; public source corrected:** the new screenshot note reported Season Standings hanging before a game while Scoring Leaders worked. Reproduced an Address Error on the standings → selected team's players path: `unlite` clobbered D0 (the team ID) with the palette colour before `TEAMSTATS`. Save/restore D0 around that call. Verified all 32 teams and both pages, goalies, return navigation, empty/full/Light saves and a private copy of the user's save. MAME old/new confirms the crash is gone. A single-core regression opened stats/leaders, simulated a match, then completed a CPU game; both results and all statistics/checksums were valid. Installed only the separate Goalie AI Test copy with a pre-fix backup, preserved previous experiments, corrected `tools/season/standings.s` for future builds and labelled the website note as private testing. Public ROM/IPS and original save were untouched. Source, reproduction and evidence: private `work/stats-freeze-20261024-084813/README.md`.

## 2026-10-23

- **Private Simulate Match test, not released:** added a pre-game entry directly below Start Game, selected with C. It generates the user fixture with the league strength model, saves team/player/goalie stats and the whole round exactly once, then shows the result; Start returns to the next fixture. Verified complete 31-game co-op and 82-game single-player seasons, Light/full final-game qualification and correct playoff formats, holding C, a restart, and a completed-season guard. Headless MAME saved two simulated rounds with valid totals/checksum; a normal CPU game still uses real statistics. Preserved all previous private goalie/warning/penalty changes. Updated only the separate Goalie AI Test ROM with a pre-simulation backup, and labelled the new website example explicitly as private testing; public ROM/IPS/build and live game/save were untouched. Sources and verification: private `work/simulate-match-20261023-153017/README.md`.
- **Private short-penalty test, not released:** with five-minute periods, ordinary infractions now last 1 minute; fighting, fight instigator and the injury-causing Elbowing event last 2 minutes. Longer periods keep their original times. Preserved the existing goalie/Y and 0:40 warning experiments. Verified 24 isolated Genesis Plus GX cases (all infraction types, old/new, all lengths, team PIM, paired fighting and major flags), a real MAME 60-second award/countdown, and a CPU game reaching the post-game season table. Installed only the Goalie AI Test copy, with adjacent `.before-short-penalties.bak`; running release/save and public downloads were untouched. Source and results: private `work/penalty-times-20261023-151151/README.md`.
- **Private test extension, not released:** moved the period warning from the 1:00 window to exactly 0:40 in every period (jdc explicitly confirmed every period), with three short beeps and about +2 dB measured loudness. Updated only the Goalie AI Test ROM, preserving the goalie/Y changes and a pre-warning backup; the running production ROM/save were untouched. Verified silence at 1:00, three pulses in periods 1/2/3/overtime in Genesis Plus GX, and three pulses in a headless MAME clock test. Source, WAV preview and measurements: private `work/clock-beep-20261023-145844/README.md`.
- **Private goalie AI test only; not released:** jdc asked to keep playing the live ROM while testing a copy. Prepared `~/.config/retroarch/roms/claude/NHL 2026 - 94 Edition v5.1W - Goalie AI Test.bin`. With Manual in single/co-op, an AI goalie catching the puck stays AI; explicit Y still takes him. Also corrected the Y handler's d4 offset (already 0/2): old co-op P1 Y could give the goalie to P2, while P2 Y did nothing. Tests passed with real pickup states, both co-op Y pads, a full period in Genesis Plus GX and a headless MAME smoke run. Sources, exact checksums, logs and reproduction are isolated in `work/goalie-auto-20261023-142924/README.md`. The new ROM has its own save and remap (normal 6-button devices 513; old 1281 means 4-WayPlay). Live ROM, remap, save and running RetroArch session were preserved. No production patch/build source was changed.
- **Fixed: a season played in Two - Teammates did not go on to the next game** (the first game never started the season because only One - Home/Visitor did). Co-op now starts it with the home team. The Players row (One / Two - Teammates) can also be switched mid-season, so a co-op season can go on after a power-off. Tested in Genesis Plus GX with jdc's save: old ROM stuck at game 1, new ROM goes 1/31 → 2/31 → 3/31.
- Changed the season's initial playoff entry from New Playoffs to **Continue to Playoffs**, as jdc requested from his screenshots. Tested his actual post-game-31 save in Genesis Plus GX: Start shows the cup/bracket screen with exactly the 16 teams seeded from the final table, including Edmonton–Los Angeles; single-game Light format confirmed. Added the new menu screenshot and explanation to the site, rebuilt ROM/IPS, and kept his completed-season save intact.
- At jdc's request, prepared and installed a Light test save before the final league game: Edmonton, 30 games played, 36 points, guaranteed a top-three Pacific place; next game 31/31 vs Toronto. Simulated all 480 matches over 30 circle-schedule rounds, with matching player/goalie totals and a valid SRAM checksum. Verified the menu in Genesis Plus GX; the last match remains unplayed for jdc to test the transition. Original Seasons.srm backed up beside it as `.before-light-last-game-20261023-104717.bak`; generator, fixture and validation are in private `work/light-last-game-20261023-104717/`.
- Fixed circular Play Mode navigation after jdc found it stuck: original playoff/shootout transitions pass through normally, and Light → New correctly checks saved-season availability. Tested 12 Right and 12 Left presses with and without a saved season, rebuilt the ROM and IPS and updated the page.
- Added New Season Light: 31 league rounds, every pair of teams meets once, then the existing 16-team playoff tree with one game per pairing. The 82-game season still uses best-of-seven playoffs. Tested the menu and both season-end modes headlessly; copied the finished ROM beside an unchanged backup and refreshed the public ROM, IPS and page.
- Named the public ROM downloads `NHL 2026 - 94 Edition v5.1W.bin` and `NHL 2026 - 94 Edition v5.1W - Seasons.bin`, and the patch `NHL 2026 - 94 Edition v5.1W - Seasons.ips`; updated the visible buttons and build output paths.
- Moved the season and plain patched ROMs from `stuff/` into `download/` beside the IPS patch, added both downloads to the site, and made `build.sh` refresh all three files on future builds. Verified the three public URLs.

## 2026-10-22

- **Y takes your goalie** (fix 9, `ygoalie.s`): 6-button pad, Goalie Ctrl Manual, your team without the puck → Y = your goalie;
  with the puck Y = B (pass) as before. Tested headless with MAME `-ctrl1 md6button` (home, away, plain and season ROM).
- `h.lua` now finds a 6-button pad port too; `build.sh` assembles `ygoalie.s` before `patch.py`.
- **Goalie stats** in the season (GP, W, GA, SA, SV% on page 2 of a team screen), SRAM `$E20`; mapped which SRAM the hack uses.
- **Fixed:** simulated losses almost all counted as overtime losses (flag overwritten by `dist`).
- Standings: OTW and OTL columns (W = regulation wins).
- **League table** after every season game with the playoff tree's team banners, scrollable (`table.s`).
- `mknv.py ... fill` makes test seasons with random results.
- League table: fixed digits drawn on top of each other after scrolling (text in two planes); all text now in the back plane.
- Then made it one division per screen (jdc), Left/Right = division, gap to the division leader.
- Playoffs locked like the season, Away = your opponent, survive a power-off (flag states 0–3, Continue Playoffs).
- Test save for jdc: game 82 of 82 with Edmonton (his own season backed up in work/backups).
- The site's IPS has the intro change too (jdc); the download section credits Jkline3 and Von Ozbourne and mentions `nointro`.
- Co-op passes: receiving reach of the human pass target 20 → 40 (bot test 48 % → 59 % received, interceptions 31 % → 18 %).
- Season Standings: light blue band behind the teams in the playoffs (palette 3 rows, colour 13 changed while shown).
- Own intro picture (jdc's NHL shield, 8 grey levels) instead of centre ice, title screen removed (fix 12).
- User Records out of the main menu (fix 11): tables reordered, rows mapped, 9 rows — no gap.
- **gpgx.py**: headless tests in Genesis Plus GX (RetroArch's core). Found why the table was blank after jdc's own game
  (front plane left scrolled by the pause menu) — fixed.
- Standings: title fits the box, A+C shortcut removed; division table help line on the bottom row.
- **Playoffs after the season** (`playoffs.s`): the game's own best-of-7 playoffs with the season's 16 teams (NHL format);
  division table: green = top 3, teal = wild card.
- Start-up defaults (fix 10): Per. Length 5 min, Goalie Ctrl Manual, Line Changes Auto.
- RetroArch: copied jdc's v4.1W remap (6-button pad, analog = d-pad) to `config/remaps/Genesis Plus GX/NHL94-season.rmp`.
  jdc's pad: X = Genesis A, A = B, B = C.
- Polish (jdc): no abbreviation, title higher, ranks without dark background, darker font shadow (palette 0 colour 2).

## 2026-10-21 (late)

- **Divisions:** Season Standings shows the four NHL divisions, one per page, starting on your team's division.
- **The site now offers the season ROM** (the IPS patch gives the full version with the season). New "A full season"
  section, ratings explained on every team page, the whole site checked against what the ROM does.
- Y button for the goalie: investigated — the hack already reads 6-button pads and uses Y for something; not done yet.
- Fixed: the New Season question still said "Whole Season".

## 2026-10-21 (evening, later)

- Regular Season is the season mode now: Play Mode shows Continue Season / New Season. New Season clears the old season
  when the first new game is played; until then the stats screens show an empty season (bug jdc found: they showed the old one).
- Shots on goal per player; Season Standings has an arrow (Up/Down) and C opens a team's players (#, name, G, A, PTS, SOG).
- Checked with CPU games: player goals add up to team goals for all 32 teams, assists ≤ 2 per goal, shots ≥ goals.
- A longer 30-game run was lost: stopping MAME from outside doesn't save the battery file (noted in HACKING.md).

## 2026-10-21 (night)

- Fixed: a player could be in two lines (Draisaitl in line 1 and line 2 for Edmonton; the same pattern in every team).
  The extra-skater slots now use 4th-line players.
- Fighting now shows N/A in the menu when Penalties is Off (fights already needed penalties on).
- **Season: your team and the schedule.** The first Regular Season game you play sets your team. After that the menu
  shows your next game from an 82-game schedule (every opponent 2–3 times, home and away alternating) and Home/Away/Players
  can't be changed. Tested: Edmonton vs Rangers (1–1 after OT) was recorded and the menu moved on to game 2 at Calgary.
- **New Season** in the pre-game menu: asks "Start a new Whole Season?" (A+C yes, Start back), then clears the season and
  goes to the main menu to pick a team.
- Stats from the main menu: opening the stats screens on top of the main menu was tried, but they need the scoreboard
  screen setup and drew garbage. Instead, in Whole Season Start skips the Matchups screen and goes straight to the
  pre-game menu with Season Standings and Scoring Leaders (one press from the main menu).
- After the first game of a season nothing in the menu can be changed except Play Mode (jdc). The empty row now shows
  the next game: "2/82 at CGY".
- **Scoring Leaders:** goals and assists for every player, from your games and the simulated ones, in a new screen
  (replaces Record Holders). Main menu → Start → (Matchups, Start) → pre-game menu has Season Standings and Scoring Leaders.
- Whole Season menu cleaned up as jdc asked: Players shows "One" or "Two - Teammates" (co-op plays every game at home),
  the Home row is called "Team" and the Away row is gone (the opponent shows in the logos).
- **Whole Season** is now its own choice in Play Mode (jdc's idea); Regular Season is a free single game again.
- jdc noticed you could still pick anything in Regular Season before the first game. Now only your team (Home) can be
  picked; the opponent and Players follow automatically. Per. length, goalie control, penalties etc. are still free.
- Agreed season design (jdc): pick one team, the schedule picks the opponent, after each game a season menu with
  standings, scoring leaders and Continue for the next game. Work on that continues (see `SEASON_MODE.md`).

## 2026-10-21 (late evening) — project MEGAdriveHARDJOB started

- New folder `~/.config/retroarch/roms/claude/MEGAdriveHARDJOB/` with a copy of the patched ROM, for building a season mode
  into the ROM (option A). The normal ROM is untouched.
- Found: the game's 8 KB battery RAM, the hack's routines to read/write it, which parts are used, and about 4 KB free;
  where goals and team stats live during a game. Plan in `SEASON_MODE.md`.
- **Step 1 works:** every finished game is now recorded in a standings table in battery RAM (games, wins, losses,
  overtime losses, ties, goals for/against). Highlights from other games during intermissions are not counted. The table
  survives a restart. Tested with three CPU games (one in overtime). Found and fixed a crash on the way (the hack's own
  checksum routine overwrote replay memory).
- **The rest of the league plays too:** after each of your games the other 30 teams play a simulated round, weighted
  by team strength from the ratings, so the whole table fills up.
- **Season Standings screen in the game:** in the pause and post-game menus ("Other Scores" replaced). Sorted by points,
  two pages, A+C starts a new season. The season ROM is `MEGAdriveHARDJOB/NHL94-season.bin` (the normal ROM is untouched).
- New tool: a real 68000 assembler through the SGDK Docker image (`tools/m68kasm.sh`), so bigger code can be written in assembly.
- Test rig fix: MAME kept battery RAM between test runs (per ROM name), so menu settings leaked from earlier tests.
  `run.sh` now starts every run with empty battery RAM (`KEEP_NVRAM=1` keeps it).

## 2026-10-21 (evening)

### Sorting on the team pages
- Click a rating column header (for example SPD) and the player with the highest value comes first, the rest in order below.
  Click it again and the list is back to normal.
- Select several columns (for example SPD and PWR) and the players are sorted by the sum, with a Sum column shown.
  Selected headers light up green.
- The sorting applies to forwards, defence and goalies at the same time.
- The selection is kept in the address, so a sorted view can be shared: `team.html?t=EDM&s=2,5` shows McDavid first
  with 10, ahead of Draisaitl with 9.

### Frondell and Stenberg
- Anton Frondell had only 1s in every rating. That was the hack's placeholder, which had been copied along.
  He now has star ratings at Bedard's level: 5 in speed, agility, offence, shot power, stickhandling and accuracy.
- Ivar Stenberg also got star ratings, focused on passing and stickhandling (6).
- Both are in `rosters/overrides.json`, so they keep their ratings when the rosters are updated.
- The same placeholder bug was found for L'Heureux, Lindstein, Holl and Cole Hutson. They now have real ratings from NHL
  stats; Hutson, for example, lands at the level of Gostisbehere and Luke Hughes.
- Side effect: the model no longer learns from placeholders, so some other new players in 22 teams changed slightly.
  Players who were already in the ROM are not affected.
- Tested: a full CPU game Chicago–Seattle without errors.

### Everything saved so the next session is easy
- `dela.jdc.se/nhl94/CLAUDE.md` is read automatically when Claude is started in that folder. It says to read the notes first
  and repeats the most important rules. jdc only has to start Claude in `~/mount/truenas/www/dela.jdc.se/nhl94` and say what to do.
- Claude notes on the site, all in English: Start here (where everything is, rules, standard tasks, status, known gaps),
  Hacking guide, Changes and measurements, Oilers lineup and ratings, and this session log.
- `build.sh` now also refreshes the team pages and the md5 on the front page.

## 2026-10-21 (afternoon)

### All 32 teams
- Each team's roster from the NHL's official API, its lines from DailyFaceoff, every trio turned to official NHL positions.
- Each team keeps its 26 slots and its number of goalies.
- Picking order: dressed tonight → rest of the roster → injured → prospects. Utah and Vancouver had too few players and were
  filled with old ROM players who are on no NHL team.
- Players already in the ROM keep the hack's ratings, even after changing teams. New players are rated from NHL stats with
  the same model as Edmonton; players with few or no NHL games get typical depth-player ratings.
- Edmonton kept as approved by jdc.
- Tested: all 32 read back exactly; full CPU games with eight teams (BOS–CAR, CBJ–OTT, NSH–TOR, SEA–ANA). The Line Editor
  was only checked for Edmonton.

### Website
- Teams: all 32 logos taken from the game's team select. Click a logo for the team page: lines, power play, penalty kill,
  the whole roster with position, handedness and all ratings. New players are marked NEW (hover to see how they were rated).
- Claude notes and Tools pages; the tools moved to `nhl94/tools/` and all work is done from there.
- The ROM is always built to `~/.config/retroarch/roms/claude/NHL 2026 - 94 Edition v5.1W.bin`; ROM files, saved test
  states and backups stay private in `~/.config/retroarch/roms/claude/work/`.

### Worth knowing
- Montreal has 3 goalies in the hack although its team flag says 2; kept as it was.
- Goalie ratings are only partly mapped (weight, agility, speed and endurance known, the rest shown as numbered columns).

## 2026-10-21 (morning)

- Off-screen arrow fixed (was 32 px too far left).
- Fighting: Off / On only, and the setting now holds for the whole game.
- Edmonton roster and lines as of October 21, with ratings for the new players.
- Blue-line zone moved out from distance 140 to 160 to make it a bit harder.
- First version of this website.

## 2026-10-13 to 2026-10-20

- Co-op passing to the other human, goalie passes never blind, blue-line shots can score (15 %), shootouts tested.

- 2026-10-28: forum fix batch (goalie lock, runaway speed, penalty-shot ghost/goal, awareness, rocket pass) built but untested; handoff in tools/notes/HANDOFF_FORUM_FIXES.md.
