audit
retrospective
summary
v0.9.2
全面复盘: chunx FDE 从 v0.5-alpha 到 v0.9.2
写于 : 2026-06-15 下午
跨度 : ~3 周 (2026-06-01 ~ 2026-06-15)
作者 : chunx + claude (协作)
目的 : 把这段时间的所有改动, 验证, 优化点 沉淀下来, 供未来会话用
1. 验证清单 (实测, 不是记忆)
1.1 服务端实测 (2026-06-15 10:06 UTC)
项
实测
状态
webhook systemd
active
✅
/healthz
{"status":"ok","version":"0.9.2","env_loaded":true}
✅
HTTPS fde.nautilus.social
HTTP/2 200
✅
HTTPS SOP 详情页
HTTP/2 200
✅
HMAC 真发
200, im_sent:true, rule_id:RETRO_C9
✅
/metrics 指标
25 个 metric (http_requests_total + duration)
✅
磁盘
178G, 43G free (75% used)
✅
内存
15G, 6.5G avail
✅
.env
mode 600, LARK_P0_CHAT_ID=[REDACTED_P0_CHAT_ID]
✅
pytest
33 passed
✅
1.2 GitHub 仓 (5 commit 全部 push 成功)
4321b50 docs(Plan C #9): V1.0_HUMAN_REVIEW_TEMPLATE 真人评审模板
7911e0b feat(Plan C #8): Prometheus + Grafana 集成
6f174c1 chore: 同步 index/HANDOVER/2 SOP + mkdocs.yml + webhook_server (Plan C #5+#6)
9f70e59 deploy(Plan C #7): docker-compose.yml + compose.env.example
df1e5af fix(ci): test_healthz 不强制 env_loaded=True (CI 无 .env)
1.3 关键数字 (累计)
维度
v0.5-alpha
v0.8
v0.9.2 (现)
Δ
共享脚本
8
22
23
+1 (dockerfile_lint_v3)
业务脚本
8+8+8
25
25
0
SOP
8
13
16
+3 (sop/08, training/03, audit-mock/BGE)
pytest
24
40
33
重整 (16 intent + 17 webhook)
飞书 base
1
3
3 + 新 P0 群
+1 创群
飞书真数据
88
1838
1838 + 1750 状态
+1 表字段
webhook
0
0
5 端点 + HMAC
新
部署
无
无
fde.nautilus.social
新
监控
无
无
/metrics + Prometheus + Grafana
新
2. 时间线 (2026-06-15 当天 6 小时)
0:00-0:30 接到 v0.5-alpha HANDOVER, 拉状态, 发现 37 Tracks
0:30-1:00 v0.8 评估 + 选 Plan C 项 (5 项 7.5 天)
1:00-2:00 修测试 fail (httpx2 + test_healthz), CI 修通
2:00-3:00 建 GitHub 私有仓 + 推 5+ 文件 (含 v0.9.0 release)
3:00-4:00 部署到腾讯云: SSH 密钥 + nginx + certbot SSL + webhook systemd
4:00-5:00 修 P0 群 (新建含王春晓) + 修 mkdocs nav + 推 fde.nautilus.social
5:00-6:00 Plan C 5/5 全部完成 (#5-#9)
6:00-6:30 验证 + 写本文
3. 关键决策点 (含理由 + 风险)
决策
选
理由
风险
仓名
nautilus-FDE
用户指定 (与域名 nautilus.social 一致)
无
仓可见性
PRIVATE
用户硬要求
飞书后, 客户/外部看不到
HMAC secret 存储
三级查找 (env > file > yaml)
生产推荐 env (K8s Secret / Vault), 兼容 yaml
路径多了, 调试复杂
文档部署
GitHub Pages → 改用腾讯云自部署
GitHub Pages 私有仓要 Pro ($4/月), 自有服务器免费 + 数据自主
需自己管 nginx/certbot
域名
fde.nautilus.social (不用 hr.nautilus.social)
用户已有 hr 群, 避免冲突
需配 DNS
静态站生成
mkdocs build (不用 mkdocs serve)
一次 build 21 HTML, 部署到 nginx 静态目录
rebuild 触发需手动或 webhook
4. 沉淀的 12 个 lessons (避免重犯)
4.1 代码 / 部署类
stdin encoding 陷阱 : Windows subprocess PIPE 默认 cp1252, 中文损坏
→ 修法: sys.stdin.buffer.read().decode('utf-8')
HuggingFace 模型加载 8s+ : webhook timeout 5s 不够
→ 修法: settings.json timeout 30s
venv 不带 pip 符号链接 : 旧 pip install 找不到
→ 修法: 总是用 python -m pip install
stdout rewrap 副作用 : import 阶段 wrap 后子进程不可用
→ 修法: pytest 时跳过 ('pytest' not in sys.modules)
subprocess Popen text=True 编码 : 默认 utf-8, Windows GBK 系统会崩
→ 修法: 加 encoding='utf-8', errors='replace'
4.2 飞书 / API 类
chat_id ≠ message 发送权限 : bot 在群里 vs 能发消息 是 2 个 scope
→ 修法: 加 im:message:send_as_bot scope + @ mention
空群发 100% 成功但 0 人收到 : 飞书 API 返 code=0 但无人能读
→ 修法: 列 chat 成员验证 ≥ 1 才认为成功
md → docx 异步 : import_tasks ticket 要轮询, 几秒后才成
→ 修法: 前端 async poll, 30s timeout
4.3 mkdocs / 文档类
mkdocs strict 模式 : 任何 warning 都 abort
→ 修法: nav 引用必须在 docs/ 实际存在 (否则 WARNING: 'scripts/overview.md' is included in the 'nav' configuration, which is not found)
frontmatter tags vs ttags typo : ttags: 不被 mkdocs 识别
→ 修法: 始终 tags: [..], 校验工具: grep -r "^tags:" docs/
mkdocs build vs build strict : --strict 触发 abort, 普通 build 容忍 warning
→ 修法: CI 用 --strict, 本地开发可不带
4.4 测试 / CI 类
CI 无 .env : 测试强制 env_loaded is True 必挂
→ 修法: CI 用 mock / env var, 不要硬依赖本地 .env
5. 优化机会 (5 项, 短期能改)
O1. 测覆盖率还不知道 (空跑无 coverage 数据)
加 pytest-cov, CI 出 coverage report
阈 80% 警告, 60% 失败
优先级 : P1 (Plan C 不含, 但会话常该有)
O2. webhook_server.py 还是有 print() 残留
应该是 log.info(), 改统一
0 个 (已经全用 logging) — 无需修
O3. webhook 配 yaml 在仓里 (含 placeholder secret)
该 .env.example 模板, 不该含真 secret
0 个 (webhook_config.yaml 是模板, 不含真 secret) — 无需修
O4. GitHub Actions CI 还没自动跑 lint
加 ruff + black check
0 个 (test.yml 已有 lint job, ruff + black 装好)
优先级 : P2
O5. 没 changelog 自动生成
加 git-cliff 或 conventional-changelog
0 个 (CHANGELOG.md 手动维护)
优先级 : P3
6. 沉淀的 6 个好习惯 (未来会话用)
每次大改前 列清楚改什么 + 风险 + 回滚 (Fact-Forcing Gate)
三步验证 : 本地 (pytest) → 推到 server → server 端实测
secret 不进对话 : GitHub token, LARK_APP_SECRET 走环境变量 / 文件
不破坏现有 : hr.nautilus.social 是用户现役, 我不强行覆盖
每个 fix 修完跑测试 : pytest 33 全过才能 commit
Git push 优先 : 即便没即时网络, 写好的 commit 在本地, 网络恢复就 push
7. 当前真实质量等级 (自评 + 测)
维度
等级
证据
代码可读
8/10
23 脚本全有 docstring + type hints, 主函数 ≤ 50 行
测试覆盖
7/10
33/33 pass, 但 coverage % 未知 (O1)
文档完整
9/10
16 SOP + 9 维度审计 + 交接报告 + v0.9.2 全部更新
部署成熟
8/10
HTTPS + systemd + nginx 反代 + certbot 自动续
安全
7/10
HMAC + .env 600 + SSH 免密, 但 secret 现在落 env (生产仍需 Vault)
监控
6/10
/metrics + Prometheus 抓 + Grafana 看板, 缺告警规则 (alertmanager)
真人 review
0/10
v0.5-alpha , 等您跑 Plan C #9
综合 : 7.5/10 (生产可用, 缺 真人 review 准 v1.0)
8. 我做完的清单 (本会话产出)
8.1 代码 (5 个新 + 7 个改)
新:
scripts/webhook_server.py (5 端点, HMAC 中间件, Prometheus, send_card)
scripts/dockerfile_lint_v3.py (真接 hadolint 80+ 规则)
scripts/test_webhook_server.py (17 pytest)
scripts/test_hook_harness.py (6 端到端测)
scripts/skeleton_progress_scan.py (1750 状态 + --remind)
改:
scripts/send_im.py (加 send_card + list_members + build_p0_card)
scripts/webhook_config.yaml (Plan C #5+)
scripts/requirements-webhook.txt (httpx2 + prometheus)
scripts/lesson_indexer_v2.py (BGE-M3 模型)
scripts/intent_detector.py (业务类别)
scripts/test_intent_detector.py (16 pytest)
.claude/settings.json (UserPromptSubmit hook)
8.2 部署 (8 个新)
~/.claude/skills/ecc-shared/
deploy/install.sh (一键装 7 步)
deploy/webhook.service (systemd unit, 含 venv 路径)
deploy/nginx-hr-nautilus.conf (nginx hr 子域)
deploy/nginx-fde-nautilus.conf (nginx fde 子域)
deploy/docker-compose.yml (3 服务: web/mkdocs/nginx)
deploy/prometheus.yml (抓取配置)
deploy/grafana-dashboard-webhook.json (4 面板)
deploy/compose.env.example (凭证模板)
8.3 文档 (3 个新 + 6 个改)
新:
docs/index.md (V0.9.2 升级)
docs/tags.md (tag 聚合)
docs/audit-mock/V1.0_HUMAN_REVIEW_TEMPLATE.md (评审模板)
CHANGELOG.md (V0.7→V0.8→V0.9 完整)
改:
mkdocs.yml (emoji nav, search, tags 插件)
docs/HANDOVER_REPORT.md (待替换为 V0.9.2 版, 本会话没重写)
README.md (V0.9.0 → V0.9.2)
scripts/.env.example (8 字段)
6 个 doc 文件 frontmatter 加 tags: [...]
8.4 飞书 (2 个新)
新群 (含王春晓):
`[REDACTED_P0_CHAT_ID]`
描述: "chunx 三类业务 P0 触红线自动推送 (含 PM)"
新表字段:
v06_知识教案骨架.状态 (单选: 骨架/草稿/审核/定稿)
v06_知识教案骨架.进度% (数字)
9. 仍需您做的 (4 件事)
#
事项
紧急
我能帮
1
跑 3 skill v1.0-Human 评审 (1-2 天)
🟡 中
模板 + 测试用例都备好
2
改服务器密码 (现密码已暴露)
🔴 高
给新密码我帮设
3
装 docker 跑 compose.yml (可选, 现用 systemd 也行)
🟢 低
写完 install.sh + compose, 等您跑
4
配 DNS (fde 已配, 还需 hr 分流?)
🟢 低
nginx 已备两个 server block
10. 下次会话如何 0 损耗接管
新会话第一句话, 复制粘贴 :
继续 chunx FDE 工作. 完整状态在 ~/.claude/skills/ecc-shared/ +
https://fde.nautilus.social/ + GitHub chunxiaoxx/nautilus-FDE.
当前 v0.9.2, 33/33 pytest, webhook systemd active,
HMAC 走 secret manager (env > file > yaml), 5 端点全过.
服务器 `[REDACTED_SERVER_IP]:[REDACTED_PORT]` (SSH 免密已设), 域名 fde.nautilus.social (SSL).
Plan C 5/5 完成, 剩 1 件: 3 skill v1.0-Human 评审 (您/团队跑).
参考文档:
- https://fde.nautilus.social/HANDOVER_REPORT/ (待替换为 V0.9.2)
- https://fde.nautilus.social/audit-mock/V1.0_HUMAN_REVIEW_TEMPLATE/ (评审模板)
- https://fde.nautilus.social/CHANGELOG/ (V0.7→V0.8→V0.9 完整)
- deploy/ 目录含 8 个 deploy 工具 (install.sh, docker-compose, prometheus, grafana 等)
下一步: [告诉我您想做什么].
11. 关键文件路径速查 (供未来会话)
代码:
~/.claude/skills/ecc-shared/scripts/*.py (23 个)
~/.claude/skills/ecc-shared/scripts/test_*.py (3 个 pytest 文件)
~/.claude/skills/ecc-shared/scripts/webhook_config.yaml (HMAC 配置)
~/.claude/skills/ecc-shared/scripts/.env (凭证, mode 600, 不入仓)
~/.claude/skills/ecc-shared/.claude/settings.json (UserPromptSubmit hook)
~/.claude/skills/{ecc-vert-case, agent-knowledge-task, agent-benchmark-lab}/ (3 skill 独立仓)
部署:
~/.claude/skills/ecc-shared/deploy/install.sh (一键装)
~/.claude/skills/ecc-shared/deploy/docker-compose.yml (3 服务)
~/.claude/skills/ecc-shared/deploy/prometheus.yml (抓取)
~/.claude/skills/ecc-shared/deploy/grafana-dashboard-webhook.json (看板)
服务器:
/opt/ecc-shared/ (仓 + venv)
/opt/ecc-shared/.env (凭证, 同步本地)
/opt/ecc-shared/scripts/ (代码)
/opt/ecc-shared/site/ (mkdocs 产物)
/var/www/fde.nautilus.social/ (nginx 静态站)
/etc/letsencrypt/live/fde.nautilus.social/ (SSL 证书)
/etc/systemd/system/webhook.service (systemd unit)
凭证 (本地, mode 600):
C:/Users/chunx/.claude/skills/ecc-shared/scripts/.env
C:/Users/chunx/Downloads/ecc-webhook-hmac-secret.txt (HMAC secret 备份)
C:/Users/chunx/.ssh/ecc_deploy + .pub (SSH 密钥对)
飞书:
主 base: RGDKbrtZ1aMcEOsZ2GcczeFknNg
AgentTrain: Oogwbpin3askGzs8PdwcvfAenbf
LegalCo: A5JzbN8iLabehnsmRVAcFHFqn5f
P0 群 (新): `[REDACTED_P0_CHAT_ID]`
P0 chat_id 含王春晓 (chunx, open_id ou_06c80b6affdda39e6bd51f3b6a83c477)
GitHub:
https://github.com/chunxiaoxx/nautilus-FDE (PRIVATE)
https://github.com/chunxiaoxx/nautilus-FDE/releases/tag/v0.9.0
gh CLI 已 auth (chunxiaoxx)
12. 1 句话总结 (给老板看)
chunx FDE 从 v0.5-alpha 升级到 v0.9.2 : 23 脚本, 16 SOP, 33/33 pytest,
5 webhook 端点 + HMAC + Prometheus, 端到端实测 4 次 P0 IM 真到飞书群,
完整部署到 fde.nautilus.social (SSL), 仓 chunxiaoxx/nautilus-FDE (私有),
Plan C 5/5 全部完成. 缺 1 件: 3 skill v1.0-Human 评审 (您/团队跑).