DEV-STUDIO-07-002 共享原件接入
本页承接WP-STORAGE-001及ADR-0024沿用的统一新契约,规定Studio按统一版本接入共享原件的工程边界。当前新来源为获准原生异步图片;视频、Gemini原件输出、用户上传、临时晋升及大文件按各自规格另验。已有媒体代码或native归档能力不能证明这些入口已接新链。实际源码、包、测试及未测范围统一见PROC-02-006,本页不记录进度或代表生产启用。
常驻开发实例接入
开发启用须先核对当前常驻Studio源码及在途记录,再把已验收Runtime包、统一引用合同和本轮页面/领域删除代码集成到同一目标版本,不能以较早验收快照覆盖后来开发成果。实际运行源码、制品、包和配置身份在PROC-02-006登记,不能以工作树HEAD或页面可打开代替运行版本确认。
开发实例需要有效Platform会话、Runtime准入、原Operation输出合同、文件Owner服务端连接及释放Worker配置;这些是开发链运行必需配置,不恢复已经取消的生产专用身份、生产来源、监控或容量交付。可信来源和配置只在服务端固定,密钥不进入浏览器、Git或普通日志。new-api现用客户的运行实例、凭据、资金及桶策略不随开发启用改变。
已有开发数据库必须在初始化事务和迁移锁内执行幂等前向结构升级,并持久记录已完成标记,不能只用CREATE TABLE IF NOT EXISTS判断就绪。升级覆盖引用资产映射、候选解绑、删除所需外键及共享媒体的Runtime关联和Provider约束;共享表须按实际物理前缀处理。历史记录不回填虚构的文件或claim,新增引用字段为空的旧映射不得作为新引用读取;新Writer仍受必填、唯一性及文件关联约束。初始化失败须允许原事务回滚后重试,不能缓存为成功。健康检查和普通读取通过不代替结构核验及新写入验收。
Writer与来源
new-api-new-oceanway为唯一物理原件Owner,Platform固定原Operation及可信原输出,Runtime持有自己的保留与资产版本,Studio只写产品元数据、候选和领域关联。Studio不持TOS长期凭据,不下载原结果再上传,不以裁剪、尺寸规范化或另一存储provider为新引用制造第二份业务原件。
可信host在首次准备图片媒体call时固定output_contract: "oceanway.platform.file-output.v1"并纳入原请求指纹;浏览器不决定文件namespace或物理位置。原请求恢复、原请求证明和manifest读取均验证同一声明;该声明的输出不能进入字节读取helper。Platform须在报价、资金预留及供应提交前核原输出模式、文件桥和新增准入,未齐时拒绝,避免普通生成已收费后才发现无法绑定文件。停新保持原模式及既有引用恢复能力,具体配置见公共契约。
StudioRuntimeMedia.resolveOriginal由服务端可信创作身份和持久媒体call定位原Operation/输出序号;原业务任务号和幂等键绑定其稳定执行身份。先核原结果的执行、资金和保存状态,再通过Platform后台manifest取得同一file_ref、revision及内容摘要。UNKNOWN只查询或恢复原请求,不再次dispatch;manifest缺失、身份冲突或来源未就绪均保留待确认,不自动退回旧字节Writer。
ReferenceArtifactService负责prepare/adopt、独立owned claim续签及释放。StudioAssetPort只接受其已验证的ReferencedArtifact和ReferencedAssetReceipt,固定Artifact、AssetVersion、claim、版本、SHA、长度及MIME。产品侧shared_media_assets使用storage_provider=file-reference及稳定站内storageKey投影;物理bucket/key、对象凭据、临时grant或签名URL不进入业务记录。复用同一原件不合并创作主体、产品scope或内容权限。
运行包由web/vendor/runtime-source.json固定Runtime源基线、工作树快照manifest及client/server包SHA;版本号相同不证明导出相同接口。工作树开发快照不能写成已发布提交。新契约需要实际包导出ReferenceArtifactService、FileReferenceClient及引用接收/释放类型,不能只更新类型声明。
资产、候选与送达
StudioResultSink校核可信RuntimeScope、原Job/Run、目标对象及版本,元数据Writer、产品候选、会话关联与delivery inbox沿同一产品作用域持久化。候选默认未采纳;送达成功不等于用户已选择素材或已创建Canvas。重放同delivery返回原候选与回执,不生成第二个AssetVersion、候选或原件。
接收准备和数据库commit均检查解绑屏障;产品事务不得执行文件Owner或Platform网络请求。已解绑delivery、进入释放的Artifact、失效创作身份及不同目标/版本拒绝提交。原回执存在不能绕过同delivery的持久tombstone。恢复至另一目标须有当前用户授权的稳定恢复命令,不改原delivery意图。
Canvas、素材库、作品及其它实际领域关联继续按本域权限引用同一稳定媒体登记。解除当前会话候选不能代表其它关联已经退出;引用统计须覆盖实际写入位置,并与新增关联使用相同媒体登记锁或围栏。
授权读取
用户/员工/上游签名读取先经过现有产品媒体授权,再由scopedFileReferenceResponse按登记的原Artifact恢复Runtime自己的claim并申请短期GET/HEAD授权。读取实例不配置新采用来源,不能因读请求重新retain、重新绑定或重新生成。Platform output anchor释放后,Runtime仍应通过自己的有效保留读取同版本。
当前服务端读取入口返回有界短期重定向,使用private, no-store和no-referrer;签名地址只在当次响应中使用,不回写产品资产。读取前及取得授权后均核媒体仍ready。原件下载、图片预览/派生及Range属于不同交付行为,不能以小图GET通过代验全部媒体表现或大文件能力。
文件Owner连接只在服务端配置OCEANWAY_FILE_OWNER_ORIGIN、OCEANWAY_FILE_OWNER_PRINCIPAL及OCEANWAY_FILE_OWNER_TOKEN,产品服务凭据不代替文件principal。OCEANWAY_FILE_OWNER_ALLOW_LOOPBACK_HTTP=true仅用于显式隔离本机夹具;启用仍核对实际origin、身份、作用域及目标制品。
既有页面行为
普通对话的ready永久媒体结果在结果操作栏提供“保存到素材”。入口复用useAssetStore.addAsset与现有素材API,仅提交原storageKey、站内媒体地址及内容元数据;不得走字节上传或再生成。保存前等待同一会话的素材列表初始化,已存在同媒体关联时显示“已保存”;提交中防重复,失败显示错误并允许用户重试,只有服务端成功回执后更新状态。页面刷新后依据服务端素材恢复已保存状态,移除对话结果与删除素材分别管理各自领域关联。
结果操作栏、当前对话资产缩略图及Canvas Agent结果消息沿用现有布局提供“移除”,确认说明只移除当前对话结果,素材库、画布及其它位置的已保存内容继续保留。输入框的“引用/取消引用”只修改发送前草稿选择,和持久结果移除分开处理;页面不显示claim、物理对象或释放队列细节。
仅显式投影了metadata.candidateId与metadata.artifactId的ready Runtime候选提供此入口,浏览器不从文件名、URL或资产编号推导候选。请求统一经过API客户端与当前Platform会话;同一页面会话按用户身份和候选合并并发请求,未知回执后保留原commandId,用户点击继续时恢复同一操作,不自动重新生成或换命令。确认提交显示忙碌状态并防重复;取消不发解绑请求,失败不提前移除。只有服务端成功回执后才移除对应结果、资产面板项与输入草稿选择,刷新后按服务端状态回读。
历史列表的单条/批量“删除”沿用既有确认与错误入口,由服务端按聚合根事务执行。任务仍在执行、调用结果UNKNOWN、待送达或恢复未结束时返回冲突,页面保留原对话与任务,不把拒绝删除改成新生成。素材库删除与Canvas节点移除/项目删除继续使用各自现有入口,不另建存储管理页面。
解绑与可靠释放
用户入口POST /api/platform/creator/studio/runtime-candidates/{id}/detach使用当前Platform创作身份、受控Origin和稳定commandId。产品事务先解除本处候选/会话关联并持久化原delivery tombstone;相同命令恢复原回执,异候选或异意图冲突。它不接受浏览器指定claim、物理位置或其它用户scope。
删除已完成对话时,在同一事务实际删除creative_conversations、其creative_messages及studio_conversation_assets等领域关联,并为本会话的Runtime候选写入持久解绑事实。保留Runtime原请求、调用journal、delivery inbox与必要审计ID用于内部核对,不能以外键强行保留已删除消息。公开Run读取、已保存结果读取及结果恢复入口均先校验原会话仍存在;删除后不可从这些入口恢复公开内容。已保存的素材库或Canvas引用继续按本域权限读取,不依赖被删除的会话。
领域关联计数按完整稳定媒体键精确匹配实际JSON值,不用子串匹配推断引用。编辑素材或保存Canvas时只检查oldKeys - newKeys,不对未变的媒体关联执行释放锁升级。采纳、解绑及聚合根删除统一会话、Artifact和候选/媒体的锁顺序;涉及Canvas先按其项目锁序取得目标,避免保存、采纳和解绑交错死锁。新增关联对媒体ready状态的校验和最后引用退出判定使用同一登记锁或围栏,不能出现一方安排释放而另一方仍提交新关联。
仍有领域关联时保留原claim。最后关联退出后,将媒体置为不可新引用状态并持久写入同Artifact的稳定release outbox;直接清理媒体、素材库/Canvas删除及候选解绑均须汇入这一判定。file-reference不能进入本地unlink或S3物删分支。
Worker在产品事务外调用Runtime requestReferenceRelease和processReferenceRelease。Runtime先冻结原Artifact及Delivery,再向产品confirmDetached核对同release、delivery、Artifact/AssetVersion、file/revision/claim、scope和target。产品确认未形成关联的delivery,也须原子持久化拒绝迟到提交的证明;缺行、超时或浏览器声明不构成解绑证明。对端提交或本地回执未知时保留pending,恢复同一命令。
页面移除成功表示本域关联已解除,不表示后台原保留释放已经完成。原保留释放只影响本消费者,不物删原件;其它有效保留继续续签。终态释放、同命令重放及过期grant后的恢复分别验证,已释放claim不复活。一般媒体清理不能绕过新引用保护,自动物理GC仍关闭。站内媒体入口拒绝新的授权读取后,此前已经签发的TOS短期地址仍按原TTL有效,不能把站内404或claim释放回执解释为旧地址立即撤销。
验收与交接
验收映射到FS-STORAGE-001-F01的AC1~6:同file/revision与Put/Copy账、原Operation/Job/Artifact/AssetVersion/claim/Delivery/候选身份,可信scope越权拒绝,提交丢回执、独立续签、新进程、持久解绑、最后领域引用退出、迟到提交和原释放重放。过程同时核原资金事实及未新增模型调用;稳定文件身份不单独授权内容读取。
本轮新增浏览器验收对应F01-AC10/11,必须在已集成的具名常驻开发实例执行:从正常页面提交获准异步图片需求,观察原Run完成与结果自动持久化,点击“保存到素材”,确认同一媒体登记且无额外Put/Copy,再刷新并经站内授权入口读取;分别验证移除取消、确认、响应未知后的原命令继续及成功后的结果/草稿/刷新状态。再验证删除对话后公开会话、Run与已保存结果不可访问,而素材库/Canvas仍持有的原件可读;最后领域引用退出后核对同一持久outbox及原释放回执。实际链路不得用页面mock、TOS mock、预置已完成任务或前一批隔离证据代替;不要求再次生成图片来验证原命令恢复。
本地协议server、真实producer归档/原生descriptor、真实TOS、浏览器、实际不可变制品及生产启用分别登记。合成已settled Platform原Operation可以验证自动绑定和消费者链,不能写成真实生成/账务全程通过。取消旧版适配不取消本期数据完整性、生产隔离或现有release guard;没有本批证据的入口与范围保持待验。