diff --git a/DOCUMENT_INDEX.md b/DOCUMENT_INDEX.md index 2cea0e3..b20f37b 100644 --- a/DOCUMENT_INDEX.md +++ b/DOCUMENT_INDEX.md @@ -1,12 +1,12 @@ # OperCerta 文档总索引 -本索引完整登记 OperCerta 当前根工作树中的 129 份 Markdown 文档,并保留旧电脑 6 个 `.worktrees/` 的 456 条历史登记。当前根工作树与每个历史 worktree 使用独立六列表格和独立序号;路径均相对于仓库根目录;日期表示文档首次建立日期。历史 worktree 表用于追溯分支资料,不表示对应物理目录仍存在。Git 元数据、依赖目录、虚拟环境和工具缓存不属于项目文档登记范围。 +本索引完整登记 OperCerta 当前根工作树中的 130 份 Markdown 文档,并保留旧电脑 6 个 `.worktrees/` 的 456 条历史登记。当前根工作树与每个历史 worktree 使用独立六列表格和独立序号;路径均相对于仓库根目录;日期表示文档首次建立日期。历史 worktree 表用于追溯分支资料,不表示对应物理目录仍存在。Git 元数据、依赖目录、虚拟环境和工具缓存不属于项目文档登记范围。 Typora 显示:首次运行 `powershell -ExecutionPolicy Bypass -File scripts/install_typora_index_theme.ps1`,重启 Typora 后选择 `主题 → OperCerta Index`。该主题让正文使用 96% 窗口宽度,并统一设置下列全部六列表格的列宽、自动换行和字号。 ## 项目核心学习导航 -先按 A1–A9 完成一轮“阅读 → 找到代码 → 手动验证 → 自己复述”。后面的 129 份当前文档与 456 条历史 worktree 登记是排查问题和深入学习时使用的资料库,不需要从头到尾顺序阅读。 +先按 A1–A9 完成一轮“阅读 → 找到代码 → 手动验证 → 自己复述”。后面的 130 份当前文档与 456 条历史 worktree 登记是排查问题和深入学习时使用的资料库,不需要从头到尾顺序阅读。 | 阶段 | 核心主题 | 优先阅读 | 代码与配置入口 | 必做实践 | 掌握标准 | | ---: | --- | --- | --- | --- | --- | @@ -18,17 +18,17 @@ Typora 显示:首次运行 `powershell -ExecutionPolicy Bypass -File scripts/i | A6 | 审批、安全边界与可靠性内核 | [审批原子性](docs/release-evidence/approval-atomicity.md)、[幂等工单](docs/release-evidence/work-order-idempotency.md)、[重启恢复](docs/release-evidence/langgraph-restart-recovery.md)、[批准后 Verifier](docs/release-evidence/agent-verifier-reapproval.md) | [审批仓储](src/opercerta/infrastructure/db/approval_repository.py)、[工单仓储](src/opercerta/infrastructure/db/work_order_repository.py)、[Checkpoint](src/opercerta/infrastructure/checkpoints.py)、[工具策略](src/opercerta/agent/tool_policy.py) | 复现一次重复审批或重启恢复,随后核对数据库事实、审计序列和唯一工单。 | 能用数据库约束、事务、状态机和幂等键解释为什么不会因模型重试产生重复副作用。 | | A7 | React 前端、FastAPI 与身份权限 | [控制台证据](docs/release-evidence/single-page-console.md)、[JWT/RBAC 证据](docs/release-evidence/demo-jwt-rbac.md) | [React 控制台](web/src/App.tsx)、[API 应用](src/opercerta/api/app.py)、[认证授权](src/opercerta/api/auth.py)、[请求模型](src/opercerta/api/models.py) | 从浏览器完成一个业务闭环,同时在 Network 与后端 Trace 中对应每个请求、角色切换和状态更新。 | 能解释 React 只负责交互状态,FastAPI 负责协议与鉴权,Agent 内核负责决策编排,PostgreSQL 保存权威事实。 | | A8 | PostgreSQL、Redis、Docker 与可观测性 | [三业务发布证据](docs/release-evidence/three-business-release.md)、[Docker 证据](docs/release-evidence/docker-linux-runtime.md)、[可观测性证据](docs/release-evidence/observability-security-regression.md) | [Compose](compose.yaml)、[Dockerfile](Dockerfile)、[Redis 缓存](src/opercerta/infrastructure/cache.py)、[数据库迁移](migrations)、[Tracing](src/opercerta/observability/tracing.py) | 执行健康检查、查看容器状态、重启 API/MCP,并确认 checkpoint、业务事实和工单没有丢失或重复。 | 能解释容器与 Compose 的区别、Redis 为什么不是权威存储、PostgreSQL/pgvector 的双重职责及日志如何安全关联。 | -| A9 | 本人掌握、故障复盘与演示 | [项目所有者掌握验收](docs/learning/opercerta-ownership-acceptance.md)、[工程案例集](docs/development-log/interview-casebook.md)、[最新开发日志](docs/development-log/daily/2026-08-11.md) | 选择一次真实业务闭环和一个真实故障对应的代码、日志、数据库事实与修复提交。 | 独立执行完整库存闭环、重启/幂等实验和 30 秒/3 分钟/10 分钟讲解,保存 operation/work order/Trace/审计证据并录制 3–5 分钟视频。 | 不看稿也能操作、定位代码、解释取舍和失败收口;验收不得由 Codex 自动代签。 | +| A9 | 本人掌握、故障复盘与演示 | [项目所有者掌握验收](docs/learning/opercerta-ownership-acceptance.md)、[工程案例集](docs/development-log/interview-casebook.md)、[最新开发日志](docs/development-log/daily/2026-08-12.md) | 选择一次真实业务闭环和一个真实故障对应的代码、日志、数据库事实与修复提交。 | 独立执行完整库存闭环、重启/幂等实验和 30 秒/3 分钟/10 分钟讲解,保存 operation/work order/Trace/审计证据并录制 3–5 分钟视频。 | 不看稿也能操作、定位代码、解释取舍和失败收口;验收不得由 Codex 自动代签。 | -## 根工作树(129 份) +## 根工作树(130 份) 显示说明:本表及后续各 worktree 表均保持“序号、文件名、路径、用途、状态、日期”六列完整字段。 | 序号 | 文件名 | 路径 | 用途(详细) | 状态 | 日期 | | ---: | --- | --- | --- | --- | --- | | 1 | `README.md` | `README.md` | 英文项目总入口,使用顶部 `English|简体中文` 标准链接切换语言,说明业务背景、三业务功能、Agent 闭环、完整技术栈、快速启动、使用流程、验证结果、可靠性边界和路线图。 | 每页只显示一种语言;不使用折叠框 | 2026-07-30 | -| 2 | `IMPLEMENTATION_HANDOFF.md` | `IMPLEMENTATION_HANDOFF.md` | 跨对话和上下文压缩后的实施交接文件,记录当前分支、已验证事实、未完成事项、下一步动作及禁止越过的发布边界。 | Draft PR #26 四项通过;等待批准合并与 main Compose,Showcase 待本人验收,Product gate 关闭 | 2026-08-11 | -| 3 | `DOCUMENT_INDEX.md` | `DOCUMENT_INDEX.md` | OperCerta 全部项目文档的唯一总登记表,用于按文件名、路径、用途、状态和日期统一检索、复查与交接。 | 当前根工作树 129 份文档已完整登记;另保留 6 个旧 worktree 的 456 条历史记录 | 2026-08-11 | +| 2 | `IMPLEMENTATION_HANDOFF.md` | `IMPLEMENTATION_HANDOFF.md` | 跨对话和上下文压缩后的实施交接文件,记录当前分支、已验证事实、未完成事项、下一步动作及禁止越过的发布边界。 | main `cde3dcd` 五项 CI 已通过;Showcase 待本人验收,Product gate 关闭 | 2026-08-12 | +| 3 | `DOCUMENT_INDEX.md` | `DOCUMENT_INDEX.md` | OperCerta 全部项目文档的唯一总登记表,用于按文件名、路径、用途、状态和日期统一检索、复查与交接。 | 当前根工作树 130 份文档已完整登记;另保留 6 个旧 worktree 的 456 条历史记录 | 2026-08-12 | | 4 | `2026-07-14-agent-project-naming-design.md` | `docs/specs/2026-07-14-agent-project-naming-design.md` | 定义 OperCerta、ForenTrail、SiteVerum、Federune 四个项目的命名原则、语义边界与品牌一致性,防止项目职责和名称漂移。 | 已冻结为命名基线 | 2026-07-14 | | 5 | `ai-agent-portfolio-overall-design.md` | `docs/specs/ai-agent-portfolio-overall-design.md` | 规定四个 AI Agent 项目的整体定位、差异化业务范围、技术能力组合、实施顺序和共同约束,是项目组合的最高层设计依据。 | 已冻结为总体设计基线;文件名已统一为英文路径 | 2026-07-14 | | 6 | `2026-07-14-agent-portfolio-design.md` | `docs/specs/2026-07-14-agent-portfolio-design.md` | 设计四项目如何组合成求职作品集,包括能力覆盖、展示顺序、共享基础设施边界和避免重复建设的原则。 | 已冻结为组合设计基线 | 2026-07-14 | @@ -68,7 +68,7 @@ Typora 显示:首次运行 `powershell -ExecutionPolicy Bypass -File scripts/i | 40 | `2026-07-20-opercerta-three-business-release.md` | `docs/superpowers/plans/2026-07-20-opercerta-three-business-release.md` | 将三业务适配、六个 MCP 工具、评测、Redis、OpenTelemetry、真实模型代表验证、本地发布和中文学习包拆成主线任务。 | 本地任务已执行;公网交互、用户掌握与最终门禁待完成 | 2026-07-20 | | 41 | `2026-07-20-opercerta-zero-cost-showcase-engineering-walkthrough.md` | `docs/superpowers/plans/2026-07-20-opercerta-zero-cost-showcase-engineering-walkthrough.md` | 规划统一事实清单、招聘专题、本地工程详解、控制台共存、响应式测试、静态导出和 Netlify 发布验证。 | 计划已创建;根分支尚未归档完成证据 | 2026-07-20 | | 42 | `README.md` | `docs/development-log/README.md` | 说明开发日志目录结构、各类日志职责、记录规范、敏感信息禁区和上下文恢复阅读顺序。 | 已建立并持续使用 | 2026-07-15 | -| 43 | `current-state.md` | `docs/development-log/current-state.md` | 保存最新可验证项目状态、测试证据、运行环境、发布边界、未完成事项和下一步,作为压缩上下文后的唯一当前事实入口;历史状态只保留在 daily 与 release evidence。 | main `c4257ac` Compose 构建失败已在收口分支修复;工程门禁复验中,Showcase 待本人验收;Product gate 关闭 | 2026-08-10 | +| 43 | `current-state.md` | `docs/development-log/current-state.md` | 保存最新可验证项目状态、测试证据、运行环境、发布边界、未完成事项和下一步,作为压缩上下文后的唯一当前事实入口;历史状态只保留在 daily 与 release evidence。 | main `cde3dcd` 五项远程门禁通过;Showcase 待本人验收;Product gate 关闭 | 2026-08-12 | | 44 | `2026-07-15.md` | `docs/development-log/daily/2026-07-15.md` | 记录日志体系、Windows PostgreSQL、审批领域契约及初始可靠性实施过程与命令证据。 | 当日记录已归档 | 2026-07-15 | | 45 | `2026-07-16.md` | `docs/development-log/daily/2026-07-16.md` | 记录库存补货 Task 1–9、幂等工单、LangGraph 恢复、调试过程和本地验证结果。 | 当日记录已归档 | 2026-07-16 | | 46 | `2026-07-17.md` | `docs/development-log/daily/2026-07-17.md` | 记录 WSL2、Docker Linux 运行时、JWT/RBAC 和 Compose 环境迁移中的问题、修复与验证。 | 当日记录已归档 | 2026-07-17 | @@ -90,7 +90,7 @@ Typora 显示:首次运行 `powershell -ExecutionPolicy Bypass -File scripts/i | 62 | `cache-tracing-model-adapter.md` | `docs/release-evidence/cache-tracing-model-adapter.md` | 保存 Redis 只读缓存、审批后绕过、OpenTelemetry 脱敏关联、严格真实模型适配器及未验证边界的阶段证据。 | 阶段证据已归档;真实模型另有独立证据 | 2026-07-20 | | 63 | `demo-jwt-rbac.md` | `docs/release-evidence/demo-jwt-rbac.md` | 保存本地 JWT 签发、四角色权限矩阵、审批身份绑定、安全拒绝和 Compose 回归结果。 | 本地验证通过;不代表生产身份系统 | 2026-07-18 | | 64 | `docker-linux-runtime.md` | `docs/release-evidence/docker-linux-runtime.md` | 保存 WSL2 Ubuntu 下 Compose 构建、服务健康、数据库初始化、业务 smoke 和重启恢复的实际输出。 | 单节点本地验证通过;发布门禁仍关闭 | 2026-07-17 | -| 65 | `github-actions-ci.md` | `docs/release-evidence/github-actions-ci.md` | 保存 GitHub PR/main Actions、后端与前端测试、PostgreSQL/Compose smoke、仓库可见性变化和分支保护能力核验。 | 已追加 PR #25/main run 30744845403 的四项通过、Compose clean-build 失败及收口分支本地修复;等待新 main CI | 2026-08-10 | +| 65 | `github-actions-ci.md` | `docs/release-evidence/github-actions-ci.md` | 保存 GitHub PR/main Actions、后端与前端测试、PostgreSQL/Compose smoke、仓库可见性变化和分支保护能力核验。 | 已追加 PR #26/main run 31519846029 五项通过及 clean-build 故障闭环 | 2026-08-12 | | 66 | `inventory-replenishment-vertical-slice.md` | `docs/release-evidence/inventory-replenishment-vertical-slice.md` | 汇总库存查询、规则判断、审批、执行、唯一工单、审计和 API 的首条端到端后端闭环证据。 | Windows 本地后端闭环已验证;发布门禁仍关闭 | 2026-07-16 | | 67 | `langgraph-restart-recovery.md` | `docs/release-evidence/langgraph-restart-recovery.md` | 保存 LangGraph 四点 A/B 重启测试、checkpointer 状态、审批中断恢复和副作用不重复的数据库断言。 | 本地恢复证据已归档;不代表生产高可用 | 2026-07-16 | | 68 | `native-postgres-environment.md` | `docs/release-evidence/native-postgres-environment.md` | 保存 Windows 原生 PostgreSQL 版本、服务、数据库、角色、认证规则和连接验证结果。 | 历史环境证据已归档;当前主运行时已迁移 | 2026-07-15 | @@ -151,10 +151,11 @@ Typora 显示:首次运行 `powershell -ExecutionPolicy Bypass -File scripts/i | 123 | `real-model-quality-evaluation.md` | `docs/release-evidence/real-model-quality-evaluation.md` | 保存 Kimi K2.6 三业务 9 条冻结真实模型路径的 Goal、工具选择、证据、citation、提示注入、审批、幂等写入、数据库副作用和端到端延迟实测,并记录知识前置、确定性证据绑定、信号恢复与 Docker 构建问题的 TDD 收口过程。 | 本地固定小样本 9/9;不代表生产准确率、真实流量、成本或 SLA | 2026-08-02 | | 124 | `2026-08-02.md` | `docs/development-log/daily/2026-08-02.md` | 记录真实模型评测数据集、运行器、指标、RED/GREEN 修复、Docker 网络恢复、最终 9/9 结果和下一步个人掌握验收,用于后续复盘和面试交流。 | 当日评测工作已归档;Showcase 仍待本人验收与录屏 | 2026-08-02 | | 125 | `SECURITY.md` | `SECURITY.md` | 定义 pre-1.0 支持范围、GitHub 私密漏洞报告优先流程、无私密入口时的安全联系方法,以及静态公开页面、本地 demo JWT 和生产安全评审的边界。 | 已建立可执行安全报告策略;不承诺非生产项目响应 SLA | 2026-08-10 | -| 126 | `2026-08-10-final-closeout-audit.md` | `docs/development-log/audits/2026-08-10-final-closeout-audit.md` | 对照四份基础设计和全部已批准修订,建立规格—实现—证据矩阵,记录 main CI 漂移、Agent 术语、前端数字、供应链和开源安全问题及最终三类门禁。 | 自动可修缺口已处理;等待完整复验、远程 CI 和本人验收 | 2026-08-10 | +| 126 | `2026-08-10-final-closeout-audit.md` | `docs/development-log/audits/2026-08-10-final-closeout-audit.md` | 对照四份基础设计和全部已批准修订,建立规格—实现—证据矩阵,记录 main CI 漂移、Agent 术语、前端数字、供应链和开源安全问题及最终三类门禁。 | 自动可修缺口与远程 CI 已关闭;等待本人验收 | 2026-08-12 | | 127 | `2026-08-10.md` | `docs/development-log/daily/2026-08-10.md` | 记录最新 main 盘点、独立工作树保护、Compose CI 根因、Dockerfile RED/GREEN、传递依赖升级、Harness 文档和发布边界,供后续故障复盘。 | 当日工程修改已记录;最终测试结果另见 release evidence | 2026-08-10 | -| 128 | `final-closeout-2026-08-10.md` | `docs/release-evidence/final-closeout-2026-08-10.md` | 汇总最终收口分支的静态检查、后端、评测、前端依赖审计/测试/构建、Docker/Compose 业务副作用与恢复结果,并区分本地证据和待补的远程 main 证据。 | 本地门禁全绿;远程 main CI、本人验收和最终 tag 待完成 | 2026-08-10 | -| 129 | `2026-08-11.md` | `docs/development-log/daily/2026-08-11.md` | 记录获批推送、Draft PR #26 创建、GitHub 连接器 403 后的 CLI 后备路径、四项 PR 门禁结果以及 main-only Compose 和后续人工审批边界。 | PR 四项通过;保持 Draft,等待批准合并和 main Compose | 2026-08-11 | +| 128 | `final-closeout-2026-08-10.md` | `docs/release-evidence/final-closeout-2026-08-10.md` | 汇总最终收口分支的静态检查、后端、评测、前端依赖审计/测试/构建、Docker/Compose 业务副作用与恢复结果,并区分本地与远程 main 证据。 | 本地与远程工程门禁全绿;本人验收和最终 tag 待完成 | 2026-08-12 | +| 129 | `2026-08-11.md` | `docs/development-log/daily/2026-08-11.md` | 记录获批推送、Draft PR #26 创建、GitHub 连接器 403 后的 CLI 后备路径、四项 PR 门禁、最终合并和 main 五项 CI 终态。 | PR #26 已合并;main 五项通过 | 2026-08-12 | +| 130 | `2026-08-12.md` | `docs/development-log/daily/2026-08-12.md` | 记录 PR #26 普通合并、main run 31519846029 五项门禁、clean-runner Compose 故障闭环、状态文档同步以及本人验收与 Product 边界。 | 工程与远程 CI 已收口;等待本人实演、录屏和最终 Showcase tag | 2026-08-12 | ## 历史 Worktree:agent-core-architecture(82 条记录) diff --git a/IMPLEMENTATION_HANDOFF.md b/IMPLEMENTATION_HANDOFF.md index 9cfb03a..dd746a0 100644 --- a/IMPLEMENTATION_HANDOFF.md +++ b/IMPLEMENTATION_HANDOFF.md @@ -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`。 本版本发布定义已经正式修订为: @@ -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 并记录回滚提交。 ## 本地运行入口 diff --git a/README.md b/README.md index e9c9bc9..590cfcb 100644 --- a/README.md +++ b/README.md @@ -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: @@ -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; diff --git a/README.zh-CN.md b/README.zh-CN.md index 2434c4d..5ab50a0 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -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 重启、恢复和清理 | 运行本地门禁: @@ -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`。 diff --git a/docs/development-log/audits/2026-08-10-final-closeout-audit.md b/docs/development-log/audits/2026-08-10-final-closeout-audit.md index 4e16abb..b50ed58 100644 --- a/docs/development-log/audits/2026-08-10-final-closeout-audit.md +++ b/docs/development-log/audits/2026-08-10-final-closeout-audit.md @@ -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 级依赖审计。 @@ -39,7 +39,6 @@ ## 仍需项目所有者完成的关键节点 -- 复核 Draft PR #26,批准转为 Ready 并合并;以新的 main CI 五项全绿作为远程工程门禁证据。 - 独立完成 `opercerta-ownership-acceptance.md` 的业务实演、源码讲解、重启/幂等实验和记录;Codex 不得代签。 - 录制 3–5 分钟演示并核对静态专题内容。 - 验收通过后创建最终 Showcase tag;不得提前把 Product Release gate 打开。 @@ -47,7 +46,7 @@ ## 发布判定 - 工程与本地自动化门禁:`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`。 diff --git a/docs/development-log/current-state.md b/docs/development-log/current-state.md index 58241a5..df7d162 100644 --- a/docs/development-log/current-state.md +++ b/docs/development-log/current-state.md @@ -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/`。 ## 当前结论 @@ -15,7 +15,7 @@ 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` | 未部署公网可写后端、生产身份、限流、防滥用、托管数据库备份、高可用与线上告警 | @@ -23,7 +23,7 @@ OperCerta 的三业务共享 Agent 主线、可靠性内核、前后端、本地 `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 中,不能删除或改写。 ## 已实现范围 @@ -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 完成后的独立项目,不在本仓库扩展或预先实施。 diff --git a/docs/development-log/daily/2026-08-11.md b/docs/development-log/daily/2026-08-11.md index 64adb7b..fd18fa0 100644 --- a/docs/development-log/daily/2026-08-11.md +++ b/docs/development-log/daily/2026-08-11.md @@ -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 仍不得提前创建。 diff --git a/docs/development-log/daily/2026-08-12.md b/docs/development-log/daily/2026-08-12.md new file mode 100644 index 0000000..828e05b --- /dev/null +++ b/docs/development-log/daily/2026-08-12.md @@ -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 复验为准。 diff --git a/docs/release-evidence/final-closeout-2026-08-10.md b/docs/release-evidence/final-closeout-2026-08-10.md index 8a84ea2..f2e700c 100644 --- a/docs/release-evidence/final-closeout-2026-08-10.md +++ b/docs/release-evidence/final-closeout-2026-08-10.md @@ -45,7 +45,7 @@ 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`。 @@ -53,9 +53,8 @@ main Actions run [`30744845403`](https://github.com/KXHXK/opercerta/actions/runs ## 尚不能写成通过的事项 -- 收口分支已推送并创建 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 的失败历史继续保留,用于解释根因和修复过程。 diff --git a/docs/release-evidence/github-actions-ci.md b/docs/release-evidence/github-actions-ci.md index e1f23d5..27dee08 100644 --- a/docs/release-evidence/github-actions-ci.md +++ b/docs/release-evidence/github-actions-ci.md @@ -1,6 +1,14 @@ # GitHub Actions 分层 CI:远程验证证据 -## 2026-08-10 PR #25 main 失败复核与本地修复 +## 2026-08-11 PR #26 合并与 main 总门禁恢复 + +- [PR #26](https://github.com/KXHXK/opercerta/pull/26) 在四项 PR 快速门禁通过后转为 Ready,并以普通 merge commit `cde3dcd8597645597b0da1cb73e1c2056644cd80` 合入 main。 +- 对应 [main run 31519846029](https://github.com/KXHXK/opercerta/actions/runs/31519846029) 结论为 `success`;`repository-safety`、`python-quality`、`backend-tests`、`frontend`、`compose-smoke` 五项全部通过。 +- `backend-tests` 完成完整后端、42/42 三业务固定契约和 9/9 冻结 Agent 安全/恢复评测;`frontend` 完成 high 级依赖审计、19 文件/63 条测试和生产构建。 +- `compose-smoke` 在干净 GitHub Linux runner 完成镜像构建、三业务 Agent 轨迹和 PostgreSQL 副作用、API/MCP 重启、恢复验证及隔离资源清理。 +- 该结果关闭 run `30744845403` 暴露的 PEP 517 构建后端缓存假设;远程 CI 门禁恢复为 `PASSED`。它仍只证明本地可复现单节点 Agent MVP,不证明公网交互、生产 IAM、高可用或 SLA。 + +## 2026-08-10 PR #25 main 失败复核与修复过程 - PR #25 已合入 main `c4257ac10dec470bbb9ca1076c4cfacfb21a80de`。 - [main run 30744845403](https://github.com/KXHXK/opercerta/actions/runs/30744845403) 的 `repository-safety`、`python-quality`、`backend-tests`、`frontend` 成功;后端为 682 条,前端为 19 文件/62 条,42/42 与 9/9 评测均通过。 @@ -8,7 +16,7 @@ - `release/final-closeout-20260810` 先增加容器资产 RED 断言,再移除错误的项目安装离线假设;运行依赖继续使用 `uv.lock` 和 `--frozen`。 - 本地 WSL2 clean Docker build、隔离 Compose 三业务数据库副作用、API/MCP 重启和 recovery-only 已通过;收口分支前端新增源码入口测试后为 63 条,`npm audit --audit-level=high` 为 0 个漏洞。 - 修复提交 `63692be` 已推送并创建 [Draft PR #26](https://github.com/KXHXK/opercerta/pull/26)。初始 [PR run 31479724666](https://github.com/KXHXK/opercerta/actions/runs/31479724666) 的 `repository-safety`、`python-quality`、`backend-tests`、`frontend` 全部成功;`compose-smoke` 按 PR 事件规则跳过。 -- PR 结果证明修复提交的四项快速门禁通过;必须取得合并后的 main GitHub Actions 五项成功,远程 CI 门禁才能改为 `PASSED`。 +- PR 结果证明修复提交的四项快速门禁通过;上节记录的 main run `31519846029` 随后完成五项验证并将远程 CI 门禁改为 `PASSED`。 ## 2026-07-31 双门禁收口 PR #23 与 main 总门禁 diff --git a/tests/unit/runtime/test_release_assets.py b/tests/unit/runtime/test_release_assets.py index 4ae4b3f..cb1e9ab 100644 --- a/tests/unit/runtime/test_release_assets.py +++ b/tests/unit/runtime/test_release_assets.py @@ -283,11 +283,12 @@ def test_showcase_release_gate_and_owner_acceptance_are_explicit() -> None: assert phrase in amendment assert "Showcase Release gate: AWAITING_OWNER_VALIDATION" in state assert "Product Release gate: CLOSED" in state - assert "PR #25" in handoff - assert "30744845403" in handoff + assert "PR #26" in handoff + assert "cde3dcd8597645597b0da1cb73e1c2056644cd80" in handoff + assert "31519846029" in handoff assert "compose-smoke" in handoff - assert "后端 682" in handoff - assert "前端 19 文件/62 条" in handoff + assert "682 条后端" in handoff + assert "63 条前端" in handoff assert "不得由 Codex 自动代签" in ownership assert "operation_id" in ownership assert "work_order_id" in ownership