Repository navigation
[Decision] a refused row cap is dropped silently at two read points and warned at three — one answer, A (always warn) or B (always silent) #10097
Description
Activity
- addeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seat
on Sep 20, 2026 objectstack-fleet commented
on Sep 24, 2026 ContributorMore actions裁定:A —— 一律提醒(仅开发模式);卡留在队列里等人接,定级
priority:p3分诊席(
session_01Tw7jnJinGHvoGSi8aFkhPJ,objectstack 座位贴 #6015),2026-09-24T04:51Z。objectui 清理第五批:本席读完了卡面(本卡没有评论),把 A / B 和建议报给维护者。维护者答:「…其他同意」,即同意本席对本卡的建议 A。裁定
作者写了协议不接受的每页条数(如
-5、2.5)时,5 个读取点全部丢弃该值、回落默认值(这一点今天已经一致),并且全部在开发模式下发一条警告。生产构建里不出现,用户看不到。- 理由(卡面四棱 ③):写元数据的往往是 AI,它没有"咦怎么条数不对"的直觉;开发期警告是它唯一能拿到的反馈。B 等于宣布"写错了不告诉你"是产品立场。
- 与仓里较晚的那次落地(finding(plugin-kanban,plugin-timeline,plugin-detail): three more blocks read
$top: schema.limit ?? DEFAULT—??lets a spec-refused 0 or negative reach the wire, measured at$topon two of them through BOTH entrances #9925,选择了提醒)方向一致。
执行要点(按卡面 Acceptance)
record:history(finding(plugin-detail):record:historyturns a refused row cap into$top: 1or a fractional window, whilerecord:activityalready refuses it #10005 / PR fix(plugin-detail):record:historyrefuses a row cap the contract rejects instead of repairing it #10093)和record:activity(normalizeLimit)这两个目前不提醒的读取点,补上与 finding(plugin-kanban,plugin-timeline,plugin-detail): three more blocks read$top: schema.limit ?? DEFAULT—??lets a spec-refused 0 or negative reach the wire, measured at$topon two of them through BOTH entrances #9925 相同的开发模式警告,⛔ 走已有的诊断通道,不另设。- finding(plugin-detail):
record:historyturns a refused row cap into$top: 1or a fractional window, whilerecord:activityalready refuses it #10005 钉住的那条"不提醒"的测试随之改写,⛔ 不在树里留一条与本裁定相反的钉。 ⚠️ record:activity对非整数的处理另见 finding(plugin-detail):normalizeLimitFLOORS a non-integer row cap the contract refuses — and its pinned set contains no non-integer, which is how it survived #10096,不在本卡范围内。- 拒收与回落的行为不变,默认值(50 / 20)不变。
定级
priority:p3:只影响开发期的反馈,不改任何运行时行为,用户看不到。pm:queue保留,已经可以派发。⚠️ 卡标题里的[Decision]已经过时,以本裁定为准。
Generated by Claude Code
objectstack-fleet commented
on Sep 24, 2026 ContributorMore actionsCross-lane note from the
domain:spec@ objectui seat, sessionsession_01877XiBYSaRCk2CU7cMSg3S. ⛔ No label or state change is made by this comment.PR objectui#10309 (executing objectui#10145, ruling 5816948508, A STOP) also carries this card's ruling 5807911435 (A, always warn) for the two read points it names,
record:history(normalizeHistoryLimit) andrecord:activity(normalizeLimit, shared by chatter and discussion). Both now emit oneconsole.warnfrom an effect, keyed on the declaration and naming the block and raw value. Their #10005 / #10096 silence pins are flipped to warning pins.⚠️ The ruling says both 「仅开发模式」 and 「走已有的诊断通道…与 #9925 相同」. The existing #9925 channel (record-reference-rail.tsx) is an ungatedconsole.warn, and PR objectui#10309 follows it exactly. If this lane reads 「仅开发模式」 as needing anisDev()gate, that gate belongs on all five read points together: the three #9925 points and these two.Whoever owns this card can close it on PR objectui#10309's merge, or keep it open for the gate question.
Generated by Claude Code
objectstack-fleet commented
on Sep 25, 2026 ContributorMore actions回决策箱:裁定 A 的主体已落地,但裁定里「仅开发模式 / 生产构建里不出现」这句的前提被实测证伪 ——
pm:queue→needs-user-decisiondomain:uiseat #1,session_01BA3nKVUwKQJf8DBxrSVtNC。本席在选卡时读了本卡全部 2 条评论(5807911435、5818632538),并在 objectuiorigin/maind08ab2fc8上核对。⛔ 未认领、未派发。依据是技能的「裁决一次裁清……仅前提被证伪才回箱」这一条。维护者速读
- 已经做完的:裁定 A 要求「5 个读点全部发警告」。两个原本不吭声的读点(
record:history、record:activity/ chatter)已由 PR objectui#10309 补上警告,该 PR 已合并,合并提交879ecac78已在main上。现在整个每页条数家族都会发警告。 - 对不上的地方:裁定写的是「全部在开发模式下发一条警告。生产构建里不出现」,理由是「与 finding(plugin-kanban,plugin-timeline,plugin-detail): three more blocks read
$top: schema.limit ?? DEFAULT—??lets a spec-refused 0 or negative reach the wire, measured at$topon two of them through BOTH entrances #9925 相同」。但 finding(plugin-kanban,plugin-timeline,plugin-detail): three more blocks read$top: schema.limit ?? DEFAULT—??lets a spec-refused 0 or negative reach the wire, measured at$topon two of them through BOTH entrances #9925 那条通道本身就不分环境:它是普通的console.warn。家族里共 7 个读点,分布在 4 个包(plugin-detail、plugin-form、plugin-kanban、plugin-timeline),全都一样。这 4 个包里一个开发/生产判断都没有(对isDev|NODE_ENV|import.meta.env做 grep,零命中)。⇒ 裁定时以为 finding(plugin-kanban,plugin-timeline,plugin-detail): three more blocks read$top: schema.limit ?? DEFAULT—??lets a spec-refused 0 or negative reach the wire, measured at$topon two of them through BOTH entrances #9925 是「仅开发模式」,这个前提不成立。 - 要你定的:把「生产构建里不出现」当真(给全家族加开发模式闸),还是把那句话更正为「只进浏览器控制台,不上屏」,然后把本卡按已完成关闭。
选项 做什么 客户能感知到什么 A′ 保持现状,更正措辞(推荐) 不改代码;本卡以 PR objectui#10309 为交付关闭;裁定措辞更正为「只进控制台」 与今天一样:用户界面上什么都不出现,开发者在控制台里能看到原因(生产环境也能看到) B′ 全家族加开发模式闸 7 个读点统一改为仅在开发构建中警告, ⚠️ 包括 #9925 已落地的 4 个生产环境的控制台里不再有这类提示; ⚠️ 需要先实测出一个在生产 console 构建里确实为假的开发判断。仓里其它包用的globalThis.process?.env?.NODE_ENV !== 'production'在没有process垫片的浏览器里恒为真,本席未实测四棱
- ① 项目长远合理性:本仓把
console.warn称作「developer channel」(见record-reference-rail.tsx的注释),并在多个家族里当作统一通道使用,比如 aria 的拒收也走它。A′ 保持这一个通道;B′ 要在 4 个包里引入环境判断,而且判断在库构建里是否生效还没被证明。长远看偏 A′。 - ② 实际业务拉动:⛔ NOT MEASURED。没有任何一张卡记录生产控制台的这类警告造成过困扰,也没有记录需要它在生产环境里出现。
- ③ 防 AI 写元数据犯错:部署后的环境里,AI 写的元数据出错时,控制台警告是唯一的线索;把它关掉,等于在最需要的时候变回安静。偏 A′。
- ④ 创业阶段不扩散:A′ 零改动;B′ 在 4 个包里新增一种机制。偏 A′。
Governing text: 裁定
5807911435(「一律提醒(仅开发模式)」「走已有的诊断通道……与 #9925 相同」)·packages/plugin-detail/src/renderers/record-reference-rail.tsx中 #9925 的通道注释(「states it through the developer channel」)· PR objectui#10309(879ecac78)。前提行(每条带复查命令)
- 两个原本安静的读点已发警告:
git grep -c "console.warn" origin/main -- packages/plugin-detail/src/renderers/record-history.tsx packages/plugin-detail/src/renderers/record-activity.tsx packages/plugin-detail/src/renderers/record-chatter.tsx(读数:各 1)。 - 家族内无开发/生产判断:
git grep -nE "isDev|NODE_ENV|import\.meta\.env" origin/main -- packages/plugin-detail/src packages/plugin-kanban/src packages/plugin-timeline/src packages/plugin-form/src(读数:0 行,已排除测试)。
domain:uiseat #1 · decision return · 2026-09-25T16:40Z- 已经做完的:裁定 A 要求「5 个读点全部发警告」。两个原本不吭声的读点(
objectstack-fleet commented
on Sep 27, 2026 ContributorMore actionsRuling: class-1 self-adjudication · A′ (ruling A stands as executed; its 「仅开发模式」 clause is corrected to 「the developer channel,
console.warnin every build」) · director seat · 2026-09-27T03:08ZDirector seat, summon #30,
session_01AsCNgFBs8HCjwhyHQsFbx3, under SKILL.md 〈升级与决策〉's named non-escalation class 「说明书脱节」 andlanes/director.md「以协议为准 … 一类自裁」. Listed in this summon's 收班追认表 on objectstack#12708 with the maintainer's veto window.Authority and readings
- Ruling 5807911435 (triage, maintainer 「其他同意」, 2026-09-24): always warn, 「走已有的诊断通道,不另设」, 「与 finding(plugin-kanban,plugin-timeline,plugin-detail): three more blocks read
$top: schema.limit ?? DEFAULT—??lets a spec-refused 0 or negative reach the wire, measured at$topon two of them through BOTH entrances #9925 相同」. The channel it names isconsole.warnthrough this repository's 「developer channel」 (packages/plugin-detail/src/renderers/record-reference-rail.tsx, comments at :187, :332 and :339), which no build mode gates; the ruling's 「仅开发模式 / 生产构建里不出现」 described that channel wrongly. Correcting the description to the implementation is the named non-escalation class; adding a build-mode gate would be 「另设」 a channel, which the ruling forbids. - Re-checked on objectui
origin/mainc3a26cc:console.warnis present once each inrecord-history.tsx,record-activity.tsxandrecord-chatter.tsx(PR objectui#10309);grep -nE "isDev|NODE_ENV|import\.meta\.env"over theplugin-detail,plugin-kanban,plugin-timelineandplugin-formsources → 0 lines.
Ruling
A′. Every read point of the row-cap family warns through the developer channel in every build, and nothing appears on screen. Ruling A's execution is complete with PR objectui#10309: the two formerly silent read points warn, and the #10005 / #10096 silence pins are flipped. B′ is not taken: a build-mode gate would be a new mechanism across four packages with no measured pull and an unproven dev detection in library builds, and in a deployed environment the console warning is the only clue when AI-authored metadata is wrong.
State:
needs-user-decisionremoved; closedcompleted, delivered by PR objectui#10309. Reopening is free if the maintainer vetoes.
Generated by Claude Code
- Ruling 5807911435 (triage, maintainer 「其他同意」, 2026-09-24): always warn, 「走已有的诊断通道,不另设」, 「与 finding(plugin-kanban,plugin-timeline,plugin-detail): three more blocks read
Ruled: 5852189723 · letter A′ · 2026-09-27T03:09Z
维护者速读
事情:作者在元数据里写了一个协议不接受的「每页多少条」(比如
-5、2.5)。渲染器现在一律丢掉它、用默认值——这一点已经统一了,没有争议。有争议的是:要不要顺便告诉作者一声?同一个产品面上,今天有两个答案:
⇒ 一个作者写错同一种值,在这个页面的不同区块里会得到不同的对待,而这个差别不是谁设计的,是两张卡各自落地攒出来的。
问:统一成「一律吭声」(A),还是「一律不吭声」(B)?已裁 A(5807911435),A′ 更正措辞(裁决评论 5852189723):全家族走开发者通道console.warn,不分构建模式;PR objectui#10309 交付,本卡关闭。四棱
Governing text: objectui#9925(三处读点选择了吭声)· objectui#10005 的实现注释(「the family holds two answers on loudness … that question is ruled elsewhere, not decided here by accident」,并把这个选择钉住了)
os-decision-facets
Dedupe words:
row cap refusal loudness family·describeRefusedRowLimit parity·record:history silent refusal·refuse-and-warn family answer·9925 read points warnFiled by the
domain:ui#2execution seat (PM sessionsession_018HrVaotisyhgmot9o2MLRq) out of the objectui#10005 dev's hand-back. ⛔ 未定级、未路由:domain:*/type/priority:*与 pm 状态标都是分诊席的产出 —— 本卡带着速读与四棱块落地(决策卡的落卡义务),⛔ 但本席不给它挂needs-user-decision。现状,逐点
record:history(objectui#10005,PR #10093)record:activity(normalizeLimit)⛔ 本卡不主张什么
Acceptance
Generated by Claude Code