With the porting list empty, the Unity port got the treatment the browser build never had. Three independent read-only audits went over the whole thing, each with a different question. One hunted checks that cannot fail and code that cannot run. One compared every transcribed number and every JavaScript-semantics trap against the frozen TypeScript. One followed state across every restart path and lifetime across every view.
Thirty-four findings, thirty-two distinct. Each was then verified against the code by hand, and every one was real.
The one that would have ended a run wrong
The last stage is the only stage whose checkpoint (35 seconds) comes after its final boss (28 seconds). Survive into the fight, die, and the restart rewound to 35. The seek recomputed "boss already spawned" from the clock, while the reset had just despawned the boss. It never came back. The campaign then completed on the timer against an empty screen.
The original has no flag to recompute. It gates the spawn on the boss object existing, so the boss returns because it is gone. The port does the same now.
The rest, grouped
| defect | what the player saw |
|---|---|
| Three clocks ticked twice per frame | Explosions half their length, HUD flashes half their time, stage-clear hold 1.25s not 2.5 |
| Stage changes leaked enemy views, deaths leaked bullets | Frozen enemies accumulating across a run |
| Perfect-clear bonus and capsule never collected | The formation system's whole reward, absent |
| Missile and power-ball kills scored nothing | 150 less per enemy for dying to a missile |
| Final score forgot 1,000 per life | Up to 3,000 short on the results screen and the board |
| Debris hazard spawned as the wrong enemy kind | Chunks snapped to the ceiling, then swooped back right |
| Stage Select walked Level 1's power path | Wrong upgrades on every stage but the first |
| Four retyped numbers wrong | Ship speed 132 (the Kestrel is 115), bullets 205 and 260 (authored 280 and 340), orbit 26 (28), capsule x 496 (468) |
| Results screen unreachable, checkpoint flash unshown, star glyphs undrawn | Screens and callouts that existed and never appeared |
| Animation table ran both halves of an if/else | Four Level 2 enemies pulsing where the game holds them still |
Every shot the ship fired had been flying at three quarters of its authored speed. That one changes how the whole game feels, and no check had caught it because the number was typed and not loaded. That is the one discipline this port is built on, broken in the one file where it mattered most.
Two the audit sharpened on contact with the source
The audit said the boss theme never hands back to the stage theme. True, but the source's answer is not a handback. The boss theme is reserved for the finale alone, so that the one time the music changes, it means the end. Playing it at all eight stage bosses spends the cue seven times before it can land. The port had been asking for it at every boss, mini-bosses included, and then keeping it for the rest of the stage.
Eight checks that could not fail
This port's signature failure mode is a check whose passing condition is reachable without the behaviour under test, and the audit was built to find it. The worst:
- The capsule-cursor test never stepped the capsules, so it compared a cursor at zero against a cursor at zero, and passed against the exact rewind its own failure message describes.
- The bandpass test compared two cues' total energy, which their durations and volumes decided before the filter ran. Deleting the filter left it green.
- A mine-ring closure assertion was an algebraic identity.
- A per-kind fire tally was built and never asserted on.
Each is repaired to assert the thing it names. And the repairs found two more: making the animation dispatcher throw on an unknown op immediately caught one falling through outside its window, because the probe had only ever tested inside.
Where the port stands
Three counts moved from the previous post.
| check | result |
|---|---|
| Hazards | 8,300 checks (was 8,299) |
| Behaviours | 1,107 checks, twelve new sections, one per fix (was 1,002) |
| Front end | 40 checks (was 39) |
Core parity (1,192), combat rules parity (372), path parity (25,636), stage runner (3,693 checks, 3,077 spawns), music library (22) and audio coverage (39 of 39 kinds) are unchanged. The mission still plays all 8 stages to completion, and the player build is still KuroKishi.exe at 191 MB, built in 14.4 seconds.
