Atlas 技術版 > holdings-deploy
(purpose 尚未填寫 — manifest 為 draft/INFERRED)
mode=NO_AGENT state=retired enabled=0
schedule=10 21 * * 1-5
next_run=2026-09-04T21:10:00 last_run=2026-09-03T21:10:35
deliver=local model=— provider=—
script=/Users/exion/.hermes/scripts/deploy-holdings-report.py
monitor_script=— monitor_url=—
skills=[]
workdir=—
prompt_sha256=077588a2d868198c… chars=592
skill_files={}
執行 /Users/exion/.hermes/scripts/deploy-holdings-report.py。這是 21:10 holdings deploy reliability owner:只在同日 upstream freshness/completeness、data_as_of、法人/融資來源、commentary/HTML artifact、Cloudflare artifact hash、Notification Event Registry claim 與 Telegram API success/dedup marker 全部通過時寫入 ~/.hermes/data/holdings_deploy_markers/YYYY-MM-DD.json 的 DEPLOY_SUCCESS。scheduler exit code 0 本身不代表成功;不得自行把缺資料、短報告或 notification failed 當成功。優先重用 17:30 authoritative institutional data,只有 stale/missing 才 fallback,且 marker 必須記錄 fallback。same-day 已驗證成功時直接 dedupe,不重抓、不重送。禁止任何下單、production trading 或 auto-order。…
| rule | value | source |
|---|---|---|
| CLOUDFLARE_DIR | /Users/exion/cloudflare-pages/holdings | CODE_STATIC @deploy-holdings-report.py:25 |
| DAILY_CHECK | /Users/exion/.hermes/scripts/holdings_daily_check.py | CODE_STATIC @deploy-holdings-report.py:26 |
| HEALTH_REPORT_SCRIPT | /Users/exion/.hermes/hermes-agent/scripts/holdings_health_re | CODE_STATIC @deploy-holdings-report.py:27 |
| HEALTH_REPORT_PATH | /tmp/holdings_health_report.json | CODE_STATIC @deploy-holdings-report.py:28 |
| COMMENTARY_SCRIPT | /Users/exion/.hermes/scripts/holdings_llm_commentary.py | CODE_STATIC @deploy-holdings-report.py:29 |
| HTML_SCRIPT | /Users/exion/.hermes/scripts/holdings_html_v7.py | CODE_STATIC @deploy-holdings-report.py:30 |
| KEYCHAIN_LABEL | cloudflare-pages | CODE_STATIC @deploy-holdings-report.py:31 |
| KEYCHAIN_SERVICE | cloudflare.com | CODE_STATIC @deploy-holdings-report.py:32 |
| PROJECT | kenjibot-pages | CODE_STATIC @deploy-holdings-report.py:33 |
| RETENTION_DAYS | 7 | CODE_STATIC @deploy-holdings-report.py:34 |
| MARKER_DIR | /Users/exion/.hermes/data/holdings_deploy_markers | CODE_STATIC @deploy-holdings-report.py:35 |
| REGISTRY_CONSUMER | holdings_deploy | CODE_STATIC @deploy-holdings-report.py:36 |
| REGISTRY_GROUP | holdings-report | CODE_STATIC @deploy-holdings-report.py:37 |
| kind | path | name | access |
|---|---|---|---|
| SQLITE_DB | /Users/exion/.hermes/data/notification_events.db | unknown | |
| SQLITE_DB | /Users/exion/.hermes/data/portfolio_history.db | unknown | |
| SQLITE_DB | /Users/exion/.hermes/data/portfolio_history.db | read/write | |
| SQLITE_DB | /Users/exion/.hermes/data/shioaji_kline.db | unknown | |
| SQLITE_DB | /Users/exion/.hermes/data/shioaji_kline.db | read/write | |
| SQLITE_DB | /Users/exion/.hermes/data/shioaji_kline.db | read/write | |
| SQLITE_DB | /Users/exion/.hermes/data/shioaji_kline.db | read/write | |
| SQLITE_TABLE | self | notification_events | read |
| SQLITE_TABLE | self | notification_events | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | notification_events | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | notification_deliveries | read |
| SQLITE_TABLE | self | stock_kline | read |
| SQLITE_TABLE | self | stock_institutional | read |
| SQLITE_TABLE | self | stock_info | read |
| SQLITE_TABLE | self | stock_kline | read |
| SQLITE_TABLE | self | stock_kline | read |
| SQLITE_TABLE | /Users/exion/.hermes/data/portfolio_history.db | portfolio_snapshots | read |
| SQLITE_TABLE | /Users/exion/.hermes/data/portfolio_history.db | portfolio_snapshots | read |
| SQLITE_TABLE | /Users/exion/.hermes/data/shioaji_kline.db | stock_margin | read |
| SQLITE_TABLE | /Users/exion/.hermes/data/shioaji_kline.db | stock_kline | read |
| SQLITE_TABLE | self | notification_events | write |
| SQLITE_TABLE | self | notification_events | write |
| SQLITE_TABLE | self | notification_deliveries | write |
| SQLITE_TABLE | self | notification_events | write |
| SQLITE_TABLE | self | notification_deliveries | write |
| SQLITE_TABLE | self | notification_events | write |
| SQLITE_TABLE | self | notification_events | write |
| SQLITE_TABLE | self | stock_kline | write |
| FILE_READ | /tmp/holdings_health_report.json | read | |
| FILE_READ | /tmp/holdings_commentary.json | read | |
| FILE_READ | /Users/exion/.hermes/data/sector_map.json | read | |
| FILE_READ | /Users/exion/.hermes/data/disposition_status.json | read | |
| FILE_READ | /tmp/stock_margin_latest.json | read | |
| FILE_READ | /Users/exion/.hermes/data/stock_list.json | read | |
| FILE_READ | /tmp/holdings_check.json | read | |
| FILE_READ | /tmp/holdings_health_report.json | read | |
| FILE_READ | /tmp/market_risk.json | read | |
| FILE_READ | /tmp/holdings_health_report.json | read | |
| FILE_READ | /tmp/holdings_commentary.json | read | |
| FILE_WRITE | +00:00 | write | |
| FILE_WRITE | write | ||
| FILE_WRITE | write | ||
| FILE_WRITE | /Users/exion/cloudflare-pages/holdings/index.html | write | |
| FILE_WRITE | write | ||
| FILE_WRITE | /tmp/check_market_open_last.json | write | |
| FILE_WRITE | write | ||
| FILE_WRITE | /Users/exion/.hermes/data/disposition_status.json | write | |
| FILE_WRITE | /Users/exion/.hermes/data/disposition_status.json | write | |
| FILE_WRITE | /tmp/holdings_commentary.json | write | |
| FILE_WRITE | /tmp/holdings_commentary_prompt.txt | write | |
| FILE_WRITE | /tmp/holdings_commentary.json | write | |
| FILE_WRITE | /tmp/holdings_commentary.json | write |
Upstream: —
Downstream: —
Transitive downstream (0): —
| type | hard? | from | to | resource | origin | conf | evidence |
|---|---|---|---|---|---|---|---|
| none | |||||||
failure_streak=7
last_error=Script exited with code 2
stdout:
[21:10:32] === 持股健檢管線 ===
[21:10:32] Step 0/4: Running daily check...
[21:10:35] REPORT_INCOMPLETE: HOLDINGS_HEALTH_REPORT_SCRIPT_MISSING
delivery_error=—
change_risk=LOW