Files
siloqy/prod/clean_arch/sim/run.py
Codex 84e4a50e3f repo hygiene: track the PINK launcher import closure
67 production .py modules that the running PINK service imports but which
were never committed: prod/bingx/ (HTTP client, market/user streams,
journal, config), prod/clean_arch/ adapters/persistence/runtime/dita/dita_v2
production modules and their co-located tests. Rule going forward: every
module imported by launch_dolphin_pink.py / pink_direct.py must appear in
git ls-files. Excludes _backup dirs, __pycache__, and non-code files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:09:32 +02:00

75 lines
3.1 KiB
Python

#!/usr/bin/env python3
"""CLI for large-scale policy simulation and fuzzing."""
from __future__ import annotations
import argparse
import json
from prod.clean_arch.sim.fuzzer import FuzzConfig, fuzz_stack
def main() -> int:
parser = argparse.ArgumentParser(description="Run clean-arch policy simulation/fuzzing.")
parser.add_argument("--transactions", type=int, default=1_000_000)
parser.add_argument("--seed", type=int, default=42)
parser.add_argument("--bad-input-rate", type=float, default=0.01)
parser.add_argument("--network-drop-rate", type=float, default=0.001)
parser.add_argument("--network-duplicate-rate", type=float, default=0.001)
parser.add_argument("--price-sigma", type=float, default=0.015)
parser.add_argument("--capture-limit", type=int, default=2_000)
parser.add_argument("--runtime-namespace", type=str, default="pink")
parser.add_argument("--anomaly-sensor-key", type=str, default="")
parser.add_argument("--mirror-legacy-sensor-key", action="store_true")
parser.add_argument("--aggressive", action="store_true", help="Enable aggressive chaos/anomaly injection")
parser.add_argument("--json", action="store_true", help="Emit JSON summary")
args = parser.parse_args()
report = fuzz_stack(
FuzzConfig(
transactions=args.transactions,
seed=args.seed,
bad_input_rate=args.bad_input_rate,
network_drop_rate=args.network_drop_rate,
network_duplicate_rate=args.network_duplicate_rate,
price_sigma=args.price_sigma,
capture_limit=args.capture_limit,
aggressive=args.aggressive,
runtime_namespace=args.runtime_namespace,
anomaly_sensor_key=(args.anomaly_sensor_key.strip() or None),
mirror_legacy_sensor_key=args.mirror_legacy_sensor_key,
)
)
payload = {
"transactions": report.transactions,
"capital_final": report.capital_final,
"equity_final": report.equity_final,
"open_notional_final": report.open_notional_final,
"policy_events": report.policy_events,
"trade_events": report.trade_events,
"account_events": report.account_events,
"logs_emitted": report.logs_emitted,
"network_dropped": report.network_dropped,
"network_duplicated": report.network_duplicated,
"anomaly_counts": report.anomaly_counts,
"anomaly_origin_counts": report.anomaly_origin_counts,
"injected_anomaly_counts": report.injected_anomaly_counts,
"emergent_anomaly_counts": report.emergent_anomaly_counts,
"anomaly_sensor_payload": report.anomaly_sensor_payload,
"anomaly_samples": report.anomaly_samples,
"sample_policy_events": report.sample_policy_events,
}
if args.json:
print(json.dumps(payload, indent=2, sort_keys=True))
else:
print("Clean-arch policy simulation complete")
for k, v in payload.items():
if k != "sample_policy_events":
print(f"{k}: {v}")
return 0
if __name__ == "__main__":
raise SystemExit(main())