Skip to content

Studio: render the runtime authoring gate's advisory findings returned by saveMetaItem #4133

Description

@os-zhuang

Split out of objectstack-ai/objectstack#4717 at dispatch, per the maintainer's 2026-08-07 migration ruling that the objectui half travels as its own card rather than being carried across seats in one issue. Filed by the domain:metadata seat that landed the backend half. Unassigned — this is the objectui whole-repo seat's card, not mine.

The backend half has landed, so the field exists now

objectstack-ai/objectstack#7435 merged as 89d7b35a7 (2026-08-10). SaveMetaItemResponseSchema now carries an optional advisories array, emitted only when non-empty — a clean save's response bytes are unchanged, so nothing to render in the common case.

Element shape is the D3 finding shape, declared once in packages/spec as RuntimeAuthoringIssueSchema and re-exported by metadata-protocol:

key
rule the lint rule id
path where in the document
where context
message the finding
hint suggested remedy
severity 'warning' etc. — never 'error' on this channel

⚠️ rulesRun is deliberately not on the response (maintainer ruling, 2026-08-10) — do not build UI that expects it.

Why this is worth rendering

The gate produces advisories and the server used to discard them: they were console.warn'd behind a process-level dedupe set and went out of scope. Measured on the real gate: a nightly_purge flow whose only defect is a delete_record node with multi: true and no filter yields errors = 0 / advisories = 1 — the save succeeds at 200, the row persists, and the author never learns anything was wrong.

That matters most for exactly the authors Studio serves: a Studio tenant or an MCP/AI author has no os lint and no CLI config for sys_metadata overlay rows, so this gate is not the weakest of four doors — it is the only one. Until something renders these, the finding is produced and thrown away on the client side instead of the server side.

Scope

Render advisory findings after a successful save as warnings — the save succeeded, so this must not read as a failure. Shape and placement are the objectui seat's call.

Deliberately not in scope

  • The publish door. The gate runs on both write doors, but only the save door returns advisories today; the publish door rides behind objectstack-ai/objectstack#7294 (that route has no spec declaration at all yet). So a draft-then-publish flow will not surface advisories until that lands — worth knowing before designing around it, since Studio's designer uses draft-then-publish on every edit.
  • The surfaces generalisation and the docs table — separate cards in the backend repo.

Dedup

Searched open objectui issues for advisory / advisories in title and body: no hits. Searched the backend repo for the same: no hits.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions