№ · 任务清单 CH.07.12
主页 · 📃 任务清单 · 2026-07-15-r12-story-tracking-purify

2026-07-15-r12-story-tracking-purify

📅 2026-07-12 · 📦 9.1 KB · 📃 任务清单 · 📝 MD 文档 🆕 14d 🏷️ 时间🏷️ 剧情

⟦tag:v2|task|2026-07-15-r12-story-tracking-purify⟧ kind: task id: 2026-07-15-r12-story-tracking-purify lane: R12 title: 剧情追踪字段净化(Day 3 并行,3-4h) objective: 收口 W29 v1.1 R12 lane: 围绕 StoryTrackingCard 玩家可见开发者字段泄漏、year1Plan 文案污染与 App.tsx nextHint 过长问题做 4 文件最小净化,并把证据链交给 R11 收口文档。 scope: docs/plans/active/2026-07-13-5日开发计划-v1.md § 16.1 / § 17, docs/design/active/剧情追踪-字段净化与输出规则-v1.md, docs/handoff/tasks/2026-07-04-r6-story-tracking-purify-spec-v1.md, docs/handoff/tasks/2026-07-06-story-tracking-purify-owner.md, AGENTS.md, src/components/StoryTrackingCard.tsx, src/data/year1Plan.ts, src/App.tsx acceptance:

  • 只动 src/components/StoryTrackingCard.tsxsrc/data/year1Plan.tssrc/App.tsxAGENTS.md 这 4 个文件;不动 src/utils/failureEndgame.tssrc/utils/jianghuBriefing.tssrc/components/multiplayer-lobby/**src/data/auction/**
  • StoryTrackingCard.tsx 不再向玩家暴露 mainchainLineattributeLineitemLinechecklistLine 这类开发者字段拼接
  • year1Plan.tsitemLine 收束为玩家文案口径;App.tsxnextHint 渲染长度 <= 24 字并保留原变量
  • cmd /c npm run build 通过;cmd /c npm run lint 无新增错误
  • 截图对照中不再出现 tax_reported / brief=risk-tax_reported / 主链:... / 属性:... / 投放:... / 验收:xxx -> xxx ->
  • bridge 跨模块跳转功能不受影响,且 R11 收口文档拿到 R12 的实际落地证据 worker threadId: 019f54bd-b4f8-7b02-8ccd-c016324dcc1c current state: verified blockers: none。P1 于 2026-07-12 13:06:48 +08:00 豁免 2026-07-15 时间门;R10 记录为 partial / accepted residual risk,不阻断本 lane。 next action: none; archived after formal callback absorption. R11 may consume this evidence. summary:
  • 这是 W29 v1.1 3 条剧情 P0 lane 里唯一 W29 内实际派工的剧情 lane;R13 / R14 本周只立占位卡。
  • v1.1 § 16.1 与 W28 R6 spec 的旧行号都已漂移;本卡只认 2026-07-09 12:15 +08:00 复跑 grep 真值。
  • 当前 worktree 相比旧 spec 还有一处新增漂移:src/data/year1Plan.ts:396itemLine 现为 channels + storyItems,不再是旧 spec 中的 focus + storyItems;短工派工时必须按玩家文案口径收束,不能照抄旧字符串结构。
  • P1 early-dispatch override absorbed; R12 is verified. Browser screenshot and bridge click-through evidence are complete.

TL;DR

  • 实际派工日期: 2026-07-12,P1 直接豁免原 2026-07-15 时间门。
  • 当前动作: worker 019f54bd-b4f8-7b02-8ccd-c016324dcc1c 已进入 In-Flight。
  • 派工前动作: 2026-07-15 上午开工前 30 分钟重读 R10 卡面并记录当前状态;无论 R10verifiedclosed 还是 partial,本卡都按期启动。

真行号清单

2026-07-09 12:15 +08:00 复跑 grep 输出摘录

src\components\StoryTrackingCard.tsx:24:  mainchainLine?: string;
src\components\StoryTrackingCard.tsx:97:    && left.mainchainLine === right.mainchainLine
src\components\StoryTrackingCard.tsx:105:const buildMainchainLine = (bridge: Pick<TasklineFailureBridge, 'pressureSourceTags' | 'failureSeedTags' | 'briefingRefs' | 'trackingJumpTarget'> & Partial<Pick<TasklineFailureBridge, 'sourceLabel' | 'sourceSummary' | 'endgameFocus'>>) => {
src\components\StoryTrackingCard.tsx:137:    mainchainLine: buildMainchainLine({
src\components\StoryTrackingCard.tsx:508:      {(bridge?.mainchainLine || storyTracking.year1Plan) && (
src\components\StoryTrackingCard.tsx:510:          {bridge?.mainchainLine && (
src\components\StoryTrackingCard.tsx:512:              主链:{bridge.mainchainLine}
src\components\StoryTrackingCard.tsx:537:                  <span className="truncate max-w-[150px]">属性:{storyTracking.year1Plan.attributeLine}</span>
src\components\StoryTrackingCard.tsx:538:                  <span className="truncate max-w-[150px]">投放:{storyTracking.year1Plan.itemLine}</span>
src\components\StoryTrackingCard.tsx:539:                  <span className="truncate max-w-[200px]" title={storyTracking.year1Plan.checklistLine}>
src\components\StoryTrackingCard.tsx:540:                    验收:{storyTracking.year1Plan.checklistLine}

src\data\year1Plan.ts:66:  attributeLine: string;
src\data\year1Plan.ts:67:  itemLine: string;
src\data\year1Plan.ts:68:  checklistLine: string;
src\data\year1Plan.ts:391:  const attributeLine = (activeAttributeLinks.length > 0
src\data\year1Plan.ts:396:  const itemLine = `${itemBand.channels.slice(0, 2).join(' / ')} · ${itemBand.storyItems.slice(0, 2).join(' / ')}`;
src\data\year1Plan.ts:397:  const checklistLine = checklistStage.id === 'check_06'
src\data\year1Plan.ts:409:    attributeLine,
src\data\year1Plan.ts:410:    itemLine,
src\data\year1Plan.ts:411:    checklistLine,

src\App.tsx:3166:    const nextHint =
src\App.tsx:3245:      nextHint,

派工取值(以这张表为准)

| 文件 | 真行号 | 派工说明 | | :--- | :--- | :--- | | src/components/StoryTrackingCard.tsx | 510-514 | 删除 bridge?.mainchainLine 渲染块;保留外层 508 包裹与 year1Plan 分支 | | src/components/StoryTrackingCard.tsx | 537 | 删除 属性:{attributeLine} | | src/components/StoryTrackingCard.tsx | 538 | 删除 投放:{itemLine} | | src/components/StoryTrackingCard.tsx | 539-540 | 改写验收区,替换当前 checklistLine 直出 | | src/data/year1Plan.ts | 396 | 把 itemLinechannels + storyItems 收束为玩家文案口径,建议回到 itemBand.focus | | src\App.tsx | 3166-3176 | 保留 const nextHint = ... 原变量,在其后新增 nextHintSafe | | src\App.tsx | 3245 | 返回值中的 nextHint 改为使用 nextHintSafe |

改动清单

  1. src/components/StoryTrackingCard.tsx
    • 删除 bridge.mainchainLine 玩家可见渲染块
    • 删除 attributeLine / itemLine 两行
    • 用玩家可见阶段信息替换 checklistLine 直出
  2. src/data/year1Plan.ts
    • 收束 itemLine 为玩家文案,禁止继续把 channels / storyItems 拼接串直接喂给 UI
  3. src\App.tsx
    • 新增 nextHintSafe
    • 保留 nextHint 原变量,并把当前返回值切到 nextHintSafe
  4. AGENTS.md
    • 第 4 节末尾追加「玩家文案 vs 开发者字段」段落

启动前 MUST-DO

  1. 派工前 30 分钟重读 2026-07-16-multiplayer-ui-integration.md
  2. 在本卡 派工回执 段写一句:
R10 当前状态 = <verified / closed / partial / open>, <记录结论>
  1. 判定规则:
    • verified / closed -> R12 按期派发,记录“R10 已闭口”
    • partial -> R12 按期派发,记录“R10 仍为并行未闭口风险”
    • open / 未创建 -> R12 按期派发,记录“控制面异常,需后续单独纠偏”

验收清单

  • [ ] cmd /c npm run build 通过
  • [ ] cmd /c npm run lint 无新增错误
  • [ ] 剧情追踪面板截图中不再出现开发者字段直出
  • [ ] bridge 跨模块跳转功能未受影响
  • [ ] AGENTS.md 第 4 节新增段落已落盘
  • [ ] nextHint 渲染 <= 24 字,超长时末尾带
  • [ ] R11 收口文档吸收了本卡证据链

风险

  • src/App.tsx 已被 R10 触碰过相邻区域;本卡只能通过新增 nextHintSafe 变量解决,不得顺手调整 multiplayer 入口
  • year1Plan.ts 当前 itemLine 实现与旧 spec 已漂移;若短工直接照抄旧 spec 行号或字符串结构,容易误改
  • StoryTrackingCard.tsx 外层 year1Plan 包裹仍在;短工只能删 bridge 渲染块,不能把整个 year1 区块一起删掉
  • R10 在派工日可能仍显示 partial;当前口径已明确这只算并行风险记录,不再阻断 R12

回退

  • StoryTrackingCard.tsx 若出现回归,只回退本卡删改的 JSX 行,保留 bridge 数据层
  • nextHintSafe 若出错,回退到 nextHint 原渲染路径
  • year1Plan.ts 若 player-facing 收束不稳,优先退回到只读 itemBand.focus,不要回到 channels / storyItems 拼接串

不做

  • 不实现 ?dev=1
  • 不重做 StoryTrackingCard 整体架构
  • 不碰 src/components/multiplayer-lobby/**
  • 不碰 src/data/auction/** / src/utils/auctionRules.ts
  • 不顺手开新需求或补别的剧情 lane

派工回执

[R12 #剧情-字段净化@v1.2 回执]
- 变更文件:<列实际路径>
- 关键行为变化:<玩家可见变化 2-4 条>
- 验证结果:<build / lint / 截图 / 跳转回归>
- 风险/回退:<如有列出;如无写 无>
- R10 当前状态 = <状态>, <记录结论>

默认不要附整段 git diff。只有在审查、冲突排查或明确要求时,才补最小 patch。

参考入口

  • docs/plans/active/2026-07-13-5日开发计划-v1.md § 16.1 / § 17
  • docs/design/active/剧情追踪-字段净化与输出规则-v1.md
  • docs/handoff/tasks/2026-07-04-r6-story-tracking-purify-spec-v1.md
  • docs/handoff/tasks/2026-07-06-story-tracking-purify-owner.md
  • docs/handoff/tasks/2026-07-15-p2p-timeout-reconnect.md
  • docs/handoff/tasks/2026-07-16-multiplayer-ui-integration.md

(End of R12 task card)