← Sketches · the native app program

The app map and its two states

c1312026-11-10

Five pages and the tray; local (editable) and connected (read-only), and the sentence the app says in each.

Source: c131 plan.md §The shape, the Phase 2 page table, R4, D6–D8, D12, D13; c130 plan.md D7 and D9 (ruled 2026-11-09) and Tyler's sketch in session 1b21a3ce; c137 ports.md §1 (the inbox and the tray's line); the c1 spike in ../qnative (steps 1–4, README §Footprint).

▣The tray

the same process with the window closed: status at a glance, Open app…, the tap toggles qtray has today

Tray-only mode

proven in the spike: the window closes into it (16 MB), Open brings it back

Tap toggles

qtray's model, menu and click-to-tap, ported in Phase 3

Count + one line

open messages waiting; the newest subject (c137)

Open app…
The app window · five pages in the order they are built, one review stop each (D6)
▭Status

reads /api/stats, /api/performance, qcontrol's logs and the effective config: on / off, local / connected, CPU and RAM, workers, plugins

Grant line

one line when a mechanic-access grant is active on this endpoint's plane; otherwise nothing (D12, c136)

▭Inventory

reads /api/harnesses, mcp-servers, skills, tools, sessions, workspaces, models, providers: what was seen on this machine. Proven in the spike: three tables over the bundled world

▭Events

reads /api/events/stream and the audit log: the live stream (Mark's “Live view”) with the detail sidebar

▭Config

reads the file found and the effective result (qconfig): editable in the local state, read-only when connected

▭Connect

new (Tyler's idea): sign in, pick the control plane, confirm; its confirmation is the one message that flows in V1 (D8)

Inbox

every message, kept with its state and thread; always on; its place beside the five pages is c137's to set at Phase 3

Footer

data: plane · hq.acme.example · connected · v0.1.0 — the source named by the nozzle (R1); proven in the spike

Local · no plane; the app reads this machine
◇Reads this machine

qcontrol's loopback API, the 38 routes (SQLite only if Tyler prefers, Q2); the config file found. Proven: local is honest when qcontrol is absent

Config is editable

edits exist only in this state, behind one guard (R4)

The app says

“This machine runs on its own. The configuration lives here and you can change it. Here is what was found.” (proposed; the record gives only the connected sentence)

Connect
sign in, pick the plane, confirm (D13, c0 names it); disconnect returns to local
Connected · an endpoint attached to a plane; the app reads the plane
◇Reads the plane

a base URL plus the standardised credential (D13, with c134 and c136). Proven against a fixture plane: the same rows as synthetic; a wrong credential drawn as a state

Config is read-only

the same guard, closed; the configuration is managed at the plane (Tyler: once connected, no local config)

The app says

“You're connected to HQ. The configuration is managed there. Here is what was found on this machine.”

ours to build in c131proven by the c1 spike (Inventory, the tray's loop, the footer, the three sources)waits on the plane (c134), its credential and grants (c136)the sentence the app says when connected (R4)placed by a sibling cycle, or proposed here
The problem
Tyler sketched the app as a list: diagnostics tabs, the event viewer, a local inventory, a config that goes read-only once connected. As a list it reads like the web dashboard again. Drawn, the one-machine scope shows: five pages that read this machine, one guard on Config, and the tray as the same app with its window closed.
The core idea
Two states, one difference: what the app reads and whether Config opens. The app says which state it is in, in one sentence, and the footer names the source. Everything else is a port of pages that exist, behind the DataNozzle, so the spike could prove the shell, the tray and the sources before any page was designed.
What is open
Socket API or SQLite for local (Q2); whether Connect ships in V1 as a mocked flow on the synthetic source (Q6); which messages flow beyond Connect and the budget numbers (Tyler, G2); where the inbox sits (c137 Phase 3); the local-state sentence; the names (c0).

Qpoint Brand Style Guide