Repository navigation
fix(react): the withholding console line names an element, not a navigation entry - #13306
Merged
Merged
Conversation
…gation entry The 'withholding' consequence paragraph of the shared visibility diagnostic was written for the app-shell navigation gate and said "a navigation entry whose predicate cannot be evaluated is WITHHELD". The page:tabs item gate and a page node's SHOW legs report through the same paragraph, so an author whose block or tab was withheld was told a navigation entry was. The paragraph now says "an element whose visibility predicate cannot be evaluated is WITHHELD", true on all three surfaces; the PredicateGateKind docblock lists the three gates. The whole-string pin moves with it, and the page-node pin asserts the line names no navigation surface. Claude-Session: https://claude.ai/code/session_014MXhk1yjWh37d634hLy3p7 Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对 · ACCEPT · objectui#13303 · PR #13306 ·
|
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
This was referenced Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #13303
Clause-②: no
What
The
'withholding'consequence paragraph of the shared visibility diagnostic (GATE_KIND_COPY.withholdinginpackages/react/src/utils/visibilityDiagnostic.ts) was written for the app-shell navigationvisiblegate (objectui#12700) and said "a navigation entry whose predicate cannot be evaluated is WITHHELD". Thepage:tabsitem gate (objectui#13286) and a page node'svisibleWhen/visible/visibleOn(objectui#13299) report through the same paragraph, so an author whose block or tab was withheld was told that a navigation entry was.The paragraph now reads the same on all three surfaces:
The line keeps its shape: the prefix (
UNRESOLVABLE_VISIBILITY_PREFIX), the line breaks, the hyphen style of the other gates' copy, and the "WITHHELD - not drawn" clause. ThePredicateGateKinddocblock's'withholding'entry now lists the three gates that report through it.Route: the surface-neutral copy, the card's first route. The second route ("the reporter takes the surface from its caller") would add a parameter to
reportUnresolvableVisibilityPredicateandformatUnresolvableVisibilityMessage, both published exports of@object-ui/react. The neutral sentence reads right for a navigation entry, apage:tabsitem and a page node, so no signature, export, type member orPredicateGateKindmember moved. The gates' verdicts are untouched.Measured at the head:
formatUnresolvableVisibilityMessage(..., 'withholding')called with each caller's own arguments (element:probe-13299withvisibleWhen;page:tabswithvisibleWhen;app-shell:visiblewithvisibleand theapp-shelltier) prints the paragraph above, byte for byte, between theReason:line and that tier's advice paragraph.Pins
SchemaRenderer.disabledGateFaultDiagnostic.test.tsx:VISIBILITY_TAILwas the only pin that asserted the navigation wording. It checked the whole consequence and advice string withendsWith, and it keeps checking the whole new string.SchemaRenderer.nodeVisibilityFailClosed-13299.test.tsx, row (a): the console line for a faulting page node (element:probe-13299, production and development builds) now also assertsnot.toMatch(/navigation|\bentry\b/i). This is the acceptance pin.WITHHELDorWITHHELD - not drawn, which the new copy keeps, so none changed:SchemaRenderer.concealmentGateFaultDiagnostic,SchemaRenderer.visibleWhenRecordBinding, components'page-node-visibility-fail-closed-13299andpage-tabs-visible-when-fail-closed-13286, app-shell'snavigationVisibility-12700andUnifiedSidebar.navCanPermissions-12700.git grepfor "navigation entry whose predicate", "missing entry may be" and "The entry was treated" gives 0 hits each (exit 1). Control: "missing element may be" gives 2 hits (the source and the pin).Tests, at head
8625ff893All runs went through the shared verify lock, from the repo root.
SchemaRenderer.concealmentGateFaultDiagnostic,SchemaRenderer.disabledGateFaultDiagnostic,SchemaRenderer.nodeVisibilityFailClosed-13299,visibilityDiagnostic.adviceTier):Test Files 4 passed (4),Tests 84 passed (84).git grep -lforUNRESOLVABLE_VISIBILITY_PREFIX,visibilityDiagnosticorapp-shell:visibleover test files; 21 files across react, components, app-shell and console):Test Files 21 passed (21),Tests 288 passed (288).ablation-replace.mjsput the old navigation copy back (anchor 1 to 0, blob29e7a2cce1a9to1bbd67872431) and ran the disabled-gate, node-visibility and concealment files:Tests 3 failed | 61 passed (64). Red:and the visibility gate still prints its own copy(theVISIBILITY_TAILcheck) and row (a) in both builds (expected '[ObjectUI] A visibility predicate cou…' not to match /navigation|\bentry\b/i). The concealment file stayed green as the control, because both copies carryWITHHELD - not drawn. Restore: blob back to29e7a2cce1a9, equal to the HEAD blob, andgit diff HEADempty. There is no dist step: the subject is reached through relative source imports.Gates
pnpm --filter @object-ui/react type-check(tsc --noEmit && tsc -p tsconfig.test.json; the test project lists both changed test files), after the@object-ui/react^...closure build: exit 0.pnpm --filter @object-ui/react lint: exit 0, 0 errors, no warning in a changed file.pnpm check:new-line-citations: exit 0, 0 new citations.pnpm check:control-bytes: exit 0.node scripts/check-changeset-presence.mjs: exit 0.node scripts/check-changeset-no-major.mjs: exit 0.packages/reactdirectory and the rest ofpnpm test, and the repo-wide lint.Changeset:
.changeset/13303-withholding-copy.md,@object-ui/reactpatch.Acceptance notes
packages/react/src/index.tsre-exportsPredicateGateKindunder a comment that still describes'withholding'only as the app-shell's fail-closed navigation gate. That comment became incomplete with objectui#13286 and objectui#13299, not with this change, and it is outside this claim's file surface, so it is left as it is. Carrier: none.node "TYPE": the app-shell's constantapp-shell:visible, and for a tab thepage:tabscontainer whose item was withheld. Every gate kind shares that row, and the card names only the consequence paragraph, so it is unchanged here. Not filed.Generated by Claude Code