4.3 KiB
4.3 KiB
id, title, phase, deps, status, created, issue, context_ref, claim_branch, work_branch, write_paths
| id | title | phase | deps | status | created | issue | context_ref | claim_branch | work_branch | write_paths | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| T-202 | 本地安装状态识别 | 2 |
|
DONE | 2026-07-16 | null | 2e21c9f327 |
null | agent/codex/T-202 |
|
问题 / 背景
Catalog 已能给出可信远端版本和兼容性,但客户端还不能从 apps/<id>/installed-app.json 恢复实际安装版本,也没有统一的 SemVer 比较与 12 种用户状态推导。若 UI 自行拼接磁盘、版本和任务状态,状态优先级会漂移且容易在 Layout 中引入 IO。
方案
- 在
core/domain实现 SemVer 2.0.0 解析/比较,正确处理 prerelease,忽略 build metadata 的排序影响。 - 在
core/storage定义 installed-app.json v1 模型和严格校验,使用临时文件 + 同目录 backup 原子替换,主文件缺失时可读取中断遗留 backup。 - 本地 Inspector 识别安装记录与
install-transaction.json/backup 是否存在,只返回快照,不推导 UI 状态。 - 在 domain 建立纯
ResolveAppStatus:按恢复事务、活跃操作、运行状态、兼容性、本地版本与 Catalog 版本推导已有 12 种 AppStatus。 - Catalog 版本字段校验复用 domain SemVer,避免协议解析与本地比较出现两套版本规则。
- 落地
schemas/installed-app.schema.json,同步协议、架构与当前状态文档。
验收要点
- installed-app.json 可严格读写;未知字段、ID 不匹配、非法版本/架构/channel/文件路径/哈希被拒绝。
- 写入使用同目录临时文件 + backup 替换;主文件缺失时能读取中断遗留 backup。
- 未完成安装事务能被识别为
rollback_pending输入事实。 - SemVer 覆盖 major/minor/patch、prerelease precedence、build metadata 和非法格式。
- 表驱动测试逐一得到 12 个 AppStatus;Catalog 版本更高时为 update_available。
- Go 1.20 core vet/test、完整双目标闸门和治理校验通过。
边界(不改什么)
- 不实现下载/安装任务持久化或进程检测;这些状态只消费后续用例提供的事实。
- 不实现 Gio 列表或在 Layout 中扫描磁盘(T-203)。
- 不修改 T-103 的切换/恢复策略;这里只读识别其持久事务文件。
- 不引入第三方 SemVer 或存储依赖。
协作约束
未启用 Gitea;本任务在 agent/codex/T-202 分支串行执行。存储 IO 与状态推导必须分层,后续 UI 只能消费快照/状态结果。
执行记录
- 2026-07-16:在
core/domain实现完整 SemVer 2.0.0 解析与 precedence 比较;支持任意长度数字、prerelease 排序,build metadata 不影响更新判断,非法前导零/标识符被拒绝。 - 2026-07-16:Catalog 的
min_box_version与 appversion校验改为复用 domain SemVer,消除远端解析与本地更新判断的双规则。 - 2026-07-16:在
core/storage建立 installed-app.json v1 模型、严格 reader/writer 与 Inspector;写入采用同目录临时文件 + backup 原子替换,主文件缺失时读取并重验 backup。 - 2026-07-16:安装记录校验覆盖未知字段、路径 ID 不匹配、架构/channel、文件安全相对路径、Windows 大小写折叠重复路径、size 与 SHA-256;transaction 主文件或 backup 可被识别为恢复待处理事实。
- 2026-07-16:增加纯
ResolveAppStatus,状态优先级为恢复事务 → 活跃操作 → 运行 → 不兼容 → 是否安装 → SemVer 更新;表驱动测试逐一覆盖全部 12 个 AppStatus。 - 2026-07-16:新增
schemas/installed-app.schema.json,同步三份 Schema 的严格 SemVer pattern,并更新docs/api.md、docs/04-architecture.md、docs/current-state.md。 - 定向验证通过:
go -C core test -count=1 ./domain ./storage ./catalog。 - Schema 语法验证通过:
python -m json.tool解析 manifest/app/installed-app 三份 Schema。 - 完整验证通过:
./scripts/verify_phase0.ps1,包含 Go 1.20.14 core vet/test、治理/边界/版本检查及 modern/win7 双目标测试与构建。 - 提交前检查通过:
git diff --check。 - 工作区中的未跟踪
soft_quay.code-workspace与本任务无关,已保留且未纳入提交。