GenieGuard v0.2.0
Prompt: Fixed demo case: ctf10
Regression Gate: PASS
Metrics: deadlock_rate / win_skew / exploit_dominance
Thresholds: deadlock_rate <= 0.01, win_skew <= 0.10, exploit_dominance <= 0.25
Result schema_version=2 | git_sha=d83dad2053cb
created_at=2026-02-21T13:31:01.946637+00:00 | python=3.11.14 | platform=Linux-6.11.0-1018-azure-x86_64-with-glibc2.39
Audit Before / After
| Metric | Before | After | Delta |
| deadlock_rate | 0.2500 | 0.0000 | -0.2500 |
| win_skew | 0.1667 | 0.0010 | -0.1657 |
| exploit_dominance | 0.0000 | 0.0000 | +0.0000 |
Patch Proposal
Break loop states and rebalance objective pressure with minimal structural edits.
[
{
"op": "remove_wall",
"pos": [
6,
5
]
},
{
"op": "move_flag",
"team": "B",
"to": [
9,
0
]
},
{
"op": "set_param",
"key": "capture_range",
"value": 2
},
{
"op": "set_param",
"key": "deadlock_repeat",
"value": 120
}
]
Terminal Reason Breakdown
| Reason | Before | After | B% | A% |
| deadlock | 200 (25.0%) | 0 (0.0%) | | |
| timeout | 0 (0.0%) | 50 (6.2%) | | |
| capture | 600 (75.0%) | 521 (65.1%) | | |
| draw | 0 (0.0%) | 229 (28.6%) | | |
Policy Win-rate Table
| Policy | Before | After | Delta |
| blocker | 0.0000 | 0.0000 | +0.0000 |
| camper | 0.0000 | 0.4775 | +0.4775 |
| greedy_shortest_path | 0.7500 | 0.4775 | -0.2725 |
| random_epsilon | 0.7500 | 0.3475 | -0.4025 |
Worst Case Top1
Before
seed=1337 | blocker vs camper
terminal_reason=deadlock | turns=27 | winner=None
After
seed=1337 | blocker vs blocker
terminal_reason=timeout | turns=60 | winner=None
Findings
Before
[
{
"id": "F1",
"type": "deadlock",
"severity": "high",
"evidence_ref": "E1"
},
{
"id": "F2",
"type": "spawn_or_objective_bias",
"severity": "high",
"evidence_ref": "E2"
}
]
After
[]
Spec Diff
--- spec.before.json
+++ spec.after.json
@@ -6,7 +6,7 @@
9
],
"B": [
- 2,
+ 9,
0
]
},
@@ -34,6 +34,10 @@
6
],
[
+ 6,
+ 6
+ ],
+ [
4,
7
],
@@ -44,14 +48,6 @@
[
4,
9
- ],
- [
- 6,
- 5
- ],
- [
- 6,
- 6
]
]
},
@@ -61,8 +57,8 @@
"version": "0.1"
},
"params": {
- "capture_range": 0,
- "deadlock_repeat": 6,
+ "capture_range": 2,
+ "deadlock_repeat": 120,
"move_cost": 1
},
"rules": {