diff --git a/HexwireApp.swift b/HexwireApp.swift index 0332130..9da3196 100644 --- a/HexwireApp.swift +++ b/HexwireApp.swift @@ -2640,7 +2640,9 @@ struct CombatView: View { case "Mission004": return "Dead Man's Switch" case "Mission005": return "Mekton Blues" case "Mission006": return "Ghost Signal" - default: return "Unknown Mission" + // Replay modes (gauntlet floors, contracts) build their own mission + // objects and carry a real title — use it instead of a stub. + default: return RoomManager.shared.currentMission?.title ?? "Unknown Mission" } } diff --git a/docs/audit/MissionCertificationMatrix.md b/docs/audit/MissionCertificationMatrix.md index ae4c781..b437e7e 100644 --- a/docs/audit/MissionCertificationMatrix.md +++ b/docs/audit/MissionCertificationMatrix.md @@ -48,7 +48,7 @@ What each logic column certifies (per mission, all six): - **Save/resume** — completion decoded back from the raw UserDefaults blob (what a relaunch loads), plus WP2's corruption/migration coverage. - **Room-graph integrity** — unique room ids, valid connection targets/triggers, - known enemy/boss types only (17 spawn + 3 boss types, all mapped to factories), + known enemy/boss types only (22 spawn + 3 boss types, all mapped to factories), spawns in-bounds and never in walls, an extraction room exists. ## Runtime launch smoke receipts