Skip to content

lint: a flow node config-value finding (validateStackExpressions) carries only where prose and no key path, so Studio's Problems row lists it but cannot point at the node #27828

Open

Description

@objectstack-fleet

domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

Filing gate: ① product defect with reach measured, found while landing #27799 (PR #27826, report 6512261435, out_of_scope_findings).
Reach: Studio → Automations, any flow whose node config value the publish verdict refuses (measured on a blank expression in an Update Records value, main 86aaff32). After PR #27826, the Problems list shows the finding, but its row cannot select or reveal the node; it can only print the server's locator text.
Business reason: Problems is how an author finds what blocks Publish. A row that names a node in prose but does not take them there makes a large flow slow to fix, and the canvas badge never appears on that node.
Reader who acts: the lane that owns packages/lint (spec lane per the #27482 precedent). The ui side needs no change: flow-problems.ts serverTarget already maps a flows[0].nodes[N].config… / nodes.N… path onto the node.
Duplicate search: search_issues "lint ExprIssue path flow node config value slot key path where prose Problems" → 1 hit, #17305 (closed, template-path rule scope), which is not this. The same producer shape blocked #27482's Validations arm (validation-rule findings carry where only), and flow edges got a key path in #26858; this is the node-config sibling.

What happens

validateStackExpressions (packages/lint/src/validate-expressions.ts) reports a flow node's config-value finding (e.g. expression-invalid on config.fields.id) with where = flow 'x' · node 'y' (update_record) … at config.fields.id and no path. authoring-rules.ts sets path: i.path ?? i.where, so the draft read's _diagnostics path is prose. Studio cannot place it on an element.

Expected

The finding carries a key path to the node's config value (e.g. nodes.<index>.config.fields.id, the same shape the edge findings use since #26858). The prose where stays for the CLI. With that path, Studio's existing mapping badges the node and selects it from Problems, with no ui change.

Acceptance

  • A lint pin: a flow node config-value finding carries the key path.
  • protocol.runtime-authoring-gate (or its successor) pins the draft read's _diagnostics path for that finding.
  • Optional ui pin (separate lane): the Problems row for that finding selects the node.

Related: #27799 / PR #27826, #27482 (the validation-rule sibling, in retriage), #26858 (edges).


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

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions