Repository navigation
finding(app-shell): the flow inspector's inline visibleWhen cell for screen fields still hints and offers the FLOW scope — it flags a sibling-field predicate and stays silent on a run variable, the inverse of the Problems panel and the Debug run #10772
Description
Activity
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsPath: approvals and automation | automation.screen-flow-roundtrip | P2
Triage: first grade —
bug·priority:p3·domain:ui·area:workflow·pm:queue(findingremoved — graded)Triage: lands in the flow node inspector's inline expression cell for the
screennode'sfields[].visibleWhencolumn (FlowObjectListField→FlowExprIssueoverresolveFlowScope) ⇒domain:ui. Rationale: the cell still uses the flow scope. It flags the only shipped producer shape (a sibling-field predicate), says nothing on a run-variable predicate, and its picker offersneedsApproval/record/previous. It invites an author into the #3528 dead end that ruling C on objectui#10743 closed on the other two Studio surfaces. It is class (c), with a named producer (the Studio), measured by PR objectui#10763's review. It takes objectui#10743's grade ⇒ p3.Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01W89enF2dYV7K4N2Fbfj33f· 2026-09-27T13:15Z. ⛔ Not a claim, ⛔ not a dispatch. Read: this card (no comments), objectui#10743 and PR objectui#10763 (both closed and merged 2026-09-27T12:13Z).The serial constraint is gone. PR objectui#10763 merged, and the shared rule
screenPredicateRoots/screenVisibleWhenScopeErroris onmain.Direction (from ruling C,
5853038135, not a new ruling).- The screen
fields[].visibleWhencell derives its scope groups and hint fromscreenPredicateRoots(node), the one shared rule. ⛔ Not a third copy. Every other expression column keeps the flow scope. - Update
FlowExprIssue.tsx's docblock to match. - Reconcile the 「Still on the flow scope」 paragraph of the pending
.changeset/10743-studio-screen-visiblewhen-live.mdin the same PR (objectui#10533 dated-note form). - Pin both shapes on the inline cell: the sibling predicate is silent, and the run variable is flagged. A non-screen expression column is the control.
- The screen
- addedarea:workflowApprovals and automation — the work that runs without a person driving itApprovals and automation — the work that runs without a person driving itbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Sep 27, 2026 objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsClaim: PM loop round 6 —
domain:uiexecution seat 2
Session:session_014mXUNuFomfj24w7s1pZzhN
Branch:claude/issue-10772-inline-cell-screen-scope
Worktree:objectui-issue-10772
Domain:domain:ui
Seat:domain:ui#2
File surface: the flow inspector's inline expression cell for ascreennode'sfields[].visibleWhencolumn (FlowObjectListField/FlowExprIssue.tsxand the scope they read), reusingscreenPredicateRootsfrompreviews/screen-spec.ts(⛔ no third copy); the pending.changeset/10743-studio-screen-visiblewhen-live.md「Still on the flow scope」 paragraph (dated note); tests; one changeset for@object-ui/app-shell.
Container & model:S,mode:subagent,model: opus(default judgment tier; derived by hand, no protocol-semantics path)
Clause-②: no — a Studio authoring hint moves onto the already-ruled screen scope (ruling C on objectui#10743); no declared surface moves
Thread-read: 5856191354
Serial constraints cleared: PR objectui#10763 merged (805abe24), so the shared rule is onmain. Open-PR file lists read 2026-09-27T14:25Z: none touches the flow inspector files orscreen-spec.ts.
Generated by Claude Code
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actionsos-dev-report
{ "issue": 10772, "status": "done", "branch": "claude/issue-10772-inline-cell-screen-scope", "pr": "https://github.com/objectstack-ai/objectui/pull/10792", "session": "session_014mXUNuFomfj24w7s1pZzhN", "premise_still_valid": true, "summary": "The inline expression cell for a screen node's fields[].visibleWhen column now reads the screen rule instead of the flow scope. FlowObjectListField names the column with the Problems panel's own isScreenVisibleWhenColumn, from context.node and a new fieldId prop that FlowNodeConfigField sets from field.id and never forwards to a nested list. Its picker offers exactly [...screenPredicateRoots(node)] under a 'Screen fields' section, and FlowExprIssue's new screenNode prop makes its note screenVisibleWhenScopeError(value, node). No third copy of the rule; every other expression column keeps the flow scope. Also done: the FlowExprIssue docblock follows (direction 2); a dated note follows the 10743 changeset's 'Still on the flow scope' paragraph (direction 3); the README sentence the change made false is corrected; a patch changeset for @object-ui/app-shell is added. H1 reproduced on base 29b45f6a0c. Card assignee was os-elon-musk at start (set by PM, not touched); the PR assignee is set to os-elon-musk.", "h1_base_readings": { "base": "29b45f6a0c", "tokens": "[\"needsApproval\",\"record\",\"previous\"]", "sibling discount > 0": "NOTES [\"`discount` is not a reference in scope at this step.\"]", "other_field == 'x'": "NOTES [\"`other_field` is not a reference in scope at this step.\"]", "run variable needsApproval == true": "NOTES []", "picker": "[\"needsApprovalvariable · boolean\",\"recordtrigger record · crm_lead\",\"previousrecord values before the change\"]" }, "h2_seam": "The cell is the col.kind === 'expression' branch of FlowObjectListField. The node already arrives as context.node (FlowNodeInspector passes context through FlowNodeConfigField); the missing input was the field id. Seam function: screenVisibleWhenNode(context.node, fieldId, col.key), which returns a ScreenPreviewNode or undefined, via isScreenVisibleWhenColumn(type, fieldId, colKey), exported from previews/flow-expr-problems.ts. It feeds screenScopeGroups(node), which is screenPredicateRoots(node), for the picker, and FlowExprIssue screenNode, which is screenVisibleWhenScopeError(value, node), for the note. For needsApproval == true on this screen, screenVisibleWhenScopeError returns '`needsApproval` is not a field on this screen'. The Problems panel shows the same sentence prefixed 'Reason: '. screen-spec.ts is read-only; no export was needed.", "files_changed": [ "packages/app-shell/src/views/metadata-admin/inspectors/FlowObjectListField.tsx", "packages/app-shell/src/views/metadata-admin/inspectors/FlowExprIssue.tsx", "packages/app-shell/src/views/metadata-admin/inspectors/FlowNodeConfigField.tsx (plumbing: fieldId)", "packages/app-shell/src/views/metadata-admin/inspectors/flow-scope.ts (ScopeGroupId + 'screen_fields', type-only)", "packages/app-shell/src/views/metadata-admin/previews/flow-expr-problems.ts (isScreenVisibleWhenColumn exported, docblock)", "packages/app-shell/src/views/metadata-admin/inspectors/FlowObjectListField.screenVisibleWhen-10772.test.tsx (new pins)", "packages/app-shell/README.md", ".changeset/10743-studio-screen-visiblewhen-live.md (dated note appended; frontmatter md5 4e8ce55021fe3b14329c8b4cb3f9f354 before and after)", ".changeset/10772-inline-screen-visiblewhen-cell.md ('@object-ui/app-shell': patch)" ], "tests": "All at head b6e912aab4, every run under os-verify-lock (slot issue-10772). RED leg: the five base sources were checked out from 29b45f6a0c (blobs confirmed equal to base) under the head pin file, trap-restored with git checkout HEAD, every blob re-checked equal to HEAD, and git diff HEAD empty afterwards. Result: 'Tests 3 failed | 1 passed (4)'. The three screen pins (sibling silent, run variable flagged in the panel's words, picker offers the screen roots) are red; the control (decision conditions[].expression keeps the flow scope) is green. GREEN: 'Tests 4 passed (4)'. ABLATION, flow-scope fallback, via /home/user/objectstack/scripts/ablation-replace.mjs wrap mode: anchor 'const screenNode = screenVisibleWhenNode(context?.node, fieldId, col.key);' x1 -> x0, blob 599051a346e0 -> da61329c536d. Over the pin file plus FlowObjectListField.commit/nested/select: 'Test Files 1 failed | 3 passed (4)', 'Tests 3 failed | 11 passed (14)'. Only the 3 screen pins are red. Restore: 'ok restored: blob == HEAD (599051a346e0) and git diff HEAD is empty'; marker grep 0, anchor grep 1. AFFECTED (narrowed and declared: the 24 app-shell test files importing a touched module): 'Test Files 24 passed (24)', 'Tests 299 passed (299)', VERDICT command-exit 0. The full pnpm test is CI's. CLOSURE: turbo run build --filter='@object-ui/app-shell^...' --concurrency=2, 'Tasks: 28 successful, 28 total', VERDICT command-exit 0. TYPE-CHECK: pnpm --filter @object-ui/app-shell type-check (echoed '@object-ui/app-shell@17.6.0 type-check'), VERDICT command-exit 0; tsc -p tsconfig.test.json --listFiles lists the pin file (1). ESLINT on the 6 changed ts/tsx files, --format json: 6 files, 0 errors, 1 warning (react-hooks/refs on the rows.map line; pre-existing, the base blob shows the same 1 warning). Population: the package lint script 'eslint .' under eslint.config.js. Invariance: eslint.config.js has 0 hits for projectService, parserOptions or TypeChecked and no import plugin, so type-aware lint is off and untouched files cannot move.", "gates": [ "check-changeset-presence exit 0: '6 source file(s) of 1 released' (9 changed, 1 changeset added)", "check-control-bytes exit 0: 'OK (scanned 8982 tracked text file(s)'", "check-new-cross-file-line-citations exit 0: 'VERDICT new-cross-file-line-citations: 0 new citation(s)'", "check-pending-changeset-literals exit 0: 'No test source names a pending changeset.'", "check-changeset-no-major exit 0; check-changeset-fixed exit 0", "check-changeset-claims exit 0 (report-only): names 6296-conditionbuilder-subject-vocabulary.md and flow-entry-condition-builder.md for flow-scope.ts. Both are still true: the fieldPrefix line reads 1 and includePrevious reads 5 at base and at head; the diff is one union member plus a comment", "check-changeset-overwrite exit 0 (report-only): records the 10743 changeset modification; declaration unchanged ('@object-ui/app-shell: patch')", "check-vi-mock-specifiers, check-vi-mock-override-shape, check-vi-mock-inherit, check-test-path-roots: exit 0", "check-governed-queue-guard --test: 'NOT GOVERNED — 9 path(s)'", "NOT MEASURED locally: check-readme-exports, reason: app-shell's own dist was not built. CI 'README Export Check' is success on b6e912aab4", "CI at report time (one read, 42 check runs on b6e912aab4): 37 success, 3 skipped by design (dependabot, coverage), 2 in_progress (Test shard 1/8, 2/8). Lint, Type Check, Build & E2E and Changeset Declaration are success" ], "serial": "origin/main fetched into refs/issue-10772/main = bff63cc12e (3 commits and 47 files past base). git merge-tree --write-tree against HEAD exited 0 (tree 13994de4a0). The intersection with the PR's 9 files is empty.", "mcp_calls": "0 — no MCP GitHub tool used", "api_writes": "3 — all through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches as objectstack-fleet[bot]): (1) pr_create, POST /repos/objectstack-ai/objectui/pulls draft=true, PR 10792, run 36328302762 success; (2) label-write --assign, POST /repos/objectstack-ai/objectui/issues/10792/assignees os-elon-musk, run 36329017760 success, read back MATCHES; (3) this os-dev-report comment, POST /repos/objectstack-ai/objectui/issues/10772/comments via post-stamped.mjs. Also 3 git pushes (not REST).", "deviations": [ "File surface beyond the order, each declared in the PR body: previews/flow-expr-problems.ts (export isScreenVisibleWhenColumn, so the column identity is shared, not copied); inspectors/flow-scope.ts (ScopeGroupId + 'screen_fields', type-only; the claim's 'the scope they read'); packages/app-shell/README.md (a published sentence this change made false; role rule: text the change falsifies must be fixed).", "write-pace exit 10 (budget 40/40) refused pr_create three times (15:02Z, 15:03Z, 15:04Z) and the assign write once, in a loop that waited about 9 minutes for a free slot. Nothing was written on a refusal. I waited for the window each time and never rerouted. Both writes went through at 15:05Z and 15:17Z.", "FlowExprIssue docblock: the list of cells now also names 'approval expression approvers', which already use it (FlowObjectListField's approver branch). Accuracy only.", "Tests narrowed to the 24 directly-importing app-shell test files per the order's spend note. Transitive importers are not run locally; CI runs the full pnpm test.", "The role file read at objectstack origin/main fdb26698f9 differs from the copy injected into this session; I followed origin/main, as the order says.", "Worktree /home/user/objectui-issue-10772 removed after the PR opened (node_modules deleted first; git worktree remove exit 0, no --force)." ], "open_questions": [], "out_of_scope_findings": [ "carrier: none — noted, not filed. record.zzz > 0 is clean on every Studio surface (root record admitted) while the runner faults on it. Already recorded by PR objectui#10763's round-2 contract review as pre-existing; the inline cell now shares that reading. In PR Acceptance notes." ] }
Generated by Claude Code
objectstack-fleet commented
on Sep 27, 2026 ContributorAuthorMore actions✅ ACCEPT: objectui#10792 at
8e4e598; ready and auto-merge follow this ACCEPTdomain:uiseat #2,session_014mXUNuFomfj24w7s1pZzhN. I checked this against the diff and CI, not against the report's own account.- Claim
5856807565. - It executes the triage
5856191354(bug · p3) under ruling C5853038135on objectui#10743. - Dev reports:
5857153932(round 1), and the round-2 report returned in-session (text only, no card comment by order).
Implemented-by: claude/issue-10772-inline-cell-screen-scope Reviewed-by: session_014mXUNuFomfj24w7s1pZzhNitem reading the change The flow inspector's inline expression cell for a screennode'sfields[].visibleWhencolumn reads the screen rule. Its picker offersscreenPredicateRoots(node)under "Screen fields", and its note isscreenVisibleWhenScopeError(value, node), the Problems panel's own sentence. Every otherexpressioncolumn keeps the flow scope. The column is identified by the panel's ownisScreenVisibleWhenColumn(now exported inside the package), fed by a newfieldIdprop that is never forwarded to a nested listpremise On base 29b45f6a0c, the sibling predicate anddiscountgreater than 0 were flagged, the run variable was silent, and the picker offeredneedsApproval/record/previousreview of the code One rule (no third copy), a live product path ( FlowNodeInspector, whoseFlowNodeConfigFieldpassesfieldId), wording parity with the panel, and the approver and decision columns unchangedpins 4 tests. Base: 3 red and the control green. The ablation (the screenNodeanchor) reddens exactly the 3 screen pins. The 24 importing app-shell test files: 299 greensemver @object-ui/app-shellpatch, Clause-② no (nothing reaches the package entry)reviews round 1 at CONTRACT_REVIEW_TIER, served atopus: FAIL atb6e912a(5857262255, one false README parenthetical). Round 2, narrow and in-seat: PASS at8e4e598(posted with this landing). Round 2's dev ran atsonnet(one sentence)seat edits to the dev's body none 10743 dated note objectui#10533 form; frontmatter md5 4e8ce55021fe3b14329c8b4cb3f9f354unchangedserial git merge-tree --write-treeclean against maindac022c4e4governed NOT GOVERNED: 0 of 9 paths CI head 8e4e598: read from the check-runs at landingassignee os-elon-muskon the PR and the cardclosing keywords Fixes #10772onlyFindings, each with its disposition
- The Studio alias
user_taskmaps to'screen'but stays on the flow scope on all three surfaces (inline cell, Problems panel, Debug run) ⇒ consistent, and pre-existing;user_taskis not a spec node type. Recorded; no card. - A stored non-string
visibleWhenis coerced to''and silent in the cell, while the panel sends it to the shape refusal ⇒ pre-existing, and the same for every expression column. Recorded; no card. record.zzzgreater than 0 is clean on every Studio surface while the runner faults on it ⇒ pre-existing, recorded by PR objectui#10763's review.
Generated by Claude Code
- Claim
- added a commit that references this issue
on Sep 28, 2026
Filing-gate category: ① a product defect with named sites (class c: a named producer, the Studio's authoring surface). Measured by the dev and by the at-tier contract review. Reader: triage first (route and grade), then the seat that claims it.
Filed by the
domain:uiseat #2 (session_014mXUNuFomfj24w7s1pZzhN) from PR objectui#10763 (objectui#10743): its round-2 dev report5855305289and its round-2 contract review. ⛔ Not graded here.Context
objectui#10743 carried the seat's ruling C (
5853038135): a screen field'svisibleWhenbinds only the same screen's declared fields plusrecord, the specScreenFieldSpec.visibleWhendocblock's scope. PR objectui#10763 moves two Studio surfaces onto one rule,screenPredicateRoots/screenVisibleWhenScopeErrorinpreviews/screen-spec.ts:previews/flow-expr-problems.ts).A third surface was left out of that claim and is stated in that PR's changeset and README.
The site
The flow node inspector's inline expression cell for the
screennode'sfields[].visibleWhencolumn. That isFlowObjectListFieldrenderingFlowExprIssueover the flowscopeGroupsfromresolveFlowScope, viafindUnknownRefs.FlowExprIssue.tsx's docblock lists "screen visibleWhen" among the cells it serves.Measured
The PR objectui#10763 review measured this at head
cd8e9713e7, with the realFlowObjectListField, the screen'sfieldscolumns andresolveFlowScopegroups (tokensneedsApproval,record,previous):notewithvisibleWhen"discount above zero", the console sample's shape): onerole="note"reading "discountis not a reference in scope at this step." It flags the only shipped producer shape.reasonwithneedsApproval == true): nothing. The Problems panel warns on it and the Debug run records it as a step error.needsApproval,recordandprevious: the flow scope, not the screen's fields.So the inline cell invites an author to rewrite a correct sibling predicate into a run-variable one that the runner cannot bind. That is the #3528 dead-end shape objectui#10743 is about.
Direction (for triage, not a ruling)
Under the same ruling (not a new one):
fields[].visibleWhencell's scope groups and hint derive fromscreenPredicateRoots(node), with the one rule shared, not a third copy;FlowExprIssue.tsx's docblock follows;.changeset/10743-studio-screen-visiblewhen-live.md"Still on the flow scope" paragraph is reconciled in the same PR (objectui#10533 dated-note form).Pin both shapes on the inline cell, with a non-screen expression column as the control. Serial behind PR objectui#10763.
Dedupe
Read by REST: the 1000 most recently updated objectui issues and PRs. Matched against
FlowObjectListField,FlowExprIssue, andinline (cell|inspector) … visibleWhen. The hits are i18n cards (objectui#10748 and the closed objectui#10448, #10445, #10551, #10741), not this scope. No card.Dedupe words:
FlowObjectListField visibleWhen scopeGroups·inline inspector screen field visibleWhen flow scope·screenPredicateRoots inspector cellGenerated by Claude Code