框架

DUCKERRY_Warehouse v5.0 每日完整发布 · 交接提示词(新对话直接粘贴)

抓取 → 面板 → L0/L1 → Regime → Brier → 模拟盘 → G1 闸门 → 快照 → 驾驶舱 MOC → 重算 → 排版同步

optimization · 资产·机制 · optimization/提示词/每日发布运行提示词_2026-09-23.md · 18277 B

DUCKERRY_Warehouse v5.0 每日完整发布 · 交接提示词(新对话直接粘贴)

⚠ 已废止(v5.0.1,2026-09-23):本文件与系统实际版本脱节(不含 state_digest --guard 熔断、状态外置、

二级源/锁逃生等 v5.1–v5.2.3 机制),请改用 框架/技能/duckerry-daily-review SKILL.md(v1.7.2);

本文件保留作历史参考,不得再整段粘贴执行。文内旧口径已就地更正:架构自检 11/11(v5.2.3 起)、

测试项数以实测为准(grep -c "def test" tests/test_pipeline.py,2026-09-26 = 64 项 / 13 类)。

使用方式:新开对话 → 把本文件整段(含代码块)直接发送给 Minis。无需补充背景、路径或参数——状态、工具、判据、失败处理、武器库用法、排版同步清单已全部内嵌。

挂载前提:外接武器库 /var/minis/mounts/武器库/(PyBondLab / YieldCurve / akshare / efinance / fixed-income-mcp / trace-data-pipeline / convex)。

版本:v5.0.1 统一管理版(2026-09-23 实测跑通)。日常只需一条命令:§1 启动 → 等 === 完成: 行 → §6.5 登记索引。

早/晚快捷指令标配:在发送触发词前各跑一次 sh scripts/collect_unresolved_fred.sh,把 FRED 滞后源的最新可得日期记入 /var/minis/offloads/daily_collect.log,不等 fetch.py 被动抓到。


🎯 任务:每日完整发布

抓取 → 面板 → L0/L1 → Regime → Brier → 模拟盘 → G1 闸门 → 快照 → 驾驶舱 MOC → 重算 → 排版同步

目标仓库:/var/minis/mounts/DUCKERRY_Warehouse(Obsidian Vault,可读写)


0⃣ 第 0 步:债券腿(v4.3 起已内置在管线内,正常无需手动执行)

正常情况:什么都不用做——第 1⃣ 步的 fetch.py 会自动在面板构建前刷新 TLT/AGG 债券腿,日志中会出现 债券腿: === 抓取 TLT/AGG ===。

为什么重要:L0-3「股债金三杀」的债券腿需要 TLT/AGG 真实价格回报;ETF 数据滞后时 L0-3 会退化为「10Y 收益率上行代理」→ L0 显示降级。

仅在排障时手动执行(例如怀疑浏览器通道异常,想单独看抓取结果):

cd /var/minis/mounts/DUCKERRY_Warehouse && sh scripts/refresh_bond_etf.sh

原理与坑(已实测封装,勿改):

  • 本机 shell 的 curl / requests 走 HTTPS_PROXY 被拒(ProxyError)→ 只能用浏览器通道。
  • minis-browser-use fetch --url "<eastmoney API>" 可 直连返回 http 200(免 key)。
  • ⚠ 致命坑:browser fetch 落盘名是秒级时间戳(/var/minis/browser/<epoch>_get),连续抓两个 URL 会互相覆盖,必须「抓一个 → 立刻 cp 另存 → 再抓下一个」。refresh_bond_etf.sh 已封装。
  • secid:TLT = 105.TLT、AGG = 107.AGG(105.AGG 返回 data:null)。
  • 合并走 update_bond_etf.py:增量、旧日期不覆盖(源串原样保留),只追加新日期;无新日期记 pending(不补数、不前值填充)。
  • 逃生开关:DK_SKIP_BOND=1 或 python3 scripts/fetch.py --no-bond。
  • 失败永不阻断发布:抓取失败只记 数据/logs/bond_leg_error.log 并让 L0-3 按既定规则降级。

