Auto-io

Read-only schema inspector for automation I/O boundaries. When a user clicks a synthesised Input or Output node inside a drilled-in automation, this anchored popover opens next to the click point and shows the boundary's role, a one-line intent blurb, and — when the boundary is wired to an I/O element — the resolved JSON Schema. Dismissed via backdrop click, [×] close, or Escape.

binds_to: automationdensity: comfortablesource: portal/src/canvas/auto_io_panel.rs

Declared but not yet dispatched — a real panel whose bound element types do not route to it at runtime today (often intentionally: an anchored popover, a sub-surface of another panel, or a future surface pending other work). See the panel's YAML for the specific reason. Amber means "still to do", not "broken".

Live

The real panel component, mounted here over fixture data — the same shipped chrome the workspace renders, not a sketch.

auto-io

Data entering this automation. External triggers (schedules, webhooks, IO elements) wire to this port.

Role
Input enters the flow here

Schema

{
  "properties": {
    "force_rerun": {
      "default": false,
      "type": "boolean"
    },
    "ledger_id": {
      "type": "string"
    },
    "period": {
      "description": "YYYY-MM accounting period",
      "type": "string"
    }
  },
  "required": [
    "period",
    "ledger_id"
  ],
  "title": "Month-end webhook payload",
  "type": "object"
}
Ready0 connections

Sketch

Structural preview of the panel chrome. The browser panel renders the real BrowserChrome primitive at miniature scale; the other variants are CSS shape silhouettes. Either way the composition tree below is the authoritative description of what's inside.

Auto-ioportal/src/canvas/auto_io_panel.rspartial

States

  • waitingNo boundary selected — click an Input or Output node in a drilled automation
  • no_schemaBoundary not wired to an I/O element yet — empty schema state
  • populatedBoundary wired — displaying the resolved JSON Schema

Composition

Click any component name to jump to its component-page entry.

WorkspaceShellouterL-chrome (top + body + status) — one role=application landmark. No rail: the inspector is a single read-only surface, nothing to switch between.
WorkspaceTopchromeBreadcrumb chrome — survives every selection change.
WorkspaceBreadcrumbchrome[automation-name / Input|Output] — names the boundary's parent automation and its role in the flow.
WorkspaceBodycontentHosts the boundary intro blurb, the role fact list, and either the JSON Schema block or the unwired empty state.
AutoIoIntrocontentOne-line description of what this Input/Output boundary does for the automation.
AutoIoFactscontentDefinition list — the boundary's role: an Input feeds the flow, an Output drains it.
AutoIoSchemaBlockcontentPretty-printed JSON Schema — rendered only when the boundary is wired to an I/O element.
PanelEmptyStatestate'No connections yet' — shown when the boundary has no I/O element wired, with guidance to connect one.
WorkspaceStatuschromeBottom strip — a readiness dot plus a CounterPill of wired connections. Stable across selections.
CounterPillchromeRight-slot connection count, e.g. '0 connections'.

Uses Components

Flat list of every component referenced — verifiable against the composition tree by the future generator audit.