架构 audit — 2026-05-28

导读

用户请求:"帮我检查当前系统架构,是否需要优化"。本文记录 audit 输出 + 已落地优化 + 遗留 TODO。

体检总览

维度评分关键发现
应用层耦合🟡 中等跨包硬路径 ../../web/components/ 6 处;1 个真死组件(IndicatorChart)
Worker 复杂度🟡 中等worker/index.js 4215 行单文件 — RAG / TG bot / 财务数据 混合,需 review 时 context 重
数据冗余🟢 修正audit 子代理误报 47MB 冗余;实际 out/ 已 gitignore、chunks.json 也 gitignore,共仅 7M 进 git(search-index + embeddings)
Pipeline 自动化🔴 差invest tracker / emit_domains / build_chunks 都手动触发,无 CI 周期跑
产物可观测性🟢 修复2026-05-28 加 sidecar chunks.meta.json / search-index.meta.json + schema_version 入 embeddings / dashboard json
内容质量🟢 优546 页全 frontmatter,0 broken/orphan(system-content-health.md 全绿)
主题 / PWA 统一性🟢 优2026-05-28 完成 _tokens.css 单一真源 + status bar 同步主题

已落地优化(此 audit 当天)

  1. scripts/_lib/_slug.py —— 共享 slug_of(),emit_search_index.py + build_chunks.py 同源,杜绝双份漂移→worker chunksMap 永久 miss 风险
  2. Sidecar metadata —— chunks.meta.json + search-index.meta.jsongenerated_at / schema_version / count;不破坏 array 契约的前提下让消费方能判断新鲜度
  3. embeddings.json + dashboard.json 内嵌 schema_version —— version gate 行为差异

遗留 TODO(按优先级)

P1 — 全部完成 ✓(2026-05-29)

  • Worker 4215 行拆模块 —— 跨 13 phases 完成。worker/index.js 4215 → 422 行(-90%),15 个 lib/handler 文件抽出:
    • lib/(9 文件 1106 行):scoring / credibility / wiki-index / tavily / embedding / llm-chain / copilot / http / telegram-helper
    • handlers/(6 文件 2942 行):ask / cron / telegram / chart / ingest / search
    • 完整 commit log:e540aa5b → 3a4be95b → fca46505 → dd04e6fd → 884a7270
    • 教训沉淀进 commit message(P1.13 漏 export / P1.11+1.12 误推 export default 都被 wrangler tail --status error 抓到)
  • 跨包硬路径换 workspace alias —— vite.config.ts 设 @shared → '../web/components',14 处 import 替换完成。2026-05-28 commit ace8e0ce
  • work/growth/english/reading.json 单源 —— audit 误报:实测 emit_domains.py 只写 apps/invest-dashboard/public/,vite build 自动 copy 到 apps/web/public/app/,本来就是 source → build artifact 模式,不是双源。两边时间戳同步,无 sync lag

P2 — 月级(选做)

  • invest tracker 自动化 —— GH Actions 已停 billing,改 CF Worker scheduled handler。1-2 h
  • frontmatter schema 强制完整迁移 —— 部分页 domain/title/id 没填全,lint rule 强制 + LLM 辅助回填。1 天
  • chunks/embeddings 自动 cache-bust —— 前端拿 meta.json 对比 generated_at,新版自动重 fetch。半天

死代码 — 已清理 ✓(2026-05-29)

  • apps/web/components/IndicatorChart.tsx —— 已删 + 配套 CSS 全清。
    • apps/web/components/IndicatorChart.tsx 整文件
    • apps/invest-dashboard/src/dashboard.css + apps/web/styles/globals.css 中: .cc-ind / .cc-inds / .cc-ind-group / .cc-ind-group-h / .cc-ind-top / .cc-ind-name / .cc-ind-metrics / .cc-ind-live / .cc-ind-msg / .cc-ind-src / .cc-spark / .cc-alert-spark .cc-spark
    • 保留 .cc-up / .cc-down(他处仍引用)
    • dashboard build + 全 endpoint regression ✓ 无回归

不建议做(已合理或收益低)

  • ❌ 拆 monorepo / packages/shared —— 2 app 复用规模不够,投资过大
  • ❌ 换 lightweight-charts(162 KB)—— 已懒加载,只 invest 域吃,非首屏问题
  • ❌ Worker 完全微服务化 —— CF Worker 单文件 + bindings 是标准形态,模块化即可

引用记忆: