fix(platform): normalize project-id inside GenericRequest payload
平台补全给出的 project 候选是 "org-xxx/ProjectName"(cmd/project.go getProjectList),平台 handler 负责还原成纯 id。但 SDK 的 BaseGenericRequest 把 GetProjectId() override 成 payload 优先、却没有 override SetProjectId: SetProjectId 写进 CommonBase,而 GetPayload() 末尾用 payload 覆盖 CommonBase (ucloud/request/generic.go),于是平台的归一化被 payload 里的原值吃掉。 凡是把 ProjectId 放进 generic payload map 的产品都会中招,master 上已有三处: - products/umongodb/internal/umongodb/create_replset.go:61, completion.go:56 - products/utidb/internal/tidb/api.go:49 - products/sqlserver/internal/sqlserver/create.go:89, create_alwayson.go:70 用户按 Tab 补全 --project-id 后 "org-x/Name" 原样上行,网关报 RetCode 292 "Project [org-x/Name] not exists"(2026-07-14 对 api.ucloud.cn 实测)。 不按 Tab、手敲纯 id 不受影响,故一直未被发现。 修复:归一化后若值确实变了,把结果同步进 GenericRequest 的 payload。未发生 归一化时(已是纯 id 或为空,即绝大多数调用)直接返回,payload 一字不动, 行为与历史逐字节一致。 测试覆盖 master 上全部 generic 产品的传法(payload map / 仅 CommonBase / 无 project-id / typed request),断言 wire 上的最终值而非中间态。
E
Episkey committed
62eb03caa8ac4b554d58f25b160e4bd1008d0018
Parent: 4b9dad8