DUCKERRY_Warehouse v5.0 每日完整发布 · 交接提示词(新对话直接粘贴)
抓取 → 面板 → L0/L1 → Regime → Brier → 模拟盘 → G1 闸门 → 快照 → 驾驶舱 MOC → 重算 → 排版同步
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.logpublish_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.sh | publish: PASS、source: PASS、L0/L1/Regime/Brier/Paper 均正常 |
| L0-3 | 应显示「可评估(含真实债券价格)」(第 0 步生效的标志;退化说明债券腿未刷新) |
数据/run_log.md | 追加了本次条目 |
复盘/<target> 收盘数据快照.md | 存在(且非占位;同日旧版内容已被 --force 更新) |
00 驾驶舱(投资MOC).md | AUTO: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).md | frontmatter 系统版本、头部状态行(面板行数 / 交易日数 / 债券腿状态 / 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 tests8⃣ 报告模板(完成后按此格式汇报)
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_135451 | v5.0 导航层重构前全库(761 文件) |
/var/minis/shared/backup/DUCKERRY_Warehouse_pre_arch_20260922_001450 | v4.0 架构改造前全库(603 文件) |
数据/paper_bak_pre_cashfix_20260922_123330 | 模拟盘透支修复前状态 |
数据/paper/bak_20260921_225910/ | 同日保护修复前状态 |
数据/bond_tlt.json.bak_20260923、数据/bond_agg.json.bak_20260923 | 债券腿日更前快照 |
待办(新对话可按需接手)
| 优先级 | 任务 | 备注 |
|---|---|---|
| P1 | 混合成本基准 | 止损/止盈价仍以最近一笔成交为基准,需引入加权成本 |
| P1 | reduce/close 信号执行卖出 | 出场目前只由止损/止盈驱动;L0 断路/regime 恶化的 reduce 仍只记录 |
| P2 | 做空腿 | short_squeeze_defused 仅清多不对冲 |
| P2 | 债券腿双源校验 | 目前 AGG/TLT 为 eastmoney 单源 [待验证],可考虑引入第二源 |
| P2 | 周报 | 需 ≥5 个交易日 equity 才产出,自然积累即可 |
| 持续 | Brier / regime / min_hold / REBALANCE 参数均 [待验证],样本 <60 日不得作证据 | |
| P3 | AUTO: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)。