[{"data":1,"prerenderedAt":2056},["ShallowReactive",2],{"cycle-doc-design-c137-ports.md":3},{"cycle":4,"project":7,"path":10,"title":11,"toc":12,"ast":18},{"id":5,"title":6},"c137","App Messaging, Overseer and Citizen",{"id":8,"label":9},"design","Design","ports.md","c137 Phase 2: the ports and the citizen's controls",[13,14,15,16,17],"1. The ports","2. The citizen's controls","3. The operator's send side (c134's shell)","4. The lab mock","5. Questions the mock raised",{"type":19,"children":20},"root",[21,82,88,265,272,322,328,397,403,424,568,758,771,777,790,796,801,806,811,817,829,1003,1009,1042,1048,1087,1100,1119,1125,1137,1143,1176,1182,1187,1192,1204,1210,1267,1273,1417,1423,1450,1456,1511,1516,1521,1623,1716,1721,1882,1888,2017,2022,2028],{"type":22,"tag":23,"props":24,"children":25},"element","p",{},[26,33,35,40,42,47,49,54,56,68,70,80],{"type":22,"tag":27,"props":28,"children":29},"strong",{},[30],{"type":31,"value":32},"text","Written:",{"type":31,"value":34}," 2026-11-09. ",{"type":22,"tag":27,"props":36,"children":37},{},[38],{"type":31,"value":39},"Reader:",{"type":31,"value":41}," Mark at the review stop; c131's executor (the OS plumbing, the tray, the inbox store); c134's executor (the operator's side); Tyler at G2 (Q5).\n",{"type":22,"tag":27,"props":43,"children":44},{},[45],{"type":31,"value":46},"Rules it carries:",{"type":31,"value":48}," R3 the citizen controls delivery, the overseer controls content · R4 nothing is alarming · R6 honest and bounded · R7 use the OS.\n",{"type":22,"tag":27,"props":50,"children":51},{},[52],{"type":31,"value":53},"What a message is",{"type":31,"value":55}," comes from ",{"type":22,"tag":57,"props":58,"children":60},"a",{"href":59},"\u002Fcycles\u002Fdesign\u002Fc137\u002Fdoc\u002Fbones",[61],{"type":22,"tag":62,"props":63,"children":65},"code",{"className":64},[],[66],{"type":31,"value":67},"bones.md",{"type":31,"value":69},"; which messages exist from ",{"type":22,"tag":57,"props":71,"children":73},{"href":72},"\u002Fcycles\u002Fdesign\u002Fc137\u002Fdoc\u002Finventory",[74],{"type":22,"tag":62,"props":75,"children":77},{"className":76},[],[78],{"type":31,"value":79},"inventory.md",{"type":31,"value":81},". This document is where they go and what the person at the keyboard can do about it. The lab mock that shows it is §4.",{"type":22,"tag":83,"props":84,"children":86},"h2",{"id":85},"_1-the-ports",[87],{"type":31,"value":13},{"type":22,"tag":89,"props":90,"children":91},"table",{},[92,121],{"type":22,"tag":93,"props":94,"children":95},"thead",{},[96],{"type":22,"tag":97,"props":98,"children":99},"tr",{},[100,106,111,116],{"type":22,"tag":101,"props":102,"children":103},"th",{},[104],{"type":31,"value":105},"Port",{"type":22,"tag":101,"props":107,"children":108},{},[109],{"type":31,"value":110},"Carries",{"type":22,"tag":101,"props":112,"children":113},{},[114],{"type":31,"value":115},"Controlled by",{"type":22,"tag":101,"props":117,"children":118},{},[119],{"type":31,"value":120},"Shows",{"type":22,"tag":122,"props":123,"children":124},"tbody",{},[125,154,180,214,242],{"type":22,"tag":97,"props":126,"children":127},{},[128,139,144,149],{"type":22,"tag":129,"props":130,"children":131},"td",{},[132,137],{"type":22,"tag":27,"props":133,"children":134},{},[135],{"type":31,"value":136},"Inbox",{"type":31,"value":138}," (native app)",{"type":22,"tag":129,"props":140,"children":141},{},[142],{"type":31,"value":143},"every message, kept with its state and thread",{"type":22,"tag":129,"props":145,"children":146},{},[147],{"type":31,"value":148},"the app; always on",{"type":22,"tag":129,"props":150,"children":151},{},[152],{"type":31,"value":153},"the record: open threads first, ended ones under a fold; the honesty line",{"type":22,"tag":97,"props":155,"children":156},{},[157,165,170,175],{"type":22,"tag":129,"props":158,"children":159},{},[160],{"type":22,"tag":27,"props":161,"children":162},{},[163],{"type":31,"value":164},"Tray",{"type":22,"tag":129,"props":166,"children":167},{},[168],{"type":31,"value":169},"a count and the one line that matters",{"type":22,"tag":129,"props":171,"children":172},{},[173],{"type":31,"value":174},"the citizen (on · off)",{"type":22,"tag":129,"props":176,"children":177},{},[178],{"type":31,"value":179},"the count of open messages that wait for the person; the newest open subject",{"type":22,"tag":97,"props":181,"children":182},{},[183,191,196,209],{"type":22,"tag":129,"props":184,"children":185},{},[186],{"type":22,"tag":27,"props":187,"children":188},{},[189],{"type":31,"value":190},"OS notification",{"type":22,"tag":129,"props":192,"children":193},{},[194],{"type":31,"value":195},"one interruption per message, at delivery",{"type":22,"tag":129,"props":197,"children":198},{},[199,201,207],{"type":31,"value":200},"the citizen, per type, with quiet hours; the OS's own permission and Focus; ",{"type":22,"tag":62,"props":202,"children":204},{"className":203},[],[205],{"type":31,"value":206},"required",{"type":31,"value":208}," passes",{"type":22,"tag":129,"props":210,"children":211},{},[212],{"type":31,"value":213},"title, one sentence, the sender; opens the message",{"type":22,"tag":97,"props":215,"children":216},{},[217,227,232,237],{"type":22,"tag":129,"props":218,"children":219},{},[220,225],{"type":22,"tag":27,"props":221,"children":222},{},[223],{"type":31,"value":224},"Web app",{"type":31,"value":226}," (control plane)",{"type":22,"tag":129,"props":228,"children":229},{},[230],{"type":31,"value":231},"the operator's inbox and send; the pages messages link to",{"type":22,"tag":129,"props":233,"children":234},{},[235],{"type":31,"value":236},"the overseer",{"type":22,"tag":129,"props":238,"children":239},{},[240],{"type":31,"value":241},"the same record from the other side",{"type":22,"tag":97,"props":243,"children":244},{},[245,250,255,260],{"type":22,"tag":129,"props":246,"children":247},{},[248],{"type":31,"value":249},"Email, Slack",{"type":22,"tag":129,"props":251,"children":252},{},[253],{"type":31,"value":254},"nothing in V1",{"type":22,"tag":129,"props":256,"children":257},{},[258],{"type":31,"value":259},"later, through the plane's integrations (c134 D7), operator's inbox first",{"type":22,"tag":129,"props":261,"children":262},{},[263],{"type":31,"value":264},"—",{"type":22,"tag":266,"props":267,"children":269},"h3",{"id":268},"_11-inbox",[270],{"type":31,"value":271},"1.1 Inbox",{"type":22,"tag":273,"props":274,"children":275},"ul",{},[276,292,297,307,317],{"type":22,"tag":277,"props":278,"children":279},"li",{},[280,282,290],{"type":31,"value":281},"One row per thread; a thread shows its root's subject, the sender label, the time of the newest activity, the state pill, and the count of replies. Opening a row shows the card (",{"type":22,"tag":57,"props":283,"children":284},{"href":59},[285],{"type":22,"tag":62,"props":286,"children":288},{"className":287},[],[289],{"type":31,"value":67},{"type":31,"value":291}," §1) and the thread under it.",{"type":22,"tag":277,"props":293,"children":294},{},[295],{"type":31,"value":296},"Open threads first, newest activity on top; ended ones (acknowledged, done, expired) under a fold labelled with their count. Nothing is deleted by the person; the record is a record (R5, R6).",{"type":22,"tag":277,"props":298,"children":299},{},[300,305],{"type":22,"tag":27,"props":301,"children":302},{},[303],{"type":31,"value":304},"The honesty line.",{"type":31,"value":306}," When the settings held anything back, the inbox says so at the top, in one sentence and without blame: \"3 notices went to your inbox quietly since 18:00.\" or \"1 notice from the policy Secrets in prompts is muted until tomorrow 09:00.\" The line names the setting that did it and links to it. Control never erases the record.",{"type":22,"tag":277,"props":308,"children":309},{},[310,315],{"type":22,"tag":27,"props":311,"children":312},{},[313],{"type":31,"value":314},"The empty state",{"type":31,"value":316}," carries the welcome the inventory dropped as a type (row 23): \"Your inbox holds what HQ sends this machine. Nothing yet.\" In local mode: \"Your inbox holds what qcontrol on this machine reports. Nothing yet.\"",{"type":22,"tag":277,"props":318,"children":319},{},[320],{"type":31,"value":321},"No search, no folders, no flags in V1 (the five questions: not necessary for a record that holds tens of items a year).",{"type":22,"tag":266,"props":323,"children":325},{"id":324},"_12-tray",[326],{"type":31,"value":327},"1.2 Tray",{"type":22,"tag":273,"props":329,"children":330},{},[331,364,374,384],{"type":22,"tag":277,"props":332,"children":333},{},[334,339,341,347,349,355,357,362],{"type":22,"tag":27,"props":335,"children":336},{},[337],{"type":31,"value":338},"The count:",{"type":31,"value":340}," open messages that wait for the person: ",{"type":22,"tag":62,"props":342,"children":344},{"className":343},[],[345],{"type":31,"value":346},"new",{"type":31,"value":348},", and ",{"type":22,"tag":62,"props":350,"children":352},{"className":351},[],[353],{"type":31,"value":354},"requires_ack",{"type":31,"value":356}," not yet acknowledged. A ",{"type":22,"tag":62,"props":358,"children":360},{"className":359},[],[361],{"type":31,"value":206},{"type":31,"value":363}," message holds its place in the count whatever the settings say. Ended messages never count.",{"type":22,"tag":277,"props":365,"children":366},{},[367,372],{"type":22,"tag":27,"props":368,"children":369},{},[370],{"type":31,"value":371},"The one line:",{"type":31,"value":373}," the newest open message's subject, under the sensor's own state line (c131 Phase 3 owns the tray). When nothing is open the line is absent: invisible when working.",{"type":22,"tag":277,"props":375,"children":376},{},[377,382],{"type":22,"tag":27,"props":378,"children":379},{},[380],{"type":31,"value":381},"Control:",{"type":31,"value":383}," on · off, one switch on the settings page (\"Show messages in the tray\"). Off hides the line and the count badge; the inbox still fills.",{"type":22,"tag":277,"props":385,"children":386},{},[387,389,395],{"type":31,"value":388},"A message with ",{"type":22,"tag":62,"props":390,"children":392},{"className":391},[],[393],{"type":31,"value":394},"expires_at",{"type":31,"value":396}," surfaces once more in the one line the day before it expires; never a second notification (bones §5).",{"type":22,"tag":266,"props":398,"children":400},{"id":399},"_13-os-notification",[401],{"type":31,"value":402},"1.3 OS notification",{"type":22,"tag":23,"props":404,"children":405},{},[406,408,414,416,422],{"type":31,"value":407},"The platform's own centre, through the kit (",{"type":22,"tag":62,"props":409,"children":411},{"className":410},[],[412],{"type":31,"value":413},"show_system_notification",{"type":31,"value":415},"; c130 ",{"type":22,"tag":62,"props":417,"children":419},{"className":418},[],[420],{"type":31,"value":421},"platform.md",{"type":31,"value":423}," §2), and nothing of our own drawn on top. What the app adds is the layer in front: per type, per policy, quiet hours, the one override.",{"type":22,"tag":273,"props":425,"children":426},{},[427,452,494,504,521,551],{"type":22,"tag":277,"props":428,"children":429},{},[430,435,437,443,445,450],{"type":22,"tag":27,"props":431,"children":432},{},[433],{"type":31,"value":434},"One per message",{"type":31,"value":436},", at delivery, when the type's setting is ",{"type":22,"tag":62,"props":438,"children":440},{"className":439},[],[441],{"type":31,"value":442},"notify",{"type":31,"value":444}," (or the message is ",{"type":22,"tag":62,"props":446,"children":448},{"className":447},[],[449],{"type":31,"value":206},{"type":31,"value":451},"). Never repeated.",{"type":22,"tag":277,"props":453,"children":454},{},[455,460,462,468,470,476,478,484,486,492],{"type":22,"tag":27,"props":456,"children":457},{},[458],{"type":31,"value":459},"Content:",{"type":31,"value":461}," title = ",{"type":22,"tag":62,"props":463,"children":465},{"className":464},[],[466],{"type":31,"value":467},"subject",{"type":31,"value":469},"; body = ",{"type":22,"tag":62,"props":471,"children":473},{"className":472},[],[474],{"type":31,"value":475},"body.happened",{"type":31,"value":477}," (the first sentence) and the sender label; subtitle (where the OS has one) = ",{"type":22,"tag":62,"props":479,"children":481},{"className":480},[],[482],{"type":31,"value":483},"why",{"type":31,"value":485},". Clicking opens the message in the app, which moves it to ",{"type":22,"tag":62,"props":487,"children":489},{"className":488},[],[490],{"type":31,"value":491},"seen",{"type":31,"value":493},".",{"type":22,"tag":277,"props":495,"children":496},{},[497,502],{"type":22,"tag":27,"props":498,"children":499},{},[500],{"type":31,"value":501},"Actions on the notification:",{"type":31,"value":503}," the primary action and Open, where the OS allows buttons; otherwise click-to-open only. Acknowledge is never a notification button: acknowledging means having read the card.",{"type":22,"tag":277,"props":505,"children":506},{},[507,512,514,519],{"type":22,"tag":27,"props":508,"children":509},{},[510],{"type":31,"value":511},"Quiet hours and Focus:",{"type":31,"value":513}," the OS's Focus (macOS), Focus Assist (Windows) and Do Not Disturb (Linux desktops) are honoured as the OS applies them; the app does not fight them (R7). The app's own quiet hours (§2) are a second gate in front of the OS: inside them the app posts nothing, except a ",{"type":22,"tag":62,"props":515,"children":517},{"className":516},[],[518],{"type":31,"value":206},{"type":31,"value":520}," message.",{"type":22,"tag":277,"props":522,"children":523},{},[524,534,536,542,544,549],{"type":22,"tag":27,"props":525,"children":526},{},[527,532],{"type":22,"tag":62,"props":528,"children":530},{"className":529},[],[531],{"type":31,"value":206},{"type":31,"value":533}," in the OS's terms:",{"type":31,"value":535}," the message asks the OS for the interruption level that breaks through Focus (macOS time-sensitive, which needs an entitlement; Windows Focus Assist priority; the freedesktop ",{"type":22,"tag":62,"props":537,"children":539},{"className":538},[],[540],{"type":31,"value":541},"urgency: critical",{"type":31,"value":543}," hint), when the build has that entitlement. Without it, ",{"type":22,"tag":62,"props":545,"children":547},{"className":546},[],[548],{"type":31,"value":206},{"type":31,"value":550}," still posts one ordinary notification and takes its place in the tray and the inbox; the settings page says which the build can do. Critical alerts (macOS, Apple-approved, sound through mute) are never requested.",{"type":22,"tag":277,"props":552,"children":553},{},[554,559,561,566],{"type":22,"tag":27,"props":555,"children":556},{},[557],{"type":31,"value":558},"Per platform",{"type":31,"value":560},", what c131's spike must confirm (c130 ",{"type":22,"tag":62,"props":562,"children":564},{"className":563},[],[565],{"type":31,"value":421},{"type":31,"value":567}," §2 and \"What the spike must test\"):",{"type":22,"tag":89,"props":569,"children":570},{},[571,595],{"type":22,"tag":93,"props":572,"children":573},{},[574],{"type":22,"tag":97,"props":575,"children":576},{},[577,580,585,590],{"type":22,"tag":101,"props":578,"children":579},{},[],{"type":22,"tag":101,"props":581,"children":582},{},[583],{"type":31,"value":584},"macOS",{"type":22,"tag":101,"props":586,"children":587},{},[588],{"type":31,"value":589},"Windows",{"type":22,"tag":101,"props":591,"children":592},{},[593],{"type":31,"value":594},"Linux",{"type":22,"tag":122,"props":596,"children":597},{},[598,629,660,691,714,736],{"type":22,"tag":97,"props":599,"children":600},{},[601,606,619,624],{"type":22,"tag":129,"props":602,"children":603},{},[604],{"type":31,"value":605},"Delivers from",{"type":22,"tag":129,"props":607,"children":608},{},[609,611,617],{"type":31,"value":610},"an installed, signed ",{"type":22,"tag":62,"props":612,"children":614},{"className":613},[],[615],{"type":31,"value":616},".app",{"type":31,"value":618}," bundle only; the app identity set early",{"type":22,"tag":129,"props":620,"children":621},{},[622],{"type":31,"value":623},"an installed app with a Start-menu shortcut carrying an AppUserModelID; never from an elevated process",{"type":22,"tag":129,"props":625,"children":626},{},[627],{"type":31,"value":628},"a session D-Bus and a notification daemon; tray-less GNOME still notifies",{"type":22,"tag":97,"props":630,"children":631},{},[632,637,650,655],{"type":22,"tag":129,"props":633,"children":634},{},[635],{"type":31,"value":636},"Permission",{"type":22,"tag":129,"props":638,"children":639},{},[640,642,648],{"type":31,"value":641},"the OS asks once at first post; ",{"type":22,"tag":62,"props":643,"children":645},{"className":644},[],[646],{"type":31,"value":647},"provisional",{"type":31,"value":649}," delivers quietly to the centre with no prompt (a candidate for the first run: nothing in anyone's face until they allow it)",{"type":22,"tag":129,"props":651,"children":652},{},[653],{"type":31,"value":654},"none beyond the shortcut; the person's Settings decide",{"type":22,"tag":129,"props":656,"children":657},{},[658],{"type":31,"value":659},"the daemon's",{"type":22,"tag":97,"props":661,"children":662},{},[663,668,673,678],{"type":22,"tag":129,"props":664,"children":665},{},[666],{"type":31,"value":667},"Focus \u002F quiet",{"type":22,"tag":129,"props":669,"children":670},{},[671],{"type":31,"value":672},"Focus; time-sensitive needs an entitlement",{"type":22,"tag":129,"props":674,"children":675},{},[676],{"type":31,"value":677},"Focus Assist; priority list",{"type":22,"tag":129,"props":679,"children":680},{},[681,683,689],{"type":31,"value":682},"DND is per desktop; ",{"type":22,"tag":62,"props":684,"children":686},{"className":685},[],[687],{"type":31,"value":688},"urgency",{"type":31,"value":690}," hint",{"type":22,"tag":97,"props":692,"children":693},{},[694,699,704,709],{"type":22,"tag":129,"props":695,"children":696},{},[697],{"type":31,"value":698},"Buttons",{"type":22,"tag":129,"props":700,"children":701},{},[702],{"type":31,"value":703},"yes, by category",{"type":22,"tag":129,"props":705,"children":706},{},[707],{"type":31,"value":708},"needs a COM activator; V1: click opens the app",{"type":22,"tag":129,"props":710,"children":711},{},[712],{"type":31,"value":713},"daemon-dependent; V1: click opens the app",{"type":22,"tag":97,"props":715,"children":716},{},[717,722,727,731],{"type":22,"tag":129,"props":718,"children":719},{},[720],{"type":31,"value":721},"Replace \u002F retract",{"type":22,"tag":129,"props":723,"children":724},{},[725],{"type":31,"value":726},"by tag",{"type":22,"tag":129,"props":728,"children":729},{},[730],{"type":31,"value":726},{"type":22,"tag":129,"props":732,"children":733},{},[734],{"type":31,"value":735},"the kit's adapter neither retracts nor replaces",{"type":22,"tag":97,"props":737,"children":738},{},[739,744,749,754],{"type":22,"tag":129,"props":740,"children":741},{},[742],{"type":31,"value":743},"Delivery result",{"type":22,"tag":129,"props":745,"children":746},{},[747],{"type":31,"value":748},"none: the call returns nothing; the app records \"posted\", never \"delivered\" (R6)",{"type":22,"tag":129,"props":750,"children":751},{},[752],{"type":31,"value":753},"same",{"type":22,"tag":129,"props":755,"children":756},{},[757],{"type":31,"value":753},{"type":22,"tag":273,"props":759,"children":760},{},[761],{"type":22,"tag":277,"props":762,"children":763},{},[764,769],{"type":22,"tag":27,"props":765,"children":766},{},[767],{"type":31,"value":768},"When the OS has notifications off for the app",{"type":31,"value":770},", the settings page says so in one line (\"macOS has notifications for this app turned off. Required messages reach the inbox and the tray only.\") with the OS setting linked. The app never asks twice.",{"type":22,"tag":266,"props":772,"children":774},{"id":773},"_14-web-app",[775],{"type":31,"value":776},"1.4 Web app",{"type":22,"tag":23,"props":778,"children":779},{},[780,782,788],{"type":31,"value":781},"The operator's inbox and send side (§3) and the pages that ",{"type":22,"tag":62,"props":783,"children":785},{"className":784},[],[786],{"type":31,"value":787},"open-page",{"type":31,"value":789}," actions reach: a finding, a policy, a training, a grant, the endpoint. Opened from the native app in the browser, signed in through the plane connection (c131 D13). The same record, the other side.",{"type":22,"tag":266,"props":791,"children":793},{"id":792},"_15-email-and-slack",[794],{"type":31,"value":795},"1.5 Email and Slack",{"type":22,"tag":23,"props":797,"children":798},{},[799],{"type":31,"value":800},"Out of V1 for the citizen. Later, through the plane's integrations (c134 D7), and for the operator's inbox first (a reply from an employee should reach IT where IT already looks). The OS is the citizen's only interruptive channel until a customer asks otherwise (plan Q4).",{"type":22,"tag":83,"props":802,"children":804},{"id":803},"_2-the-citizens-controls",[805],{"type":31,"value":14},{"type":22,"tag":23,"props":807,"children":808},{},[809],{"type":31,"value":810},"One settings page in the native app, titled Messages. Everything on it is the person's; nothing on it changes the record.",{"type":22,"tag":266,"props":812,"children":814},{"id":813},"_21-per-type",[815],{"type":31,"value":816},"2.1 Per type",{"type":22,"tag":23,"props":818,"children":819},{},[820,822,827],{"type":31,"value":821},"Each type has one control with four positions, ",{"type":22,"tag":27,"props":823,"children":824},{},[825],{"type":31,"value":826},"off · inbox · tray · notify",{"type":31,"value":828},", with the inventory's defaults. The person may set any type lower than its default, including enforcement notices to inbox only (R3: the citizen controls delivery). The one exception is written beside the control, not hidden in a dialog.",{"type":22,"tag":89,"props":830,"children":831},{},[832,853],{"type":22,"tag":93,"props":833,"children":834},{},[835],{"type":22,"tag":97,"props":836,"children":837},{},[838,843,848],{"type":22,"tag":101,"props":839,"children":840},{},[841],{"type":31,"value":842},"Type",{"type":22,"tag":101,"props":844,"children":845},{},[846],{"type":31,"value":847},"Default",{"type":22,"tag":101,"props":849,"children":850},{},[851],{"type":31,"value":852},"Note on the page",{"type":22,"tag":122,"props":854,"children":855},{},[856,873,889,905,922,939,954,971,988],{"type":22,"tag":97,"props":857,"children":858},{},[859,864,868],{"type":22,"tag":129,"props":860,"children":861},{},[862],{"type":31,"value":863},"Enforcement notices",{"type":22,"tag":129,"props":865,"children":866},{},[867],{"type":31,"value":442},{"type":22,"tag":129,"props":869,"children":870},{},[871],{"type":31,"value":872},"\"A required notice still arrives once, whatever this is set to.\"",{"type":22,"tag":97,"props":874,"children":875},{},[876,881,886],{"type":22,"tag":129,"props":877,"children":878},{},[879],{"type":31,"value":880},"Notices from HQ",{"type":22,"tag":129,"props":882,"children":883},{},[884],{"type":31,"value":885},"inbox",{"type":22,"tag":129,"props":887,"children":888},{},[],{"type":22,"tag":97,"props":890,"children":891},{},[892,897,902],{"type":22,"tag":129,"props":893,"children":894},{},[895],{"type":31,"value":896},"Connection confirmations",{"type":22,"tag":129,"props":898,"children":899},{},[900],{"type":31,"value":901},"tray",{"type":22,"tag":129,"props":903,"children":904},{},[],{"type":22,"tag":97,"props":906,"children":907},{},[908,913,917],{"type":22,"tag":129,"props":909,"children":910},{},[911],{"type":31,"value":912},"Censures from HQ",{"type":22,"tag":129,"props":914,"children":915},{},[916],{"type":31,"value":442},{"type":22,"tag":129,"props":918,"children":919},{},[920],{"type":31,"value":921},"\"Censures are required and must be acknowledged.\"",{"type":22,"tag":97,"props":923,"children":924},{},[925,930,934],{"type":22,"tag":129,"props":926,"children":927},{},[928],{"type":31,"value":929},"Responsibilities",{"type":22,"tag":129,"props":931,"children":932},{},[933],{"type":31,"value":901},{"type":22,"tag":129,"props":935,"children":936},{},[937],{"type":31,"value":938},"\"You will be asked to acknowledge.\"",{"type":22,"tag":97,"props":940,"children":941},{},[942,947,951],{"type":22,"tag":129,"props":943,"children":944},{},[945],{"type":31,"value":946},"Trainings",{"type":22,"tag":129,"props":948,"children":949},{},[950],{"type":31,"value":901},{"type":22,"tag":129,"props":952,"children":953},{},[],{"type":22,"tag":97,"props":955,"children":956},{},[957,962,966],{"type":22,"tag":129,"props":958,"children":959},{},[960],{"type":31,"value":961},"Requests for diagnostics",{"type":22,"tag":129,"props":963,"children":964},{},[965],{"type":31,"value":901},{"type":22,"tag":129,"props":967,"children":968},{},[969],{"type":31,"value":970},"\"Nothing is sent until you review it.\"",{"type":22,"tag":97,"props":972,"children":973},{},[974,979,983],{"type":22,"tag":129,"props":975,"children":976},{},[977],{"type":31,"value":978},"Sensor state",{"type":22,"tag":129,"props":980,"children":981},{},[982],{"type":31,"value":901},{"type":22,"tag":129,"props":984,"children":985},{},[986],{"type":31,"value":987},"\"Only when something stays off or degraded.\"",{"type":22,"tag":97,"props":989,"children":990},{},[991,996,1000],{"type":22,"tag":129,"props":992,"children":993},{},[994],{"type":31,"value":995},"Replies from HQ",{"type":22,"tag":129,"props":997,"children":998},{},[999],{"type":31,"value":901},{"type":22,"tag":129,"props":1001,"children":1002},{},[],{"type":22,"tag":266,"props":1004,"children":1006},{"id":1005},"_22-quiet-hours-and-the-oss-focus",[1007],{"type":31,"value":1008},"2.2 Quiet hours and the OS's Focus",{"type":22,"tag":273,"props":1010,"children":1011},{},[1012,1022,1032],{"type":22,"tag":277,"props":1013,"children":1014},{},[1015,1020],{"type":22,"tag":27,"props":1016,"children":1017},{},[1018],{"type":31,"value":1019},"The OS's Focus is always honoured",{"type":31,"value":1021},", as the OS applies it; there is no switch for it here (R7).",{"type":22,"tag":277,"props":1023,"children":1024},{},[1025,1030],{"type":22,"tag":27,"props":1026,"children":1027},{},[1028],{"type":31,"value":1029},"Quiet hours",{"type":31,"value":1031}," are the app's own gate in front of the OS: off by default (the OS already has Focus), with one preset (\"Outside working hours\": 18:00 to 08:00 and weekends, in this machine's zone) and custom hours. Inside them, no OS notification; messages go to the inbox and the tray as their setting says.",{"type":22,"tag":277,"props":1033,"children":1034},{},[1035,1040],{"type":22,"tag":27,"props":1036,"children":1037},{},[1038],{"type":31,"value":1039},"No digest notification afterwards.",{"type":31,"value":1041}," The inbox's honesty line says what quiet hours held back; the person sees it when they look, which is the point.",{"type":22,"tag":266,"props":1043,"children":1045},{"id":1044},"_23-mute",[1046],{"type":31,"value":1047},"2.3 Mute",{"type":22,"tag":273,"props":1049,"children":1050},{},[1051,1072,1077],{"type":22,"tag":277,"props":1052,"children":1053},{},[1054,1056,1062,1064,1070],{"type":31,"value":1055},"From a card's menu: \"Mute this policy's notices for today\" (automatic messages; ",{"type":22,"tag":62,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":31,"value":1061},"mute_key: policy:\u003Cid>",{"type":31,"value":1063},") or \"Mute this thread for today\" (everything else; ",{"type":22,"tag":62,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":31,"value":1069},"mute_key: thread:\u003Cid>",{"type":31,"value":1071},"). A mute lasts until 09:00 the next day in this machine's zone and lowers the muted messages to inbox.",{"type":22,"tag":277,"props":1073,"children":1074},{},[1075],{"type":31,"value":1076},"The settings page lists active mutes with their end and a Lift.",{"type":22,"tag":277,"props":1078,"children":1079},{},[1080,1085],{"type":22,"tag":62,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":31,"value":206},{"type":31,"value":1086}," ignores mutes; the honesty line says so when it happens (\"1 required notice came through a mute\").",{"type":22,"tag":266,"props":1088,"children":1090},{"id":1089},"_24-the-single-required-override-and-its-count",[1091,1093,1098],{"type":31,"value":1092},"2.4 The single ",{"type":22,"tag":62,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":31,"value":206},{"type":31,"value":1099}," override, and its count",{"type":22,"tag":23,"props":1101,"children":1102},{},[1103,1105,1110,1112,1117],{"type":31,"value":1104},"Written on the page in two sentences, under its own heading: \"HQ can mark a message required. A required message reaches you once even during quiet hours or with a type turned off, must be acknowledged, and is counted here.\" Then the count: \"HQ has sent this machine ",{"type":22,"tag":27,"props":1106,"children":1107},{},[1108],{"type":31,"value":1109},"2",{"type":31,"value":1111}," required messages this month.\" with the two subjects listed. When the plane's soft ceiling was passed, the card carries HQ's reason line (bones §6). The person cannot turn ",{"type":22,"tag":62,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":31,"value":206},{"type":31,"value":1118}," off; the count is what they get in return (R3, honesty in both directions).",{"type":22,"tag":266,"props":1120,"children":1122},{"id":1121},"_25-why-am-i-seeing-this",[1123],{"type":31,"value":1124},"2.5 \"Why am I seeing this\"",{"type":22,"tag":23,"props":1126,"children":1127},{},[1128,1130,1135],{"type":31,"value":1129},"On every card, one line under the body, in grey: the policy or the person that caused the message, fixed at send time (",{"type":22,"tag":62,"props":1131,"children":1133},{"className":1132},[],[1134],{"type":31,"value":483},{"type":31,"value":1136},"). On the notification it is the subtitle where the OS has one. Never a dialog, never a link to a help page.",{"type":22,"tag":266,"props":1138,"children":1140},{"id":1139},"_26-nothing-hidden",[1141],{"type":31,"value":1142},"2.6 Nothing hidden",{"type":22,"tag":273,"props":1144,"children":1145},{},[1146,1151,1164],{"type":22,"tag":277,"props":1147,"children":1148},{},[1149],{"type":31,"value":1150},"The honesty line in the inbox (§1.1) names what the settings held back and links to the setting.",{"type":22,"tag":277,"props":1152,"children":1153},{},[1154,1156,1162],{"type":31,"value":1155},"Settings never delete or hide a message from the inbox; ",{"type":22,"tag":62,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":31,"value":1161},"off",{"type":31,"value":1163}," means no tray and no notification, and the inbox still fills.",{"type":22,"tag":277,"props":1165,"children":1166},{},[1167,1169,1174],{"type":31,"value":1168},"The settings page's last section, ",{"type":22,"tag":27,"props":1170,"children":1171},{},[1172],{"type":31,"value":1173},"What this app records",{"type":31,"value":1175},", says in plain words what leaves the machine: that a message was delivered, opened (only where an acknowledgement is required), acknowledged, done or expired; never how long it was read or anything else (R6).",{"type":22,"tag":266,"props":1177,"children":1179},{"id":1178},"considered-and-left-to-the-os",[1180],{"type":31,"value":1181},"Considered and left to the OS",{"type":22,"tag":23,"props":1183,"children":1184},{},[1185],{"type":31,"value":1186},"A \"pause everything for an hour\" switch: the OS's Focus does it, and a second switch would mean two places to look (R7, the five questions: not necessary).",{"type":22,"tag":83,"props":1188,"children":1190},{"id":1189},"_3-the-operators-send-side-c134s-shell",[1191],{"type":31,"value":15},{"type":22,"tag":23,"props":1193,"children":1194},{},[1195,1197,1202],{"type":31,"value":1196},"Proposed place: ",{"type":22,"tag":27,"props":1198,"children":1199},{},[1200],{"type":31,"value":1201},"Admin › Messages",{"type":31,"value":1203}," (c134 decides the rail). Two views in one page: the inbox and Send.",{"type":22,"tag":266,"props":1205,"children":1207},{"id":1206},"_31-the-operators-inbox",[1208],{"type":31,"value":1209},"3.1 The operator's inbox",{"type":22,"tag":273,"props":1211,"children":1212},{},[1213,1234,1246,1256],{"type":22,"tag":277,"props":1214,"children":1215},{},[1216,1218,1224,1226,1232],{"type":31,"value":1217},"Threads that wait for an answer first (a ",{"type":22,"tag":62,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":31,"value":1223},"contact-it",{"type":31,"value":1225},", a ",{"type":22,"tag":62,"props":1227,"children":1229},{"className":1228},[],[1230],{"type":31,"value":1231},"reply",{"type":31,"value":1233}," from the person, a diagnostics package), then everything sent, newest first.",{"type":22,"tag":277,"props":1235,"children":1236},{},[1237,1239,1244],{"type":31,"value":1238},"A sent message shows its states per recipient, as counts for a batch: sent 42 · seen 30 · acknowledged 12 · expired 2, with the people behind each number one click away (the audit log, R6). ",{"type":22,"tag":62,"props":1240,"children":1242},{"className":1241},[],[1243],{"type":31,"value":491},{"type":31,"value":1245}," is shown only for messages that require acknowledgement.",{"type":22,"tag":277,"props":1247,"children":1248},{},[1249,1254],{"type":22,"tag":27,"props":1250,"children":1251},{},[1252],{"type":31,"value":1253},"Recall",{"type":31,"value":1255}," on anything not yet ended: the card on every machine says \"HQ withdrew this message\"; the record keeps it (bones §5).",{"type":22,"tag":277,"props":1257,"children":1258},{},[1259,1261,1265],{"type":31,"value":1260},"The honesty counter at the top: \"Your plane has sent ",{"type":22,"tag":27,"props":1262,"children":1263},{},[1264],{"type":31,"value":1109},{"type":31,"value":1266}," required messages this month. The people see this number.\"",{"type":22,"tag":266,"props":1268,"children":1270},{"id":1269},"_32-send",[1271],{"type":31,"value":1272},"3.2 Send",{"type":22,"tag":89,"props":1274,"children":1275},{},[1276,1292],{"type":22,"tag":93,"props":1277,"children":1278},{},[1279],{"type":22,"tag":97,"props":1280,"children":1281},{},[1282,1287],{"type":22,"tag":101,"props":1283,"children":1284},{},[1285],{"type":31,"value":1286},"Field",{"type":22,"tag":101,"props":1288,"children":1289},{},[1290],{"type":31,"value":1291},"Behaviour",{"type":22,"tag":122,"props":1293,"children":1294},{},[1295,1307,1320,1333,1346,1359,1378,1391,1404],{"type":22,"tag":97,"props":1296,"children":1297},{},[1298,1302],{"type":22,"tag":129,"props":1299,"children":1300},{},[1301],{"type":31,"value":842},{"type":22,"tag":129,"props":1303,"children":1304},{},[1305],{"type":31,"value":1306},"the sendable ones: a notice from HQ, a censure, a responsibility, a training, a request for diagnostics. Enforcement notices come from policies, confirmations from the plane; they are not written here",{"type":22,"tag":97,"props":1308,"children":1309},{},[1310,1315],{"type":22,"tag":129,"props":1311,"children":1312},{},[1313],{"type":31,"value":1314},"To",{"type":22,"tag":129,"props":1316,"children":1317},{},[1318],{"type":31,"value":1319},"a person, an endpoint, a team, everyone; the count of machines it will reach, shown before Send",{"type":22,"tag":97,"props":1321,"children":1322},{},[1323,1328],{"type":22,"tag":129,"props":1324,"children":1325},{},[1326],{"type":31,"value":1327},"Subject",{"type":22,"tag":129,"props":1329,"children":1330},{},[1331],{"type":31,"value":1332},"60 characters, with a counter",{"type":22,"tag":97,"props":1334,"children":1335},{},[1336,1341],{"type":22,"tag":129,"props":1337,"children":1338},{},[1339],{"type":31,"value":1340},"The three sentences",{"type":22,"tag":129,"props":1342,"children":1343},{},[1344],{"type":31,"value":1345},"three fields with their prompts (what happened · why it matters · what to do next), 200 characters each, with counters; a censure's are HQ's words and the form says they are shown as written",{"type":22,"tag":97,"props":1347,"children":1348},{},[1349,1354],{"type":22,"tag":129,"props":1350,"children":1351},{},[1352],{"type":31,"value":1353},"Actions",{"type":22,"tag":129,"props":1355,"children":1356},{},[1357],{"type":31,"value":1358},"up to three, from the type's allowed kinds; the primary first",{"type":22,"tag":97,"props":1360,"children":1361},{},[1362,1367],{"type":22,"tag":129,"props":1363,"children":1364},{},[1365],{"type":31,"value":1366},"Severity",{"type":22,"tag":129,"props":1368,"children":1369},{},[1370,1372,1376],{"type":31,"value":1371},"info · attention; ",{"type":22,"tag":27,"props":1373,"children":1374},{},[1375],{"type":31,"value":206},{"type":31,"value":1377}," only where the type allows it, and then the form shows the fleet's count this month and the highest count among the chosen recipients, and asks for a reason line above the soft ceiling",{"type":22,"tag":97,"props":1379,"children":1380},{},[1381,1386],{"type":22,"tag":129,"props":1382,"children":1383},{},[1384],{"type":31,"value":1385},"Expires",{"type":22,"tag":129,"props":1387,"children":1388},{},[1389],{"type":31,"value":1390},"the type's default, or a date (a notice about Monday expires Monday)",{"type":22,"tag":97,"props":1392,"children":1393},{},[1394,1399],{"type":22,"tag":129,"props":1395,"children":1396},{},[1397],{"type":31,"value":1398},"Preview",{"type":22,"tag":129,"props":1400,"children":1401},{},[1402],{"type":31,"value":1403},"the card as the person will see it, and the OS notification as it will read; the voice lint's findings inline, on the three sentences",{"type":22,"tag":97,"props":1405,"children":1406},{},[1407,1412],{"type":22,"tag":129,"props":1408,"children":1409},{},[1410],{"type":31,"value":1411},"Send",{"type":22,"tag":129,"props":1413,"children":1414},{},[1415],{"type":31,"value":1416},"one button; no drafts in V1; Recall afterwards from the inbox",{"type":22,"tag":266,"props":1418,"children":1420},{"id":1419},"_33-plane-settings-three",[1421],{"type":31,"value":1422},"3.3 Plane settings (three)",{"type":22,"tag":23,"props":1424,"children":1425},{},[1426,1432,1434,1440,1442,1448],{"type":22,"tag":62,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":31,"value":1431},"messages.sender_label",{"type":31,"value":1433}," (default \"HQ\") · ",{"type":22,"tag":62,"props":1435,"children":1437},{"className":1436},[],[1438],{"type":31,"value":1439},"messages.required_on_notices",{"type":31,"value":1441}," (default off) · ",{"type":22,"tag":62,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":31,"value":1447},"messages.required_soft_limit",{"type":31,"value":1449}," (default 3 per recipient per month). Under Admin, beside the other org settings.",{"type":22,"tag":266,"props":1451,"children":1453},{"id":1452},"_34-audit",[1454],{"type":31,"value":1455},"3.4 Audit",{"type":22,"tag":23,"props":1457,"children":1458},{},[1459,1465,1467,1473,1474,1480,1481,1487,1488,1494,1496,1502,1504,1509],{"type":22,"tag":62,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":31,"value":1464},"message.sent",{"type":31,"value":1466},", ",{"type":22,"tag":62,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":31,"value":1472},"message.acknowledged",{"type":31,"value":1466},{"type":22,"tag":62,"props":1475,"children":1477},{"className":1476},[],[1478],{"type":31,"value":1479},"message.done",{"type":31,"value":1466},{"type":22,"tag":62,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":31,"value":1486},"message.expired",{"type":31,"value":1466},{"type":22,"tag":62,"props":1489,"children":1491},{"className":1490},[],[1492],{"type":31,"value":1493},"message.recalled",{"type":31,"value":1495},"; ",{"type":22,"tag":62,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":31,"value":1501},"message.seen",{"type":31,"value":1503}," only for messages that require acknowledgement. Nothing about dwell or read time (R6). c133's proof of correction reads ",{"type":22,"tag":62,"props":1505,"children":1507},{"className":1506},[],[1508],{"type":31,"value":1479},{"type":31,"value":1510}," on a training assignment.",{"type":22,"tag":83,"props":1512,"children":1514},{"id":1513},"_4-the-lab-mock",[1515],{"type":31,"value":16},{"type":22,"tag":23,"props":1517,"children":1518},{},[1519],{"type":31,"value":1520},"Built in the phase-4 lab as design mocks (D8: the web side in the lab; the native side here only as a web rendering until c132 decides the medium, and each page says so).",{"type":22,"tag":89,"props":1522,"children":1523},{},[1524,1545],{"type":22,"tag":93,"props":1525,"children":1526},{},[1527],{"type":22,"tag":97,"props":1528,"children":1529},{},[1530,1535,1540],{"type":22,"tag":101,"props":1531,"children":1532},{},[1533],{"type":31,"value":1534},"Page",{"type":22,"tag":101,"props":1536,"children":1537},{},[1538],{"type":31,"value":1539},"Route",{"type":22,"tag":101,"props":1541,"children":1542},{},[1543],{"type":31,"value":1544},"What it shows",{"type":22,"tag":122,"props":1546,"children":1547},{},[1548,1573,1598],{"type":22,"tag":97,"props":1549,"children":1550},{},[1551,1559,1568],{"type":22,"tag":129,"props":1552,"children":1553},{},[1554],{"type":22,"tag":27,"props":1555,"children":1556},{},[1557],{"type":31,"value":1558},"Message bones",{"type":22,"tag":129,"props":1560,"children":1561},{},[1562],{"type":22,"tag":62,"props":1563,"children":1565},{"className":1564},[],[1566],{"type":31,"value":1567},"\u002Fpages\u002Fphase4\u002Fmessaging-bones",{"type":22,"tag":129,"props":1569,"children":1570},{},[1571],{"type":31,"value":1572},"the message component over the ten examples and the two operator-side ones, across the five states (new · seen · acknowledged · done · expired); the OS notification and the tray line for the same messages; the three-sentence rule visible on every card",{"type":22,"tag":97,"props":1574,"children":1575},{},[1576,1584,1593],{"type":22,"tag":129,"props":1577,"children":1578},{},[1579],{"type":22,"tag":27,"props":1580,"children":1581},{},[1582],{"type":31,"value":1583},"Messages: the person's inbox and settings",{"type":22,"tag":129,"props":1585,"children":1586},{},[1587],{"type":22,"tag":62,"props":1588,"children":1590},{"className":1589},[],[1591],{"type":31,"value":1592},"\u002Fpages\u002Fphase4\u002Fmessaging-inbox",{"type":22,"tag":129,"props":1594,"children":1595},{},[1596],{"type":31,"value":1597},"a web rendering standing in for the native app: the inbox with the honesty line, open threads and the fold; the tray; the settings page (per type, quiet hours, mutes, the required count, what this app records)",{"type":22,"tag":97,"props":1599,"children":1600},{},[1601,1609,1618],{"type":22,"tag":129,"props":1602,"children":1603},{},[1604],{"type":22,"tag":27,"props":1605,"children":1606},{},[1607],{"type":31,"value":1608},"Messages: the operator's side",{"type":22,"tag":129,"props":1610,"children":1611},{},[1612],{"type":22,"tag":62,"props":1613,"children":1615},{"className":1614},[],[1616],{"type":31,"value":1617},"\u002Fpages\u002Fphase4\u002Fmock\u002Fmessages",{"type":22,"tag":129,"props":1619,"children":1620},{},[1621],{"type":31,"value":1622},"in the lab's qdash shell (not on the rail yet; c134 decides): the operator's inbox with states per recipient and Recall, the honesty counter, and Send with the preview and the voice lint",{"type":22,"tag":23,"props":1624,"children":1625},{},[1626,1628,1634,1636,1642,1644,1649,1651,1657,1658,1664,1665,1671,1672,1678,1679,1685,1686,1692,1693,1699,1700,1706,1708,1714],{"type":31,"value":1627},"The three pages share one state for the visit (",{"type":22,"tag":62,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":31,"value":1633},"useMessagingMock",{"type":31,"value":1635},"): a message sent from the operator's page appears in the person's inbox; an acknowledgement there shows on the operator's side. The fixture is ",{"type":22,"tag":62,"props":1637,"children":1639},{"className":1638},[],[1640],{"type":31,"value":1641},"app\u002Fdata\u002Fmessaging-fixture.ts",{"type":31,"value":1643},", written from ",{"type":22,"tag":62,"props":1645,"children":1647},{"className":1646},[],[1648],{"type":31,"value":67},{"type":31,"value":1650}," §10. Layer components first (",{"type":22,"tag":62,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":31,"value":1656},"UxPageTitle",{"type":31,"value":1466},{"type":22,"tag":62,"props":1659,"children":1661},{"className":1660},[],[1662],{"type":31,"value":1663},"UxTabGroup",{"type":31,"value":1466},{"type":22,"tag":62,"props":1666,"children":1668},{"className":1667},[],[1669],{"type":31,"value":1670},"UxFilterGroup",{"type":31,"value":1466},{"type":22,"tag":62,"props":1673,"children":1675},{"className":1674},[],[1676],{"type":31,"value":1677},"UxPill",{"type":31,"value":1466},{"type":22,"tag":62,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":31,"value":1684},"UxToggle",{"type":31,"value":1466},{"type":22,"tag":62,"props":1687,"children":1689},{"className":1688},[],[1690],{"type":31,"value":1691},"UxButton",{"type":31,"value":1466},{"type":22,"tag":62,"props":1694,"children":1696},{"className":1695},[],[1697],{"type":31,"value":1698},"UxPopover",{"type":31,"value":1466},{"type":22,"tag":62,"props":1701,"children":1703},{"className":1702},[],[1704],{"type":31,"value":1705},"DataTable",{"type":31,"value":1707},"); the card, the notification and the tray line are design-local (",{"type":22,"tag":62,"props":1709,"children":1711},{"className":1710},[],[1712],{"type":31,"value":1713},"app\u002Fcomponents\u002Fmessaging\u002F",{"type":31,"value":1715},"), candidates for the layer once the native side settles.",{"type":22,"tag":83,"props":1717,"children":1719},{"id":1718},"_5-questions-the-mock-raised",[1720],{"type":31,"value":17},{"type":22,"tag":1722,"props":1723,"children":1724},"ol",{},[1725,1735,1752,1776,1786,1796,1806,1824,1855,1872],{"type":22,"tag":277,"props":1726,"children":1727},{},[1728,1733],{"type":22,"tag":27,"props":1729,"children":1730},{},[1731],{"type":31,"value":1732},"Enforcement notices set to inbox only.",{"type":31,"value":1734}," The person may lower enforcement notices to inbox (R3). Peterson's ask was that the person be told; is \"told, in the inbox, when they look\" enough, or should enforcement notices have a floor of tray? Default here: the person decides; the tray count is cheap and most will leave it.",{"type":22,"tag":277,"props":1736,"children":1737},{},[1738,1743,1745,1750],{"type":22,"tag":27,"props":1739,"children":1740},{},[1741],{"type":31,"value":1742},"Provisional delivery on macOS as the first run.",{"type":31,"value":1744}," Posting quietly to the notification centre with no permission prompt until the person opens one is the least noisy start and matches \"invisible when working\"; it also means the first ",{"type":22,"tag":62,"props":1746,"children":1748},{"className":1747},[],[1749],{"type":31,"value":206},{"type":31,"value":1751}," message may arrive silently if the person never allowed alerts. Accept, or prompt at Connect?",{"type":22,"tag":277,"props":1753,"children":1754},{},[1755,1767,1769,1774],{"type":22,"tag":27,"props":1756,"children":1757},{},[1758,1760,1765],{"type":31,"value":1759},"The ",{"type":22,"tag":62,"props":1761,"children":1763},{"className":1762},[],[1764],{"type":31,"value":206},{"type":31,"value":1766}," entitlement.",{"type":31,"value":1768}," Breaking through Focus on macOS needs the time-sensitive entitlement on a signed build; c131's spike finds out whether we get it. Without it ",{"type":22,"tag":62,"props":1770,"children":1772},{"className":1771},[],[1773],{"type":31,"value":206},{"type":31,"value":1775}," is one ordinary notification plus the tray. Is that acceptable for V1?",{"type":22,"tag":277,"props":1777,"children":1778},{},[1779,1784],{"type":22,"tag":27,"props":1780,"children":1781},{},[1782],{"type":31,"value":1783},"Acknowledge from the notification.",{"type":31,"value":1785}," Kept off (acknowledging means having read the card). Mark may want it for censures on Windows, where a click already opens the app.",{"type":22,"tag":277,"props":1787,"children":1788},{},[1789,1794],{"type":22,"tag":27,"props":1790,"children":1791},{},[1792],{"type":31,"value":1793},"The sender label per message.",{"type":31,"value":1795}," \"HQ\" is one label per plane. A customer with Security and IT as different senders would want two; bones keeps one string plus the operator's name. Enough?",{"type":22,"tag":277,"props":1797,"children":1798},{},[1799,1804],{"type":22,"tag":27,"props":1800,"children":1801},{},[1802],{"type":31,"value":1803},"The operator's inbox place.",{"type":31,"value":1805}," Admin › Messages is proposed; the replies are closer to Findings in spirit. c134 decides with the rail.",{"type":22,"tag":277,"props":1807,"children":1808},{},[1809,1814,1816,1822],{"type":22,"tag":27,"props":1810,"children":1811},{},[1812],{"type":31,"value":1813},"Local mode's Contact IT.",{"type":31,"value":1815}," A mailto from qcontrol's configuration (",{"type":22,"tag":62,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":31,"value":1821},"it_contact",{"type":31,"value":1823},"); no plane means no thread. Is a one-way path acceptable until the machine connects?",{"type":22,"tag":277,"props":1825,"children":1826},{},[1827,1832,1834,1839,1841,1846,1848,1853],{"type":22,"tag":27,"props":1828,"children":1829},{},[1830],{"type":31,"value":1831},"Inbox order.",{"type":31,"value":1833}," Newest activity on top (bones §5) puts a three-day-old required censure, still unacknowledged, below yesterday's seen items; the tray count holds it, but the inbox does not lift it. Should open ",{"type":22,"tag":62,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":31,"value":206},{"type":31,"value":1840}," and ",{"type":22,"tag":62,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":31,"value":346},{"type":31,"value":1847}," messages float above ",{"type":22,"tag":62,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":31,"value":491},{"type":31,"value":1854}," ones? Default here: keep the order honest (by time) and let the tray carry the weight; Mark may prefer the lift.",{"type":22,"tag":277,"props":1856,"children":1857},{},[1858,1863,1865,1870],{"type":22,"tag":27,"props":1859,"children":1860},{},[1861],{"type":31,"value":1862},"The lint advises, never blocks.",{"type":31,"value":1864}," The send form's voice lint flags an em dash, an exclamation point or an R4 word and leaves Send enabled; only the lengths and the ",{"type":22,"tag":62,"props":1866,"children":1868},{"className":1867},[],[1869],{"type":31,"value":206},{"type":31,"value":1871}," permission are hard checks (bones §9). Confirm, or make a flagged sentence a second click.",{"type":22,"tag":277,"props":1873,"children":1874},{},[1875,1880],{"type":22,"tag":27,"props":1876,"children":1877},{},[1878],{"type":31,"value":1879},"Ended messages in the inbox take the acknowledgement's note with them.",{"type":31,"value":1881}," When a message ends from an action, the card moves under the fold at once and the one-line confirmation (\"Acknowledged; HQ sees it\") has nowhere to show. A short toast in the native app (the Root's notification host, c131 D8) is the likely answer; the mock shows none.",{"type":22,"tag":266,"props":1883,"children":1885},{"id":1884},"answered-by-mark-on-2026-11-11",[1886],{"type":31,"value":1887},"Answered by Mark on 2026-11-11",{"type":22,"tag":1722,"props":1889,"children":1890},{},[1891,1896,1923,1935,1940,1945,1950,1962,1991,2012],{"type":22,"tag":277,"props":1892,"children":1893},{},[1894],{"type":31,"value":1895},"The person decides; tray is the default for enforcement notices (R3 holds, no floor).",{"type":22,"tag":277,"props":1897,"children":1898},{},[1899,1901,1906,1908,1914,1916,1921],{"type":31,"value":1900},"Prompt for alert permission at Connect, once, with the reason. And the delivery levels become three plain modes per kind, ",{"type":22,"tag":27,"props":1902,"children":1903},{},[1904],{"type":31,"value":1905},"quiet · normal · priority",{"type":31,"value":1907},", each one OS interruption level (macOS passive · active · time-sensitive; Windows toast priority and Focus Assist): ",{"type":22,"tag":62,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":31,"value":1913},"priority",{"type":31,"value":1915}," is the ceiling and only ",{"type":22,"tag":62,"props":1917,"children":1919},{"className":1918},[],[1920],{"type":31,"value":206},{"type":31,"value":1922}," messages may use it; \"critical\" and \"danger\" never appear (R4). The person may set any kind quieter.",{"type":22,"tag":277,"props":1924,"children":1925},{},[1926,1928,1933],{"type":31,"value":1927},"Yes for V1: without the time-sensitive entitlement, ",{"type":22,"tag":62,"props":1929,"children":1931},{"className":1930},[],[1932],{"type":31,"value":206},{"type":31,"value":1934}," is notify plus the tray plus the inbox flag.",{"type":22,"tag":277,"props":1936,"children":1937},{},[1938],{"type":31,"value":1939},"Acknowledge from the notification stays off; the notification opens the card.",{"type":22,"tag":277,"props":1941,"children":1942},{},[1943],{"type":31,"value":1944},"One sender label per plane plus the operator's name.",{"type":22,"tag":277,"props":1946,"children":1947},{},[1948],{"type":31,"value":1949},"Admin › Messages.",{"type":22,"tag":277,"props":1951,"children":1952},{},[1953,1955,1960],{"type":31,"value":1954},"One-way Contact IT (a mailto from qcontrol's ",{"type":22,"tag":62,"props":1956,"children":1958},{"className":1957},[],[1959],{"type":31,"value":1821},{"type":31,"value":1961},") until the machine connects.",{"type":22,"tag":277,"props":1963,"children":1964},{},[1965,1970,1972,1977,1978,1983,1984,1989],{"type":22,"tag":27,"props":1966,"children":1967},{},[1968],{"type":31,"value":1969},"Lift:",{"type":31,"value":1971}," open ",{"type":22,"tag":62,"props":1973,"children":1975},{"className":1974},[],[1976],{"type":31,"value":206},{"type":31,"value":1840},{"type":22,"tag":62,"props":1979,"children":1981},{"className":1980},[],[1982],{"type":31,"value":346},{"type":31,"value":1847},{"type":22,"tag":62,"props":1985,"children":1987},{"className":1986},[],[1988],{"type":31,"value":491},{"type":31,"value":1990}," ones; within each band, by time (changes bones §5's order).",{"type":22,"tag":277,"props":1992,"children":1993},{},[1994,1996,2002,2004,2010],{"type":31,"value":1995},"The lint's strictness is a plane setting, ",{"type":22,"tag":62,"props":1997,"children":1999},{"className":1998},[],[2000],{"type":31,"value":2001},"voice_lint: advise | confirm",{"type":31,"value":2003},", default advise; ",{"type":22,"tag":62,"props":2005,"children":2007},{"className":2006},[],[2008],{"type":31,"value":2009},"confirm",{"type":31,"value":2011}," makes a flagged message ask \"send anyway?\" once.",{"type":22,"tag":277,"props":2013,"children":2014},{},[2015],{"type":31,"value":2016},"A short toast in the native app's notification host (c131 D8); the web mock gets the same.",{"type":22,"tag":23,"props":2018,"children":2019},{},[2020],{"type":31,"value":2021},"The lab mock follows these in Phase 3 (the three modes in settings, the lifted order, the toast, the lint setting).",{"type":22,"tag":266,"props":2023,"children":2025},{"id":2024},"verified-on-2026-11-09",[2026],{"type":31,"value":2027},"Verified on 2026-11-09",{"type":22,"tag":23,"props":2029,"children":2030},{},[2031,2033,2039,2041,2047,2048,2054],{"type":31,"value":2032},"The three pages were checked on the live design server (:3000) with curl (200, server-rendered content) and in the browser pane: no console errors; the orange severity pill styled from the new files; acknowledging the censure moved it to acknowledged and dropped the tray count from three to two; a message sent from the operator's page appeared in the person's inbox as new over an in-app link (shared visit state); the lint flagged a deliberate em dash, exclamation point and \"urgent\". Captures: ",{"type":22,"tag":62,"props":2034,"children":2036},{"className":2035},[],[2037],{"type":31,"value":2038},"public\u002Fcycles\u002Fdesign\u002Fc137-messaging-bones.png",{"type":31,"value":2040}," (+full), ",{"type":22,"tag":62,"props":2042,"children":2044},{"className":2043},[],[2045],{"type":31,"value":2046},"c137-messaging-inbox.png",{"type":31,"value":1466},{"type":22,"tag":62,"props":2049,"children":2051},{"className":2050},[],[2052],{"type":31,"value":2053},"c137-mock-messages.png",{"type":31,"value":2055}," (+full), tagged with the registry's subjects.",1794599382554]