test(bootstrap): fix review findings and sync architecture docs

- Register tasks in admin/task test setup after init() removal
- Strengthen bootstrap test: RegisterPushDomainEvents before Init
- Add admin_login auth→push listener integration test
- Update AGENTS.md and push/new-async-task/new-api skills for
  bootstrap composition root, listener domain events, and explicit
  test wiring conventions introduced since 50c45db5
This commit is contained in:
ryan
2026-06-18 10:50:45 +08:00
parent dac1c979d1
commit 13f823e5e3
7 changed files with 281 additions and 48 deletions
+21 -2
View File
@@ -13,8 +13,9 @@ description: "Wavelet 项目专用:新增或修改 Asynq 异步任务、后台
- `internal/task/handler.go`:`TaskHandler`、`TaskResult`、`PayloadValidator`
- `internal/task/meta.go`:`TaskMeta`、`TaskParam`
- `internal/task/executor.go`:下发、执行、日志、重试
- `internal/task/handlers/register.go`:Handler 和元数据注册
- `internal/task/executor.go`:下发、执行、日志、重试、`OnTaskCompleted` 订阅
- `internal/task/handlers/register.go`:Handler 和元数据注册(由 bootstrap 调用)
- `internal/bootstrap/bootstrap.go`:任务注册与进程级装配入口
- `internal/task/worker/worker.go`:Worker 路由和队列
- `internal/task/scheduler/scheduler.go`:定时调度
- `internal/apps/admin/task/routers.go`:Admin 任务 API
@@ -48,6 +49,24 @@ description: "Wavelet 项目专用:新增或修改 Asynq 异步任务、后台
- 在 `internal/task/handlers/register.go` 同时注册 Handler 和 `TaskMeta`。
- 不要在其他位置单独注册任务。
- **禁止**在业务包 `routers.go` 或 `init()` 中调用 `task.RegisterHandler`;统一由 `bootstrap.RegisterTasks()` → `taskhandlers.Register()` 在进程启动时装配。
- 任务完成钩子(如 push 通知)通过 `task.OnTaskCompleted` 注册,在 `bootstrap.RegisterTaskListeners()` 中装配(Worker/`all` 进程)。
### 进程装配分工
| 进程 | 注册入口 |
| :--- | :--- |
| `api` | `cmd/api.go` → `bootstrap.RegisterAPI()`(含 `RegisterTasks`) |
| `worker` | `worker.StartWorker()` → `bootstrap.RegisterWorker()`(含 `RegisterTasks` + `RegisterTaskListeners`) |
| `scheduler` | `scheduler.StartScheduler()` → `bootstrap.RegisterScheduler()` |
| `all` | `cmd/all.go` → `bootstrap.RegisterAll()` |
所有 `Register*` 使用 `sync.Once`,重复调用安全。
### 测试
- 依赖已注册任务类型或 Handler 的测试(如 `internal/apps/admin/task/routers_test.go`),必须在 setup 中显式调用 `bootstrap.RegisterTasks()`。
- 不得依赖 `init()` 副作用或 import 链触发注册。
## 日志要求