产出:数据/bond_tlt.json / 数据/bond_agg.json(结构 {data:{code,klines:["YYYY-MM-DD,close"]}, note, updated_at})


0⃣·5 第 0.5 步:持续收集未解决 FRED 数据(v5.0.1 新增 · 早/晚快捷指令标配)

目的:FRED VIXCLS 等源常滞后 1 日,不等 fetch.py 被动抓到,在早/晚两次快捷指令中主动收集、记录最新可得日期,把“等数据”变成可追踪的日志证据。

脚本:scripts/collect_unresolved_fred.sh(已内置 curl --proxy '' 直连 FRED,已验证可用) 产出:/var/minis/offloads/daily_collect.log(每次追加,带时间戳;保留最近 ~7 天)

早/晚快捷指令各加一步(建议在发送触发词前):

# 在 Minis 终端或快捷指令「运行脚本」动作中执行:
cd /var/minis/mounts/DUCKERRY_Warehouse && sh scripts/collect_unresolved_fred.sh

日志里的关键标记:

  • ✅ VIXCLS 抓取成功,最新: 2026-09-22,14.21 → 说明该源已更新到目标日
  • ⚠️ VIXCLS 抓取失败 → [未解决] → 仍需等待,复盘时标注「VIX 滞后,禁止前值填充」
  • ⚠️ DGS4 返回空数据 → [未解决] → 该系列在 FRED 可能不存在或 ID 不同,人工核对

复盘时引用:打开 daily_collect.log 看最近一次 ✔/⚠,决定 L0-2 是否可评估,不得凭印象填数。


1⃣ 一键启动(后台方式,必须用此方式)

cd /var/minis/mounts/DUCKERRY_Warehouse && \
DK_DISABLE_MCAL=1 nohup python3 -u scripts/fetch.py > /tmp/fetch_publish.log 2>&1 & echo "PID=$!"

⚠ 环境铁律:iOS 内存紧张时,前台运行 >90 秒的 python 进程会被静默终止(症状:输出为空 / exit 0 / latest.json 不更新)。

⚠ 2026-09-23 实测:内存显示 2.9GB free,后台运行仍可能在被 kill(本次第 2 次运行抓完 12 源后静默死掉,无 完成: 行)。因此默认直接带 DK_DISABLE_MCAL=1(跳过 ~70s 的日历 import + ~66s valid_days,显著降低被 kill 概率;2026 区间已验证与硬编码表 77/77 天零差异)。

覆盖同日快照需加 --force:python3 -u scripts/fetch.py --force(只重渲染自动快照,不覆盖人工收盘复盘)。


2⃣ 轮询(每 60-90 秒一次,必须用 delay 而非 sleep)

kill -0 <PID> 2>/dev/null && echo "RUNNING" || echo "DONE"
sh scripts/publish_status.sh /tmp/fetch_publish.log

publish_status.sh 一次输出:日志尾部 + latest.json 的 gate/publish/L0/L1/regime/paper + run_log.md 最后一条 + 进程存活。


3⃣ 完成判据(全部满足才算成功)

判据说明
日志末行=== 完成: target=YYYY-MM-DD, G1=PASS, publish=PASS ===(缺此行 = 被静默 kill,必须重跑)|同一日志应已出现 债券腿: 行与 排版同步检查: 全部一致 ✔
publish_status.shpublish: PASS、source: PASS、L0/L1/Regime/Brier/Paper 均正常
L0-3应显示「可评估(含真实债券价格)」(第 0 步生效的标志;退化说明债券腿未刷新)
数据/run_log.md追加了本次条目
复盘/<target> 收盘数据快照.md存在(且非占位;同日旧版内容已被 --force 更新)
00 驾驶舱(投资MOC).mdAUTO:DATA 区块已刷新到 target 日

4⃣ 失败处理(按序排查,不手动改数凑 PASS)

