PROC-02-023 Platform公共接入实施验收20261028
提供方媒体原请求恢复、Drama资源合同及Go公共客户端的固定源码、隔离验证与发布边界
1. 授权、工作树与记录边界
用户授权按多仓React + Go + PostgreSQL + Redis路线开始执行,并明确先准备Platform接入、解除重构项目阻塞,再推进运营界面。Platform继续沿new-api分叉,Media继续作为原件和资源引用权威。本次不兼容旧Node/Python消费者。
代码分别在codex/platform-integration-readiness和codex/media-integration-readiness隔离分支实施,本机目录分别为Oceanway下.worktrees/platform-integration-readiness及.worktrees/media-integration-readiness。原项目工作区和其他任务工作树保留。文档继续在oceanway-docs维护,各项目通过DEV-X-01-007进入同一份指南。
本记录区分本地实现、独立AI审查、隔离验证、真实产品接入和生产发布;本地PASS不代表线上已具备能力。当前没有推送、合并、发布、真实付费生成或客户数据迁移。
2. 固定源码与交付状态
| 提供方/任务 | 源码提交 | 本记录状态 |
|---|---|---|
| Platform基线 | db801bf11c10ef7ba2987026110a95fce8681662 | 用户本机主仓基线 |
| 媒体原请求身份与恢复 | 7b95f85540c1d2e59737d2f3c24840117d19b9fc | 实现与专项通过 |
| Gemini有界连接池修正 | 6ff53371e6da5a266d01b9084832dee1d37cadea | 独立复审通过,无未关闭功能阻断 |
| Platform Drama项目代理/合同 | 1062a98918e191bc491a9bf86b56342cdf142f52 | 专项与独立任务审查通过 |
| Media基线 | 7bf5cc18e119d16fbc4837af13b45d7c4e507836 | 实际统一资源源码,不以历史同名网关代替 |
| Media Drama项目资源 | c520f9a4bd4462996e3dc49c8c32e0342d5bb0cc | 专项与独立任务审查通过 |
| 独立Go客户端与消费样例 | be2f60de7e1e4528ba07d1f562711b21f1d7df50 | 初次本地检查通过 |
| 客户端取消语义与共享样例修正 | 832aae770f07f5d4862916ccd0a4fbf5b95c3f3a | 修复检查及独立复审通过,无新问题 |
| 总入口材料鉴权与Gemini别名修正 | bff46d5436abeb49a381a1aba01c29c56b910619 | 最终修复检查与独立复审通过,代码可进入合并评审 |
详细实施报告和受控验证输出保存在对应隔离工作树的本机忽略目录;本页只记录脱敏结果,不提交Cookie、授权值、数据库DSN或供应结果正文。可共享验证摘要保留命令、逐项结果、清理状态和原receipt摘要;delivery_commit指交付提交,原receipt另存测试时源码摘要,不能将提交前检查误写为CI已运行。
3. 媒体恢复验证
新增稳定请求头X-Platform-Media-Request-ID及原身份GET恢复。原生Task在计费和派发前持久化;重复请求不再次进入准入、钱包或供应调用。首POST保留原生响应,相同请求的重复POST返回原Task回执。UNKNOWN及not_found不提供自动重派或退款许可。
| 检查 | 证据与结果 |
|---|---|
| 真正RED | 原路由404与预期202不符;三种原生媒体在未保持绑定前,落库原Task仍为UNKNOWN且未取得供应任务ID |
| 最终专项 | Platform .local/task1-pg-final/results.json:13个controller及3个router顶层用例PASS、无skip、源码前后摘要一致、隔离集群已清理 |
| 跨进程读取 | 新进程仅打开隔离PG,可读出派发前已提交的同一个UNKNOWN Task;不依赖进程缓存 |
| 请求与资金 | 图片/视频/Gemini、并发重复、请求冲突、原生确定拒绝重试、503未知、确认落库失败、multipart原字节、供应次数与钱包结果 |
| 鉴权 | Cookie/Origin/用户Authorization禁止混入worker;异授权不可定位;过期/释放EXA仅沿原GET读取政策 |
| 原有回归 | 文本原请求恢复、原生媒体生命周期、正式路由及完整OpenAPI引用闭包 |
| 常规检查 | 当时完整make test、相关包go vet、JSON/Python语法及diff检查通过;无DSN常规测试不替代PG专项 |
独立审查发现Gemini验证在持有事务advisory lock时又经全局DB申请连接,连接池耗尽可死锁。修复使用原事务查询模型profile。回归将池限制为一个连接、发起六个相同ID请求;旧代码在2秒有界deadline内失败,修复后一个创建者、一个Task、同一任务ID。.local/task1-review1-pool-green/results.json中有界池、真实native绑定和原授权三个专项通过。独立复审确认修复,无新的重要问题。
初期因runner缺少native-responses DSN产生的skip、临时编译/fixture错误均不计为RED或GREEN。正式runner已补齐独立数据库和受限角色配置。测试中预期的record-not-found、callback-removal及通知失败日志列为非阻断的日志整理项,不据此否定行为断言,也不冒充无噪声输出。
4. Drama项目资源验证
Platform内部项目PUT与Media项目快照、目录统计、来源/绑定聚合、显式project_app查询同步支持Drama。固定使用现行前端helper的精确查询路径。修正正式schema允许空项目、返回标题/路径,并记录快照默认值和版本语义。
- Platform受控TLS Media替身检查实际HMAC、账号71、app=drama、PUT及精确Media路径、未变的快照正文;确认没有原Cookie、产品key或委托凭据泄漏。
- Platform真实隔离PG覆盖合法Drama、浏览器拒绝、Console拒绝、方法限制、账户连续性冲突、产品与材料凭据拒绝;三产品材料授权和存储权益回归通过。
- Media实际生产router/验签/decoder/service使用TLS请求和隔离PG;8个service顶层用例及1个HTTP顶层用例通过,无skip;另有17个HTTP拒绝/重放子用例。
- 快照测试覆盖同账号资源版本、跨账号/产品隔离、错版本、重复成员、空目录、旧revision无更新、同revision冲突、tombstone、原件保留与高版本恢复。省略members清空原引用、省略deleted默认false均按既有行为验证。
- Platform正式路由合同及fragment/aggregate一致性通过;两仓diff检查通过。
Media复现入口为python3 integration/file-reference/run-project-tests.py,建立随机端口、随机受限角色、随机数据库和私有PG16集群,白名单传递环境;核对实际data_directory/角色权限,保留脱敏结果并移除自有集群。未使用共享localhost:5432或继承生产DSN。
这是两端分别进行的边界验证,包含真实数据库与HTTP签名;不是配对部署的Platform→Media端到端测试。Drama产品自身的Media稳定ID映射、资源投影和事务outbox尚未实施。
5. 公共Go客户端与独立消费样例
独立标准库模块github.com/Oceanway-AI/oceanway-platform/platformclient覆盖身份/SSO、模型目录、图片/视频预估、EXA、文本/媒体执行与原请求恢复、原件查询、材料/项目及绑定操作。固定产品origin与凭据,调用时分离会话、执行和材料上下文;禁用重定向和共享Cookie Jar,保留多条Set-Cookie、原生字节及未知JSON扩展。HTTP 200业务失败仍返回错误,不自动重试付费请求。
Studio、Drama分别有独立Go module,均只依赖公共客户端与标准库。受控样例经过身份→目录→图片预览→授权→保存冻结任务→单次提交→响应丢失→原身份恢复→原件manifest→建立并确认引用→释放授权。断言提交一次、引用一次及worker凭据隔离;持久化回调演示的是业务保存边界,不代表产品PostgreSQL/Redis worker已经实施。
| 检查 | 结果与限制 |
|---|---|
make check-platformclient | SDK、契约包和两个独立样例的test/vet/build通过;13个SDK顶层行为用例、1个契约闭包用例、每个样例1个流程用例,无skip |
| 正式合同与dispatcher | router合同、引用闭包、依赖schema及具名材料授权映射/错误路径拒绝通过 |
| 契约来源 | 14个快照文件与提供方逐字节一致;全部SHA-256、引用文件、JSON Pointer及完整闭包检查通过 |
| 模块隔离 | GOWORK=off GOPROXY=off go list -m all确认SDK无外部依赖;样例只有自身和本地SDK,不导入new-api根模块 |
| 机械检查 | diff检查、shell语法、同步脚本Python语法通过;既有backend CI及本地入口已显式纳入三个嵌套module |
测试曾真实捕获流入口把JSON业务拒绝误当成功流的问题,修正后有专门回归;正常SSE保持原始流与取消,流的时间/字节预算仍由调用者管理。类型为手工维护投影,完整原JSON另保留,不宣称全量自动生成。裸授权、Platform信封、原生响应与Media原JSON分别处理。
契约修正保持现行鉴权行为:SSO要求实际Host/Origin,材料授权为显式POST、worker为mat1或EXA二选一。正式路由审计只映射该具名POST到既有wildcard dispatcher,错误方法和未知命令继续拒绝。快照固定Task2后的Platform基线及本次最终文件摘要、Media提交;交付提交另列,避免清单自引用。
本地占位版本v0.0.0与相对replace只用于可复现样例。尚未创建platformclient/vX.Y.Z远程标签,未运行PR CI。探索时一次在根module误跑依赖列表遇到代理连接错误,未修改go.mod/go.sum;随后三个独立module离线检查均通过,该错误不冒充测试失败或通过。
首次独立审查发现:已收到响应头后取消正文读取时,错误链未保留可识别的context取消/超时原因;两个独立样例的编排和测试夹具存在重复。修复提交832aae7只保留安全的context标准原因,过滤私有自定义原因;通过实际HTTP在开始读正文后取消的六个RED→GREEN场景,覆盖原生提交/恢复读取/流式JSON错误各自的取消和超时,另测包装错误及私有普通错误不泄漏。
样例公共编排与测试夹具已移至SDK模块内examples/support,核心客户端不依赖该包;两消费module保留自己的Run、产品ID及目标配置,分别测试保存先于提交、单次生成和确认引用。修复后make check-platformclient再次通过SDK/两个样例test、vet和build;契约14文件未变、逐字节核对通过,没有增加第四个module。未重跑无关根仓/PG测试。独立复审确认两项全部修复,没有新问题或范围外发现。
最终跨任务审查另外发现两个合同兼容问题:OpenAPI总入口的10个材料操作仍保留旧鉴权声明,未沿已更新分片开放Console会话及worker EXA;SDK的Gemini模型名正则比提供方规则更窄,错误拒绝含+或中文的合法别名。一次集中修复提交bff46d5让总入口直接引用分片Path Item,消除重复定义;测试从总入口解析全部10个操作,分别比较运行时所需鉴权和分片声明,真实RED→GREEN。
Gemini校验改为提供方同一规则:名称非空、不超过128字节、边缘无空白,禁止路径/查询/动作分隔符和指定控制字符,逐段编码保留原名。共享边界夹具分别经过实际提供方函数与独立SDK验证,覆盖+、中文、内部空格、128/129字节边界和所有禁止符号。测试确认解码后的模型名、线上路径编码、请求原字节,以及非法值完全不发请求。
最终受影响router合同/路由/谓词测试通过,make check-platformclient对SDK和两个消费module的test/vet/build再次通过。14文件完整闭包重新生成并验证,仅aggregate及其清单摘要改变;最终aggregate SHA-256为58b186aa1f12b2ec5b29ac6ce7080eb25c962463dcb626c35202297d1d39a8fb。限定范围独立复审确认两项全部修复、没有新的重要问题,并独立比较生成快照与提供方最终字节及摘要。全分支审查与修复闭环完成,代码在本批提供方范围内可进入合并;不代表已发布或生产部署。
6. 配置与文档
PLAT-04-015说明产品凭据通过身份配置文件登记、格式为key_id.secret,管理HTTP当前只有查看/撤销;记录SSO实际Host/Origin/Cookie要求及不生成的readiness步骤。没有读取生产秘密或把源码默认值当作现网配置。
最终文档校验单独记录于文档构建摘要,包含重定向生成、文档/链接校验、生产构建的退出状态和实际计数。先前692页构建只是中途检查点,不替代最终版本。既有PROC-02-005和006超400行的两个警告保留。
7. 尚未覆盖
- 团队payer/团队素材、员工跨产品委托属于正式待交付合同,不能以个人上下文替代。
- Creative实际中央接入、Drama产品资源迁移/outbox、未来Commerce Go重构分别需要消费方实施与业务回归。
- 模块远程版本、PR CI、合并、生产部署和真实供应验收未在本记录中宣称完成。
8. 实施选择与审查裁定
-
沿用用户既有执行授权,不因技能流程重复索取许可;代价是普通实现判断如不符合预期需在可审查分支调整。
-
桌面原生worktree工具无法把非Git的Oceanway父目录定位到子仓,改用具名仓库的git worktree;代价是需按本记录分支路径管理,原工作区未改。
-
公共模块由Platform仓维护,独立于new-api根模块;没有新建shared仓。代价是发布模块需单独版本,不能自动跟随服务根版本。
-
当前个人合同明确交付边界;未支持团队/员工场景保持关闭,不静默用个人权限。代价是这些场景仍须后续正式合同。
-
为真实可重复验证补齐已有商业runner的native-responses独立DSN映射;skip不算通过。代价是本机需PG16工具,未引入生产连接。
-
Drama采用当前canonical helper路径;保持Media既有快照版本、删除和恢复规则,产品需独立资源序列及Media ID映射。代价是产品后续补事务outbox和投影,不能直接复用实体revision。
-
SDK所依赖的SSO与材料授权机械合同需修正到现行运行行为,不在客户端掩盖响应或鉴权差异。代价是消费者必须固定完整合同闭包。
-
Task1不强行修改原计划列出的platform_session_media.go;共用Task构造函数已在真实最终保存点保持绑定,PG回归证明行为。代价是后续新增原生保存路径也须保留该构造合同。
-
正式材料授权路径由既有wildcard dispatcher处理,合同检查按具名POST命令映射;未知后缀/错误方法仍拒绝。代价是以后新增命令须同步明确合同与路由证明,不能靠wildcard自动判为已实现。
-
最终审查将更宽的Media独立项目ID语法、真实产品outbox/ACL迁移、团队/员工能力及线上发布列为本批范围之外,并保留明确限制。代价是仍需消费方与发布验收,不能把个人公共接入包宣称为全系统已经就绪。
-
预期fixture日志噪声由最终审查判为非阻断,未扩大最后修复范围去改生产日志或掩盖错误。代价是诊断日志仍需辨别预期注入失败,后续可单独整理。