← Design · c145
plan.md
c145. Setup Tour: plan (stage 1, for Mark's review)
Contents
What's asked. The tour should say what the Status dot means in each state, and offer to connect when the machine isn't connected ("Connect it now? Yes, connect it now"). It could also be a second way to connect and configure the app (initial-prompt.md). Nothing is built yet. This plan, and the wording below, are for ruling first.
What the app has today (qnative, read 2026-11-13)
- The dot has three colours (
crates/app/src/pages/status.rsstate_line):- green: qcontrol is on;
- amber: degraded, meaning running but missing part of the picture;
- grey: off or starting.
Nothing is blue or red. Since 2026-11-13 the dot is 26 px, twice the name's x-height. - Connecting is a separate fact from the dot. The plane line says "plane: not connected". c131 D22 treats being local as a legitimate way to run, not a fault:
- local: "This machine runs on its own. The configuration lives here and you can change it."
- connected: "You're connected to HQ. The configuration is managed there."
- There's no Connect page yet.
crates/app/src/messaging.rssays "Connect is not built yet; it comes with c131's Connect page". c131 plans its four states (not connected, signing in, connected, failed), D13 (base URL plus credential), and the deep linkqpoint://connect. c137 inventory row 15 addsconnect-requestfor planes that require approval. - The tour can't hold a button in a callout.
qguikit::tour::Markeris a label, and the overlay takes no clicks. The panel has one seat for an action, the step's button: todayAction::Simulation, shown only while its goal isn't met (design c144). - Callouts can't change with state yet. A callout's
whenknows only the simulation'sstoppedandplayed(theatre::callout_shown). There are nosensor.stateorplane.statefacts (crates/app/src/tour/facts.rs).
Rulings to make (with a recommendation each)
- Where it lives. Recommend both, in two weights:
- New to Qpoint stays an explainer for everyone. Its Status callout changes with the state.
- A separate tour, Set up this machine, has the actions. It lists its goals and skips any that are already met.
- New to Qpoint's Status step offers "Set it up" only when a goal is unmet.
Reason: a setup step that goes away once done would make the explainer longer and conditional for everyone else. - Where the button sits. Recommend the panel's action seat. It is the person's one click, as with "Start the simulation", and it hides once the goal is met. The callout says what the dot means, ending in the question ("Connect it now?"), and the panel's button answers "Yes, connect it now". The other way is a button inside the callout. That would mean making callouts clickable, and the overlay is built never to block the page.
- Is "not connected" a problem? Recommend: only when the organisation expects a connection. That means
config.yamlnames a plane, or HQ deployed the app, but the machine isn't connected. Otherwise local is a choice, and the tour offers Connect as an option, not a warning. This needs Tyler's word on what the configuration carries. - Off: can the app start qcontrol? It's open whether there's a launchd verb the app may call. Until there is, the off state explains and links to Help; it has no Start button.
Wording per state (draft, brand voice checked)
The callout on status.state:
| State | Callout |
|---|---|
| on | The dot turns green when the sensor is working. It's green now. |
| degraded | Amber means the sensor is running but can't see everything. The line below says what it's missing. |
| starting | The dot turns green once the sensor is up. It's starting now. |
| off | The dot is grey while the sensor is off, so nothing new is counted until it's back. |
A second callout, on the plane line (a new region, status.plane):
| Plane | Callout | Panel button |
|---|---|---|
| local (not connected) | This machine runs on its own, so its settings live here. Connect it to HQ and your team can manage them. Connect it now? | Yes, connect it now |
| connected | Connected to HQ. Your team manages this machine's settings there. | none |
| failed | The last try to reach HQ didn't work. Try again? | Try again |
Today's single line, "The dot turns green when the sensor is working.", stays until these rulings land.
Set up this machine: the tour (draft)
Each step has a goal. A step whose goal is met says so in one line and moves on.
- Is it running? The goal is
sensor.state=on. It covers the states above and, when off, what to do. - Connected to HQ. The goal is
plane.state=connected, and the step appears only when ruling 3 says a connection is expected. Its button is "Yes, connect it now", which opens Connect. Waits for c131's Connect page. - Where its settings live. This is the Config page under This machine, built by c146:
/pages/native/configin the lab,Route::Configin the app (qnative c11, on main as313bd7c). The callout sits onconfig.source, which says which of the three modes holdsconfig.yaml: Edit here, Managed by your company, or From a published file (c146 Q1). With no file, the page opens on Pick a starter (config.first-step). It has no button: editing, starters and an agent's draft are the page's own, and the person applies them (c146 R4). Updated 2026-11-13: this step pointed at the Sensor page's facts until c146 built Config, which took the page over from c138. - How it reaches you. Messages › Settings (
messages.kinds), with "Allow notifications" as the button, from the page's ownmessaging::ask_alert_permission. - Your agent. Help's Ask the guide (
help.guide), with the "Connect your agent" callout. The button copies the command.
Build, in phases, after the rulings
- Phase 1 (no Connect needed):
- facts
sensor.stateandplane.state(frompages::status::SensorRead, on the background readrefresh_factsalready runs); whenconditions on callouts (fact=value,fact!=value);- a
status.planeregion; - the state-aware Status callouts in New to Qpoint;
- one story per state (worlds:
app-status-off,-starting,-degraded,-connectedalready exist).
- facts
- Phase 2:
- the Set up this machine tour, steps 1 and 3–5;
- a goal on each step that marks it done;
Action::Tour("Set it up", which opens the setup tour at its first unmet step) andAction::AllowNotifications.
- Phase 3 (waits for c131's Connect page):
- step 2 and
Action::Connect, through to signing in, failed and connected; - the deep link;
- the
connect-requestmessage where a plane requires approval.
- step 2 and
Patterns worth considering
- Setup checklists, not tours. Some products show "3 of 5 done" with each step's own button, not a linear walk. The panel could show the goals as a checklist above the step.
- The guide as a second way in. "Set me up" over MCP starts the tour at the first unmet goal. The guide points at each button and never presses one, as with Simulation today.
- First run. On first launch with nothing set up, open the setup tour (c137 inventory row 23, welcome / first run), not New to Qpoint.
Open for Tyler
- What does
config.yamlcarry that says a plane is expected? - Can the app start or restart qcontrol?
- Connect's credential exchange (c131 D13, c134 D8).