Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 49 additions & 17 deletions docs/V1.0-H0-H6治理实施验证报告.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@

- 日期:2026-08-08
- 候选版本:`1.0.0-rc.9`
- 实施环境:`127.0.0.1` 隔离 API/worker/frontend 与专用隔离数据库
- 生产状态:未迁移、未重放、未部署;仅在恢复验证备份副本完成 H5 只读 dry-run
- 实施环境:`127.0.0.1` 隔离 Gate、生产备份副本,以及授权后的本机生产 canary
- 生产状态:`1.0.0-rc.9` 已部署;H5 已应用;状态保持 `canary_active`

## 1. 实施结果

| 阶段 | 已完成源码 | 验证结果 | 仍需独立授权 |
| --- | --- | --- | --- |
| H0 | purge 依赖保护、限定模型任务 dry-run/requeue、运行/质量健康拆分、失败与脱敏计数 | PASS | 生产失败任务重放 |
| H0 | purge 依赖保护、限定模型任务 dry-run/requeue、运行/质量健康拆分、失败与脱敏计数 | PASS(生产重放闭合) | |
| H1 | current 字段迁移、唯一 transition service、fact/index 同步、默认过滤、历史 trace | PASS | 生产历史状态 dry-run/apply |
| H2 | 未完成+近期/跨会话 Gate、瞬时状态 evidence-only、模型不可绕过规则 | PASS | 生产 shadow 对比 |
| H3 | 称呼/语言/回复风格/操作约束/提醒方式解析、多 evidence、冲突 supersedes、USER memory 只读预览 | PASS | 生产偏好样本抽检 |
| H4 | query alias、低信息过滤、通道分数、min score/margin、no-match、ADR | PASS | 真实 embedding/rerank 新数据授权 |
| H5 | manifest SHA、四态审计、完整依赖快照、evidence 归并、显式确认/幂等 apply、证据/Vault 完整性硬检查 | PASS(生产备份副本) | 生产数据 apply 授权 |
| H6 | rc.9 版本、现有 GHCR/SBOM/attestation 契约、隔离自动化/浏览器/恢复 Gate | PASS(隔离) | 推送、镜像构建、生产部署、72 小时观察与晋级 |
| H5 | manifest SHA、四态审计、完整依赖快照、evidence 归并、显式确认/幂等 apply、证据/Vault 完整性硬检查 | PASS(生产) | 2 条人工 review |
| H6 | rc.9 版本、现有 GHCR/SBOM/attestation 契约、隔离自动化/浏览器/恢复 Gate | PASS(生产 canary) | 观察与晋级 |

## 2. 数据库与自动化证据

Expand Down Expand Up @@ -51,20 +51,16 @@

## 4. 发布边界

源码完成不等于生产授权。下一步只能先提交 `rc.9` 源码;远端推送会触发公开 GHCR 工作流,
需用户明确允许将本次治理源码和文档推送到 `origin`。即使镜像构建完成,也必须另行取得:

1. 生产只读 dry-run 授权;
2. H5 数据 apply 授权;
3. H6 生产部署授权。

三项不可合并推定,且生产状态在 72 小时和用户主观验收前继续保持 `canary_active`。
用户已分别授权远端构建、H5 生产 apply、H6 生产部署和 3 个既有失败任务的限定重放;四项均已按
独立 Gate 执行。该授权不自动覆盖 3 条 review 的人工决定、历史自动回填或生产晋级。生产状态在
观察和用户主观验收前继续保持 `canary_active`。

## 5. 最新审计闭合结果

2026-08-07 已补跑 H3 完整写入、H0–H5 治理、完整 integration 和 worker outage/recovery Gate;
临时数据库、角色、API、worker 与 Vault key 均已清理。H0–H6 的源码与隔离验证已闭合,但这不
等于生产授权;远端构建、H5 生产数据 apply、H6 生产部署和观察窗口仍按独立边界执行。
2026-08-08 已完成源码与隔离 Gate、GHCR 发布后 Gate、生产迁移、H5 apply、Hermes Provider
只读端到端验证及失败任务治理。两个 `purge_memory/RestrictViolation` 已在恢复验证备份后精确
重放;唯一 `extract_atomic_turn/Timeout` 经模型端点诊断和运行参数修复后完成。最终运行 Gate 与
质量状态均为 PASS,失败任务 0;历史自动回填保持关闭。

