Files
Agent-System-Dev/.task/archive/feature-svc-deploy-source-registry.md
weichen 71fb2aff89
ci / test (pull_request) Failing after 1m37s
Close 1 merged task card and archive it
Why: feature/svc-deploy-source-registry merged via PR #55 (merge 8523415);
its card must be marked done and archived per the no-pending-cards rule.
Evidence: git log --merges origin/main shows 8523415 merging the branch;
card backfilled with PR link and moved to .task/archive/.
Impact: .task bookkeeping only.
Refs: task.sh close
2026-09-30 13:22:23 +00:00

5.9 KiB
Raw Permalink Blame History

feature/svc-deploy-source-registry 任务卡

任务主记录:https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/55;状态:已完成(PR #55 已合入 main,8523415);owner:weichen

基线与授权

  • 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 8c4fd01947
  • 工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-svc-deploy-source-registry(worktree);分支:feature/svc-deploy-source-registry
  • 授权与交付终点:用户授权实施 svc.sh 增强(提交选择部署 + 服务登记);终点 = 实现合入 main 并回收工作区。仅改 Dev 仓 scripts/svc.sh 与顶层 Makefile 帮助文案,不动模块 gitlink。

目标与非目标

目标(scripts/svc.sh):

  1. 按提交部署:可列出 Dev 仓(本仓,每提交 = 一组固定 gitlink 组合)与 Releases 仓 (../Agent-System-Releases,每提交 = 一个发布版本)的提交,并选定提交部署:
    • 新子命令 svc.sh commits [dev|release] [N]:编号列表(短 SHA、日期、主题;release 附 版本号与 devCommit;dev 标注 HEAD 与已部署环境)。
    • svc.sh <env> deploy --from SOURCE:local(默认,保持现行为:构建当前工作区)| dev[<@sha>](隔离 worktree 物化 gitlink → make build → 复制制品)| release[<@version|sha>](取 Releases build/<v>/ 制品,sha256 对 manifest 校验)。
    • --pick [dev|release] 交互式编号选择(仅 TTY);--dry-run 只解析打印计划。
  2. 服务登记不限 dev/prod:环境名泛化(^[a-z][a-z0-9-]{0,15}$,保留字除外), SVC_<ENV>_ADDR/DATA/DSN/AUTH/MOCK 对任意环境生效;自定义环境无显式地址时端口由 环境名确定性派生(8800+hash,冲突扫描递增)。启动登记落盘:
    • runtime/<env>/svc.env(当前态:env/pid/addr/data/bin/source/version/started)
    • runtime/<env>/history.jsonl(追加式:deploy/start/stop 事件,含来源与结果)
    • 环境自包含:runtime/<env>/{bin/agent-system,plugins/},跨环境互不串版本。
    • svc.sh status 扫描 runtime/* 枚举全部环境(不再硬编码 dev/prod); 新子命令 svc.sh history [env] [N] 跨环境合并查看。

非目标:不改 agent-system serve 的接口与二进制行为;不做容器/多机;不做 git fetch 拉远端新 提交(commits 只列本地已有对象,缺失时提示先 fetch);不改 Releases 仓脚本。

设计要点

  • 兼容:dev/prod 默认地址、SVC_DEV_/SVC_PROD_ 变量、stop 只停自己 pidfile 的安全约束、 端口占用预检、播种逻辑全部保留。start 改用环境目录内二进制;旧环境(无环境产物)首次 需重新 deploy(文档注明)。
  • dev@sha 构建用 git worktree add --detach runtime/.worktrees/<sha> + 递归 submodule update,不触碰主检出工作区(保护他人现场);成功后回收 worktree,失败保留供排障。
  • release 制品校验失败即中止部署(事实与声明一致);无 build/ 时提示在 Releases 仓跑 scripts/build-release.sh <v>。
  • Releases 仓定位:SVC_RELEASES_DIR > ../Agent-System-Releases(相对本仓根)。

同步记录

节点 sync_base_sha tested_head_sha checked_at
启动 8c4fd01947 8c4fd01947 2026-09-30T13:03:31Z

结果与验证(完成后填写)

  • 结果:scripts/svc.sh 重写完成(348 → ~790 行),Makefile 增加 svc-commits/svc-history 目标。
    • 提交选择部署:commits [dev|release] [N] 列举(dev 标注 HEAD/已部署环境;release 附版本 与 devCommit);deploy --from local|dev[@sha]|release[@版本|sha];--pick 交互选择; --dry-run 打印计划。
    • 服务登记:环境名泛化 + 派生端口;环境自包含(bin/plugins/data/记录);svc.env 当前态 + history.jsonl 事件流;status 扫描发现全部环境;history [env] [N] 汇总。
    • 附带修复:旧制品二进制不识别 --dsn/--auth 时按 serve 用法探测自动省略(0.1.0 制品实测)。
  • 验证(全部在任务工作区 runtime 内执行,未触碰主检出与 Releases 仓):
    • bash -n 通过;shellcheck 本机未安装(缺项)。
    • commits dev/release 列举正确(无 versions/ 的骨架提交显示 -)。
    • dry-run 三种来源计划正确;非法 sha/版本/来源/环境名/保留字均报错 exit 2。
    • stub 二进制全链路:start → status 发现 → svc.env(pid/addr/bin/version)→ HTTP 200 → stop → history 登记 start/stop ok。
    • 真实 release@0.1.0 部署:sha256 校验通过 → 产物复制 → 启动(HTTP 200)→ status 显示 来源 → commits release 标注 [已部署:testrel]。
    • 失败路径:sha256 不符(伪造 manifest)拒绝部署并登记 deploy fail;启动即退登记 start fail 且 restart 传播 exit 1;--pick 非 TTY 拒绝。
    • dev@d26187e 真实部署:隔离 worktree 递归物化(子模块精确落位该提交 gitlink)→ make build → 版本串 d26187e+core=b6d428b+backend=9a545b1+frontend=9fc1387+ui=3f692d2(与该 提交组合一致)→ 产物复制 → 启动 HTTP 200 → status 来源 dev@d26187e → 构建 worktree 已回收 (git worktree list 无残留);该提交产物同样不识别 --auth,自动省略逻辑生效。
    • 兼容:旧格式 svc.env(仅 addr/data)在 status 正常显示;SVC_STAGING_ADDR/--env 文件/ --port 覆盖生效;make svc-commits/svc-history 可用。
  • 影响与剩余项:存量环境(旧脚本部署)无环境产物,升级后首次需重新 deploy(已在头注释注明); commits 只列本地对象,远端新提交需先 git fetch(设计内);dev@sha 构建需 npm/go 网络。