Skip to content

Commit 901f378

Browse files
author
root
committed
Ship roadmap batch: cutover API, golden CI, killcam, fleet, hardening [no-quota]
Add in-container cutover execute/rollback, GitHub golden-session regression, fusion-based killcam player binding, fleet sync timer with HTTP push, and post-cutover hardening bundle with dashboard controls.
1 parent 4b17ed7 commit 901f378

19 files changed

Lines changed: 980 additions & 124 deletions
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Golden session CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- 'api/**'
8+
- 'scripts/golden-session-ci.py'
9+
- 'tests/fixtures/golden-sessions/**'
10+
- '.github/workflows/golden-session-ci.yml'
11+
pull_request:
12+
paths:
13+
- 'api/**'
14+
- 'scripts/golden-session-ci.py'
15+
- 'tests/fixtures/golden-sessions/**'
16+
workflow_dispatch:
17+
18+
jobs:
19+
golden-sessions:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- uses: actions/checkout@v4
23+
24+
- name: Set up Python
25+
uses: actions/setup-python@v5
26+
with:
27+
python-version: '3.12'
28+
29+
- name: Scaffold policies for replay
30+
run: |
31+
sudo mkdir -p /var/lib/array-firewall /etc/array-firewall
32+
sudo cp config/policies.json.example /var/lib/array-firewall/policies.json
33+
sudo cp config/array-firewall.conf /etc/array-firewall/array-firewall.conf
34+
sudo mkdir -p /var/lib/array-firewall
35+
echo '{"version":1,"devices":{}}' | sudo tee /var/lib/array-firewall/devices.json >/dev/null
36+
37+
- name: Replay golden sessions (observe)
38+
run: python3 scripts/golden-session-ci.py --mode observe
39+
40+
- name: Replay golden sessions (assist)
41+
run: python3 scripts/golden-session-ci.py --mode assist

‎api/lib/ai_ops.py‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,10 +374,10 @@ def bump(ip: str, amount: float, reason: str, **meta: Any) -> None:
374374
except Exception:
375375
pass
376376

377-
if cfg.get("game_state_fusion_enabled", True):
378-
game_state_fusion.fuse(ctx, payload, bump=bump, weights=weights)
379377
if cfg.get("killcam_binding_enabled", True):
380378
killcam_binding.apply_to_context(ctx, payload, bump=bump)
379+
if cfg.get("game_state_fusion_enabled", True):
380+
game_state_fusion.fuse(ctx, payload, bump=bump, weights=weights)
381381

382382
peer_rows_mesh = _extract_peer_rows(payload)
383383
if peer_rows_mesh and cfg.get("mesh_reputation_enabled", True):
@@ -1044,6 +1044,9 @@ def tick(
10441044
"fused_verdict": context.get("fused_verdict"),
10451045
"signals": context.get("signals"),
10461046
"tiny_packet_only": context.get("tiny_packet_only"),
1047+
"killcam_bindings": context.get("killcam_bindings"),
1048+
"mesh_reputation": context.get("mesh_reputation"),
1049+
"pre_burst_forecast": context.get("pre_burst_forecast"),
10471050
},
10481051
"plan": plan,
10491052
"execution": execution,

0 commit comments

Comments
 (0)