Files
trade-message-center/.trellis/tasks/09-16-onetalk-dom-secondary-card-collection/implement.md
T

2.9 KiB
Raw Blame History

执行清单:OneTalk DOM 二次卡片采集重构

修改范围

  • Replace current uncommitted rendered_dom_card contract/reader/tests with no-kind named OneTalkRenderedCard
  • Modify generic contract, CenterMessage decoder/export, DOM reader/observer, bridge, ledger and focused tests
  • Modify server schema, migration 0016, repository/read projection and server tests
  • Delete obsolete React reader and retain only legacy typed read compatibility

顺序

  1. 把 contract tests 改为无 kind 的 exact named object;空、unknown key、裸 texts[]、DOM/template metadata 都必须拒绝。
  2. 写结构 fixture:未知订单模板 3829708538501 与无模板 metadata 的卡都必须按可见结构产生 approved named values,不从 cardType/messageType/template ID 决定 mapping;空结构仍拒绝。先运行 reader tests 观察旧 template gate 失败。
  3. 实现三个 structure-based readerstrict identity -> 单一可见锚点分发(订单=订单状态、询盘=详细需求、商品=最小订购量/Minimum order-> safe named fields。零个或多个锚点命中时 fail closed;分发不产生 kind。订单输出可见标题、单张图片和已审核 label/value;询盘使用单值 imagepurchaseQuantity、保留换行的 .description-containerreference;商品输出单值 image、标题、价格和字符串 MOQ。删除数组图片、attributespromotionTexts、对象 MOQ、template registry 和 generic TreeWalker list projection;未知或不安全单字段省略,动作节点不投影。
  4. 改 bridge/ledger/wire 到 no-kind generic object,保留 durable-first/ACK/composite idempotency,删除 reader 内任何 rendered_dom_card 路径。
  5. 更新 CenterMessage renderedCard 和 server projectiongeneric supplement 只作顶层字段,base content.kind 不变;保留 typed historical supplement 分支。
  6. 改 0016/schema/migration tests:不允许 rendered_dom_card,接受 legacy typed 或无 kind/versioned generic object0015 只 DROP 四列不变。
  7. 跑 contract/extension/server full tests、typecheck、db:check、root build、format/diff and source-boundary searches。真实 Chrome 仅在加载 current build 后验证 product/inquiry/order mappings 与 bridge/ACK/DB。

验证命令

pnpm --filter @trade-message-center/onetalk-contract test
pnpm --filter @trade-message-center/chrome-extension test
pnpm --filter @trade-message-center/chrome-extension typecheck
pnpm --filter @trade-message-center/server test
pnpm --filter @trade-message-center/server typecheck
pnpm --filter @trade-message-center/server db:check
pnpm build
git diff --check
rg -n 'rendered_dom_card|texts:|cardType|messageType|React|Fiber|baseEvidence|setInterval' apps/chrome-extension/src/onetalk/main-page/card-observer apps/chrome-extension/src/onetalk/page-bridge apps/chrome-extension/src/onetalk/service-worker packages/onetalk-contract/src apps/server/src