Skip to content

[rebuilt from objectui#9318] rowCanonAdvisory re-derives a verdict @objectstack/lint already publishes #9440

Description

@os-sam

Blocked-by: none

⚠️ This card is a REBUILD of objectui#9318, which became unreachable. Rebuilt on the maintainer's instruction, 2026-09-13: 「我按抢救记录重建 #9318」.

⛔ The original card's body is not recoverableGET /issues/9318 answers 404 while GET /issues/9318/comments answers 200 with three comments, the signature of content hidden with a suspended author account rather than of a deleted issue. Controls, same session and token: #9362 → 200, #5734 → 200, and a sweep of every visible issue number found 9 gaps ≥ 9000, of which only this one is referenced by an open PR.

⇒ everything below is salvaged from the three surviving comments, each of which was written by a different account than the hidden one. ⛔ Nothing here is reconstructed from memory, and ⛔ no figure is restated that the salvage does not carry.

What the work is

PR objectui#9366 implements this card and is open. Branch claude/issue-9318-rowcanon-verdict-from-lint, pushed c931579b3f.

rowCanonAdvisory in app-shell re-derives a 「is this root bound on this surface?」 verdict that @objectstack/lint already publishes as fieldRuleRootIssue / FIELD_RULE_BOUND_ROOTS. The card asks for the re-derivation to be replaced by the published authority on the slots whose bound-root set is the field-rule set.

The original card's own readings, and how they had drifted by dispatch time

From the domain:ui seat's claim (5651515871), which re-verified both sides of the seam before dispatching:

reading card said measured at dispatch
objectui references to fieldRuleRootIssue / FIELD_RULE_BOUND_ROOTS under packages/ 0 0
rowCanonAdvisory celAuthoring.ts:184-283 celAuthoring.ts:271
FIELD_RULE_BOUND_ROOTS export validate-expressions.ts:688 :680
fieldRuleRootIssue export validate-expressions.ts:790 :782

The lit control fires, which is what makes that zero mean 「not used」 rather than 「not reachable」: packages/app-shell/package.json:85 declares "@objectstack/lint": "^17.0.0" and live objectui code already imports from it. The import path works; nobody had asked it this question.

⚠️ The implementing seat's own re-measurement later disagreed with the dispatch on the objectstack-side line numbers and said so rather than adopting them — :688 / :790 on origin/main 2b6a207 against the dispatch's :680 / :782, which came from a sibling checkout's local HEAD. The exported shape is unchanged either way, and line numbers are informational.

⛔ What this card explicitly does NOT ask for

The original card fenced these itself, and the claim endorsed the fences rather than letting a seat rediscover them:

  • Not 「start warning on wrong-layer data.*」 — objectui already does. Anyone reading the parent card alone would wrongly think authors still get a false green.
  • Not 「promote it to error」 — objectui's own docblock decided that on evidence: every save gate on this tier counts severity === 'error', so promoting it would refuse predicates already stored in customer metadata.
  • Not re-enabling the bare-shorthand arm — row = null is deliberate, with a measured 100% false-positive rate recorded for it on the flattened / RLS tier.

⭐ The card's third instruction — the one the claim called the most important

if fieldRuleRootIssue's slot vocabulary does not cover every surface rowCanonAdvisory guards, say so and keep the local fallback for the uncovered surfaces — ⛔ never silently shrink coverage to match the helper.

It was honoured, and the answer was NO. From the os-dev-report (5651747919): the helper's vocabulary does not cover every guarded surface, and the local fallback is kept for the uncovered ones. Uncovered in opposite directions —

  • a formula field's expression binds FORMULA_ROOTS = ['record'], strictly narrower ⇒ the helper would stop advising previous.* / parent.* there;
  • a conditional-formatting condition binds record / current_user / user / features / os / ctx, strictly wider ⇒ the helper would tell an author to rewrite a predicate that works.

Both keep the local instrument, both are pinned as live controls, and ablation leg B1 performs the exact 「route everything through the helper」 tidy-up and shows both going red.

Grading

  • Clause-②: no — stated identically in both claims. rowCanonAdvisory is module-private in app-shell; consuming a cross-repo published API is not publishing one. Verified rather than assumed at implementation time: CelSchemaHint, CelPredicateField, celAuthoring, rowCanonAdvisory and FIELD_RULE_VERDICT_SLOTS each appear 0 times in the built packages/app-shell/dist/index.d.ts, against a lit control (MetadataResourceRouter, 1 hit).
  • domain:ui — evidenced by the claim's own first line (「Claimed by the domain:ui PM seat」).
  • No priority label is set here. The salvage does not carry the original's, and this seat does not grade. Triage owns the priority:* and type fields on this card.

Provenance

The three surviving comments on the unreachable original: 5651515871 (claim + fences), 5651747919 (os-dev-report), 5652798679 (carrier repair adding the standalone Branch: line — part of a board-wide seat-template fault that hit 13 cards). They were also salvaged onto PR objectui#9366 at 5654286772 before this rebuild.

⚠️ If objectui#9318 becomes reachable again, this card is the duplicate — close this one, not it, and move the Fixes reference back.

Activity

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

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions