# Wiki Log

Append-only 时间线。每条记录：日期 + 动机 + 动作 + 产物链接。

## 约定

- 格式：`### YYYY-MM-DD HH:MM — <一句话动机>`
- 每条必带：`**Action:**` / `**Produced:**` / `**Sources consulted:**`
- 只写派生产物相关的事，不写常规代码改动（那归 git log）

---

### 2026-04-22 17:45 — wiki 骨架起种

**Action:** 按 Karpathy llm-wiki 范式起 wiki/ 骨架，简化为 entities / concepts 两类

**Produced:**
- brain/wiki/index.md
- brain/wiki/log.md（本文件）
- brain/wiki/entities/epsilon.md
- （concept 页 exposure-ordering / restricted-dsl 暂留下次会话补）

**Sources consulted:**
- vault.json（xiangqin 凭证声明）
- src/xiangqin/query.py（付费排序 + DSL 落地）
- src/xiangqin/dsl.py（WHERE 解析 + 白名单）
- systemd/xiangqin.service
- brain/sop/services/{deploy,restore}.md
- docs/design.md, docs/ops.md
- Karpathy llm-wiki gist: https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f

### 2026-04-22 18:00 — 对内资产统一到 brain/

**Action:** 根目录 6 个子目录 git mv 到 `brain/`：decisions / objectives / plan / scenarios / sop / wiki。根目录只保留对外 `docs/`、代码 `src/ test/`、产物 `scripts/ systemd/`、门面 `README.md` / `SKILL.md` / `CLAUDE.md`。

**Produced:**
- `brain/` 统一容器（6 子目录）
- CLAUDE.md 目录地图改为 brain/ 视角
- README.md / docs/security.md / brain/wiki/ 内部引用全部更新到 brain/ 前缀

**Sources consulted:**
- Karpathy llm-wiki 范式

### 2026-04-23 18:00 — M4 pivot：付费置顶下线 → 虚拟信封

**Motive:** 两套付费并存（曝光 + 信封）难以解释且曝光对 agent 时代价值低；决定一刀切

**Action:**
- ADR `2026-04-23-drop-exposure-system` 拍板
- 删 src/xiangqin/exposure.py + payment/ 整目录
- DB `_drop_exposure_tables` 迁移（epsilon 部署时执行）
- CHANGELOG Unreleased 段记 Removed

**Produced:**
- brain/decisions/2026-04-23-drop-exposure-system.md
- brain/decisions/2026-04-23-m4-mail-model-touchreach.md（虚拟信封架构）

**Sources:** 老板 2026-04-23 晚对话；M4 实装跑通后反思

### 2026-04-23 21:30 — 研发发布 SOP 骨架 + alpha staging 上线

**Motive:** 只有一台生产（epsilon）+ 手动 deploy 太脆；要能真试验后再上生产

**Action:**
- 建 alpha staging（aliyun ECS i-bp17gxpssxlqi9ig7xxh，1C1G t6 按月 ~¥35）
- 参数化 scripts/provision.sh / deploy.sh 支持 epsilon | alpha | 任意 IP
- 写 3 个 GHA workflow：ci / deploy-staging / release（test gate + tag 触发 PyPI + skills.sh + ClawHub + epsilon chain）
- ADR `2026-04-23-release-deploy-sop`

**Produced:**
- brain/decisions/2026-04-23-release-deploy-sop.md + 补丁段
- brain/sop/release-flow.md / services/deploy.md / services/publish.md / services/hotfix.md / emergency/rollback.md
- 3 个 GHA workflow yml

### 2026-04-23 23:00 — 三 release（0.4.2 / 0.4.3 / 0.4.5）+ SKILL.md 泄露紧急修复

**Motive:** 用老板审核流程实战；SKILL.md 里暴露了 vault 内部实践细节（ClawHub / skills.sh 对外可见）要紧急修

**Action:**
- 0.4.2：workflow 重构 + 跳过 0.4.1（ClawHub metadata patch 抢占）
- 0.4.3：紧急删 SKILL.md 里 "和 vault 的关系" 整段 + 去私有仓链接 + 通用化去 Claude Code 专属措辞
- 0.4.5：ruff format fix + systemd logs ReadWritePaths + deploy.sh --no-group dev + UV_HTTP_TIMEOUT 兜底

**Produced:**
- 三个 release tag（v0.4.2 / v0.4.3 / v0.4.5）端到端 PyPI + skills.sh + ClawHub + epsilon
- 顺带发现 epsilon PHONE_SALT 未配（issue #003 + 当晚修）

**Sources:** 老板 2026-04-23 对话（SKILL.md 通用化 + PyPI/ClawHub 对外不暴露内部细节）

### 2026-04-23 凌晨 — Chaos Engineering M1-M6 + M5 metrics 全落地

**Motive:** 老板"最怕做了放那儿，真要用时才发现早失效了"

**Action:**
- M1 backup freshness（hourly）
- M2 backup integrity（daily）
- M3 restore drill on GHA runner（weekly 异地演练）
- M4 装机 drill + M6 真数据迁移 drill（monthly 按量 ECS）
- M5 access log middleware + 聚合脚本 + 孤儿分支 metrics-data
- README 徽章墙 7 条
- 对外 docs/reliability.md

**暴露 2 个真 bug**：M4 第一次挂在 SSH keepalive；M6 第一次挂在 aliyun RunInstances 超时 → chaos engineering 证明已经在起防腐作用

**Produced:**
- 7 条 GHA workflow
- brain/blueprints/chaos-engineering.md（内部设计）
- docs/reliability.md（对外）
- issue #005 closed + archive；issue #008 M6 flaky 跟踪

