Repository navigation
fix(studio): the flow Problems list reads the draft's publish verdict, and a blank expression says it needs one - #27826
Merged
Conversation
…, and a blank expression is said in business words Studio's Automations page kept the draft read's served verdict for the inspectors but never handed it to the canvas, so Problems read "No problems" for a flow whose publish refuses a blank expression value. The preview now gets the same verdict; a finding the server locates in words keeps that locator as the row's target. The spec's refusal of a blank expression is recognised from the spec's own judge and said as "This value needs an expression" in both the value cell and Problems. Claude-Session: https://claude.ai/code/session_01Utp6CaycqDGtn6KeXgc8hp Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 30, 2026
Contributor
Author
|
domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe 席位核对ACCEPT · head
Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe
Requested by Bill · project thread
Fixes #27799
Clause-②: no
Metadata-protocol: none
维护者速读
StudioDesignSurface.tsx(把flowVerdict交给画布的那一处)、previews/flow-problems.ts(服务器条目的定位与文案)、inspectors/flow-value-envelope.ts(isBlankExpressionRefusal)。pnpm --dir ui exec vitest run packages/app-shell/src/views/studio-design/AutomationsPillar.problemsAgree-27799.test.tsx,预期 3 个用例全绿。What changes
Measured first, on
mainat86aaff32, with the Studio Automations page mounted against a server double that judges as the server does (the save door parsesFlowSchema; the draft read folds in the publish gate's finding from the realvalidateStackExpressions). A record-change flow, an Update Records node, a valueidswitched to an expression and left blank:AssignmentValueSchema, run live): "A value carrying adialectkey is read as an expression envelope … Write{ dialect: 'cel', source: '…' }";flow-value-slot-template.ts, "The doors that run it"), and the draft read's_diagnosticscarried the publish gate'sexpression-invalidfinding with the same message;FlowPreviewgot nodiagnosticsthere.So the blank expression is a defect (the publish refuses it), and the one judge is the spec's value-slot rule, which both the cell and the publish gate run. The fix wires Problems to that verdict; no client-side validator is added.
flowVerdict(the draft read's_diagnostics, re-read after each autosave) to the flow preview asdiagnostics, throughverdictPreviewEntriesindraftVerdict.ts, with messages throughtranslateValidationMessageas the metadata edit page does.flow 'touch_account' · node 'write' (update_record) update_record field value at config.fields.id), not as an item path, so it cannot be placed on a node. A server row on no element now shows the server's locator as its target instead of the bare word "flow".isBlankExpressionRefusalrecognises the spec's refusal of a blank expression by asking the spec once what that refusal reads (valueEnvelopeRefusal({ dialect: 'cel', source: '' })), never by restating the rule. The value cell and the Problems row both say "This value needs an expression. Write one, or switch the value back to text." (zh: 「这个值需要一个表达式。请填写表达式,或把这个值切回文本。」). Every other refusal shows as before.Tests
studio-design/AutomationsPillar.problemsAgree-27799.test.tsx(realFlowPreview+ realFlowInspector, server double as above):node 'write'andconfig.fields.id; the tab count is 1;record.idclears the cell, and after the autosave Problems reads "No problems" again.FlowKeyValueField.valueEnvelope.test.tsx: the blank-expression case now expects the business sentence (the malformed-template case still shows the spec's sentence).Acceptance notes
ExprIssue.pathis set for an edgeconditionand an object validation'scondition/whenonly), so_diagnosticslocates it by thewhereprose and the Problems row cannot select or reveal the node. Seam:lint:ExprIssue.path (flow node value slots) → runtime:withPublishVerdict itemRelativeIssuePath → renderer:flow-problems serverTarget. With aflows[0].nodes[N].config.fields.KEYpath, the existing mapping places the row on the node with no ui change. Filed by the seat as lint: a flow node config-value finding (validateStackExpressions) carries onlywhereprose and no key path, so Studio's Problems row lists it but cannot point at the node #27828 (domain:spec, p3).Verification
Repro on main (before)
The measurement test, run on
86aaff32before the change: cell alert = the spec's envelope sentence; 1 save, 0 refused; served verdictvalid: falsewith the same message at thewherelocator; Problems showed the empty-state sentence, 0 rows.Ablations (each through scripts/ablation-replace.mjs, restored to HEAD)
diagnostics: flowPreviewDiagnosticsablated → 2 of 3 new cases red (Problems stays empty).valueEnvelopecase).Local runs
All at head
7c47a855, underscripts/pm/os-verify-lock.sh:pnpm --filter @object-ui/app-shell run type-check(both tsc programs) → exit 0.pnpm --dir ui exec vitest runoverpackages/app-shell/src/views/studio-design/plus the 91 test files that nameFlowPreview,ProblemsPanel,flow-problems,FlowKeyValueField,flow-value-envelope,draftVerdict,FlowNodeConfigFieldorFlowNodeInspector→ Test Files 357 passed (357), Tests 3097 passed (3097).pnpm --dir ui exec vitest run packages/i18n/→ Test Files 90 passed (90), Tests 1380 passed, 13 skipped.pnpm check:new-line-citations(ui) → 0 new citations, exit 0.Gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat7c47a855derived 34 families; each run and recorded ascommand :: exit codebefore any pipe; all 34 exit 0, includingnode scripts/check-sdui-manifest.mjsandpnpm --dir ui exec vitest run scripts/(169 passed, 2 skipped files; run alone under the lock).--ranreconciliation: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN.Generated by Claude Code