Record the account and recovery plan review
Why: preserve evidence, current contracts and the next review scope without changing the running system. Evidence: SELF startup, sync and document validation receipts in the task card; runtime and fault acceptance NOT_RUN. Impact: task metadata, planning index and account specifications only; component pins and business code unchanged. Refs: feature/svc-account-durability-plan; Documents account r2 and recovery r3
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -41,6 +41,8 @@ U2 起实施与部署分别评审。
|
||||
二进制/源码统一部署、环境准备、无初始密码开户与账户恢复;一次性 Key 仅兑换设密受限会话;
|
||||
2026-10-12 已批准;U1/U4 实施启动中;规格见 `docs/svc-deploy/`。
|
||||
|
||||
上述账户/恢复方案已有 U1/U4 与 recover/watchdog 基础源码。2026-10-12 的 dev 8788 续查形成账户 r2、恢复 r3 **候选草案**:帮助与能力发现、账户事务/审计/登录接线、SQLite 活动服务隔离及备份恢复增补。新增内容待人工评审;Documents 独立分支 `feature/svc-account-durability-plan` 仅本地保存,不推进本仓 gitlink;本入口原链接仍指固定版。候选交接与核查见[续审记录](docs/svc-deploy/2026-10-12-account-durability-plan-review.md)。
|
||||
|
||||
## 验证
|
||||
|
||||
`make test` 先核对子模块工作树与固定指针,再运行治理脚本、公开边界、跨仓指针、库及各模块
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
# svc 账户与持久化方案续审记录
|
||||
|
||||
日期:2026-10-12(Asia/Shanghai)。范围:只读续查、两份既有主方案候选修订与文档核查;业务实施、账户变更、迁移、故障注入、部署和远端交付未执行。
|
||||
|
||||
## 对象与权威
|
||||
|
||||
- Dev 权威基线:2723e452440fc11022c0f6d916cd34cc4cd17335;文档任务工具增加的启动/同步提交仅为任务元数据。
|
||||
- Documents 候选:独立 origin/main=1048e7c6afc2bb4efc541e68575c3fb2669ee332,分支 feature/svc-account-durability-plan;Dev 固定 gitlink=8d0810bd35f4934e0ad37fb96d7bab6d7a732473 未推进。
|
||||
- 唯一方案正文继续为 Documents 的 `docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md` r2 和 `docs/proposals/2026-10-12-service-restart-data-recovery.md` r3。本记录不复制需求或实施合同,不成为第三份规划。
|
||||
- 两份目标文件在 Documents 两个基线间相同,本轮保留最新主干上的其他文档;原批准不扩展到新增修订。
|
||||
- Documents 候选工作区:Agent-System-Documents-wt-feature-svc-account-durability-plan;Dev 证据工作区:Agent-System-Dev-wt-feature-svc-account-durability-plan。以本地文档提交固定对象并满足干净工作区同步门禁,不推送/建 PR/推进 gitlink;任务工具元数据提交单独存在,本地保存不证明新增修订获批。
|
||||
|
||||
## 已捕获证据与限制
|
||||
|
||||
原始脱敏输出在本任务卡 `.task/feature-svc-account-durability-plan.md` 的 SELF 收据中,包括首次 precheck、task-sync 和 17:37 的只读运行观察。第一份观察收据对非秘密元数据也作了保守遮蔽;第二份使用明确的非秘密字段名重新实测,不修改或补造第一份收据。
|
||||
|
||||
dev 实际打开原 SQLite 文件;账户身份未变,当前最后设密时间为16:03:20。旧快照的摘要相等性比较只证明字段重写,不证明明文变化。当前没有账户审计,历史操作者仍未知。候选实例本轮已停止,历史共享数据不写成当前双服务事实。后续审计只能记录新事件,不能回填猜测的旧事件。
|
||||
|
||||
本轮没有登录、账户 CLI 查询、migrate 或故障试验。文档差异、链接、稳定编号和审阅属于 SELF 文档核查,不是业务 PASS,也不替代 GATE/REPLAY/人工批准。
|
||||
|
||||
## 文档审阅
|
||||
|
||||
七个视角均已返回,采用 ce-doc-review 非交互文档审阅;结果为 SELF 文档自审,不代替独立正式验收或人类批准。跨模型外部调用未执行,本轮没有相应资源/外部调用授权;未创建 provider 会话或读取其凭据。
|
||||
|
||||
| 视角 | 结果与处置 |
|
||||
|---|---|
|
||||
| 一致性 | 返回一项旧修订号意见,但所引句子不存在于磁盘全文;核查后拒绝,不按未经证实引文改文档 |
|
||||
| 可行性 | 无保留意见;近期文件、事务与服务/CLI边界可执行性已核查,未跑实验 |
|
||||
| 产品 | 采纳:首批增加另行授权的 dev 原账户正常登录及更新验收,不能只以副本测试代替原故障闭环 |
|
||||
| 交互 | 采纳三项:两类 Key 入口和错类型引导、Key 消费后受限会话失效的重发返回路径、operation 级 hold 对账界面接线 |
|
||||
| 安全 | 采纳:灾难恢复不得复活恢复点后已撤销的凭据/权限;普通重启不应用此规则 |
|
||||
| 范围 | 无保留意见;主方案与配套规格继续承载合同,新增内容仍待人工评审 |
|
||||
| 对抗 | 采纳:首次管理员以实例级串行点单胜,并用不同 owner 的真实双进程场景验证;另独立核对了凭据复活风险 |
|
||||
|
||||
共采纳六项实质改进。根 Agent 对照实际 auth/login-key 认证、首次引导、当前前端入口与磁盘原文核对后应用;未把 reviewer 的通过叙述当作业务证据。配套 U1 的禁止隐式 migrate、U4 的实例级引导锁同步为候选合同,避免执行者沿用矛盾的历史规格;主方案也明确 CLI 安全 DSN 输入仍需实现。
|
||||
|
||||
文档检查方法覆盖差异、相对链接、稳定 R/KTD/U 编号、现有源码/测试路径及原收据完整性。结果以任务卡工具收据为准;首轮发现一处尾随空格已修正。最终同步曾因文档未保存被拒(完整失败收据保留),以本地文档提交保存后重试;不移动或隐藏现场绕过门禁。业务/浏览器/故障/恢复/CI验证均 NOT_RUN;正式 Documents/Dev 审核、PR、组合与运行验收未执行。
|
||||
|
||||
## 后续交接
|
||||
|
||||
优先审核新增的恢复 U8 与账户 U7/U5,确认服务/CLI/迁移边界和隔离测试范围;然后才启动对应实现任务。原恢复 A/B/C 仍保留,首批账户/隔离工作不等于全系统恢复完成。近期 U2/U3 通用安装扩展不阻塞这批问题。
|
||||
|
||||
本地文档提交仅保存本轮审阅对象。方案推送、Documents PR、Dev gitlink 推进、正式组合验证、部署/迁移与故障演练保持未执行;本地草案审核不自动授权这些动作。
|
||||
@@ -1,6 +1,7 @@
|
||||
# U1 实例—账户绑定补齐(规格 v0.1)
|
||||
# U1 实例—账户绑定补齐(规格 v0.2 候选)
|
||||
|
||||
状态:已启动实施(分支 `feature/svc-deploy-u1-account-binding`)。主记录:`modules/documents/docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md` §7 U1。
|
||||
上述为 v0.1 历史状态,基础已见当前固定源码。本轮 v0.2 只细化账户方案 r2 的 R15/U7,新增合同未批准或实现;Documents 候选尚未推进 Dev gitlink。
|
||||
前置:恢复方案 recovery U1 已合入 main(Dev #415)——`docs/recovery/u1-identity-manifest.md`、`scripts/svc_manifest.py`、启动身份校验与 `svc init`。
|
||||
本增量**不重做** manifest 层;只补齐账户操作与安装入口对既有身份合同的消费缺口。
|
||||
|
||||
@@ -18,7 +19,7 @@
|
||||
|---|---|---|
|
||||
| B1 | 账户 CLI 只接受「实例名 → manifest 解析出的 data_root / db / secrets 引用」 | 新增消费方 |
|
||||
| B2 | 禁止回落默认 `./data` 或未声明 DSN | 新增硬拒绝 |
|
||||
| B3 | OpenExisting:目标不存在则失败;可选禁止自动 migrate | Backend 新增打开模式 |
|
||||
| B3 | OpenExisting:目标不存在则失败;账户模式只校验兼容 schema,禁止自动 migrate | r2 候选收紧,当前代码仍 migrate |
|
||||
| B4 | 无 `flock` / 锁获取失败 → 拒绝冲突操作(deploy/start/stop/user/*) | 收紧现状「直通」 |
|
||||
| B5 | `install` / 兼容 `--from` 写入同一 manifest 身份字段,不另起配置根 | 入口骨架 |
|
||||
|
||||
@@ -29,7 +30,7 @@
|
||||
| `scripts/svc.sh` | `user` 子命令骨架:解析 `ENV_NAME` → 读 manifest/`svc_manifest.py` → 组装 `--data`/`AGENT_SYSTEM_DSN`/`--open-existing` 调 `$ENV_BIN`;锁检查收紧;`install` 可先做 dry-run 计划打印(完整 binary/source 属 U2) |
|
||||
| `scripts/svc_manifest.py` | 如需:导出「账户操作所需最小字段」查询(data_root、db mode/ref、auth);不改 schema=1 语义 |
|
||||
| `modules/backend/cmd/agent-system/main.go` | `user` 子命令增加 `--open-existing`(或全局 store 打开标志);缺库/缺目录失败 |
|
||||
| `modules/backend/internal/store/store.go` | `OpenExistingSQLite` / PG 等价:不 `MkdirAll` 创建新数据根;可选 `MigrateMode=requireCompatible\|forbid` |
|
||||
| `modules/backend/internal/store/store.go` | `OpenExistingSQLite` / PG 等价:不创建新根,账户模式只校验兼容;迁移另行执行 |
|
||||
| `tests/test_svc_identity.py` 或新 `tests/test_svc_user_binding.py` | 错误 data、缺 manifest、无 flock 拒绝;正确绑定命中 |
|
||||
|
||||
## 4. OpenExisting 合同
|
||||
@@ -39,12 +40,12 @@ OpenExisting(path|dsn, opts):
|
||||
if storage path/parent missing → error (do not create)
|
||||
if SQLite file missing → error
|
||||
open DB
|
||||
if opts.migrate == forbid → read schema version only; mismatch → error
|
||||
if opts.migrate == requireCompatible → existing migrate(); reject unknown newer schema (keep current migrate gate)
|
||||
account operations → read schema/identity only; incompatible or missing identity → error
|
||||
explicit maintenance migration → separate approved entry with service isolation
|
||||
never create empty business DB as side effect of account recovery
|
||||
```
|
||||
|
||||
CLI 默认:账户运维命令使用 `OpenExisting` + `requireCompatible`。
|
||||
CLI 默认:账户运维命令使用 `OpenExisting` + 兼容检查,不 migrate。当前 requireCompatible 自动迁移属于待整改基础,不是本候选允许的行为。
|
||||
`svc init` / 首次服务启动仍走现有 Open(可创建)路径,与 recovery U1 一致。
|
||||
|
||||
## 5. 锁合同
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# U4 一次性登录凭据与认证限制(规格 v0.1)
|
||||
|
||||
状态:已启动实施(Backend/Dev 分支 `feature/svc-deploy-u4-login-key`)。主记录:`modules/documents/docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md` §7 U4 / §8。
|
||||
上述为历史规格状态,基础已见当前固定源码。本轮 r2 账户事务/帮助/审计增补待评审;运维打开以配套 U1 v0.2 候选和主方案 R15/U7 为准,禁止隐式 migrate。Dev gitlink 未推进本轮 Documents 候选。
|
||||
本增量在 **Backend**(及必要迁移/CLI)落地;Frontend 兑换与设密页属 **U5**,但 U4 须提供稳定 HTTP 合同供 U5 接线。
|
||||
|
||||
基线:任务卡 R0;Backend 实现提交见 gitlink。真实 PG 缺环境标 NOT_RUN。
|
||||
@@ -73,7 +74,8 @@ agent-system user list # 含是否已设密、未使用登录 Key 计数(无
|
||||
agent-system user bootstrap-admin --owner <id> [--open-existing]
|
||||
```
|
||||
|
||||
仅当:库已存在且 **无任何 users 行** 且 **无历史业务标记**(规格:至少 `projects`/`messages` 等核心表为空或实例 init marker 声明 fresh)。并发用事务/`UNIQUE` 保证单胜。有数据却无管理员 → **拒绝自动接管**,要求显式运维流程(本增量可只返回明确错误)。
|
||||
仅当:库已存在且 **无任何 users 行** 且 **无历史业务标记**。fresh marker 是辅助身份,不替代实际业务检查;历史业务含全部必需模块/插件的权威清单。
|
||||
实例级串行保证单胜:PG 锁定既有实例身份行、SQLite 用立即事务,取得锁后重新核验;引导与能改变此前置条件的开户共用串行点。owner UNIQUE 只防同名,不能防不同 owner 引导。账户、激活 Key 和审计同事务;两个独立进程以不同 owner 竞争须仅一个成功。有数据却无管理员拒绝自动接管,走显式运维。
|
||||
|
||||
失陷恢复:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user