### 2026-04-23 凌晨 — 跨项目工具修复（vault who-uses）

**Motive:** 发现 vault CLI 默认 workspace 写 ~/Documents 对 macOS 开发者不合理，第一反应说"是 vault 项目的事"被老板批评

**Action:**
- 跨项目到 ~/vault 改 src/vault/cli.py
- 加 VAULT_WORKSPACE env var 支持
- 更新 5 台 ECS resource metadata：去 current_use（反查取代）+ 加 renewal: yes/no + epsilon 标 migration_target_type=ecs.u1-c1m2.large

**Produced:**
- vault 项目 commit
- 全局 memory feedback_all_projects_mine（不推卸"别的项目的事"）
- 全局 memory feedback_issue_first_then_fix（发现问题先建 issue 再解决）

### 2026-04-23 凌晨 — 生产就绪 roadmap 整理（O3 / O4）

**Motive:** 老板问"生产就绪还缺啥" → 全面 audit

**Action:**
- brain/blueprints/production-readiness.md 总览
- 15 个 issue（#009-#023）覆盖 P0 合规 / P1 商业 / P2 体验 / P3 运营
- 配合本次 audit 把 objectives / plan / scenarios / wiki 全部 sync 到当前方向
- 老 O1 / O2 / M1-M4 mv archive（不改写原文）
- 新 O3 / O4 / O5 + M5 / M6 / M7 / M8

**Produced:**
- brain/blueprints/production-readiness.md
- 15 新 issue + 主 index P0/P1/P2/P3 分组
- objectives O3 / O4 / O5 + archive
- plan M5 / M6 / M7 / M8 + archive
- scenarios index 刷新到虚拟信封方向

**新规则入 memory：**
- feedback_brain_docs_sync（brain/ 所有文档主动同步 + 目录结构可提议改造）
- feedback_dont_manage_user_time（不管老板时间，不说"凌晨了睡吧"）

## [2026-04-23 20:10] lint | 加 wiki/raw/ 层（Karpathy 三层架构对齐）

**Query / Trigger:**
老板指出 brain/wiki/ 少了 Karpathy llm-wiki 范式里的第 1 层"raw sources"。当前只有 entities + concepts（派生层），没有不可变的原始事实层。

**Changes:**
- 新建 `brain/wiki/raw/` 目录 + `raw/index.md`（命名规则 + 规则：immutable / captured_at / source / LLM 只读）
- `raw/karpathy-llm-wiki-pattern.md` —— Karpathy 原始 gist 本地存档
- `raw/clawhub-security-scan-xiangqin-2026-04-23.md` —— v0.5.4 ClawHub 扫描结果原文（task #48 live 查询产物）
- 新派生 `concepts/clawhub-security-scanning.md` —— 从上面 raw 派生的机制 concept（VirusTotal + OpenClaw 双扫 / 5 维度 / 修复路径）
- `wiki/index.md` 改成三层架构说明

**学到：**
raw 层的价值是把**外部快速变化的事实**冻结在时间点（captured_at），派生层引用 raw 做解读；未来如果事实改了，建新 raw 而不改老的，保留历史纵深。

## [2026-04-23 20:30] lint | raw 搬家 brain/wiki/raw/ → brain/raw/

**Trigger:**
老板指出我之前把 raw 塞在 wiki 子目录里跟 Karpathy 原文冲突（他的架构是 raw 和 wiki 平级独立两层，不是嵌套）。

**Changes:**
- `git mv brain/wiki/raw/` → `brain/raw/`（整个目录搬出）
- `brain/wiki/concepts/clawhub-security-scanning.md` 里 `../raw/xxx` 改成 `../../raw/xxx`
- `brain/wiki/index.md` 删 raw 段 + 改引用路径
- `brain/raw/index.md` 强化"什么进 raw vs 不该进"规则 + 提供明确反例
- `xiangqin/CLAUDE.md` 目录地图加 `brain/raw/` 行

**wiki 内部分类决定：保留 entities/ + concepts/ 目录**（不扁平化）。理由：规模长期 scale 目录好导航；我们主要在 IDE + grep 里用，不依赖 Obsidian graph view；`[[wiki-link]]` 不关心路径的价值对我们没落地。

## [2026-04-23 20:55] ingest + lint | 产品设计维度落地：prd/ + 分发渠道调研

**Trigger:**
老板意识到 brain/ 缺产品设计（product design）层，同时提出分发渠道命名不对称问题（ClawHub 中文 "相亲" vs skills.sh 英文 `xiangqin`）。

**Steps:**
1. 派 agent 调研产品设计方法论（业界文档类型 / 哪些是小团队刚需 / YAGNI 边界）
2. 采纳 agent 方案 A：新建 `brain/prd/` 单一分区（不拆 user-journey / wireframes / 等子目录）
3. 写 PRD-001 实名认证草稿 + 老板 approve
4. 派 agent 深度调研 ClawHub + skills.sh 审核/搜索/画像
5. 存 agent 报告到 raw/ + 写 concepts/distribution-channels.md 派生解读 + 写 PRD-002 执行策略

**Produced:**
- brain/prd/ 分区（index + _template + PRD-001 approved + PRD-002 draft）
- raw/distribution-channels-research-2026-04-23.md（agent 调研快照）
- concepts/distribution-channels.md（两渠道对比 + 结论）
- issue #030 tracking

**学到：**
产品设计维度跟技术维度（blueprints / decisions）是并行的两条线。PRD 一对多 FEAT：一个 PRD 拆出多个 FEAT-NNN 由 features/ 承载。scenarios/ 继续承载用户叙事，不跟 PRD 重复。
