Why: close the task card inside its own PR so landing it needs no post-merge backfill or separate close PR. Evidence: .task/feature-u8-sqlite-instance-guard-r2.md -> .task/archive/feature-u8-sqlite-instance-guard-r2.md; status 已完成(合入前闭合); PR #615 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/615. Impact: task metadata only; the card is archived within PR #615 and lands with its merge commit. Refs: task.sh close --self
20 KiB
feature/u8-sqlite-instance-guard-r2 任务卡
任务主记录:PR #615 https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/615;状态:已完成(合入前闭合);owner:weichen
基线与授权
-
权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)=
b5e23daed2 -
工作区:/home/weichen/projects/Agent-System-Dev-wt-feature-u8-sqlite-instance-guard-r2(worktree);分支:feature/u8-sqlite-instance-guard-r2
-
分支类型:standalone;root_target:main;immediate_target:main;accepting_requirements:false
-
需求分流:verdict=NEW;selected_initiative=无;requirement_sha256=14dd98bb26f46929106a9d4b7b76b137d9d996953e3466612d8140a2ad7bb426;triage_receipt=/tmp/cleanup-20261018/u8r2-triage.json;receipt_sha256=7c12187e848a9851e0ae47b2fb9345de393ff5dcd1625be6e3fd952e087a8074
-
授权与交付终点:U8 方案与实施计划由用户 2026-10-12 批准(见旧卡 .task/feature-u8-sqlite-instance-guard.md,PR #482);2026-10-18 worktree 收尾会话中用户授权“U8 同步主干后推进到合入”。本任务交付 Backend PR #210 合入后的 Dev gitlink 固定、U8 规格与 svc 文档;终点为 Dev PR 合入并收口,关闭 #482(被本任务取代)
-
交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
-
实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
-
合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
-
人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
-
停止条件(沿用旧卡):需改 scripts/svc.sh、对外 HTTP 契约、登录页,或需 live 实例/共享 PG 写入/部署
-
当前阶段:实施与自检;当前增量:I1(U8 移植到当前主干)
-
流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
目标与非目标
同一 SQLite 数据文件只允许一个活动服务运行时;应用连接核验 SQLite WAL+FULL,PostgreSQL 拒绝 fsync/full_page_writes/synchronous_commit 为 off(R11/R12,语义与旧卡一致)。旧 Backend PR #183 与 Dev PR #482 落后主干并有冲突(迁移号、main.go、PROJECT.md、architecture-baseline.json、gitlink),按治理规则不由 host 手解冲突,改为从当前主干新开 r2 由外部 worker 移植。
Dev 侧产物:docs/recovery/u8-sqlite-instance-guard.md、docs/svc.md 的 U8 段、PROJECT.md 与 policy/architecture-baseline.json 的必要登记、modules/backend gitlink 固定到 #210 合入后的 main SHA。
Dev pin 最终指向 Backend 276dd73824116fb55064eefef17f069ee1545ada(Backend 主干含 #211 + U8 + development-manager 对齐)。
非目标:不改 scripts/svc.sh;不在 live 实例故障注入;不写共享 PostgreSQL;账户 CLI 迁移互斥归 U7。
Agent 实施收据
路由与 fail-stop 规则见根目录 AGENT-EXECUTION.md 与 policy/delivery.md;每次尝试一行,原始日志留在源码外收据路径。
| 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 |
|---|---|---|---|---|---|---|---|---|---|---|
| backend-u8-sqlite-instance-guard-port-r2 | Backend cmd/agent-system、cmd/storage-migrate、internal/{app,instanceguard,store} | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 1 | cursor | completed | 7b379d28e74fc695dcda4750ad64f223d41ec5af(parent cac60c08,apply 快进到 Backend feature/u8-sqlite-instance-guard-r2) | 无 | /tmp/cleanup-20261018/u8-backend-port-run.json |
| dev-u8-sqlite-instance-guard-port-r2 | Dev docs/recovery、docs/svc.md、PROJECT.md、policy/architecture-baseline.json、modules/backend | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 1 | cursor | completed | b829de223b7a516f6b3206ed5eb0a3ced43df3d5(parent 0968a86,apply 快进) | 无 | /tmp/cleanup-20261018/u8-dev-port-run.json |
| dev-u8-backend-repin-d7be3fd | modules/backend | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 0 | — | invalid-config(canonical checkout is dirty:apply 后子模块检出未同步;未启动任何尝试,无副作用) | — | 无 | /tmp/cleanup-20261018/u8-dev-repin-run.json |
| dev-u8-backend-repin-d7be3fd | modules/backend | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 1 | cursor | completed(子模块检出对齐到已记录 pin 后重新运行) | 6d9bd7c4306c22f694d0939e8b682e5f57933ea6(parent b829de2,apply 快进) | 无 | /tmp/cleanup-20261018/u8-dev-repin-run2.json |
| backend-u8-dm-pin-align | Backend deps/development-manager | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 1 | cursor | completed | 276dd73824116fb55064eefef17f069ee1545ada(parent d7be3fd,apply 快进,已推送 #210) | 无 | /tmp/cleanup-20261018/u8-backend-dm-bump-run.json |
| dev-u8-backend-repin-276dd73 | modules/backend | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 0 | — | invalid-config(canonical checkout is dirty:evidence 写卡未提交;未启动尝试,无副作用) | — | 无 | /tmp/cleanup-20261018/u8-dev-repin2-run.json |
| dev-u8-backend-repin-276dd73 | modules/backend | AGENT-EXECUTION.md | implementation | cursor→agy→pi | 1 | cursor | completed | 0c645e4524c4709a37104ef00d3383d03cfda738(parent b1a0c29,apply 快进) | 无 | /tmp/cleanup-20261018/u8-dev-repin2-run2.json |
组合指针对齐:Backend #208 引入的 deps/development-manager 固定在 bd3a7de,Dev 顶层为 67784f4(其后代,+22 提交),make test-pins 硬失败。最小修复为 #210 追加 gitlink 对齐提交 276dd73(Backend agent-exec validate 与 dm governance check 在新 pin 下通过),Dev pin 改指 276dd73,test-pins 通过。
扩围记录(用户 2026-10-18 授权):Dev 主干原 pin b00e192(管理员密码管理 + 解释器路径修复)从未进入 Backend 主干,直接改 pin 到 U8 会回退已部署功能。经授权先以 Backend PR #211 将其合入 Backend 主干(merge a670d2b,PR HEAD 78ae397 CI 通过),再把 #210 与主干同步为 d7be3fd(CI 通过)并追加对齐提交 276dd73;#210 以 fast-forward 合入后 Backend 主干即为 276dd73,与 Dev pin 一致。
关联方向与规划
- 适用状态:已有主记录(恢复方案 r3 U8,用户 2026-10-12 批准)
- 主记录路径/版本:modules/documents/docs/proposals/2026-10-12-service-restart-data-recovery.md(r3);规格 docs/recovery/u8-sqlite-instance-guard.md
- 对应里程碑:恢复方案 U8(批次 A0 的隔离半边)
需求分析
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|---|---|---|---|---|---|---|
| R11 | 同一 SQLite 只允许一个活动服务 | 需补齐;主干无跨进程锁 | P0 | T8-1–T8-5(规格第 5 节) | recovery U1 身份 | 纳入(沿用 2026-10-12 批准) |
| R12 | 应用连接上的耐久档可核验 | 需补齐;DSN 无 synchronous=FULL 也无读回 | P0 | T8-6 | 无 | 纳入(沿用 2026-10-12 批准) |
方案与计划
- 方案引用:恢复方案 r3 U8;规格 docs/recovery/u8-sqlite-instance-guard.md(本分支由 worker 移植,迁移号随主干改为 v36)
- 实施计划引用:锁在 OpenSQLite 之前;instance_guard 为迁移 v36;migrate 子命令与 serve 共用 openServiceStore
- 测试计划引用:T8-1–T8-6 见规格第 5 节;PG 耐久在线拒绝只做策略函数单测,真实 PG 读回由 Dev CI test-backend-pg 覆盖
阶段记录
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|---|---|---|---|---|---|
| 需求拆解 | 恢复方案 r3 U8 | 通过 | 用户 | 2026-10-12 | 旧卡阶段评审;2026-10-18 用户授权同步主干推进到合入 |
| 需求评估 | 同上 | 通过 | 用户 | 2026-10-12 | 同上 |
| 需求表确认 | 同上 | 通过 | 用户 | 2026-10-12 | 同上 |
| 方案设计 | 同上 | 通过 | 用户 | 2026-10-12 | 同上 |
| 实施计划 | 旧卡与规格第 5 节 | 通过 | 用户 | 2026-10-12 | 同上;r2 仅移植,不改语义 |
| 实施与自检 | Backend 276dd73;Dev 3e32999 |
完成 | Cursor worker(5 次成功运行)+ host 集成 | 2026-10-18 | 实施收据表;host 本地组合树 go build/vet/test 与 test-boundaries/test-pins(SELF) |
| 正式测试与验收 | Dev 3e32999(pin Backend 276dd73) | 通过 | Gitea CI | 2026-10-18 | GATE:Dev runs/3775(test、test-pg、svc-realcombo);Backend runs/3773–3774(276dd73)、runs/3763–3764(#211 78ae397) |
| 代码 Review | Backend cac60c0..276dd73、ab12fea..b00e192;Dev b5e23da..3e32999 | 通过 | Host 主模型(非实施会话) | 2026-10-18 | 见“合入与清理 / Review 记录” |
| 合入 | 待定 | 待执行 | — | — | — |
| 合入核验与收口 | 待定 | 待执行 | — | — | — |
探索试验与迭代
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|---|---|---|---|---|---|---|---|
| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 |
同步记录
| 节点 | sync_base_sha | tested_head_sha | checked_at |
|---|---|---|---|
| 启动 | b5e23daed2 |
b5e23daed2 |
2026-10-18T09:22:34Z |
证据(Evidence)
| 时间(UTC) | 命令 | 被测HEAD | exit | 来源 | sha256(16) |
|---|
交付调度
- 调度状态:未入队;调度记录:无
- entry_id:无;attempt_id:无;窗口执行者:无
- 固定候选:无(base/head、组件与相关配置引用实际尝试)
- 调度依据:policy/delivery.md#合入调度
- 固定后证据:源码外 RECEIPT;实际结果后按授权原样导入和闭合
结果与验证
- 结果:U8 活动服务锁、耐久核验与 migrate 子命令移植到当前主干(Backend #210),Dev pin 与文档更新(本 PR);Backend 主干补齐 Dev 已部署的密码管理(#211);development-manager 组合指针对齐。
- 验证:Backend CI PASS(GATE:78ae397、7b379d2、d7be3fd、276dd73);Dev CI PASS(GATE:3e32999 runs/3775 test/test-pg/svc-realcombo);本地 test-boundaries/test-pins PASS(SELF,证据表);T8 故障注入、部署与运行验收 NOT_RUN(不在本任务范围)。
- 影响与剩余项:新增 Backend 表 v36;未部署。非阻塞记录:Backend
pkg/identityTestDSNFileMode 依赖 umask 022,本机 umask 0077 下失败(CI 通过);Backend 分支fix/execenv-python-sandbox-path、feature/auth-one-time-password已被 #211 吸收,可在阶段 4 回收。
规划进展与下一步
- 本次推进/剩余:U8 实现与 pin 合入;Documents 正文确认状态回写与 U8 运行验收留待后续
- 首选下一任务:worktree 收尾计划的下一条线(RDM settings 同步主干并重做阶段 7)
- 推荐依据:用户 2026-10-18 授权的收尾顺序
- 前置条件/待确认:无
- 预期产物/验收条件:见收尾计划
- 重复任务核对:取代 Dev #482 与 Backend #183;旧任务卡 feature-u8-sqlite-instance-guard 随旧 worktree 放弃式回收
- 启动授权:未授权(建议不自动启动新任务,仍须明确授权)
合入与清理
- Review 记录:Host 主模型(未参与实施,worker 为独立 Cursor 进程)于 2026-10-18 审阅 Backend
cac60c0..7b379d2(17 文件:迁移 v36、compat 36、storage-migrate 表清单、main.go migrate/adopt、DSN synchronous(FULL)+verifyDurability、openServiceStore 保留 S3/team 档拒绝就绪/系统身份核验)、d7be3fd..276dd73(仅 gitlink)、#211ab12fea..b00e192(建号/随机重置单事务+审计+no-store)、Devb5e23da..3e32999(文档与参考版仅 v28→v36 差异;PROJECT.md 仅两句;baseline 两条边)。无阻塞问题;重放依据为 Dev CI runs/3775 与 Backend CI runs/3773–3774。 - 冲突记录:旧分支(#482/#183)与主干冲突,不手解,改由 worker 在 R0
b5e23da与 Backendcac60c0上重新移植;#211/#210 经 Gitea 服务端无冲突同步主干(78ae397、d7be3fd,树已核实等于 merge-tree 结果);Dev task-sync changed=0。组合兼容由 Dev CI test-pg/svc-realcombo 核验。 - CI 记录:Dev 组合候选
3e32999ca9a22eef866fbf32ba2638375896b4a6runs/3775(test、test-pg、svc-realcombo)success;Backend276dd73824116fb55064eefef17f069ee1545adaruns/3773–3774(vet-and-test、governance)success;最终 HEAD 的 CI 以 PR #615 状态为准(GATE,Gitea Actions)。 - 合入记录:授权依据为用户 2026-10-18“U8 同步主干后推进到合入”及同日密码管理扩围授权。Backend #211 以 HEAD
78ae397合入 main(mergea670d2b);Backend #210 以 HEAD276dd73fast-forward 合入,Backend main =276dd73824116fb55064eefef17f069ee1545ada,与本 PR 的modules/backendpin 一致。Dev PR #615 在最终 HEAD CI 通过后由智能体合入;#482 关闭并注明被取代。 - 清理记录:NOT_RUN(授权依据、写者退出确认、worktree/分支/任务卡处置)
{
"summary_schema": 1,
"source": "SELF",
"timestamp": "2026-10-18T09:21:46.646488+00:00",
"command": "make precheck",
"exit_code": 0,
"cwd": "/home/weichen/projects/Agent-System-Dev",
"before_head": "b5e23daed2f0ea46261979de1d62e4de0cfa88f9",
"after_head": "b5e23daed2f0ea46261979de1d62e4de0cfa88f9",
"branch": "main",
"target_branch": "main",
"target_head": "b5e23daed2f0ea46261979de1d62e4de0cfa88f9",
"root_target": "main",
"immediate_target": "main",
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"output_tail": [
"make[1]: Entering directory '/home/weichen/projects/Agent-System-Dev'",
"[repo] branch=main head=b5e23daed2",
"[remote] origin/main=b5e23daed2 ahead=0 behind=0",
"[tree] clean submodules_drift=0 uninit=3",
"[warn] 3 个子模块未初始化——构建/测试前需物化(不阻断写入)",
"[worktrees] linked=9",
"[recycle] merged un-recycled branches: feature/layered-python-env",
"[initiatives] local cards (not authoritative): none",
"[hooks] core.hooksPath=scripts/hooks(pre-commit/post-merge 实际接线)",
"[facts] policy/facts.md 6 条事实均在有效期内",
"[required-reading] core/baseline.md, workflows/delivery.md §1, policy/delivery.md",
"[R0] b5e23daed2(完整:b5e23daed2f0ea46261979de1d62e4de0cfa88f9)",
"[worktree] before-sync: recursive component checks passed",
"[verdict] READY — 保留本次 precheck receipt 后建任务工作区:PRECHECK_RECEIPT=/tmp/task-precheck.json make task-start NAME=feature/your-branch",
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev'"
],
"output_sha256": "db6d6c9f778b033c6a7ee0e6242afdcd5ae114fabf3ebec55d0cba732be99ea5",
"receipt_sha256": "5e0530e3a51eadb4c241dd4bb2332e9f7f5c828bec6d085619ab5cf8ec30551d",
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/5e0530e3a51eadb4c241dd4bb2332e9f7f5c828bec6d085619ab5cf8ec30551d.json"
}
{
"summary_schema": 1,
"source": "SELF",
"timestamp": "2026-10-18T09:40:43.429397+00:00",
"command": "make test-boundaries test-pins",
"exit_code": 2,
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-u8-sqlite-instance-guard-r2",
"before_head": "a374cb83af0c0b3ffc7fb4b8fb0d2ee9e66cd793",
"after_head": "a374cb83af0c0b3ffc7fb4b8fb0d2ee9e66cd793",
"branch": "feature/u8-sqlite-instance-guard-r2",
"target_branch": "main",
"target_head": "b5e23daed2f0ea46261979de1d62e4de0cfa88f9",
"root_target": "main",
"immediate_target": "main",
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"output_tail": [
"ok modules/backend logging-system",
"ok deps/agent-native agent-intent",
"warn: deps/agent-native deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5",
"ok deps/agent-native error-code-system",
"ok deps/agent-native logging-system",
"ok deps/agent-squad agent-intent",
"ok deps/agent-squad agent-native",
"warn: deps/agent-squad deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5",
"ok deps/agent-squad error-code-system",
"ok deps/agent-squad logging-system",
"warn: deps/agent-intent deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5",
"ok deps/agent-intent error-code-system",
"ok deps/agent-intent logging-system",
"make[1]: *** [Makefile:192: test-pins] Error 1",
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-u8-sqlite-instance-guard-r2'"
],
"output_sha256": "40b4bada2231b745080bd65b82a9eceb94ff042e2654f00c119518698f80ebd4",
"receipt_sha256": "90b6c0864e7dac1838ea43070d823ae13b360c24d6532085c7c09a7c3cfa5603",
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/90b6c0864e7dac1838ea43070d823ae13b360c24d6532085c7c09a7c3cfa5603.json"
}
{
"summary_schema": 1,
"source": "SELF",
"timestamp": "2026-10-18T09:45:38.779500+00:00",
"command": "make test-boundaries test-pins",
"exit_code": 0,
"cwd": "/home/weichen/projects/Agent-System-Dev-wt-feature-u8-sqlite-instance-guard-r2",
"before_head": "0c645e4524c4709a37104ef00d3383d03cfda738",
"after_head": "0c645e4524c4709a37104ef00d3383d03cfda738",
"branch": "feature/u8-sqlite-instance-guard-r2",
"target_branch": "main",
"target_head": "b5e23daed2f0ea46261979de1d62e4de0cfa88f9",
"root_target": "main",
"immediate_target": "main",
"before_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"after_tracked_diff_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"output_tail": [
"ok modules/backend logging-system",
"ok deps/agent-native agent-intent",
"warn: deps/agent-native deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5",
"ok deps/agent-native error-code-system",
"ok deps/agent-native logging-system",
"ok deps/agent-squad agent-intent",
"ok deps/agent-squad agent-native",
"warn: deps/agent-squad deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5",
"ok deps/agent-squad error-code-system",
"ok deps/agent-squad logging-system",
"warn: deps/agent-intent deps/development-guidelines is 26b562d2e34f, Dev is 2688fd2be6a5",
"ok deps/agent-intent error-code-system",
"ok deps/agent-intent logging-system",
"pins ok",
"make[1]: Leaving directory '/home/weichen/projects/Agent-System-Dev-wt-feature-u8-sqlite-instance-guard-r2'"
],
"output_sha256": "79539abc4b3e10f25c6a859b7b8d3e1f1c9b1da1945f117226803949b1c20397",
"receipt_sha256": "19650ed0a61f602519de399d0429fcb00029062249276b9ce43148b1f6db7968",
"receipt_path": "/home/weichen/.cache/agent-system-dev/evidence/19650ed0a61f602519de399d0429fcb00029062249276b9ce43148b1f6db7968.json"
}
闭合记录(合入前折叠)
- 本卡在 PR #615(https://git-home.u1680832.nyat.app:30319/weichen/Agent-System-Dev/pulls/615)合入前闭合并归档,随该 PR 一同合入。
- 该 PR 的合并提交即本任务的落地记录。
- 合入后无需回填,也无需单独的闭合 PR。