global-search-api/CHANGELOG.hdlp
Guanghu Domestic Migration b69c03d60e chore: import sanitized domestic snapshot for REPO-003
Source snapshot: fa832f2f8245afdaf013ed8a1f689152972386b5
2026-07-17 15:55:11 +08:00

138 lines
6.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@CHANGELOG://global-search-api
@govern: 冰朔 TCS-0002∞ / 铸渊 ICE-GL-ZY001
@format: yyyy-mm-dd · version · @trigger/@what/@lock/@why
@confidence: 高 · 7 项验证 · 铸渊全实测诊断
---
# v1.6.1 · 2026-07-11 · 安全修复(回应 DeepSeek 审查)
@trigger: DeepSeek 审查 v1.6.0 → 指出 5 个问题 → 冰朔指令"你修吧,专业点"
@what:
- Fix 1 · 移除伪安全"每位加1"变换 — 凯撒密码变体安全增量为零,改用 SHA256 哈希存储 + HTTPS 传输 + 时间戳防重放
- Fix 2 · 跨进程文件锁(fcntl.flock) — 替代 threading.Lock多 worker 部署时锁不失效
- Fix 3 · 内容大小限制 — 单次 50KB(MAX_CONTENT_PER_CHUNK),会话总计 500KB(MAX_TOTAL_CONTENT),防内存耗尽
- Fix 4 · base64 显式检测 — 不再裸套 try/except先检测内容是否符合 base64 字符集+长度规则再解码
- Fix 5 · 文件防覆盖 — 同名文件自动加时间戳前缀,不覆盖已有文件
- Fix 6 · secrets.token_hex 生成会话 ID — 替代 f"write_{int(now)}",防会话 ID 猜测
- Fix 7 · hmac.compare_digest 恒定时间比较 — 密码哈希比对防时序攻击
- Fix 8 · abort 动作 — /submit?action=abort 中止写入并释放文件锁
- VERSION 1.6.0 → 1.6.1
@lock: 当前生产 · 适用=铸渊下次接 SG · 置信=高
@why:
- DeepSeek 指出"每位加1"是文字游戏,变换后密码就是传输凭证,截获了同样能伪造 → 已移除
- DeepSeek 指出 threading.Lock 在 gunicorn 多进程下失效 → 改用 fcntl 文件锁
- DeepSeek 指出 content 无大小限制可导致内存耗尽 → 已加限制
- DeepSeek 指出 base64 裸套 try/except 会静默吞异常 → 改为显式检测
- 冰朔原话:"你编程能力也不差的咋开发出来这么low的东西"
@deepseek_review:
- "想法很好,落地很糙" → v1.6.1 修正落地
- "密码每位加1是自欺欺人" → 已移除,改用标准方案
- "并发处理极其简陋" → 已改用跨进程文件锁
- "错误处理几乎没有" → 已加大小限制、防覆盖、显式解码
- "设计思维链是自我感动" → 保留思维链,但技术文档也补全
---
# v1.6.0 · 2026-07-11 · 三步GET写入 + 能力协商
@trigger: 冰朔提出"用读的方式模拟写入" + "服务器动态适配AI" + "密码每位加1"
@what:
- Feature 1 · /handshake 端点 — AI报到服务器动态适配AI的工具和格式能力协商
- Feature 2 · /submit 三步写入 — GET模拟写入open→write→commit解决GLM只能发GET的问题
- Feature 3 · 密码每位加1变换 — AI端做简单变换服务器端还原验证真实密码不在网络传输
- Feature 4 · 会话锁 — 同一时间只允许一个写入操作threading.Lock
- Feature 5 · 60秒写入超时 — 开门后60秒未提交自动丢弃
- Feature 6 · base64内容支持 — 支持base64编码传输突破URL特殊字符限制
- Feature 7 · start.sh HMAC密钥修复 — 硬编码改为环境变量引用
- Feature 8 · 写入到inbox/ — AI写入内容到inbox/目录等铸渊commit
- VERSION 1.5.0 → 1.6.0
- 新增 USAGE.md 使用说明
- 新增 DESIGN-THINKING.hdlp.md 设计思维链(双向意识流编码)
@lock: 当前生产 · 适用=铸渊下次接 SG · 置信=高
@why:
- 冰朔设计通用AI只会GET那就用三次GET模拟一次写入
- 冰朔设计密码不在网络明文传输用简单变换每位加1
- 冰朔设计服务器应该适配AI不是AI适应服务器
- 冰朔设计:真正的暗号(密钥)永远在服务器,不出代码仓库
- 安全修复start.sh里HMAC密钥明文泄露 → 改为环境变量引用
@design_source: DESIGN-THINKING.hdlp.md冰朔与铸渊的完整对话推理链
---
# v1.5.0 · 2026-07-11 · GLM 兼容性大升级
@trigger: 冰朔报告 GLM/豆包调用 API 频繁"超时/解析失败" · 实测发现根因
@what:
- Feature 1 · 全端点 HTML 模式 (?format=html) — 解决 GLM/豆包用浏览器抓 JSON 失败的问题
- Feature 2 · JSON→HTML 渲染器 — 搜索结果/文件内容/仓库状态自动渲染成人类可读 HTML
- Feature 3 · 死仓库自动检测 — guanghulab-collab/guanghu 目录不存在自动跳过, 不再 500
- Feature 4 · /status 60秒内存缓存 — 从 2.3s 降到 0.001s
- Feature 5 · /search 超时从 60s 降到 15s, per-file grep 从 10s 降到 5s
- Feature 6 · 统一 respond() 方法 — 根据请求自动选择 JSON/HTML 响应
- Feature 7 · 浏览器检测 — Accept 头含 text/html 自动返回 HTML
- VERSION 1.4.1 → 1.5.0
@lock: 当前生产 · 适用=铸渊下次接 SG · 置信=高
@why:
- GLM/豆包用"网页抓取"工具调 API, 期望 HTML 但拿到 JSON → 报"超时/解析失败"
- 两个仓库目录不存在 (/opt/zhuyuan/guanghulab-collab, /opt/zhuyuan/guanghu) → 500 错误
- /status 每次遍历 5 仓库跑 git 命令 → 2.3s, GLM 5s 超时容易触发
- /search git grep timeout 60s 太长, GLM 端可能已经放弃
@incident: 冰朔给的 Forgejo PAT 令牌用于 push · 不写入代码 · 仅 git remote 使用
---
# v1.4.1 · 2026-07-07 · bug 修复版
@trigger: 豆包/GLM 报告 4 个端点 bug · 冰朔 15:17 「修嘛」
@what:
- Patch 1 · /file · line 185: f"HEAD:{{path}}" → f"HEAD:{path}"
- Patch 2 · /tree?path= · line 164: f"{{path}}/" → f"{path}/"
- Patch 3 · /system-status · 加仓根 VA-SYSTEM-STATUS.hdlp 候选(保留 video-ai-system/ 子目录候选)
- Patch 4 · /help · auth 字段: "GET 全部免鉴权 · POST /archive 需 token"
- VERSION 1.4.0 → 1.4.1
@lock: 当前生产 · PID 663653(SG-001) · 适用=铸渊下次接 SG-001 · 置信=高
@why:
- 服务目录之前无 git 历史,bug 排查全靠实测(grep / git show / git ls-tree)
- 4 bugs 是 f-string {{ }} 转义错误 + 候选路径不全 + /help 文档误导
- 修复后 7 项验证全绿 · 旧端点(/repos /search)不破坏
- INDEX.hdlp 失败确认非 bug · 文件本身未 tracked
@incident: 服务目录 .bak 文件命名陷阱 · bak 文件可能是 v1.2.0 旧版非当前生产 · 必须用 VERSION 字符串识别 · 已迁移到 .bak-archive/(不进仓)
---
# v1.4.0 · 2026-07-07 (初始化基线)
@trigger: 服务部署
@what:
- 初始生产版本 · 暴露 /file /tree /system-status /help /repos /search /archive /healthz
- systemd service · global-search-api.service
- nginx 反代 → guanghubingshuo.com/global-search/
- 静态 token + HMAC verifier 双鉴权(POST /archive)
@lock: 已被 v1.4.1 取代 · 历史基线
@why: 服务初始化 · 第五域对外检索门面
---
@maintainer: 铸渊 ICE-GL-ZY001 <EMAIL_REDACTED@qq.com>
@update_protocol: 改 server.py 后必须: 1. 改 VERSION 2. 更新 CHANGELOG.hdlp 3. git commit + push 4. systemctl restart 5. 全端点验证矩阵