现象处理
无 完成: 行 / latest.json 未更新静默 kill(最常见)→ 带 DK_DISABLE_MCAL=1 后台重跑;仍被杀则隔几分钟再试
G1=FAIL报告缺哪个核心源:gold_pm / 10y_nom / 10y_tips(LBMA / 美国财政部 / FRED)
target 停在 T-1常常是正常现象:LBMA 黄金 PM 发布滞后 ~1 日(可 python3 -c "import json;print(json.load(open('数据/gold_pm.json'))[-1])" 确认源侧最新日)。缺日 → lbma_priced=False → 不计入交易日,脚本正确拒绝填充
publish=FAIL / 无快照正确保护行为——脚本设计为不更新快照/MOC 绿标,只留诊断 latest.json
L0-3 显示「收益率代理」债券腿数据滞后 → 跑第 0 步 refresh_bond_etf.sh,再带 --force 重跑

5⃣ 武器库使用说明(实测结论,勿凭想象使用)

路径 /var/minis/mounts/武器库/,7 个仓库:PyBondLab-main / YieldCurve-main / akshare-main / efinance-main / fixed-income-mcp-main / trace-data-pipeline-main / convex-main。

环境实测(2026-09-23):

项状态
python3 + pandas 2.2.3 + requests✔ 可用
akshare / efinance / yieldcurve / pybondlab✘ 均未安装且装不上(无 pip 网络)→ 不要写 import efinance 的命令
shell curl / requests 直连外网✘ ProxyError 被拒
minis-browser-use fetch✔ 唯一可用通道(http 200,落盘 /var/minis/browser/)

结论:武器库目前只能"读源码当参考/把算法抄成纯 numpy 脚本",不能当运行时依赖。 已落地且验证有效的用法:

需求做法(已验证)
TLT/AGG 真实 ETF 价格sh scripts/refresh_bond_etf.sh(浏览器 fetch + 增量合并,见第 0 步)
债券曲线 / 凸性 / 久期算法参考 PyBondLab-main/、YieldCurve-main/ 源码,移植为纯 Python 脚本
备用 A 股/ETF 行情 API 写法参考 akshare-main/、efinance-main/ 的数据源清单(注意其依赖装不上)
固收数据接口约定参考 fixed-income-mcp-main/ 的 server 定义
高频/tick 管线参考 trace-data-pipeline-main/ 的配置与 schema

原则:武器库仅作补充与校验;主管线永远以 fetch.py 的 12 官方源(LBMA / 美国财政部 / FRED / ECB / Nasdaq)为准。武器库数据写入 数据/ 下独立文件(如 bond_tlt.json),不覆盖主管线原始响应,且标注 [待验证] 单源。


6⃣ 排版同步(每次发布后执行,保持"驾驶舱等文件"一致)

文件同步什么
00 驾驶舱(投资MOC).mdfrontmatter 系统版本、头部状态行(面板行数 / 交易日数 / 债券腿状态 / target 日)、§九版本记录追加本次条目、页脚日期。AUTO:DATA 区块由脚本自动刷新,勿手改
optimization/系统架构优化报告_<date>.md本次变更与验证证据
optimization/每日发布运行提示词_<date>.md本交接包(如流程有变则同步)
复盘/<target> 收盘数据快照.md自动生成;同日数据有实质变化时用 --force 重生成
数据/run_log.md脚本自动追加,勿手改
scripts/publish_status.sh / refresh_bond_etf.sh工具脚本,保持可执行

v4.3 起同步是自动的:发布成功后管线会运行 scripts/doc_sync_check.py(9 项跨文件一致性检查),日志出现 排版同步检查: 全部一致 ✔ 即代表驾驶舱/快照/run_log 与 latest.json 一致,结果同时写入 latest.json.doc_sync。 若有告警,日志会逐条打印 ✘ 原因,照提示修完再手动复跑 python3 scripts/doc_sync_check.py --strict(必须退出码 0)。 排障用:sh scripts/publish_status.sh 现在会直接显示 bond_leg / doc_sync / panel 三项状态。

