[{"data":1,"prerenderedAt":795},["ShallowReactive",2],{"$fpOQTDkSFGbAO1cKh1HKuO5pyaT4vymfL-M987OiPHSA":3},{"newThing":4,"project":5,"cycle":9,"sections":25,"threads":752,"otherDocs":753,"documents":755,"images":757,"archiveItems":792,"links":793},"The Config page in the app (design c146 Phases 3–4; qnative c11): gpui-component's editor, qconfig's parser checking every change, an agent's draft the person applies",{"id":6,"label":7,"liveBase":8},"qnative","Qnative (provisional)",null,{"id":10,"num":11,"dir":12,"name":13,"title":14,"focus":15,"status":16,"statusNote":17,"created":18,"completed":8,"mode":19,"report":8,"recordless":20,"thumbnail":21,"imageCount":22,"artifactCount":23,"lastActivity":18,"hasPickup":20,"hasInitialPrompt":24},"c11",11,"c11.config-file","config-file","Config File","The Config page under This machine, and the guide's config tools. An agent reads, checks and proposes the person's `config.yaml`; only the person applies it.","active","opened 2026-11-13 — twin of `design:c146`, its Phases 3–4; first build merged into main 2026-11-13 on Mark's word, beside c10's guide walk; not pushed","2026-11-13","evolution (design's mock, built in the app) and assemblage (gpui-component's editor, qconfig's parser, the guide's server).",false,"\u002Fcycles\u002Fqnative\u002Fc11-app-config-draft-meridian-day90-light.png",5,1,true,[26,40,54,478,675],{"key":27,"title":28,"empty":20,"ast":29},"why","Why",{"type":30,"children":31},"root",[32],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37],{"type":38,"value":39},"text","People will change what the sensor watches, where its events go and what it enforces, and many will ask their agent to do it. Design c146 drew one page for that, with three sources of configuration, and ruled that the agent drafts while the person applies. This cycle builds that page and the agent's half in the app.",{"key":41,"title":42,"empty":20,"ast":43},"outcome","Outcome",{"type":30,"children":44},[45],{"type":33,"tag":34,"props":46,"children":47},{},[48],{"type":33,"tag":49,"props":50,"children":51},"em",{},[52],{"type":38,"value":53},"Open.",{"key":55,"title":56,"empty":20,"ast":57},"extra","What was built",{"type":30,"children":58},[59],{"type":33,"tag":60,"props":61,"children":62},"ul",{},[63,104,341,468],{"type":33,"tag":64,"props":65,"children":66},"li",{},[67,78,80,86,88,94,96,102],{"type":33,"tag":68,"props":69,"children":70},"strong",{},[71],{"type":33,"tag":72,"props":73,"children":75},"code",{"className":74},[],[76],{"type":38,"value":77},"Route::Config",{"type":38,"value":79}," (",{"type":33,"tag":72,"props":81,"children":83},{"className":82},[],[84],{"type":38,"value":85},"\u002Fconfig",{"type":38,"value":87},"), the fourth page under This machine, after Activity. The rail draws it from ",{"type":33,"tag":72,"props":89,"children":91},{"className":90},[],[92],{"type":38,"value":93},"Route::MACHINE",{"type":38,"value":95},", so ",{"type":33,"tag":72,"props":97,"children":99},{"className":98},[],[100],{"type":38,"value":101},"shell.rs",{"type":38,"value":103}," is untouched.",{"type":33,"tag":64,"props":105,"children":106},{},[107,116,118],{"type":33,"tag":68,"props":108,"children":109},{},[110],{"type":33,"tag":72,"props":111,"children":113},{"className":112},[],[114],{"type":38,"value":115},"crates\u002Fapp\u002Fsrc\u002Fconfig\u002F",{"type":38,"value":117},", the store the page and the tools share:\n",{"type":33,"tag":60,"props":119,"children":120},{},[121,203,249],{"type":33,"tag":64,"props":122,"children":123},{},[124,133,135,189,193,195,201],{"type":33,"tag":68,"props":125,"children":126},{},[127],{"type":33,"tag":72,"props":128,"children":130},{"className":129},[],[131],{"type":38,"value":132},"mod.rs",{"type":38,"value":134}," holds:",{"type":33,"tag":60,"props":136,"children":137},{},[138,143,148,153,158,171,176],{"type":33,"tag":64,"props":139,"children":140},{},[141],{"type":38,"value":142},"the file in force and the versions applied;",{"type":33,"tag":64,"props":144,"children":145},{},[146],{"type":38,"value":147},"an agent's draft, or a refused proposal;",{"type":33,"tag":64,"props":149,"children":150},{},[151],{"type":38,"value":152},"a published file's origin;",{"type":33,"tag":64,"props":154,"children":155},{},[156],{"type":38,"value":157},"the mode, which the person picks unless the plane manages the file;",{"type":33,"tag":64,"props":159,"children":160},{},[161,163,169],{"type":38,"value":162},"the three starters (",{"type":33,"tag":72,"props":164,"children":166},{"className":165},[],[167],{"type":38,"value":168},"crates\u002Fapp\u002Fconfig\u002Fstarters\u002F*.yaml",{"type":38,"value":170},", the same files as design's lab);",{"type":33,"tag":64,"props":172,"children":173},{},[174],{"type":38,"value":175},"HQ's fixture file;",{"type":33,"tag":64,"props":177,"children":178},{},[179,181,187],{"type":38,"value":180},"a folded line diff (",{"type":33,"tag":72,"props":182,"children":184},{"className":183},[],[185],{"type":38,"value":186},"similar",{"type":38,"value":188},").",{"type":33,"tag":190,"props":191,"children":192},"br",{},[],{"type":38,"value":194},"It seeds once per source from the sensor's ",{"type":33,"tag":72,"props":196,"children":198},{"className":197},[],[199],{"type":38,"value":200},"\u002Fapi\u002Fconfig",{"type":38,"value":202}," reads. Writes stay in the app (see Open).",{"type":33,"tag":64,"props":204,"children":205},{},[206,215,217,223,225,231,233,239,241,247],{"type":33,"tag":68,"props":207,"children":208},{},[209],{"type":33,"tag":72,"props":210,"children":212},{"className":211},[],[213],{"type":38,"value":214},"check.rs",{"type":38,"value":216}," stands in for qcontrol's check (R6). It uses the parser qconfig uses (serde-saphyr 1.3) and structs that mirror qconfig's schema on qcontrol ",{"type":33,"tag":72,"props":218,"children":220},{"className":219},[],[221],{"type":38,"value":222},"main",{"type":38,"value":224},", with ",{"type":33,"tag":72,"props":226,"children":228},{"className":227},[],[229],{"type":38,"value":230},"deny_unknown_fields",{"type":38,"value":232}," on every section. Each problem comes back with its line, its key path and the nearest valid key. Targets that name an undefined behavior point at the name's line (",{"type":33,"tag":72,"props":234,"children":236},{"className":235},[],[237],{"type":38,"value":238},"Spanned",{"type":38,"value":240},"). ",{"type":33,"tag":72,"props":242,"children":244},{"className":243},[],[245],{"type":38,"value":246},"it_contact",{"type":38,"value":248}," (proposed by c137) is a warning.",{"type":33,"tag":64,"props":250,"children":251},{},[252,261,263,329,332,334,339],{"type":33,"tag":68,"props":253,"children":254},{},[255],{"type":33,"tag":72,"props":256,"children":258},{"className":257},[],[259],{"type":38,"value":260},"tools.rs",{"type":38,"value":262}," holds six tools on the guide's server:",{"type":33,"tag":60,"props":264,"children":265},{},[266,277,287,298,308,318],{"type":33,"tag":64,"props":267,"children":268},{},[269,275],{"type":33,"tag":72,"props":270,"children":272},{"className":271},[],[273],{"type":38,"value":274},"config-state",{"type":38,"value":276},";",{"type":33,"tag":64,"props":278,"children":279},{},[280,286],{"type":33,"tag":72,"props":281,"children":283},{"className":282},[],[284],{"type":38,"value":285},"config-read",{"type":38,"value":276},{"type":33,"tag":64,"props":288,"children":289},{},[290,296],{"type":33,"tag":72,"props":291,"children":293},{"className":292},[],[294],{"type":38,"value":295},"config-reference",{"type":38,"value":297}," (read from qconfig's schema, with qcontrol's real harness ids);",{"type":33,"tag":64,"props":299,"children":300},{},[301,307],{"type":33,"tag":72,"props":302,"children":304},{"className":303},[],[305],{"type":38,"value":306},"config-starters",{"type":38,"value":276},{"type":33,"tag":64,"props":309,"children":310},{},[311,317],{"type":33,"tag":72,"props":312,"children":314},{"className":313},[],[315],{"type":38,"value":316},"config-check",{"type":38,"value":276},{"type":33,"tag":64,"props":319,"children":320},{},[321,327],{"type":33,"tag":72,"props":322,"children":324},{"className":323},[],[325],{"type":38,"value":326},"config-propose",{"type":38,"value":328},".",{"type":33,"tag":190,"props":330,"children":331},{},[],{"type":38,"value":333},"There is no write tool. ",{"type":33,"tag":72,"props":335,"children":337},{"className":336},[],[338],{"type":38,"value":326},{"type":38,"value":340}," checks the document and refuses an invalid one with its problems. While the plane manages the file it refuses and records the refusal. Otherwise it places the draft and opens the page. The server instructions gain a config section.",{"type":33,"tag":64,"props":342,"children":343},{},[344,353,355],{"type":33,"tag":68,"props":345,"children":346},{},[347],{"type":33,"tag":72,"props":348,"children":350},{"className":349},[],[351],{"type":38,"value":352},"pages\u002Fconfig.rs",{"type":38,"value":354}," is the page:\n",{"type":33,"tag":60,"props":356,"children":357},{},[358,366,376,402,410,420,430,440,450,460],{"type":33,"tag":64,"props":359,"children":360},{},[361],{"type":33,"tag":68,"props":362,"children":363},{},[364],{"type":38,"value":365},"The three tiles.",{"type":33,"tag":64,"props":367,"children":368},{},[369,374],{"type":33,"tag":68,"props":370,"children":371},{},[372],{"type":38,"value":373},"Pick a starter",{"type":38,"value":375}," when there's no file.",{"type":33,"tag":64,"props":377,"children":378},{},[379,384,386,392,394,400],{"type":33,"tag":68,"props":380,"children":381},{},[382],{"type":38,"value":383},"The editor:",{"type":38,"value":385}," gpui-component's ",{"type":33,"tag":72,"props":387,"children":389},{"className":388},[],[390],{"type":38,"value":391},"EditorState",{"type":38,"value":393}," (YAML, line numbers, diagnostics on each problem's line) in QGUIkit's ",{"type":33,"tag":72,"props":395,"children":397},{"className":396},[],[398],{"type":38,"value":399},"EditorFrame",{"type":38,"value":401},", with the starters in the tray and Written · Effective.",{"type":33,"tag":64,"props":403,"children":404},{},[405],{"type":33,"tag":68,"props":406,"children":407},{},[408],{"type":38,"value":409},"The check, Apply and Discard edits.",{"type":33,"tag":64,"props":411,"children":412},{},[413,418],{"type":33,"tag":68,"props":414,"children":415},{},[416],{"type":38,"value":417},"An agent's draft:",{"type":38,"value":419}," what you asked, the summary, the check, the folded diff, then Apply or Discard.",{"type":33,"tag":64,"props":421,"children":422},{},[423,428],{"type":33,"tag":68,"props":424,"children":425},{},[426],{"type":38,"value":427},"Applied:",{"type":38,"value":429}," the trace, with Revert.",{"type":33,"tag":64,"props":431,"children":432},{},[433,438],{"type":33,"tag":68,"props":434,"children":435},{},[436],{"type":38,"value":437},"Versions",{"type":38,"value":439}," with Restore.",{"type":33,"tag":64,"props":441,"children":442},{},[443,448],{"type":33,"tag":68,"props":444,"children":445},{},[446],{"type":38,"value":447},"Managed:",{"type":38,"value":449}," HQ's file, read-only, and a refused proposal.",{"type":33,"tag":64,"props":451,"children":452},{},[453,458],{"type":33,"tag":68,"props":454,"children":455},{},[456],{"type":38,"value":457},"From a published file:",{"type":38,"value":459}," an address or the library, shown and checked, then Use this file, which is written with its origin. Check for changes.",{"type":33,"tag":64,"props":461,"children":462},{},[463],{"type":33,"tag":68,"props":464,"children":465},{},[466],{"type":38,"value":467},"Ask your agent.",{"type":33,"tag":64,"props":469,"children":470},{},[471,476],{"type":33,"tag":68,"props":472,"children":473},{},[474],{"type":38,"value":475},"The app map",{"type":38,"value":477}," gains the Config page and its nine regions. \"edit my config file\" finds it.",{"key":55,"title":479,"empty":20,"ast":480},"Tests",{"type":30,"children":481},[482],{"type":33,"tag":60,"props":483,"children":484},{},[485,528,614,627],{"type":33,"tag":64,"props":486,"children":487},{},[488,490],{"type":38,"value":489},"7 checker unit tests:\n",{"type":33,"tag":60,"props":491,"children":492},{},[493,498,503,508,513,518,523],{"type":33,"tag":64,"props":494,"children":495},{},[496],{"type":38,"value":497},"the starters and HQ's file pass;",{"type":33,"tag":64,"props":499,"children":500},{},[501],{"type":38,"value":502},"an unknown key gives its line, path and nearest key;",{"type":33,"tag":64,"props":504,"children":505},{},[506],{"type":38,"value":507},"a missing behavior points at its name;",{"type":33,"tag":64,"props":509,"children":510},{},[511],{"type":38,"value":512},"a proposed key warns;",{"type":33,"tag":64,"props":514,"children":515},{},[516],{"type":38,"value":517},"broken YAML gives a line;",{"type":33,"tag":64,"props":519,"children":520},{},[521],{"type":38,"value":522},"an empty file passes;",{"type":33,"tag":64,"props":524,"children":525},{},[526],{"type":38,"value":527},"the effective view reads.",{"type":33,"tag":64,"props":529,"children":530},{},[531,533],{"type":38,"value":532},"8 story tests:\n",{"type":33,"tag":60,"props":534,"children":535},{},[536,541,553,558,563,568,573,606],{"type":33,"tag":64,"props":537,"children":538},{},[539],{"type":38,"value":540},"the file in force as v2;",{"type":33,"tag":64,"props":542,"children":543},{},[544,546,552],{"type":38,"value":545},"Pick a starter on ",{"type":33,"tag":72,"props":547,"children":549},{"className":548},[],[550],{"type":38,"value":551},"fresh",{"type":38,"value":276},{"type":33,"tag":64,"props":554,"children":555},{},[556],{"type":38,"value":557},"the draft shown, with nothing applied;",{"type":33,"tag":64,"props":559,"children":560},{},[561],{"type":38,"value":562},"managed and read-only, with the refusal;",{"type":33,"tag":64,"props":564,"children":565},{},[566],{"type":38,"value":567},"the library in published mode;",{"type":33,"tag":64,"props":569,"children":570},{},[571],{"type":38,"value":572},"the draft checks clean on every world with a file;",{"type":33,"tag":64,"props":574,"children":575},{},[576,589,591,597,599,604],{"type":33,"tag":68,"props":577,"children":578},{},[579,581,587],{"type":38,"value":580},"an agent proposing through ",{"type":33,"tag":72,"props":582,"children":584},{"className":583},[],[585],{"type":38,"value":586},"guide::call",{"type":38,"value":588},":",{"type":38,"value":590}," the invalid document refused with \"did you mean ",{"type":33,"tag":72,"props":592,"children":594},{"className":593},[],[595],{"type":38,"value":596},"plugins",{"type":38,"value":598},"\", the valid one shown as a draft, and ",{"type":33,"tag":72,"props":600,"children":602},{"className":601},[],[603],{"type":38,"value":274},{"type":38,"value":605}," still at v2;",{"type":33,"tag":64,"props":607,"children":608},{},[609],{"type":33,"tag":68,"props":610,"children":611},{},[612],{"type":38,"value":613},"a proposal refused over the plane.",{"type":33,"tag":64,"props":615,"children":616},{},[617,619,625],{"type":38,"value":618},"The round-trip route test, and the app map test (24 pages, ",{"type":33,"tag":72,"props":620,"children":622},{"className":621},[],[623],{"type":38,"value":624},"config",{"type":38,"value":626}," regions, and search finds the page).",{"type":33,"tag":64,"props":628,"children":629},{},[630,632,638,640,646,647,653,654,660,661,667,668,674],{"type":38,"value":631},"Six stories: ",{"type":33,"tag":72,"props":633,"children":635},{"className":634},[],[636],{"type":38,"value":637},"app-config",{"type":38,"value":639},", ",{"type":33,"tag":72,"props":641,"children":643},{"className":642},[],[644],{"type":38,"value":645},"-no-file",{"type":38,"value":639},{"type":33,"tag":72,"props":648,"children":650},{"className":649},[],[651],{"type":38,"value":652},"-draft",{"type":38,"value":639},{"type":33,"tag":72,"props":655,"children":657},{"className":656},[],[658],{"type":38,"value":659},"-managed",{"type":38,"value":639},{"type":33,"tag":72,"props":662,"children":664},{"className":663},[],[665],{"type":38,"value":666},"-managed-refused",{"type":38,"value":639},{"type":33,"tag":72,"props":669,"children":671},{"className":670},[],[672],{"type":38,"value":673},"-published",{"type":38,"value":328},{"key":55,"title":676,"empty":20,"ast":677},"Open",{"type":30,"children":678},[679],{"type":33,"tag":60,"props":680,"children":681},{},[682,700,717,727,737,747],{"type":33,"tag":64,"props":683,"children":684},{},[685,690,692,698],{"type":33,"tag":68,"props":686,"children":687},{},[688],{"type":38,"value":689},"Writes to disk.",{"type":38,"value":691}," On a real sensor, Apply stays in the app. Who may write ",{"type":33,"tag":72,"props":693,"children":695},{"className":694},[],[696],{"type":38,"value":697},"config.yaml",{"type":38,"value":699}," while the monitor runs elevated, and whether a changed file is picked up without a restart, are Kamal's questions (c3 Guide 05).",{"type":33,"tag":64,"props":701,"children":702},{},[703,708,710,715],{"type":33,"tag":68,"props":704,"children":705},{},[706],{"type":38,"value":707},"qcontrol's own check",{"type":38,"value":709}," (R6) is an ask that goes with c131 D17's routes. Until then, ",{"type":33,"tag":72,"props":711,"children":713},{"className":712},[],[714],{"type":38,"value":214},{"type":38,"value":716}," stands in.",{"type":33,"tag":64,"props":718,"children":719},{},[720,725],{"type":33,"tag":68,"props":721,"children":722},{},[723],{"type":38,"value":724},"YAML colouring.",{"type":38,"value":726}," The editor draws YAML without colours in this build. The language may need gpui-component's tree-sitter feature. R8 said defaults first.",{"type":33,"tag":64,"props":728,"children":729},{},[730,735],{"type":33,"tag":68,"props":731,"children":732},{},[733],{"type":38,"value":734},"Fetching any https address",{"type":38,"value":736}," comes with the docs site's library. For now the library's three addresses resolve to the bundled starters, and any other address says so.",{"type":33,"tag":64,"props":738,"children":739},{},[740,745],{"type":33,"tag":68,"props":741,"children":742},{},[743],{"type":38,"value":744},"C9:",{"type":38,"value":746}," what happens when an agent is refused on a managed machine is for Mark Peterson. The first pass refuses and says what would need to change.",{"type":33,"tag":64,"props":748,"children":749},{},[750],{"type":38,"value":751},"Not built yet: the Help › Getting started connect line (Q5), and the stories for the editor's own states (a starter loaded, invalid edits). Those states are covered by the unit tests and the lab captures.",[],[754],"initial-prompt.md",[756],{"file":754,"title":14},[758,769,775,780,786],{"src":759,"kind":760,"order":761,"caption":762,"thread":763,"capturedAt":766,"subject":767,"route":768},"\u002Fcycles\u002Fqnative\u002Fc11-app-config-meridian-day90-light.png","hero",256,"Edit here on meridian-day90: the world's config.yaml (v2, live) in gpui-component's editor, the starters in the tray, checked by qcontrol (the stand-in, R6).",{"id":764,"label":765,"date":18},"c11-config","The Config page in the app, per state (design c146 Phases 3–4)","2026-11-13T18:27:54.014Z","native\u002Fapp-config","\u002Fpages\u002Fnative\u002Fconfig",{"src":770,"kind":760,"order":771,"caption":772,"thread":773,"capturedAt":766,"subject":774,"route":768},"\u002Fcycles\u002Fqnative\u002Fc11-app-config-no-file-fresh-light.png",257,"No file on fresh: the stock document is in force, and the page opens on Pick a starter (Q3).",{"id":764,"label":765,"date":18},"native\u002Fapp-config-no-file",{"src":21,"kind":760,"order":776,"caption":777,"thread":778,"capturedAt":766,"subject":779,"route":768},258,"Claude Code's draft (R4, R7): what was asked, the summary, the check, the folded diff, Apply or Discard. The agent can't apply it.",{"id":764,"label":765,"date":18},"native\u002Fapp-config-draft",{"src":781,"kind":760,"order":782,"caption":783,"thread":784,"capturedAt":766,"subject":785,"route":768},"\u002Fcycles\u002Fqnative\u002Fc11-app-config-managed-refused-meridian-day90-light.png",259,"Over the plane: HQ's file, read-only; an agent's proposal refused (C9's first pass) with the change it would need.",{"id":764,"label":765,"date":18},"native\u002Fapp-config-managed-refused",{"src":787,"kind":760,"order":788,"caption":789,"thread":790,"capturedAt":766,"subject":791,"route":768},"\u002Fcycles\u002Fqnative\u002Fc11-app-config-published-meridian-day90-light.png",260,"From a published file: an address, or Qpoint's library with what each file is for. Fetched once (R1).",{"id":764,"label":765,"date":18},"native\u002Fapp-config-published",[],[794],{"route":768,"href":8},1794599422854]