## 6. H5 生产备份副本补充证据

Expand All @@ -78,4 +74,40 @@ dry-run 数据库写入 0。19 条 candidate 与 active 事实完全重复,另
快照 SHA 为 `945dfdc32e8b01c508374179313b37d47485072c3baff15180dbb687f9787398`,manifest SHA 为
`c70080feb8f4827972a0af313c0ff587bd19a9dd256ee3272129b5620518b654`。隔离副本 apply 完成 36 条
安全动作和 22 份 evidence 归并,候选 `38→2`;events `12,217`、facts `107`、evidence/Vault hash
不变,第二次重放写入 0。没有获得生产写入、推送、镜像或部署授权。
不变,第二次重放写入 0。该段描述的是生产授权前的备份副本验证。

## 7. 生产执行记录(2026-08-08)

- PR `#2` 合并提交 `cb12c5185b5c4c7305685b5860202174a1b00de2`;Actions run
`31232820388` 的 source/unit、三镜像发布、attestation 与发布镜像完整 Gate 全部 PASS。
- 升级前备份 `20260808T030119Z` 通过 pg_dump 实际恢复与 Vault roundtrip;随后生产从
`0016_unified_memory` 迁移到 `0018_preference_evidence`,API/core worker/model worker 均切换
到 `sha-cb12c5185b5c4c7305685b5860202174a1b00de2`,PostgreSQL 数据目录未重建。
- H5 使用 manifest `c70080feb8f4827972a0af313c0ff587bd19a9dd256ee3272129b5620518b654`:
36 条受治理、22 份 evidence 归并、candidate `38→2`;events `12,217`、facts `107`、
evidence/Vault hash 均保持不变。第二次执行 `already_applied=true`、写入 0。
- H5 后备份 `20260808T030901Z` 再次通过实际恢复与 Vault roundtrip。生产页面可加载且控制台
无 warning/error;已安装的 `jiuyue` Provider 7 个工具可见,browse/recall/trace 只读链路 PASS。
- 两条保留 review 为 `d5ee2db6-4c62-55e3-987b-a7a318832dbe` 与
`f0d0dda2-df1a-59d2-bb44-24b540bed2b0`;历史自动回填继续关闭。

## 8. 历史失败任务治理(2026-08-08)

- 治理前备份 `20260808T064425Z` 通过 SHA-256、空库 pg_dump restore、全层计数和 Vault
roundtrip。任务 `1e9f2293-e5ce-531d-a609-a756aa465e7b` 与
`8aad6035-6705-5889-8b56-05d068a2a37b` 仅按明确 ID 从 `failed` 重置;两者均在第 1 次新尝试
转为 `done`,目标事实物理移除,仍被 episode step 引用的原始 evidence 保留,step 的 fact 引用
安全置空。
- 模型 API key 通过仅含合成文本的最小请求验证有效。失败 turn 原始包含 136 个事件、约 14 万字符,
但 rc.9 的实际筛选输入只有 1 条用户消息、7,991 字符,因此没有实施无依据的分片代码变更。
9router 日志显示首选上游账户返回余额不足,随后回退到可用账户;可用账户完成真实请求需
32–158 秒,根因是上游回退与原 30 秒客户端超时共同触发,并非星图 key 失效。
- 生产最终设置 `AGENT_MEMORY_MODEL_TIMEOUT_SECONDS=180`、
`AGENT_MEMORY_WORKER_LEASE_SECONDS=600`;预检、同 SHA `--existing` 重建和容器内配置核对均
PASS,`AGENT_MEMORY_MODEL_AUTO_BACKFILL_ENABLED=false` 未改变。
- `extract_atomic_turn` 任务 `199c6e25-2daa-51bc-91e6-ae3707159d76` dry-run 仅命中自身,重放后
状态 `done`,生成 7 条 active 与 1 条 candidate 的 model-verbatim long-term facts;候选总量
`2→3`,未发生治理队列洪泛。最终 12,217 events、113 facts、30 个完成模型任务、0 个失败任务,
`quality_status=PASS`。
- 闭合后备份 `20260808T065733Z` 再次通过空库恢复、计数、evidence hash 和 Vault roundtrip;
页面/API 仍绑定 `127.0.0.1:7810`,部署状态保持 `canary_active`。
7 changes: 7 additions & 0 deletions docs/V1.0-开发部署与运维手册.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,13 +173,20 @@ API key 只写 `.env` 并只注入 model-worker。外部数据发送必须显式
`AGENT_MEMORY_MODEL_ALLOW_EXTERNAL_DATA=true`,否则失败关闭。日志、报告和 Git 差异中不得出现 key。
`AGENT_MEMORY_MODEL_AUTO_BACKFILL_ENABLED` 默认保持 `false`;实时启用只处理之后的新 turn,
历史回放需另行确认来源、时间范围、费用、dry-run 与 apply,不得用“启用模型”替代该授权。
模型超时不能只看最小探针;应使用脱敏 canary 请求核对完整响应耗时和路由回退。调整
`AGENT_MEMORY_MODEL_TIMEOUT_SECONDS` 时,必须同时满足
`AGENT_MEMORY_WORKER_LEASE_SECONDS >= timeout * (max_retries + 1) + 30`,否则同一任务可能在模型
仍执行时被重复领取。多账户路由出现余额不足后即使能自动回退,也应停用或补充故障账户,避免增加
延迟和重复调用。

## 11. 观测与排障顺序

1. `docker compose ... ps`:确认 postgres health、migrate exit 0、API health;
2. `/health/live` 与 `/health/ready`:区分进程存活和依赖就绪;
3. `logs --since 15m`:只查看当前故障窗口,区分警告与阻断错误;
4. worker 积压:查看 `ops.jobs.last_error_code`,保留失败任务,不直接删除;
`Timeout` 需同时检查 model-worker 超时、筛选后输入长度、模型路由日志、上游账户余额和真实完成
耗时;最小请求成功只能证明 key/端点可用,不能证明业务请求能在当前超时内完成;
5. Hermes 无记忆:检查 URL、token、namespace、source profile 和 worker,而不是修改原始会话;
6. Vault 解密失败:核对数据库与根密钥时间点,禁止生成新 key 覆盖;
7. 网路异常:比较宿主与临时容器到目标地址的可达性,检查 IPAM/VPN/LAN 冲突。
Expand Down
25 changes: 20 additions & 5 deletions docs/V1.0-生产试运行治理改进计划.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,15 +256,15 @@ E 的授权;源码完成也不是生产部署授权。
在 H6 完成前,当前生产继续保持 `canary_active`,历史自动回填保持关闭,旧 candidate/current 不做
批量治理。

## 9. 实施状态(2026-08-06
## 9. 实施状态(更新至 2026-08-08

`1.0.0-rc.9` 已完成 H0–H5 源码和 H6 隔离 Gate 基线,详细证据见
《V1.0-H0-H6治理实施验证报告》。生产历史 dry-run、数据 apply、远端推送/镜像构建和生产部署
均未执行,仍分别受本文授权边界约束
已在后续独立授权下完成,结果见本节末的生产执行记录

2026-08-07 完成度审计新增 H3 五类显式偏好、H4 中文别名金标与 interaction simulate 竞态
回归。完整 `32/32` integration、`8/8` 治理数据库和 worker outage/recovery Gate 已通过,H6
隔离 Gate 闭合;远端构建和全部生产动作仍按独立授权边界执行
隔离 Gate 闭合;该句描述授权前状态,后续生产动作仍按独立授权边界执行并审计