排版规范(沿用既有风格):

  • 徽章用既有 CSS 类:<span class="pill mut">●</span>、<span class="status-ok">✔</span>、<span class="status-pending">◇ [待验证]</span>、<span class="status-running">◐ 运行中</span>、<span class="status-neutral">—</span>
  • 表格一律 |:---|---:| 定宽对齐;结论标注 [待验证] / [推断] / 单源 三级可信度
  • 内部链接用 [[路径|显示名]](Obsidian 双链),转义 \|
  • 中文全角标点、日期 YYYY-MM-DD、数值不虚构精度

6⃣·5 驾驶舱索引与架构自检(v5.0 新增 · 强制步骤)

根因防治:历史上"新增复盘/快照/简报后驾驶舱看不见"发生过多次(8 月中旬后 13 个文件零入链)。v5.0 起改为脚本登记 + 机器校验。

每次生成新复盘 / 快照 / 简报 / 备忘后,必须执行:

cd /var/minis/mounts/DUCKERRY_Warehouse
python3 scripts/moc_index.py        # 扫描 复盘/ → 重写驾驶舱 AUTO:INDEX(§7.1 最新 + §7.2 全量)
python3 scripts/arch_check.py       # 9 项架构自检(死链 / 孤儿 / 地图计数 / 版本序 / 复核日期 / 归档数)
  • moc_index.py 无需参数;输出 已更新 或 无需更新 都算成功。v5.1 起 fetch.py 发布成功后会自动调用它(非阻断,结果写入 latest.json.moc_index),日志出现 驾驶舱索引: 已更新(复盘 N 份 / 归档 M 份)。
  • 只在 复盘/ 根目录新增文件且命名符合 YYYY-MM-DD 收盘复盘|收盘数据快照|盘前简报|非交易日备忘|数据缺失占位 时会被自动收录;其他命名不会被收录(日志会以 ⚠️ 该文件写入了但导航页点不到:… 点出文件名)。
  • 手写复盘/简报必须走唯一写入入口(v5.1 新增,根治"能写入但点不到"):
  python3 scripts/review_write.py --print-path 2026-09-23 收盘复盘   # 先拿规范路径
  python3 scripts/review_write.py 2026-09-23 收盘复盘 --src /tmp/draft.md
  # → ✔ 已写入:复盘/2026-09-23 收盘复盘.md
  # → ✔ 导航页可直达:复盘/2026-09-23 收盘复盘

补验已存在的文件:python3 scripts/moc_index.py --verify "复盘/2026-09-23 收盘复盘.md"

  • arch_check.py 期望 11/11 全 ✔(v5.1 新增第 10 项「复盘/ 全部可从驾驶舱直达」、v5.2.3 新增第 11 项「state/current.md 可解析」)。若有 ✘:照提示修(多为新增目录/文件后 §〇·五 地图数量未同步,改数字即可);--strict 才返回退出码 1,默认不阻断。
  • ⚠ 这些脚本只读 / 只登记,不参与 L0–L4 / 信号 / 发布判据。

7⃣ 发布后自检(复制即跑,已实测可用)

cd /var/minis/mounts/DUCKERRY_Warehouse

# 1) 语法编译
python3 -m compileall -q scripts tests && echo "COMPILE_OK"

# 2) 模拟盘回归(纯标准库,~5s)
python3 - << 'EOF'
import sys, unittest; sys.path[:0]=["scripts","tests"]
import test_pipeline
unittest.TextTestRunner(verbosity=1).run(
  unittest.TestLoader().loadTestsFromTestCase(test_pipeline.PaperEngineTests))
EOF

# 3) 状态一键速查
sh scripts/publish_status.sh

# 3.5) 架构自检(v5.2.3 起 11 项,期望 11/11 全 ✔;本文件写于 v5.0,旧值 9/9 已作废)
python3 scripts/arch_check.py

# 4) 债券腿新鲜度
python3 -c "
import json
for a,f in [('TLT','数据/bond_tlt.json'),('AGG','数据/bond_agg.json')]:
    d=json.load(open(f)); print(a, d['updated_at'], '最新', d['data']['klines'][-1])"

