Skip to content

Commit d44fcfe

Browse files
Pigbibicodex
andauthored
fix: isolate quant monitor runtime checkout (#121)
Co-authored-by: Codex <noreply@openai.com>
1 parent 2211be2 commit d44fcfe

5 files changed

Lines changed: 32 additions & 18 deletions

File tree

ops/quant-monitor/AGENTS.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ VPS Codex 定时监控(`codex-quant.timer` 每 30 分钟)+ 收盘简报(`c
99
| 变量 | 说明 |
1010
|------|------|
1111
| `QUANT_MONITOR_ROOT` | 本目录 |
12-
| `AIAUDIT_BRIDGE_ROOT` | `~/Projects/AIAuditBridge` |
13-
| `QUANT_PLATFORM_KIT_ROOT` | `~/Projects/QuantPlatformKit` |
12+
| `AIAUDIT_BRIDGE_ROOT` | `/home/ubuntu/quant-monitor-runtime/AIAuditBridge`(专用运行副本) |
13+
| `QUANT_PLATFORM_KIT_ROOT` | `$QUANT_MONITOR_ROOT/data/lifecycle-projects/QuantPlatformKit`(专用镜像) |
1414
| `GLOBAL_TELEGRAM_CHAT_ID` | systemd 注入,勿提交 git |
1515
| `GH_TOKEN` | `gh` 拉仓 + 开 Issue |
1616
| `QSL_GITHUB_REPO` | 非策略类 briefing Issue 的默认仓库;策略证据按 domain 写入对应策略仓 |
@@ -19,8 +19,8 @@ VPS Codex 定时监控(`codex-quant.timer` 每 30 分钟)+ 收盘简报(`c
1919

2020
## 每 30 分钟(health_check.sh)
2121

22-
1. `sync_strategy_repos.sh``git pull` 四策略仓 + QPK
23-
2. `health_cycle.py``build_dashboard` + `run_drift_detection`
22+
1. `sync_strategy_repos.sh`更新四策略仓 + QPK 的只读专用镜像
23+
2. `sync_lifecycle_artifacts.py`,随后 `health_cycle.py``build_dashboard` + `run_drift_detection`
2424
3. lifecycle `overall_score < 60` 或 drift ≥ 0.50 → 生成 monitoring evidence
2525
4. evidence → 对应策略仓的去重、issue-only AI optimization proposal
2626
5. 分数或漂移本身不发 Telegram;数据/工件不可用或 Issue 记录失败才通知人工

ops/quant-monitor/scripts/deploy_to_vps.sh

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ set -euo pipefail
55
VPS_HOST="${VPS_HOST:-qvps}"
66
VPS_PORT="${VPS_PORT:-8822}"
77
AAB_ROOT="${AIAUDIT_BRIDGE_ROOT:-$(cd "$(dirname "$0")/../../.." && pwd)}"
8-
REMOTE_AAB="${REMOTE_AAB:-/home/ubuntu/Projects/AIAuditBridge}"
8+
# Keep the production monitor separate from developers' worktrees. The
9+
# service is allowed to fast-forward this checkout, while developer checkouts
10+
# must remain untouched.
11+
REMOTE_AAB="/home/ubuntu/quant-monitor-runtime/AIAuditBridge"
912
REMOTE_MONITOR="$REMOTE_AAB/ops/quant-monitor"
1013

1114
echo "[deploy] updating AIAuditBridge on ${VPS_HOST}"
@@ -33,7 +36,7 @@ rsync -avz -e "ssh -p ${VPS_PORT}" \
3336
echo "[deploy] bootstrap runtime + systemd"
3437
ssh -p "${VPS_PORT}" "${VPS_HOST}" bash -s <<'REMOTE'
3538
set -euo pipefail
36-
REMOTE_AAB="/home/ubuntu/Projects/AIAuditBridge"
39+
REMOTE_AAB="/home/ubuntu/quant-monitor-runtime/AIAuditBridge"
3740
REMOTE_MONITOR="$REMOTE_AAB/ops/quant-monitor"
3841
OLD_UNIT="/etc/systemd/system/codex-quant.service"
3942
CHAT_ID=""

ops/quant-monitor/systemd/codex-daily-briefing.service.example

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@ Wants=network-online.target
77
Type=oneshot
88
User=ubuntu
99
Group=ubuntu
10-
WorkingDirectory=/home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor
11-
Environment=QUANT_MONITOR_ROOT=/home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor
12-
Environment=AIAUDIT_BRIDGE_ROOT=/home/ubuntu/Projects/AIAuditBridge
13-
Environment=QUANT_PLATFORM_KIT_ROOT=/home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor/data/lifecycle-projects/QuantPlatformKit
10+
WorkingDirectory=/home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor
11+
Environment=QUANT_MONITOR_ROOT=/home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor
12+
Environment=AIAUDIT_BRIDGE_ROOT=/home/ubuntu/quant-monitor-runtime/AIAuditBridge
13+
Environment=QUANT_PLATFORM_KIT_ROOT=/home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor/data/lifecycle-projects/QuantPlatformKit
1414
Environment=QUANT_SENTINEL_TELEGRAM_SECRET_NAME=quant-sentinel-telegram-bot-token
1515
Environment=QUANT_SENTINEL_GCP_PROJECT=firstradequant
1616
Environment=GLOBAL_TELEGRAM_CHAT_ID=
1717
Environment=QSL_GITHUB_REPO=QuantStrategyLab/CnEquityStrategies
1818
RuntimeDirectory=quant-monitor
1919
RuntimeDirectoryMode=0750
20-
ExecStartPre=/bin/bash /home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor/scripts/load_telegram_env.sh /run/quant-monitor/telegram.env
20+
ExecStartPre=/bin/bash /home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor/scripts/load_telegram_env.sh /run/quant-monitor/telegram.env
2121
EnvironmentFile=-/run/quant-monitor/telegram.env
22-
ExecStart=/bin/bash /home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor/scripts/daily_briefing_pipeline.sh
22+
ExecStart=/bin/bash /home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor/scripts/daily_briefing_pipeline.sh
2323

2424
[Install]
2525
WantedBy=multi-user.target

ops/quant-monitor/systemd/codex-quant.service.example

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ Wants=network-online.target
77
Type=oneshot
88
User=ubuntu
99
Group=ubuntu
10-
WorkingDirectory=/home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor
11-
Environment=QUANT_MONITOR_ROOT=/home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor
12-
Environment=AIAUDIT_BRIDGE_ROOT=/home/ubuntu/Projects/AIAuditBridge
13-
Environment=QUANT_PLATFORM_KIT_ROOT=/home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor/data/lifecycle-projects/QuantPlatformKit
10+
WorkingDirectory=/home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor
11+
Environment=QUANT_MONITOR_ROOT=/home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor
12+
Environment=AIAUDIT_BRIDGE_ROOT=/home/ubuntu/quant-monitor-runtime/AIAuditBridge
13+
Environment=QUANT_PLATFORM_KIT_ROOT=/home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor/data/lifecycle-projects/QuantPlatformKit
1414
Environment=QUANT_SENTINEL_TELEGRAM_SECRET_NAME=quant-sentinel-telegram-bot-token
1515
Environment=QUANT_SENTINEL_GCP_PROJECT=firstradequant
1616
# Set on VPS only — do not commit real chat id to git:
1717
Environment=GLOBAL_TELEGRAM_CHAT_ID=
1818
Environment=QSL_GITHUB_REPO=QuantStrategyLab/CnEquityStrategies
1919
RuntimeDirectory=quant-monitor
2020
RuntimeDirectoryMode=0750
21-
ExecStartPre=/bin/bash /home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor/scripts/load_telegram_env.sh /run/quant-monitor/telegram.env
21+
ExecStartPre=/bin/bash /home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor/scripts/load_telegram_env.sh /run/quant-monitor/telegram.env
2222
EnvironmentFile=-/run/quant-monitor/telegram.env
23-
ExecStart=/bin/bash /home/ubuntu/Projects/AIAuditBridge/ops/quant-monitor/scripts/health_check.sh
23+
ExecStart=/bin/bash /home/ubuntu/quant-monitor-runtime/AIAuditBridge/ops/quant-monitor/scripts/health_check.sh
2424

2525
[Install]
2626
WantedBy=multi-user.target

ops/quant-monitor/tests/test_deploy_scripts.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,17 @@ def test_deploy_script_only_accepts_monitor_alert_exit(self) -> None:
8383
self.assertIn("ExecMainStatus", script)
8484
self.assertIn('if [[ "$monitor_status" != "2" ]]', script)
8585

86+
def test_deployment_uses_a_dedicated_runtime_checkout(self) -> None:
87+
script = (ROOT / "scripts" / "deploy_to_vps.sh").read_text(encoding="utf-8")
88+
service = (ROOT / "systemd" / "codex-quant.service.example").read_text(
89+
encoding="utf-8"
90+
)
91+
92+
runtime_root = "/home/ubuntu/quant-monitor-runtime/AIAuditBridge"
93+
self.assertIn(f'REMOTE_AAB="{runtime_root}"', script)
94+
self.assertIn(f"WorkingDirectory={runtime_root}/ops/quant-monitor", service)
95+
self.assertNotIn("/home/ubuntu/Projects/AIAuditBridge", service)
96+
8697

8798
if __name__ == "__main__":
8899
unittest.main()

0 commit comments

Comments
 (0)