docs: 同步操作说明/架构/路线图(归档操作、图表基座、数据库目标硬约束)

- USAGE 新增 §6.3.1「归档的日常操作」:查看 / 筛选(回写 URL)/ 导出完整 JSON /
  以此参数再跑 / 删除(写明「删除即失去结果,结果只存归档一份」)/
  历史归档用 restore_experiment_from_job 按原 id 重建;并说明归档完整度如何标注
- USAGE/README 更正技术栈与图表基座:TradingView Lightweight Charts 4.2.3 为唯一
  图表基座(ECharts 已从 package.json、pnpm-lock.yaml、node_modules、文档与
  架构图标注中全部清除),并记录实测证据(个股页图表根节点为
  div.tv-lightweight-charts,页面 canvas 无一来自其它图表库)
- ARCHITECTURE 更正「当前数据库」(原写 SQLite/未来 MySQL):现为本机 MariaDB 10.11,
  §6 补目标库硬约束;USAGE 补服务器身份与实测连接证据
- AGENT.md 新增 §0.1:数据库目标只允许本机 MariaDB,禁止 192.168.1.10,
  由 config.py::assert_db_target_allowed 硬拦截(命中直接抛错,不静默降级)
- DEV_PLAN_DIVIDEND_BACKTEST 记录三轮实施与验证、归档恢复边界(§12.5)、已知限制
- DEV_PLAN v2/v3 标注为历史记录(避免把当时的远端库地址当现状照抄);
  ROADMAP 更正 M3 图表选型