# 5) 完整测试(项数以实测为准:grep -c "def test" tests/test_pipeline.py → 2026-09-26 = 64 项 / 13 类;
#    旧文写"15 项"已作废。含面板构建 ~2-3 分钟,低内存请逐类前台跑)
# python3 -m unittest discover -s tests

8⃣ 报告模板(完成后按此格式汇报)

run_id: 2026XXXXTXXXXXX+0800
target: 2026-XX-XX   (若停 T-1,说明原因,如 LBMA PM 未发布)
G1: PASS / FAIL
publish: PASS / FAIL
source: PASS / DEGRADED      (missing_core / stale_core)
面板: XX 行 / XX 交易日 / span A→B
L0: 正常 / 警告 / 断路(L0-3 = 可评估(含真实债券价格) 或 收益率代理)
L1: up/down/neutral (+X.XX%, 同向 X/5, tf_align)
Regime: Trending-Up/Down/Range/Choppy/Transitional (conf X.XXX)
Brier: X.XXXX (baseline X.XXXX, n=X)
Paper: equity X.XXXXXX / cash X.XXXXXX / 当日 X.XX% / exit: 无
recompute2: rc=0 / recompute4: rc=0
快照: 复盘/<target> 收盘数据快照.md(新建 / --force 重生成 / 保留)
MOC: AUTO:DATA 已刷新到 <target>
武器库: 债券腿 TLT/AGG 已刷新至 <date>(或 无新日期)

⚠ 核心禁止事项(违者回滚)

  • ✘ 手改 MOC AUTO:DATA 区块(会被下次运行覆盖)
  • ✘ 删除 数据/paper/ 任何文件(破坏模拟盘幂等与现金推导)
  • ✘ 覆盖人工收盘复盘 / 复盘/历史原始记录/(只读归档)
  • ✘ 为过闸门补数、前值填充、线性外推、把旧值冒充目标日
  • ✘ 修改 框架/数据口径定义.md(SSOT,冲突时只报告)
  • ✘ 在脚本里 import akshare/efinance/pybondlab(环境装不上,必崩)

🔄 回滚点

备份路径内容
/var/minis/shared/backup/DUCKERRY_Warehouse_pre_v5_20260923_135451v5.0 导航层重构前全库(761 文件)
/var/minis/shared/backup/DUCKERRY_Warehouse_pre_arch_20260922_001450v4.0 架构改造前全库(603 文件)
数据/paper_bak_pre_cashfix_20260922_123330模拟盘透支修复前状态
数据/paper/bak_20260921_225910/同日保护修复前状态
数据/bond_tlt.json.bak_20260923、数据/bond_agg.json.bak_20260923债券腿日更前快照

待办(新对话可按需接手)

优先级任务备注
P1混合成本基准止损/止盈价仍以最近一笔成交为基准,需引入加权成本
P1reduce/close 信号执行卖出出场目前只由止损/止盈驱动;L0 断路/regime 恶化的 reduce 仍只记录
P2做空腿short_squeeze_defused 仅清多不对冲
P2债券腿双源校验目前 AGG/TLT 为 eastmoney 单源 [待验证],可考虑引入第二源
P2周报需 ≥5 个交易日 equity 才产出,自然积累即可
持续Brier / regime / min_hold / REBALANCE 参数均 [待验证],样本 <60 日不得作证据
P3AUTO:INDEX 自动化目前需手动跑 moc_index.py;若要发布后自动执行需改 fetch.py(属核心脚本,需另开任务并备份)

新对话最快路径:粘贴本文件 → 第 1 步后台启动(第 0 步债券腿已内置)→ 第 2 步 delay 轮询 → 第 3 步对判据 → 第 6 步排版同步 → 第 6.5 步 moc_index.py + arch_check.py → 第 8 步汇报。

只想看状态:sh scripts/publish_status.sh。

完整背景:optimization/系统架构优化报告_2026-09-22.md、/var/minis/memory/2026-09-23.md。

版本:v5.0 统一管理版(2026-09-23)|新增:§6.5 驾驶舱索引登记 + 架构自检(moc_index.py / arch_check.py)。