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 }}
Repository navigation
Studio formula editor: a field picker, parser errors in plain words, and the error line kept clear of the footer (#27521 row 36) #27837
Filing gate: ③ triage-directed. Triage 6495068090 on #27521 said: "Each row is either taken, with its own card where it needs code." This is row 36, carded by the seat from PR #27830's report (6512376770, out_of_scope_findings), not taken in that PR.
Reach: observed on the 18.3.0 RC browser walkthrough at c4c515ad (admin, desktop) and re-read on current main by #27830's dev.
Reader who acts: domain:ui (Studio).
Duplicate search: search_issues "formula editor field picker plain parser error footer" → no open card covering it.
Observed
Formula field editor: a bare textarea with no field picker. Syntax errors are technical ("Unexpected token: EOF … ^"), and the error line sits under the sticky Remove button. The unknown-field "did you mean estimated_hours?" is good.
Wanted
A field picker (labels, inserting the CEL name), parser errors in plain words, and the error line kept clear of the footer. #27830's dev read that InspectorShell does not overlay the footer in code, so the overlap needs one browser read first. Landing: ui/packages/app-shell metadata-admin formula field editor.
Claim: PM loop round 1
Session: session_01Utp6CaJoinvGQSbHeDaWBe
Account: os-bill
Branch: claude/project-thread-1ic8eu (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-27837
Domain: domain:ui
Seat: domain:ui#3
File surface: Studio formula field editor (ui/packages/app-shell/src/views/metadata-admin/**), studio i18n (add keys), tests beside, root changeset (stop on breach; explain in the report)
Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier on 178b5238: no path-derived mandate), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: ui code produces the defect | no platform path covers it | every Studio / console author reaches it today
Thread-read: none
Premise: holds
Serial constraints cleared: none
Dispatched 2026-10-30T01:50Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.
{
"issue": 27837,
"status": "done",
"branch": "claude/project-thread-1ic8eu",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27901",
"head": "261cf0a4",
"session": "session_01Utp6CbrXDpQYUAJ8MKZpNL",
"premise_still_valid": true,
"summary": "The formula editor (shared CelPredicateField) gains an Insert field picker (fields by label, inserts record.NAME at the caret; ObjectFieldInspector passes siblings labelled via useSafeFieldLabel), leads the catch-all invalid-cel refusal with a plain i18n sentence keyed to the formula package's refusal code and shows the engine detail (fault + source excerpt with the caret mark) in monospace, and scrolls a new finding into view while the editor has focus. Premise re-measured: the editor was CelPredicateField, not a bare textarea, with name-only completion after record.; the footer does not overlay the content box, but a browser read reproduced the error line landing below the scroll viewport under the Remove footer, which the scroll fixes.",
"tests": "head 261cf0a4: app-shell + i18n type-check exit 0; 100 ui test files naming CelPredicateField/celAuthoring/ObjectFieldInspector/lintCelPredicate plus packages/i18n/: Test Files 191 passed (191), Tests 2422 passed, 13 skipped. New: CelPredicateField.formulaAuthoring-27837 (11), ObjectFieldInspector.formulaFieldPicker-27837 (1). Ablations via scripts/ablation-replace.mjs (src-resolved, no dist): plain-lead row deleted -> 4 failed/11; picker bare name -> 3 failed/11; scrollIntoView deleted -> 1 failed/11; each restored, blob == HEAD.",
"gates": "34 derived families on 261cf0a4, all exit 0, dispatch-gates --ran: 34 run, 0 NOT-MEASURED; check-sdui-manifest exit 0; ui check:new-line-citations 0 new. CI families: in_progress at report time, read from PR 27901 check-runs.",
"line_budget": "8 files, +484 -9 (src +199 -9, tests +264, i18n +12, changeset +17)",
"files_changed": [
".changeset/studio-formula-editor-field-picker-plain-errors.md",
"ui/packages/app-shell/src/views/metadata-admin/CelPredicateField.tsx",
"ui/packages/app-shell/src/views/metadata-admin/celAuthoring.ts",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx",
"ui/packages/app-shell/src/views/metadata-admin/CelPredicateField.formulaAuthoring-27837.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.formulaFieldPicker-27837.test.tsx",
"ui/packages/i18n/src/namespaces/studio/en.ts",
"ui/packages/i18n/src/namespaces/studio/zh.ts"
],
"deviations": [
"PR body order follows os-dev.md (attribution, Fixes, Clause/Metadata lines, then the maintainer brief) over the order's brief-before-Fixes; os-dev wins on conflict.",
"Harness after-PR assign/review step skipped per the order (no assignees, no review request).",
"Whole ui suite not run locally; left to CI Test UI."
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — fleet-write relay pr_create (POST pulls, PR 27901); post-stamped issue comment on 27837 (this report)",
"open_questions": [],
"out_of_scope_findings": [
"class: b · reach: named producer — packages/formula classifyError returns EvalError without pos although EvalError declares pos (Source position when known), and validateExpression folds every cel-js parse fault into invalid-cel with only detail text, dropping cel-js ParseError code and range · evidence: probe on 261cf0a4 — record.amount * gives invalid-cel, params {role, detail} only · consequence: a localized editor can word one sentence per refusal code but not per parse fault (unexpected end, unclosed string) nor say at character N · dedupe words: formula invalid-cel parse code range, EvalError pos never populated, cel parse fault position"
]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe
Claim: PM loop round 1
Session:
session_01Utp6CaJoinvGQSbHeDaWBeAccount:
os-billBranch:
claude/project-thread-1ic8eu(the card thread's designated push branch, the recorded platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-27837Domain:
domain:uiSeat:
domain:ui#3File surface: Studio formula field editor (ui/packages/app-shell/src/views/metadata-admin/**), studio i18n (add keys), tests beside, root changeset (stop on breach; explain in the report)
Container & model:
M,mode:thread,model: TIER_DEFAULT(dispatch-gates --tieron178b5238: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: ui code produces the defect | no platform path covers it | every Studio / console author reaches it today
Thread-read: none
Premise: holds
Serial constraints cleared: none
Dispatched 2026-10-30T01:50Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.
Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CbrXDpQYUAJ8MKZpNL
os-dev-report
{ "issue": 27837, "status": "done", "branch": "claude/project-thread-1ic8eu", "pr": "https://github.com/objectstack-ai/objectstack/pull/27901", "head": "261cf0a4", "session": "session_01Utp6CbrXDpQYUAJ8MKZpNL", "premise_still_valid": true, "summary": "The formula editor (shared CelPredicateField) gains an Insert field picker (fields by label, inserts record.NAME at the caret; ObjectFieldInspector passes siblings labelled via useSafeFieldLabel), leads the catch-all invalid-cel refusal with a plain i18n sentence keyed to the formula package's refusal code and shows the engine detail (fault + source excerpt with the caret mark) in monospace, and scrolls a new finding into view while the editor has focus. Premise re-measured: the editor was CelPredicateField, not a bare textarea, with name-only completion after record.; the footer does not overlay the content box, but a browser read reproduced the error line landing below the scroll viewport under the Remove footer, which the scroll fixes.", "tests": "head 261cf0a4: app-shell + i18n type-check exit 0; 100 ui test files naming CelPredicateField/celAuthoring/ObjectFieldInspector/lintCelPredicate plus packages/i18n/: Test Files 191 passed (191), Tests 2422 passed, 13 skipped. New: CelPredicateField.formulaAuthoring-27837 (11), ObjectFieldInspector.formulaFieldPicker-27837 (1). Ablations via scripts/ablation-replace.mjs (src-resolved, no dist): plain-lead row deleted -> 4 failed/11; picker bare name -> 3 failed/11; scrollIntoView deleted -> 1 failed/11; each restored, blob == HEAD.", "gates": "34 derived families on 261cf0a4, all exit 0, dispatch-gates --ran: 34 run, 0 NOT-MEASURED; check-sdui-manifest exit 0; ui check:new-line-citations 0 new. CI families: in_progress at report time, read from PR 27901 check-runs.", "line_budget": "8 files, +484 -9 (src +199 -9, tests +264, i18n +12, changeset +17)", "files_changed": [ ".changeset/studio-formula-editor-field-picker-plain-errors.md", "ui/packages/app-shell/src/views/metadata-admin/CelPredicateField.tsx", "ui/packages/app-shell/src/views/metadata-admin/celAuthoring.ts", "ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.tsx", "ui/packages/app-shell/src/views/metadata-admin/CelPredicateField.formulaAuthoring-27837.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/inspectors/ObjectFieldInspector.formulaFieldPicker-27837.test.tsx", "ui/packages/i18n/src/namespaces/studio/en.ts", "ui/packages/i18n/src/namespaces/studio/zh.ts" ], "deviations": [ "PR body order follows os-dev.md (attribution, Fixes, Clause/Metadata lines, then the maintainer brief) over the order's brief-before-Fixes; os-dev wins on conflict.", "Harness after-PR assign/review step skipped per the order (no assignees, no review request).", "Whole ui suite not run locally; left to CI Test UI." ], "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 — fleet-write relay pr_create (POST pulls, PR 27901); post-stamped issue comment on 27837 (this report)", "open_questions": [], "out_of_scope_findings": [ "class: b · reach: named producer — packages/formula classifyError returns EvalError without pos although EvalError declares pos (Source position when known), and validateExpression folds every cel-js parse fault into invalid-cel with only detail text, dropping cel-js ParseError code and range · evidence: probe on 261cf0a4 — record.amount * gives invalid-cel, params {role, detail} only · consequence: a localized editor can word one sentence per refusal code but not per parse fault (unexpected end, unclosed string) nor say at character N · dedupe words: formula invalid-cel parse code range, EvalError pos never populated, cel parse fault position" ] }objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe
ACCEPT → PR #27901 comment 6514214549 · 2026-10-30T03:26Z
Generated by Claude Code