This commit is contained in:
Simon
2026-09-20 07:31:20 +08:00
parent 23972e7063
commit 82240e383d
12 changed files with 1405 additions and 47 deletions
+3 -3
View File
@@ -4924,8 +4924,8 @@
<path data-edge-from="agent" data-edge-to="services" data-edge-label="受控 Tool(Phase 5)" data-edge-key="9" data-edge-id="agent-tools" data-composition-points="270,71;335,71;335,279;400,279" d="M 270 71 L 327 71 Q 335 71 335 79 L 335 271 Q 335 279 343 279 L 400 279" class="a-dashed" stroke-width="1.5" marker-end="url(#arrowhead-dashed)"/>
<!-- Components -->
<g id="node-web-ui" data-node-id="web-ui" data-node-label="Web UI" tabindex="0" role="button" aria-label="Focus Web UI, Next.js · ECharts, Architecture component" aria-pressed="false" data-node-kind="frontend" data-node-sublabel="Next.js · ECharts" data-node-context="Architecture component">
<title>Web UI · Next.js · ECharts · Architecture component</title>
<g id="node-web-ui" data-node-id="web-ui" data-node-label="Web UI" tabindex="0" role="button" aria-label="Focus Web UI, Next.js · Lightweight Charts, Architecture component" aria-pressed="false" data-node-kind="frontend" data-node-sublabel="Next.js · Lightweight Charts" data-node-context="Architecture component">
<title>Web UI · Next.js · Lightweight Charts · Architecture component</title>
<rect x="460" y="16" width="320" height="64" rx="6" class="c-mask"/>
<rect x="460" y="16" width="320" height="64" rx="6" class="c-frontend" stroke-width="1.5"/>
<g aria-hidden="true" data-semantic-sigil="frontend" class="semantic-sigil s-frontend" transform="translate(466 22) scale(0.6875)">
@@ -4935,7 +4935,7 @@
<circle cx="6.3" cy="4.8" r=".7" class="sigil-fill"/>
</g>
<text data-detail-anchor x="620" y="46" class="t-primary" font-size="11" font-weight="600" text-anchor="middle">Web UI</text>
<text data-detail="context" x="620" y="62" class="t-muted" font-size="9" text-anchor="middle">Next.js · ECharts</text>
<text data-detail="context" x="620" y="62" class="t-muted" font-size="9" text-anchor="middle">Next.js · Lightweight Charts</text>
</g>
<g id="node-api" data-node-id="api" data-node-label="FastAPI API" tabindex="0" role="button" aria-label="Focus FastAPI API, Pydantic DTO · REST / SSE, Architecture component" aria-pressed="false" data-node-kind="backend" data-node-sublabel="Pydantic DTO · REST / SSE" data-node-context="Architecture component">
+1 -1
View File
@@ -12,7 +12,7 @@
]
},
"components": [
{ "id": "web-ui", "type": "frontend", "label": "Web UI", "sublabel": "Next.js · ECharts", "pos": [460, 16], "size": [320, 64] },
{ "id": "web-ui", "type": "frontend", "label": "Web UI", "sublabel": "Next.js · Lightweight Charts", "pos": [460, 16], "size": [320, 64] },
{ "id": "api", "type": "backend", "label": "FastAPI API", "sublabel": "Pydantic DTO · REST / SSE", "pos": [460, 118], "size": [320, 64] },
{ "id": "services", "type": "backend", "label": "Application Services", "sublabel": "数据 / 因子 / 策略 / 回测 / 实验", "pos": [400, 232], "size": [440, 108] },
{ "id": "domain", "type": "backend", "label": "Domain · Repository", "sublabel": "实体 + Protocol(禁 SQL)", "pos": [460, 392], "size": [320, 80] },
+3 -3
View File
@@ -5079,8 +5079,8 @@
<text data-detail="fine" x="960" y="493" class="t-backend" font-size="7" text-anchor="middle">REST / SSE</text>
</g>
<g id="node-web" data-node-id="web" data-node-label="Web UI" tabindex="0" role="button" aria-label="Focus Web UI, Next.js · ECharts, 05 / 回测 · 实验 · 消费" aria-pressed="false" data-node-kind="frontend" data-node-sublabel="Next.js · ECharts" data-node-tag="结果可视化" data-node-context="05 / 回测 · 实验 · 消费">
<title>Web UI · Next.js · ECharts · 05 / 回测 · 实验 · 消费 · 结果可视化</title>
<g id="node-web" data-node-id="web" data-node-label="Web UI" tabindex="0" role="button" aria-label="Focus Web UI, Next.js · Lightweight Charts, 05 / 回测 · 实验 · 消费" aria-pressed="false" data-node-kind="frontend" data-node-sublabel="Next.js · Lightweight Charts" data-node-tag="结果可视化" data-node-context="05 / 回测 · 实验 · 消费">
<title>Web UI · Next.js · Lightweight Charts · 05 / 回测 · 实验 · 消费 · 结果可视化</title>
<rect x="904" y="582" width="112" height="36" rx="6" class="c-mask"/>
<rect x="904" y="582" width="112" height="36" rx="6" class="c-frontend" stroke-width="1.5"/>
<g aria-hidden="true" data-semantic-sigil="frontend" class="semantic-sigil s-frontend" transform="translate(910 588) scale(0.6875)">
@@ -5090,7 +5090,7 @@
<circle cx="6.3" cy="4.8" r=".7" class="sigil-fill"/>
</g>
<text data-detail-anchor x="960" y="603" class="t-primary" font-size="10" font-weight="600" text-anchor="middle">Web UI</text>
<text data-detail="context" x="960" y="619" class="t-muted" font-size="7" text-anchor="middle">Next.js · ECharts</text>
<text data-detail="context" x="960" y="619" class="t-muted" font-size="7" text-anchor="middle">Next.js · Lightweight Charts</text>
<text data-detail="fine" x="960" y="607" class="t-frontend" font-size="7" text-anchor="middle">结果可视化</text>
</g>
+1 -1
View File
@@ -192,7 +192,7 @@
"id": "web",
"type": "frontend",
"label": "Web UI",
"sublabel": "Next.js · ECharts",
"sublabel": "Next.js · Lightweight Charts",
"tag": "结果可视化",
"stage": 4,
"row": 4,