[{"data":1,"prerenderedAt":1395},["ShallowReactive",2],{"$fQuTX4MBHy4uhtFKoHQehnhGu-kwA_6vl42Mr0t9Y7iU":3},{"newThing":4,"project":5,"cycle":9,"sections":25,"threads":1356,"otherDocs":1357,"documents":1359,"images":1366,"archiveItems":1391,"links":1392},"The cycles and gates of the native app program",{"id":6,"label":7,"liveBase":8},"design","Design",null,{"id":10,"num":11,"dir":12,"name":13,"title":14,"focus":15,"status":16,"statusNote":8,"created":17,"completed":8,"mode":18,"report":8,"recordless":19,"thumbnail":20,"imageCount":21,"artifactCount":22,"lastActivity":23,"hasPickup":19,"hasInitialPrompt":24},"c130",130,"c130.native-app","native-app","Native App (program)","The 2026-11-05 roadmap pivot, run as a design program. qdash leaves qcontrol. A native desktop app (GPUI Kit, carrying the tray) becomes priority one, followed by the control plane as a self-hostable web app. This cycle holds the roadmap, the GPUI ecosystem primer for designers and builders, the proposed shape of the native app, and the gates for the cycles it spawns: c131 Native App V1, c132 Native Design Prototyping, c133 Remediation Training, c134 Control Plane Web App, c135 Component Cleanup; since the 2026-11-09 rulings also c136 Mechanic Access, c137 App Messaging (overseer and citizen), and c0 Call My Name, the naming cycle in the app's own repo (`..\u002Fqnative`, provisional name).","active","2026-11-09","alchemy (a new framework and a new platform) → assemblage (the pages, the data interface and the layer already exist; the work is composing them into a native form and a self-hosted one).",false,"\u002Fcycles\u002Fdesign\u002Fc130-sketch-program-map.png",4,3,"2026-11-13",true,[26,129,214,369,1208],{"key":27,"title":28,"empty":19,"ast":29},"why","Why",{"type":30,"children":31},"root",[32,48,60,72,77,82,87],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37,40,46],{"type":38,"value":39},"text","On 2026-11-05 Tyler Flint proposed moving the dashboard out of qcontrol as a product, not just as a project: ",{"type":33,"tag":41,"props":42,"children":43},"em",{},[44],{"type":38,"value":45},"\"the control plane is something you connect to, Qcontrol is the thing you deploy.\"",{"type":38,"value":47}," Bundling the web UI into the sensor costs memory and credibility. With Cisco the team had to open the task manager and show under 1% of a core and under 30 MB of RAM, and had to turn the dashboard off to do it.",{"type":33,"tag":34,"props":49,"children":50},{},[51,53,58],{"type":38,"value":52},"What replaces it on the endpoint is a native desktop app, purpose-built for the local machine: diagnostics (is it on, what is the effective config, how much CPU and RAM, which workers and plugins, the logs), the event viewer and audit log, and the inventory of what was found (harnesses, skills, plugins, sessions, MCP servers). qcontrol will have a SQLite behind it locally, and the app reads it. When the endpoint is connected to a control plane, the app says so plainly and the configuration is read-only. Tyler put three things in scope: the tray, the desktop app, and maybe notifications (undecided: ",{"type":33,"tag":41,"props":54,"children":55},{},[56],{"type":38,"value":57},"\"I just don't know if we want that in people's faces or not\"",{"type":38,"value":59},"). The app can also be the way an endpoint connects to a control plane, with an OAuth or Slack-style sign-in. He called the native app the leading candidate for the first shippable release, ahead of the control plane.",{"type":33,"tag":34,"props":61,"children":62},{},[63,65,70],{"type":38,"value":64},"The framework is GPUI, from the Zed team, through GPUI Kit (Tyler: ",{"type":33,"tag":41,"props":66,"children":67},{},[68],{"type":38,"value":69},"\"we'll probably use GPUI kit, not GPUI\"",{"type":38,"value":71},"). The claims that GPUI is the Electron killer and that Discord and Spotify rebuilt on it are relayed and unverified; the primer checks them.",{"type":33,"tag":34,"props":73,"children":74},{},[75],{"type":38,"value":76},"The control plane becomes a web app that is offered both as SaaS and as a self-hosted Docker image. Kamal will repurpose the Pulse backend (the one behind app.qpoint.io) with a new data model, drop Firebase (it can't be self-hosted), and run on Postgres and ClickHouse. The UI is the qdash pages we have been building. It is API first, so the native app and the web app talk to the same thing. SaaS hardening will not block customers starting self-hosted (Rob).",{"type":33,"tag":34,"props":78,"children":79},{},[80],{"type":38,"value":81},"Mark Parson's directives in the initial prompt set the design posture: use native UI before inventing anything; be sure there isn't already a piece of UI for it; implement the brand in GPUI Kit, with a Qpoint flavor that is subtle to non-existent at first; prepare for two outcomes (A: attach to the engineers' app at the UI layer; B: build V1 ourselves as a simple port of our work and hand it over), leaning B, and present our V1 as an option at kick-off; keep synthetic data out of the app's way with one switch (working name DataNozzle: synthetic reads a standard store, real reads the provided API); keep the prototype → experiment → refine → push pattern that design runs today; and research the new ecosystem (MCP servers, skills, tools, docs, demos, videos) so both designers and builders know the system they are working in.",{"type":33,"tag":34,"props":83,"children":84},{},[85],{"type":38,"value":86},"Mark Peterson parked an idea that is the seed of a cycle: give end users local feedback when qcontrol enforces a policy, with a path to contact IT. Mark Parson's prompt extends it: censures, notices from HQ, and remediation training with proof of correction in the audit log (→ c133).",{"type":33,"tag":34,"props":88,"children":89},{},[90,96,100],{"type":33,"tag":91,"props":92,"children":95},"img",{"alt":93,"src":94},"The three apps and the plane","\u002Fcycles\u002Fdesign\u002Fc130-sketch-topology.png",[],{"type":33,"tag":91,"props":97,"children":99},{"alt":98,"src":20},"The program map",[],{"type":33,"tag":41,"props":101,"children":102},{},[103,105,112,114,120,122,127],{"type":38,"value":104},"Sketches: ",{"type":33,"tag":106,"props":107,"children":109},"a",{"href":108},"\u002Fcycles\u002Fdesign\u002Fsketches\u002Fc130-topology",[110],{"type":38,"value":111},"the topology",{"type":38,"value":113}," and ",{"type":33,"tag":106,"props":115,"children":117},{"href":116},"\u002Fcycles\u002Fdesign\u002Fsketches\u002Fc130-program-map",[118],{"type":38,"value":119},"the program map",{"type":38,"value":121},", drawn 2026-11-10 in the design system; all sketches: ",{"type":33,"tag":106,"props":123,"children":125},{"href":124},"\u002Fcycles\u002Fdesign\u002Fsketches",[126],{"type":38,"value":124},{"type":38,"value":128},".",{"key":130,"title":131,"empty":19,"ast":132},"objective","Objective",{"type":30,"children":133},[134,139,209],{"type":33,"tag":34,"props":135,"children":136},{},[137],{"type":38,"value":138},"Done for the program cycle means:",{"type":33,"tag":140,"props":141,"children":142},"ol",{},[143,172,189,199],{"type":33,"tag":144,"props":145,"children":146},"li",{},[147,153,155,162,164,170],{"type":33,"tag":148,"props":149,"children":150},"strong",{},[151],{"type":38,"value":152},"The primer",{"type":38,"value":154}," (",{"type":33,"tag":156,"props":157,"children":159},"code",{"className":158},[],[160],{"type":38,"value":161},"research\u002F",{"type":38,"value":163},"): an educational overview of GPUI, GPUI Kit and Native Shell for two readers, designers and builders. What each is, what it gives us for free, what it does not do (tray, notifications, packaging, auto-update, accessibility, fonts), the platform realities on macOS, Windows and Linux, the agent-facing resources (skills, ",{"type":33,"tag":156,"props":165,"children":167},{"className":166},[],[168],{"type":38,"value":169},"llms-full.txt",{"type":38,"value":171},", MCP servers if any, docs, demos, videos), and the claims checked. Readable on the design site through the cycle doc route.",{"type":33,"tag":144,"props":173,"children":174},{},[175,180,181,187],{"type":33,"tag":148,"props":176,"children":177},{},[178],{"type":38,"value":179},"The shape",{"type":38,"value":154},{"type":33,"tag":156,"props":182,"children":184},{"className":183},[],[185],{"type":38,"value":186},"shape.md",{"type":38,"value":188},"): a proposal for the native app. The app map, the tray, the connect-to-control-plane flow, read-only when connected, the data switch, how it is conversant with the web app (messaging, confirmations, training links), and the budget (CPU, RAM, disk) it must respect. With the decisions Mark rules (D1–D10 in the plan) and the questions for Tyler's requirements working session (Q1–Q10).",{"type":33,"tag":144,"props":190,"children":191},{},[192,197],{"type":33,"tag":148,"props":193,"children":194},{},[195],{"type":38,"value":196},"The children",{"type":38,"value":198},", created with Stage 1 prompts, plans and (at Mark's request) CYCLE.md files, each kicked off on its own gate: c131–c137 here, c0 in the app's repo (see Key Changes).",{"type":33,"tag":144,"props":200,"children":201},{},[202,207],{"type":33,"tag":148,"props":203,"children":204},{},[205],{"type":38,"value":206},"The kick-off pitch",{"type":38,"value":208},": our V1 (c131) presented to the engineers as an option, with the primer and the shape behind it.",{"type":33,"tag":34,"props":210,"children":211},{},[212],{"type":38,"value":213},"Done also means the program's record stays here: which gate opened when, which child closed, and what changed in the roadmap.",{"key":215,"title":216,"empty":19,"ast":217},"scope","Scope",{"type":30,"children":218},[219],{"type":33,"tag":220,"props":221,"children":222},"ul",{},[223,261,277,287,338],{"type":33,"tag":144,"props":224,"children":225},{},[226,231,233,239,240,246,248,253,254,259],{"type":33,"tag":148,"props":227,"children":228},{},[229],{"type":38,"value":230},"Cycle docs:",{"type":38,"value":232}," ",{"type":33,"tag":156,"props":234,"children":236},{"className":235},[],[237],{"type":38,"value":238},"cycles\u002Fc130.native-app\u002F",{"type":38,"value":154},{"type":33,"tag":156,"props":241,"children":243},{"className":242},[],[244],{"type":38,"value":245},"plan.md",{"type":38,"value":247},", ",{"type":33,"tag":156,"props":249,"children":251},{"className":250},[],[252],{"type":38,"value":161},{"type":38,"value":247},{"type":33,"tag":156,"props":255,"children":257},{"className":256},[],[258],{"type":38,"value":186},{"type":38,"value":260},", the pitch, thread prompt\u002Fplan pairs)",{"type":33,"tag":144,"props":262,"children":263},{},[264,269,271],{"type":33,"tag":148,"props":265,"children":266},{},[267],{"type":38,"value":268},"Design site:",{"type":38,"value":270}," nothing new to build; the primer and the shape render through ",{"type":33,"tag":156,"props":272,"children":274},{"className":273},[],[275],{"type":38,"value":276},"\u002Fcycles\u002Fdesign\u002Fc130\u002Fdoc\u002F\u003Cpath>",{"type":33,"tag":144,"props":278,"children":279},{},[280,285],{"type":33,"tag":148,"props":281,"children":282},{},[283],{"type":38,"value":284},"Children:",{"type":38,"value":286}," c131–c135, each with its own directory and plan",{"type":33,"tag":144,"props":288,"children":289},{},[290,295,296,302,303,309,310,316,317,323,325,331,332],{"type":33,"tag":148,"props":291,"children":292},{},[293],{"type":38,"value":294},"Sister projects read, not changed:",{"type":38,"value":232},{"type":33,"tag":156,"props":297,"children":299},{"className":298},[],[300],{"type":38,"value":301},"..\u002Fqcontrol",{"type":38,"value":154},{"type":33,"tag":156,"props":304,"children":306},{"className":305},[],[307],{"type":38,"value":308},"crates\u002Fqtray",{"type":38,"value":247},{"type":33,"tag":156,"props":311,"children":313},{"className":312},[],[314],{"type":38,"value":315},"crates\u002Fqdash",{"type":38,"value":247},{"type":33,"tag":156,"props":318,"children":320},{"className":319},[],[321],{"type":38,"value":322},"crates\u002Fqupdate",{"type":38,"value":324},"), ",{"type":33,"tag":156,"props":326,"children":328},{"className":327},[],[329],{"type":38,"value":330},"..\u002Fapp.qpoint.io",{"type":38,"value":247},{"type":33,"tag":156,"props":333,"children":335},{"className":334},[],[336],{"type":38,"value":337},"..\u002Fmarket-analyst\u002Fsessions\u002F2026-11-05-1b21a3ce.md",{"type":33,"tag":144,"props":339,"children":340},{},[341,346],{"type":33,"tag":148,"props":342,"children":343},{},[344],{"type":38,"value":345},"Out:",{"type":33,"tag":220,"props":347,"children":348},{},[349,354,359,364],{"type":33,"tag":144,"props":350,"children":351},{},[352],{"type":38,"value":353},"any code (c131)",{"type":33,"tag":144,"props":355,"children":356},{},[357],{"type":38,"value":358},"the web app (c134) and the layer (c135)",{"type":33,"tag":144,"props":360,"children":361},{},[362],{"type":38,"value":363},"pricing and packaging tiers from the same session (Rob's doc)",{"type":33,"tag":144,"props":365,"children":366},{},[367],{"type":38,"value":368},"mobile (parked by the session)",{"key":370,"title":371,"empty":19,"ast":372},"key-changes","Key Changes",{"type":30,"children":373},[374],{"type":33,"tag":220,"props":375,"children":376},{},[377,490,612,648,689,885,903,920,940,1004,1065,1081],{"type":33,"tag":144,"props":378,"children":379},{},[380,385],{"type":33,"tag":148,"props":381,"children":382},{},[383],{"type":38,"value":384},"kick-off (2026-11-09):",{"type":33,"tag":220,"props":386,"children":387},{},[388,393,437,465,475,480,485],{"type":33,"tag":144,"props":389,"children":390},{},[391],{"type":38,"value":392},"Cycle created from Mark's initial prompt, which asked for several cycles so each agent keeps a clean context.",{"type":33,"tag":144,"props":394,"children":395},{},[396,398,404,406,411,413,419,421,427,429,435],{"type":38,"value":397},"Read: the 2026-11-05 session digest and transcript, the qdash UI's data-interface bible (its ",{"type":33,"tag":156,"props":399,"children":401},{"className":400},[],[402],{"type":38,"value":403},"Transport",{"type":38,"value":405}," pattern is the DataNozzle idea already), ",{"type":33,"tag":156,"props":407,"children":409},{"className":408},[],[410],{"type":38,"value":308},{"type":38,"value":412}," (macOS only today: ",{"type":33,"tag":156,"props":414,"children":416},{"className":415},[],[417],{"type":38,"value":418},"tray-icon",{"type":38,"value":420}," + ",{"type":33,"tag":156,"props":422,"children":424},{"className":423},[],[425],{"type":38,"value":426},"tao",{"type":38,"value":428}," + AppKit, a passive viewer over monitor inventory with click-to-tap), the qdash Rust API (38 ",{"type":33,"tag":156,"props":430,"children":432},{"className":431},[],[433],{"type":38,"value":434},"\u002Fapi\u002F*",{"type":38,"value":436}," routes), app.qpoint.io (Nuxt 4 SPA, Pinia, Firebase auth and Firestore, Pulse API, SAML routes), and the two framework sites.",{"type":33,"tag":144,"props":438,"children":439},{},[440,442,447,449,455,457,463],{"type":38,"value":441},"Facts recorded in ",{"type":33,"tag":156,"props":443,"children":445},{"className":444},[],[446],{"type":38,"value":245},{"type":38,"value":448}," §Facts: GPUI Kit 0.9.1 by Longbridge on Zed's GPUI, Apache-2.0, three layers (gpui-component, gpui-base, gpui-shell), semantic theme tokens, headless UI tests, AccessKit, wasm builds, a ",{"type":33,"tag":156,"props":450,"children":452},{"className":451},[],[453],{"type":38,"value":454},"\u002Fskills",{"type":38,"value":456}," page and ",{"type":33,"tag":156,"props":458,"children":460},{"className":459},[],[461],{"type":38,"value":462},"\u002Fllms-full.txt",{"type":38,"value":464},"; Native Shell (TSX over a Rust core, native views per platform, GPUI as a target, embeddable in GPUI Kit apps, signed runtime modules). Neither landing page mentions tray icons, notifications or auto-update; that is the first research question.",{"type":33,"tag":144,"props":466,"children":467},{},[468,473],{"type":33,"tag":156,"props":469,"children":471},{"className":470},[],[472],{"type":38,"value":245},{"type":38,"value":474}," written: the program map, four gates, c130's own Phases 0–4, decisions D1–D10 with defaults, questions Q1–Q10 for Tyler's working session, risks, and patterns to consider.",{"type":33,"tag":144,"props":476,"children":477},{},[478],{"type":38,"value":479},"Children created at Stage 1 (initial prompt quoting Mark's words for that slice, plus a plan): c131 Native App V1, c132 Native Design Prototyping, c133 Remediation Training, c134 Control Plane Web App, c135 Component Cleanup. None kicked off; each plan names its gate.",{"type":33,"tag":144,"props":481,"children":482},{},[483],{"type":38,"value":484},"CYCLES.md lists all six.",{"type":33,"tag":144,"props":486,"children":487},{},[488],{"type":38,"value":489},"Uncommitted. Mark's rulings on D1–D10 and the clarifying questions are next, then Phase 1 (the primer).",{"type":33,"tag":144,"props":491,"children":492},{},[493,498,500,505,507],{"type":33,"tag":148,"props":494,"children":495},{},[496],{"type":38,"value":497},"rulings (2026-11-09):",{"type":38,"value":499}," D1–D10 and the seven clarifying questions walked with Mark in session; the record is ",{"type":33,"tag":156,"props":501,"children":503},{"className":502},[],[504],{"type":38,"value":245},{"type":38,"value":506},"'s Ruling column and Answers.\n",{"type":33,"tag":220,"props":508,"children":509},{},[510,515,542,557,570,583,595,600],{"type":33,"tag":144,"props":511,"children":512},{},[513],{"type":38,"value":514},"Hold: D1 structure, D2 GPUI Kit gpui-component, D3 outcome B, D4 a new sibling repo, D5 tokens-only brand, D7 five pages plus the tray, D10 medium decided in c132.",{"type":33,"tag":144,"props":516,"children":517},{},[518,520,526,527,533,534,540],{"type":38,"value":519},"Changed: D6 three data sources (",{"type":33,"tag":156,"props":521,"children":523},{"className":522},[],[524],{"type":38,"value":525},"synthetic",{"type":38,"value":247},{"type":33,"tag":156,"props":528,"children":530},{"className":529},[],[531],{"type":38,"value":532},"local",{"type":38,"value":247},{"type":33,"tag":156,"props":535,"children":537},{"className":536},[],[538],{"type":38,"value":539},"plane",{"type":38,"value":541},"; a base URL and a standardised credential for the plane); D9 the message channel's ports and bones ship in V1 (sender, receiver, native channels, overseer and citizen). D8 qmap stays a link in V1, conservative on purpose (\"we can't spike usage\"), with the trade-offs to be laid out in the primer and the shape.",{"type":33,"tag":144,"props":543,"children":544},{},[545,547,555],{"type":38,"value":546},"New cycles: c136 Mechanic Access (time-boxed, categorised grants a partner gives Qpoint on their plane) and c137 App Messaging (one schema, the channels, the citizen's control), both at stage 1 with CYCLE.md; c0 \"Call my name\" in the native app's own repo, the naming cycle geared for a Mark–Tyler–agent session (Qplane is already the control plane's public name on ",{"type":33,"tag":106,"props":548,"children":552},{"href":549,"rel":550},"http:\u002F\u002Fwww.qpoint.io",[551],"nofollow",[553],{"type":38,"value":554},"www.qpoint.io",{"type":38,"value":556},").",{"type":33,"tag":144,"props":558,"children":559},{},[560,562,568],{"type":38,"value":561},"The repo: ",{"type":33,"tag":156,"props":563,"children":565},{"className":564},[],[566],{"type":38,"value":567},"..\u002Fqnative",{"type":38,"value":569}," created as a Cargo workspace (provisional directory name); c131 Phase 0 may run beside the primer.",{"type":33,"tag":144,"props":571,"children":572},{},[573,575,581],{"type":38,"value":574},"CYCLE.md written for every child (clarifying question 6); the candidate problem promoted in market-analyst as ",{"type":33,"tag":156,"props":576,"children":578},{"className":577},[],[579],{"type":38,"value":580},"problem:enforcement-without-local-context",{"type":38,"value":582}," (question 7); c133 carries a note only on hard-hat training and Metamythic (question 5).",{"type":33,"tag":144,"props":584,"children":585},{},[586,588,593],{"type":38,"value":587},"Mark added strobe (anomalyco\u002Fstrobe) as the footprint-measuring tool; recorded in ",{"type":33,"tag":156,"props":589,"children":591},{"className":590},[],[592],{"type":38,"value":245},{"type":38,"value":594}," Facts and c131 R7.",{"type":33,"tag":144,"props":596,"children":597},{},[598],{"type":38,"value":599},"The founding docs re-read before drafting (methodology, philosophy, the self-critique, component philosophy, the brand foundation): a name is a problem formulation; a message is a module with purpose and protocol; \"invisible when working, visible when needed\" is the brief for c137 and for our own access in c136.",{"type":33,"tag":144,"props":601,"children":602},{},[603,605,610],{"type":38,"value":604},"Next: Phase 1 (the primer) here, the c131 spike in ",{"type":33,"tag":156,"props":606,"children":608},{"className":607},[],[609],{"type":38,"value":567},{"type":38,"value":611},", c0's session with Tyler.",{"type":33,"tag":144,"props":613,"children":614},{},[615,620,622],{"type":33,"tag":148,"props":616,"children":617},{},[618],{"type":38,"value":619},"rulings, second round (2026-11-09):",{"type":38,"value":621}," Mark confirmed the defaults in c136 and c137, and in c133 with one addition (a training can in theory block access, by default it does not, D9). Ruled Inter as the native app's type, bundled, noted for the degrees of expression the brand type gives (c131 D14). On who mocks native screens: both he and agents, at different times, so the c132 medium must serve both and every page state must end as a captured artifact. The layer takes the waiting-list extractions now, because app.qpoint.io's successor starts from a blank slate (c135 D8). c0: he does an initial pass on the names, the decision is made out in the open in the session, the date is Tyler's; the walk is prepared, not scheduled.\n",{"type":33,"tag":220,"props":623,"children":624},{},[625,636],{"type":33,"tag":144,"props":626,"children":627},{},[628,630,635],{"type":38,"value":629},"Kicked off c134 (Phase 0, the inventory) and c137 (Phases 0–2) in their own sessions; the primer runs in its own session (five of eight files written at this point); the c131 spike started in ",{"type":33,"tag":156,"props":631,"children":633},{"className":632},[],[634],{"type":38,"value":567},{"type":38,"value":128},{"type":33,"tag":144,"props":637,"children":638},{},[639,641,646],{"type":38,"value":640},"Committed: design (the eight cycle directories, CLAUDE.md, CYCLES.md; the primer's ",{"type":33,"tag":156,"props":642,"children":644},{"className":643},[],[645],{"type":38,"value":161},{"type":38,"value":647}," files are left to that session), market-analyst (the promoted problem, the rebuilt index and digests), qnative (initial commit, no remote).",{"type":33,"tag":144,"props":649,"children":650},{},[651,656,658,664,666,671,673,679,681,687],{"type":33,"tag":148,"props":652,"children":653},{},[654],{"type":38,"value":655},"sketches and stories (2026-11-10):",{"type":38,"value":657}," Mark asked that the public record carry visualisations of the structures we are building and the patterns we follow, in the medium of the design system. Built: a sketch kit (",{"type":33,"tag":156,"props":659,"children":661},{"className":660},[],[662],{"type":38,"value":663},"app\u002Fcomponents\u002Fsketch\u002F",{"type":38,"value":665},"), a sketchbook at ",{"type":33,"tag":156,"props":667,"children":669},{"className":668},[],[670],{"type":38,"value":124},{"type":38,"value":672}," with eleven sketches (the topology as a qmap scene, the program map, the app map, the DataNozzle, the design loop, a training, the deployment, the scorecard, a grant, the channel, the naming map), each captured into its cycle's visual record; a hand-assembled story per cycle (",{"type":33,"tag":156,"props":674,"children":676},{"className":675},[],[677],{"type":38,"value":678},"app\u002Fdata\u002Fstories\u002F",{"type":38,"value":680},", the Story tab on every cycle page, drafts not yet reviewed by Mark); a ",{"type":33,"tag":156,"props":682,"children":684},{"className":683},[],[685],{"type":38,"value":686},"## The shape",{"type":38,"value":688}," section in every CYCLE.md (the problem, the core idea, the pieces, the pattern, what stays open); qnative registered in the cycle atlas so c0 and c1 render. The session's work was verified clean first: the primer's eight files, c134's inventory, c137's three phases and lab pages, the spike's six commits with the workspace building and its tests passing. Committed.",{"type":33,"tag":144,"props":690,"children":691},{},[692,697,699,704,706,712,714,720,722],{"type":33,"tag":148,"props":693,"children":694},{},[695],{"type":38,"value":696},"primer (2026-11-09):",{"type":38,"value":698}," Phase 1 written in its own session: eight files in ",{"type":33,"tag":156,"props":700,"children":702},{"className":701},[],[703],{"type":38,"value":161},{"type":38,"value":705}," (README, gpui, gpui-kit, native-shell, platform, agent-tooling, claims, comparison), web reading only, every fact with its URL and the date read, the unverified marked as such; each renders at ",{"type":33,"tag":156,"props":707,"children":709},{"className":708},[],[710],{"type":38,"value":711},"\u002Fcycles\u002Fdesign\u002Fc130\u002Fdoc\u002Fresearch\u002F\u003Cfile>",{"type":38,"value":713},". ",{"type":33,"tag":156,"props":715,"children":717},{"className":716},[],[718],{"type":38,"value":719},"research\u002FREADME.md",{"type":38,"value":721}," carries the one-page summary, the surprises and the open questions for Tyler's session (G2).\n",{"type":33,"tag":220,"props":723,"children":724},{},[725,800,826,861,873],{"type":33,"tag":144,"props":726,"children":727},{},[728,730,736,738,744,746,752,754,760,761,767,769,775,777,783,785,791,793,798],{"type":38,"value":729},"Found: GPUI Kit 0.9.1 (released that morning; weekly releases; renamed from gpui-component on 2026-09-03) pins Longbridge's ",{"type":33,"tag":156,"props":731,"children":733},{"className":732},[],[734],{"type":38,"value":735},"gpui-pre",{"type":38,"value":737}," snapshots because Zed's crates.io ",{"type":33,"tag":156,"props":739,"children":741},{"className":740},[],[742],{"type":38,"value":743},"gpui",{"type":38,"value":745}," froze at 0.2.2 in 2025-10; the docs count five layers, not three; 134 theme roles set from JSON; headless UI tests run on three OSes without a display; AccessKit is wired but no screen-reader run is on record; wasm is \"Showcase only\" on nightly. GPUI has no tray API and Zed closed two PRs for one, including the kit author's; tray, notifications, auto-update, login item, single instance and deep links are crates and our own code, catalogued per OS in ",{"type":33,"tag":156,"props":747,"children":749},{"className":748},[],[750],{"type":38,"value":751},"platform.md",{"type":38,"value":753}," with ",{"type":33,"tag":156,"props":755,"children":757},{"className":756},[],[758],{"type":38,"value":759},"qupdate",{"type":38,"value":113},{"type":33,"tag":156,"props":762,"children":764},{"className":763},[],[765],{"type":38,"value":766},"qtray",{"type":38,"value":768}," read against them. Native Shell 0.4.0 holds D2; its desktop features exist only on unreleased ",{"type":33,"tag":156,"props":770,"children":772},{"className":771},[],[773],{"type":38,"value":774},"main",{"type":38,"value":776},". The comparison and the qmap D8 table rest on the measured figures that exist (Longbridge's own bench: a kit app at 72.7 MB peak on Windows; Tauri and Electron CI figures; one Chrome tab at 76 to 380 MB). Agents get two official skills (",{"type":33,"tag":156,"props":778,"children":780},{"className":779},[],[781],{"type":38,"value":782},"npx skills add longbridge\u002Fgpui-kit",{"type":38,"value":784},"), Context7 indexes the kit, ",{"type":33,"tag":156,"props":786,"children":788},{"className":787},[],[789],{"type":38,"value":790},"gpui-mcp",{"type":38,"value":792}," pins an older ",{"type":33,"tag":156,"props":794,"children":796},{"className":795},[],[797],{"type":38,"value":735},{"type":38,"value":799},", and strobe registers its skill and MCP with opencode, so Claude Code gets them by hand. Claims: Discord's move to GPUI was announced on 2026-11-04 (real, unshipped); Spotify did not; \"Electron killer\" is a blog headline with uncited numbers; GPUI is pre-1.0; Zed \"braked\" GPUI for outsiders in 2026-02 and the framework still moves weekly for Zed.",{"type":33,"tag":144,"props":801,"children":802},{},[803,805,810,812,817,819,824],{"type":38,"value":804},"Surprised: the kit's release the same morning; ",{"type":33,"tag":156,"props":806,"children":808},{"className":807},[],[809],{"type":38,"value":735},{"type":38,"value":811},", not ",{"type":33,"tag":156,"props":813,"children":815},{"className":814},[],[816],{"type":38,"value":743},{"type":38,"value":818},"; no tray in GPUI at all; the kit's requirements page says macOS 15 while Zed's floor is 12; the kit's ",{"type":33,"tag":156,"props":820,"children":822},{"className":821},[],[823],{"type":38,"value":454},{"type":38,"value":825}," page renders empty while skills.sh lists 19 and the repo ships 2; strobe shipped three npm versions in one day and has no GitHub release; Inter's variable file names its family \"Inter Variable\".",{"type":33,"tag":144,"props":827,"children":828},{},[829,831,836,838,844,846,852,853,859],{"type":38,"value":830},"c131 D14 (Inter and Geist Mono, bundled) written into ",{"type":33,"tag":156,"props":832,"children":834},{"className":833},[],[835],{"type":38,"value":751},{"type":38,"value":837}," §9 with the kit's path: ",{"type":33,"tag":156,"props":839,"children":841},{"className":840},[],[842],{"type":38,"value":843},"add_fonts",{"type":38,"value":845}," at startup, ",{"type":33,"tag":156,"props":847,"children":849},{"className":848},[],[850],{"type":38,"value":851},"font.family",{"type":38,"value":113},{"type":33,"tag":156,"props":854,"children":856},{"className":855},[],[857],{"type":38,"value":858},"mono_font.family",{"type":38,"value":860}," in the theme. The \"From the spike\" section is the c131 session's to append.",{"type":33,"tag":144,"props":862,"children":863},{},[864,866,871],{"type":38,"value":865},"Open for Tyler: ",{"type":33,"tag":156,"props":867,"children":869},{"className":868},[],[870],{"type":38,"value":719},{"type":38,"value":872},", fourteen items in three groups: product (the macOS floor, the tray on Windows and Linux and on tray-less GNOME, notifications in or out, the signing accounts and the updater, the accessibility stance, the deep-link scheme, D8 confirmed against its cost table), the spike's measurements, c132's medium.",{"type":33,"tag":144,"props":874,"children":875},{},[876,878,883],{"type":38,"value":877},"The agent-tooling and claims research agent stalled after twelve calls; that part was researched directly. Committed: ",{"type":33,"tag":156,"props":879,"children":881},{"className":880},[],[882],{"type":38,"value":161},{"type":38,"value":884}," and this entry.",{"type":33,"tag":144,"props":886,"children":887},{},[888,893,895,901],{"type":33,"tag":148,"props":889,"children":890},{},[891],{"type":38,"value":892},"2026-11-11:",{"type":38,"value":894}," a ninth cycle joins the program: ",{"type":33,"tag":106,"props":896,"children":898},{"href":897},"..\u002Fc138.developer-mode\u002F",[899],{"type":38,"value":900},"c138 Developer Mode",{"type":38,"value":902},", from Mark's next objective for the native app. It amends D6 and D7 above at the page level (rulings 3 and 2 of its walk) and runs as qnative c3. The program map sketch still shows eight.",{"type":33,"tag":144,"props":904,"children":905},{},[906,911,913,918],{"type":33,"tag":148,"props":907,"children":908},{},[909],{"type":38,"value":910},"2026-11-11, evening:",{"type":38,"value":912}," the open questions across the program walked with Mark in session. D5 amended: our layer drawn on GPUI with our tokens, the kit for the shell (c131 D18). ",{"type":33,"tag":156,"props":914,"children":916},{"className":915},[],[917],{"type":38,"value":186},{"type":38,"value":919}," (Phase 2) ruled to be written now with provisional names by a fresh agent, for acceptance at G1. Kick-offs ruled, each with a fresh agent: c132 (Phase 0 with the named worlds, then the bake-off), c135 (Phases 0–1), c136 (Phase 0), c133 (Phase 0, the brief); c134 waits for the plane engineer's answers. c137's ten questions and c2's two review stops ruled the same evening (their records).",{"type":33,"tag":144,"props":921,"children":922},{},[923,928,929,938],{"type":33,"tag":148,"props":924,"children":925},{},[926],{"type":38,"value":927},"Phase 2 (2026-11-11):",{"type":38,"value":232},{"type":33,"tag":106,"props":930,"children":932},{"href":931},"\u002Fcycles\u002Fdesign\u002Fc130\u002Fdoc\u002Fshape",[933],{"type":33,"tag":156,"props":934,"children":936},{"className":935},[],[937],{"type":38,"value":186},{"type":38,"value":939}," written by a fresh agent from the records as they stood that evening, with provisional names marked for c0: the app map with each page's qdash source and its one-machine cut, the two states and the sentence the app says in each, the DataNozzle with its three sources and the 2026-11-11 amendments, access and credentials with the pointer to c136's grants, the message channel's ports, bones and delivery modes, the budget with the spike's and c2's measured baseline and proposed targets per release, the brand as amended (our layer on GPUI, the kit for the shell), and the qmap trade-off table. D1–D10 with their rulings and every open question (c0, G1, Q1–Q12, the primer's items, Kamal's) are carried in so the document travels alone. Three proposals in it had no prior record and wait on Mark at G1: the local-state sentence, the connected-state rule for the nozzle (the plane for what it owns, local for what only this machine sees), and the budget targets.",{"type":33,"tag":144,"props":941,"children":942},{},[943,948,950,956,957,963,964,970,972,978,980,986,988,994,996,1002],{"type":33,"tag":148,"props":944,"children":945},{},[946],{"type":38,"value":947},"2026-11-11, night:",{"type":38,"value":949}," c132 closed its loop: the medium picked (B, the stories crate, of record; A, the native skin on the design site, to sketch and review), the loop built (the native capture mode, clip and scale on ",{"type":33,"tag":156,"props":951,"children":953},{"className":952},[],[954],{"type":38,"value":955},"capture.mts",{"type":38,"value":247},{"type":33,"tag":156,"props":958,"children":960},{"className":959},[],[961],{"type":38,"value":962},"\u002Fgpui-story",{"type":38,"value":247},{"type":33,"tag":156,"props":965,"children":967},{"className":966},[],[968],{"type":38,"value":969},"process.md",{"type":38,"value":971},") and Status run through it in A (",{"type":33,"tag":106,"props":973,"children":975},{"href":974},"\u002Fcycles\u002Fdesign\u002Fc132\u002Fdoc\u002Fstatus-brief",[976],{"type":38,"value":977},"the brief",{"type":38,"value":979},", eight captures, ",{"type":33,"tag":106,"props":981,"children":983},{"href":982},"\u002Fcycles\u002Fdesign\u002Fc132\u002Fdoc\u002Freview-phase4",[984],{"type":38,"value":985},"review-phase4",{"type":38,"value":987}," with S1–S6 taken by default); the process lives in CLAUDE.md §Native screens; later that night Status went through to B as well (qnative ",{"type":33,"tag":156,"props":989,"children":991},{"className":990},[],[992],{"type":38,"value":993},"273ada7",{"type":38,"value":995},": the page, the route, four stories, the D17 routes answered from a per-world bridge the footer names), so Status is the first page in both media. qnative c2 closed the same night after Claude Code walked the native guide from one prompt (its ",{"type":33,"tag":156,"props":997,"children":999},{"className":998},[],[1000],{"type":38,"value":1001},"harness-run.md",{"type":38,"value":1003},"): c131 Phase 2 is complete. Hand-ons: the Status page to qnative c5 (the loop's push), the violation tour to qnative c4 with c137, D17's routes through c134.",{"type":33,"tag":144,"props":1005,"children":1006},{},[1007,1012,1014,1020,1022,1028,1030,1040,1042,1048,1050,1056,1057,1063],{"type":33,"tag":148,"props":1008,"children":1009},{},[1010],{"type":38,"value":1011},"2026-11-11, Rune:",{"type":38,"value":1013}," Kamal and a colleague asked whether Rune (",{"type":33,"tag":156,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":38,"value":1019},"anomalyco\u002Frune",{"type":38,"value":1021},", a GPU-rendered Rust UI framework from Anomaly, 20 days old) should replace GPUI. Answered in ",{"type":33,"tag":106,"props":1023,"children":1025},{"href":1024},"\u002Fcycles\u002Fdesign\u002Fc130\u002Frune",[1026],{"type":38,"value":1027},"Rune or GPUI?",{"type":38,"value":1029},", a support page with the question, the reasoning step by step, the c2 scorecard as evidence, the workarounds GPUI cost us, and the pros and cons; the written note is ",{"type":33,"tag":106,"props":1031,"children":1033},{"href":1032},"\u002Fcycles\u002Fdesign\u002Fc130\u002Fdoc\u002Fresearch\u002Frune",[1034],{"type":33,"tag":156,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":38,"value":1039},"research\u002Frune.md",{"type":38,"value":1041},". The answer: stay on GPUI Kit for V1 (28 of 30 drawn components at fidelity 3, so the look isn't restricted); watch Rune for its agent tooling and motion; borrow its ",{"type":33,"tag":156,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":38,"value":1047},"--snap",{"type":38,"value":1049},"\u002F",{"type":33,"tag":156,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":38,"value":1055},"--tree",{"type":38,"value":1049},{"type":33,"tag":156,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":38,"value":1062},"--script",{"type":38,"value":1064}," and kit-diff ideas now; look again in 6 to 8 weeks with a one-day spike. Not a ruling.",{"type":33,"tag":144,"props":1066,"children":1067},{},[1068,1073,1075,1079],{"type":33,"tag":148,"props":1069,"children":1070},{},[1071],{"type":38,"value":1072},"2026-11-11, G1 (night):",{"type":38,"value":1074}," Mark accepted ",{"type":33,"tag":106,"props":1076,"children":1077},{"href":931},[1078],{"type":38,"value":186},{"type":38,"value":1080}," at gate G1, with its three new proposals confirmed: the local-state sentence (\"This machine runs on its own. The configuration lives here and you can change it. Here is what was found.\"), the connected-state rule for the nozzle (the plane for what it owns, this machine for what only it sees; Status and Events read both, Config, Connect and the inbox read the plane) and the V1 budget targets as working targets until Tyler sets them at G2. c131's full build and c133 are open. Recorded in c131 as D22.",{"type":33,"tag":144,"props":1082,"children":1083},{},[1084,1089,1091],{"type":33,"tag":148,"props":1085,"children":1086},{},[1087],{"type":38,"value":1088},"2026-11-11 → 11-12, the push:",{"type":38,"value":1090}," around G1 and into 2026-11-12 the children ran in parallel sessions, each recorded in its own cycle:\n",{"type":33,"tag":220,"props":1092,"children":1093},{},[1094,1112,1122,1132,1142,1152,1162,1175],{"type":33,"tag":144,"props":1095,"children":1096},{},[1097,1102,1104,1110],{"type":33,"tag":148,"props":1098,"children":1099},{},[1100],{"type":38,"value":1101},"c138",{"type":38,"value":1103}," (qnative c3): review stop 0 closed; Phases 1–3 built (the stream core, Source, Live Activity); review stop 3 with fourteen calls; ruling 10 on c6's info panel. The private repository ",{"type":33,"tag":156,"props":1105,"children":1107},{"className":1106},[],[1108],{"type":38,"value":1109},"qpoint-io\u002Fqnative",{"type":38,"value":1111}," was created and main pushed (ruling 7).",{"type":33,"tag":144,"props":1113,"children":1114},{},[1115,1120],{"type":33,"tag":148,"props":1116,"children":1117},{},[1118],{"type":38,"value":1119},"c131 Phase 2",{"type":38,"value":1121}," (qnative c5): Status, Sensor and Activity under This machine (D21), captured per world; CI run 17 green on all three systems (2026-11-12).",{"type":33,"tag":144,"props":1123,"children":1124},{},[1125,1130],{"type":33,"tag":148,"props":1126,"children":1127},{},[1128],{"type":38,"value":1129},"c137 Phase 3",{"type":38,"value":1131}," (qnative c4): the messaging slice to review stop 1, Mark's six rulings built.",{"type":33,"tag":144,"props":1133,"children":1134},{},[1135,1140],{"type":33,"tag":148,"props":1136,"children":1137},{},[1138],{"type":38,"value":1139},"c132 Phase 4:",{"type":38,"value":1141}," Status through both media; the bake-off wipes the lab's Status, Sensor and Activity over c5's build.",{"type":33,"tag":144,"props":1143,"children":1144},{},[1145,1150],{"type":33,"tag":148,"props":1146,"children":1147},{},[1148],{"type":38,"value":1149},"c133 Phases 1–5:",{"type":38,"value":1151}," the content model, the authoring pipeline, three pilots, the library and the hand-off to c134 and c131; D10–D37 ruled.",{"type":33,"tag":144,"props":1153,"children":1154},{},[1155,1160],{"type":33,"tag":148,"props":1156,"children":1157},{},[1158],{"type":38,"value":1159},"qnative c6 and c7:",{"type":38,"value":1161}," Panel Toggles merged into main; Web Rail opened.",{"type":33,"tag":144,"props":1163,"children":1164},{},[1165,1167,1173],{"type":38,"value":1166},"What it all costs the machine is drawn on one page, ",{"type":33,"tag":106,"props":1168,"children":1170},{"href":1169},"\u002Fcycles\u002Fdesign\u002Fc138\u002Ffootprint",[1171],{"type":38,"value":1172},"Native App Footprint",{"type":38,"value":1174}," (c138's report, 2026-11-12): every strobe reading from the spike to c5.",{"type":33,"tag":144,"props":1176,"children":1177},{},[1178,1183,1185,1190,1192,1198,1200,1206],{"type":33,"tag":148,"props":1179,"children":1180},{},[1181],{"type":38,"value":1182},"Owed, on Mark's Mac:",{"type":38,"value":1184}," Mark's screenshot of the push's sessions not yet archived is in his local ",{"type":33,"tag":156,"props":1186,"children":1188},{"className":1187},[],[1189],{"type":38,"value":238},{"type":38,"value":1191},", not pushed (the cloud session that wrote this entry could not reach it). Move it to ",{"type":33,"tag":156,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":38,"value":1197},"public\u002Fcycles\u002Fdesign\u002Fc130-the-push-sessions.png",{"type":38,"value":1199}," and put it here, in place of this line: ",{"type":33,"tag":156,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":38,"value":1205},"![The push: the sessions not yet archived](\u002Fcycles\u002Fdesign\u002Fc130-the-push-sessions.png)",{"type":38,"value":1207}," with a one-line caption.",{"key":1209,"title":179,"empty":19,"ast":1210},"extra",{"type":30,"children":1211},[1212,1248,1258,1289,1297,1317,1327,1344],{"type":33,"tag":34,"props":1213,"children":1214},{},[1215,1220,1221,1227,1229,1235,1236,1242,1243],{"type":33,"tag":148,"props":1216,"children":1217},{},[1218],{"type":38,"value":1219},"Documents:",{"type":38,"value":232},{"type":33,"tag":106,"props":1222,"children":1224},{"href":1223},"\u002Fcycles\u002Fdesign\u002Fc130\u002Fdoc\u002Fplan",[1225],{"type":38,"value":1226},"the plan",{"type":38,"value":1228}," · ",{"type":33,"tag":106,"props":1230,"children":1232},{"href":1231},"\u002Fcycles\u002Fdesign\u002Fc130\u002Fdoc\u002Finitial-prompt",[1233],{"type":38,"value":1234},"Mark's prompt",{"type":38,"value":1228},{"type":33,"tag":106,"props":1237,"children":1239},{"href":1238},"\u002Fcycles\u002Fdesign\u002Fc130\u002Fdoc\u002Fresearch\u002FREADME",[1240],{"type":38,"value":1241},"the primer",{"type":38,"value":1228},{"type":33,"tag":106,"props":1244,"children":1245},{"href":931},[1246],{"type":38,"value":1247},"the shape",{"type":33,"tag":34,"props":1249,"children":1250},{},[1251,1256],{"type":33,"tag":148,"props":1252,"children":1253},{},[1254],{"type":38,"value":1255},"The problem.",{"type":38,"value":1257}," The dashboard lived inside the sensor and made it heavier than the sensor's promise; the team decided to split them, and the split needs a program, not a page.",{"type":33,"tag":34,"props":1259,"children":1260},{},[1261,1266,1268,1273,1275,1280,1282,1287],{"type":33,"tag":148,"props":1262,"children":1263},{},[1264],{"type":38,"value":1265},"The core idea.",{"type":38,"value":1267}," Three verbs with one object each: you ",{"type":33,"tag":41,"props":1269,"children":1270},{},[1271],{"type":38,"value":1272},"deploy",{"type":38,"value":1274}," qcontrol, you ",{"type":33,"tag":41,"props":1276,"children":1277},{},[1278],{"type":38,"value":1279},"open",{"type":38,"value":1281}," the native app, you ",{"type":33,"tag":41,"props":1283,"children":1284},{},[1285],{"type":38,"value":1286},"connect",{"type":38,"value":1288}," to the plane. Every structure in this program is one of those objects or the data that moves between them.",{"type":33,"tag":34,"props":1290,"children":1291},{},[1292],{"type":33,"tag":148,"props":1293,"children":1294},{},[1295],{"type":38,"value":1296},"The pieces.",{"type":33,"tag":220,"props":1298,"children":1299},{},[1300,1312],{"type":33,"tag":144,"props":1301,"children":1302},{},[1303,1305,1310],{"type":38,"value":1304},"The sensor (qcontrol, exists) and the native app with the tray (c131, in ",{"type":33,"tag":156,"props":1306,"children":1308},{"className":1307},[],[1309],{"type":38,"value":567},{"type":38,"value":1311},") on the endpoint; the control plane web app (c134) over the Go API, Postgres and ClickHouse (Kamal's) on the plane; the people on each side.",{"type":33,"tag":144,"props":1313,"children":1314},{},[1315],{"type":38,"value":1316},"One data switch with three sources (c131's DataNozzle); one message schema and four ports between the overseer and the citizen (c137); time-boxed grants a partner gives Qpoint (c136); trainings as four things (c133); the loop for mocking native screens (c132); the layer cleaned for the successor app (c135); the names (c0).",{"type":33,"tag":34,"props":1318,"children":1319},{},[1320,1325],{"type":33,"tag":148,"props":1321,"children":1322},{},[1323],{"type":38,"value":1324},"The pattern we follow.",{"type":38,"value":1326}," Forming the problem is the problem (the primer and the shape before the build); design is assemblage (the pages, the bible and the layer already exist; the work is composing them into a native form and a self-hosted one); modularity as purpose plus protocol (every child owns one piece with a clean interface to the whole); early stages loose, later stages ordered (prompts and plans first, CYCLE.md and sketches once ruled).",{"type":33,"tag":34,"props":1328,"children":1329},{},[1330,1335,1337,1342],{"type":33,"tag":148,"props":1331,"children":1332},{},[1333],{"type":38,"value":1334},"What stays open.",{"type":38,"value":1336}," The pitch (G1 closed 2026-11-11 with ",{"type":33,"tag":156,"props":1338,"children":1340},{"className":1339},[],[1341],{"type":38,"value":186},{"type":38,"value":1343}," accepted); Tyler's session (Q1–Q12, outcome A or B); the names; which messages flow in V1.",{"type":33,"tag":34,"props":1345,"children":1346},{},[1347,1349,1354],{"type":38,"value":1348},"Every structure above is drawn: ",{"type":33,"tag":106,"props":1350,"children":1351},{"href":124},[1352],{"type":38,"value":1353},"the sketches",{"type":38,"value":1355},", one page each, captured into the cycles' records on 2026-11-10.",[],[1358,245,186],"initial-prompt.md",[1360,1362,1364],{"file":1358,"title":1361},"Native App",{"file":245,"title":1363},"plan: Native App (program)",{"file":186,"title":1365},"Phase 2: the shape of the native app",[1367,1377,1382,1387],{"src":94,"kind":1368,"order":1369,"caption":1370,"thread":1371,"capturedAt":1375,"subject":1376,"route":108},"hero",0,"What runs where after the roadmap: the sensor and the native app on the endpoint, the control plane with its web app and two databases, and the people on each side.",{"id":1372,"label":1373,"date":1374},"sketches","Sketches — the structures, drawn in the design system","2026-11-10","2026-11-10T15:42:55.947Z","sketch\u002Fc130-topology",{"src":20,"kind":1368,"order":1378,"caption":1379,"thread":1380,"capturedAt":1375,"subject":1381,"route":116},1,"Eight cycles and a naming cycle, the four gates between them, and what each waits on.",{"id":1372,"label":1373,"date":1374},"sketch\u002Fc130-program-map",{"src":1383,"kind":1384,"order":1385,"thread":1386,"capturedAt":1375,"subject":1376,"route":108},"\u002Fcycles\u002Fdesign\u002Fc130-sketch-topology-full.png","full",9000,{"id":1372,"label":1373,"date":1374},{"src":1388,"kind":1384,"order":1389,"thread":1390,"capturedAt":1375,"subject":1381,"route":116},"\u002Fcycles\u002Fdesign\u002Fc130-sketch-program-map-full.png",9001,{"id":1372,"label":1373,"date":1374},[],[1393,1394],{"route":116,"href":116},{"route":108,"href":108},1794599391012]