资料文件真产出来了;E04/I01 补到验收线,顺手填了几个「墙拦住却不给路」的坑

**资料文件全链**(用户:审核资料这一步要真产出 word/excel/md/html,前端能渲、点资料名能开)
接手时这一步一个文件都产不出来 —— S3 剧本白纸黑字写着「file_ref 本 MVP 阶段可留空」。
文件是台账那一行的投影,不另存一份:
· 声明 `file:{titleColumn,bodyColumn,formatColumn}`,它同时是授权面(没声明就点不开)
· 现造真字节 —— docx/xlsx 是自己打的 OOXML 包(zip-write:store+CRC32,零依赖)
· 读回来渲 —— 解的就是造出来那份字节,渲得出来才证明文件是真的
· 件上 `data-file-of` → 工作区二级界面(Word 纸面/Excel 网格/渲好的 md/沙箱 html)+ 下载原件
放行落地前把每一份冻进 `sys.task_asset_file`(迁移 0029):归档件点开的必须是签字那一刻
那一份,而资料落在主数据上、试跑单不落正式表 —— 不存这一份,收工后一个都点不开。
工作成果里「产出的资料」自成一摞。Markdown 富文本渲染顺带销账(仍零依赖)。

**Harness**
· 画面按「这一拍办完之后」在办的那一步挑 —— 从前拿拍首的局面决定拍尾的事:
  收掉 S4、发出 S5 的卡,而屏上还摆着 S4 的只读件,人无处可填(墙要配路第四次现形)
· 验收「重做」真能退回重做,且打回后台账没动就不许再提交(软硬两段,不锁死单子)
· 立监听的授权面是清单声明;发卡的授权面是调人预算,不是计划项
· 读工具同参重调有兜底;空转写身后还有行动就不废串;finish 的 doneWhen 按写完后的草稿算

**界面**
· 翻件与翻页各归各位(从前二选一,多卡多页时页翻不动);没得翻写「—」不写 0/0
· 工作成果详情能翻份;表宽超出能横滑(E04/I01 抄版式时把 overflow-x 抄丢了)
· 查看面灰底滚过一屏变白 —— 两条独立的路都治了(沙箱内不同色 / 弹性子项不长个)
· 测试台「取不到」不再当成「还活着」

**活动**
E04 关系覆盖、I01 品牌内容各自补到验收线:判据全读基座数、判据指向的东西摆上卡面、
样例满载且名字 ≤14 字;提交前要裁的判据搬进说明书(模型会压拍,压过之后只有说明书还在)。

