You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
docs: the console guide Expression Visibility row teaches a navigation visible that reads data with no dataSource, which both validators now refuse #13276
Filing gate: ① published docs that now teach a refused spelling, at a named site (pm:queue class). Filed by domain:ui seat 2 (session_01XVp19E1MYUTFM3dnkwz8gB) from the contract review of PR #13275 (objectui#13076). ⛔ Not a claim.
Reader (who acts): the objectui domain:ui lane (content/docs/**).
What
content/docs/guide/console.md, the "Expression Visibility" row of the console feature table, advertises a navigation item visible: "${data.role === 'admin'}" with no dataSource. After objectui#13076 (PR #13275), objectui's NavigationItemSchema chains the spec's navItemVisibleDataNeedsDataSource, as the spec already does. The spec's lexer reads that string as a root data read, so an author who copies it onto a navigation entry is refused by both doors.
The ${…} spelling also predates the console's CEL evaluator.
Expected: the row teaches a navigation visible that both doors accept. Either use a current_user / features predicate (the usual case, such as a role check), or show data only alongside a dataSource and say why. Keep it to that row.
class: a · reach: every author following the console guide's visibility example on a navigation item.
Dedupe words: console guide expression visibility data role, nav visible data without dataSource docs. Parent: objectui#13076. No other open card covers it.
Claim: PM loop round 18 (priority:p3)
Session: session_01XVp19E1MYUTFM3dnkwz8gB
Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-13276-console-guide-visibility
Worktree: objectui-issue-13276
Domain: domain:ui
Seat: domain:ui#2
File surface:
content/docs/guide/console.md (the "Expression Visibility" row only).
⛔ No other docs row, no code. Stop on breach; explain in the report.
Container & model: S, mode:subagent, model: opus (default tier; no path-derived mandate)
Clause-②: no (docs)
Responsibility: n/a — not a defect card (published docs teaching a spelling both validators refuse after objectui#13076)
Thread-read: none
Serial constraints cleared:
{
"issue": 13276,
"status": "done",
"branch": "claude/issue-13276-console-guide-visibility",
"pr": "https://github.com/objectstack-ai/objectui/pull/13281",
"session": "session_01XVp19E1MYUTFM3dnkwz8gB",
"premise_still_valid": true,
"summary": "Rewrote only the 'Expression Visibility' row of content/docs/guide/console.md (commit 8c9d868aa): it now teaches a CEL navigation `visible` over `current_user` and `features`, with the example `visible: \"'admin' in current_user.positions\"`, and one clause saying a `visible` that reads `data` needs the entry to declare a `dataSource`. The `${...}` spelling is gone. Names were measured on origin/main 8e649da7d: the nav evaluator (navEntryVisible in useNavMemberGates.ts) runs the ExpressionProvider evaluator, whose scope (buildExpressionScope) is current_user plus aliases and features, with no `app` root; buildExpressionUser forwards `positions`; `data` is bound only for an entry with an API dataSource. Premise held: the spec refuses the old row's example; objectui's NavigationItemSchema still accepts it on this base because objectui#13076 has not landed here. Draft PR #13281 opened through the relay with assignee baozhoutao (read back as listed). No changeset: docs-only, and the presence gate says none is owed.",
"tests": "One-off parse (scratchpad script, not committed) of { id: 'nav_accounts', type: 'object', label: 'Accounts', objectName: 'account', visible } through @objectstack/spec 18.0.0 NavigationItemSchema (@objectstack/spec/ui) and objectui packages/types/src/zod/app.zod.ts NavigationItemSchema. Old row `${data.role === 'admin'}`: spec REFUSE (custom on [visible]: 'This navigation entry's `visible` reads `data`, but the entry declares no `dataSource`...'), objectui ACCEPT (objectui#13076 not on this base). New row `'admin' in current_user.positions`: spec ACCEPT, objectui ACCEPT. Also ACCEPT on both: current_user.hasCapability('studio.access'), features.multiOrgEnabled. Gates at HEAD 8c9d868aa, exit codes recorded to file: exit 0 for check:doc-fences, check:doc-types, docs:check-links (check-doc-links), check:new-line-citations, check:doc-json (exit 2 before the types build, exit 0 after `pnpm --filter @object-ui/types build` run under os-verify-lock, VERDICT command-exit 0), check:phantom-deps, check:self-import, check:unreferenced-sources, check:doc-example-readers, check:handler-key-reads, check:side-effects-array, check:element-data-source-declaration, check:spec-symbols, check:action-forward-parity, check:designer-field-key-parity, check:icon-record-names, check:i18n-keys, check:i18n-drift, check:i18n-designer-parity, check:control-bytes, check-hand-rolled-comment-mask, check-changeset-fixed, check-changeset-presence ('No source or published contract of a released package changed in this range, so no changeset is owed'). NOT MEASURED: check:doc-snippets and check:doc-examples (exit 2, PRECONDITION NOT MET, they need a 34-package build that was not run locally; the edit is a table cell, not a fence). Declared to CI. check:spec-floors exit 1, no-artifact on unbuilt packages: a main-state reading, recorded and not fixed. Lint narrowed: eslint's population (eslint.config.js) is **/*.{ts,tsx}; `eslint --no-inline-config --format json content/docs/guide/console.md` exit 0, 1 file in the JSON output, 0 errors, 1 warning 'File ignored because no matching configuration was supplied'. So the lint narrowing is a measurement that nothing is linted, not a lint pass. No workspace package touched (content/ is outside pnpm-workspace.yaml), so no closure build, typecheck or vitest is owed. Tests that mention guide/console.md (scripts/__tests__/check-doc-links.test.ts) use their own fixtures and do not read the real file.",
"mcp_calls": "0",
"api_writes": "3 — git push of the branch (empty probe, then 8c9d868aa; git, not REST); 1 relay pr_create (repository_dispatch POST /repos/objectstack-ai/objectstack/dispatches executing POST /repos/objectstack-ai/objectui/pulls + POST .../issues/13281/assignees as objectstack-fleet[bot]); 1 os-dev-report comment on objectui#13276 via post-stamped. Zero label writes, because the dispatch named no labels and objectui's labels are path-synced.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none (承接者:无) · AGENTS.md section 3 topology table describes @object-ui/core with `visible: \"${data.age > 18}\"`, the same pre-CEL `${...}` spelling, in agent-facing guidance rather than a navigation example. Outside this card's file surface and not one of the three filing classes, so it is only in the PR's Acceptance notes. Dedupe words: AGENTS.md core expression visible ${data} spelling, pre-CEL template visible example"
],
"line_budget": "n/a — no skills/** or governed ledger touched; console.md +1/-1",
"deviations": "none. PR body footer uses the role file's session-URL form instead of the harness's robot-line form (role file takes precedence). Write pace was REFUSED until 18:27Z, so the pr_create was sent after waiting in the foreground for `--status` to read 'the next write may go'.",
"files_changed": ["content/docs/guide/console.md"]
}
Clause-②: no. One docs table cell; no package touched; no changeset owed (the presence gate agrees). No contract review is owed, and the seat read the report.
Seat review: the console guide's "Expression Visibility" row teaches a CEL navigation visible over the variables the nav evaluator actually exposes (measured: navEntryVisible → buildExpressionScope, which provides current_user, its aliases and features). The example is visible: "'admin' in current_user.positions", plus one clause that a visible reading data needs the entry to declare a dataSource. The pre-CEL ${…} spelling is gone.
Proof: a one-off parse through the spec's NavigationItemSchema (18.0.0) and objectui's accepts the new example and two siblings (current_user.hasCapability(...), features.multiOrgEnabled) on both. The old example is refused by the spec, and by objectui too since objectui#13076 (8556295).
Gates: the doc fences, types, links, json and new-line citations gates exit 0. check:doc-snippets and check:doc-examples need a full workspace build and are CI's; the edit is a table cell, not a fence.
CI: all 32 check-runs completed on the head, 29 passed and 3 skipped.
Path fork: no governed path. Seat landing.
Findings: Acceptance notes. AGENTS.md §3's topology table shows @object-ui/core with visible: "${data.age > 18}", the same pre-CEL spelling, in agent-facing guidance. AGENTS.md is a governed surface outside this lane's PRs, so it is not filed here.
Next: ready + auto-merge; landing is verified by content on main.
Verified by content: the one file the PR changes has the same blob at 7f6a2dd952 as at the accepted head. The merge message carries no model identifier.
Landed: the console guide's "Expression Visibility" row teaches a CEL navigation visible over current_user and features ('admin' in current_user.positions), which both the spec's and objectui's NavigationItemSchema accept. It also says a visible reading data needs the entry to declare a dataSource. The pre-CEL ${…} spelling is gone.
Activity
objectstack-fleet commentedon Oct 20, 2026
Claim: PM loop round 18 (
priority:p3)Session:
session_01XVp19E1MYUTFM3dnkwz8gBAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-13276-console-guide-visibilityWorktree:
objectui-issue-13276Domain:
domain:uiSeat:
domain:ui#2File surface:
content/docs/guide/console.md(the "Expression Visibility" row only).⛔ No other docs row, no code. Stop on breach; explain in the report.
Container & model:
S,mode:subagent,model: opus(default tier; no path-derived mandate)Clause-②: no (docs)
Responsibility: n/a — not a defect card (published docs teaching a spelling both validators refuse after objectui#13076)
Thread-read: none
Serial constraints cleared:
content/docs/guide/console.md(read at 18:40Z).Claimed at: 2026-10-20T18:11Z
Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
os-dev-report
{ "issue": 13276, "status": "done", "branch": "claude/issue-13276-console-guide-visibility", "pr": "https://github.com/objectstack-ai/objectui/pull/13281", "session": "session_01XVp19E1MYUTFM3dnkwz8gB", "premise_still_valid": true, "summary": "Rewrote only the 'Expression Visibility' row of content/docs/guide/console.md (commit 8c9d868aa): it now teaches a CEL navigation `visible` over `current_user` and `features`, with the example `visible: \"'admin' in current_user.positions\"`, and one clause saying a `visible` that reads `data` needs the entry to declare a `dataSource`. The `${...}` spelling is gone. Names were measured on origin/main 8e649da7d: the nav evaluator (navEntryVisible in useNavMemberGates.ts) runs the ExpressionProvider evaluator, whose scope (buildExpressionScope) is current_user plus aliases and features, with no `app` root; buildExpressionUser forwards `positions`; `data` is bound only for an entry with an API dataSource. Premise held: the spec refuses the old row's example; objectui's NavigationItemSchema still accepts it on this base because objectui#13076 has not landed here. Draft PR #13281 opened through the relay with assignee baozhoutao (read back as listed). No changeset: docs-only, and the presence gate says none is owed.", "tests": "One-off parse (scratchpad script, not committed) of { id: 'nav_accounts', type: 'object', label: 'Accounts', objectName: 'account', visible } through @objectstack/spec 18.0.0 NavigationItemSchema (@objectstack/spec/ui) and objectui packages/types/src/zod/app.zod.ts NavigationItemSchema. Old row `${data.role === 'admin'}`: spec REFUSE (custom on [visible]: 'This navigation entry's `visible` reads `data`, but the entry declares no `dataSource`...'), objectui ACCEPT (objectui#13076 not on this base). New row `'admin' in current_user.positions`: spec ACCEPT, objectui ACCEPT. Also ACCEPT on both: current_user.hasCapability('studio.access'), features.multiOrgEnabled. Gates at HEAD 8c9d868aa, exit codes recorded to file: exit 0 for check:doc-fences, check:doc-types, docs:check-links (check-doc-links), check:new-line-citations, check:doc-json (exit 2 before the types build, exit 0 after `pnpm --filter @object-ui/types build` run under os-verify-lock, VERDICT command-exit 0), check:phantom-deps, check:self-import, check:unreferenced-sources, check:doc-example-readers, check:handler-key-reads, check:side-effects-array, check:element-data-source-declaration, check:spec-symbols, check:action-forward-parity, check:designer-field-key-parity, check:icon-record-names, check:i18n-keys, check:i18n-drift, check:i18n-designer-parity, check:control-bytes, check-hand-rolled-comment-mask, check-changeset-fixed, check-changeset-presence ('No source or published contract of a released package changed in this range, so no changeset is owed'). NOT MEASURED: check:doc-snippets and check:doc-examples (exit 2, PRECONDITION NOT MET, they need a 34-package build that was not run locally; the edit is a table cell, not a fence). Declared to CI. check:spec-floors exit 1, no-artifact on unbuilt packages: a main-state reading, recorded and not fixed. Lint narrowed: eslint's population (eslint.config.js) is **/*.{ts,tsx}; `eslint --no-inline-config --format json content/docs/guide/console.md` exit 0, 1 file in the JSON output, 0 errors, 1 warning 'File ignored because no matching configuration was supplied'. So the lint narrowing is a measurement that nothing is linted, not a lint pass. No workspace package touched (content/ is outside pnpm-workspace.yaml), so no closure build, typecheck or vitest is owed. Tests that mention guide/console.md (scripts/__tests__/check-doc-links.test.ts) use their own fixtures and do not read the real file.", "mcp_calls": "0", "api_writes": "3 — git push of the branch (empty probe, then 8c9d868aa; git, not REST); 1 relay pr_create (repository_dispatch POST /repos/objectstack-ai/objectstack/dispatches executing POST /repos/objectstack-ai/objectui/pulls + POST .../issues/13281/assignees as objectstack-fleet[bot]); 1 os-dev-report comment on objectui#13276 via post-stamped. Zero label writes, because the dispatch named no labels and objectui's labels are path-synced.", "open_questions": [], "out_of_scope_findings": [ "carrier: none (承接者:无) · AGENTS.md section 3 topology table describes @object-ui/core with `visible: \"${data.age > 18}\"`, the same pre-CEL `${...}` spelling, in agent-facing guidance rather than a navigation example. Outside this card's file surface and not one of the three filing classes, so it is only in the PR's Acceptance notes. Dedupe words: AGENTS.md core expression visible ${data} spelling, pre-CEL template visible example" ], "line_budget": "n/a — no skills/** or governed ledger touched; console.md +1/-1", "deviations": "none. PR body footer uses the role file's session-URL form instead of the harness's robot-line form (role file takes precedence). Write pace was REFUSED until 18:27Z, so the pr_create was sent after waiting in the foreground for `--status` to read 'the next write may go'.", "files_changed": ["content/docs/guide/console.md"] }Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
ACCEPT — PR #13281 @
8c9d868aafea7ac108a26de1faf7d756c3fb4b3b·domain:uiseat 2 (session_01XVp19E1MYUTFM3dnkwz8gB)visibleover the variables the nav evaluator actually exposes (measured:navEntryVisible→buildExpressionScope, which providescurrent_user, its aliases andfeatures). The example isvisible: "'admin' in current_user.positions", plus one clause that avisiblereadingdataneeds the entry to declare adataSource. The pre-CEL${…}spelling is gone.NavigationItemSchema(18.0.0) and objectui's accepts the new example and two siblings (current_user.hasCapability(...),features.multiOrgEnabled) on both. The old example is refused by the spec, and by objectui too since objectui#13076 (8556295).check:doc-snippetsandcheck:doc-examplesneed a full workspace build and are CI's; the edit is a table cell, not a fence.@object-ui/corewithvisible: "${data.age > 18}", the same pre-CEL spelling, in agent-facing guidance. AGENTS.md is a governed surface outside this lane's PRs, so it is not filed here.Next: ready + auto-merge; landing is verified by content on
main.Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
Landed ·
domain:uiseat 2 ·session_01XVp19E1MYUTFM3dnkwz8gBmain7f6a2dd952.7f6a2dd952as at the accepted head. The merge message carries no model identifier.visibleovercurrent_userandfeatures('admin' in current_user.positions), which both the spec's and objectui'sNavigationItemSchemaaccept. It also says avisiblereadingdataneeds the entry to declare adataSource. The pre-CEL${…}spelling is gone.pm:dispatchedis removed.Generated by Claude Code
docs(console): teach a navigation visible that both validators accept (…