ci / test (pull_request) Failing after 1m37s
Why: feature/svc-deploy-source-registry merged via PR #55 (merge8523415); its card must be marked done and archived per the no-pending-cards rule. Evidence: git log --merges origin/main shows8523415merging the branch; card backfilled with PR link and moved to .task/archive/. Impact: .task bookkeeping only. Refs: task.sh close
5.9 KiB
5.9 KiB
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):
- 按提交部署:可列出 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>](取 Releasesbuild/<v>/制品,sha256 对 manifest 校验)。--pick [dev|release]交互式编号选择(仅 TTY);--dry-run只解析打印计划。
- 新子命令
- 服务登记不限 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 网络。