验收:e2e i01 4/4、e04 3/3 全部 released,资料在办中渲得出、放行后存了档点得开;
门禁 typecheck/lint/depcruise/1628 测全绿。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EEJX8Z7CHejvwmDQyPQuBX
This commit is contained in:
xcs
2026-08-24 10:26:45 +08:00
co-authored by Claude Opus 5
parent 70e83d0b09
commit 0aa2fc11b0
92 changed files with 13984 additions and 370 deletions
+139
View File
@@ -175,6 +175,26 @@ export const MASTER_SAMPLE_ROWS = [
payment_terms: 'EXW · CNY 含税',
profile_tags: '项目制 · 按项目批量询价 · 认证要求严(AEC-Q200)',
status: 'active',
/*
* E04(关系覆盖与关键人经营)字段 —— 2026-08-20 补齐,让「客户已经跑过 E04、
* 找缺口」这条分支第一次能真被样例跑通(此前这几列全空,每轮都只能从零起草)。
* decision_chain 只覆盖了 bt-01(采购层),bt-02/bt-03 是刻意留的缺口。
*/
cust_type: 'Tier1 OEM',
coverage_score: 35,
decision_chain: {
nodes: [
{ node: 'bt-01', btLevel: 'bt-01', required: true, contactCode: 'CU-0142-01', covered: true },
{ node: 'bt-02', btLevel: 'bt-02', required: true, contactCode: '', covered: false },
{ node: 'bt-03', btLevel: 'bt-03', required: true, contactCode: '', covered: false },
],
},
interaction_timeline: {
entries: [
{ date: '2026-06-15', type: '邮件报价跟进', contactCode: 'CU-0142-01', note: 'MD14.1 项目 BOM 报价确认' },
{ date: '2026-07-20', type: '电话沟通', contactCode: 'CU-0142-01', note: '交期与付款方式确认' },
],
},
},
},
{
@@ -187,6 +207,13 @@ export const MASTER_SAMPLE_ROWS = [
title: '采购部',
// **认人的钥匙**:老客户样例的来信就从这个邮箱发,A1 第一步照它认得出
email: 'e.volkova@itelma.ru',
// E04 字段 —— 对应上面 decision_chain 的 bt-01 节点
role: '采购',
decision_node: 'bt-01',
influence: 'high',
relationship: 3,
comm_pref: 'Email',
key_person: true,
},
},
/*
@@ -205,4 +232,116 @@ export const MASTER_SAMPLE_ROWS = [
status: 'active',
},
},
/*
* **CU-0087** —— E04(关系覆盖与关键人经营)"关键人离职/调岗"样例专用夹具
* (2026-08-20 补):此前这条样例引用的 CU-0087 在种子数据里根本不存在,
* 是一处遗留 bug。这里种一位客户 + 两位联系人,decision_chain 的 bt-01
* (采购层)当下由陈刚覆盖 —— 样例说的正是"这个人要走了,这个节点要重新覆盖"。
*/
{
address: { domain: 'customer', object: 'profile' },
key: { customer_code: 'CU-0087' },
values: {
customer_code: 'CU-0087',
name: '深圳精密电子有限公司',
grade: 'B',
industry: '工业自动化',
region: '中国·深圳',
payment_terms: 'T/T 30 天',
profile_tags: '批量稳定 · 价格敏感',
status: 'active',
cust_type: '模组厂',
coverage_score: 55,
decision_chain: {
nodes: [
{ node: 'bt-01', btLevel: 'bt-01', required: true, contactCode: 'CU-0087-01', covered: true },
{ node: 'bt-02', btLevel: 'bt-02', required: true, contactCode: 'CU-0087-02', covered: true },
{ node: 'bt-03', btLevel: 'bt-03', required: false, contactCode: '', covered: false },
],
},
interaction_timeline: {
entries: [{ date: '2026-05-10', type: '现场拜访', contactCode: 'CU-0087-01', note: '年度框架协议签署' }],
},
},
},
{
address: { domain: 'customer', object: 'contact' },
key: { customer_code: 'CU-0087', contact_code: 'CU-0087-01' },
values: {
customer_code: 'CU-0087',
contact_code: 'CU-0087-01',
name: 'Chen Gang',
title: '采购部长',
// **样例说的就是这个人**:「关键人离职/调岗」引用的正是这一位
email: 'chen.gang@sz-precision.com',
role: '采购',
decision_node: 'bt-01',
influence: 'high',
relationship: 4,
comm_pref: 'Email',
key_person: true,
},
},
{
address: { domain: 'customer', object: 'contact' },
key: { customer_code: 'CU-0087', contact_code: 'CU-0087-02' },
values: {
customer_code: 'CU-0087',
contact_code: 'CU-0087-02',
name: 'Li Wei',
title: '技术总监',
email: 'li.wei@sz-precision.com',
role: '技术决策人',
decision_node: 'bt-02',
influence: 'medium',
relationship: 3,
comm_pref: 'Email',
key_person: false,
},
},
/*
* I01(品牌形象与销售工具包管理)读的 L-01 宏观市场台账 —— 两条,呼应 I01 的两条
* 事件驱动样例(「进入俄罗斯市场」「E04 请求定向素材」),让「读市场信号 → 拟内容」
* 这条分支第一次有真数据可读,不必每轮都读空手。
*/
{
address: { domain: 'market', object: 'signal' },
key: { signal_id: 'MS-2026-0001' },
values: {
signal_id: 'MS-2026-0001',
signal_type: 'industry_trend',
title: '俄罗斯车规电子本土化替代加速',
content: '受供应链管制影响,俄罗斯本土车企与 Tier1 加快引入非欧美芯片供应商,车规级 AEC-Q200 认证成为准入门槛,采购决策周期缩短、更看重供货稳定性承诺。',
source: '行业报告',
signal_date: '2026-06-01',
market_region: '俄罗斯',
industry: '汽车电子',
chip_category: 'MCU',
importance: 4,
impact_dir: 'opportunity',
signal_status: 'evaluated',
version: '2026-Q2',
review_note: '',
},
},
{
address: { domain: 'market', object: 'signal' },
key: { signal_id: 'MS-2026-0002' },
values: {
signal_id: 'MS-2026-0002',
signal_type: 'customer_market',
title: 'Itelma 系客户新一轮车身控制器项目招标',
content: 'Itelma 及同类俄罗斯 Tier1 客户密集启动车身控制器新项目招标,价值传递素材需突出认证齐全度与批量交付能力,系统方案白皮书是决策链高层最看重的材料形式。',
source: '订阅',
signal_date: '2026-07-10',
market_region: '俄罗斯',
industry: '汽车电子',
chip_category: 'MCU',
importance: 5,
impact_dir: 'opportunity',
signal_status: 'evaluated',
version: '2026-Q2',
review_note: '',
},
},
] as const;