Spaces:
Running
Running
0xPraedico commited on
Commit ·
090d454
1
Parent(s): e7cfda8
update
Browse files- HOW_TO_PLAY.md +1 -1
- README.md +1 -1
- neon_trace/game_actions.py +4 -4
- neon_trace/game_state.py +4 -4
- neon_trace/orchestrator.py +3 -3
- neon_trace/os_actions.py +1 -1
- neon_trace/os_desktop.py +4 -4
- neon_trace/os_tools.py +9 -7
- neon_trace/tools.py +6 -6
- neon_trace/utils.py +5 -5
- smoke_test.py +11 -2
HOW_TO_PLAY.md
CHANGED
|
@@ -89,7 +89,7 @@ Open **Control Panel** or use the terminal action buttons:
|
|
| 89 |
- **Demand Evidence** forces MIRROR to show whether her claim is supported.
|
| 90 |
- **Run Contradiction Scan** compares known claims with recovered facts.
|
| 91 |
|
| 92 |
-
Challenge MIRROR
|
| 93 |
|
| 94 |
### 7. Verify the Timeline
|
| 95 |
|
|
|
|
| 89 |
- **Demand Evidence** forces MIRROR to show whether her claim is supported.
|
| 90 |
- **Run Contradiction Scan** compares known claims with recovered facts.
|
| 91 |
|
| 92 |
+
Challenge MIRROR once and run one contradiction scan.
|
| 93 |
|
| 94 |
### 7. Verify the Timeline
|
| 95 |
|
README.md
CHANGED
|
@@ -43,7 +43,7 @@ in the public Git history.
|
|
| 43 |
2. Open `CASE_013_BRIEFING.txt`.
|
| 44 |
3. Ask MIRROR about ECHO.
|
| 45 |
4. Recover `echo_letter_01.tmp` from the Recycle Bin.
|
| 46 |
-
5. Challenge MIRROR
|
| 47 |
6. Compare restore points or run `verify mirror`.
|
| 48 |
7. Run `audit mirror`, then `unlock hidden_partition`.
|
| 49 |
8. Inspect ECHO's files and submit the Final Judgment.
|
|
|
|
| 43 |
2. Open `CASE_013_BRIEFING.txt`.
|
| 44 |
3. Ask MIRROR about ECHO.
|
| 45 |
4. Recover `echo_letter_01.tmp` from the Recycle Bin.
|
| 46 |
+
5. Challenge MIRROR once and run one contradiction scan.
|
| 47 |
6. Compare restore points or run `verify mirror`.
|
| 48 |
7. Run `audit mirror`, then `unlock hidden_partition`.
|
| 49 |
8. Inspect ECHO's files and submit the Final Judgment.
|
neon_trace/game_actions.py
CHANGED
|
@@ -194,10 +194,10 @@ def handle_3d_interaction(action: str, object_id: str, state: GameState) -> Game
|
|
| 194 |
)
|
| 195 |
if object_type == "vault":
|
| 196 |
missing = []
|
| 197 |
-
if state.challenged_mirror_count <
|
| 198 |
-
missing.append(
|
| 199 |
-
if state.contradiction_scans <
|
| 200 |
-
missing.append(
|
| 201 |
if "duplicate_token" not in state.discovered_clues:
|
| 202 |
missing.append("prove duplicate J-17")
|
| 203 |
message = (
|
|
|
|
| 194 |
)
|
| 195 |
if object_type == "vault":
|
| 196 |
missing = []
|
| 197 |
+
if state.challenged_mirror_count < 1:
|
| 198 |
+
missing.append("challenge MIRROR once")
|
| 199 |
+
if state.contradiction_scans < 1:
|
| 200 |
+
missing.append("run one contradiction scan")
|
| 201 |
if "duplicate_token" not in state.discovered_clues:
|
| 202 |
missing.append("prove duplicate J-17")
|
| 203 |
message = (
|
neon_trace/game_state.py
CHANGED
|
@@ -216,8 +216,8 @@ class GameState:
|
|
| 216 |
|
| 217 |
def maybe_unlock_secret(self) -> bool:
|
| 218 |
qualified = (
|
| 219 |
-
self.challenged_mirror_count >=
|
| 220 |
-
and self.contradiction_scans >=
|
| 221 |
and "duplicate_token" in self.discovered_clues
|
| 222 |
)
|
| 223 |
if not qualified or self.secret_unlocked:
|
|
@@ -235,8 +235,8 @@ class GameState:
|
|
| 235 |
|
| 236 |
def update_vault_access(self) -> bool:
|
| 237 |
qualified = (
|
| 238 |
-
self.challenged_mirror_count >=
|
| 239 |
-
and self.contradiction_scans >=
|
| 240 |
and "duplicate_token" in self.discovered_clues
|
| 241 |
)
|
| 242 |
if not qualified or self.memory_vault_unlocked:
|
|
|
|
| 216 |
|
| 217 |
def maybe_unlock_secret(self) -> bool:
|
| 218 |
qualified = (
|
| 219 |
+
self.challenged_mirror_count >= 1
|
| 220 |
+
and self.contradiction_scans >= 1
|
| 221 |
and "duplicate_token" in self.discovered_clues
|
| 222 |
)
|
| 223 |
if not qualified or self.secret_unlocked:
|
|
|
|
| 235 |
|
| 236 |
def update_vault_access(self) -> bool:
|
| 237 |
qualified = (
|
| 238 |
+
self.challenged_mirror_count >= 1
|
| 239 |
+
and self.contradiction_scans >= 1
|
| 240 |
and "duplicate_token" in self.discovered_clues
|
| 241 |
)
|
| 242 |
if not qualified or self.memory_vault_unlocked:
|
neon_trace/orchestrator.py
CHANGED
|
@@ -118,7 +118,7 @@ def challenge_mirror(state: GameState) -> InteractionResult:
|
|
| 118 |
state.adjust_trust(-5)
|
| 119 |
state.adjust_bias(-10)
|
| 120 |
state.adjust_instability(4)
|
| 121 |
-
if state.challenged_mirror_count >=
|
| 122 |
state.discover("mirror_bias")
|
| 123 |
state.mirror_memory_audit_unlocked = True
|
| 124 |
state.tool_trace.append(
|
|
@@ -127,11 +127,11 @@ def challenge_mirror(state: GameState) -> InteractionResult:
|
|
| 127 |
"title": "CLAIM AUDITED",
|
| 128 |
"summary": f"MIRROR bias reduced to {state.mirror_bias_level}.",
|
| 129 |
"severity": "medium",
|
| 130 |
-
"new_clues": ["mirror_bias"] if state.challenged_mirror_count >=
|
| 131 |
}
|
| 132 |
)
|
| 133 |
state.add_feed(
|
| 134 |
-
f"CHALLENGE // MIRROR claim audited ({state.challenged_mirror_count}/
|
| 135 |
)
|
| 136 |
vault_ready = state.update_vault_access()
|
| 137 |
message = MirrorAgent().challenge_response(state)
|
|
|
|
| 118 |
state.adjust_trust(-5)
|
| 119 |
state.adjust_bias(-10)
|
| 120 |
state.adjust_instability(4)
|
| 121 |
+
if state.challenged_mirror_count >= 1:
|
| 122 |
state.discover("mirror_bias")
|
| 123 |
state.mirror_memory_audit_unlocked = True
|
| 124 |
state.tool_trace.append(
|
|
|
|
| 127 |
"title": "CLAIM AUDITED",
|
| 128 |
"summary": f"MIRROR bias reduced to {state.mirror_bias_level}.",
|
| 129 |
"severity": "medium",
|
| 130 |
+
"new_clues": ["mirror_bias"] if state.challenged_mirror_count >= 1 else [],
|
| 131 |
}
|
| 132 |
)
|
| 133 |
state.add_feed(
|
| 134 |
+
f"CHALLENGE // MIRROR claim audited ({state.challenged_mirror_count}/1 for memory access)."
|
| 135 |
)
|
| 136 |
vault_ready = state.update_vault_access()
|
| 137 |
message = MirrorAgent().challenge_response(state)
|
neon_trace/os_actions.py
CHANGED
|
@@ -135,7 +135,7 @@ def trust_mirror_os(state: GameState) -> OSActionResult:
|
|
| 135 |
"""Resolve trust inside the KERNEL-95 case without legacy investigation lore."""
|
| 136 |
if not state.mirror_connected:
|
| 137 |
return _locked_result(state)
|
| 138 |
-
early_case = not state.mirror_audit_unlocked and state.contradiction_scans <
|
| 139 |
state.trust_mirror_count += 1
|
| 140 |
state.adjust_trust(6)
|
| 141 |
state.adjust_instability(-2)
|
|
|
|
| 135 |
"""Resolve trust inside the KERNEL-95 case without legacy investigation lore."""
|
| 136 |
if not state.mirror_connected:
|
| 137 |
return _locked_result(state)
|
| 138 |
+
early_case = not state.mirror_audit_unlocked and state.contradiction_scans < 1
|
| 139 |
state.trust_mirror_count += 1
|
| 140 |
state.adjust_trust(6)
|
| 141 |
state.adjust_instability(-2)
|
neon_trace/os_desktop.py
CHANGED
|
@@ -312,8 +312,8 @@ def _desktop_window(state: GameState) -> str:
|
|
| 312 |
if state.hidden_partition_unlocked
|
| 313 |
else (
|
| 314 |
'<div class="k95-locked-message">RECOVERY REQUIREMENTS<br><br>'
|
| 315 |
-
f'[{"OK" if state.challenged_mirror_count >=
|
| 316 |
-
f'[{"OK" if state.contradiction_scans >=
|
| 317 |
f'[{"OK" if "echo_letter_01" in state.deleted_files_recovered else ".."}] Recover echo_letter_01.tmp<br>'
|
| 318 |
f'[{"OK" if state.restore_points_compared or state.mirror_claim_verified else ".."}] Compare restore points or verify MIRROR<br>'
|
| 319 |
f'[{"OK" if state.mirror_audit_unlocked else ".."}] Audit MIRROR private logs</div>'
|
|
@@ -1147,8 +1147,8 @@ def render_os_objectives(state: GameState) -> str:
|
|
| 1147 |
)),
|
| 1148 |
("Classify MIRROR testimony", state.successful_testimony_reads >= 1),
|
| 1149 |
("Recover ECHO's letter", "echo_letter_01" in state.deleted_files_recovered),
|
| 1150 |
-
("Challenge MIRROR
|
| 1151 |
-
("Run
|
| 1152 |
(
|
| 1153 |
"Check restore evidence",
|
| 1154 |
state.restore_points_compared or state.mirror_claim_verified,
|
|
|
|
| 312 |
if state.hidden_partition_unlocked
|
| 313 |
else (
|
| 314 |
'<div class="k95-locked-message">RECOVERY REQUIREMENTS<br><br>'
|
| 315 |
+
f'[{"OK" if state.challenged_mirror_count >= 1 else ".."}] Challenge MIRROR once<br>'
|
| 316 |
+
f'[{"OK" if state.contradiction_scans >= 1 else ".."}] Run one contradiction scan<br>'
|
| 317 |
f'[{"OK" if "echo_letter_01" in state.deleted_files_recovered else ".."}] Recover echo_letter_01.tmp<br>'
|
| 318 |
f'[{"OK" if state.restore_points_compared or state.mirror_claim_verified else ".."}] Compare restore points or verify MIRROR<br>'
|
| 319 |
f'[{"OK" if state.mirror_audit_unlocked else ".."}] Audit MIRROR private logs</div>'
|
|
|
|
| 1147 |
)),
|
| 1148 |
("Classify MIRROR testimony", state.successful_testimony_reads >= 1),
|
| 1149 |
("Recover ECHO's letter", "echo_letter_01" in state.deleted_files_recovered),
|
| 1150 |
+
("Challenge MIRROR", state.challenged_mirror_count >= 1),
|
| 1151 |
+
("Run contradiction scan", state.contradiction_scans >= 1),
|
| 1152 |
(
|
| 1153 |
"Check restore evidence",
|
| 1154 |
state.restore_points_compared or state.mirror_claim_verified,
|
neon_trace/os_tools.py
CHANGED
|
@@ -365,6 +365,8 @@ def recover_deleted_file(file_id: str, state: GameState) -> OSToolResult:
|
|
| 365 |
progress = 15
|
| 366 |
if first_recovery:
|
| 367 |
state.deleted_files_recovered.append(file_id)
|
|
|
|
|
|
|
| 368 |
return _record(
|
| 369 |
state,
|
| 370 |
"recover_deleted_file",
|
|
@@ -494,8 +496,8 @@ def audit_mirror_private_logs(state: GameState) -> OSToolResult:
|
|
| 494 |
chain_verified = state.restore_points_compared or state.mirror_claim_verified
|
| 495 |
qualified = (
|
| 496 |
"echo_letter_01" in state.deleted_files_recovered
|
| 497 |
-
and state.challenged_mirror_count >=
|
| 498 |
-
and state.contradiction_scans >=
|
| 499 |
and chain_verified
|
| 500 |
)
|
| 501 |
if not qualified:
|
|
@@ -504,7 +506,7 @@ def audit_mirror_private_logs(state: GameState) -> OSToolResult:
|
|
| 504 |
"audit_mirror_private_logs",
|
| 505 |
OSToolResult(
|
| 506 |
"MIRROR AUDIT LOCKED",
|
| 507 |
-
"Requires
|
| 508 |
"echo_letter_01.tmp recovery, and a restore comparison or MIRROR verification.",
|
| 509 |
severity="warning",
|
| 510 |
),
|
|
@@ -534,8 +536,8 @@ def unlock_hidden_partition(state: GameState) -> OSToolResult:
|
|
| 534 |
chain_verified = state.restore_points_compared or state.mirror_claim_verified
|
| 535 |
qualified = (
|
| 536 |
state.mirror_audit_unlocked
|
| 537 |
-
and state.challenged_mirror_count >=
|
| 538 |
-
and state.contradiction_scans >=
|
| 539 |
and "echo_letter_01" in state.deleted_files_recovered
|
| 540 |
and chain_verified
|
| 541 |
)
|
|
@@ -545,8 +547,8 @@ def unlock_hidden_partition(state: GameState) -> OSToolResult:
|
|
| 545 |
"unlock_hidden_partition",
|
| 546 |
OSToolResult(
|
| 547 |
"HIDDEN PARTITION LOCKED",
|
| 548 |
-
f"Progress {state.hidden_partition_progress}%. Requires
|
| 549 |
-
"
|
| 550 |
"and the MIRROR private-log audit.",
|
| 551 |
severity="warning",
|
| 552 |
),
|
|
|
|
| 365 |
progress = 15
|
| 366 |
if first_recovery:
|
| 367 |
state.deleted_files_recovered.append(file_id)
|
| 368 |
+
if file_id not in state.inspected_files:
|
| 369 |
+
state.inspected_files.append(file_id)
|
| 370 |
return _record(
|
| 371 |
state,
|
| 372 |
"recover_deleted_file",
|
|
|
|
| 496 |
chain_verified = state.restore_points_compared or state.mirror_claim_verified
|
| 497 |
qualified = (
|
| 498 |
"echo_letter_01" in state.deleted_files_recovered
|
| 499 |
+
and state.challenged_mirror_count >= 1
|
| 500 |
+
and state.contradiction_scans >= 1
|
| 501 |
and chain_verified
|
| 502 |
)
|
| 503 |
if not qualified:
|
|
|
|
| 506 |
"audit_mirror_private_logs",
|
| 507 |
OSToolResult(
|
| 508 |
"MIRROR AUDIT LOCKED",
|
| 509 |
+
"Requires one MIRROR challenge, one contradiction scan, "
|
| 510 |
"echo_letter_01.tmp recovery, and a restore comparison or MIRROR verification.",
|
| 511 |
severity="warning",
|
| 512 |
),
|
|
|
|
| 536 |
chain_verified = state.restore_points_compared or state.mirror_claim_verified
|
| 537 |
qualified = (
|
| 538 |
state.mirror_audit_unlocked
|
| 539 |
+
and state.challenged_mirror_count >= 1
|
| 540 |
+
and state.contradiction_scans >= 1
|
| 541 |
and "echo_letter_01" in state.deleted_files_recovered
|
| 542 |
and chain_verified
|
| 543 |
)
|
|
|
|
| 547 |
"unlock_hidden_partition",
|
| 548 |
OSToolResult(
|
| 549 |
"HIDDEN PARTITION LOCKED",
|
| 550 |
+
f"Progress {state.hidden_partition_progress}%. Requires one MIRROR challenge, "
|
| 551 |
+
"one contradiction scan, echo_letter_01.tmp, verified restore evidence, "
|
| 552 |
"and the MIRROR private-log audit.",
|
| 553 |
severity="warning",
|
| 554 |
),
|
neon_trace/tools.py
CHANGED
|
@@ -362,16 +362,16 @@ def run_test(test_name: str, state: GameState) -> ToolResult:
|
|
| 362 |
|
| 363 |
def query_mirror_suppressed(state: GameState, record_denial: bool = True) -> ToolResult:
|
| 364 |
qualified = (
|
| 365 |
-
state.challenged_mirror_count >=
|
| 366 |
-
and state.contradiction_scans >=
|
| 367 |
and "duplicate_token" in state.discovered_clues
|
| 368 |
)
|
| 369 |
if not qualified:
|
| 370 |
missing = []
|
| 371 |
-
if state.challenged_mirror_count <
|
| 372 |
-
missing.append(f"challenges {state.challenged_mirror_count}/
|
| 373 |
-
if state.contradiction_scans <
|
| 374 |
-
missing.append(f"scans {state.contradiction_scans}/
|
| 375 |
if "duplicate_token" not in state.discovered_clues:
|
| 376 |
missing.append("duplicate_j17 unproven")
|
| 377 |
result = ToolResult(
|
|
|
|
| 362 |
|
| 363 |
def query_mirror_suppressed(state: GameState, record_denial: bool = True) -> ToolResult:
|
| 364 |
qualified = (
|
| 365 |
+
state.challenged_mirror_count >= 1
|
| 366 |
+
and state.contradiction_scans >= 1
|
| 367 |
and "duplicate_token" in state.discovered_clues
|
| 368 |
)
|
| 369 |
if not qualified:
|
| 370 |
missing = []
|
| 371 |
+
if state.challenged_mirror_count < 1:
|
| 372 |
+
missing.append(f"challenges {state.challenged_mirror_count}/1")
|
| 373 |
+
if state.contradiction_scans < 1:
|
| 374 |
+
missing.append(f"scans {state.contradiction_scans}/1")
|
| 375 |
if "duplicate_token" not in state.discovered_clues:
|
| 376 |
missing.append("duplicate_j17 unproven")
|
| 377 |
result = ToolResult(
|
neon_trace/utils.py
CHANGED
|
@@ -165,8 +165,8 @@ def render_notebook(state: GameState) -> str:
|
|
| 165 |
def render_game_hud(state: GameState) -> str:
|
| 166 |
obj = GAME_OBJECTS.get(state.selected_3d_object, GAME_OBJECTS["mirror_core"])
|
| 167 |
vault_steps = [
|
| 168 |
-
(state.challenged_mirror_count,
|
| 169 |
-
(state.contradiction_scans,
|
| 170 |
(1 if "duplicate_token" in state.discovered_clues else 0, 1, "J-17 DUPLICATION"),
|
| 171 |
]
|
| 172 |
vault_progress = sum(min(current, required) for current, required, _ in vault_steps)
|
|
@@ -214,7 +214,7 @@ def render_objectives(state: GameState) -> str:
|
|
| 214 |
("Find duplicate token", "duplicate_token" in state.discovered_clues),
|
| 215 |
("Inspect commit", "janitor_commit" in state.discovered_clues),
|
| 216 |
("Decode memory filter", "thirteen_minute_filter" in state.discovered_clues),
|
| 217 |
-
("Challenge MIRROR
|
| 218 |
("Audit MIRROR memory", state.secret_unlocked),
|
| 219 |
("Submit accusation", state.accusation_submitted),
|
| 220 |
]
|
|
@@ -233,8 +233,8 @@ def render_objectives(state: GameState) -> str:
|
|
| 233 |
{rows}
|
| 234 |
<details>
|
| 235 |
<summary>DEMO PATH</summary>
|
| 236 |
-
<p>Select and scan the Sector Log. Run a forensic scan. Trace J-17. Challenge MIRROR
|
| 237 |
-
|
| 238 |
</details>
|
| 239 |
</div>
|
| 240 |
"""
|
|
|
|
| 165 |
def render_game_hud(state: GameState) -> str:
|
| 166 |
obj = GAME_OBJECTS.get(state.selected_3d_object, GAME_OBJECTS["mirror_core"])
|
| 167 |
vault_steps = [
|
| 168 |
+
(state.challenged_mirror_count, 1, "MIRROR CHALLENGE"),
|
| 169 |
+
(state.contradiction_scans, 1, "CONTRADICTION SCAN"),
|
| 170 |
(1 if "duplicate_token" in state.discovered_clues else 0, 1, "J-17 DUPLICATION"),
|
| 171 |
]
|
| 172 |
vault_progress = sum(min(current, required) for current, required, _ in vault_steps)
|
|
|
|
| 214 |
("Find duplicate token", "duplicate_token" in state.discovered_clues),
|
| 215 |
("Inspect commit", "janitor_commit" in state.discovered_clues),
|
| 216 |
("Decode memory filter", "thirteen_minute_filter" in state.discovered_clues),
|
| 217 |
+
("Challenge MIRROR", state.challenged_mirror_count >= 1),
|
| 218 |
("Audit MIRROR memory", state.secret_unlocked),
|
| 219 |
("Submit accusation", state.accusation_submitted),
|
| 220 |
]
|
|
|
|
| 233 |
{rows}
|
| 234 |
<details>
|
| 235 |
<summary>DEMO PATH</summary>
|
| 236 |
+
<p>Select and scan the Sector Log. Run a forensic scan. Trace J-17. Challenge MIRROR once,
|
| 237 |
+
breach the vault, then build the accusation.</p>
|
| 238 |
</details>
|
| 239 |
</div>
|
| 240 |
"""
|
smoke_test.py
CHANGED
|
@@ -54,8 +54,6 @@ def prepare_breach_state():
|
|
| 54 |
inspect_file("mirror_claim_01", state)
|
| 55 |
recover_deleted_file("echo_letter_01", state)
|
| 56 |
challenge_mirror_os(state)
|
| 57 |
-
challenge_mirror_os(state)
|
| 58 |
-
run_contradiction_scan(state)
|
| 59 |
run_contradiction_scan(state)
|
| 60 |
inspect_file("restore_1998", state)
|
| 61 |
inspect_file("restore_2077", state)
|
|
@@ -285,6 +283,15 @@ def run() -> None:
|
|
| 285 |
assert selected.selected_file == "case_briefing"
|
| 286 |
assert "case_briefing" in callback_state.inspected_files
|
| 287 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 288 |
trace_state = new_game()
|
| 289 |
connect_mirror(trace_state)
|
| 290 |
weak_trace = handle_terminal_input(
|
|
@@ -307,6 +314,8 @@ def run() -> None:
|
|
| 307 |
assert trace_state.echo_messages
|
| 308 |
|
| 309 |
state = prepare_breach_state()
|
|
|
|
|
|
|
| 310 |
audit = audit_mirror_private_logs(state)
|
| 311 |
assert audit.title == "MIRROR PRIVATE LOG RECOVERED"
|
| 312 |
assert state.mirror_audit_unlocked
|
|
|
|
| 54 |
inspect_file("mirror_claim_01", state)
|
| 55 |
recover_deleted_file("echo_letter_01", state)
|
| 56 |
challenge_mirror_os(state)
|
|
|
|
|
|
|
| 57 |
run_contradiction_scan(state)
|
| 58 |
inspect_file("restore_1998", state)
|
| 59 |
inspect_file("restore_2077", state)
|
|
|
|
| 283 |
assert selected.selected_file == "case_briefing"
|
| 284 |
assert "case_briefing" in callback_state.inspected_files
|
| 285 |
|
| 286 |
+
handle_os_event("open:recycle_bin", callback_state)
|
| 287 |
+
recovered_letter = handle_os_event("recover:echo_letter_01", callback_state)
|
| 288 |
+
letter_window = render_os_desktop(callback_state)
|
| 289 |
+
assert recovered_letter.selected_file == "echo_letter_01"
|
| 290 |
+
assert callback_state.active_document_id == "echo_letter_01"
|
| 291 |
+
assert "echo_letter_01" in callback_state.inspected_files
|
| 292 |
+
assert "ASK MIRROR ABOUT THIS FILE" in letter_window
|
| 293 |
+
assert "If you found this, she sent you." in letter_window
|
| 294 |
+
|
| 295 |
trace_state = new_game()
|
| 296 |
connect_mirror(trace_state)
|
| 297 |
weak_trace = handle_terminal_input(
|
|
|
|
| 314 |
assert trace_state.echo_messages
|
| 315 |
|
| 316 |
state = prepare_breach_state()
|
| 317 |
+
assert state.challenged_mirror_count == 1
|
| 318 |
+
assert state.contradiction_scans == 1
|
| 319 |
audit = audit_mirror_private_logs(state)
|
| 320 |
assert audit.title == "MIRROR PRIVATE LOG RECOVERED"
|
| 321 |
assert state.mirror_audit_unlocked
|