feat(edit): 编辑上报细节优化
This commit is contained in:
@@ -698,3 +698,128 @@ User → Workspace → Membership / Role
|
||||
- [M2.2 / M2.3 扩展采集交接](./m2.2-m2.3-extension-collection.md)
|
||||
- [M2.4 来源解析与测试页交接](./m2.4-source-parsers-and-inspection.md)
|
||||
- [技术栈、异步任务与部署方案](../architecture/technology-and-deployment.md)
|
||||
|
||||
### 2026-10-05 采集页面地址回填货源链接
|
||||
|
||||
当前集成会话修改 API `extension.service.ts` 新采集商品写入、`product-editor.service.ts`/models 编辑读模型、extension HTTP 集成回归以及 API/交接文档。插件既有解析器已上报 `source.canonicalUrl`,问题是地址只保存于采集记录,未用于商品货源字段。新建商品同时初始化 `purchase_url`;编辑读模型优先使用手工非空链接,空值回退关联采集记录 `source_url`,历史商品无需复采,手动无来源商品仍为空。清空表示恢复来源地址,复采不覆盖手工非空链接。不修改插件、HTTP 字段或数据库,无历史草稿批量写入。
|
||||
|
||||
采集授权/素材 HTTP 2 项与商品编辑 13 项通过,覆盖新 1688 地址初始化、历史空字段回填、Ozon 地址、复采保留手工链接和既有商品编辑边界;API 源码/测试类型检查与构建、Web 类型检查/构建及差异检查通过。在用户当前商品的独立浏览器验证页确认 1688 来源地址已显示、打开按钮启用,输入框与按钮均 35px 且对齐。原用户页面未重载或保存,避免丢失编辑;API 开发进程自动重载,无手动启停。未向真实平台发布,未重新采集或写入真实商品。
|
||||
|
||||
## 2026-10-05:Pcore 同源图片接口与开发代理 DNS 兼容
|
||||
|
||||
- 最新单张任务在 Pcore 为 `completed`,结果域名 `pcore.ai` 被系统 DNS 解析为 `198.18.1.69`,原通用公网图片下载校验因此拒绝。修复范围是 Worker 的单张/套图共用取图链路及内部安全说明;不新增 HTTP 字段、数据库迁移或前端行为。
|
||||
- 对与 `PCORE_BASE_URL` 同源且严格匹配已保存任务 `/v1/images/content/{provider_task_id}/0` 的结果,从服务端配置与任务 ID 重建取图请求,保留 TLS 校验、禁止重定向、无 API Key、25 MiB 上限;其他地址继续执行原公网 DNS 与固定 IPv4 校验。没有全局放行 Fake-IP 或内网地址。
|
||||
- 同源接口下载沿用 60 秒无数据超时,并增加 5 分钟总上限;持续传输的慢速图片不再被固定 60 秒总超时中断。连接和下载超时归为 Pcore 取图失败,诊断信息不记录供应商 URL 或密钥。
|
||||
- Worker 定向测试 10 项、类型检查、构建与差异检查通过,覆盖任务路径绑定、错误地址拒绝、重定向拒绝、声明/流式大小限制、base64/URL 两种完成结果和不重新提交生图。维护者的 Worker `tsx watch` 已自动加载修改,没有手动重启 API/Worker,也没有启动前端验证服务。
|
||||
- 使用修复后的真实下载函数成功读取最新任务的 PNG:2,038,121 字节、1152×1536,耗时 201 秒。仅对本次单张失败任务保留原供应商 ID,在工作空间事务内重排任务与 Outbox,以恢复取图和保存;没有提交新的收费生图任务,没有改写 SKU 选图,也没有批量重试其他历史任务。
|
||||
- 恢复任务 `30f32836-706d-45a9-a301-f536305dd7a9` 已由维护者现有 Worker 处理为 `succeeded`,正式结果素材已登记;operation 失败诊断已随成功回写清除,可通过原任务或当前商品 AI 生图记录查看结果。
|
||||
|
||||
## 2026-10-05 已上架 SKU 本地价格重新试算
|
||||
|
||||
本轮跨 Web `SkuPricing`、定价 API、商品编辑读模型、共享契约与接口/交接文档。已上架 SKU 开放「重新试算」和「试算详情」,应用价格前确认:「该 SKU 已上架。本次价格调整仅保存为本地记录,不会同步至 Ozon;如需修改线上价格,请前往 Ozon 后台。」取消不修改价格,确认后更新草稿,仍须保存商品。批量计算和自动试算继续跳过已导入项。
|
||||
|
||||
编辑快照新增 `variants[].listing.store_id`。已上架 SKU 固定读取首次导入店铺的定价目录和币种,即使 profile 的将来目标店铺已变更。API 允许此 SKU 生成预览,跨店铺试算返回 `PRICING_VARIANT_STORE_MISMATCH`;显式 `pricing_selection` 按已有有效期、输入、规则和幂等边界确认新本地报价,普通草稿保存保留原报价。保持首次导入状态、店铺、货号、平台商品 ID 和导入时间,不创建发布或价格同步任务,无数据库迁移、Worker 或扩展业务改动。
|
||||
|
||||
定价保存 13 项、首次发布 11 项、商品编辑 13 项和采集 2 项集成测试通过,覆盖已上架新报价、错误店铺拦截、失效报价原子回滚、幂等重放、普通保存保留报价及零平台任务。Contracts/API/Web/Worker 类型检查与构建通过;Web 存在原有大包体警告。ego-browser 隔离真实组件验证两个入口均可用,取消不改变草稿,确认后实际售价 120 / 划线价 240,始终使用首次导入店铺,批量不自动改价。临时页面与代理浏览器已清理;未保存真实商品或操作 Ozon,没有手动启停维护者服务。
|
||||
|
||||
## 2026-10-05 采集插件编辑上架进入商品编辑器
|
||||
|
||||
修改扩展 `collector.content.ts`、API `extension.service.ts`、Web 编辑页及 `productEditor` 服务和 API/交接文档。根因是采集响应仍提供测试页路径,且新商品尚未初始化平台编辑配置。采集成功响应改为 `/products/{product_id}/editor?collection_item_id={collection_item_id}`,扩展继续使用响应入口并提示「已打开商品编辑页」。Web 携带采集 ID 调用现有 `editor-contexts`,核对商品 ID 后读取快照;当前页头平台和默认店铺规则沿用既有契约。重复采集进入原商品,既有上下文保留资料和上架状态;「采集商品」仍不打开编辑页,没有自动上架、媒体下载或平台绑定写入采集事务。测试页和旧手工商品入口保留,无新增 HTTP 字段或数据库迁移。
|
||||
|
||||
API 采集/商品编辑集成回归 15 项通过,覆盖新入口实际商品 ID、幂等重放、复采路径稳定以及首次上下文初始化。API 源码/测试类型检查与构建、Web 类型检查/构建、扩展 WXT prepare/类型检查/Chrome MV3 构建通过;Web 原有包体大小警告保留。ego-browser 隔离真实前端服务验证首次入口先初始化后读快照,普通既有入口直接读取,商品不匹配及无默认店铺阻断读取,并沿用当前平台。临时页面和任务浏览器已清理,没有采集/保存真实商品或调用 Ozon,未手动启停维护者服务。扩展新产物位于 `apps/extension/.output/chrome-mv3`,已加载静态扩展的浏览器需重载扩展并刷新来源页以更新成功提示;既有插件已使用响应入口,API 更新即可更改下一次跳转地址。
|
||||
|
||||
## 2026-10-05 采集插件最小化入口
|
||||
|
||||
本轮仅调整扩展 `collector.content.ts`、新增展示模块 `lib/collector-panel.ts` 及扩展交接文档。原 9px 黄点点击后删除整个浮窗,改为 32px 横线最小化按钮;最小化隐藏面板、显示 48px 圆形「A」,点击或键盘操作可恢复,焦点移至当前可见入口。保留同页折叠状态及最小化前的采集提示,登录态/来源 URL 刷新展示时继续沿用折叠状态。没有 HTTP、登录、采集、编辑跳转或数据库变更。
|
||||
|
||||
扩展类型检查和 Chrome MV3 构建通过。ego-browser 隔离真实 Shadow DOM 展示模块验证已登录/未登录面板、按钮 32×32px 与图标 18×18px、圆形 A 48×48px、展开/折叠、提示保留、页面更新保持折叠、键盘操作及 1280/390px 布局,最小化/恢复不额外触发采集动作。截图工具超时,外观尺寸和状态以实际 DOM/CSS 测量验证;临时预览及任务浏览器已清理。新产物在 `apps/extension/.output/chrome-mv3`,静态加载需重载扩展并刷新来源页;未手动启停现有服务。
|
||||
|
||||
## 2026-10-05 采集参数错误诊断与后台消息传递
|
||||
|
||||
用户报告 1688 商品 616913767097 点击编辑上架出现「Uncaught Error: 请求参数不符合要求」。浏览器安全策略明确拒绝直接读取该来源页,未改用其他浏览器、网络或间接手段获取页面。现有本地 1688 样本完整载荷通过共享校验,尚未获得该商品的失败字段明细,不能声称实际参数根因已解决。已请用户重载扩展并复制新版浮窗的完整字段提示,下一轮据此处理。
|
||||
|
||||
本轮仅修改扩展后台、API 客户端和内容脚本消息处理,新增 `collection-payload-validation.ts` 与 `request-errors.ts`。后台失败返回可序列化错误,内容脚本解包后由现有 try/catch 显示;保留服务端 error.details 最多三项字段原因,提交前按共享载荷契约校验,不静默截断真实 SKU 或放宽服务端约束。提示支持长字段换行,不展示请求、令牌或授权头。HTTP/共享契约、服务端、数据库和来源解析规则无改动;校验库仅进入后台包,不增加页面内容脚本依赖体积。
|
||||
|
||||
扩展解析与诊断回归 13 项、类型检查、Chrome MV3 构建和差异检查通过。ego-browser 隔离真实后台与浮窗验证模拟 422 明细能显示字段名和原因,无未处理 Promise 异常、不打开编辑页;这里的模拟字段不代表用户商品的实际问题。临时页面与任务浏览器已清理。既有开发服务未手动启停,新静态产物需重载扩展并刷新来源页。
|
||||
|
||||
## 2026-10-06 采集与编辑保存支持超过 100 个 SKU
|
||||
|
||||
用户补充的明确字段错误为 `variants: Too big: expected array to have <=100 items`,关闭上一轮待定位事项:根因是插件与 API 共享的采集数组上限为 100,且编辑完整草稿也有独立的 100 项上限,真实 1688 组合超过此值即失败。当前集成会话修改共享契约、API 采集响应统计、扩展/API 回归与 API/交接文档。新增 `PRODUCT_VARIANT_LIMIT=1000`,采集和商品完整保存统一使用;超限中文提示,不静默截断 SKU。采集响应的 `variant_count` 改为实际未删除 SKU 数。首次发布每批 50 个、媒体数量、其他字段约束、工作空间采集商品配额及 Ozon 公开页有界补全规则均保持原边界,无数据库迁移或 Worker/Web 业务逻辑修改。
|
||||
|
||||
扩展回归 15 项通过,验证 1688 200 条明确可售记录完整解析、101/1000 条接受、1001 条拒绝和上架 50/51 条边界。API 采集/商品编辑 16 项通过,新增完整 1000 SKU 的采集入库、编辑初始化、读取末尾 SKU、完整草稿保存、复采保留 ID 与人工修改、超限请求不改变来源版本或 SKU 数;测试数据隔离,无真实采集或 Ozon 发布。Contracts/API(含测试)/Web/Worker/Extension 类型检查和构建通过;Web 原有包体警告保留,差异检查通过。维护者现有 API 开发进程随源码自动重载,未手动启停服务;插件静态产物已重建,需重载扩展并刷新来源页后再次采集。
|
||||
|
||||
## 2026-10-06 SKU 数量误采与旧开发包校验
|
||||
|
||||
用户反馈页面不足 100 个 SKU,却继续报旧 `<=100` 校验。纠正上轮只凭校验错误认定页面 SKU 超过 100 的判断:错误代表解析载荷数量,不能代替实际页面数量。检查本地产物确认正式包已更新而 `chrome-mv3-dev/background.js` 仍包含旧 100 上限;同时本地合成脚本复现仅 2 个真实 SKU、前置字段名字符串加 150 个元数据对象被旧解析器当成 150 SKU 的问题。浏览器安全策略仍禁止直接读取该来源页,本轮没有换浏览器或间接获取源页;此复现证明代码缺陷,不声称已核验真实页面的具体 SKU 数。
|
||||
|
||||
仅修改扩展解析器、构建配置、浮窗提示、回归和交接文档。脚本回退只识别对象属性后直接的对象/数组字面值,不再从字符串引用、null 跳到后续无关对象;优先使用同一 skuModel 的规格与 SKU 表。表内无来源 ID 的记录须具备完整规格匹配和可售证据,元数据不生成 SKU;真实无 ID 组合、零库存组合及大于 100 的真实表仍保留。WXT 构建添加共享契约源码 alias,正式包直接读取源码,避免旧 dist 依赖;修改触发既有开发服务重建,已核对开发/正式包均包含新上限和新解析数量提示。浮窗在提交和成功时显示本次解析 SKU 数量。保留已批准的 1000 容量,不继续提高限制。
|
||||
|
||||
扩展回归 18 项、类型检查、正式构建及差异检查通过,覆盖误采 150→2、null 字段回退、元数据排除、无 ID 明确组合保留、原始 16 SKU 样本和真实 200 SKU 表。既有 8110 开发服务自行重建,未手动重启 API/Worker/Web 或关闭浏览器。开发包旧 100 校验已消失,正式包和开发包均有新数量提示;用户需刷新来源页更新已有内容脚本。没有真实采集、商品保存或平台发布。
|
||||
|
||||
## 2026-10-06 1688 CSS 背景画廊与视频补采
|
||||
|
||||
用户提供商品 1012823100668 的画廊 HTML:主图位于 `.od-picture-gallery-list` 缩略项 CSS background-image,包含视频封面、15 张独立照片和参数图标。旧规则要求特定外层容器且过滤 200px 以下缩略项,造成主图漏采。本轮仅修改扩展 `product-media.ts`、`source-parsers.ts`,新增用户 HTML 样本与 4 项回归,并更新交接文档,无 HTTP 字段、API、数据库、Worker 或 Web 业务变更。主图按明确画廊位置读取背景地址、还原原图、保留顺序并去重;排除视频控件、参数图标和 undefined 占位地址,视频封面的重复照片仍可作为主图。
|
||||
|
||||
视频读取仅限商品画廊播放器的 currentSrc/src/source,或明确 gallery 字面值中的公开视频字段;支持 HTTPS MP4/WebM,与结构化候选去重并补充封面,不读取画廊外推荐视频、blob 或 HLS,也不从 JPG 猜测视频地址。用户片段只有视频封面,尚未提供实际播放器或公开视频地址,已提出补充请求;因此仅能确认视频读取路径已补齐,不能声称此商品实际视频已成功采集。来源域曾被浏览器安全策略禁止直接读取,本轮只使用用户 HTML 和离线合成视频,没有通过其他工具访问实际来源页。
|
||||
|
||||
扩展 22 项测试、类型检查、正式 Chrome MV3 构建通过。ego-browser 本地真实 DOM 回归确认 60px 缩略图仍得到 15 张原图、无参数/undefined 候选,封面不会伪造视频,挂载合成画廊播放器后得到 1 个视频。浏览器阻止所有 HTTPS 请求,不下载远程媒体;临时 QA 页面与 TaskSpace 7 已清理。维护者既有服务未手动启停。静态扩展需重载扩展并刷新来源页后重新采集,开发包需确认自动更新内容脚本;没有真实商品入库、保存或 Ozon 发布。
|
||||
|
||||
## 2026-10-06 SKU 货号自动型号前缀
|
||||
|
||||
维护者要求 SKU 货号固定以型号为前缀、用户只输入商品后缀。修改范围仅 Web `ProductEditPage`、`SkuInfoPanel`、`ProductVariantSection` 及 CSS,新增 `skuOfferId.ts` 与 `SkuOfferIdInput.tsx`,同步 API/AI/决策与 Web 交接文档。型号修改同步全部未导入 SKU 的完整货号并保留后缀,收起项从完整表单读取,不丢其他 SKU 字段;清空型号保留后缀,空后缀不生成只有前缀的货号。旧自定义货号完整保留为后缀,补前缀只进入待保存草稿。AI 返回货号先拆生成型号前缀再按表单型号组合,不覆盖用户非空后缀。导入/进行中货号只读且保持原值;型号已有锁定规则继续生效。完整货号沿用 50 字符限制,超限有明确保存提示,不截断旧后缀。接口仍提交完整 offer_id,无 API/共享类型、数据库、Worker 或扩展代码变更。
|
||||
|
||||
Web 类型检查/生产构建与差异检查通过,保留原有包体大小警告。ego-browser TaskSpace 8 本地真实组件/表单验证展开和收起 SKU、连续型号变更和清空、后缀清空、旧货号保留、采购价/图片资料保留、导入货号只读、输入整串 50 字符上限、型号变长时后缀不截断以及 390/1280px 布局。临时验证文件与代理浏览器已清理,未读写真实商品、调用 Ozon 或手动启停现有服务。
|
||||
|
||||
## 2026-10-06 SKU 文案用户要求优先与弹窗重设计
|
||||
|
||||
维护者要求当前 SKU 文案生成可输入用户描述/要求,并优先于采集商品信息。本轮跨 Web 弹窗、编辑页和请求客户端,Worker 文案提示词,共享契约(导出既有 1000 字符限制与请求类型),新增 API 单元回归、Worker 回归及 API/AI/Web 文档。沿用既有 `hint`,服务端已固化到 AI 任务输入与幂等摘要,无 HTTP 字段/校验规则变更、数据库迁移或扩展改动。Worker 单独传用户要求,系统提示明确优先于采集资料、旧 SKU 信息和已有文案;仍遵守俄文、JSON、中俄对照及主题标签输出契约,当前 SKU 摘要不携带其他 SKU 专属信息。
|
||||
|
||||
弹窗主要输入展示用户要求(最多 1000 字符),采集资料折叠为辅助参考,结果分字段展示中俄文;要求按 SKU 暂存页面内,不改写采集资料。修改要求使旧预览失效,需重新生成才能应用。生成时禁用输入,关闭/切换后异步旧结果由请求序号隔离;结果 SKU 和来源/商品/profile 版本需匹配。应用当前标题时若从通用切换逐 SKU,其他 SKU 原先继承的标题及中文对照保留,不被清空。
|
||||
|
||||
Contracts/API(源码及测试)/Worker/Web 类型检查和构建通过,API 2 项单元测试与 Worker 12 项文案测试通过。ego-browser TaskSpace 9 在真实 ProductEditPage 配合模拟接口验证输入传递、结果失效、按 SKU 要求保留、关闭后旧任务隔离、当前 SKU 应用/模拟保存、其他 SKU 通用标题和对照保留、空要求、1000 字符边界及桌面/390px 弹窗无横向溢出;底层编辑页原有窄屏溢出保留为既有布局问题。临时 QA 文件与代理浏览器已清理,没有读写真实商品、调用收费 AI 或 Ozon,未手动启停现有服务。Web 原有大包体警告保留。
|
||||
|
||||
|
||||
## 2026-10-06 商品上传与网络图片归属隔离
|
||||
|
||||
维护者要求 SKU 选图中的上传图片、网络图片绑定当前商品。根因是候选列表和保存资格均按工作空间读取,以及前端切换商品后保留候选缓存。本轮跨 Web 图片客户端/选图 Hook/套图参考图/商品变体上传入口、API 媒体控制器与服务/编辑器保存校验、共享素材契约、数据库迁移 060 和相关契约/测试文档。商品上传意图与网络导入请求必须传 product_id;候选 GET 必须带 product_id 查询参数。水印上传继续不传商品;上传完成沿用意图归属。同商品 SKU 共用候选,跨商品需各自主动上传或导入才能绑定相同哈希素材。数据库复合外键确保归属与工作空间一致,网络来源 URL 唯一性改为工作空间+商品+URL,原有 RLS 继续强制隔离。保存 SKU 同步按商品校验资格。
|
||||
|
||||
历史上传/导入记录没有可信商品归属,保留空归属但退出全局候选;已有 SKU 当前选图可继续原样保存。前端切换商品清空候选和文件指纹,并用商品世代号隔离延迟上传、导入和列表响应;直接上传到 SKU 的结果由编辑会话隔离。没有自动改写历史 SKU 选图。
|
||||
|
||||
迁移 060 已在本地应用并重复执行验证;Contracts/API(源码及测试)/Database/Web 类型检查和构建通过。服务端 28 项相关单元/数据库/HTTP 测试验证归属、重复素材独立绑定、幂等、FK/RLS、无商品参数拒绝及 SKU 保存。ego-browser TaskSpace 10 用真实候选 Hook 和模拟接口验证跨商品无混图、同商品 SKU 共用、旧请求隔离、相同文件在不同商品可重新上传、加载期间无旧候选,临时 QA 文件和浏览器已清理。未手动启停维护者服务;API 8200 自动热重载,Web 8100 继续运行,未调用收费 AI 或 Ozon、未修改真实商品。Web 保留原有包体大小警告。
|
||||
|
||||
|
||||
## 2026-10-06 SKU 名称与货号恢复同行
|
||||
|
||||
修复型号前缀控件引入时将货号设置为整行的布局回归。Web `SkuInfoPanel` 将名称与货号放入独立两列基础资料行,`ProductVariantSection.css` 调整行布局和长型号前缀截断宽度;即使其余发布字段在窄容器中切为单列,基础资料仍保持同行。型号前缀、后缀编辑、完整货号与锁定规则不变,无 API/共享契约/数据库变更。Web 类型检查、生产构建和差异检查通过;ego-browser TaskSpace 11 验证 1280/620/390px 名称和货号输入同行、不溢出,并确认后缀修改仍组成完整货号。临时 QA 文件和浏览器已清理,未手动启停服务或修改真实商品,保留既有包体警告。
|
||||
|
||||
|
||||
## 2026-10-06 七牛直传 Failed to fetch 排查与修复
|
||||
|
||||
用户报告 SKU 图片上传失败 Failed to fetch。前端使用上传意图返回的 S3 预签名地址直接 PUT;只读排查确认当前七牛开发空间 atlas-dev-assets 无 CORS 配置,OPTIONS 返回 403 AccessForbidden / CORS is not enabled for this bucket,无 Access-Control-Allow-Origin。已通过 S3 API 配置 atlas-local-web-upload,仅允许本地 Web Origin http://localhost:8100 与 http://127.0.0.1:8100,方法 PUT/GET/HEAD、请求头 content-type、MaxAge 600 秒;读取现有规则后保留其他规则(本次原为空)。此次修复为开发空间配置与上传契约文档更新,无业务代码/API 字段/迁移变更。
|
||||
|
||||
修复后真实预检返回 200 并允许本地 Origin;ego-browser TaskSpace 12 在本地页面通过真实七牛预签名 PUT 上传临时 PNG,浏览器返回 200,HEAD 确认内容类型 image/png 与长度一致,验证对象已立即删除。临时 QA 页面与代理浏览器已清理,未修改真实商品和用户图片,未手动启停服务。新建空间或切换 Web 域名时必须重新配置对应 Origin;前端不能用 no-cors 绕过。
|
||||
|
||||
|
||||
## 2026-10-06 SKU 候选图片删除与七牛清理
|
||||
|
||||
维护者要求右侧候选图片「编辑」菜单底部提供删除、二次确认并同步删除七牛文件。本轮跨 Web 选图弹窗/商品变体草稿、API 媒体与相关素材读取、Worker 存储清理、共享契约和数据库迁移 061/062。新增商品范围的删除、待处理列表、状态读取与失败重试接口,详见 `docs/api/watermarks-and-assets.md`。左侧「移出已选」仍仅调整选图;右侧删除确认后移除候选及未保存选图,异步清理完成才提示存储文件已删除。失败保留数据库任务,弹窗显示重试入口。
|
||||
|
||||
API 锁定素材、校验商品归属与全部使用引用;已保存 SKU、头像、水印、其他商品候选或活跃图片任务引用返回 409,须先移除引用并保存。未转存采集候选只取消本商品候选,已有存储素材标记删除并释放哈希去重,保留历史审计。删除记录、operation 与 Outbox 同事务登记;Worker 幂等删除素材及去重上传的存储对象,完成后回写成功,重试耗尽回写失败。新对象路径增加随机标识,避免重新上传同图与待删除旧对象冲突;兼容当前七牛和既有 local_minio 存储。数据库新增引用触发器禁止引用已删除素材,删除触发器保护已使用素材,保持工作空间 RLS 与复合外键。
|
||||
|
||||
迁移 061/062 已在本地应用;Contracts/API(含测试)/Database/Worker/Web 类型检查与构建通过。相关 API 单元/数据库/HTTP 回归 47 项及迁移 062 引用保护的定向回归通过,Worker 媒体/发布回归 26 项通过,差异检查通过。使用隔离临时商品和真实七牛 PNG 验证现有 Worker 完成清理,HEAD 返回 404,测试对象和数据库记录已清理。ego-browser TaskSpace 13 使用真实弹窗和模拟接口验证删除菜单顺序、确认前不提交、取消保留图片、引用拒绝、失败不报成功及重试恢复;临时 QA 页面和任务浏览器已清理。没有删除真实用户图片、保存真实商品或调用 Ozon;没有手动启停维护者服务,API/Worker 自动重载,Web 8100 继续运行。Web 保留原有包体大小警告。
|
||||
|
||||
|
||||
## 2026-10-06 SKU 商品颜色回显与多选提交
|
||||
|
||||
维护者报告保存草稿后首个颜色显示字典编号,以及多颜色上架被单值校验拦截。本轮跨 Web 动态属性控件、API 草稿保存/发布映射、共享商品属性规则、发布回归与 API 文档。商品颜色统一按 Ozon 属性 ID 10096 识别,最多 100 个有效字典值;颜色编辑、保存和发布共用数量规则,覆盖目录中的单值标记,其他属性沿用自身 schema。草稿保存多个字典 ID,发布逐项映射 ID 与文本,不拼接或截断。此前草稿多选按中文名称识别、发布仍直接校验 max_value_count,导致规则不一致;此次去除数量规则对名称语言的依赖。
|
||||
|
||||
Web 初始化主动加载颜色字典,独立保留当前属性的已选名称,搜索或保存回填更换候选页后已选标签仍显示文本;字典尚未加载时采用既有 Ozon 颜色 ID 对应的俄文名称兜底,未知值显示名称待加载而不展示编号,不改变实际提交值。类目属性 UUID 变化后不复用旧名称缓存。无数据库迁移、Worker 或扩展业务改动。
|
||||
|
||||
Contracts/API(含测试)/Web 类型检查和构建通过;API 商品编辑与发布 HTTP/数据库回归 25 项通过,新增双颜色保存/重读/发布快照、俄文属性名称、错误字典值拒绝与其他属性单值数量校验。ego-browser TaskSpace 14 使用真实 Form.List 内颜色控件和模拟字典验证加载前文本兜底、保存回填首个标签、搜索切换保留名称、重新展开、三色多选字典 ID 以及类目缓存隔离;临时 QA 文件和浏览器已清理。未修改真实用户商品或向 Ozon 发布,未手动启停维护者服务,Web 原有包体大小警告保留。
|
||||
|
||||
|
||||
## 2026-10-06 产品描述上报与复制保留换行
|
||||
|
||||
维护者要求简介/产品描述上报和复制保留换行。本轮修改 Worker 发布请求适配,新增 ozon-description.ts;Web 新增 CopyTextButton 并接入通用描述、SKU 描述、中俄对照和 SKU AI 结果预览;同步 API 契约说明与发布集成回归,无 API 字段、数据库迁移或草稿存储格式变更。Ozon 官方商品描述规范明确简介支持 br 换行标签。Worker 仅在提交边界将属性 4191 的纯文本 CRLF/CR/LF 转为 br,空行保留连续 br,&/< /> 转义为实体;不修改持久化发布快照或其他属性。编辑与剪贴板继续使用含换行的原文,SKU 空白描述复制有效 SPU 继承值。修复只影响后续提交,不自动更新已导入商品。
|
||||
|
||||
API 源码/测试、Worker 和 Web 类型检查及构建通过;13 项发布 HTTP/数据库/Worker 模拟回归通过,新增 SKU 覆盖、SPU 继承、空行/特殊字符、实际请求内容和快照不可变验证。ego-browser TaskSpace 16 先核对官方规则,再使用真实组件和模拟剪贴板验证通用/SKU/继承描述以及中俄对照、AI 结果复制内容逐字一致,显示使用 pre-wrap;临时 QA 页面和浏览器已清理。没有修改真实商品、调用收费 AI 或向 Ozon 发布,没有手动启停维护者服务,Web 原有包体警告保留。
|
||||
|
||||
Reference in New Issue
Block a user