架构 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 当天)
scripts/_lib/_slug.py—— 共享 slug_of(),emit_search_index.py+build_chunks.py同源,杜绝双份漂移→worker chunksMap 永久 miss 风险- Sidecar metadata ——
chunks.meta.json+search-index.meta.json含generated_at/schema_version/count;不破坏 array 契约的前提下让消费方能判断新鲜度 embeddings.json+dashboard.json内嵌schema_version—— version gate 行为差异
遗留 TODO(按优先级)
P1 — 全部完成 ✓(2026-05-29)
- Worker 4215 行拆模块 —— 跨 13 phases 完成。
worker/index.js4215 → 422 行(-90%),15 个 lib/handler 文件抽出:lib/(9 文件 1106 行):scoring / credibility / wiki-index / tavily / embedding / llm-chain / copilot / http / telegram-helperhandlers/(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 —— audit 误报:实测 emit_domains.py 只写work/growth/english/reading.json单源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)
—— 已删 + 配套 CSS 全清。apps/web/components/IndicatorChart.tsx- 删
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 是标准形态,模块化即可
引用记忆:
- feedback_css_media_subset_trap / feedback_theme_color_dynamic_only / feedback_cssvar_force_resolve_for_jslib —— 这周踩到的 3 个 CSS 跨层契约暗坑,已沉淀