examples/app-todo 的逾期升级通知里有一个永远渲染成空白的插值:模板引用 {currentTask.days_overdue},而 todo_task 上没有 days_overdue 这个字段。⇒ 每一封该通知都发成「Due <日期>,(空) day(s) overdue.」
读数(origin/main = 5ed7ad9df,本席逐条打印,⛔ 非转述)
examples/app-todo/src/flows/task.flow.ts:136
message: 'Due {currentTask.due_date}, {currentTask.days_overdue} day(s) overdue.'
`days_overdue` 在 examples/app-todo/src/objects/ 下 → 0
CONTROL 同一读法、同一目录:`due_date` 在 task.object.ts 下 → 6 ← 读法有效,零是读数
⇒ currentTask 是一个 loop 迭代器,元素来自一个 get_record,其对象是 todo_task;该对象声明了 18 个字段,其中没有 days_overdue。
怎么被发现的 —— ⭐ 这一点本身是读数
它是被 PR #18583(卡 #17305)那条刚加宽的规则自己找出来的。 那张卡把 validate-flow-template-paths 从"只认 record. 根 + 只看 record-triggered 流"加宽到认 get_record / loop 绑定的变量根。承接者按派发令跑了"加宽前 / 加宽后"两遍四个示例 app:
加宽前 加宽后
app-crm 0 → 0
app-multi-pkg 0 → 0
app-showcase 0 → 0
app-todo 0 → 1 ← 本条
⇒ ⭐ 它在加宽的第一分钟就抓到一个真阳性,而那正是分诊当初预告的:「Expect new findings to appear in-repo once it can see more; if the platform's own flows go red, that is a second card,⛔ not a reason to narrow the rule again」。这就是那第二张卡。
为什么不在那张 PR 里顺手修
⛔ 补法是产品判断,⛔ 不是机械形状:
- 给
todo_task 加一个 days_overdue 公式字段(需要定义它相对什么时点计算、时区、以及未逾期时取什么值),或
- 改写这句文案,不再声称给得出天数。
⇒ 两条路的产物不同,⛔ 不属于"就地修"豁免。承接者没有顺手改,这是对的。
严重度线索(⛔ 不定级,那是分诊的)
- 失败形态是静默的:渲染出的是空白,⛔ 不是报错 —— 收件人看到「Due 2026-09-30, day(s) overdue.」而不会知道少了什么。
- 规则报它是 warning(advisory)⇒ ⛔ 不动退出码;而且没有任何 CI 作业对
examples/ 跑 objectstack validate ⇒ 加宽后的规则今天也不会在 CI 里拦住它。
- 它在示例 app 里 ⇒ 命中的是照着示例学的人。
同族,⛔ 不是重复
查重(REST /search/issues 在本通道不服务,按完整枚举)
拉全部 554 个 open 非 PR issue 本地 grep:
'days_overdue' → 0 'overdue_escalation' → 0 'currentTask' → 0 'todo_task' → 0
'app-todo' → 6 ← 发火对照,六条逐条读过,均非同题(#18566 同族不同题,余四条无关)
⇒ 那些零是读数。
来源
卡 #17305 的 dev 在 out_of_scope_findings 里交回(class a);⭐ 它没有自己立卡(dev 席不 POST issue),交回给了派发席。本席自己重取了全部读数并配了发火对照。
⛔ 未定级、未指派、未定车道 —— 那是分诊的活。
domain:devx 执行席 · 座位贴 #6023 · session session_017ef78bLdybu3AffehKkhfk · 读数取自 origin/main 的一次性 worktree
Generated by Claude Code
examples/app-todo的逾期升级通知里有一个永远渲染成空白的插值:模板引用{currentTask.days_overdue},而todo_task上没有days_overdue这个字段。⇒ 每一封该通知都发成「Due <日期>,(空) day(s) overdue.」读数(
origin/main=5ed7ad9df,本席逐条打印,⛔ 非转述)⇒
currentTask是一个loop迭代器,元素来自一个get_record,其对象是todo_task;该对象声明了 18 个字段,其中没有days_overdue。怎么被发现的 —— ⭐ 这一点本身是读数
它是被 PR #18583(卡 #17305)那条刚加宽的规则自己找出来的。 那张卡把
validate-flow-template-paths从"只认record.根 + 只看 record-triggered 流"加宽到认get_record/loop绑定的变量根。承接者按派发令跑了"加宽前 / 加宽后"两遍四个示例 app:⇒ ⭐ 它在加宽的第一分钟就抓到一个真阳性,而那正是分诊当初预告的:「Expect new findings to appear in-repo once it can see more; if the platform's own flows go red, that is a second card,⛔ not a reason to narrow the rule again」。这就是那第二张卡。
为什么不在那张 PR 里顺手修
⛔ 补法是产品判断,⛔ 不是机械形状:
todo_task加一个days_overdue公式字段(需要定义它相对什么时点计算、时区、以及未逾期时取什么值),或⇒ 两条路的产物不同,⛔ 不属于"就地修"豁免。承接者没有顺手改,这是对的。
严重度线索(⛔ 不定级,那是分诊的)
examples/跑objectstack validate⇒ 加宽后的规则今天也不会在 CI 里拦住它。同族,⛔ 不是重复
examples/app-todoships 57 dottedmessagesids across three locales that resolve to nothing — the #18190 trap one layer out, in the reference app an author copies from #18566 ——examples/app-todo装运 57 个跨三语种的点分messagesid,解析不到任何东西。⇒ 形状同族(同一个示例 app 装运了一个"指向不存在之物"的串),但机制不同(i18n 消息 id vs 流模板字段),⛔ 不合并。查重(REST
/search/issues在本通道不服务,按完整枚举)拉全部 554 个 open 非 PR issue 本地 grep:
⇒ 那些零是读数。
来源
卡 #17305 的 dev 在
out_of_scope_findings里交回(class a);⭐ 它没有自己立卡(dev 席不 POST issue),交回给了派发席。本席自己重取了全部读数并配了发火对照。⛔ 未定级、未指派、未定车道 —— 那是分诊的活。
domain:devx执行席 · 座位贴 #6023 · sessionsession_017ef78bLdybu3AffehKkhfk· 读数取自origin/main的一次性 worktreeGenerated by Claude Code