7.6 KiB
description
| description |
|---|
| Tasks for Hub 配置凭证字段 |
Tasks: Hub 配置凭证字段
Input: Design documents from /specs/003-hub-auth-fields/
Prerequisites: plan.md (required), spec.md (required), research.md, data-model.md, contracts/
Tests: 宪法 v1.0.0 要求覆盖配置解析、缓存读写、代理命中/回源与 Host Header 绑定,此清单在相关阶段加入对应测试任务。
Organization: Tasks are grouped by user story以支持独立实施与验证。
Format: [ID] [P?] [Story] Description
- [P]: 可并行执行(触达不同文件/无直接依赖)
- [Story]: 指明所属用户故事(Setup/Foundational/Polish 阶段不写)
- 描述中必须包含精确文件路径
Phase 1: Setup (Shared Infrastructure)
Purpose: 记录迁移策略、同步文档,让团队在单端口与凭证范围上达成一致。
- T001 将全局
ListenPort/Hub 凭证迁移指南写入DEVELOPMENT.md与README.md,提醒去除[[Hub]].Port - T002 补充
CHANGELOG.md与specs/003-hub-auth-fields/quickstart.md的前置说明,列出新的配置字段及基本验证命令
Phase 2: Foundational (Blocking Prerequisites)
Purpose: 改造配置与 server 启动流程,确保所有 Hub 共用单端口并具备新字段;完成前禁止进入任何用户故事。
- T003 更新
internal/config/types.go/internal/config/loader.go,为GlobalConfig添加ListenPort,为HubConfig添加Username/Password/Type,并删除 Hub 级Port - T004 扩充
internal/config/validation.go与internal/config/config_test.go,覆盖ListenPort范围校验、Type 枚举校验及缺失 Type 报错 - T005 重构
cmd/any-hub/main.go与internal/server/router.go,仅根据全局ListenPort启动 Fiber,并在加载阶段检测到 Hub 级Port时报告迁移错误 - T006 [P] 更新
internal/server/hub_registry.go及internal/server/hub_registry_test.go,让 Host Registry 仅依赖 Host/Host:port 组合,去除对 per-Hub 端口的引用 - T007 [P] 调整
configs/config.example.toml、configs/docker.sample.toml、configs/npm.sample.toml,移除 Hub 端口字段并添加ListenPort/Type示例
Checkpoint: 单端口 + 新字段的配置/路由路径已可运行,各用户故事可并行推进。
Phase 3: User Story 1 - 配置上游凭证 (Priority: P1) 🎯 MVP
Goal: Hub 可配置上游凭证,CLI 回源时自动附带 Authorization,日志只输出掩码。
Independent Test: 使用带凭证的 config.toml 运行 any-hub --check-config 与 go test ./tests/integration -run CredentialProxy,无须下游凭证即可解除 rate-limit。
Tests for User Story 1
- T008 [P] [US1] 在
tests/integration/credential_proxy_test.go构建带 Basic Auth 的 upstream stub,验证“无凭证失败→配置凭证成功”的流程
Implementation for User Story 1
- T009 [US1] 在
internal/config/types.go与cmd/any-hub/main.go中保存可选凭证,并在所有logrus输出中仅显示掩码/存在性 - T010 [US1] 修改
internal/proxy/handler.go,依据 Hub 凭证自动附加 Authorization header,并在 401/429 时执行一次受控重试与错误字段记录 - T011 [US1] 更新
README.md与quickstart.md,新增凭证写法、敏感信息注意事项以及any-hub --check-config示例
Checkpoint: 代理可凭借配置凭证访问受限仓库,下游仍保持匿名体验。
Phase 4: User Story 2 - 下游透明体验 (Priority: P1)
Goal: 确保下游无需配置凭证即可访问,日志/观测字段体现 auth_mode、hub_type 与上游结果。
Independent Test: 运行 tests/integration/credential_proxy_test.go 的匿名客户端用例,并以 npm --registry http://127.0.0.1:<ListenPort> 手动验证日志输出。
Tests for User Story 2
- T012 [P] [US2] 扩展
tests/integration/credential_proxy_test.go,加入“不带 Authorization 仍命中凭证”与日志字段断言
Implementation for User Story 2
- T013 [US2] 在
internal/logging/fields.go与internal/proxy/handler.go中输出hub_type、auth_mode、upstream_status,并确保缓存命中/回源路径均记录 - T014 [US2] 在
tests/integration/upstream_stub_test.go及quickstart.md中补充匿名客户端示例命令,指导如何验证透明代理
Checkpoint: 日志、quickstart 与匿名客户端流程可完整验证下游体验。
Phase 5: User Story 3 - 仓库类型适配 (Priority: P2)
Goal: 强制声明 Hub Type(docker/npm/go),日志与运行期可识别类型,为未来扩展留接口。
Independent Test: 使用覆盖三种 Type 的配置运行 any-hub --check-config 与 go test ./internal/config,非法/缺失 Type 会被拒绝,日志中能看到正确的 hub_type。
Tests for User Story 3
- T015 [P] [US3] 在
internal/config/config_test.go新增表驱动测试,覆盖合法 Type、非法 Type、缺失 Type 的报错/提示
Implementation for User Story 3
- T016 [US3] 在
internal/proxy/handler.go与internal/server/router.go加入switch Type,目前仅设置日志/标签,并对未支持类型抛出明确错误 - T017 [US3] 更新
quickstart.md及configs/*.sample.toml,列出 Type 可选值与未来扩展策略
Checkpoint: Hub 类型被强制校验,日志和示例配置均反映正确值。
Phase 6: Polish & Cross-Cutting Concerns
Purpose: 统一测试、文档及残留引用,确保产物满足宪法门槛。
- T018 [P] 运行
gofmt ./cmd ./internal ./tests与GOCACHE=/tmp/go-build go test ./...,并把命令写入DEVELOPMENT.md - T019 清理
DEVELOPMENT.md、README.md、specs/003-hub-auth-fields/plan.md中残留的 Hub 端口描述,确保只推荐全局ListenPort - T020 在
CHANGELOG.md与quickstart.md中记录演练结果(docker + npm),并附一次手动验证日志
Dependencies & Execution Order
Phase Dependencies
- Setup → Foundational → 所有用户故事 → Polish
- Foundational 完成前,任何用户故事不得启动。
- US2 依赖 US1 产出的凭证注入,但可以在实现层并行。
- US3 仅依赖 Foundational,可与 US1/US2 并行实施。
User Story Dependencies
- US1 完成后,即可单独交付 MVP。
- US2 依赖 US1 的日志/凭证输出,但测试可提前编写。
- US3 与其他故事仅在配置层相互作用,无硬依赖。
Parallel Opportunities
- T006 与 T007 可由不同成员分别处理(registry vs. 示例配置)。
- T008/T012/T015 测试任务都可在实现前准备并行执行。
- 不同用户故事的实现(T009- T017)可由独立小组并行推进。
- Polish 阶段 T018 与 T019/T020 可交由不同成员并行完成。
Implementation Strategy
MVP First (User Story 1)
- 完成 Setup + Foundational,确认单端口与配置路径无误。
- 实施 US1(凭证字段 + 代理注入)并通过集成测试。
- 以此为最小可交付版本,供受限仓库使用。
Incremental Delivery
- Increment 1: Setup + Foundational + US1 → 解锁凭证代理。
- Increment 2: US2 → 强化透明体验与观测性。
- Increment 3: US3 → 引入 Type 校验及扩展思路。
- Polish: 全量测试、文档与 quickstart 验证。
Parallel Team Strategy
- Team A:负责 Foundational + US1。
- Team B:在 Foundational 完成后并行 US2(日志 + quickstart)。
- Team C:并行 US3(Type 校验与示例)。
- Polish 阶段由值班成员统一收尾。