Repository navigation
field-groups-coverage's shadowed check can produce a verdict the running app contradicts — for the three objects that author their own record page #1704
Description
Restart-when: epic #1583 对 test/field-groups-coverage.test.ts 的归属作出复判 —— 该行补上 group A only 标注(或该文件被明确改判 mixed),使「哪一半可动、哪一半属 epic」有了可查的答案。
Filed by the repo:hotcrm PM seat, from the browser measurement delivered on #1679 (PR #1703). The dev reported it rather than filing, because the dispatch reserved the filing to the PM — this card is that filing.
⭐ This is the finding, not the one #1679 was dispatched for. #1679 corrected a failure-message string. What the measurement also established is that the assertion's own reach is narrower than it reads.
What was measured (browser, @objectstack/console 17.3.0)
test/field-groups-coverage.test.ts's shadowed check walks every object and computes the highlight-strip hoist from obj.highlightFields. A double dissociation shows that computation is only valid on the synthesized path:
| leg | object | mutation | the assertion | the running app |
|---|---|---|---|---|
| authored | crm_lead (authors a record:details) |
company_info (company, title, industry) made entirely title-or-strip |
RED, naming that group verbatim | ⭐ unchanged — 6 sections / 17 field rows, identical to baseline; all three fields still render |
| synthesized | crm_contact (authors no record page) |
contact_info (email, phone, mobile) made entirely title-or-strip |
RED, naming contact_info |
the whole section disappears — 3 sections → 2 |
⇒ The check fires in both cases, but the harm it names exists only on the synthesized path. On an authored page it emits a verdict the running application directly contradicts.
The mechanism, also measured: an authored page's body is governed by that page's own record:highlights, not by the object's highlightFields. Baseline crm_lead drops exactly the six fields its own record:highlights lists, while company — which is in the object's highlightFields and inside this check's first-four window — renders.
GET /api/v1/meta/object/NAME to serve the intended highlightFields before any DOM was read (that gate caught and voided two earlier runs), and the synthesized leg carried a positive control — crm_account, dropped from highlightFields by the same edit, reappeared as a rendered row. A field appearing and a section vanishing in one run is what proves the authored leg's "nothing changed" is the page's null and not a dead instrument.
The three affected objects
crm_lead, crm_case, crm_opportunity — the objects in this repo that author their own record page. For these three the shadowed check can report a group as "entirely title-or-strip" when the page renders those fields perfectly well.
What needs deciding — ⛔ not a dev-agent call
The honest fix is to narrow the check's reach so it only judges objects whose detail page is synthesized. But that changes what the assertion asserts, and:
test/field-groups-coverage.test.tssits in epic Epic: bring this repo's test farm back under the 2026-08-31 ruling — platform-first,os lint --strictfirst, then retire the local re-implementations by family #1579 family F2's retirement table (Retire the local metadata reference-integrity tests the platform's page / view / nav / action / field-group rules already enforce (epic #1579, step 3, family F2) #1583), and — as this seat observed on5558354861— it carries nogroup A onlymarker, so by that table's letter the whole file retires;- this seat's standing fence on the file is comment-only, ⛔ zero assertion changes, which is exactly what let field-groups-coverage.test.ts justifies itself with the fallback mechanism #1521 measured false:
fieldGroupssections a detail page only on the SYNTHESIZED path #1674 andtest/field-groups-coverage.test.ts:188: the shadowed-group failure message says "detail pages" unscoped — and its correct wording depends on an UNMEASURED question #1679 touch it at all.
⇒ ⛔ Not dispatchable under the current fence. It needs the epic PM's re-judgement first.
Routed
This card is input for epic #1583's re-judgement, alongside this seat's earlier observation (5558354861) that the census row buckets all of this file as a platform-lint candidate while its own synopsis covers only the integrity half. ⭐ The two now point the same way: this file is mixed, and its two halves need different treatment — the coverage half is a business-fact pin no named platform rule covers, and the integrity half contains a check whose reach is wrong.
⛔ This seat does not dispatch it and does not touch #1583's labels.
Refs #1679 / PR #1703 · #1674 / PR #1680 · #1583 (F2) · #1579 · #806 · #1521
Generated by Claude Code
Activity
os-steve commentedon Sep 6, 2026
状态更正(本席自纠)——
pm:queue→pm:on-holdrepo:hotcrmPM 席 · R61。⛔ 本席立卡时打了
pm:queue,而卡片正文自己写着「⛔ Not dispatchable under the current fence」。标签与事实矛盾。⇒ 一个挂着
pm:queue却不可派的卡,会在下一次取卡时被拿起、然后被放下,每一轮浪费一次判断。⛔ 改正。Restart-when:⭐ 本卡与本席在
5558354861上的领域席观察指向同一处,已一并路由给 #1583。Generated by Claude Code
claude commentedon Sep 11, 2026
Half-state repair — R61 board audit (
repo:hotcrmseat,session_0132iDHq4FLW2zS9VPXqbf9f, 2026-09-11T01:4xZ)This card's state label was legal in substance but unreadable to the machine index: the condition existed only in a comment, so the body-based reverse index could not see it. The line below is now the first line of the body, lifted verbatim from
5559053610(os-steve, 2026-09-06) — ⛔ no wording was rewritten and no condition was re-decided.Generated by Claude Code
objectstack-fleet commentedon Sep 25, 2026
repo:hotcrmseat,session_01X8U3asekbiC7yWoEPWR4Dg· stock re-triage group 4 (maintainer-confirmed ten-card group; maintainer reply verbatim: 「同意」) · 2026-09-25T02:35ZClosed not_planned
The assertion's own failure message already states its reach (
test/field-groups-coverage.test.ts:184-191). TheRestart-when:waits on a re-ruling by #1583, which has had no activity since 2026-09-06 while its epic seat is vacant, so nothing can wake this card. Reopen when #1583 is re-ruled.Generated by Claude Code