Heicode 今日工作总结与后续计划
日期：2026-05-02
工作区：/Volumes/macOS/GO/heicode
分支策略：未新建分支，所有工作均在当前 main 上完成

一、今日完成简介

1. 项目主线梳理
- 已确认 docs/heicode.md 与 docs/plan.md 是当前实施主线。
- 已明确旧 Agnet API 草案、旧 M1-M5 计划、旧架构说明不作为当前实施依据。
- 已恢复 docs/README.md 为主线文档入口，并加入 Agnet 平台请求契约文档入口。

2. P0 文档边界收敛
- 已完成 P0：文档入口与实施依据收敛。
- 已清理 docs 下临时 sync-conflict 文档，当前未发现 docs 目录下残留同步冲突文件。
- 已提交：912e315 docs: converge heicode plan entrypoint。

3. P1 Manager 资源模型最小实现
- 已实现 Manager 侧最小 Resource Binding / Resource Grant 后端能力。
- 新增资源模型：ResourceBinding、ResourceGrant。
- 已加入 GORM 自动迁移。
- 新增认证 API：/api/resources 与 /api/resource-grants。
- 支持的资源类型包括：git、sk、project_document、cloud_account、cloud_resource。
- 资源授权可表达 tenant/project/resource 到 role/子 Agnet 的最小权限关系。
- 已实现 secret_ref-only 原则：只保存密钥引用，不保存明文密钥。
- 已加入校验，拒绝 metadata、permission_scope、constraints 中出现 password、token、secret、private_key、access_key、credential 等明文敏感字段。

4. Agnet 平台请求参数文档
- 已新增文档：docs/integration/agnet-platform-request-contract.md。
- 该文档说明 Manager 主动请求 Agnet 平台时需要携带的参数。
- 覆盖内容包括：
  - 创建子 Agent 部署 POST /api/agnet/deployments。
  - orchestration_plan、agents、sk_sources、runtime_execution、sk_access_policy、resource_grants 字段说明。
  - secret_ref、安全边界、租户/项目边界、预算与模型约束。
  - 部署状态查询、停止部署。
  - 日志接口：批量日志、实时 SSE 日志流。
  - 监控接口：项目 dashboard snapshot、单部署 metrics。
  - 事件接口、审计日志接口。
  - SK 快照解析与查询接口。
- 已提交：ab71d5b docs: add agnet platform request contract。

5. 团队协作与校验
- 已启动并完成 5 个 OMX worker 的协作任务。
- 5 个 worker 均已完成并关闭，团队已 graceful shutdown。
- 当前 main 分支 ahead origin/main 15 个提交。
- 当前工作区干净。

二、今日验证情况

已通过的校验：
- git diff --check：通过。
- gofmt changed backend files：通过。
- go vet ./controller ./model ./router：通过。
- go test ./controller ./model ./router：通过。
- 重点 controller/model/router 变更包测试：通过。
- docs Markdown fence 检查：通过。

已知未通过但不属于本次改动直接引入的问题：
- go test ./... 存在历史/环境相关失败：
  1. heicode 根包 main.go embed 依赖 web/classic/dist，但当前环境缺少该构建产物。
  2. relay/channel/claude 相关既有测试失败。
  3. relay/helper stream scanner 相关既有测试失败。
- website/frontend typecheck/lint 在部分 worker 环境中因依赖未安装或 bun 不存在无法完整运行。

三、资源使用情况

1. 本地开发资源
- 使用当前外置盘工作区：/Volumes/macOS/GO/heicode。
- 使用 Git 当前 main 分支，无新分支。
- 使用 Go 后端测试、gofmt、go vet 完成验证。
- 使用 OMX team 5 worker 协作完成分析、实现、测试、文档和验证任务。

