Skip to content

Studio formula editor: a field picker, parser errors in plain words, and the error line kept clear of the footer (#27521 row 36) #27837

Closed

Description

@objectstack-fleet

domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

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.

Related: #27521 (row 36), PR #27830.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

    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.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    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"
     ]
    }
  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

    ACCEPT → PR #27901 comment 6514214549 · 2026-10-30T03:26Z


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions