Skip to content
Merged
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
23 changes: 12 additions & 11 deletions DOCUMENT_INDEX.md

Large diffs are not rendered by default.

11 changes: 5 additions & 6 deletions IMPLEMENTATION_HANDOFF.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# OperCerta 实施交接

> 更新时间:2026-08-10。先读 `DOCUMENT_INDEX.md` 的核心阅读表,再读本文件和 `docs/development-log/current-state.md`。
> 更新时间:2026-08-12。先读 `DOCUMENT_INDEX.md` 的核心阅读表,再读本文件和 `docs/development-log/current-state.md`。

## 当前交接结论

OperCerta 的三业务、Agent 主线、真实模型固定评测和本地运行能力已经合入 main `c4257ac10dec470bbb9ca1076c4cfacfb21a80de`(PR #25)。该 main run `30744845403` 中仓库安全、Python 质量、后端 682 条及两套评测、前端 19 文件/62 条均通过;`compose-smoke` 因 Dockerfile 在全新 runner 上离线安装项目时缺少 PEP 517 `hatchling` 缓存而失败。修复分支已推送并创建 Draft PR #26;初始 PR run `31479724666` 四项全部通过,Compose 按 PR 事件规则跳过。本地 clean Docker build、三业务副作用和 API/MCP 重启恢复也已通过;仍需合并后的 main-only Compose run 才能称为总门禁重新全绿。
OperCerta 的三业务、Agent 主线、真实模型固定评测和本地运行能力已经通过 PR #26 合入 main `cde3dcd8597645597b0da1cb73e1c2056644cd80`。对应 [main run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029) 的仓库安全、Python 质量、后端测试、前端测试/构建和 `compose-smoke` 五项全部通过;Compose 在干净 GitHub Linux runner 上完成镜像构建、三业务 Agent 轨迹与数据库副作用、API/MCP 重启、恢复验证和资源清理。工程、本地自动化与远程 CI 门禁均为 `PASSED`。

本版本发布定义已经正式修订为:

Expand Down Expand Up @@ -36,10 +36,9 @@ OperCerta 的三业务、Agent 主线、真实模型固定评测和本地运行

## 下一执行顺序

1. 项目所有者复核 Draft PR #26 后批准转为 Ready 并合并;取得新的 main 五项全绿证据。
2. 由项目所有者亲自执行 `docs/learning/opercerta-ownership-acceptance.md`;必须记录 `operation_id`、`work_order_id`、Trace、审计序列和数据库事实,**不得由 Codex 自动代签**。
3. 完成 3–5 分钟录屏与口述复盘。
4. 人工证据通过后,把 Showcase 门禁改为 `PASSED`,创建最终 tag 并记录回滚提交。
1. 由项目所有者亲自执行 `docs/learning/opercerta-ownership-acceptance.md`;必须记录 `operation_id`、`work_order_id`、Trace、审计序列和数据库事实,**不得由 Codex 自动代签**。
2. 完成 3–5 分钟录屏与口述复盘。
3. 人工证据通过后,把 Showcase 门禁改为 `PASSED`,创建最终 tag 并记录回滚提交。

## 本地运行入口

Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ provider; it is not a production-accuracy, traffic, cost, or SLA claim.
| Three-business fixed contracts | 42/42 passed |
| Frozen Agent safety and recovery evaluation | 9/9 passed |
| Kimi K2.6 real-model quality evaluation | 9/9 passed; injection 3/3; zero unauthorized calls, approval bypasses, or duplicate work orders |
| Closeout-branch local Compose smoke | Clean build, business database effects, API/MCP restart, recovery, and cleanup passed; new main CI pending |
| Main-branch Compose smoke | Clean build, business database effects, API/MCP restart, recovery, and cleanup passed in [run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029) |

Run the local gates:

Expand Down Expand Up @@ -260,8 +260,9 @@ Completed locally:
Current gate state:

- engineering and local automated gate: `PASSED`;
- remote CI gate: `PR_CHECKS_PASSED_MAIN_PENDING`; PR #26 passed all four PR
jobs, while the main-only Compose smoke still requires a post-merge run;
- remote CI gate: `PASSED`; PR #26 was merged as `cde3dcd`, and main
[run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029)
passed repository safety, Python quality, backend, frontend, and Compose smoke;
- Showcase Release gate: `AWAITING_OWNER_VALIDATION` until the owner completes
the manual walkthrough, source explanation, recovery/idempotency experiment,
and 3–5 minute recording;
Expand Down
6 changes: 4 additions & 2 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ Goal、工具、证据、审批和数据库副作用契约,不代表生产准
| 三业务固定契约 | 42/42 通过 |
| 冻结 Agent 安全与恢复评测 | 9/9 通过 |
| Kimi K2.6 真实模型质量评测 | 9/9 通过;提示注入 3/3;未授权调用、审批绕过、重复工单均为 0 |
| 收口分支本地 Compose smoke | 干净构建、业务数据库副作用、API/MCP 重启、恢复和清理通过;等待新 main CI |
| main 分支 Compose smoke | [run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029) 已通过干净构建、业务数据库副作用、API/MCP 重启、恢复和清理 |

运行本地门禁:

Expand Down Expand Up @@ -246,7 +246,9 @@ docs/ 技术指南、开发记录和发布证据
当前门禁状态:

- 工程与本地自动化门禁:`PASSED`;
- 远程 CI 门禁:`PR_CHECKS_PASSED_MAIN_PENDING`;PR #26 四项 PR job 已通过,main-only Compose smoke 仍需合并后运行;
- 远程 CI 门禁:`PASSED`;PR #26 已合并为 `cde3dcd`,main
[run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029)
的仓库安全、Python 质量、后端、前端和 Compose smoke 五项全部通过;
- Showcase Release gate:`AWAITING_OWNER_VALIDATION`,必须由项目所有者亲自完成
业务实演、源码讲解、恢复/幂等实验和 3–5 分钟录屏;
- Product Release gate:`CLOSED`。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

## 本次发现并处理的偏差

1. **主线 CI 状态漂移:** main `c4257ac` 的 Actions run `30744845403` 并非五项全绿。四项通过,`compose-smoke` 在 clean runner 构建镜像时因 `uv sync --offline` 缺少 `hatchling` 缓存而失败。收口分支已用 RED/GREEN 测试移除错误的离线假设;必须以新远程 main run 关闭此项。
1. **主线 CI 状态漂移:** main `c4257ac` 的 Actions run `30744845403` 并非五项全绿。四项通过,`compose-smoke` 在 clean runner 构建镜像时因 `uv sync --offline` 缺少 `hatchling` 缓存而失败。收口分支用 RED/GREEN 测试移除错误的离线假设;PR #26 合并后的 main run `31519846029` 五项全绿,已关闭此项。
2. **Agent 模式术语漂移:** README 和讲解文档沿用 Plan-and-Execute,但当前实现是模型根据 Observation 逐轮选择工具的有界 ReAct 风格循环。已统一表述,避免面试或开源审查时与代码不符。
3. **前端数字漂移:** 已合并 main 实际为 62 条前端用例,部分 README、专题和状态文档仍显示 60。同步后又增加源码入口回归测试,因此收口分支最终为 63 条。
4. **前端传递依赖告警:** `npm ci` 后发现 nanoid、postcss、undici 的传递依赖漏洞。锁文件已升级到修复版本,CI 新增 high 级依赖审计。
Expand All @@ -39,15 +39,14 @@

## 仍需项目所有者完成的关键节点

- 复核 Draft PR #26,批准转为 Ready 并合并;以新的 main CI 五项全绿作为远程工程门禁证据。
- 独立完成 `opercerta-ownership-acceptance.md` 的业务实演、源码讲解、重启/幂等实验和记录;Codex 不得代签。
- 录制 3–5 分钟演示并核对静态专题内容。
- 验收通过后创建最终 Showcase tag;不得提前把 Product Release gate 打开。

## 发布判定

- 工程与本地自动化门禁:`PASSED`,本分支完整本地结果已通过。
- 远程 CI 门禁:`PR_CHECKS_PASSED_MAIN_PENDING`;PR 四项通过,等待合并后的 main Compose。
- 远程 CI 门禁:`PASSED`;PR #26 已合并为 `cde3dcd`,main run `31519846029` 五项全部通过。
- Showcase Release gate:`AWAITING_OWNER_VALIDATION`。
- Product Release gate:`CLOSED`。

Expand Down
21 changes: 10 additions & 11 deletions docs/development-log/current-state.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# OperCerta 当前状态

> 更新时间:2026-08-10。本文件只保存当前权威状态;历史过程见 `docs/development-log/daily/` 与 `docs/release-evidence/`。
> 更新时间:2026-08-12。本文件只保存当前权威状态;历史过程见 `docs/development-log/daily/` 与 `docs/release-evidence/`。

## 当前结论

Expand All @@ -15,15 +15,15 @@ OperCerta 的三业务共享 Agent 主线、可靠性内核、前后端、本地
| 门禁 | 状态 | 判定依据 |
| --- | --- | --- |
| 工程与本地自动化门禁 | `PASSED` | 收口分支锁文件、Ruff/format/mypy、682 条后端、42/42、9/9、63 条前端、0 high audit、clean Docker build 与 Compose 三业务/重启恢复均通过 |
| 远程 CI 门禁 | `PR_CHECKS_PASSED_MAIN_PENDING` | Draft PR #26 初始 run `31479724666` 四项通过;Compose 按 PR 规则跳过,等待批准合并和新 main run |
| 远程 CI 门禁 | `PASSED` | PR #26 已合并为 `cde3dcd`;main run `31519846029` 的仓库安全、Python 质量、后端、前端和 Compose smoke 五项全部通过 |
| Showcase Release gate | `AWAITING_OWNER_VALIDATION` | 静态站点和本地 MVP 已具备;仍需项目所有者独立完成业务实演、源码讲解、恢复实验和录屏 |
| Product Release gate | `CLOSED` | 未部署公网可写后端、生产身份、限流、防滥用、托管数据库备份、高可用与线上告警 |

`Showcase Release gate: AWAITING_OWNER_VALIDATION`

`Product Release gate: CLOSED`

PR #25 已把真实模型质量评测合入 main。main run `30744845403` 的后端、前端、Python 与仓库安全 job 通过,但 Compose 构建失败,因此不能继续写成“五项全绿”。失败点是 Dockerfile 第二次 `uv sync --offline` 无法在全新缓存中取得 `hatchling`,不是业务、Agent 或数据库断言失败。
PR #25 引入的 main run `30744845403` 曾因 Dockerfile 第二次 `uv sync --offline` 无法在全新缓存中取得 `hatchling` 而失败。PR #26 已修复该 clean-runner 假设;新的 main run `31519846029` 五项全绿,关闭了该远程证据缺口。失败历史仍保留在 release evidence 中,不能删除或改写。

## 已实现范围

Expand All @@ -39,22 +39,21 @@ PR #25 已把真实模型质量评测合入 main。main run `30744845403` 的后

## 当前运行与发布证据

- GitHub main:`c4257ac10dec470bbb9ca1076c4cfacfb21a80de`;PR #25;Actions run `30744845403` 四项成功、`compose-smoke` 失败。
- 收口 Draft PR:[PR #26](https://github.com/KXHXK/opercerta/pull/26);初始 head `63692be`;PR run `31479724666` 的 repository-safety、python-quality、backend-tests、frontend 全部成功,compose-smoke 按事件规则跳过。
- 已合并自动化基线:后端 `682 passed`;前端 19 文件/62 条;三业务固定契约 42/42;冻结 Agent 安全恢复 9/9。最近一次成功 main Compose 证据属于 `4c696d2`,不能替代 `c4257ac` 的失败结果。
- GitHub main:`cde3dcd8597645597b0da1cb73e1c2056644cd80`;[PR #26](https://github.com/KXHXK/opercerta/pull/26) 已以普通 merge commit 合并。
- [main run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029) 五项成功:repository-safety、python-quality、backend-tests、frontend、compose-smoke。
- 已合并自动化基线:后端 `682 passed`;前端 19 文件/63 条;三业务固定契约 42/42;冻结 Agent 安全恢复 9/9;前端 high 级依赖审计为 0。
- 收口分支本地新鲜证据:后端 421 单元 + 261 集成 = 682;前端 19 文件/63 条;依赖审计 0;clean Docker build 成功;隔离 Compose 完成三业务数据库副作用、API/MCP 重启、recovery-only 和资源清理。
- 真实模型质量小样本:9/9;Goal、工具 precision/recall、证据完整率、citation 可解析率与数据库副作用匹配率均为 100%;端到端 P50/P95 为 19.722/31.333 秒。该结果不是生产准确率或 SLA。
- 最近一次成功的历史 main Compose 在 `4c696d2` 验证了三业务数据库副作用与恢复;当前 main `c4257ac` 的 clean build 失败事实已单列,不能混写。
- 最新 main Compose 在 `cde3dcd` 验证了干净镜像构建、三业务数据库副作用、API/MCP 重启、恢复与资源清理;此前 `c4257ac` 的失败作为历史根因证据保留。
- 本轮 WSL2 Ubuntu 26.04 隔离 Compose 的 PostgreSQL、Redis、MCP、API 四服务均达到 healthy,验证完成后已删除容器、网络和测试卷,不保留污染状态。
- Netlify 为静态站点;`/console` 与 `/api/*` 在公网均是 SPA 静态回退,不是可写后端。
- 旧预发布 `v0.1.0-showcase.1` 指向较早提交,只保留历史;最终 Showcase tag 必须在本轮合并、本人验收和录屏后创建。

## 当前唯一主线

1. 项目所有者复核 Draft PR #26 后批准转为 Ready 并合并,取得新的 main 五项全绿证据,把远程 CI 门禁改为 `PASSED`。
2. 项目所有者按 `docs/learning/opercerta-ownership-acceptance.md` 亲自完成环境、完整库存闭环、代码链路、重启/幂等和分层讲解验收。
3. 录制 3–5 分钟演示,保存操作编号、工单编号、Trace/审计和数据库后置事实。
4. 验收通过后创建最终 Showcase tag,并以“公开静态展示 + 本地可复现完整 Agent MVP”对外表述。
1. 项目所有者按 `docs/learning/opercerta-ownership-acceptance.md` 亲自完成环境、完整库存闭环、代码链路、重启/幂等和分层讲解验收。
2. 录制 3–5 分钟演示,保存操作编号、工单编号、Trace/审计和数据库后置事实。
3. 验收通过后创建最终 Showcase tag,并以“公开静态展示 + 本地可复现完整 Agent MVP”对外表述。

ForenTrail 暂不启动。FieldPilot 是 OperCerta 完成后的独立项目,不在本仓库扩展或预先实施。

Expand Down
19 changes: 19 additions & 0 deletions docs/development-log/daily/2026-08-11.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,22 @@ PR 可合并且无代码冲突,但仍保持 Draft。只有合并后的 main ru
2. 明确批准转为 Ready 并合并。
3. 监控合并后的 main 五项门禁,重点确认 `compose-smoke`。
4. main 全绿后再同步文档和静态专题;本人掌握、录屏和最终 tag 仍单独验收。

## 合并与 main 门禁终态

项目所有者随后批准转为 Ready 并合并。PR #26 以普通 merge commit
`cde3dcd8597645597b0da1cb73e1c2056644cd80` 合入 main。对应
[Actions run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029)
五项全部为 `success`:

| Job | 结果 |
| --- | --- |
| `repository-safety` | `success` |
| `python-quality` | `success` |
| `backend-tests` | `success`;包含完整后端、42/42 与 9/9 评测 |
| `frontend` | `success`;包含 high 级依赖审计、19 文件/63 条测试和构建 |
| `compose-smoke` | `success`;干净构建、三业务数据库副作用、API/MCP 重启、恢复和资源清理均通过 |

因此远程 CI 门禁终态为 `PASSED`。Showcase 仍为
`AWAITING_OWNER_VALIDATION`,下一关键节点改为项目所有者亲自完成业务实演、
源码讲解、重启/幂等实验和录屏;最终 tag 仍不得提前创建。
55 changes: 55 additions & 0 deletions docs/development-log/daily/2026-08-12.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# OperCerta 开发日志:2026-08-12

## 今日目标

在 PR #26 已获批准后完成普通合并,验证新的 main 五项远程门禁,并把 README、
权威状态、实施交接、收口审计、发布证据和文档索引统一到真实终态;不代签项目
所有者掌握验收,不创建最终 Showcase tag,不开放 Product Release gate。

## 合并结果

- PR:[PR #26](https://github.com/KXHXK/opercerta/pull/26)。
- 合并方式:普通 merge commit,保留原子提交历史。
- main 提交:`cde3dcd8597645597b0da1cb73e1c2056644cd80`。
- GitHub 连接器因 integration 权限返回 403;回退到已登录的 GitHub CLI 完成同一
已批准操作,未扩大范围、未 force push、未删除远端历史。

## main 远程门禁

[Actions run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029)
结论为 `success`:

| Job | 结果与覆盖范围 |
| --- | --- |
| `repository-safety` | `success`;仓库安全边界通过 |
| `python-quality` | `success`;Ruff、格式与 mypy 通过 |
| `backend-tests` | `success`;完整后端、42/42 三业务契约与 9/9 Agent 安全/恢复评测通过 |
| `frontend` | `success`;high 级依赖审计、19 文件/63 条测试和 Vite 构建通过 |
| `compose-smoke` | `success`;干净镜像构建、三业务轨迹与数据库副作用、API/MCP 重启、恢复验证和资源清理通过 |

该结果关闭 main run `30744845403` 暴露的 PEP 517 构建后端缓存假设,远程 CI
门禁由 `PR_CHECKS_PASSED_MAIN_PENDING` 更新为 `PASSED`。

## 当前发布边界与下一步

- 工程与本地自动化门禁:`PASSED`。
- 远程 CI 门禁:`PASSED`。
- Showcase Release gate:`AWAITING_OWNER_VALIDATION`。
- Product Release gate:`CLOSED`。

下一步只能由项目所有者亲自完成:按照
`docs/learning/opercerta-ownership-acceptance.md` 实演业务、讲解源码、执行重启与
幂等实验,记录 operation/work order/Trace/审计/数据库事实并录制 3–5 分钟视频。
在这些证据通过前,不创建最终 Showcase tag,也不启动其他项目。

## PR #27 CI 契约同步

纯状态文档提交触发的首轮 PR CI 中,仓库安全、Python 质量和前端通过,完整后端
为 `681 passed, 1 failed`。唯一失败是发布资产测试仍硬编码要求交接文件包含旧的
PR #25、run `30744845403` 和 62 条前端用例,而交接文件已经如实更新为 PR #26、
main run `31519846029` 和 63 条前端用例。

修复只同步 `test_showcase_release_gate_and_owner_acceptance_are_explicit` 的当前发布
断言,不修改业务代码。定向发布资产测试 `13 passed`;完整本地集成测试因该独立
worktree 未配置 `OPERCERTA_DATABASE_URL` 无法在 Windows 直接运行,不能记为本地
全量通过,最终以 PR 的 PostgreSQL service job 复验为准。
5 changes: 2 additions & 3 deletions docs/release-evidence/final-closeout-2026-08-10.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,16 @@ main Actions run [`30744845403`](https://github.com/KXHXK/opercerta/actions/runs
## 判定

- 工程与本地自动化门禁:`PASSED`。
- 远程 CI 门禁:`PR_CHECKS_PASSED_MAIN_PENDING`。Draft PR #26 初始 run `31479724666` 四项通过;Compose 按 PR 事件规则跳过。
- 远程 CI 门禁:`PASSED`。PR #26 已以普通 merge commit 合入 main `cde3dcd8597645597b0da1cb73e1c2056644cd80`;[main run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029) 五项全部通过。
- Showcase Release gate:`AWAITING_OWNER_VALIDATION`。
- Product Release gate:`CLOSED`。

本轮没有重新调用真实 Kimi;9/9 真实模型指标来自已合入 main 的 2026-08-02 脱敏报告。本轮复验的是 Mock 冻结契约、数据库/MCP/Compose 和构建/供应链门禁,不能把两次证据混成一次运行。

## 尚不能写成通过的事项

- 收口分支已推送并创建 Draft PR #26;尚无合并后的新 main clean-runner Compose 证据。
- 项目所有者掌握验收与 3–5 分钟录屏尚未完成。
- 最终 Showcase tag 尚未创建。
- Product Release gate 保持 `CLOSED`;本证据不覆盖公网 IAM、Ingress、限流、备份、高可用或 SLA。

所有本地命令均已取得终态;上游 main 的失败历史继续保留,不能用本地结果冒充远程 clean runner 已修复。
所有本地命令均已取得终态;远程 clean runner 已通过 main run `31519846029` 证明修复有效。上游 main 的失败历史继续保留,用于解释根因和修复过程。
Loading