ui-automation-control-plane

Architecture (Canonical SSOT)

This document is the only canonical contract source for architecture-level behavior.

SSOT Boundary Contract

Canonical Boundaries

System Contract

Integration Substrate Contract

Prooflane currently exposes three different integration substrate layers on purpose.

Layer Current role Contract level
OpenAPI + HTTP Primary builder-facing contract Public and canonical
MCP server Agent-facing adapter over existing truth surfaces Public adapter contract
Frontend hooks + generated harness client First-party and test-harness wiring Repo-internal implementation layer

This means:

It does not mean:

Future SDK path, if it is added later, should grow from the OpenAPI source of truth and move generation or curated client code out of the current tests/web-harness/ location into an explicitly versioned package.

Run Lane Contract

The repository intentionally keeps multiple run surfaces. They are related, but they are not interchangeable and must not be collapsed into a single mental model.

Lane Entry Primary intent Primary truth / output Notes
Local product lane ./scripts/dev-up.sh Boot the operator UI and FastAPI locally .runtime-cache/dev/*, .runtime-cache/logs/* Local first-look path only. It does not write a governed proof bundle.
Automation command lane POST /api/automation/run Queue allowlisted command execution AutomationTask ledger May invoke script-pipeline commands such as script-pipeline-full and script-pipeline-capture. Deprecated run* aliases are no longer the current contract.
Workflow run lane POST /api/runs Create operator-facing runs from saved templates Universal workflow ledger (Session -> Flow -> Template -> Run) Bridges to AutomationTask through Run.task_id.
Script pipeline lane ./scripts/run-pipeline.sh Run record/extract/generate/replay flow automation Runtime-side automation session files and generated flow/test assets This lane currently backs specific automation commands. It is not the governed proof lane.
Governed proof lane pnpm uiq run --profile <profile> --target <target> Produce release / gate evidence bundles .runtime-cache/artifacts/runs/<runId>/manifest.json Canonical proof lane for manifest/summary/evidence-index output.
MCP adapter lane pnpm mcp:start Expose API, governed proof, and artifact reads as MCP tools/resources Reuses existing ledgers and governed proof artifacts Adapter only. It is not an independent execution model.

Canonical wording in docs and UI should follow this table:

Primary Path / Extension Registry / Migration Matrix

Runtime Truth Map

The system keeps two different ledgers on purpose:

These ledgers are related but not interchangeable:

The decision plane keeps two additional canonical surfaces:

Template lifecycle is also versioned at the workflow layer:

Projection layers must not be treated as primary truth:

Compatibility boundary:

Extension Registry Contract

Registry load failures are blocking contract violations.

Migration Matrix (Platform Capability)

Platform target Default driver Capability baseline Migration note
web web-playwright navigate/interact/capture/logs/network/trace Full Flow/Template/Run path supported; preferred baseline for template authoring.
tauri tauri-webdriver navigate/interact/capture/logs/lifecycle Requires app runtime binding; desktop-only checks rely on lifecycle capability.
swift macos-xcuitest interact/capture/logs/lifecycle Requires bundleId binding; navigation/network/trace are intentionally non-baseline.

Migration rule: when adding a new driver/platform, register capability contract first, then enable profile/target usage. Missing registry data is blocking.

Runtime Artifact Layout

uiq writes all evidence under .runtime-cache/artifacts/runs/<runId>/.

Profile Contract

Gate Status Contract

CI Reliability Notes

Cross References