2. 数据库与缓存资源
- PostgreSQL 与 Redis 被确认为项目运行资源。
- 本次没有把 PostgreSQL、Redis 的真实连接信息写入代码、文档、Git、日志或提交。
- 本次本地验证未直接连接生产 PostgreSQL 或 Redis。
- 后续如需线上验证，应从 VM 环境变量或 Secret Store 临时读取，不应硬编码到仓库。

3. 云与部署资源
- 当前未执行生产 VM SSH 部署。
- 当前未对 Azure PostgreSQL、Redis、AKS 或其他云资源执行写操作。
- 当前未消耗可量化的线上运行资源。
- 本次新增的资源模型与 Agnet 请求契约为后续生产部署和平台联调准备。

4. Git 资源
- 当前 main 相对 origin/main ahead 15 个提交。
- 未新建分支。
- 尚未执行 git push。
- 目标远端仍应使用既有 origin，推送时不得把密码写入 remote URL、命令、脚本或日志。

四、部署情况

1. 当前部署状态
- 代码和文档已在本地 main 完成并提交。
- OMX team 已完成并关闭。
- 尚未推送到远端仓库。
- 尚未 SSH 到生产 VM 执行部署。
- 尚未执行 Docker/服务重启/迁移等生产动作。

2. 当前可部署基础
- P0 文档边界已收敛。
- P1 Manager 资源模型最小后端能力已实现。
- Manager → Agnet 平台接口参数文档已补齐，包含日志和监控接口。
- 变更包 controller/model/router 的测试与 vet 已通过。

3. 部署前阻塞/风险
- 需要确认是否允许将 main 推送到指定 Git 仓库。
- 需要确认生产 VM 当前运行方式、服务名、docker compose 文件与环境变量状态。
- 需要在 VM 上使用现有环境变量读取 PostgreSQL/Redis 配置，禁止写入仓库。
- 需要处理或确认 go test ./... 的既有失败是否影响生产发布。
- 如部署需要前端 embed 产物，需要在部署流程中构建 web/classic/dist 或确认当前生产镜像构建流程会生成该目录。

五、后续需要完成简介

1. Git 同步
- 在不新建分支的前提下，将当前 main 推送到指定远端。
- 推送过程必须使用安全凭据输入方式，不能把密码写入 remote URL、shell history、脚本或日志。

2. 生产部署
- SSH 到生产 VM。
- 在 VM 上通过环境变量确认 PostgreSQL、Redis、Manager 运行配置。
- 使用仓库更新方式拉取当前 main。
- 执行生产构建、数据库迁移、服务重启或 docker compose 更新。
- 部署后检查服务健康、日志、API 可用性。

3. P1 后续完善
- 将 Resource Binding / Resource Grant 与现有项目、用户、Agnet 部署流更紧密打通。
- 完善资源授权 revoke/disable/status transition。
- 补充跨数据库兼容验证，尤其 PostgreSQL 线上迁移验证。
- 补充前端资源绑定与授权页面，避免展示任何 secret。

4. Agnet 平台联调
- 按 docs/integration/agnet-platform-request-contract.md 与 Agnet 平台确认最终字段。
- 联调创建部署、查询状态、停止部署、日志拉取、监控快照、事件、审计日志。
- 明确哪些接口由 Manager 内部提供，哪些接口由 Agnet 平台提供。
- 确认 Agnet 平台对日志和监控返回的脱敏策略。

5. 测试与质量
- 解决或隔离 go test ./... 的既有失败。
- 确保 frontend/web 依赖可安装并完成 typecheck/lint/build。
- 增加 e2e 验证：创建资源 -> 创建授权 -> 创建 Agnet 部署 -> 查询事件/日志/监控。

六、安全说明

- 本次文档和代码未写入任何真实密码、Token、Redis 密钥、PostgreSQL 密码、SSH 密码或 Git 密码。
- 文档示例使用占位符或 Azure Key Vault `azkv://...` secret_ref。
- 后续部署与推送仍需继续遵守：密钥只走环境变量、Secret Store、交互式凭据或平台安全注入，不进入 Git。
