Files
any-hub/specs/005-proxy-module-delegation/tasks.md
2025-11-17 12:21:35 +08:00

5.3 KiB
Raw Blame History

Tasks: Proxy Module Delegation

Input: Design documents from /specs/005-proxy-module-delegation/
Prerequisites: plan.md, spec.md, research.md, data-model.md, contracts/, quickstart.md

Tests: 验收需覆盖配置校验、缓存读写、代理命中/回源、Host Header 绑定与结构化日志字段;针对各 user story 的验证可用现有 go test + integration stubs 完成。

Organization: Tasks are grouped by user story to enable independent implementation and testing of each story.

Phase 1: Setup (Shared Infrastructure)

Purpose: 确认范围与基线,确保现有测试可运行

  • T001 复核规范/计划/研究,记录约束与目标到 specs/005-proxy-module-delegation/plan.md
  • T002 在仓库根目录执行基线 go test ./... 并记录当前失败用例(如有)

Phase 2: Foundational (Blocking Prerequisites)

Purpose: 梳理现有调度与接口约束,定义模块化契约

  • T003 分析并记录现有 hub_type 分支与 dispatch 流程internal/proxy/handler.go, internal/server/router.go明确移除点
  • T004 [P] 定义模块 handler 契约与注册接口internal/proxy/forwarder.go 或新建 internal/proxy/module.go供后续模块复用

Checkpoint: Foundational ready - user story implementation can now begin


Phase 3: User Story 1 - 按模块扩展新仓类型 (Priority: P1) 🎯 MVP

Goal: 通用 proxy 只做分发,新增模块无需改通用分支即可处理缓存/回源

Independent Test: 引入一个新模块(示例 stub注册 handler 后单独请求能回源并缓存,日志含 module_key通用层无类型分支

Implementation for User Story 1

  • T005 [US1] 重构 dispatch 层仅依赖 module handler map移除 hub_type 判断internal/proxy/forwarder.go, internal/server/router.go
  • T006 [P] [US1] 增加模块注册助手,要求元数据+handler 同时注册并校验唯一性internal/proxy/module_contract.go 等)
  • T007 [P] [US1] 调整主入口绑定默认/legacy handler并为新模块预留挂载点cmd/any-hub/main.go, internal/proxy/forwarder.go
  • T008 [US1] 更新 quickstart 说明新增模块的步骤与示例配置specs/005-proxy-module-delegation/quickstart.md

Checkpoint: User Story 1 independently testable


Phase 4: User Story 2 - 现有仓类型平滑迁移 (Priority: P1)

Goal: Docker/NPM/PyPI/Composer/Go 行为与日志字段保持不变,缓存命中逻辑等价

Independent Test: 每个仓同一路径请求两次:首次 miss 写缓存,二次 hit日志含 hub/domain/module_key/cache_hit/upstream_status/request_id

Implementation for User Story 2

  • T009 [US2] 迁移 Docker 模块到新 handler/注册模式保持路径重写与缓存策略不变internal/hubmodule/docker/, internal/proxy/* 如需)
  • T010 [P] [US2] 迁移 npm/pypi/go/composer/legacy 模块到新模式并保持兼容internal/hubmodule/{npm,pypi,go,composer,legacy}/
  • T011 [US2] 更新配置加载/校验默认值及示例,缺失 handler/重复模块时报错internal/config/loader.go, internal/config/validation.go, config.example.toml
  • T012 [P] [US2] 更新/新增集成场景确保日志与缓存行为等价tests/integration/*, internal/proxy/forwarder.go 观测字段)

Checkpoint: User Stories 1 AND 2 independently functional


Phase 5: User Story 3 - 统一观测与错误处理 (Priority: P2)

Goal: 缺失 handler 或模块内部错误时输出一致的 5xx 与结构化日志

Independent Test: 触发未注册 handler、模块 panic/超时,统一返回 5xx JSON日志包含 error/module_key/hub/domain/request_id

Implementation for User Story 3

  • T013 [US3] 实现缺失或重复 handler 的快速失败响应与日志internal/proxy/forwarder.go, internal/server/router.go
  • T014 [P] [US3] 为模块 handler 调用增加 panic/错误捕获与统一错误映射internal/proxy/forwarder.go, internal/proxy/handler.go
  • T015 [US3] 补充观测性字段与文档说明,确保错误/命中日志一致internal/logging/, docs/operations 或 specs/005-proxy-module-delegation/contracts/README.md

Checkpoint: All user stories independently functional


Phase 6: Polish & Cross-Cutting Concerns

Purpose: 文档、格式化与回归收尾

  • T016 更新 feature 文档/README说明新模块化调度与使用方式specs/005-proxy-module-delegation/contracts/README.md, README.md
  • T017 [P] 运行 gofmt/go test 并记录结果(仓库根目录)

Dependencies & Order

  • Phase 1 → Phase 2 → Phase 3 (US1) → Phase 4 (US2) → Phase 5 (US3) → Phase 6
  • User stories: US1 完成后再进行 US2US3 依赖 US1/US2 的调度能力和兼容性验证

Parallel Execution Examples

  • T004 与 T003 可并行(定义接口与调研现状分离)。
  • 在 US2 中各模块迁移T009/T010可分拆并行。
  • 日志/错误强化T014可与文档更新T015/T016并行。

Implementation Strategy

  • MVP: 完成 US1T005-T008即可验证模块化分发与新增模块示例。
  • Incremental: 先迁移现有仓US2再补齐统一错误/观测US3最后收尾文档与回归。
  • 持续运行 go test ./... 于每阶段完成后,确保回归可靠。