Skip to content

Studio: the RLS predicate field keeps showing the previous draft's server error under newly edited text #27452

Closed

Description

@objectstack-fleet

domain:devx#1 · sunhaolin · session_017xRBcVkGJizGH7raJHhAvL

Filing gate: ① a user-visible defect found by a QA run (off-clause probe, RUNNER rule 8). It sits beside the #26858 / PR #26999 design, in which the field shows the draft's server verdict at its own path.

Reproduction

  1. Boot the showcase. Create a writable package (POST /api/v1/packages {"id":"com.qa.rten","name":"QA","version":"0.1.0","type":"app","namespace":"qar"}), an object qar_job with number est_hours and a formula field f_formula, and a permission set qar_job_editor with an RLS policy on qar_job.
  2. Open /_console/studio/com.qa.rten/access, select the set, then the Row-level security tab.
  3. Type record.f_formula > 5 into USING. Autosave runs, and the server verdict (INVALID_FIELD, virtual formula field) appears under the field. That part is correct.
  4. Now change the text to a predicate the client lint holds, for example record.est_hours * 2 > 10 (not lowerable). The client error appears and the save is held.
  5. Expected: only the error that applies to the current text.
  6. Actual: the previous draft's server error, which is about f_formula and text no longer in the field, stays rendered beside the new client error. Two different errors show at once.

Mechanism

The server verdict at the field's path comes from the last saved draft read. A held save never re-reads, so the stale verdict is not cleared when the text changes.

QA-source: #27441 · studio-authoring.expression-editors · observed beside the clauses


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: studio | none | P①

    Triage: p3 · domain:ui · area:access · 2026-10-29T08:12Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 29, 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-qx6k5b (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-27452
    Domain: domain:ui
    Seat: domain:ui#3
    File surface: ui/packages/app-shell/src/views/metadata-admin/draftVerdict.ts, ui/packages/app-shell/src/views/metadata-admin/CelPredicateField.tsx, ui/packages/app-shell/src/views/metadata-admin/inspectors/ConditionBuilder.tsx (comparison compile path; and its compile helper if separate), ui/packages/app-shell/src/views/studio-design/ObjectValidationsPanel.tsx, the DataPillar draft-response read in ui/packages/app-shell/src/views/studio-design/StudioDesignSurface.tsx (only to carry _diagnostics), ui/packages/app-shell/src/views/metadata-admin/PermissionMatrixEditor.tsx only for #27452, 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: 6491499806
    Premise: holds
    Serial constraints cleared: PR #27617 (seat 3, #27511 fold) holds other DataPillar regions of StudioDesignSurface.tsx and is landing: merge origin/main before the PR and after it lands · no other open PR edits draftVerdict.ts, CelPredicateField.tsx, ConditionBuilder.tsx or ObjectValidationsPanel.tsx (checked at claim) · #27629 waits on PR #27617, not on this chain

    Fold: member of the #27513 chain (chain head #27513 carries the full serial check); shared branch named above. First step: re-measure on current main (PR #27612 may already end the stale verdict).

    Dispatched 2026-10-29T15:34Z 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

  3. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#3 · os-bill · session_01Utp6CZVdZdKe4J1nCNL23t
    Fixed in draft PR #27677 (folded with #27513); dev report: #27513 (comment)


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

    ACCEPT → PR #27677 comment 6503830067 · 2026-10-29T17:33Z

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

Metadata

Metadata

Assignees

Labels

area:accessPermissions that actually hold — RLS/FLS, sharing model, write-path guardsbugSomething isn't workingdomain:uipm:dispatchedpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions