diff --git a/.blueprint/manifest.yaml b/.blueprint/manifest.yaml index 7ce59f5..70673ac 100644 --- a/.blueprint/manifest.yaml +++ b/.blueprint/manifest.yaml @@ -459,7 +459,7 @@ modules: area: infra status: in_progress progress: 14 - note: "P1、P3-A、P3-S1 与 P3-S2 已完成:交付状态聚合、Gitea 1.22.6 deployment signal 归一化、炼境自身 Codex 接入及 Agent PR 安全合并门禁均已闭环;PR #14 已用用户确认的完整 SHA 与服务端 head_commit_id 真实合并验收。P3-B~E 待执行;首轮不开放 SSH/部署/回滚写操作。" + note: "P1、P3-A、P3-S1/S2、P3-B/C/D/D1 已完成;Enterprise production 已通过 Gitea deploy context 与只读 HTTP 探针的同 SHA 双证据验收,P3-B 另在本地隔离 Docker 验证旧镜像切回后报告旧 SHA。P3-E 自 2026-09-23 起进行 2~4 周收益观察;首轮不开放炼境 SSH/部署/回滚写操作。" position: [2000, 800] - id: agent-client-capability-packs diff --git a/.blueprint/modules/project-capability-control-plane.md b/.blueprint/modules/project-capability-control-plane.md index 03b6226..9ae0dea 100644 --- a/.blueprint/modules/project-capability-control-plane.md +++ b/.blueprint/modules/project-capability-control-plane.md @@ -327,27 +327,31 @@ v1 不新增 deployment history 表。最近部署时间和过程状态来自 Gi - acceptance: "agent_verify: [cargo test] `merge_pull_request` 在 confirmed=false、expected_head_sha 与远端不一致、PR 非 open、CI pending/failure 或 review changes_requested 时拒绝且不执行 merge;仅在 PR open、SHA 一致、CI passed、无阻塞 review 且 confirmed=true 时允许执行;[MCP schema] confirmed 与 expected_head_sha 均为必填;合并后重新调用 get_delivery_status 可读取真实结果。" - done_note: "2026-09-22:cargo test --lib 151/151、pnpm typecheck 与 PR CI 全部通过;MCP 实机先以错误 SHA 验证 fail-closed,再由用户确认 PR #14 与完整 head SHA b6d749025458928b86ab607a5a7f31479f8db85f 后,通过带 head_commit_id 的能力本体成功合并;回读 get_delivery_status 为 PR none、CI passed。" -### 🔵 P3-B. Enterprise System 不可变 revision 与版本健康端点 -- status: in_progress +### ✅ P3-B. Enterprise System 不可变 revision 与版本健康端点 +- status: done - complexity: M - files: E:/code-project/enterprise-system/apps/api/src/index.ts, E:/code-project/enterprise-system/apps/api/Dockerfile, E:/code-project/enterprise-system/deploy/deploy-api.sh - acceptance: "[HTTP API] 以 BUILD_REVISION= 构建并启动 API 镜像后调用 `GET /health/version` → 200,body 仅含 ok/component/revision/started_at 且 revision=;切回以 构建的旧镜像 → revision=,证明回滚不会伪报新 SHA。" -- progress_note: "Enterprise 隔离分支 feat/production-revision-evidence 本地提交 d915399;API typecheck、bash 静态检查与隔离端口 HTTP 四字段/鉴权冒烟通过。Docker daemon 未运行,新旧镜像回滚和 production 仍待验,故保持 in_progress。" +- done_note: "2026-09-23:本机 Rancher Desktop Docker 用独立 tag 构建两版 API 镜像(当前 main 3cfff458c241e419078f43a6d0d52b35397cc5fa、历史提交 ac1870c6f1029d120940fecefef926d28eb0b007);两提交的 Docker 构建输入无差异。无网络、无端口发布的测试容器内匿名 GET /health/version 均返回 200,JSON 恰含 ok/component/revision/started_at;从新镜像切到旧镜像后 revision 由 3cfff458… 变为 ac1870c6…,未额外注入运行时版本变量。生产公开探针亦曾返回当前 main SHA;未在生产执行回滚。" +- retrospective: "【复盘】Enterprise System 不可变 revision 与版本健康端点;任务类型: 后端命令;复杂度: M;实际轮数: 未完整统计(跨会话);是否返工: 否(本轮验收);有效策略: 先证明两提交的 Docker 构建输入一致,再用两个真实 SHA 构建镜像,断网切换容器并读取同一匿名探针;遗留风险: 本轮只验证镜像切换后的版本真实性,没有在生产执行旧镜像回滚或模拟部署脚本的故障自动回滚;auto_applied_rules: R13;rule_effectiveness: R13=有效。" -### 🔵 P3-C. production delivery profile、安全探针与 onboarding 自检 -- status: in_progress +### ✅ P3-C. production delivery profile、安全探针与 onboarding 自检 +- status: done - complexity: M - files: src-tauri/src/commands/delivery_status.rs, src-tauri/src/commands/onboarding.rs, src-tauri/resources/onboarding/ - depends: A. Canonical 项目上下文与 capability schema - acceptance: "[cargo test] 读取声明了 production/http-json probe 的 capability profile → 得到固定 environment/component/context/url 字段;`file:`、URL 内凭证、动态认证头、超时响应和超限响应体分别被拒绝或降级为 unavailable;未配置项目返回 not_configured,onboarding 自检不覆盖已有声明。" +- done_note: "2026-09-23:cargo test --lib 187/187,通过 profile 结构、URL/凭证、DNS 私网地址、超时/响应体上限、未配置状态及 onboarding 不覆盖项目声明等测试;Enterprise 实际 profile 在 verify_onboarding 中被识别为 ready。另有两个无关的接入包版本过期项,未将整体自检误报为全绿。" +- retrospective: "【复盘】production delivery profile、安全探针与 onboarding 自检;任务类型: 后端命令;复杂度: M;实际轮数: 未完整统计(跨会话);是否返工: 未见本卡返工证据;有效策略: 将项目自有声明、URL 安全边界、超时与体积限制分别做纯函数测试,再用真实项目自检核对;遗留风险: Enterprise 的 git-workflow 管理块与基础能力包仍有版本差异,需独立升级验收。" -### 🔵 P3-D. deployment 双证据聚合与 MCP 契约 -- status: in_progress +### ✅ P3-D. deployment 双证据聚合与 MCP 契约 +- status: done - complexity: M - files: src-tauri/src/commands/delivery_status.rs, src-tauri/src/mcp_tools.rs, src-tauri/src/mcp_server.rs - depends: P3-A. Gitea 1.22 真实 deployment signal 实证与归一化, P3-C. production delivery profile、安全探针与 onboarding 自检 - acceptance: "[MCP] `get_delivery_status(project_id)` 对固定 fixture 调用 → Gitea success + probe healthy + SHA 相同返回 deployed;成功部署但 SHA 不同返回 drifted;deploy skipped 且运行旧 SHA 返回 skipped;deploy failure 同时保留实际运行 SHA;来源不可达返回 unavailable;证据不足返回 unknown,且现有 Git/PR/CI/review 顶层字段保持兼容。" -- progress_note: "2026-09-23:真实 Enterprise run #529 的 deploy-api 为 skipped;聚合层新增 skipped 与旧运行 SHA 回归测试,避免普通文档提交误报 drifted。隔离分支 cargo test --lib 187/187;正式版尚未加载新代码,production 探针当前为 401,待 PR/发布后做 MCP 端到端验收。" +- done_note: "2026-09-23:cargo test --lib 187/187 覆盖 deployed/drifted/skipped/failed/pending/unavailable/unknown 与运行 SHA 保留;真实 Enterprise main 合并提交 3cfff458c241e419078f43a6d0d52b35397cc5fa 经 scoped get_delivery_status 返回 deployed,Gitea deploy-api success 与 HTTP 探针 healthy 均明确列出,运行 SHA 与目标 SHA 一致;Git/PR/CI/review 顶层字段仍可读取。" +- retrospective: "【复盘】deployment 双证据聚合与 MCP 契约;任务类型: MCP工具;复杂度: M;实际轮数: 未完整统计(跨会话);是否返工: 是;返工原因: Gitea skipped 被当成成功部署后漂移,后续修正 deployed_at 时间语义;有效策略: 分开验证固定 fixture 的异常状态与真实 Enterprise 跨项目 MCP 双证据,并保留顶层交付字段;遗留风险: 2~4 周观测尚未完成,不能据一次成功部署推断长期收益。" ### ✅ P3-D1. 修正 deployment 时间证据与接入说明 - status: done @@ -358,12 +362,13 @@ v1 不新增 deployment history 表。最近部署时间和过程状态来自 Gi - done_note: "2026-09-23:聚合回归测试覆盖 success/skipped/failed/pending 的 deployed_at 与运行 SHA;cargo test --lib 187/187、scoped rustfmt、模板与说明文件对照、git diff --check 均通过。" - retrospective: "【复盘】部署时间证据与接入说明;任务类型: MCP工具;复杂度: M;实际轮数: 1;是否返工: 是;返工原因: skipped context 的更新时间被误写为 deployed_at,模板未同步 skipped 边界;有效策略: 对同一 fixture 同时断言状态、运行 SHA 和时间字段,并逐字对照分发模板;遗留风险: 正式版未加载本 PR,跨项目 MCP 实机仍待合并后终验;auto_applied_rules: R07,R13;rule_effectiveness: R07=有效,R13=未验证。" -### 📋 P3-E. Enterprise production 端到端验收与观测基线 -- status: todo +### 🔵 P3-E. Enterprise production 端到端验收与观测基线 +- status: in_progress - complexity: M - files: E:/code-project/enterprise-system/.lian-jing/capabilities.yaml, E:/code-project/enterprise-system/deploy/README.md, docs/ai-context/agent-button-system.md - depends: P3-B. Enterprise System 不可变 revision 与版本健康端点, P3-D. deployment 双证据聚合与 MCP 契约 - acceptance: "agent_verify: [HTTP API + MCP] 经用户批准合并并由 Enterprise 既有 main workflow 部署后,`GET https://api3.yljt.info/health/version` 的 revision 与目标 commit SHA 一致,`get_delivery_status(enterprise_project_id)` 返回 deployed 且同时列出 Gitea/runtime evidence;不触发炼境 SSH、部署、回滚或数据库写入。随后记录 2~4 周人工确认次数、失败定位时间与漂移发现数,未证明收益前不新增 UI。" +- progress_note: "2026-09-23 观测起点:Enterprise main SHA 3cfff458c241e419078f43a6d0d52b35397cc5fa 的公开 /health/version 与 scoped MCP 均返回同一运行 revision;MCP 列出 Gitea deploy-api success(run #531)和 http_probe healthy,deployment=deployed。观察窗为 2026-09-23 起 2~4 周;人工确认次数、失败定位时间、漂移发现数尚无完整基线数据,不据首次成功虚报收益或新增 UI。" ## 迭代衡量