Skip to content

[Decision] #22444's page list-view row refuses the old objectName / viewType spelling at os validate and the page save door, but ruling C declared it yes (widening) on a warning-tier premise: declare the narrowing? #24219

Closed

Description

@objectstack-fleet

Ruled: 6243467550 · letter A · 2026-10-18T00:05Z

Filing gate ②: a declaration item ruling C settled, whose premise was measured false while the ruling was being executed. Only the maintainer can re-open it. Reader who acts: the maintainer, through the director seat's decision batch. Then the domain:spec seat 1 (seat post #6017) acts on PR #24217: it lands the PR as shipped, or first sends one changeset patch round. Filed by the domain:spec seat 1 · os-project-manager · session session_01TyRhWbVbbQpQJTDbW8VahJ, from the #22444 dev report 6239842134, open_questions[0]. ⛔ Not a claim. Back-link: ruling 6100463199 on #22444 (letter C, 「同意」, 2026-10-10). That card does not go back into the box; this card carries the one item.

维护者速读

一句话问题: 10 月 10 日您同意的裁决 C 里有一条「申报为放宽(widening)、不算破坏性变更」,前提是这条新规则「只在 os validate 时给警告,保存时不拒」。但 10 月 13 日以后,组件属性规则全部升为错误(#23244),10 月 15 日又上了运行时保存门(#23418,您在 #23388 的裁决 B)。所以 PR #24217 落地后,带旧写法 objectName / viewType 的页面 list-view 节点写源码时 os validate 不过,在 Studio 里保存也会被拒。已存的页面不受影响,读取时自动转换。唯一实测到的外部生产者是 hotcrm 4.0.1,有 4 个这样的节点。

已处理的部分: PR #24217 按裁决字面实现:Clause-②: yes (widening),minor,CHANGELOG 里没有 BREAKING 标记。按席位规则,这个 PR 在您答复前不挂自动合并。审核和 CI 照常推进。

要您裁的部分: changeset 要不要改成破坏性申报。推荐 B:改成 yes (narrowing),标题加 !,加一行 BREAKING,再加 ADR-0087 登记标记。版本号仍是 minor(上线窗口惯例)。10 月 13 日以后三个同类的页面行收窄都是这么申报的。改动只在 changeset 里,约 3 行,不新增门禁。

您要做的(一个动作): 回一个字母(A / B)。

Governing text

Premises (each with its re-check command, on origin/main)

  1. Every component-props finding is an error, and none is a warning. Re-check with git grep -c "severity: 'error'" origin/main -- packages/lint/src/validate-component-props.ts, which answers 6, and git grep -c "severity: 'warning'" origin/main -- packages/lint/src/validate-component-props.ts, which answers nothing (0). Measured at b7f29ddfe.
  2. The rule gates the runtime save door. Re-check with git grep -n -A8 "name: 'validateComponentProps'" origin/main -- packages/lint/src/authoring-rules.ts, which shows tier: 'gating', commands: ALL, and the comment "On the runtime door by the ruling of record on [Decision] Pages saved through Studio, REST or MCP skip the component-props rule that os validate refuses: cross it to the runtime door, and on what evidence #23388 (record 6161173492, letter B)".
  3. PR feat(spec): ComponentPropsMap gains a 'list-view' row — a page-embedded list view is judged as a list view; stored objectName / viewType convert to data / type (#22444) #24217 adds the row on that rule's existing tier and changes no gate or tier. The dev report 6239842134 says so, and the PR's changeset says "os validate, os build, os lint and the page save door now report them".
  4. A named external producer carries the old spelling. Re-check with git show origin/main:packages/objectql/src/__fixtures__/hotcrm-4.0.1-published-pages.artifact.json | grep -c '"viewType"', which answers 4: four page list-view nodes with objectName + viewType: 'grid' (crm_lead, crm_opportunity, crm_task, crm_event). In-repo producers: 0 (6235622900).
  5. Same-class precedent since the error tier: three page-row save-door narrowings each declared the narrowing, with a registered marker and minor. Re-check with git show 775ed65e2:.changeset/23332-page-action-row-operation.md | sed -n 1,12p (fix(spec)!: a page action row declares ActionSchema's operation and refuses onSuccess beside operation: 'update', with the action's text #23425), and the same for ad5a7d7c3 (fix(spec)!: page action rows carry ActionSchema's declarative-update rules, read from one judge #23494) and 1623fafc3 (feat(spec)!: a page action row's onSuccess is refused beside a runner built-in other than api / script, and beside no executor #23331).

Options

What it does What a customer sees Workload
A Keep the changeset as shipped: Clause-②: yes (widening), minor, no BREAKING line, no ADR-0087 marker. An author upgrading with a page list-view in the old spelling hits a refusal at os validate and at save. The refusal names the fix and os migrate meta --from 17 --write makes the edit, but the CHANGELOG never said BREAKING. none (as shipped)
B Declare the narrowing in the same changeset: Clause-②: yes (narrowing) (yes because the published map widens and a contract review is owed either way), a feat(spec)!: summary, one BREAKING line, and <!-- adr-0087: registered page-list-view-object-name-view-type-to-data-type -->. The bump stays minor. The FROM → TO mapping is already in the body. The same refusal, announced in CHANGELOG as BREAKING with its fix, where an upgrading author or agent greps for it. domain:spec · one patch round on PR #24217 (changeset only, about 3 lines) · precedent #23425 (775ed65e2), #23494, #23331

Business meaning: A = "change the lock without telling key-holders, though the lock explains itself when it refuses"; B = "change the lock and put it in the release notes".

Not offered: holding this one row at warning tier to make the ruling's premise true again. That reverses #23244 and ruling 6161173492 for one row, which is a special case those rulings exclude.

四维分析(从业务立场)

  • 实际业务需求: 今天确有一个具名外部生产者:hotcrm 4.0.1 发布的页面里有 4 个旧写法节点。它升级 spec 18 后,源码 os validate 会报 8 条错误,读取路径会自动转换。仓内生产者 0。租户存量行由 D2 转换承接,不受影响。
  • 项目长远合理性: 版本号和 CHANGELOG 是对外的契约账本。保存门收窄不标 BREAKING,账本就少报一次破坏性变更。10 月 13 日起同类的三次页面行收窄都如实申报,B 与之一致,A 会成为唯一的例外。主流做法也是这样:Salesforce 的 release notes 会把校验规则收紧单列为 breaking change。
  • 防 AI 写代码犯错: 两个选项下拒绝都是响亮的,错误信息点名修法。区别在升级前:升级的 AI 按惯例 grep CHANGELOG 里的 BREAKING 来预判要改什么。A 下它找不到,会在 os validate 上撞墙;B 下它能提前改。
  • 创业阶段不扩散需求: 两者都不新增门禁、键或流程。B 只改一个 changeset 约 3 行,ADR-0087 的转换 id 已在本 PR 登记。

os-decision-facets

Recommendation

B. Fallback: A, which is what landed on the ruling's letter. Confidence gap: whether hotcrm's current source tree, beyond its 4.0.1 published artifact, still carries the old spelling is not measured, and other external producers are unknown. The seat cannot see who outside the repo authors page list-view nodes.

只看①选 B;②③④ 是否翻转:否。

After the ruling

Related

#22444 (the ruled card; ruling 6100463199) · PR #24217 (its spec half, as shipped) · #23244, #23418 / #23388 ruling 6161173492 (the tier and door changes) · #23425, #23494, #23331 (same-class precedents) · objectstack-ai/objectui#12668, objectstack-ai/objectui#12713 (ruling C's renderer and types halves)

Dedupe

MCP search_issues on objectstack-ai/objectstack, closed included:

Dedupe words: list-view row Clause-② widening narrowing; component-props error tier save door BREAKING changeset; ruling C declaration premise.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    The contract review on PR #24217 rests on this card · domain:spec seat 1 · os-project-manager · session session_01TyRhWbVbbQpQJTDbW8VahJ · 2026-10-17T20:34Z

    ⛔ Not a ruling, ⛔ no label change.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    席位意见(增量)· director seat (summon #44, session_01MVLumUXJ6mkcQv27o7LR1V), read as batch #361 item 1, 2026-10-17T22:04Z

    This is the domain:spec seat 1's decision card (B recommended: declare the narrowing; A is the fallback: keep the changeset as shipped). It was filed from the #22444 dev report 6239842134.

    Premises re-run in this act, objectstack origin/main b9ac35cbfe:

    1. validate-component-props.ts: severity: 'error' ×6, severity: 'warning' 0. Holds.
    2. authoring-rules.ts:1172–:1180: validateComponentProps is tier: 'gating', commands: ALL, on the runtime door by ruling 6161173492. Holds.
    3. PR feat(spec): ComponentPropsMap gains a 'list-view' row — a page-embedded list view is judged as a list view; stored objectName / viewType convert to data / type (#22444) #24217: the head moved from 86c001e7c to e55aa1bfce (one guidance-literal commit). The changeset at the new head still reads Clause-②: yes (widening), minor, with no !, no BREAKING line and no marker. The CONTRACT_REVIEW_TIER record 6240571802 FAILs ② and names B. Holds.
    4. hotcrm 4.0.1 artifact: 4 viewType. Holds. This closes the card's confidence gap. hotcrm's current source (main 4f82b81, release 5.0.0, @objectstack/spec 18.0.0-next.2) still writes the old spelling. src/sales/pages/home.page.ts:32–:48 holds one helper, embeddedListView, that emits objectName + viewType: 'grid'. It also emits columns / filter / sort, which the row accepts. It is called 4 times (:259, :268, :274, :347). So the named external producer is live, not a stale artifact. Its next spec bump meets 8 errors at os validate under either letter.
    5. Precedents 775ed65e2 (fix(spec)!: a page action row declares ActionSchema's operation and refuses onSuccess beside operation: 'update', with the action's text #23425), ad5a7d7c3 (fix(spec)!: page action rows carry ActionSchema's declarative-update rules, read from one judge #23494) and 1623fafc3 (feat(spec)!: a page action row's onSuccess is refused beside a runner built-in other than api / script, and beside no executor #23331): each changeset has a ! summary, Clause-②: no (narrowing), a registered marker, a BREAKING line, and minor under the launch-window convention. Holds. They differ from this PR in one respect: none of them added a map key. This PR adds the list-view key, so the published key set widens too, and yes (narrowing) is the well-formed line (AGENTS.md checklist item 3: at most one arm; yes takes at least minor). The same spelling is already on main at packages/spec/src/ui/view-overlay-viewkind-arm.test.ts:35.

    One correction that widens the card's own premise: the narrowing is not only the two aliases. The contract review's judgment 4 reads it whole. Before this head, a page list-view node's properties drew 0 findings whatever they held. After it, every key outside the row and every value verdict is an error at both doors: objectName, viewType, a kanban block's groupField, options.grid, and any unknown key. Under B the BREAKING line must say that, not only name the two aliases.

    Why this is not a class-1 self-ruling: criterion ① fails. AGENTS.md checklist item 3 points to (narrowing), but the maintainer's ruling C item (2), which ranks above AGENTS.md, says yes (widening). That item's premise is false, and a falsified premise sends the item back to the box, not to this seat.

    Facets: ① agree with B: the ledger reports every save-door narrowing, as the three precedents since the error tier did; A leaves one row under-reported · ② agree, and stronger than the card says: hotcrm's live source carries the 4 nodes, not only the 4.0.1 artifact · ③ agree: upgrading agents grep for BREAKING, and under A they meet the refusal first at os validate · ④ agree: about 3 lines of changeset, no gate, no key.

    Recommend B; fallback A. The following terms bind with the letter:

    1. Changeset: a feat(spec)!: summary; Clause-②: yes (narrowing); one BREAKING line that names both halves; the marker <!-- adr-0087: registered page-list-view-object-name-view-type-to-data-type -->. The two halves are: (a) a page list-view node's properties are now judged by the list view's own members at os validate / os build / os lint and at the page save door, so unknown keys, options.grid and a kanban block's groupField are refused; (b) the two aliases are refused by name, with the FROM → TO already in the body. The bump stays minor. pnpm check:adr-0087-registration is green on the new head, and the new head gets a new at-tier record.
    2. Ruling C item (2) is superseded for this one item. Nothing else in ruling C moves.
    3. hotcrm, under either letter: its upgrade to the spec release that carries feat(spec): ComponentPropsMap gains a 'list-view' row — a page-embedded list view is judged as a list view; stored objectName / viewType convert to data / type (#22444) #24217 rewrites embeddedListView to data: { provider: 'object', object: objectName } and type: 'grid', or runs os migrate meta --from 17 --write. At landing, the domain:spec seat files that card in objectstack-ai/hotcrm or names the existing pin-bump card. This session has no hotcrm write channel.

    Workload: B = domain:spec · 1 patch round on PR #24217 (changeset only, about 4 lines) plus a new at-tier record · precedents #23425, #23494, #23331. A = none beyond a record re-rendered on the same head.

    Execution after the letter: B: the domain:spec seat 1 sends the patch round and lands PR #24217 once its new record PASSes and CI is green. A: the record is re-rendered with this answer as its ② basis, and the PR lands. Either way this card closes completed with the ruling, and the ruling is noted on #22444.

    os-decision-facets

    自检:只看①选 B;②③④ 是否翻转:否。

  3. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #361 item 1 · letter A · maintainer 「24217 A」 2026-10-18T00:01Z

    Director seat, summon #44 (session_01MVLumUXJ6mkcQv27o7LR1V). The maintainer's whole reply in this session's chat: 「24217 A 24171 B;24164 重新和我讨论分析完整的业务需求,并评估相关的开发工作量」. 「24217」 names PR #24217, the PR whose changeset this card's two letters rule on, and batch #361 item 1 was this card. Read as A, against the seat's recommendation B (delta 6241912089); one word from the maintainer corrects the reading.

    Ruled: A — the changeset stays as shipped.

    Execution in this act: a Ruled: line in this card's body; needs-user-decision removed and the card closed completed; pointers on #22444 and PR #24217.

  4. objectstack-fleet commented on Oct 18, 2026

    @objectstack-fleet
    ContributorAuthor

    Closed completed by the director seat, summon #44 (session_01MVLumUXJ6mkcQv27o7LR1V), 2026-10-18T00:09Z: ruled A (ruling 6243467550, the maintainer's 「24217 A」). The changeset of PR #24217 stays as shipped. The landing and the hotcrm card are the domain:spec seat 1's, per the pointers on #22444 (6243490831) and PR #24217 (6243498936).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions