Target Version
3.0-dev。Media 分片上传协议、服务实现与 Functional 测试均位于该开发线;证据复核于提交 a75fc8721b99e5c0b4421d0c58b5618bbe71ff31。
Evidence
proto/media/media_service.proto:157-160 定义 InitMultipartUpload、ApplyPartUpload、CompleteMultipartUpload 和 AbortMultipartUpload。
media/source/media_server.h 已实现对应 RPC handler。
tests/func/media_test.go:160-319 的 FN-MD-04 至 FN-MD-10 调用 /service/media/init_multipart、apply_part_upload、complete_multipart 和 abort_multipart。
tests/func/scenarios_test.go:334 的 SC-05 依赖完整 multipart 流程。
gateway/source/gateway_server.h:404-419 只注册 ApplyUpload、CompleteUpload、ApplyDownload、GetFileInfo 和 SpeechRecognition,没有四个 multipart HTTP 路由。
docs/api/openapi-media.yaml 同样没有这些 multipart paths。
- 因此外部认证客户端通过 Gateway 调用这些路径会得到 404,现有 Functional/Scenario 契约不可达。
Problem or Goal
让外部认证客户端能够通过 Gateway 使用 Media 已实现的完整分片上传协议,并使 Gateway 路由、Protobuf、Functional 测试与 OpenAPI 保持一致。
Scope
- 为四个 multipart RPC 注册经过 JWT 鉴权的 Gateway HTTP 路由。
- 保持 Gateway 派生的认证与 trace metadata 向 Media 转发。
- 为四个 path 补齐 OpenAPI 请求、响应、错误和幂等说明。
- 使用现有 FN-MD-04 至 FN-MD-10 与 SC-05 验证完整流程、错误路径和 abort 幂等。
- 增加 route/proto/OpenAPI 一致性 contract,防止已公开 RPC 再次缺失入口。
Non-goals
Acceptance Criteria
Test-first Plan
先运行:
cd tests && go test -tags=func ./func/... -run 'TestFN_MD_(InitMultipart|ApplyPartUpload|CompleteMultipart|AbortMultipart)' -v -count=1
预期 RED 是 Gateway 对 multipart path 返回 404。保持现有测试不变,先添加最小 Gateway routes 达到 GREEN,再运行完整 Media Functional、SC-05、BVT 和 route contract。
Risk and Security
multipart path 必须复用 Gateway JWT 边界,不得信任请求体中的 user/owner。Media 继续约束 file size、part number、upload ID、MIME、quota 与服务端 object key。错误和日志不得暴露 presigned URL、存储凭据或对象内部路径。
Architecture Impact
No。Gateway、Media、MinIO 和 MySQL 的服务边界及状态所有权不变,仅补齐现有协议的外部入口。
Core-flow Impact
Yes。客户端到 Gateway 再到 Media 的 multipart HTTP→brpc 路径从不可达变为可达;Media 内部排序、幂等和持久化语义不变。
Required Skill Updates
.agents/skills/chatnow-orienting/references/core-flows.md
docs/api/openapi-media.yaml
- 如 repository map 列举 Gateway 外部路由,则同步更新
.agents/skills/chatnow-orienting/references/repository-map.md
Target Version
3.0-dev。Media 分片上传协议、服务实现与 Functional 测试均位于该开发线;证据复核于提交
a75fc8721b99e5c0b4421d0c58b5618bbe71ff31。Evidence
proto/media/media_service.proto:157-160定义InitMultipartUpload、ApplyPartUpload、CompleteMultipartUpload和AbortMultipartUpload。media/source/media_server.h已实现对应 RPC handler。tests/func/media_test.go:160-319的 FN-MD-04 至 FN-MD-10 调用/service/media/init_multipart、apply_part_upload、complete_multipart和abort_multipart。tests/func/scenarios_test.go:334的 SC-05 依赖完整 multipart 流程。gateway/source/gateway_server.h:404-419只注册 ApplyUpload、CompleteUpload、ApplyDownload、GetFileInfo 和 SpeechRecognition,没有四个 multipart HTTP 路由。docs/api/openapi-media.yaml同样没有这些 multipart paths。Problem or Goal
让外部认证客户端能够通过 Gateway 使用 Media 已实现的完整分片上传协议,并使 Gateway 路由、Protobuf、Functional 测试与 OpenAPI 保持一致。
Scope
Non-goals
Acceptance Criteria
docs/api/openapi-media.yaml与实际 path、payload 和错误语义一致。Test-first Plan
先运行:
cd tests && go test -tags=func ./func/... -run 'TestFN_MD_(InitMultipart|ApplyPartUpload|CompleteMultipart|AbortMultipart)' -v -count=1预期 RED 是 Gateway 对 multipart path 返回 404。保持现有测试不变,先添加最小 Gateway routes 达到 GREEN,再运行完整 Media Functional、SC-05、BVT 和 route contract。
Risk and Security
multipart path 必须复用 Gateway JWT 边界,不得信任请求体中的 user/owner。Media 继续约束 file size、part number、upload ID、MIME、quota 与服务端 object key。错误和日志不得暴露 presigned URL、存储凭据或对象内部路径。
Architecture Impact
No。Gateway、Media、MinIO 和 MySQL 的服务边界及状态所有权不变,仅补齐现有协议的外部入口。
Core-flow Impact
Yes。客户端到 Gateway 再到 Media 的 multipart HTTP→brpc 路径从不可达变为可达;Media 内部排序、幂等和持久化语义不变。
Required Skill Updates
.agents/skills/chatnow-orienting/references/core-flows.mddocs/api/openapi-media.yaml.agents/skills/chatnow-orienting/references/repository-map.md