Project Status - smeagol44/MKMSZ-Randomizer GitHub Wiki
Project status
Focused selector RSP/task-event upstream static audit (2026-10-11; no emulator run): In five complete v05 captures, at VI #2165 the failing run's second RSP execution/completion is observed at VI+7,376 Count and SP_INT at +7,396, before AI_LEN at +8,266; three heavy-input non-reproductions complete at +7,720/+7,990/+7,950 and interrupt at +7,732/+7,998/+7,966, after AI_LEN at +7,594. All first executions are VI+6,976. Pinned RMG do_SP_Task and ParaLLEl RSP source statically establish that the first execution returns running, schedules a zero-modeled-delay RSP_TSK_EVT, and the second execution returns HALT|BROKE|INTR_BREAK|TASKDONE. Thus the earlier local divergent observation is delayed continuation-event dispatch, not proven differing RSP microcode cost. Pre-read SP is neither necessary nor sufficient for the later FIFO state: 193/299 failing FULL services have pre-read SP; the no-repro minimal-input recording has 3,368 such services and zero FULL, while isolated failures in three healthy controls have no pre-read SP. Other feedback/phase differences existed from VI #294/#295 and an SP ordering split at VI #601 caused no PCM size change, so the 1,872nd PCM attempt is the first common size fork, not the first system divergence. Static scheduler points at AudioInfo OSTask type 2 with active pointer 0x8013BE28 but RSP task type and guest PC/EPC were not recorded. Guarded selector/audio fixed ROM spans are disjoint; whole-composition memory/ABI and unknown wild writes remain Pending. Release audio gate BLOCKED. Full report archived in Research canonical investigation.
NEW earliest selector audio-size divergence (2026-10-10; five complete v05 captures, source/trace-confirmed, origin Pending): Aligning native PCM attempts across the earlier 299-rejection frontend failure and three heavy-input no-runaway captures proves identical first 1,872 submitted PCM sizes; at attempt index 1,872, failing run selects 1,472B while all three choose 1,408B. Exact preceding AI_LEN feedback 1,344B vs 1,352B; the native stock size formula maps those to 368 vs 352 frames. Pinned RMG get_remaining_dma_length() quantizes an unrounded 1,351.728B vs 1,353.053–1,353.789B down to the 8B boundary. Failing AI_LEN service is 8,266 Count after VI, three controls 7,594 Count after VI; similar service-offset excursions also occur in healthy traces, so this is a phase-sensitive threshold, not proof of a specific sound/helper operation. The minimal-input case diverges earlier at attempt 1,848 and is not part of this matched prefix. The RMG fractional-duration diagnostic #161 does not guarantee recovery: 1,472B tail duration would increase 811,072→812,306 Count on the same assumed schedule. Source input is current ROM's native MIPS, pinned RMG C, and our Python patch pipeline; no original MKMSZ C source exists. No code correction approved, no reason to waive the release blocker or infer absence of memory corruption. Report and hashes in Library selector negative control folder.
NEW v05 selector negative controls (2026-10-10; four user-reported non-reproductions, trace-confirmed): Four complete six-stream RMG v05 archives (24/24 rings saved=total, no overwrites) contain 1,133 Up/Down PIF rising edges yet only 0, 1, 1, and 1 isolated native PCM rejects, versus 299 recurrent rejects in the earlier failing menu run with 245 vertical edges. Minimal-input run has zero; 239-Down, 335-Down, and 558-vertical-press runs each have exactly one, then recover. All four have zero SDL drops/failed pushes. At each isolated reject FIFO head/tail is 1,536/1,408B and queued 1,408B DMA finishes 30,336–31,064 Count BEFORE next native audio service, whose AI_STATUS is EMPTY; prior failing head/tail 1,600/1,472B, with tail 4,746 Count AFTER next service and recurrence. Even AI_LEN=1216/accepted 1,600B precedes the three healthy recoveries. This directly disproves input count or one FULL as sufficient for sustained acceleration; the original source of the phase/PCM size choice remains Pending, not resolved. All four preserve one active-VI native service per frame and exact synth sample-clock steps. No ROM/emulator changes or new tests; 1.0 audio gate still BLOCKED. New raw ZIPs and findings report archived in Library MKMSZR Research/07 - RAM Diffs and Experiment Data/RMG-v05-Stage-Select-Four-Negative-Controls-2026-10-10/. Canonical analysis.
Selector-only RMG v05 FIFO failure (2026-10-10) — Trace-confirmed; first frontend initiator Pending. Six new recordings recovered from the existing archived ZIP all match SHA manifests and have saved=total, overwritten=0: VI 13,500, RSP 20,196, phase 3,085, input 1,610, SDL 11,720, AI 17,588. During rapid Safe Stage Select navigation, 299 unique native PCM submissions are rejected t36.496–56.364; 169 precede the first stage-9 sample (t47.696, following Start t47.615), 130 follow. Zero SDL threshold drops or failed pushes (5,860 successful); this is the same native FIFO rejection class seen in previous accelerated Inventory captures, starting before Fortress or rich Inventory. First rejection: active/queued 1,600/1,472B and promoted 1,472B tail due 4,746 CP0 Count after next native service (1,408B would be done 30,518 Count beforehand). 3,081 native audio services map 1:1 to active VIs; 3,081 native phase clock steps exactly match AudioInfo frame sizes; synthesis exceeds 368/frame by 105,248 = 299 × 352 samples during the burst. PIF has 95 Up / 150 Down press edges (201 before first rejection), but does not record native input-consumption PC or SFX voice creation. Prior helper-OFF Trace 9 (blue retained) was healthy; sound-JAL-OFF Trace 10 and sound-off/s0-to-t9 Trace 11 still failed. The exact blue edit is a 29-entry BGR555 palette-only copy, separate from the helper hook. No upstream instruction causality, ROM/emulator change or production correction; 1.0 audio gate BLOCKED. See the canonical audio investigation and new report/audit archived in Library MKMSZR Research/07 - RAM Diffs and Experiment Data/RMG-v05-Stage-Select-Prestage-2026-10-10/. Earlier A–E Fortress states remain separate; E was healthy.
Long v05 negative control (2026-10-10): high Inventory/combat/input activity is NOT sufficient for sustained accelerated music; speculative off-screen Grunt AI is not instrumented. Maintainer reports a ~10-minute stress run (walking, un-killed enemy fighting, heal in another box, intensive cursor/box switching), intermittent crunch but no sustained speedup. Input/AI/RSP channels are complete (9,766 PIF, 213,789 AI, 191,216 RSP), while VI, phase and SDL rings lose 12,668 / 2,877 / 11,422 earliest records (do not call this a lossless six-stream capture). 18 actual native PCM rejects, worst 5 in 0.266s, and at least 59 retained host queue-threshold drops, vs prior v05 fast 86 in 5.734s. 348 Down + 264 Up press edges, no runaway; 10 guest rejects +23 host drops after last input, with a 167.38s entirely input-neutral ending. Three healthy 368-only plateaus (44.785, 40.000 and 38.484s), the last without a single button press, all walk AI_LEN from 1,344 to 1,288; 29 occasions of AI_LEN=1216 and 30 accepted 1,600B submissions also do not force runaway. Retained 32,768/32,768 VI callbacks each have an audio first-status service, native phase sample-clock transitions 32,767/32,767 exact. Offscreen Fortress GRUNT1 0x0E / GRUNT2 0x0F activity could perturb scheduling but none of the six streams records aggro/AI/position/RNG, so enemy blame remains Hypothesis. No production patch or further unfocused user test. Canonical detail.\n\nRMG v05 guest-PIF input → audio first-failure correlation (2026-10-10): measured but original cause Pending. New maintainer Runtime-observed clipping/speedup after Inventory Up/Down navigation. Six host traces complete/no loss; 1,594 valid port-0 PIF responses, 3,962 complete audio services with no active-VI gaps. Fortress stage 9 at t13.127s; Z response t38.786s (probable Inventory open, not an internal-state marker); 39 Down + 34 Up presses from t39.711s preceded the first native FULL at t62.544s. The first AI_LEN 1,216 t62.093997 preceded a contemporaneous Up press by 0.535ms, causing first 1,600B generation at t62.111; feedback low band stepped from 1,256→1,248→1,240→1,232→1,224→1,216 in ~4.804s / 8B (consistent with ~15.29 Count/VI drift). First full FIFO active/queued 1,600/1,472B; promoted 1,472B tail stays active 4,056 Count beyond next native service, nearly duplicating previous v04 fast 4,126 margin. 86 rejects over 5.734s among 345 services (259 accepted), producer sample clock +23.54% vs nominal frame count; zero SDL threshold drops. Last controller release t63.395; FIFO rejection continues 4.883 seconds without inputs. Thus continued movement is not necessary to sustain the fault, though Inventory opening/navigation could affect initial phase. No game instruction origin or approved correction yet; no further unspecific tests. Detailed owner; raw ZIP-independent six streams + audit preserved in Library.\n\nPending controller-input attribution (2026-10-10): v04 traces cannot tell exactly when Inventory cursor Up/Down input was received. Maintainer reports acceleration/clipping ~5–10s after renewed Inventory navigation in latest speedup, but no input stream existed to verify it. New read-only pinned RMG PIF guest-visible controller response capture (post-process/netplay, per-poll raw buttons/stick and VI-aligned host timestamp) is staged in draft diagnostic PR #165, based on v04 #164; build and maintainer parity/one bounded cursor sweep remain Pending. Do not infer game cursor-consumption instruction or physical SDL timestamp from PIF responses. Existing clean/slow/fast raw captures cannot be backfilled. No ROM patches or production change. Focused owner.\n\nv04 DMA deadline closure refinement (2026-10-10): 368 native sample-frames = 1,472B = exactly 811,072 RMG Count, just 20 Count shy of VI's 811,092; adjacent 64B output changes completion deadline by 35,264 Count. The clean and slowdown captures each spend ~40s in healthy 368-only output; DMA END cadence averages 811,077.40/811,077.75 Count against native service cadence ~811,092, producing natural ~14–15 Count/VI phase creep and a 1,344→1,280-byte AI_LEN staircase. At the slow fork, next audio service occurs 35,580 Count after 1,408-byte queued DMA completion, establishing a fresh 352-frame BUSY→EMPTY rhythm; guest FIFO is empty for median 35,226 Count between completion and next service. At fast fork a 1,472-byte queued DMA survives 4,126 Count beyond next service; if it were 1,408B it would have completed 31,138 Count before. The severe 81-rejection episode includes successful submissions between failures; it is not 81 consecutive failed services. This fully explains opposite feedback given observed timings, not which original action caused the phase choice. Read-only diagnostic in draft PR #162; 1.0 audio gate remains blocked. Detailed owner.\n\nThree new RMG v04 captures (2026-10-10) reproduce both SLOW and FAST music anomalies with complementary native audio feedback fixed points; upstream cause still Pending, release audio gate BLOCKED. Clean 379.61s: five isolated/3-cluster FIFO rejects, music normal; also a 39.77s all-368-frame plateau, proving the historical 368-only phase is not sufficient for acceleration. Slow 229.80s: only five isolated guest rejects, but at t191.400–229.801 2,303 consecutive accepted 352-frame buffers (1,408 bytes) after an intervening rejection; 2,304 accepted in wider interval, AI_LEN≈1400, −4.35% synthesized time per VI, host SDL queue median only 504B (no host drops during plateau). A DMA END only 10 CP0 Count after FULL-status read at t191.417 initiates/maintains the low-supply feedback. Fast 277.60s: 81 repeated FIFO rejections (~one per four audio services) t267.047–272.381, synthesis +23.8% versus per-VI target during burst while skipping PCM submissions, near-full host queue median 16,600B and four host drops. Across 52,316 new producer snapshots, configured clocks/rates, manager gates, AudioInfo/command addresses and synth pointer are invariant; all 52,313 sample-clock increments match the native buffer counts; stable Fortress HUD code hashes and arena bounds. No listener waveform or controller trace; does not identify the original operation/phase selection. Existing initial FIFO replay still applies; do not delete features, change clock or spin-retry. See new trace details.\n\nPreexisting first-DMA trace comparison (2026-10-10): all six Traces (6–11) begin with exactly 2,816 PCM bytes and the same first ten submitted lengths; no gross differing startup rate/epoch observed. Each first accepted submission follows the preceding VI by 7,682–7,726 CP0 Count. The first submitted PCM length divergence from failing Trace 7 is not until write #1,874 for vanilla and #2,184–2,203 among other MKMSZR controls (~36–42s). Fine-grained AI_LEN deadlines diverge earlier and different routes are not matched; equal size histories do not imply identical initial state or musical payload. The first native audio work gate is stock and precedes logos, as documented in Work's draft PR #163; Ghidra additions are in draft #7. Next proposed observer should measure native producer ownership and first later divergence, not duplicate already captured first AI write/length. No additional runtime run, producer code edit or production change. Canonical investigation.\n\nVI-relative audio-service check (2026-10-09): no multi-frame native audio callback gap in failed recordings; upstream FIFO phase remains unresolved. Five independent full observer captures (7–11) record 59,484 first AI_STATUS audio services, one in each active VI; the first 294/295 VI events precede output (plus one unmatched final VI callback in each capture). There are no gaps between active-service VIs. VI→service first-status guest CP0 Count medians stay 7,652–7,722, observed extrema 7,294–9,490, versus 811,092 Count per VI, including in a 352-rejection sustained burst. This disfavors Inventory-triggered whole-frame audio-service starvation as a necessary mechanism; the unresolved variable is AI DMA tail size/completion phase relative to consistently scheduled service. Original scheduler code and Ghidra metadata already map VI/service/audio/RSP dispatch, so broad static retrace is redundant. No ROM/emulator test or production change. See new cross-capture timing analysis.\n\nIndependent endogenous FIFO replay across Traces 7–11 (2026-10-09): zero discrepancies with NO recorded FIFO state, AI_LEN or PCM size as model inputs. Using only recorded service/write/AI-END event times and stock native size recurrence, reconstructed all 59,992 status reads, 59,489 AI_LEN reads, 58,971 submitted buffer sizes and 513 rejected enqueue decisions exactly. In the final Trace 11 rejection, AI END occurs 18 CP0 Count after first FULL-status read and before diagnostic logger's next read, directly changing feedback/escape conditions. This is complete host-event-driven state consistency, not prediction of the originating event schedule and not an approved game/emulator fix. Strictly read-only reusable script and synthetic tests staged in draft PR #162; standalone archive includes original four trace streams. Release remains blocked until a portable upstream correction and runtime proof. See canonical audio investigation.\n\nFull-record closed-loop FIFO reconstruction (2026-10-09): 59,489/59,489 AI_LEN reads and 58,971/58,971 accepted native buffer sizes match the documented native sizing + pinned RMG AI event-time model across vanilla and Traces 7/9/10/11. All 513 rejected guest enqueues also correspond to expected 352-frame generation. This includes both fault onset and recovery, not just a post-failure 3s window. Critically Trace 11's 79th rejection ended when emulated AI END occurred 18 CP0 Count after the first native FULL-status read, before the diagnostic logger's extra status read and the next AI_LEN feedback; new head feedback became 1,464 bytes and 352-frame rhythm resumed. At the start of severe bursts queued tail finishes ~3,784–4,486 Count after next service; isolated failures have ~30,522–31,714 Count of positive headroom. This establishes a phase-boundary FIFO mechanism, but does not yet explain why the patched composition preferentially enters it or prove zero other memory faults. Guest diagnostic logger has a timing cost; emulator fractional DMA v03 may increase FIFO occupancy, so cannot be pre-approved as a fix. No production change; release remains BLOCKED. See full investigation.\n\nTrace (11) overturns the selector-s0 ABI fix hypothesis (2026-10-09): audible acceleration still occurred with the sound call NOP and helper return moved s0→t9. Exact register-only proof SHA 73d8e64b078ff6211b9e059e6f46bdb90f2bef9bd829c2a7e52f41392b77fc68 captured 80 native FIFO rejected submissions over 247.770s: 1 isolated at t=162.671 and 79 consecutive between t=240.087..245.288s, a ~5.2s audible episode that recovered; no long fixed-368 precursor. 14,858 paired VI/memory observations show no out-of-bounds arena or mutated resident-code hashes. 22 separate SDL drops (19,312B) also occur. First attempt emitted no trace when RMG unexpectedly closed entirely after clicking its normal Shutdown button; treat this as unexplained host exit, not an observed guest crash. With muted sound and t9 return, the helper has no memory write and leaves selector downstream argument/used-register invariants intact; phase-sensitive emulated audio timing is the leading inference, but root cause and acceptable portable correction are Pending. Further blind register/cave proofs not justified. Release remains BLOCKED. See selector owner and audio report.\n\nTrace (10) overturns the sound-playback-only hypothesis (2026-10-09): 352 uninterrupted native PCM rejects and audible acceleration despite MOVE SFX wrapper call NOP. Failed MKMSZR_selector-move-call-off_fortress_proof_v01.z64 SHA 7ef2ce16bddcc5716df8aa030c5eaf367363a3bbdf882f6b63ceee2ba73bb25e retains full menu helper but disables sound; in 65.657s, repeated failures span t=42.207..65.607s and user exits while music remains broken. No SDL drops; sampled arena/HUD regions stable. Unlike failing Trace 7, this failure has no long all-368-frame precursor, disproving its necessity. Healthy Trace 9 bypassed whole helper, not only sound. The helper's s0 return-address use is an unverified ABI candidate; a guarded sound-still-off, two-instruction s0→t9 disposable proof (SHA 73d8e64b078ff6211b9e059e6f46bdb90f2bef9bd829c2a7e52f41392b77fc68) is prepared with no production or other feature changes; runtime Pending. Investigate helper effects vs initial AI timing phase before any fix. 1.0 audio gate stays BLOCKED. See selector owner and audio report.\n\nBreakthrough lead, Trace (9), 2026-10-09 — selector MOVE-helper-OFF eliminates the sustained audio failure on a 252-second bounded route; cause not yet proven; 1.0 gate remains BLOCKED. Byte-guarded control differs from failed prefilled Fortress Trace (7) only at Safe Stage Select ROM 0xDD70 (reinstates stock instruction instead of MOVE-SFX helper JAL) and CRC. Audio stayed normal; guest FIFO rejects fell from 74 (73 consecutive) in 130s to 2 isolated over 252s, and longest run of exactly 368-sample buffers fell from 2,383 to 9. Arena highwater, HUD pointer and fixed-code hashes match across tests. This is the strongest single-feature isolation thus far; it does not tell whether actual descriptor 0x1FC SFX, helper register/callback behavior or timing phase caused the change. The staged helper-still-on, native-SFX-call-only NOP ROM MKMSZR_selector-move-call-off_fortress_proof_v01.z64 (SHA 7ef2ce16bddcc5716df8aa030c5eaf367363a3bbdf882f6b63ceee2ba73bb25e) provides next bounded negative control without production changes. Runtime Pending; no emulator automation or other features removed. Stage selector owner and audio investigation.\n\nSafe Stage Select audio lead (2026-10-09): bounded MOVE-SFX-off diagnostic now built, cause Pending. Prior selector confirmation v02 using 0x1FD was rejected after delayed crunchy/choppy gameplay audio; accepted v03a uses only Up/Down MOVE 0x1FC, and its earlier runtime pass did not cover the current intermittent production failure. A disposable SHA-guarded prefilled Fortress proof restores only the selector's original draw instruction at ROM 0xDD70 (plus N64 CRC bytes), leaving every Inventory/Toasty/modern-control/audio-logger patch identical. Output SHA 3988da00cc1fda37d314f4b20452ac678ae17cc1bc2d078c9e0dc12a857dd98f. No runtime executed, no production sound removed; one bounded manual A/B can disprove whether MOVE is necessary, but a clean result could also be timing-phase dependent. See Stage Flow owner and Audio investigation. Release remains BLOCKED.\n\nVanilla Fortress Trace (8) control (2026-10-09): no audible acceleration, but 5 native FIFO-full rejections and 40 host SDL drops; MKMSZR-specific sustained 368-only phase remains unexplained. Clean unmodified USA ROM ran ~321s with RMG v02 observer, entering Fortress at t=53.379s (VI-relative). Four complete streams show an isolated FIFO FULL before Fortress, a three-rejection cluster in Fortress, and another isolated rejection there. The first two head/tail sizes of vanilla's three-event burst match MKMSZR Trace (7)'s sustained 73-event burst exactly (1600/1472, 2816/1472), but at the third reject vanilla uses tail 1408 versus MKMSZR 1472, and recovers. Vanilla has no ~40s all-368-frame regime (longest four consecutive outputs), unlike 2,369/2,383 consecutive outputs in MKMSZR Traces (6)/(7). All 18,978 vanilla accepted writes use the same 551 Count/byte as MKMSZR; 40 host drops (30,944B) occur without reported accelerated music. Thus emulator precision loss/host clipping are shared, but not sufficient to explain mod-only sustained runaway; patch-induced workload/phase interactions and unmonitored corruption remain in scope. The project remains BLOCKED; no ROM/prod change. See full vanilla comparison.\n\nNew audio-clock root-cause candidate (2026-10-09): repeatable ~40-second precursor and pinned RMG integer DMA-duration truncation; production release still BLOCKED. Independent Trace (6)/(7) share nearly identical 2,369/2,383 consecutive 368-frame FIFO production runs, head AI_LEN 1,344→1,280, ending within 0.36–0.53s of the first reject. Pinned RMG computes AI duration using an early integer division (551 rather than ~551.838 Count/byte); all four trace runs confirm 551. The resulting ~22,080.54 guest AI sample-frame consumption against 22,047Hz SDL playback predicts ~134.18 B/s host queue buildup, matching the measured clipping precursor. Native frame builder code matches clean ROM. The guest FIFO trigger remains strong inference, not proven emulator-only cause: quantized feedback and dispatcher timing still require controlled testing. Separate draft diagnostic PR #161 offers a strictly opt-in rational DMA duration A/B condition for exact pinned RMG, with no production or ROM modifications, awaiting CI/runtime validation. See canonical investigation.\n\nProduction rich Inventory music gate (2026-10-09): FIFO recovery/runaway feedback bifurcation now reconstructed; original trigger Pending, PR #156 draft/unmerged. The new exact-v02 diagnostic pair proves 135 additional rejected PCM submissions while audio/VI services each advance 4,934. Synthesis exceeds its nominal interval by 47,616 samples, close to the minimum 47,520 samples represented by rejected buffers. This strengthens PCM omission as a tempo-drift mechanism but does not identify the Inventory trigger, event timing or complete audible loss budget. Preserve the accepted rich presentation. The AI enqueue retry is explicitly rejected. The maintainer ran that populated-Fortress ROM successfully through a long idle/no-audio-defect test, then reproduced tempo acceleration during a rapid Box 1 cursor sweep. New untruncated Trace (5) captures 80 full-FIFO rejects in ~5.27 seconds, no host SDL drops, on-time VI/AI events, and ~24% excess synthesis over accepted PCM during the burst. Follow-up complete Trace (6) and ordinary-items control did not reproduce acceleration: the 219s full sweep had only four isolated native rejects but 14 SDL queue-threshold drops (14,920 bytes), while the 110s ordinary sweep had neither. Both host audio queues grew ~133 bytes/s before overflow, matching the nominal 368-sample/VI producer versus 22,047Hz playback difference; this is independent evidence for host clipping but does not identify the transient guest failure trigger. Cursor/portrait DMA involvement remains a hypothesis because input and ROM DMA were not logged; no production correction was built. A focused comparison of first failures in Trace (5) versus all four isolated Trace (6) failures now identifies the next-service FIFO-state fork: a 1,472-byte queued tail in Trace (5) persists 4,222 Count beyond the next service, making the maximum 704-frame recovery buffer go into a still-busy FIFO and yielding AI_LEN=0; a 1,408-byte tail in Trace (6) drains ~30,628 Count beforehand, so the same 704-frame buffer becomes the new head, AI_LEN reads 2,808 and the next synthesis shrinks to 352. All AI durations are 551 Count/byte and VI is 811,092 Count, only 20 Count longer than a nominal 368-frame DMA. This explains intermittent amplification/recovery, but not the upstream reason the first FIFO/tail state differs. See upstream report, source evidence and bounded matched test.
Cross-feature corruption and memory audit (2026-10-09): no fixed 16 KiB expansion-payload/arena-floor overlap identified; dynamic headroom Pending. The historically recurrent accelerated/crunchy-audio symptom has multiple previously proven non-audio causes; do not confine the root-cause search to rich HUD or blame the emulator. On the exact instrumented Fortress ROM, file 1A occupies [0x801AF820,0x801B3420) and stops exactly at the guarded arena floor. Named production runtime suballocations and PR #156/diagnostic proof ranges are disjoint; selected former bad sites (false-zero dispatch cave, GAME SETTINGS stale store and HUD first-load size) remain corrected. Earlier all-stage 16 KiB proof cursor left 30,120 bytes, but the newer accelerated post-Kia Fortress snapshot left only 17,496 bytes relative to the same static bump boundary: incomparable compositions, not proven exhaustion, but peak allocator and rewind/lifetime instrumentation are the next priority. The 16 KiB reservation, Toasty, and modern controls are not rejected. See broader audit and Memory Map.\n\nFull-project rich Inventory/audio blocker (2026-10-09): cross-feature memory-provenance diagnostic now staged; root cause and production guard still Pending. The audio FIFO feedback runaway/recovery mechanism is trace-confirmed but may be a symptom of any bad composed feature. The 16 KiB fixed allocation is non-overlapping; dynamic peak/rewind/stale-pointer safety is not exhaustively certified. Draft PR #160, based on separate host observer #157, adds opt-in VI-sampled arena/HUD pointer and code-digest metadata without touching ROM. Synthetic C/injection tests passed; one exact v02 pinned Flatpak CI build passed on commit f6c67e5 (Actions run 37899907006), while observer-off parity and manual runtime proof remain Pending. New size precursor evidence: Trace (5) contains three 400-frame buffers in its last 150ms before the burst, compared with one before Trace (6)'s isolated failure. No fixes or feature deletions authorized. The project release gate remains BLOCKED. See primary investigation.\n\nTrace (7) v02 memory/provenance result (2026-10-09): accelerated-music failure reproduced; no monitored arena/code/HUD invariant violation; release gate BLOCKED. Maintainer's 130-second prefilled Fortress route captures 74 paired native FIFO rejection events (one isolated at t=82.112 and a 73-rejection burst t=118.729..123.529), with zero lost records. The v02 observer samples arena high-water 0x8028CD48 (15,432 B below 0x80290990); resident cursor 0x8028C538, HUD data pointer 0x801FEBA0, and three ROM-matching code hashes stay unchanged through both failures. Last key-portrait-cache change precedes the severe burst by >63 seconds. Recurrent FIFO feedback bifurcation is stronger; exhaustive memory/legacy-patch corruption is not excluded by VI sampling. Separate SDL host discards occur both before and during failure. Continue upstream cadence/source review, not feature removal or FIFO retry. See primary audio investigation.\n\nNative Inventory legend (2026-10-06): Runtime-confirmed bounded. The maintainer accepted the focused legend v01 proof as working perfectly. The native Inventory panel now shows dynamic BOX n OF 4; Items mode shows LEFT-RIGHT BOX, A USE, B COMBINE, R POWERS; Power Ups uses the approved sparse layout L-R POWER and R ITEMS. The patch replaces only the stock legend text-emission block and appends after the already Runtime-confirmed in-Inventory switch module; the panel background and switching semantics remain unchanged. The separately investigated Inventory/loading hang is unresolved and is not attributed to or bundled with this legend promotion.
Powers-as-pickups OFF earned-XP persistence correction (2026-10-06): Runtime-confirmed bounded. The prior OFF composition correctly retained stock XP awards/caps but did not synchronize native current XP into MKSV persistent XP or install the safe stage-entry restore, so stage exit/re-entry could drop earned powers. PR #154 keeps stock XP behavior untouched, snapshots current XP into existing state +0x44 at the established lifecycle-v06 teardown seams, and reuses the Diagnostic-B stage-init restore before four-box reconstruction. The maintainer manually validated the focused all-stage proof ROM MKMSZR_earned-xp-persistence_all-stages_proof_v01.z64 (SHA-256 05c579ad5473a3f357b4cae45b660dbcbdd5b5aa66389eff3395a8e47bf8a550) and reported the requested earned-XP/power persistence route worked. The fix adds no allocation, does not call the unsafe tier evaluator at stage init, and leaves Powers-as-pickups ON unchanged.
In-Inventory four-box switching (2026-10-06): Runtime-confirmed bounded in full production composition. Disposable production v03 used current main's real global materializer, lifecycle v06, complete Inventory HUD, GAME SETTINGS/modern controls, gameplay box shortcut, BOX n OF 4, Fire/Bridge 40-slot ownership correction, and donor-backed Toasty/Temple-audio composition, then added the audited Inventory-loop switch path. The maintainer reports the result works perfectly. In Items mode, Left/Right now cycle all four authoritative boxes with wraparound while Inventory stays open; empty boxes remain navigable, pending Combine is canceled, selection resets to the first occupied row, foreign credentials remain stage-masked, and Power Ups retain stock horizontal navigation. The existing gameplay Block + Use + Left/Right shortcut remains intact. Proof ROM SHA-256 14feee5d6a0a79a20359781364eb6a9ef77ffffad3f2c0bee94760b9c2074f7e. Runtime scope is bounded; exhaustive lifecycle/full-seed coverage remains part of the final release gate.
Fire/Bridge multi-box credential gate correction (2026-10-06): Runtime-confirmed bounded. Stock handlers 0x8007206C (Fire IDs 0x17..0x19) and 0x80071FE8 (Bridge IDs 0x1D..0x1F) require all three credentials but stock scans only the ten-slot LIVE inventory. The production correction changes only each handler's ownership scan base/count from LIVE 0x800A600C, 10 words to authoritative backing 0x800A6048, 40 words; native physical use-site gating and completion actions remain stock. Disposable v03 composed the real production four-box switching/masking path and BOX n OF 4, distributed each three-credential family across multiple boxes, and used proof-only placement/gate bypass at the exact Fire/Bridge use-zone trigger records. The maintainer manually switched boxes and confirmed both positive and negative controls in both Fire and Bridge: all three owned across boxes succeeds; one credential genuinely absent fails. Positive SHA-256 9952a2ceb4d3e64888bb1f2662560a703f15db0613fd07043906a8ca6539be25; negative SHA-256 f6521862d51ab2899184e41277e56e11c0d2f43630b732ff5e7996218236d812. Runtime scope is the 40-slot ownership correction; the proof bypassed the unchanged stock physical use-site gate for convenience.
Inventory HUD production wording follow-up (2026-10-05): Runtime-confirmed closed. First webapp runtime after #146/#147 exposed that #146 had promoted proof-only slash wording into production. Plain / is a known-bad native-font glyph. PR #148 restored the earlier accepted REQ. POWERS X-Y + right-aligned CHKS XX-85 (Vanilla: REQ. XP 5100), and the maintainer subsequently generated and tested a deployed-webapp ROM and reported that it looks correct. The regression reproduced with Powers-as-pickups both ON and OFF and was presentation-only; Required Powers remains independent of pickup mode.
Native Inventory HUD closure (2026-10-05): v20 Runtime-confirmed the first-load 0x1200 allocation correction; v21 then Runtime-confirmed the completed TEST LAB Inventory presentation with all nine Power pickups, colored STG# credential labels, real paper titles, streamed portraits, ordinary-row font/palette forwarding, plus the accepted native-font-safe status format (REQ. POWERS X-Y, CHKS XX-85); #146 temporarily regressed those strings to slash forms and the follow-up restores them. A dense debug layout exposed a separate rapid-Power lifecycle edge: v22 proved the white-flash wrapper's synchronous sleeps were causal, and v23 Runtime-confirms the accepted correction: award synchronously, run the three 2-tick white pulses in one guarded child process, and allow later rapid Power pickups to award immediately. The shared browser/CLI integration now promotes this architecture without adding a new flash allocation. Final representative full-seed production-composition runtime validation remains the release gate.
Last consolidated: 2026-10-01. Focused global-generation promotion update: 2026-10-03.
PR #137 global-v2 promotion approved: the shared browser/CLI path now generates, solves, and materializes an 85-check global layout. The maintainer reports the global-v2 proof functioning correctly and has approved merging it. Runtime evidence remains bounded; an exhaustive eight-stage/full-seed pass is not claimed. The persistent FX-crunch investigation is deferred and has no established attribution to global generation.
Powers as pickups and Required powers are independent. OFF retains vanilla earned XP; no additional earned-XP simulation or validation gate is required. The solver requires zero shuffled Power Upgrade items in OFF mode because none exist in that pool. This does not change the Fortress gate: Vanilla retains the stock 5100-XP check, and Custom/Seed still apply their selected XP threshold in either mode.
Focused lifecycle update (2026-10-01): lifecycle v06 is Runtime-confirmed and promoted to the shared production pipeline. The exact accepted reference is Very Hard / 9 total lives / 5 continues / persistent HP ON. The shared core now parameterizes that same lifecycle control flow for build-time difficulty, starting lives (1..10), starting continues (0..5), and persistent HP ON/OFF; browser defaults are Very Hard / 5 / 3 / HP ON. Non-reference combinations are Implementation/CI-confirmed pending representative runtime coverage. v04 remains Rejected / unsafe composition. See Lifecycle static closure, Persistence/inventory/lifecycle, and Web patcher/product behavior.
Scope: This page is the current-state dashboard for MKMSZR. It owns production/proof/pending maturity, current blockers, and priority order. It does not own full 1.0 requirements or long proof chronology.
Canonical release requirements and acceptance gates: 1.0 requirements and roadmap. Detailed runtime evidence: Runtime validation status. Detailed mechanisms and proof histories remain on their owning domain pages.
Evidence labels are listed concisely on Home and applied under the methodology in Research workflow: Runtime-confirmed, Static-confirmed, Implementation/CI-confirmed, Hypothesis / strong inference, Rejected / failed, and Pending.
Production systems
| System | Product state | Current evidence / limit |
|---|---|---|
| Clean-ROM validation, guarded patching, separate output, N64 checksum update | Production | Implementation/CI-confirmed for the supported USA Rev. 0 ROM; output is separate from the clean input |
| Compact eight-stage selector | Production | Runtime-confirmed A-button title entry across all eight safe stages. Accepted v03a also Runtime-confirms the title-blue animated cursor and one title MOVE sound per valid Up/Down press without the delayed audio corruption seen in rejected v02. Stage choice remains Start; an added confirmation chime is deliberately deferred. Unsafe stock entries are excluded. |
| 16 KiB runtime reservation and native payload | Production | Runtime-confirmed 16 KiB arena floor on the bounded all-stage profiler proof and no regressions reported on the tested full-production TEST 16KB + rainbow composition. The established Runtime V2 layout remains in the first 1 KiB; the remaining 15 KiB is an unassigned build-time expansion pool with CI-enforced bounds. |
| Ordinary-pickup persistence | Production beta | Representative Runtime-confirmed collection/restoration in all eight main stages; all 84 ordinary records are statically cataloged, not individually runtime-exhausted |
| Global seeded pickup randomization / solver | Production beta (PR #137) | Implementation/CI-confirmed 85-check global permutation, destination-safe materialization, fixed-point validation, selectable completion modes, and a deterministic 10,000-attempt ceiling. Clean input stays 16 MiB; generated output is 32 MiB with eight owned stage-resource slots. Bounded loader/runtime evidence and maintainer approval support promotion; full-seed release validation remains Pending. |
| Powers as pickups / XP progression | Production beta; OFF earned-XP persistence Runtime-confirmed bounded | Pickup mode remains default and Diagnostic B behavior is Runtime-confirmed through XP 85/258, Temple -> Wind, and title -> Fire. OFF retains stock XP stores/caps and ordinary Herbs callbacks; PR #154 snapshots native earned XP into MKSV +0x44 at lifecycle-v06 teardown seams and restores it at the established safe stage-init boundary. The focused v01 OFF proof passed the maintainer's requested re-entry test. See XP and progression |
| Four inventory boxes and foreign-key masking | Production beta / Runtime-confirmed bounded | Gameplay chord switching, transition preservation, stage-local masking, Fire -> Wind Circle immediate re-masking, Fire/Bridge cross-box ownership, and in-Inventory Left/Right four-box navigation with wraparound/empty-box support are Runtime-confirmed on bounded routes. The inert foreign-stage placeholder remains stock item ID 0x08 internally but is displayed as SEALED. Lifecycle v06 owns Game Over/new-run cleanup. |
| GAME SETTINGS frontend and modern controls | Production beta / Runtime-confirmed v02 composition. | The shared browser/CLI builder now exposes TURN / ATTACK / SPECIALS / JUMP / RUN / EXIT. ATTACK and SPECIALS have CLASSIC / MODERN, JUMP has DPAD / BUTTON (BUTTON is editable when both ATTACK and SPECIALS are MODERN), and RUN has HOLD / AUTO. The user accepted the 16-KiB/CI4 v02 full-product composition with real progression; Earth boss detection for TURN remains Pending. See Native HUD and UI and Player actions and special moves. |
| Native Inventory HUD / box indicator | Production beta / Runtime-confirmed bounded | BOX n OF 4, the integrated Inventory HUD, in-Inventory Left/Right box navigation, and the native four-box Inventory legend are Runtime-confirmed on bounded routes. The accepted legend is mode-correct: Items shows box switching/use/combine/powers; Power Ups shows L-R POWER / R ITEMS. The separately investigated Inventory/loading hang remains unresolved. See Native HUD and UI |
| Boot branding and seeded phrase | Production | Redesigned legal-screen presentation is Runtime-confirmed; seeded phrase uses a separate deterministic namespace |
| Rebranded title screen | Production beta | The new vector/typeset title was user-confirmed through the production webapp on 2026-09-29. Non-vanilla outfit colors now tint the title palette; rainbow uses a fixed five-hue word/edition treatment. The variants fit the stock file-0x5E slot in static checks, with exact in-game color acceptance Pending. See Presentation and branding |
| Post-legal logo bypass and selector-only save bypass | Production | Runtime-confirmed bounded routes; legal text and later/manual saves remain intact |
| Outfit recoloring | Production | Static modes remain guarded source-TLUT transforms. rainbow uses the Runtime-confirmed 64-phase native palette path. The 2026-09-27 compact-tail proof passed all eight safe stages and removes the duplicated 0x459E0-byte stock fighter copy: production now keeps retail file 0x87 in place and stores only the 0x2000 rainbow bank. See Palette and recoloring |
| Browser/CLI shared patch core | Production beta | Both surfaces use the same patch core. Build-time Run Settings now expose difficulty (default Very Hard), lives (default 5, max 10), continues (default 3, max 5), and Persistent HP (default on), alongside the Runtime-confirmed native GAME SETTINGS control suite. The web requires only the MKMSZ N64 target and presents MKT Rev. 2 N64 as an optional donor for supported donor-backed features. |
Proof-only systems
These results are important feasibility evidence but are not normal browser/CLI product features unless stated above.
| Workstream | Current conclusion | Remaining gate / owner |
|---|---|---|
| Shuffled power / ability order | Runtime-confirmed bounded nine-slot mechanism; shared product integration implemented/CI pending. v02 confirmed gameplay/UI decoupling; v04 then exercised the generalized nine-gate remap with Super Slide before Slide and Ice Shatter after Air Ice Blast. The standalone v04 proof also exposed a proof-bootstrap-only 85-XP-on-stage-load bug that is not present in the production XP lifecycle. | Shared patch core now has an optional deterministic constrained power-order patch and the web UI defaults Shuffle Power Progression ON while retaining an OFF choice. Single constraint: Ice Shatter after at least one of Ice Blast / Directional Ice / Air Ice Blast; Slide and Super Slide may appear in either order. Final state awaits repository CI and then merge/deployment. See XP and progression. |
| Cross-stage ordinary-item materialization | Runtime-confirmed in bounded proofs. Prison five-import and external-to-embedded conversion remain confirmed. TEST LAB now also confirms the destination-native Fire-file architecture with v26 Fire→Prison-key compatibility, v27 ten distinct simultaneous items, v31 stable 15-live non-Earth entry, and v33 recognizable coherent static-poster rendering for that 15-item set. The v22-v25 standalone-gallery path and v28-v30 corruption line are Rejected. | The planner is connected to the shared pipeline; PR #137 supplies accepted global assignments. Earth-key cross-stage materialization is Runtime-confirmed in TEST LAB v38. Checkpoint-free key behavior is Runtime-confirmed for Prison L1 and the native Fire key family on bounded routes, but Wind v01 rejected the attempted generalization. Wind's selector is live stage/checkpoint state; suppressing its key-created selector steps caused a death/world-state mismatch and later live scene failure. Water/Earth analogous runtime proofs are paused. The checkpoint/materializer gate is now to separate logical reward semantics from destination location/stage-state semantics (or independently prove a coherent full-stage-restart-on-death policy), not to NOP remaining key selector writes mechanically. Bridge's stock pickup callback and Fortress's stock crystal award path remain Static-confirmed checkpoint-free. Fortress five-import stress validation and Kia -> Potion boss-defeat reward substitution are Runtime-confirmed on bounded routes. Materializer production-composition v02 is also Runtime-confirmed on a representative Fire -> Wind -> Fortress route using the established shared file-0x1A bootstrap transport, immediate foreign-key re-mask, and destination-native resource plans. v01's extra file-0x19 stage-init load is Rejected. PR #126 implements the guarded shared-pipeline materializer path and generalized Fortress boss-gate emission and is CI-green. Newer main owns 0x801B08E0..0x801B096F for the Temple special check, so the materializer helper is relocated to 0x801B0970..0x801B0A5F. The bounded v03 co-resident build is now Runtime-confirmed: the user reported all requested composition checks working as expected. That bounded composition established the materializer baseline used by PR #137. Fire -> Wind Circle v02 Runtime-confirms the full tested foreign-key mask round trip including immediate post-pickup Glass masking, native-stage reveal/use, and re-masking outside Wind. The Kia/Jataaka/Sareena crystal records remain boss-defeat reward locations whose assigned reward may change globally. See Global item materialization and solvability and TEST LAB proof history. |
| Cross-stage enemy import / planner | Production web/CLI option merged; compact PRIS fallback implemented on follow-up branch, CI Pending. The deterministic 104-record planner preserves five gated/special encounters, models Prison paging/set-piece auxiliaries, and the browser now defaults the shared product switch ON while retaining an OFF choice. The materializer now also promotes the Runtime-confirmed compact Water PRIS15, PRIS16, and mixed PRIS14+16 profiles, regenerating their 16-color Type-5 resources from the clean ROM at build time. | Representative merged seed ENEMYPLAN05 remains Runtime-confirmed. The compact builder reproduces the accepted GRUNT3 0x8E/0x90 layouts and applies the accepted hue/material-corrected 16-color mapping; unresolved MONK1/MONK3/MONK4 and GRUNT1/GRUNT2 foreign semantics remain fail-closed. CI and one opportunistic product runtime pass are the remaining promotion checks, not an exhaustive matrix. See Enemy randomization. |
| Modern control suite — ATTACK / SPECIALS / JUMP / RUN | Integrated into the shared patch core. | v02 is Runtime-confirmed on the tested full-product route. Slide calls stock recognizer 0x8003C9F8 (tier ≥2); Super Slide calls 0x8003CAF4 (tier ≥7 and resource ≥0x60). The proof-only 20,000-XP write is absent. Accepted v02 SHA-256 b12ed90201ab754aac542b7b89458735b5a756f480fffca89c129c0ed3173147 remains the Runtime-confirmed controls/CI4 baseline. Current builds intentionally differ only in the approved Toasty four-word TLUT purple polish; controls semantics and allocation are unchanged. See Player actions and special moves. |
| MKT fighter / Sektor takeover | Runtime-confirmed proof line through v89; v85 remains built but untested and statically rejected for the ordinary straight branch. v62 remains the stable combo baseline; v75 remains the stable missile-flight baseline. v87 Runtime-confirms the donor-faithful ROCKETD1 + ROCKET_P asset/palette pair for the flying missile. v88 keeps that correct rocket but still shows one frame of stale Sektor-like texture before it, disproving the earlier interpretation that v84 had established synchronous first-frame texture readiness. Static render tracing now separates descriptor binding from texture-slot publication: 0x8001BDA0/0x800304C0 mark +0xFA dirty, 0x800185B8 later queues the slot upload through 0x8001D6EC, and the upload is drained separately. v89 Runtime-confirms the missing pre-publication texture-slot seam: synchronous native 0x8001BF70 preparation before stock actor-list insertion removes the one-frame corrupted Sektor while preserving the correct v87 rocket and v75 flight. This validates first-visible composition as descriptor/frame state + correct dynamic ROCKET_P + texture-slot readiness before publication. The v89 storage/allocation recipe is still a bounded one-shot proof, not production-ready. Helpers, strike/effects/audio, balanced palette/texture release and final integration remain pending. |
Proof-only, including bootstrap allocation overlap. Preserve the generic donor→MKMSZ adapter; see Sektor takeover proof history, MKT adapter primitives, and Player actions and special moves. |
| Toasty audio | Runtime-confirmed production composition. v46 confirms the dedicated MKT Toasty voice route with ordinary pickup audio restored to stock; v47 confirms that same route in the full current production composition. | Production keeps stock pickup 524 -> 681 -> 524 -> 133 untouched and uses dedicated Toasty event 52 -> 68 -> 608 -> 533. The product probability is 80/1000 (8%). See Toasty audio research. |
| Seeded Temple intro audio | Audio-1 and Audio-2 isolated routes Runtime-confirmed. | The former global carrier 0x20A -> 0x1A6 -> 579 -> 422 -> 412 is Rejected after runtime evidence showed it also altered unrelated Bridge/Prison robot/miniboss audio. Production candidate now preserves descriptors 0x41/0x42/0x43, replaces only Temple events 123/124/125, and uses isolated host 486 -> 329 -> 319. v03 confirmed Friendship in Temple with Bridge/Prison audio vanilla; the follow-up Audio-2 proof confirmed TEMPLE-0003 -> shao-laugh through event 125 with the opening Scorpion lines left stock. See Audio system. |
| Toasty visual | Runtime-confirmed production composition. v38/v40/v42/v44/v46/v47 remain the accepted visual/trigger/audio/full-composition lineage. Compact-source proof v01 was reported working perfectly and is now the production storage layout. | Production keeps the reconciled 08/0E/12/13/14/15/17 family and 80/1000 (8%) while storing the exact padded CI4 source in compressed form. Module size is now 0x1132 = 4,402 B at 0x801B1000..0x801B2131, reclaiming 0xCBE = 3,262 B inside the existing 16-KiB reservation. See Toasty visual research and Toasty audio research. |
| Reverse Elbow / donor move adapter research | Proof/research only. Earlier host-action work established useful MKMSZ action primitives; the accepted direction is genuine donor-to-MKMSZ semantic translation rather than behavioral approximation. | Not a 1.0 blocker. Current donor translation work belongs to MKT to MKMSZ compatibility layer and Player actions and special moves |
| Pickup placement probe + Ice Blast -> Pickup cancel | Runtime-confirmed bounded post-1.0 proof. The coordinate probe exposes exact live fixed8 player X/Y/Z for hand-authored pickup locations; accepted visual placement convention is player Y + 28 world units. The separate Wind proof lets normal ground Ice Blast cancel into the stock pickup transition after native pickup gates pass. | 4Fun / Post-1.0; not production and not a 1.0 blocker. Reproducers and exact proof seams are in Pickup placement and Ice-Blast cancel proofs. |
Current 1.0 blockers
1.0 requirements and roadmap is the canonical owner of the complete requirement text, acceptance criteria, ambiguities, and final release gate. The current blocker summary is:
| Blocker | Current state |
|---|---|
| Production-safe global cross-stage item materialization | Destination ownership closed; wrapper composition Runtime-confirmed bounded on PR #129. PR #129 composes logical awards with researched Wind/Water/Earth/Fire/Prison destination actions, generic Bridge/Fortress activation gates, portable Strength semantics, immediate foreign-key re-mask, and Prison credential reconstruction after the stock reset. Current-main lifecycle v06 remains unchanged. The former high-tail materializer placement overlapped fixed Toasty audio and is rejected; the corrected helper occupies 0x801B2310..0x801B28EF, immediately after progression flash and before Toasty audio. Wrapper semantics remain unchanged; corrected composition is Implementation/CI-confirmed pending representative runtime. First-item-swap v04 was manually validated successfully, directly confirming the exercised key-without-checkpoint / checkpoint-without-key / non-downgrade split. PR #137 now connects the global generator/solver to this materializer; promotion is approved. |
| Deterministic global shuffle and retry model | Implemented in PR #137; promotion approved. All 85 checks participate, Map 0x0D is excluded, and nine Herbs become explicit Power Upgrade rewards before shuffling when pickup mode is ON. Attempts are deterministic and capped at 10,000. The approved 32 MiB output owns eight 1 MiB resource slots at 0x01000000..0x017FFFFF; clean input remains 16 MiB. |
| Whole-run solvability validation | Implementation/CI-confirmed in PR #137. All 85 available requires every check reachable; Game beatable requires all 21 credentials plus the required shuffled Power Upgrades when ON. OFF retains vanilla XP and the independent Required powers Fortress gate; additional earned-XP accounting is not a blocker. Broader full-run runtime validation remains Pending. |
| Native randomizer HUD | Production beta / bounded Runtime-confirmed architecture. v21 confirms the completed TEST LAB presentation and v23 confirms nonblocking Power feedback; shared browser/CLI integration is guarded/CI-targeted. Final representative full-seed production-composition runtime validation remains Pending. |
| Run lifecycle invariants | Runtime-confirmed baseline and configurable integration. v06 confirms the Very Hard / 9-lives / 5-continues / HP-ON reference behavior. Browser/CLI now expose difficulty, 1..10 starting lives, 0..5 continues, and HP persistence; Game Over/new run reuses those configured defaults. Other combinations preserve the same guarded control flow and are Implementation/CI-confirmed pending runtime sampling. |
| Final production-composition runtime gate | Pending. Run a representative full global seed after the above are integrated, including all nine progression tiers and the major lifecycle boundaries |
Current priority order
Current user direction is to promote the completed native Inventory HUD / asynchronous Power feedback, then continue the representative full-seed release work. The FX-crunch investigation is deferred.
- Merge and verify the native Inventory HUD / asynchronous Power-feedback production integration.
- Run the representative full-seed 1.0 gate across global items, solver, HUD, progression, and lifecycle.
- Close only defects exposed by that final composed route; do not reopen already accepted proof lines without new evidence.
Current evidence notes
- Temple scripted check (2026-10-01): v01 Runtime-confirmed that changing only the scripted Map award
0x0D -> 0x04preserves the elevator/platform progression. v02 then closed presentation and lifecycle: the location rendered as Herbs, awarded Herbs, moved the elevator, exposed/retained the exit-rope route, stayed collected after title -> Temple re-entry through dedicated MKSV header flag bit0x0001, and completed Temple -> Wind normally. The promoted patch keeps this scripted check outside the 84 ordinary records and uses the file-0x1Aexpansion gap for its two helpers. The later global generator may change the assigned reward, but that is global-materializer work rather than unresolved Temple architecture. - XP: the first V2 productionization attempt is Rejected / failed because stage initialization called the native tier evaluator too early. Diagnostic B isolated that timing error and is the current production behavior: restore persistent XP at stage entry, evaluate tiers only when a progression pickup is collected. Detailed Diagnostics A/B remain in XP and progression.
- Title: the approved typeset title was confirmed visually in the production webapp on 2026-09-29. The non-vanilla outfit/title color match and fixed rainbow title are data-only and preserve the 16-color CI8/stock-slot contract; color variants are static-checked, runtime Pending. The old executable wrapper that overlapped pickup-persistence ownership remains Rejected / failed; prior proof hashes and integration history remain in Presentation and branding.
- Sektor: v62 remains the tested combo baseline; v75 the last stable tested straight-missile flight. v76–v79 remain negative/failed controls; v85 is statically rejected and untested. v87 Runtime-confirms exact retail rocket pixels/colors. v88 preserves the good rocket but still exposes a one-frame corrupted Sektor-like texture, showing that early descriptor/cursor binding alone does not synchronously replace the finalized projectile texture slot before publication. v84's earlier apparent first-frame suppression is therefore reinterpreted as a selector-zero presentation artifact, not proof of ready rocket texture. v89 Runtime-confirms the synchronous pre-publication slot-load proof: the corrupted first-frame Sektor is gone and the correct rocket remains. Next work is lifecycle/ownership productionization, not further first-frame cosmetic iteration.
- Sektor Run — cadence + variable-length script + compact storage (2026-09-25; Runtime-confirmed): retail MKT Sektor primary slot
0x4A -> +0x1444contains onlyRBRUN1,3,5,7,9,11. v03 Runtime-confirms target rate 3 as the donor-equivalent cadence; v04 Runtime-confirms an exact six-visual-entry live Run followed immediately by loop control. v05 (MKMSZR_sektor-run-compact-six-pose_common-proof_v05.z64, SHA-2563073bd0b77e88a8bb1ea22a5a45ce1fe933512434188e9c578c35adb4f4f5363) physically removes the six obsolete even Run poses and PS1/WIMP Run dependencies while preserving the v04 semantics. Manual runtime validation reports that v05 works perfectly. The compact path is therefore Runtime-confirmed at Sektor scope: 152 frames, 40,577 patterns, file0x87 = 0x4CD68,0x17DCbelow the bounded v49 comparison footprint. - Sektor/common-state reachability + P28/P29 owner seam (2026-09-25): inherited animation-table names are no longer treated as importer requirements. The live unresolved host states are
P28,P29,P2A,S03, andS05; their host semantics are identified. P28/P29 are HOST-ONLY attachment/turn presentation using token0x10and a host-owned companion actor. Disposable owner-probe v06 (MKMSZR_sektor-p28-p29-owner-probe_common-proof_v06.z64, SHA-256b4b098a411ad5712b3574cc96f8667a7684d2927e9c4df900af52792e9ede644) Runtime-confirms on the tested rope route that genuine Sektor owner art can coexist with the stock narrow companion layer through movement, attached Turn, detach, and reattach without duplication, lingering imagery, corruption, or freeze. Final donor fallback pose policy remains Pending; interruption/stage teardown is not exhaustively runtime-confirmed.P2Ais a death fallback candidate;S03/S05remain HOST-ONLY fallback-policy work.P0Dis not an MKMSZ Victory requirement, and Ice-family states remain a separate special-extension track. - Generic MKT fighter palette direction (2026-09-25; design-accepted): normalize imported N64 MKT fighter art to a 16-color palette as the default generic importer direction. The Sektor 16-color proof was visually accepted by the user; do not spend effort restoring 32 colors solely for fidelity unless new technical evidence shows the 16-color route creates a real compatibility/quality problem. This policy does not change the requirement to emit MKMSZ-native Type-5 assets or to preserve correct palette-binding/lifetime semantics.
- Toasty: v47 remains the full-composition presentation/audio baseline, and compact-source proof v01 is now Runtime-confirmed and promoted to production. The same decoded CI4 slices are stored with deterministic PackBits-style compression and expanded by a
0x7Cnative decoder during init. Production now occupies0x801B1000..0x801B2131(0x1132bytes), leaving0x12EEbytes before the reserved-pool boundary. The selected product probability remains 80/1000 (8%); the validation proof alone used 100% probability to accelerate testing. Browser donor-asset extraction remains wired through the optional MKT Rev. 2 input. Detailed evidence is canonical in Toasty visual research and Toasty audio research. - Modern controls (2026-09-26): v09 frontend and v10 input/control behavior are Runtime-confirmed, but the first real-progression product gate exposed one proof-masked bug: MODERN Slide and Super Slide bypassed stock XP eligibility because the earlier SPECIALS helper called their callbacks directly while also forcing XP=20,000. Static correction routes those two chords through stock recognizers
0x8003C9F8/0x8003CAF4. The corrected 16-KiB/CI4 full-product v02 is Runtime-confirmed and reproduced byte for byte by the shared builder; the first CI4 candidate is rejected. The proof-only XP force remains excluded. - Cross-stage items: a logical selector is not proof of free physical storage. Production integration must preserve explicit resource ownership, bounded allocation, deduplication, and destination-safe award semantics.
- Key checkpoint suppression: Prison L1 v08 remains Runtime-confirmed with its acquired-bit/door credential preserved while pickup-created presentation and selector-7 respawn relocation are suppressed. Fire v01 (2026-09-29) now Runtime-confirms the same high-level two-seam policy for the native Fire key family: NOP only ROM
0xE5C28(direct0x80062D60presentation request) and0xE5C50(0x802C18F8=s0+2pickup-created respawn selector), while keeping the stock award/progression path. Runtime showed no key-created checkpoint event, natural stage-start respawn after death, successful Fire God completion, and transition onward. A one-off crunchy-audio observation did not reproduce in v02/v03 controls or a later v01 retest and is not currently attributed to the patch. Wind/Water/Earth runtime closure remains Pending; Bridge and stock Fortress crystal checkpoint behavior are Static-confirmed closed. Fortress still separately needs arbitrary boss-reward materialization. - Fortress boss rewards (2026-09-27): Runtime/user-observed semantics establish the Kia, Jataaka, and Sareena crystal records as rewards spawned by defeating those three bosses. For the global randomizer, the boss defeat is the reward-location trigger and the crystal is only the stock reward: each boss location must be able to spawn whichever logical item the global layout assigns, while the three crystal items remain globally movable rewards.
- Current test-build shuffle: the full-production checkpoint proof still used
STAGE-LOCAL:V1; finding all three Fire keys inside Fire was expected and is not evidence of a global shuffle. That proof predates PR #137, which integrates the 85-check global generator/materializer/solver. The Wind ownership trace additionally shows that this interim mode moves mixed callback/parameter state with same-stage rewards; that limitation is now tracked explicitly.
Explicit exclusions and non-blockers
-
Enemy randomization and Reverse Elbow / foreign-move completion are not 1.0 blockers.
-
Bosses and scripted encounters are not ordinary-enemy entries.
-
The Temple Map is not one of the 84 ordinary pickup records. 1.0 policy is now explicit: logical item
0x0Dis excluded from the randomizer pool, while the scripted Temple location remains a special check whose elevator/progression side effect is location-owned. PR #137 integrates arbitrary assigned rewards into the established special-check persistence/elevator seam. -
Zero/unused-looking resource selectors are not automatically free physical storage.
-
PS1 addresses and platform behavior do not transfer to N64 without demonstrated compatibility.
-
Disposable proof ROM patches, proof caves, and archive handoffs are not silently part of the production pipeline.
-
Runtime confirmation is always limited to the documented route; CI/static success does not imply exhaustive gameplay validation.
-
First-item-swap v04 validation correction (2026-10-02): v03's coordinate clustering is superseded. v04 returns to v02's exact wrapper/Safe-Stage-Select base and swaps logical/visual identities only: Wind first Herbs <-> Circle, Water first Mana <-> Triangle, Earth first Formula <-> Square, Fire starting Potion <-> Triangle Up, and Prison first Herbs <-> L1 key. Each moved key therefore awards from a non-checkpoint destination, while its original physical key location now holds the mundane first-stage reward but retains the researched destination wrapper. This directly tests key-without-checkpoint, checkpoint-without-key, and late revisit/non-downgrade behavior. Runtime status remains Pending.