Files
soft_quay/docs/tasks/T-002.md

2.7 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-002 建立 domain 状态模型与 application 事件总线 0
T-001
DONE 2026-07-16 null cf9fc01c68 null agent/codex/T-002
docs/tasks/T-002.md
core/domain/
core/application/
docs/current-state.md

问题 / 背景

T-001 只建立了可编译骨架。后续清单、下载、安装、启动和 UI 都需要共享、稳定的软件状态模型,后台任务也需要通过统一事件通道与 UI 解耦。

方案

  1. 在 core/domain 定义 docs/04-architecture.md 已列出的 12 个软件状态及显式迁移表。
  2. 提供状态合法性与迁移校验 API,非法迁移返回包含起止状态的稳定错误。
  3. 在 core/application 定义 docs/api.md 已列出的事件类型与通用 Event 信封。
  4. 建立带缓冲事件通道、上下文取消与关闭信号的 Runtime 骨架;关闭后拒绝新事件。
  5. 使用表驱动测试覆盖合法/非法状态迁移、未知状态、事件发布、取消与关闭。

验收要点

  • 软件状态枚举与架构文档一致,不新增未定义状态。
  • 表驱动测试至少覆盖 not_installed → installed、running → downloading 等非法迁移。
  • application 事件类型与 docs/api.md 一致;未知类型不能发布。
  • runtime 可以发布/消费事件,阻塞发布可由 context 取消,关闭后返回稳定错误。
  • cd core && go vet ./... && go test -count=1 ./... 通过。
  • modern 与 win7 两个目标继续可编译。

边界(不改什么)

  • 不实现清单、下载、安装、授权等具体用例。
  • 不引入 Gio、Windows API 或第三方依赖。
  • 不修改 app UI 与平台层。

协作约束

未启用 Gitea;本任务在 agent/codex/T-002 分支串行执行。新增写路径前必须确认不越过本文件声明范围。

执行记录

  • 2026-07-16:在 core/domain/status.go 落地架构文档中的 12 个软件状态、显式迁移表、状态合法性与迁移校验错误。
  • 2026-07-16:表驱动测试覆盖正常下载/安装/运行/回滚路径,并覆盖跳过安装链、运行中下载、未知状态和同状态迁移等非法情况。
  • 2026-07-16:在 core/application 落地 docs/api.md 已定义的 12 个事件类型、通用 Event 信封及支持缓冲、context 取消、幂等关闭的 Runtime 事件总线骨架。
  • 验证通过:cd core && go vet ./... && go test -count=1 ./...。
  • 验证通过:Go 1.20.14 + GOWORK=off 执行 core vet/test,确认共享核心兼容基线。
  • 验证通过:modern Go 1.25.0 与 win7 Go 1.20.14 两个 Windows amd64 目标重新编译。
  • 验证通过:python scripts/validate_agent_context.py、python scripts/validate_harness_governance.py。