Commit Graph

2 Commits

Author SHA1 Message Date
cf14b840ef docs: 补齐文档状态分类 + 校正两轮代码改动后的失真
## 背景

上一次文档校订(b9b5ac0)之后又有两次代码提交(5194a96 / 8293282),
把 future-plan §1.1 整节变成了错的 —— 它还写着「档位没有生效点」
和「在 prepareInputTask 里加一次 activateSecurityProfile 调用」,
而后者正是被后来的收敛**否定掉的方案**。

## 新增 docs/zh/README.md(文档索引)

32 篇文档此前混着三种时态(当时实测 / 历史推演 / 设计规划),外观相同。
索引给出**状态分类与可信度规则**:

| 状态 | 能不能当事实用 |
|---|---|
| 已实现并部署 | ✅ 直接信 |
| 部分实现 | ⚠️ 只信标了"生效"的部分 |
| 设计 / 未实现 | ❌ 只能当设计意图 |
| 归档说明 | ❌ 不要改、也不要信 |

并写死**判据名可信度规则**:文档里的 `TestXxx` 不保证还存在。
给了核对命令,以及当前基线(27 条缺失的分布 —— 18 条属"设计未实现"类
文档的规划名、7 条是 §2.7.3 有意保留的历史对照表左栏、2 条属视频能力
未纳入契约)。判定标准:**在"已实现"类文档正文里找不到才是缺陷**。

## 重写 future-plan §1.1(已结案)

原节写的是错的方案。改成记录**真正的缺陷分三层**:

```
第 3 层(表面):activateSecurityProfile 零调用方
第 2 层:agent/core 在替 security 做策略决策
         (自己抠 security_profile / 自己选判定链 /
           自己写 Kind:"resident" 声明主体类别 —— 提权口子)
第 1 层(根因):security 缺少「输入接入点」
```

并补上「每 agent 一个实例」的最终形态(共享注册表 + per-agent 执行视图,
sessionProfile / longtimeProfile 两层,优先级 session > longtime 本身是安全语义)。

§〇「机制 ≠ 接线」表格里档位那一条从 🔴 改为 ✅。

## 各文档状态行

此前 14 篇缺状态行(runbook / 实测报告 / 计划类)。逐篇补上**符合实际内容**
的声明,而不是统一套一句。特别地:

- `commondev-design.md` 标题本就写「设计 · 未实现」→ 归到"设计"类
- `live-run-evidence-2026-10-04.md` → 明确标注"历史证据快照,不要用它的
  结论覆盖现在的实现判断"
- `legacy-issues.md` → 写明它与 future-plan 的分工(前者收已知问题,
  后者收能力缺失与零调用方)

## 正文里两处判据名漂移

- `TestBootCtxCloseAllIsReverseOrder` → 实际是
  `TestKernelStateCloseAllIsReverseOrder`(`BootCtx` 改名时判据跟着改的)
- `TestNilTypedBusSafety` → 标注为"规划名,仓库中不存在"

## 新增 §2.7.5 模块产物的实例化粒度

依赖图保证"设施已就绪",但没说该有几个实例 —— 这是独立决策。
记下 security 的两个答案:全局基线共享(否则插件声明对部分 agent 不生效)、
轮次状态 per-agent。并给出给未来新模块的两条判断标准。

## 安全文档

状态头补「架构形态」段(防火墙定位、per-agent 视图、两层档位);
接线状态表里 `ActivateProfile` 从 🔴 改为 ✅(2026-10-31 接通)。

## README

文档列表加索引与 future-plan 入口 —— 此前从 README 找不到 docs/zh 的任何指引。

## 核对

- docs/zh 32 篇全部有状态行
- 索引里列的文档全部存在,无遗漏
- 分类与各文档自述一致(逐篇抽查)
- go build 仍通过(纯文档改动)
2026-10-31 07:50:58 +08:00
260715573d docs: 补站点基础设施运维手册(不含任何敏感信息)
本项目的生产部署是「多站点 + 统一入口 + 两层 TLS 终止」,此前只存在于
人和 agent 的临时记忆里 —— 换个人接手要重新摸索一遍,我这次就因此在
同一类问题上反复踩坑(误报「已修好」两次、并造成一次全站 TLS 故障)。
把机制写下来。

## 内容

- §0 拓扑:两层 TLS 终止(公网入口机 + 内网网关机),并指出「改一层 ≠ 改完」
- §1 部署一个静态站的完整流程(内网 drop-in → 证书 → 公网 drop-in)
  含若干踩过的坑:为何用 drop-in 而非改生成的主配置、
  为何静态站必须 `try_files ... =404`(回落 index.html 会让不存在的路径
  返回 200,监控与链接检查全都「通过」)、反代为何要关缓冲攒包
- §2 验收:**必须用 `--resolve` / `--host-resolver-rules` 走真实公网路径**。
  内网 DNS 会把域名解析到内网机,直连 curl 测的是另一条路 ——
  这正是我此前误报「已修好」的根因。附 Playwright 片段
  (强调 `ignoreHTTPSErrors` 必须为 false,否则等于没测)
- §3 证书续期:cron → 续期 → 钩子(内网 reload + 推公网),全自动;
  以及**推送脚本必须保留的四道防线**(见下)
- §4 管理后台接口:先取 schema 别猜字段名;路由表是**整表替换**;
  写完要轮询验证(apply 是异步的);系统管理的分组不能手工加条目
- §5 已知陷阱与事故复盘(6 条,均来自本项目真实故障)
- §6 给 agent 的直读入口(llms.txt / 每页 .md,含两个必踩的坑)
- §7 脱敏约定

## 关于事故复盘

§5.1 记录了我这次造成全站 TLS 故障的根因:把 acme.sh 的证书目录名
(**字面含 `*`**)交给了 glob,glob 展开后误匹配到别的证书并写进全局默认
证书。由此提炼两条硬规则:字面 `*` 绝不用 glob;写生产前必须断言
「读到的是什么」。§5.3 记录了「删证书记录前先查全盘引用」——
我漏了 /opt/ 导致推送脚本失效。

## 脱敏

全文无真实域名、IP、token、云 AK/SK、实例 ID 与内部组件名,
一律占位符(`<PUBLIC_IP>` / `<GATEWAY_DATA>` 等),
取值指向本机私有笔记与基础设施面板。已用脚本对 8 类模式做终审扫描:
仅 `127.0.0.1` / `0.0.0.0` / `example.com` 这类结构性取值保留。

技术论断均与线上实际配置或上游源码逐条核对(drop-in 指令、钩子行为、
后台接口语义),文档本身不构成新的未验证声明。
2026-09-24 15:04:02 +08:00