[{"data":1,"prerenderedAt":1899},["ShallowReactive",2],{"cycle-doc-design-c139-review-1.md":3},{"cycle":4,"project":7,"path":10,"title":11,"toc":12,"ast":20},{"id":5,"title":6},"c139","Updates",{"id":8,"label":9},"design","Design","review-1.md","c139 review 1: the model and the mocks",[13,14,15,16,17,18,19],"What to look at","The calls","Answered (Mark, 2026-11-13, walked)","Tyler's dependencies","Out of scope, named so nothing is lost","For the layer (flagged, not done)","What was and wasn't verified",{"type":21,"children":22},"root",[23,58,98,104,266,295,300,307,317,367,373,399,488,494,504,554,560,570,615,621,647,659,665,675,718,724,741,783,789,807,813,822,843,849,856,879,884,890,930,964,969,1281,1317,1322,1327,1555,1560,1600,1605,1610,1679,1684],{"type":24,"tag":25,"props":26,"children":27},"element","p",{},[28,35,37,42,44,56],{"type":24,"tag":29,"props":30,"children":31},"strong",{},[32],{"type":33,"value":34},"text","Stopped:",{"type":33,"value":36}," 2026-11-11, after Phases 0–3. ",{"type":24,"tag":29,"props":38,"children":39},{},[40],{"type":33,"value":41},"For:",{"type":33,"value":43}," Mark (the calls), Tyler (the dependencies). Nothing is ruled yet; every default below is the plan's proposal (",{"type":24,"tag":45,"props":46,"children":48},"a",{"href":47},"\u002Fcycles\u002Fdesign\u002Fc139\u002Fdoc\u002Fplan",[49],{"type":24,"tag":50,"props":51,"children":53},"code",{"className":52},[],[54],{"type":33,"value":55},"plan.md",{"type":33,"value":57}," D1–D16).",{"type":24,"tag":25,"props":59,"children":60},{},[61,66,68,76,78,84,86,96],{"type":24,"tag":29,"props":62,"children":63},{},[64],{"type":33,"value":65},"Use this file to",{"type":33,"value":67}," rule the eleven calls below, one at a time, each with a recommended default and the capture that shows it, then hand Tyler his six. The model is in ",{"type":24,"tag":45,"props":69,"children":70},{"href":47},[71],{"type":24,"tag":50,"props":72,"children":74},{"className":73},[],[75],{"type":33,"value":55},{"type":33,"value":77}," §The shape and drawn as ",{"type":24,"tag":45,"props":79,"children":81},{"href":80},"\u002Fcycles\u002Fdesign\u002Fsketches\u002Fc139-updates",[82],{"type":33,"value":83},"An update and its states",{"type":33,"value":85},". The reading behind it is ",{"type":24,"tag":45,"props":87,"children":89},{"href":88},"\u002Fcycles\u002Fdesign\u002Fc139\u002Fdoc\u002Fprior-art",[90],{"type":24,"tag":50,"props":91,"children":93},{"className":92},[],[94],{"type":33,"value":95},"prior-art.md",{"type":33,"value":97},": twelve precedents, what we copy and refuse, sixteen questions with defaults.",{"type":24,"tag":99,"props":100,"children":102},"h2",{"id":101},"what-to-look-at",[103],{"type":33,"value":13},{"type":24,"tag":105,"props":106,"children":107},"ul",{},[108,120,131],{"type":24,"tag":109,"props":110,"children":111},"li",{},[112,118],{"type":24,"tag":45,"props":113,"children":115},{"href":114},"\u002Fpages\u002Fnative\u002Fsettings-updates",[116],{"type":33,"value":117},"Settings › Updates",{"type":33,"value":119}," in the native skin. The lab bar sets the world, the era (now or later), whether the release carries qcontrol, and the skip button. The knob row sets the update state. The buttons walk the machine: Update, then downloading, then ready; Restart now, then installed; Check now, then checking, then available.",{"type":24,"tag":109,"props":121,"children":122},{},[123,129],{"type":24,"tag":45,"props":124,"children":126},{"href":125},"\u002Fpages\u002Fnative\u002Fupdates-tray",[127],{"type":33,"value":128},"The tray and the trace",{"type":33,"value":130},": the menu on a desktop, the window's footer in the same state, and every state side by side.",{"type":24,"tag":109,"props":132,"children":133},{},[134,136,142,144,150,152,158,159,165,166,172,173,179,180,186,187,193,194,200,201,207,208,214,215,221,223,229,231,237,238,244,245,250,251,256,258,264],{"type":33,"value":135},"The captures, at 2× and clipped to the window, in the cycle's ",{"type":24,"tag":45,"props":137,"children":139},{"href":138},"\u002Fcycles\u002Fdesign\u002Fc139",[140],{"type":33,"value":141},"visual record",{"type":33,"value":143},". Twelve are of Settings › Updates: ",{"type":24,"tag":50,"props":145,"children":147},{"className":146},[],[148],{"type":33,"value":149},"c139-updates-up-to-date",{"type":33,"value":151},", ",{"type":24,"tag":50,"props":153,"children":155},{"className":154},[],[156],{"type":33,"value":157},"-checking",{"type":33,"value":151},{"type":24,"tag":50,"props":160,"children":162},{"className":161},[],[163],{"type":33,"value":164},"-available",{"type":33,"value":151},{"type":24,"tag":50,"props":167,"children":169},{"className":168},[],[170],{"type":33,"value":171},"-available-skip",{"type":33,"value":151},{"type":24,"tag":50,"props":174,"children":176},{"className":175},[],[177],{"type":33,"value":178},"-downloading",{"type":33,"value":151},{"type":24,"tag":50,"props":181,"children":183},{"className":182},[],[184],{"type":33,"value":185},"-ready",{"type":33,"value":151},{"type":24,"tag":50,"props":188,"children":190},{"className":189},[],[191],{"type":33,"value":192},"-installed",{"type":33,"value":151},{"type":24,"tag":50,"props":195,"children":197},{"className":196},[],[198],{"type":33,"value":199},"-failed",{"type":33,"value":151},{"type":24,"tag":50,"props":202,"children":204},{"className":203},[],[205],{"type":33,"value":206},"-offline",{"type":33,"value":151},{"type":24,"tag":50,"props":209,"children":211},{"className":210},[],[212],{"type":33,"value":213},"-managed",{"type":33,"value":151},{"type":24,"tag":50,"props":216,"children":218},{"className":217},[],[219],{"type":33,"value":220},"-available-later",{"type":33,"value":222}," and ",{"type":24,"tag":50,"props":224,"children":226},{"className":225},[],[227],{"type":33,"value":228},"-policy-later",{"type":33,"value":230},". Four are of the tray: ",{"type":24,"tag":50,"props":232,"children":234},{"className":233},[],[235],{"type":33,"value":236},"c139-tray-ready-ask",{"type":33,"value":151},{"type":24,"tag":50,"props":239,"children":241},{"className":240},[],[242],{"type":33,"value":243},"-ready-auto",{"type":33,"value":151},{"type":24,"tag":50,"props":246,"children":248},{"className":247},[],[249],{"type":33,"value":192},{"type":33,"value":222},{"type":24,"tag":50,"props":252,"children":254},{"className":253},[],[255],{"type":33,"value":199},{"type":33,"value":257},". The last is the sketch, ",{"type":24,"tag":50,"props":259,"children":261},{"className":260},[],[262],{"type":33,"value":263},"c139-sketch-updates",{"type":33,"value":265},".",{"type":24,"tag":25,"props":267,"children":268},{},[269,271,277,279,285,287,293],{"type":33,"value":270},"What the mocks read from the worlds (c132 D6): qcontrol's running version and state (the bridge's ",{"type":24,"tag":50,"props":272,"children":274},{"className":273},[],[275],{"type":33,"value":276},"\u002Fapi\u002Fsensor",{"type":33,"value":278},"), the harness count (",{"type":24,"tag":50,"props":280,"children":282},{"className":281},[],[283],{"type":33,"value":284},"\u002Fapi\u002Finstallations",{"type":33,"value":286},"), and the footer's source line. What is the knob (",{"type":24,"tag":50,"props":288,"children":290},{"className":289},[],[291],{"type":33,"value":292},"app\u002Fdata\u002Fc139-updates-mock.ts",{"type":33,"value":294},", marked): the next release's sidecar, its notes and the history. No release of the app has been cut. The notes for \"0.2.0\" are drafted from what the cycle records say was built (c131 D19–D21, c132 Phase 4, c138 Phase 0), each line citing its record. That is how D7 proposes the real ones get written.",{"type":24,"tag":99,"props":296,"children":298},{"id":297},"the-calls",[299],{"type":33,"value":14},{"type":24,"tag":301,"props":302,"children":304},"h3",{"id":303},"_1-the-preferences-default",[305],{"type":33,"value":306},"1. The preference's default",{"type":24,"tag":25,"props":308,"children":309},{},[310,315],{"type":24,"tag":29,"props":311,"children":312},{},[313],{"type":33,"value":314},"Recommended: Automatically",{"type":33,"value":316},", marked \"(recommended)\", with no first-run question (D1). It installs at quit, at the machine's restart, or when nobody is looking (call 7). Never while the window is open.",{"type":24,"tag":105,"props":318,"children":319},{},[320,331,341],{"type":24,"tag":109,"props":321,"children":322},{},[323,329],{"type":24,"tag":324,"props":325,"children":326},"em",{},[327],{"type":33,"value":328},"Why:",{"type":33,"value":330}," fixes reach partners without anyone acting, and the trace keeps it honest. Zed, VS Code, Firefox, Slack and the Claude app all default to automatic. Sparkle is the exception: it asks on the second launch.",{"type":24,"tag":109,"props":332,"children":333},{},[334,339],{"type":24,"tag":324,"props":335,"children":336},{},[337],{"type":33,"value":338},"The alternative:",{"type":33,"value":340}," Ask me first, while the program is with build partners. They are testers and may be mid-demo. Since nothing restarts while the window is open (R1), the demo risk is already covered.",{"type":24,"tag":109,"props":342,"children":343},{},[344,349,351,357,359,365],{"type":24,"tag":324,"props":345,"children":346},{},[347],{"type":33,"value":348},"See:",{"type":33,"value":350}," ",{"type":24,"tag":50,"props":352,"children":354},{"className":353},[],[355],{"type":33,"value":356},"c139-updates-available",{"type":33,"value":358}," (the tiles), ",{"type":24,"tag":50,"props":360,"children":362},{"className":361},[],[363],{"type":33,"value":364},"c139-updates-ready",{"type":33,"value":366}," (Ask me first).",{"type":24,"tag":301,"props":368,"children":370},{"id":369},"_2-what-invisible-means",[371],{"type":33,"value":372},"2. What \"invisible\" means",{"type":24,"tag":25,"props":374,"children":375},{},[376,381,383,389,391,397],{"type":24,"tag":29,"props":377,"children":378},{},[379],{"type":33,"value":380},"Recommended: a quiet trace in the app, and nothing pushed",{"type":33,"value":382}," (D2, R3). For seven days the footer's version reads ",{"type":24,"tag":50,"props":384,"children":386},{"className":385},[],[387],{"type":33,"value":388},"v0.2.0 · updated",{"type":33,"value":390}," and the tray's version line says ",{"type":24,"tag":50,"props":392,"children":394},{"className":393},[],[395],{"type":33,"value":396},"updated",{"type":33,"value":398},". The Updates page leads with what's new, and the history says how each version came. There is no inbox message, OS notification, toast or dialog.",{"type":24,"tag":105,"props":400,"children":401},{},[402,419,466],{"type":24,"tag":109,"props":403,"children":404},{},[405,409,411,417],{"type":24,"tag":324,"props":406,"children":407},{},[408],{"type":33,"value":328},{"type":33,"value":410}," \"invisible when working\" means nothing interrupts, not that nothing is said. c137's inventory dropped ",{"type":24,"tag":50,"props":412,"children":414},{"className":413},[],[415],{"type":33,"value":416},"app-update",{"type":33,"value":418}," as a message type on these grounds (row 24: \"the updater and the Status page's version line handle it\"). This keeps that ruling.",{"type":24,"tag":109,"props":420,"children":421},{},[422,427],{"type":24,"tag":324,"props":423,"children":424},{},[425],{"type":33,"value":426},"The alternatives:",{"type":24,"tag":105,"props":428,"children":429},{},[430,440],{"type":24,"tag":109,"props":431,"children":432},{},[433,438],{"type":24,"tag":29,"props":434,"children":435},{},[436],{"type":33,"value":437},"(a) No notice at all.",{"type":33,"value":439}," The Claude desktop app's idle \"stealth update\" is traced only in a log line, and the prior art refuses it.",{"type":24,"tag":109,"props":441,"children":442},{},[443,448,450,456,458,464],{"type":24,"tag":29,"props":444,"children":445},{},[446],{"type":33,"value":447},"(b) A quiet inbox entry.",{"type":33,"value":449}," This would be an ",{"type":24,"tag":50,"props":451,"children":453},{"className":452},[],[454],{"type":33,"value":455},"app-updated",{"type":33,"value":457}," kind at ",{"type":24,"tag":50,"props":459,"children":461},{"className":460},[],[462],{"type":33,"value":463},"inbox",{"type":33,"value":465}," delivery in c137's quiet mode, so partners would find the internal notes in their inbox. It reopens c137 row 24 and adds a kind to the inventory.",{"type":24,"tag":109,"props":467,"children":468},{},[469,473,474,480,481,487],{"type":24,"tag":324,"props":470,"children":471},{},[472],{"type":33,"value":348},{"type":33,"value":350},{"type":24,"tag":50,"props":475,"children":477},{"className":476},[],[478],{"type":33,"value":479},"c139-updates-installed",{"type":33,"value":151},{"type":24,"tag":50,"props":482,"children":484},{"className":483},[],[485],{"type":33,"value":486},"c139-tray-installed",{"type":33,"value":265},{"type":24,"tag":301,"props":489,"children":491},{"id":490},"_3-internal-notes-for-build-partners-inline-or-behind-a-link",[492],{"type":33,"value":493},"3. Internal notes for build partners: inline or behind a link",{"type":24,"tag":25,"props":495,"children":496},{},[497,502],{"type":24,"tag":29,"props":498,"children":499},{},[500],{"type":33,"value":501},"Recommended: inline, at partner altitude, with the trail one link away",{"type":33,"value":503}," (D6, D16). The notes give what changed for you, what to try, the sharp edges fixed (it says \"None in this version\" rather than padding) and the ones still known. Each line cites its record. The trail is the cycle records and the commit range.",{"type":24,"tag":105,"props":505,"children":506},{},[507,516,525],{"type":24,"tag":109,"props":508,"children":509},{},[510,514],{"type":24,"tag":324,"props":511,"children":512},{},[513],{"type":33,"value":328},{"type":33,"value":515}," the Updates page is where the person decides, so a link alone sends them away. The notes are five to eight lines, and the full trail would be too long to show inline. VS Code, Sparkle, Zed and TestFlight all show their notes in the app.",{"type":24,"tag":109,"props":517,"children":518},{},[519,523],{"type":24,"tag":324,"props":520,"children":521},{},[522],{"type":33,"value":338},{"type":33,"value":524}," a link only, to the cycle record or to the partner portal, if c62 is built.",{"type":24,"tag":109,"props":526,"children":527},{},[528,532,533,538,539,544,546,552],{"type":24,"tag":324,"props":529,"children":530},{},[531],{"type":33,"value":348},{"type":33,"value":350},{"type":24,"tag":50,"props":534,"children":536},{"className":535},[],[537],{"type":33,"value":356},{"type":33,"value":222},{"type":24,"tag":50,"props":540,"children":542},{"className":541},[],[543],{"type":33,"value":479},{"type":33,"value":545}," (the right column); ",{"type":24,"tag":50,"props":547,"children":549},{"className":548},[],[550],{"type":33,"value":551},"c139-updates-available-later",{"type":33,"value":553}," for the public notes.",{"type":24,"tag":301,"props":555,"children":557},{"id":556},"_4-skip-this-version",[558],{"type":33,"value":559},"4. Skip this version",{"type":24,"tag":25,"props":561,"children":562},{},[563,568],{"type":24,"tag":29,"props":564,"children":565},{},[566],{"type":33,"value":567},"Recommended: none.",{"type":33,"value":569}," \"Not now\" defers until the next quit or the next day, and holding a version back is the organisation's decision, made later from the plane (D8, R6).",{"type":24,"tag":105,"props":571,"children":572},{},[573,582,599],{"type":24,"tag":109,"props":574,"children":575},{},[576,580],{"type":24,"tag":324,"props":577,"children":578},{},[579],{"type":33,"value":328},{"type":33,"value":581}," the sensor is the evidence. A version a person skipped is a gap the organisation did not choose, and supporting several versions across a small cohort costs us. Of the precedents, only Sparkle offers a skip, and it withdraws the skip for critical updates.",{"type":24,"tag":109,"props":583,"children":584},{},[585,589,591,597],{"type":24,"tag":324,"props":586,"children":587},{},[588],{"type":33,"value":338},{"type":33,"value":590}," a skip that a security release overrides, using the later ",{"type":24,"tag":50,"props":592,"children":594},{"className":593},[],[595],{"type":33,"value":596},"min_version",{"type":33,"value":598}," field.",{"type":24,"tag":109,"props":600,"children":601},{},[602,606,607,613],{"type":24,"tag":324,"props":603,"children":604},{},[605],{"type":33,"value":348},{"type":33,"value":350},{"type":24,"tag":50,"props":608,"children":610},{"className":609},[],[611],{"type":33,"value":612},"c139-updates-available-skip",{"type":33,"value":614}," shows what the link would look like.",{"type":24,"tag":301,"props":616,"children":618},{"id":617},"_5-who-owns-release-notes",[619],{"type":33,"value":620},"5. Who owns release notes",{"type":24,"tag":25,"props":622,"children":623},{},[624,629,631,637,639,645],{"type":24,"tag":29,"props":625,"children":626},{},[627],{"type":33,"value":628},"Recommended:",{"type":33,"value":630}," the person who cuts the release owns the facts and decides whether the notes ship (engineering, so Tyler or whoever he names). The draft is generated at release time from the ",{"type":24,"tag":50,"props":632,"children":634},{"className":633},[],[635],{"type":33,"value":636},"\u002Fpartner-digest",{"type":33,"value":638}," sources: Key Changes, sharp edges and commits. Design owns the template and the voice check. The notes ship beside the sidecar as the ",{"type":24,"tag":50,"props":640,"children":642},{"className":641},[],[643],{"type":33,"value":644},"notes",{"type":33,"value":646}," field (D7).",{"type":24,"tag":105,"props":648,"children":649},{},[650],{"type":24,"tag":109,"props":651,"children":652},{},[653,657],{"type":24,"tag":324,"props":654,"children":655},{},[656],{"type":33,"value":426},{"type":33,"value":658}," design writes them, which doesn't scale with CI's cadence. Or product writes the public notes later; that fits the later era, and the partner notes stay with engineering.",{"type":24,"tag":301,"props":660,"children":662},{"id":661},"_6-one-update-or-two",[663],{"type":33,"value":664},"6. One update or two",{"type":24,"tag":25,"props":666,"children":667},{},[668,673],{"type":24,"tag":29,"props":669,"children":670},{},[671],{"type":33,"value":672},"Recommended: one page and one Update for the app and qcontrol, with each binary in its own row and its own state",{"type":33,"value":674}," (D9). After a quiet install, qcontrol's part waits on the page. It installs for every user of the machine, so it needs an administrator's password, and a quiet install never asks for one.",{"type":24,"tag":105,"props":676,"children":677},{},[678,687,697],{"type":24,"tag":109,"props":679,"children":680},{},[681,685],{"type":24,"tag":324,"props":682,"children":683},{},[684],{"type":33,"value":338},{"type":33,"value":686}," the app updates only itself, and qcontrol keeps its own path (qupdate's command line, a package, or the plane later).",{"type":24,"tag":109,"props":688,"children":689},{},[690,695],{"type":24,"tag":324,"props":691,"children":692},{},[693],{"type":33,"value":694},"Depends on:",{"type":33,"value":696}," Tyler's T2 and T4.",{"type":24,"tag":109,"props":698,"children":699},{},[700,704,705,710,712,717],{"type":24,"tag":324,"props":701,"children":702},{},[703],{"type":33,"value":348},{"type":33,"value":350},{"type":24,"tag":50,"props":706,"children":708},{"className":707},[],[709],{"type":33,"value":356},{"type":33,"value":711}," with the knob \"qcontrol in the release: yes\", and ",{"type":24,"tag":50,"props":713,"children":715},{"className":714},[],[716],{"type":33,"value":479},{"type":33,"value":265},{"type":24,"tag":301,"props":719,"children":721},{"id":720},"_7-when-an-automatic-update-may-restart-the-app",[722],{"type":33,"value":723},"7. When an automatic update may restart the app",{"type":24,"tag":25,"props":725,"children":726},{},[727,731,733,739],{"type":24,"tag":29,"props":728,"children":729},{},[730],{"type":33,"value":628},{"type":33,"value":732}," at quit, at the machine's restart, or after ten idle minutes with the window closed to the tray (D3). That last case only runs under a guard (D13): no focus is taken, and nothing is running that wouldn't come back as it was. That rules out a developer stream (c138), a mechanic session (c136), an open ",{"type":24,"tag":50,"props":734,"children":736},{"className":735},[],[737],{"type":33,"value":738},"required",{"type":33,"value":740}," message (c137), a tour and a capture. Ask me first and Manually offer Restart now · When I quit · When I'm away.",{"type":24,"tag":105,"props":742,"children":743},{},[744,753,762],{"type":24,"tag":109,"props":745,"children":746},{},[747,751],{"type":24,"tag":324,"props":748,"children":749},{},[750],{"type":33,"value":328},{"type":33,"value":752}," a tray app is rarely quit, so \"at quit\" alone leaves machines stale for weeks. VS Code guards its idle restart this way. The Claude desktop app's unguarded one cut live sessions.",{"type":24,"tag":109,"props":754,"children":755},{},[756,760],{"type":24,"tag":324,"props":757,"children":758},{},[759],{"type":33,"value":338},{"type":33,"value":761}," at quit and at restart only. Tyler's T6 may narrow it to that anyway.",{"type":24,"tag":109,"props":763,"children":764},{},[765,769,770,775,776,782],{"type":24,"tag":324,"props":766,"children":767},{},[768],{"type":33,"value":348},{"type":33,"value":350},{"type":24,"tag":50,"props":771,"children":773},{"className":772},[],[774],{"type":33,"value":364},{"type":33,"value":151},{"type":24,"tag":50,"props":777,"children":779},{"className":778},[],[780],{"type":33,"value":781},"c139-tray-ready-auto",{"type":33,"value":265},{"type":24,"tag":301,"props":784,"children":786},{"id":785},"_8-the-version-string-in-the-partner-era",[787],{"type":33,"value":788},"8. The version string in the partner era",{"type":24,"tag":25,"props":790,"children":791},{},[792,797,799,805],{"type":24,"tag":29,"props":793,"children":794},{},[795],{"type":33,"value":796},"Recommended: the tag with the 7-character SHA beside it",{"type":33,"value":798}," (",{"type":24,"tag":50,"props":800,"children":802},{"className":801},[],[803],{"type":33,"value":804},"0.2.0 · a3f9e12",{"type":33,"value":806},"), with Copy version info for bug reports (D5). Later, the tag alone, with the SHA kept in Copy version info. This needs every build that reaches partners to carry a tag (T3).",{"type":24,"tag":301,"props":808,"children":810},{"id":809},"_9-where-settings-lives",[811],{"type":33,"value":812},"9. Where Settings lives",{"type":24,"tag":25,"props":814,"children":815},{},[816,820],{"type":24,"tag":29,"props":817,"children":818},{},[819],{"type":33,"value":628},{"type":33,"value":821}," a Settings page at the foot of the rail (⌘,), with five sections: General · Updates · Notifications · Data · Developer. The tray menu gets Check for updates… and Settings… (D11).",{"type":24,"tag":105,"props":823,"children":824},{},[825,834],{"type":24,"tag":109,"props":826,"children":827},{},[828,832],{"type":24,"tag":324,"props":829,"children":830},{},[831],{"type":33,"value":328},{"type":33,"value":833}," one window and one rail. The settings that already exist have homes waiting: c131 D16's world switch under Data, c138's developer toggle under Developer, and c137's delivery controls under Notifications. This cycle mocks Updates only.",{"type":24,"tag":109,"props":835,"children":836},{},[837,841],{"type":24,"tag":324,"props":838,"children":839},{},[840],{"type":33,"value":338},{"type":33,"value":842}," a separate settings window, the macOS convention.",{"type":24,"tag":301,"props":844,"children":846},{"id":845},"_10-ask-me-firsts-clock-and-the-install-that-stopped-updating",[847],{"type":33,"value":848},"10. Ask me first's clock, and the install that stopped updating",{"type":24,"tag":25,"props":850,"children":851},{},[852],{"type":24,"tag":29,"props":853,"children":854},{},[855],{"type":33,"value":628},{"type":24,"tag":105,"props":857,"children":858},{},[859,869],{"type":24,"tag":109,"props":860,"children":861},{},[862,867],{"type":24,"tag":29,"props":863,"children":864},{},[865],{"type":33,"value":866},"Ask me first",{"type":33,"value":868}," never prompts. It says how long the update has waited (\"Ready since yesterday at 18:40\"), and after three days the tray and the footer say \"ready since Tuesday\" (D14).",{"type":24,"tag":109,"props":870,"children":871},{},[872,877],{"type":24,"tag":29,"props":873,"children":874},{},[875],{"type":33,"value":876},"An install 60 days without an update",{"type":33,"value":878}," gets one tray line, at most once a month, under any preference including managed (D15).",{"type":24,"tag":25,"props":880,"children":881},{},[882],{"type":33,"value":883},"Both came from the prior art: Chrome's \"available for # days\", and VS Code's and Firefox's age lines.",{"type":24,"tag":301,"props":885,"children":887},{"id":886},"_11-the-era-as-data",[888],{"type":33,"value":889},"11. The era as data",{"type":24,"tag":25,"props":891,"children":892},{},[893,897,899,905,906,912,914,920,922,928],{"type":24,"tag":29,"props":894,"children":895},{},[896],{"type":33,"value":628},{"type":33,"value":898}," the era comes from the feed, not from a flag in the app (D12). ",{"type":24,"tag":50,"props":900,"children":902},{"className":901},[],[903],{"type":33,"value":904},"channel: partners",{"type":33,"value":222},{"type":24,"tag":50,"props":907,"children":909},{"className":908},[],[910],{"type":33,"value":911},"notes.audience: partners",{"type":33,"value":913}," give today's page. When the feed carries ",{"type":24,"tag":50,"props":915,"children":917},{"className":916},[],[918],{"type":33,"value":919},"stable",{"type":33,"value":921}," or ",{"type":24,"tag":50,"props":923,"children":925},{"className":924},[],[926],{"type":33,"value":927},"beta",{"type":33,"value":929}," and public notes, the same page shows the channel switch and the public notes. Nothing built now is thrown away (R7).",{"type":24,"tag":105,"props":931,"children":932},{},[933],{"type":24,"tag":109,"props":934,"children":935},{},[936,940,942,947,949,954,956,962],{"type":24,"tag":324,"props":937,"children":938},{},[939],{"type":33,"value":348},{"type":33,"value":941}," compare ",{"type":24,"tag":50,"props":943,"children":945},{"className":944},[],[946],{"type":33,"value":356},{"type":33,"value":948}," with ",{"type":24,"tag":50,"props":950,"children":952},{"className":951},[],[953],{"type":33,"value":551},{"type":33,"value":955},", and see ",{"type":24,"tag":50,"props":957,"children":959},{"className":958},[],[960],{"type":33,"value":961},"c139-updates-policy-later",{"type":33,"value":963}," for the organisation's policy.",{"type":24,"tag":99,"props":965,"children":967},{"id":966},"answered-mark-2026-11-13-walked",[968],{"type":33,"value":15},{"type":24,"tag":970,"props":971,"children":972},"table",{},[973,992],{"type":24,"tag":974,"props":975,"children":976},"thead",{},[977],{"type":24,"tag":978,"props":979,"children":980},"tr",{},[981,987],{"type":24,"tag":982,"props":983,"children":984},"th",{},[985],{"type":33,"value":986},"#",{"type":24,"tag":982,"props":988,"children":989},{},[990],{"type":33,"value":991},"Ruled",{"type":24,"tag":993,"props":994,"children":995},"tbody",{},[996,1020,1050,1073,1096,1119,1142,1165,1195,1228,1258],{"type":24,"tag":978,"props":997,"children":998},{},[999,1005],{"type":24,"tag":1000,"props":1001,"children":1002},"td",{},[1003],{"type":33,"value":1004},"1",{"type":24,"tag":1000,"props":1006,"children":1007},{},[1008,1013,1015],{"type":24,"tag":29,"props":1009,"children":1010},{},[1011],{"type":33,"value":1012},"Automatically",{"type":33,"value":1014}," is the default, marked \"(recommended)\", with no first-run question. ",{"type":24,"tag":324,"props":1016,"children":1017},{},[1018],{"type":33,"value":1019},"(D1, default)",{"type":24,"tag":978,"props":1021,"children":1022},{},[1023,1028],{"type":24,"tag":1000,"props":1024,"children":1025},{},[1026],{"type":33,"value":1027},"2",{"type":24,"tag":1000,"props":1029,"children":1030},{},[1031,1036,1038,1043,1045],{"type":24,"tag":29,"props":1032,"children":1033},{},[1034],{"type":33,"value":1035},"A quiet trace and nothing pushed:",{"type":33,"value":1037}," seven days of ",{"type":24,"tag":50,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":33,"value":388},{"type":33,"value":1044}," in the footer and the tray's version line; the Updates page leads with what's new. ",{"type":24,"tag":324,"props":1046,"children":1047},{},[1048],{"type":33,"value":1049},"(D2, default; the old alternative, a quiet inbox entry, is gone with c137, closed into design c147)",{"type":24,"tag":978,"props":1051,"children":1052},{},[1053,1058],{"type":24,"tag":1000,"props":1054,"children":1055},{},[1056],{"type":33,"value":1057},"3",{"type":24,"tag":1000,"props":1059,"children":1060},{},[1061,1066,1068],{"type":24,"tag":29,"props":1062,"children":1063},{},[1064],{"type":33,"value":1065},"The notes inline, at partner altitude,",{"type":33,"value":1067}," each line citing its record; the trail one link away. ",{"type":24,"tag":324,"props":1069,"children":1070},{},[1071],{"type":33,"value":1072},"(D6, D16, default)",{"type":24,"tag":978,"props":1074,"children":1075},{},[1076,1081],{"type":24,"tag":1000,"props":1077,"children":1078},{},[1079],{"type":33,"value":1080},"4",{"type":24,"tag":1000,"props":1082,"children":1083},{},[1084,1089,1091],{"type":24,"tag":29,"props":1085,"children":1086},{},[1087],{"type":33,"value":1088},"No skip.",{"type":33,"value":1090}," \"Not now\" defers; holding a version back is the organisation's decision, later from the plane. ",{"type":24,"tag":324,"props":1092,"children":1093},{},[1094],{"type":33,"value":1095},"(D8, default)",{"type":24,"tag":978,"props":1097,"children":1098},{},[1099,1104],{"type":24,"tag":1000,"props":1100,"children":1101},{},[1102],{"type":33,"value":1103},"5",{"type":24,"tag":1000,"props":1105,"children":1106},{},[1107,1112,1114],{"type":24,"tag":29,"props":1108,"children":1109},{},[1110],{"type":33,"value":1111},"The notes are drafted automatically, summarised from the commit messages, with room for manual additions;",{"type":33,"value":1113}," engineering and design write the additions now, product later. ",{"type":24,"tag":324,"props":1115,"children":1116},{},[1117],{"type":33,"value":1118},"(changed: Mark's words, in place of \"whoever cuts the release owns them\")",{"type":24,"tag":978,"props":1120,"children":1121},{},[1122,1127],{"type":24,"tag":1000,"props":1123,"children":1124},{},[1125],{"type":33,"value":1126},"6",{"type":24,"tag":1000,"props":1128,"children":1129},{},[1130,1135,1137],{"type":24,"tag":29,"props":1131,"children":1132},{},[1133],{"type":33,"value":1134},"One page and one Update,",{"type":33,"value":1136}," the app and qcontrol each in its own row with its own state. ",{"type":24,"tag":324,"props":1138,"children":1139},{},[1140],{"type":33,"value":1141},"(D9, default; Tyler's T2 and T4)",{"type":24,"tag":978,"props":1143,"children":1144},{},[1145,1150],{"type":24,"tag":1000,"props":1146,"children":1147},{},[1148],{"type":33,"value":1149},"7",{"type":24,"tag":1000,"props":1151,"children":1152},{},[1153,1158,1160],{"type":24,"tag":29,"props":1154,"children":1155},{},[1156],{"type":33,"value":1157},"Restart at quit, at the machine's restart, or after ten idle minutes with the window in the tray,",{"type":33,"value":1159}," only under D13's guard. ",{"type":24,"tag":324,"props":1161,"children":1162},{},[1163],{"type":33,"value":1164},"(D3, D13, default; Tyler's T6)",{"type":24,"tag":978,"props":1166,"children":1167},{},[1168,1173],{"type":24,"tag":1000,"props":1169,"children":1170},{},[1171],{"type":33,"value":1172},"8",{"type":24,"tag":1000,"props":1174,"children":1175},{},[1176,1181,1183,1188,1190],{"type":24,"tag":29,"props":1177,"children":1178},{},[1179],{"type":33,"value":1180},"The tag with the short SHA",{"type":33,"value":1182}," in the partner era (",{"type":24,"tag":50,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":33,"value":804},{"type":33,"value":1189},"), Copy version info for bug reports; the tag alone later. ",{"type":24,"tag":324,"props":1191,"children":1192},{},[1193],{"type":33,"value":1194},"(D5, default; T3)",{"type":24,"tag":978,"props":1196,"children":1197},{},[1198,1203],{"type":24,"tag":1000,"props":1199,"children":1200},{},[1201],{"type":33,"value":1202},"9",{"type":24,"tag":1000,"props":1204,"children":1205},{},[1206,1219,1221,1226],{"type":24,"tag":29,"props":1207,"children":1208},{},[1209,1211,1217],{"type":33,"value":1210},"An ",{"type":24,"tag":50,"props":1212,"children":1214},{"className":1213},[],[1215],{"type":33,"value":1216},"App Settings",{"type":33,"value":1218}," rail item with a submenu",{"type":33,"value":1220}," (the layer's submenu pattern, design c98's NavVerticalSubmenu) grouping the settings pages: General · Updates · Notifications · Data · Developer, ⌘, opening it; the tray menu gets Check for updates… and Settings…. ",{"type":24,"tag":324,"props":1222,"children":1223},{},[1224],{"type":33,"value":1225},"(changed: Mark, \"utilize the sub menu pattern to group these pages under a general App Settings nav item\")",{"type":33,"value":1227}," Read with c147: Safety & Security keeps its own Settings (the noise control, c147 Q1), and App Settings › Notifications points to it. That reading is the recorder's, to confirm.",{"type":24,"tag":978,"props":1229,"children":1230},{},[1231,1236],{"type":24,"tag":1000,"props":1232,"children":1233},{},[1234],{"type":33,"value":1235},"10",{"type":24,"tag":1000,"props":1237,"children":1238},{},[1239,1244,1246,1251,1253],{"type":24,"tag":29,"props":1240,"children":1241},{},[1242],{"type":33,"value":1243},"Ask me first never prompts,",{"type":33,"value":1245}," it says how long the update has waited (\"ready since Tuesday\" after three days); ",{"type":24,"tag":29,"props":1247,"children":1248},{},[1249],{"type":33,"value":1250},"an install 60 days without an update",{"type":33,"value":1252}," gets one tray line, at most once a month. ",{"type":24,"tag":324,"props":1254,"children":1255},{},[1256],{"type":33,"value":1257},"(D14, D15, default)",{"type":24,"tag":978,"props":1259,"children":1260},{},[1261,1266],{"type":24,"tag":1000,"props":1262,"children":1263},{},[1264],{"type":33,"value":1265},"11",{"type":24,"tag":1000,"props":1267,"children":1268},{},[1269,1274,1276],{"type":24,"tag":29,"props":1270,"children":1271},{},[1272],{"type":33,"value":1273},"The era comes from the feed,",{"type":33,"value":1275}," not a flag in the app. ",{"type":24,"tag":324,"props":1277,"children":1278},{},[1279],{"type":33,"value":1280},"(D12, default)",{"type":24,"tag":25,"props":1282,"children":1283},{},[1284,1286,1292,1294,1304,1305,1315],{"type":33,"value":1285},"Next: Phase 4, the native build in ",{"type":24,"tag":50,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":33,"value":1291},"..\u002Fqnative",{"type":33,"value":1293},", and the lab mock brought to calls 5 and 9, both for cloud sessions (Mark, 2026-11-13); their briefs are ",{"type":24,"tag":45,"props":1295,"children":1297},{"href":1296},"\u002Fcycles\u002Fdesign\u002Fc139\u002Fdoc\u002Fcloud-native-prompt",[1298],{"type":24,"tag":50,"props":1299,"children":1301},{"className":1300},[],[1302],{"type":33,"value":1303},"cloud-native-prompt.md",{"type":33,"value":222},{"type":24,"tag":45,"props":1306,"children":1308},{"href":1307},"\u002Fcycles\u002Fdesign\u002Fc139\u002Fdoc\u002Fcloud-lab-prompt",[1309],{"type":24,"tag":50,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":33,"value":1314},"cloud-lab-prompt.md",{"type":33,"value":1316},". Tyler's six below still stand.",{"type":24,"tag":99,"props":1318,"children":1320},{"id":1319},"tylers-dependencies",[1321],{"type":33,"value":16},{"type":24,"tag":25,"props":1323,"children":1324},{},[1325],{"type":33,"value":1326},"Each one is listed with what the design assumes until he answers. These are engineering calls; the page works whichever way they go.",{"type":24,"tag":970,"props":1328,"children":1329},{},[1330,1350],{"type":24,"tag":974,"props":1331,"children":1332},{},[1333],{"type":24,"tag":978,"props":1334,"children":1335},{},[1336,1340,1345],{"type":24,"tag":982,"props":1337,"children":1338},{},[1339],{"type":33,"value":986},{"type":24,"tag":982,"props":1341,"children":1342},{},[1343],{"type":33,"value":1344},"Question",{"type":24,"tag":982,"props":1346,"children":1347},{},[1348],{"type":33,"value":1349},"Until then",{"type":24,"tag":993,"props":1351,"children":1352},{},[1353,1391,1422,1478,1501,1532],{"type":24,"tag":978,"props":1354,"children":1355},{},[1356,1361,1379],{"type":24,"tag":1000,"props":1357,"children":1358},{},[1359],{"type":33,"value":1360},"T1",{"type":24,"tag":1000,"props":1362,"children":1363},{},[1364,1369,1371,1377],{"type":24,"tag":29,"props":1365,"children":1366},{},[1367],{"type":33,"value":1368},"Signing.",{"type":33,"value":1370}," The Apple Developer ID and notarisation of every update; Windows Authenticode; whether an update signature (minisign or EdDSA) is checked beyond SHA-256. This is c130 ",{"type":24,"tag":50,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":33,"value":1376},"shape.md",{"type":33,"value":1378}," Q7.",{"type":24,"tag":1000,"props":1380,"children":1381},{},[1382,1384,1390],{"type":33,"value":1383},"The checksum is the check. A signature failure would read like the checksum failure in ",{"type":24,"tag":50,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":33,"value":1389},"c139-updates-failed",{"type":33,"value":265},{"type":24,"tag":978,"props":1392,"children":1393},{},[1394,1399,1417],{"type":24,"tag":1000,"props":1395,"children":1396},{},[1397],{"type":33,"value":1398},"T2",{"type":24,"tag":1000,"props":1400,"children":1401},{},[1402,1407,1409,1415],{"type":24,"tag":29,"props":1403,"children":1404},{},[1405],{"type":33,"value":1406},"The updater.",{"type":33,"value":1408}," Either qupdate grows bundle-awareness (the macOS ",{"type":24,"tag":50,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":33,"value":1414},".app",{"type":33,"value":1416}," replace, a Windows helper for the running exe, a per-user install), or the app gets its own (cargo-packager-updater, self_update). Also: one updater for both binaries, or two.",{"type":24,"tag":1000,"props":1418,"children":1419},{},[1420],{"type":33,"value":1421},"One state machine per binary behind one page. The page doesn't know which updater runs.",{"type":24,"tag":978,"props":1423,"children":1424},{},[1425,1430,1473],{"type":24,"tag":1000,"props":1426,"children":1427},{},[1428],{"type":33,"value":1429},"T3",{"type":24,"tag":1000,"props":1431,"children":1432},{},[1433,1438,1439,1445,1446,1451,1452,1458,1460,1466,1467,1472],{"type":24,"tag":29,"props":1434,"children":1435},{},[1436],{"type":33,"value":1437},"The feed.",{"type":33,"value":350},{"type":24,"tag":50,"props":1440,"children":1442},{"className":1441},[],[1443],{"type":33,"value":1444},"channel",{"type":33,"value":151},{"type":24,"tag":50,"props":1447,"children":1449},{"className":1448},[],[1450],{"type":33,"value":644},{"type":33,"value":222},{"type":24,"tag":50,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":33,"value":1457},"size",{"type":33,"value":1459}," now; a tag for every build that reaches partners; a way to pull a release. Later: ",{"type":24,"tag":50,"props":1461,"children":1463},{"className":1462},[],[1464],{"type":33,"value":1465},"rollout",{"type":33,"value":222},{"type":24,"tag":50,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":33,"value":596},{"type":33,"value":265},{"type":24,"tag":1000,"props":1474,"children":1475},{},[1476],{"type":33,"value":1477},"The mock's sidecar has these fields, marked as proposals.",{"type":24,"tag":978,"props":1479,"children":1480},{},[1481,1486,1496],{"type":24,"tag":1000,"props":1482,"children":1483},{},[1484],{"type":33,"value":1485},"T4",{"type":24,"tag":1000,"props":1487,"children":1488},{},[1489,1494],{"type":24,"tag":29,"props":1490,"children":1491},{},[1492],{"type":33,"value":1493},"qcontrol's update.",{"type":33,"value":1495}," Elevation on each OS; whether the sensor's restart drops events, and for how long; whether the app's update ever carries the sensor.",{"type":24,"tag":1000,"props":1497,"children":1498},{},[1499],{"type":33,"value":1500},"The row asks for an administrator. The mock gives no figure for the gap.",{"type":24,"tag":978,"props":1502,"children":1503},{},[1504,1509,1527],{"type":24,"tag":1000,"props":1505,"children":1506},{},[1507],{"type":33,"value":1508},"T5",{"type":24,"tag":1000,"props":1510,"children":1511},{},[1512,1517,1519,1525],{"type":24,"tag":29,"props":1513,"children":1514},{},[1515],{"type":33,"value":1516},"Knowing a package manager or MDM owns the install.",{"type":33,"value":1518}," For example, a build-time explanation like Zed's ",{"type":24,"tag":50,"props":1520,"children":1522},{"className":1521},[],[1523],{"type":33,"value":1524},"ZED_UPDATE_EXPLANATION",{"type":33,"value":1526},", the install path, or a marker file.",{"type":24,"tag":1000,"props":1528,"children":1529},{},[1530],{"type":33,"value":1531},"Homebrew is the mock's example, with its sentence and its command.",{"type":24,"tag":978,"props":1533,"children":1534},{},[1535,1540,1550],{"type":24,"tag":1000,"props":1536,"children":1537},{},[1538],{"type":33,"value":1539},"T6",{"type":24,"tag":1000,"props":1541,"children":1542},{},[1543,1548],{"type":24,"tag":29,"props":1544,"children":1545},{},[1546],{"type":33,"value":1547},"Restart mechanics.",{"type":33,"value":1549}," The relaunch path on three OSes, and whether the guarded idle relaunch (call 7) is safe on each.",{"type":24,"tag":1000,"props":1551,"children":1552},{},[1553],{"type":33,"value":1554},"D3 and D13 as written.",{"type":24,"tag":99,"props":1556,"children":1558},{"id":1557},"out-of-scope-named-so-nothing-is-lost",[1559],{"type":33,"value":17},{"type":24,"tag":105,"props":1561,"children":1562},{},[1563,1573,1590],{"type":24,"tag":109,"props":1564,"children":1565},{},[1566,1571],{"type":24,"tag":29,"props":1567,"children":1568},{},[1569],{"type":33,"value":1570},"Updating the self-hosted control plane",{"type":33,"value":1572}," (c134). That is an operator updating a server: a Docker image tag, migrations, a maintenance window. It will be its own cycle when the plane exists.",{"type":24,"tag":109,"props":1574,"children":1575},{},[1576,1581,1583,1588],{"type":24,"tag":29,"props":1577,"children":1578},{},[1579],{"type":33,"value":1580},"The organisation's update-policy page on the plane",{"type":33,"value":1582},", for the later era, designed with c134. The native page already has a slot for it (",{"type":24,"tag":50,"props":1584,"children":1586},{"className":1585},[],[1587],{"type":33,"value":961},{"type":33,"value":1589},").",{"type":24,"tag":109,"props":1591,"children":1592},{},[1593,1598],{"type":24,"tag":29,"props":1594,"children":1595},{},[1596],{"type":33,"value":1597},"First install and the installer",{"type":33,"value":1599}," (c131 packaging), and downgrade.",{"type":24,"tag":99,"props":1601,"children":1603},{"id":1602},"for-the-layer-flagged-not-done",[1604],{"type":33,"value":18},{"type":24,"tag":25,"props":1606,"children":1607},{},[1608],{"type":33,"value":1609},"The layer was not touched.",{"type":24,"tag":105,"props":1611,"children":1612},{},[1613,1639,1649],{"type":24,"tag":109,"props":1614,"children":1615},{},[1616,1621,1623,1629,1631,1637],{"type":24,"tag":29,"props":1617,"children":1618},{},[1619],{"type":33,"value":1620},"The preference tiles",{"type":33,"value":1622}," are design-local because the layer's ",{"type":24,"tag":50,"props":1624,"children":1626},{"className":1625},[],[1627],{"type":33,"value":1628},"UxToggleCard",{"type":33,"value":1630}," has no dense size (min-width 360 px, 24 px padding, a 3 px border). The candidate is a ",{"type":24,"tag":50,"props":1632,"children":1634},{"className":1633},[],[1635],{"type":33,"value":1636},"size=\"sm\"",{"type":33,"value":1638}," for c135's census.",{"type":24,"tag":109,"props":1640,"children":1641},{},[1642,1647],{"type":24,"tag":29,"props":1643,"children":1644},{},[1645],{"type":33,"value":1646},"The state card",{"type":33,"value":1648}," (icon, one sentence, the next step, actions) is close to c137's message card and to Status's sentence band. It is a candidate pattern once a second native page uses it.",{"type":24,"tag":109,"props":1650,"children":1651},{},[1652,1677],{"type":24,"tag":29,"props":1653,"children":1654},{},[1655,1661,1663,1669,1671],{"type":24,"tag":50,"props":1656,"children":1658},{"className":1657},[],[1659],{"type":33,"value":1660},"NativeTrayMenu",{"type":33,"value":1662},", the new ",{"type":24,"tag":50,"props":1664,"children":1666},{"className":1665},[],[1667],{"type":33,"value":1668},"NativeIcon",{"type":33,"value":1670}," glyphs, and the rail's Settings item and footer trace in ",{"type":24,"tag":50,"props":1672,"children":1674},{"className":1673},[],[1675],{"type":33,"value":1676},"NativeWindow",{"type":33,"value":1678}," belong to the native skin and stay design-local under c132's rules.",{"type":24,"tag":99,"props":1680,"children":1682},{"id":1681},"what-was-and-wasnt-verified",[1683],{"type":33,"value":19},{"type":24,"tag":105,"props":1685,"children":1686},{},[1687,1697,1715,1764,1831,1872,1882],{"type":24,"tag":109,"props":1688,"children":1689},{},[1690,1695],{"type":24,"tag":29,"props":1691,"children":1692},{},[1693],{"type":33,"value":1694},"The pages.",{"type":33,"value":1696}," The dev server rendered both pages in every state with no console errors, and the actions walk the machine.",{"type":24,"tag":109,"props":1698,"children":1699},{},[1700,1705,1707,1713],{"type":24,"tag":29,"props":1701,"children":1702},{},[1703],{"type":33,"value":1704},"The captures.",{"type":33,"value":1706}," The capture program ran: seventeen captures at 2×, filed in ",{"type":24,"tag":50,"props":1708,"children":1710},{"className":1709},[],[1711],{"type":33,"value":1712},"public\u002Fcycles\u002Fdesign\u002Fmanifest.json",{"type":33,"value":1714},". All 700 earlier entries were unchanged; the tool re-sorts the file.",{"type":24,"tag":109,"props":1716,"children":1717},{},[1718,1723,1725,1731,1733,1739,1741,1747,1748,1754,1756,1762],{"type":24,"tag":29,"props":1719,"children":1720},{},[1721],{"type":33,"value":1722},"The install.",{"type":33,"value":1724}," The layer package returned 401 from GitHub Packages here. I installed against a read-only clone of ",{"type":24,"tag":50,"props":1726,"children":1728},{"className":1727},[],[1729],{"type":33,"value":1730},"qpoint-io\u002Fq-nuxt-layer",{"type":33,"value":1732}," at its published version (0.9.37) and restored ",{"type":24,"tag":50,"props":1734,"children":1736},{"className":1735},[],[1737],{"type":33,"value":1738},"package.json",{"type":33,"value":1740}," and the lockfile afterwards. ",{"type":24,"tag":50,"props":1742,"children":1744},{"className":1743},[],[1745],{"type":33,"value":1746},"@qpoint-io\u002Fqmap",{"type":33,"value":222},{"type":24,"tag":50,"props":1749,"children":1751},{"className":1750},[],[1752],{"type":33,"value":1753},"qflow",{"type":33,"value":1755}," are also private, so I put throwaway stubs in ",{"type":24,"tag":50,"props":1757,"children":1759},{"className":1758},[],[1760],{"type":33,"value":1761},"node_modules",{"type":33,"value":1763}," (untracked, not committed); pages that draw them were not checked.",{"type":24,"tag":109,"props":1765,"children":1766},{},[1767,1772,1773,1779,1781,1787,1789,1794,1795,1800,1801,1806,1808,1814,1816,1821,1823,1829],{"type":24,"tag":29,"props":1768,"children":1769},{},[1770],{"type":33,"value":1771},"The build.",{"type":33,"value":350},{"type":24,"tag":50,"props":1774,"children":1776},{"className":1775},[],[1777],{"type":33,"value":1778},"nuxt build",{"type":33,"value":1780}," passed (with ",{"type":24,"tag":50,"props":1782,"children":1784},{"className":1783},[],[1785],{"type":33,"value":1786},"NODE_OPTIONS=--max-old-space-size=12288",{"type":33,"value":1788},"; the default heap ran out during the client bundle). The prerender rendered ",{"type":24,"tag":50,"props":1790,"children":1792},{"className":1791},[],[1793],{"type":33,"value":80},{"type":33,"value":151},{"type":24,"tag":50,"props":1796,"children":1798},{"className":1797},[],[1799],{"type":33,"value":114},{"type":33,"value":222},{"type":24,"tag":50,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":33,"value":125},{"type":33,"value":1807},". The only errors in its log are 404s for ",{"type":24,"tag":50,"props":1809,"children":1811},{"className":1810},[],[1812],{"type":33,"value":1813},"\u002Fcycles\u002Fqnative\u002F…",{"type":33,"value":1815}," pages, because ",{"type":24,"tag":50,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":33,"value":1291},{"type":33,"value":1822}," isn't in this checkout; the partner notes' links to ",{"type":24,"tag":50,"props":1824,"children":1826},{"className":1825},[],[1827],{"type":33,"value":1828},"\u002Fcycles\u002Fqnative\u002Fc2",{"type":33,"value":1830}," resolve where it is.",{"type":24,"tag":109,"props":1832,"children":1833},{},[1834,1839,1840,1846,1848,1854,1856,1862,1864,1870],{"type":24,"tag":29,"props":1835,"children":1836},{},[1837],{"type":33,"value":1838},"Types.",{"type":33,"value":350},{"type":24,"tag":50,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":33,"value":1845},"tsc",{"type":33,"value":1847}," over the project's TypeScript reports nothing in any file this cycle touched. Its errors in ",{"type":24,"tag":50,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":33,"value":1853},"cycle-stories-mock.ts",{"type":33,"value":1855}," (lines 523–538) are in code this cycle didn't change. There is no ",{"type":24,"tag":50,"props":1857,"children":1859},{"className":1858},[],[1860],{"type":33,"value":1861},"vue-tsc",{"type":33,"value":1863}," here, so the ",{"type":24,"tag":50,"props":1865,"children":1867},{"className":1866},[],[1868],{"type":33,"value":1869},".vue",{"type":33,"value":1871}," files were checked by the build only.",{"type":24,"tag":109,"props":1873,"children":1874},{},[1875,1880],{"type":24,"tag":29,"props":1876,"children":1877},{},[1878],{"type":33,"value":1879},"The prior art.",{"type":33,"value":1881}," The reading reached GitHub, Apple, Android and Anthropic's pages directly. Zed, 1Password, Slack, Raycast, Google Play and Microsoft Learn were search excerpts, and the doc marks them as such. Its last section lists six facts to re-read from a laptop.",{"type":24,"tag":109,"props":1883,"children":1884},{},[1885,1890,1892,1897],{"type":24,"tag":29,"props":1886,"children":1887},{},[1888],{"type":33,"value":1889},"Not done.",{"type":33,"value":1891}," Nothing was pushed into ",{"type":24,"tag":50,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":33,"value":1291},{"type":33,"value":1898}," (Phase 4, after the rulings), and nothing was deployed.",1794599377769]