mirror of
https://github.com/BigBodyCobain/Shadowbroker.git
synced 2026-06-28 16:59:55 +02:00
cfbeabda1e
* feat(telegram): auto-translate OSINT channel posts to English Cherry-picked from @Bobpick PR #391 (telegram-only slice): server-side translation during fetch, SHOW ORIGINAL toggle in TelegramOsintPopup, and on-demand /api/telegram-feed?lang=. Co-authored-by: Robert Pickett <bobpickettsr@yahoo.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(gt): experimental Derived OSINT analytics with lean-node safeguards Cherry-picked from @Bobpick PR #391 (GT + OpenClaw slice): Bayesian strategic-risk engine, map overlay, OpenClaw commands, and telegram_rhetoric watchdog. Off by default (GT_ANALYTICS_ENABLED=false, gt_risk layer false). 1 vCPU nodes get cgroup detection, UI warning on layer toggle, and lean profile that skips scheduled ingest/Louvain unless GT_ANALYTICS_ACK_LOW_CPU=true. Backtest HUD removed from dashboard (OpenClaw/API regression only). Co-authored-by: Robert Pickett <bobpickettsr@yahoo.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Robert Pickett <bobpickettsr@yahoo.com> Co-authored-by: Cursor <cursoragent@cursor.com>
170 lines
5.1 KiB
Python
170 lines
5.1 KiB
Python
"""Rolling weekly operational validation for Strategic Risk Analytics."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from datetime import date
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from analytics.backtest import DEFAULT_BACKTEST_ALERT_THRESHOLD
|
|
from analytics.gt_early_warning import GT_EarlyWarning
|
|
from analytics.integration import reset_gt_engine
|
|
from analytics.rolling_backtest import (
|
|
freeze_weekly_snapshot,
|
|
iso_week_id,
|
|
label_regions,
|
|
rolling_report,
|
|
score_week,
|
|
)
|
|
from analytics.settings import GTAnalyticsSettings
|
|
from analytics.weekly_store import RegionSnapshot, WeeklySnapshot, load_week
|
|
|
|
|
|
@pytest.fixture()
|
|
def rolling_store(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> Path:
|
|
store = tmp_path / "gt_rolling"
|
|
monkeypatch.setenv("GT_ROLLING_STORE_DIR", str(store))
|
|
return store
|
|
|
|
|
|
def _seed_engine() -> GT_EarlyWarning:
|
|
engine = GT_EarlyWarning(GTAnalyticsSettings(enabled=True, base_prior=0.15))
|
|
engine.process_feed_item(
|
|
{
|
|
"text": "Troop movement and military mobilization near border",
|
|
"region": "ukraine",
|
|
"source": "test",
|
|
"source_type": "manual",
|
|
}
|
|
)
|
|
engine.process_feed_item(
|
|
{
|
|
"text": "Routine diplomatic statement about trade",
|
|
"region": "canada",
|
|
"source": "test",
|
|
"source_type": "manual",
|
|
}
|
|
)
|
|
return engine
|
|
|
|
|
|
def test_iso_week_id_format() -> None:
|
|
assert iso_week_id(date(2026, 6, 16)) == "2026-W25"
|
|
|
|
|
|
def test_freeze_and_score_week(rolling_store: Path) -> None:
|
|
engine = _seed_engine()
|
|
result = freeze_weekly_snapshot(
|
|
week_id="2026-W10",
|
|
engine=engine,
|
|
frozen_by="test",
|
|
)
|
|
assert result["ok"] is True
|
|
assert result["created"] is True
|
|
assert result["region_count"] >= 2
|
|
|
|
snapshot = load_week("2026-W10")
|
|
assert snapshot is not None
|
|
ukraine = next(row for row in snapshot.regions if row.region == "ukraine")
|
|
assert ukraine.alerted is True
|
|
|
|
pending_score = score_week(snapshot)
|
|
assert pending_score.labeled == 0
|
|
assert pending_score.scorable is False
|
|
|
|
label_regions(
|
|
"2026-W10",
|
|
[
|
|
{"region": "ukraine", "label": "true_escalation"},
|
|
{"region": "canada", "label": "benign"},
|
|
],
|
|
)
|
|
labeled = load_week("2026-W10")
|
|
assert labeled is not None
|
|
scored = score_week(labeled)
|
|
assert scored.labeled == 2
|
|
assert scored.true_positives == 1
|
|
assert scored.true_negatives == 1
|
|
assert scored.accuracy == 1.0
|
|
assert scored.confidence_rate >= 0.0
|
|
|
|
|
|
def test_freeze_is_idempotent(rolling_store: Path) -> None:
|
|
engine = _seed_engine()
|
|
first = freeze_weekly_snapshot(week_id="2026-W11", engine=engine)
|
|
second = freeze_weekly_snapshot(week_id="2026-W11", engine=engine)
|
|
assert first["created"] is True
|
|
assert second["created"] is False
|
|
|
|
|
|
def test_rolling_report_trend(rolling_store: Path) -> None:
|
|
engine = _seed_engine()
|
|
freeze_weekly_snapshot(week_id="2026-W20", engine=engine)
|
|
freeze_weekly_snapshot(week_id="2026-W21", engine=engine)
|
|
|
|
label_regions("2026-W20", [{"region": "ukraine", "label": "true_escalation"}])
|
|
label_regions(
|
|
"2026-W21",
|
|
[
|
|
{"region": "ukraine", "label": "true_escalation"},
|
|
{"region": "canada", "label": "benign"},
|
|
],
|
|
)
|
|
|
|
report = rolling_report(weeks=4)
|
|
assert report["mode"] == "rolling_operational"
|
|
assert report["alert_threshold"] == DEFAULT_BACKTEST_ALERT_THRESHOLD
|
|
assert len(report["trend"]) == 2
|
|
assert report["latest"] is not None
|
|
|
|
|
|
def test_openclaw_rolling_commands(
|
|
rolling_store: Path,
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
) -> None:
|
|
from analytics.integration import get_gt_engine
|
|
from services.openclaw_channel import _dispatch_command
|
|
|
|
monkeypatch.setenv("GT_ANALYTICS_ENABLED", "true")
|
|
reset_gt_engine()
|
|
engine = get_gt_engine()
|
|
assert engine is not None
|
|
engine.process_feed_item(
|
|
{
|
|
"text": "Troop movement and military mobilization near border",
|
|
"region": "ukraine",
|
|
"source": "test",
|
|
"source_type": "manual",
|
|
}
|
|
)
|
|
|
|
freeze = _dispatch_command("gt_rolling_freeze", {"week_id": "2026-W30", "compact": True})
|
|
assert freeze["ok"] is True
|
|
assert freeze["data"]["enabled"] is True
|
|
|
|
label = _dispatch_command(
|
|
"gt_rolling_label",
|
|
{
|
|
"week_id": "2026-W30",
|
|
"region": "ukraine",
|
|
"label": "false_alarm",
|
|
},
|
|
)
|
|
assert label["ok"] is True
|
|
assert label["data"]["updated"] == 1
|
|
|
|
trend = _dispatch_command("gt_rolling_backtest", {"weeks": 4, "compact": True})
|
|
assert trend["ok"] is True
|
|
assert trend["data"]["mode"] == "rolling_operational"
|
|
|
|
|
|
def test_route_query_rolling_intent() -> None:
|
|
from services.openclaw_routing import route_query
|
|
|
|
plan = route_query("Show GT rolling operational backtest week over week")
|
|
assert plan["recommended"]["cmd"] == "gt_rolling_backtest"
|
|
|
|
freeze_plan = route_query("Freeze weekly GT snapshot for operational validation")
|
|
assert freeze_plan["recommended"]["cmd"] == "gt_rolling_freeze" |