diff --git a/.task/feature-u8-sqlite-instance-guard-r2.md b/.task/feature-u8-sqlite-instance-guard-r2.md index 946988fb..93f59ecf 100644 --- a/.task/feature-u8-sqlite-instance-guard-r2.md +++ b/.task/feature-u8-sqlite-instance-guard-r2.md @@ -9,17 +9,22 @@ - 分支类型: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 通过后合入) - 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收 -- 当前阶段:需求拆解;当前增量:I1(待定义) +- 停止条件(沿用旧卡):需改 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。 + +非目标:不改 scripts/svc.sh;不在 live 实例故障注入;不写共享 PostgreSQL;账户 CLI 迁移互斥归 U7。 ## Agent 实施收据 @@ -27,35 +32,36 @@ | 单元 ID | 预期范围 | 配置摘要 | 角色 | 候选顺序 | attempt | CLI/模型 | 终态 | transport | fallback | 源码外收据路径 | |---|---|---|---|---|---|---|---|---|---|---| -| 待定义 | — | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | NOT_RUN | — | +| 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 | ## 关联方向与规划 -- 适用状态:待核对(无适用规划时说明原因) -- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文) -- 对应里程碑:待核对 +- 适用状态:已有主记录(恢复方案 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 | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 | |---|---|---|---|---|---|---| -| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 | +| R11 | 同一 SQLite 只允许一个活动服务 | 需补齐;主干无跨进程锁 | P0 | T8-1–T8-5(规格第 5 节) | recovery U1 身份 | 纳入(沿用 2026-10-12 批准) | +| R12 | 应用连接上的耐久档可核验 | 需补齐;DSN 无 synchronous=FULL 也无读回 | P0 | T8-6 | 无 | 纳入(沿用 2026-10-12 批准) | ## 方案与计划 -- 方案引用:待填写(含对象版本) -- 实施计划引用:待填写(含增量与需求 ID) -- 测试计划引用:待填写(含需求 ID 与验收条件) +- 方案引用:恢复方案 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 仅移植,不改语义 | | 实施与自检 | 待定 | 待执行 | — | — | — | | 正式测试与验收 | 待定 | 待执行 | — | — | — | | 代码 Review | 待定 | 待执行 | — | — | — |