# Seven-game Mini season — 2026-10-30-r12

## User-facing result

jdc correctly observed that the menu still showed1/8: the previous change only
restricted the eight games to division rivals. Mini now plays seven games,
one against each of the seven other clubs in the division. The menu shows1/7;
new slot/header creation, recording, cursor bounds and simulated league rounds
all use the same generated MINI_GAMES constant. No eighth return is scheduled.

Full remains84regular games; Light31. Normal single-player alternation gives
four home and three away Mini games; co-op retains home fixtures. Existing
settings, defaults, first-game locks, playoff qualification and statistics rules
remain. New Mini qualifies/finishes after game7. Its playoff pairings still use
one game. The added7recognition must not accidentally select Full’s best-of-seven.

## Implementation

`--legacy-mini-eight` selects8instead of7 for exact r11 rollback. The experimental
builder forwards it to season/build_season.py; generated features.inc supplies
MINI_GAMES to season.s, seasonmenu.s, slots.s, opponents.s, minischedule.s and
playoffs.s. The first seven columns of the existing divisional round-robin table
are used. An eighth stored column is retained only as legacy storage/padding;
new Mini cursors and simulated rounds are bounded below7.

Legacy pre-metadata headers of length7and8 are recognized as Mini. Played old
8-game saves retain their length and lock; their cursor bound8still prevents
out-of-table reads. This does not migrate season progress into the new release.
The release policy clears old progress after normal emulator exit, with controller
remaps/config/history preserved. A live older ROM remains unchanged in memory.

ROM changes are confined to version/checksum, slot setup/import, the season
recorder/simulation selection, main menu, opponent selection, divisional helper
and playoff-format recognition. No AI, physics, input or rating code changes.
Slots’ extra migration comparison moves its Icing default instruction8bytes;
its source/hook export is refreshed. Playoffs’ added7comparison requires one
conditional word branch; the legacy build retains the old short branch exactly.

## Tests and limits

- `verify_mini_division.py`:224native club/round cases, all32clubs and all15other
  simulated fixtures per round; every club faces exactly seven distinct same-
  division rivals. Actual controller inputs check every club, logos, both cursor
  directions and Single/Teammates. A seven-game Simulate Match league reboots
  after4, checks all32GP, scorers/keepers and checksums after each game, and
  records the completed-season summary without an eighth regular game.
- Native UI negative control shows r8’s1/8against the new1/7; screenshots use
  the actual Steam Genesis Plus GX core.
- `verify_mini_seven.py`: the naturally qualified historical pre-eighth fixture
  already has7GP. Setting its length to7 tests real boot/import/qualification
  and starting the native single-game playoff. No winner, qualification flag or
  game result is injected. Exact r11 is the negative control. Original8-game
  import/lock/progress and its unfinished eighth match remain separately checked.
- Shared completed-season/restart, settings, navigation, roster, co-op and
  shootout fixtures now use7for fresh Mini while historical8captures remain.
- All80 exact-source checks run. Only the identical inherited finisher_hold
  geometry failure remains; strict gate FAILED. No new Hard strength claims.
- Forty ordinary active-game traces match fresh r11 controls exactly; older
  control chains and their documented video-boundary limits remain retained.
- Independent rebuild, exact r11 rollback and original-base IPS reconstruction
  pass. The native menu image and bound JSON reports accompany this release.

The unfinished manual-keeper candidate is excluded. Remaining keeper/pass,
random ownership and penalty-menu requests stay queued. P2green/P3red/P4yellow
was explicitly requested for later and is recorded in TODO.md.

ROM SHA256:2ca0be4ef69f1d875c5a25e1ef91e42bda6b87396c5471fa8a417eb652ec8d60; CRC32:FB7FA2F0.
