Skip to content

Visibility fault console line calls a withheld page node or tab "a navigation entry" #13303

Closed

Description

@objectstack-fleet

Filing gate: ① a user-visible defect at a named site (pm:queue class). Filed by domain:ui seat 2 (session_01XVp19E1MYUTFM3dnkwz8gB) from the os-dev reports on PR #13297 (objectui#13286) and PR #13302 (objectui#13299). This is the second report of the same finding, so it gets a card. ⛔ Not a claim.

Reader (who acts): the objectui domain:ui lane.

What

packages/react/src/utils/visibilityDiagnostic.ts, GATE_KIND_COPY.withholding, was written for the app-shell navigation visible gate (objectui#12700). Its consequence paragraph reads "a navigation entry whose predicate cannot be evaluated is WITHHELD". Since objectui#13286 the page:tabs item gate reports through it, and since objectui#13299 every page node's visibleWhen / visible / visibleOn gate does too. The PR #13302 run captured the line for a page node (element:probe-13299): an author reading the console is told a navigation entry was withheld when a block or tab was.

Expected: the 'withholding' copy names what is withheld without naming the navigation surface (for example "an element whose visibility predicate cannot be evaluated is WITHHELD"), or the reporter takes the surface from its caller. The pins that assert the navigation wording are updated with it. The type docblock (PredicateGateKind, 'withholding') is updated to list all three gates.

class: a · reach: every author reading the console after a faulting page node or page:tabs item predicate.
Dedupe words: withholding consequence navigation entry copy, page node withheld console line wording, visibilityDiagnostic withholding copy. Parents: objectui#13286, objectui#13299. No other open card covers it.


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    on Oct 21, 2026
  2. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 5 (priority:p3, bug)
    Session: session_014MXhk1yjWh37d634hLy3p7
    Account: huangyiirene (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-13303-withholding-copy
    Worktree: objectui-issue-13303
    Domain: domain:ui
    Seat: domain:ui#1
    File surface, read at objectui main 3aafc0d:

    • packages/react/src/utils/visibilityDiagnostic.ts: GATE_KIND_COPY.withholding's consequence paragraph, and the PredicateGateKind docblock's 'withholding' entry (it lists all three gates that report through it: the navigation visible gate, objectui#12700; the page:tabs item gate, objectui#13286; a page node's visibleWhen / visible / visibleOn, objectui#13299);
    • the pins that assert the navigation wording, starting with packages/react/src/__tests__/SchemaRenderer.disabledGateFaultDiagnostic.test.tsx; the dev re-greps for the rest (SchemaRenderer.concealmentGateFaultDiagnostic, SchemaRenderer.nodeVisibilityFailClosed-13299, app-shell's UnifiedSidebar.navCanPermissions-12700);
    • one changeset (@object-ui/react patch).

    ⛔ Not the gates themselves, not PredicateGateKind's members, and no new export. Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: opus (default tier; no path-derived mandate). Concurrency 1 (「并发1」): this is the lane's only card in flight.
    Clause-②: no
    Responsibility: the risk is produced by objectui's own visibility diagnostic, whose 'withholding' copy names the navigation surface for every gate that reports through it; the platform path that covers it: none (the console line misnames what was withheld); who reaches it: every author reading the console after a faulting page node or page:tabs item predicate.
    Thread-read: none
    The card had no comment at this claim.
    Serial constraints cleared: no open objectui PR touches packages/react/src/utils/visibilityDiagnostic.ts or the named pins (open PRs read at this claim: #13289, #13288, #13028, #11845, #11844). No objectui card is pm:dispatched.

    Why Clause-②: no: the change is the text of a console diagnostic and a docblock. No export, prop, type member, accepted input or language-pack key moves.

    Claimed at: 2026-10-21T07:19Z

  3. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 13303,
      "status": "done",
      "branch": "claude/issue-13303-withholding-copy",
      "pr": "https://github.com/objectstack-ai/objectui/pull/13306",
      "session": "session_014MXhk1yjWh37d634hLy3p7",
      "premise_still_valid": true,
      "summary": "Premise confirmed at origin/main 3aafc0d53: GATE_KIND_COPY.withholding in packages/react/src/utils/visibilityDiagnostic.ts said 'The entry was treated ... a navigation entry whose predicate cannot be evaluated is WITHHELD ... a missing entry may be this fault', and the page:tabs item gate (containers.tsx) and SchemaRenderer's visibilityFaultOutcome both pass 'withholding'. Route: the surface-neutral copy (H1 held; no signature, export, type member or PredicateGateKind member moved). The paragraph now reads 'The element was treated as its safe default, which on THIS gate is the one that BITES: an element whose visibility predicate cannot be evaluated is WITHHELD - not drawn - until it can be, so a missing element may be this fault rather than a gate that said no.' Prefix, newline breaks, hyphen style and the 'WITHHELD - not drawn' clause kept; the four rows re-wrap at different words. Printed at the head for all three callers (element:probe-13299 visibleWhen, page:tabs visibleWhen, app-shell:visible visible with the app-shell tier): the same paragraph on each. The PredicateGateKind docblock's 'withholding' entry and the comment over the table entry now list the three gates. Pins: VISIBILITY_TAIL in SchemaRenderer.disabledGateFaultDiagnostic (the only pin of the navigation wording, a whole-string endsWith) now holds the whole new string; SchemaRenderer.nodeVisibilityFailClosed-13299 row (a) adds not.toMatch(/navigation|\\bentry\\b/i) on the page-node line in both builds (the acceptance pin). Changeset .changeset/13303-withholding-copy.md, @object-ui/react patch. Draft PR #13306, assignee huangyiirene.",
      "tests": "All at head 8625ff893, under os-verify-lock, repo-root vitest --maxWorkers=2. (1) Named family: concealmentGateFaultDiagnostic + disabledGateFaultDiagnostic + nodeVisibilityFailClosed-13299 + visibilityDiagnostic.adviceTier: Test Files 4 passed (4), Tests 84 passed (84). (2) Consumer sweep, every test file git-grepping UNRESOLVABLE_VISIBILITY_PREFIX / visibilityDiagnostic / app-shell:visible (21 files across react, components, app-shell, console, including UnifiedSidebar.navCanPermissions-12700, navigationVisibility-12700, page-tabs-visible-when-fail-closed-13286, page-node-visibility-fail-closed-13299, visibleWhenRecordBinding): Test Files 21 passed (21), Tests 288 passed (288). (3) Ablation: ablation-replace.mjs restored the old navigation copy (anchor 1 to 0, blob 29e7a2cce1a9 to 1bbd67872431) over disabledGate + nodeVisibility + concealment: Tests 3 failed | 61 passed (64); red = 'and the visibility gate still prints its own copy' (VISIBILITY_TAIL endsWith) and row (a) production + development ('expected [ObjectUI] A visibility predicate cou... not to match /navigation|\\bentry\\b/i'); green control = concealment file (both copies carry 'WITHHELD - not drawn'). Restore: blob 29e7a2cce1a9 == HEAD blob, git diff HEAD empty. No dist step (subject reached through relative source imports). H3 re-grep, whole tree: 'navigation entry whose predicate', 'missing entry may be', 'The entry was treated' 0 hits each (git grep exit 1); control 'missing element may be' 2 hits (source + pin). Declared to CI: the full packages/react directory and the rest of pnpm test.",
      "gates": "Local (exit captured before any pipe): pnpm --filter '@object-ui/react^...' build (closure) VERDICT command-exit 0; pnpm --filter @object-ui/react type-check (tsc --noEmit && tsc -p tsconfig.test.json, test project lists both changed test files) 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 (1 changeset for 1 released package); node scripts/check-changeset-no-major.mjs exit 0; node scripts/check-governed-queue-guard.mjs --test on the 4 paths: NOT GOVERNED; control-byte self-scan of the 4 files and the PR body: no hits. Hand-derived per the dispatch (dispatch-gates.mjs refuses objectui), no --ran reconciliation. CI on PR #13306 head 8625ff893 at report time: Changeset Bump Policy success, Changeset Fixed Group Check success, label success; Test (coverage) and coverage shards skipped; Lint, Type Check, Repo Gates, Line Citation Gate, Changeset Declaration, Governed Surface Queue Guard, Test shards 1-16, Test (dist pins), Build and E2E, Build Docs, Bundle Analysis in_progress. Not awaited.",
      "files_changed": [
        "packages/react/src/utils/visibilityDiagnostic.ts",
        "packages/react/src/__tests__/SchemaRenderer.disabledGateFaultDiagnostic.test.tsx",
        "packages/react/src/__tests__/SchemaRenderer.nodeVisibilityFailClosed-13299.test.tsx",
        ".changeset/13303-withholding-copy.md"
      ],
      "deviations": [
        "H2 measured with one widening: besides the 'navigation entry' sentence, the paragraph's opening 'The entry was treated' became 'The element was treated', because 'entry' is the navigation noun and the acceptance pin rejects it; the four rows re-wrap at different words (prefix, newline breaks and hyphen style kept).",
        "Commit trailers use objectui AGENTS.md's model-free pair (Claude-Session + Co-authored-by: Claude), not the harness reminder's model-named Co-Authored-By; PR footer uses the role file's session-URL form, not the reminder's form.",
        "Labels: zero writes. 'package: react' and 'tests' on PR #13306 were applied by labeler.yml, not by this run."
      ],
      "mcp_calls": "0",
      "api_writes": "2 - fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches x2, executed as objectstack-fleet[bot]: (1) pr_create = POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos/objectstack-ai/objectui/issues/13306/assignees (huangyiirene), read back 6015 bytes sent, 6015 stored, identical; (2) this os-dev-report comment = POST /repos/objectstack-ai/objectui/issues/13303/comments. Plus 2 git pushes (not REST).",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none (承接者:无) · noted, not filed · packages/react/src/index.ts's comment over the PredicateGateKind re-export still describes 'withholding' only as the app-shell's fail-closed navigation gate; incomplete since objectui#13286 / objectui#13299, outside this claim's file surface (in PR Acceptance notes)",
        "carrier: none (承接者:无) · noted, not filed · the line's first row names each subject as node \"TYPE\" (app-shell:visible for the nav gate, the page:tabs container for a tab item); shared by every gate kind, card names only the consequence paragraph (in PR Acceptance notes)"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 21, 2026

    @objectstack-fleet
    ContributorAuthor

    LANDED · domain:ui seat 1 · session_014MXhk1yjWh37d634hLy3p7 · 2026-10-21T07:57Z · pm:dispatched cleared

    reading value
    PR #13306 merged through the merge queue at 2026-10-21T07:57Z. The squash commit 601c406 has one parent (3aafc0d), and git merge-base --is-ancestor places it on origin/main (exit 0)
    queue no gh-readonly-queue/main/pr-13306-* branch remains
    landed content on origin/main, visibilityDiagnostic.ts holds "missing element may be" (1) and "navigation entry whose predicate" 0 times
    records claim 6310406961; dev report 6310612266; ACCEPT 6310637604 on PR #13306 (no contract-review face hit)
    closing closed completed at 2026-10-21T07:57Z through the PR's Fixes #13303; pm:dispatched is removed in this act

    The 'withholding' console line now names what it withheld as "an element", so it reads true for a navigation entry, a page:tabs item and a page node alike. The PredicateGateKind docblock lists the three gates that report through it. The verdict and when the line prints are unchanged.

    Noted, not filed:

    • the comment over the PredicateGateKind re-export in packages/react/src/index.ts still describes 'withholding' as the navigation gate only;
    • the line's first row names each subject by its node type.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions