历史教训 (F2-1A): OpenAPI 抓取脚本 2026-04-06 commit 779b2f6 被
Claude Opus 4.6 在批量清理 1155 个废弃文件时误归档到
_DEL/_DEL/scripts/ops/, 导致 docs/contracts/openapi/backend-api.json
28 天 stale (137 paths -> 实际 167 paths, 缺 30 端点)。
Neo 反馈: 建立机制不要让类似事件再发生。
F3-2C 配套需求: 建立 docs/ai/system-prompts/ 独立 MD 体系后,
维护流程依赖 3 步同步 (元信息日期 / 同步历史 / _INDEX.md 状态表),
容易遗漏造成漂移。
新增 2 个 PostToolUse hook (Edit|Write matcher, timeout 5s):
- post_edit_openapi_reminder.py: 改 apps/backend/app/routers/*.py
提醒重抓 OpenAPI 具体命令
(.venv/Scripts/python.exe scripts/ops/_export_openapi.py)
- post_edit_prompt_sync_reminder.py: 改 docs/ai/system-prompts/app*.md
提醒 3 步同步 (元信息 / 同步历史 / _INDEX.md 状态表)
settings.json 注册 2 个 hook 条目 (PostToolUse 末尾追加)。
spec-close.md 步骤 5 文档同步表:
- OpenAPI 行升级为具体命令 (避免手工同步漂移描述)
- 新增 docs/ai/system-prompts/app*.md 同步行
验证: stdin 模拟测试 3 场景全部符合预期 (匹配 router 输出 OpenAPI 提醒;
匹配 system-prompts MD 输出 prompt 同步提醒; 不匹配静默)。
详见 docs/audit/changes/2026-05-05__wave1_f2_1b_defense_hooks.md
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""PostToolUse hook: 编辑 backend router 后提醒重抓 OpenAPI
|
|
|
|
历史教训(2026-04-06 commit 779b2f6):
|
|
脚本 scripts/ops/_export_openapi.py 被 Claude Opus 4.6 误归档到 _DEL/,
|
|
导致 28 天内 docs/contracts/openapi/backend-api.json 与代码漂移
|
|
(137 paths stale → 实际 167 paths,缺 30 个端点)。
|
|
|
|
Wave 1 F2-1A 恢复脚本 + F2-1B(本 hook)建立防御机制,
|
|
任何 router 改动后提醒重抓,确保 OpenAPI 静态导出不再 stale。
|
|
"""
|
|
import json
|
|
import re
|
|
import sys
|
|
|
|
try:
|
|
data = json.load(sys.stdin)
|
|
except Exception:
|
|
sys.exit(0)
|
|
|
|
fp = (data.get("tool_input") or {}).get("file_path", "")
|
|
if not fp:
|
|
sys.exit(0)
|
|
|
|
rel = re.sub(r"^.*?NeoZQYY[/\\]", "", fp.replace("\\", "/"))
|
|
|
|
if re.search(r"^apps/backend/app/routers/.*\.py$", rel):
|
|
print(json.dumps({
|
|
"hookSpecificOutput": {
|
|
"hookEventName": "PostToolUse",
|
|
"additionalContext": (
|
|
f"[openapi-sync] 已编辑后端 router: {rel} — "
|
|
"如有新增/修改/删除端点,完成后须重抓 OpenAPI: "
|
|
"`.venv/Scripts/python.exe scripts/ops/_export_openapi.py` "
|
|
"(更新 docs/contracts/openapi/backend-api.json,避免静态导出 stale)"
|
|
)
|
|
}
|
|
}))
|