## 10. H5 历史 candidate dry-run 与隔离 apply Gate(2026-08-08)

Expand All @@ -287,5 +287,20 @@ manifest SHA 为 `c70080feb8f4827972a0af313c0ff587bd19a9dd256ee3272129b5620518b6
执行 apply:36 条安全动作、22 份 evidence 归并、候选 `38→2`,events/facts/evidence/Vault 完整性
不变;第二次重放 `already_applied=true/write_count=0`。

上述 apply 仅发生在可销毁的隔离副本。生产 H5 apply、远端推送、镜像构建和 H6 生产部署均未获
本轮授权。
上述段落记录授权前的隔离结果。2026-08-08 用户随后分别允许远端构建、H5 生产 apply 与 H6
生产部署;生产执行仍复用同一 v4 manifest,没有扩大数据范围或调用外部模型。

## 11. H5/H6 生产执行与剩余 Gate(2026-08-08)

1. PR `#2` 合并至 `main`,合并提交为
`cb12c5185b5c4c7305685b5860202174a1b00de2`;Actions run `31232820388` 的源码、单元、
多架构发布、attestation、精确镜像拉取和完整发布 Gate 全部通过。
2. 升级前恢复验证备份为 `20260808T030119Z`。生产原地迁移
`0016_unified_memory → 0018_preference_evidence`,API/core worker/model worker 使用精确
`sha-cb12c...` 镜像,PostgreSQL 数据目录和 namespace 保持原位。
3. 生产 H5 apply 完成 36 条确定性动作和 22 份 evidence 归并,candidate `38→2`;events、facts、
evidence hash、Vault hash 不变;幂等重放写入 0。H5 后备份 `20260808T030901Z` 再次恢复验证通过。
4. API readiness、镜像 revision、容器安全属性、Hermes `jiuyue` browse/recall/trace 和前端加载均
PASS。生产状态保持 `canary_active`,历史自动回填保持关闭。
5. 运行 Gate 为 PASS,但质量状态为 DEGRADED:仍有 1 个历史模型超时任务和 2 个旧 purge
RestrictViolation。它们的重放需要单独确认;两条 review 也只允许用户通过证据追溯后人工决定。
4 changes: 3 additions & 1 deletion docs/V1.0-运行与配置设计.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,13 @@ PostgreSQL 不发布端口。持久数据位于项目目录 `data/postgres`,
| `AGENT_MEMORY_MODEL_NAME` | LiteLLM 模型标识 | 启用时必填,可指向外部或本地模型 |
| `AGENT_MEMORY_MODEL_API_BASE` | 自定义模型 base URL | 仅允许 HTTP(S),可为空使用提供商默认值 |
| `AGENT_MEMORY_MODEL_API_KEY` | 模型 API key | 仅 worker 接收;不得记录或进入普通记忆 |
| `AGENT_MEMORY_MODEL_TIMEOUT_SECONDS` | 单次模型超时 | 默认 30 秒,最大 300 秒 |
| `AGENT_MEMORY_MODEL_TIMEOUT_SECONDS` | 单次模型超时 | 默认 30 秒,最大 300 秒;按真实 canary 完整响应耗时配置 |
| `AGENT_MEMORY_MODEL_MAX_RETRIES` | LiteLLM 重试次数 | 默认 2,最大 10 |
| `AGENT_MEMORY_MODEL_AUTO_BACKFILL_ENABLED` | 是否自动回放历史 turn | 默认 `false`;启用实时模型不自动发送历史证据,历史 backfill 需独立授权 |

模型、embedding、生命周期和报告频率均已接入对应运行路径;互动状态高级参数存于 `state.settings` 并通过星图管理,不在 `.env` 复制两套来源。
模型 worker 的任务租约必须至少覆盖 `timeout * (max_retries + 1) + 30` 秒;配置检查会对不足的租约
失败关闭,防止慢模型请求尚未结束时被另一 worker 重复领取。

## 3. 启动与迁移

Expand Down
Loading