[{"data":1,"prerenderedAt":2104},["ShallowReactive",2],{"cycle-doc-design-c133-handoff.md":3},{"cycle":4,"project":7,"path":10,"title":11,"toc":12,"ast":16},{"id":5,"title":6},"c133","Remediation Training",{"id":8,"label":9},"design","Design","handoff.md","c133 · The hand-off (Phase 5, 2026-11-12)",[13,14,15],"For c134: the web app","For c131 and qnative c4: the native app","What c133 still owes",{"type":17,"children":18},"root",[19,73,91,97,104,124,223,229,366,380,513,811,817,941,947,1051,1057,1080,1086,1184,1190,1224,1328,1334,1495,1501,1609,1614,1620,1787,1793,1823,1829,1881,1887,2035,2040],{"type":20,"tag":21,"props":22,"children":23},"element","p",{},[24,31,33,38,40,45,47,59,61,71],{"type":20,"tag":25,"props":26,"children":27},"strong",{},[28],{"type":29,"value":30},"text","For:",{"type":29,"value":32}," c134 (the control plane web app: the training page, the record, the library), c131 and qnative c4 (the native app: the notice and the link), Tyler (D22–D27 and the event names). ",{"type":20,"tag":25,"props":34,"children":35},{},[36],{"type":29,"value":37},"From:",{"type":29,"value":39}," c133, Phases 1–5. ",{"type":20,"tag":25,"props":41,"children":42},{},[43],{"type":29,"value":44},"Status:",{"type":29,"value":46}," designed and mocked in the design site's phase-4 lab; nothing is built in the plane or in qcontrol by this cycle. The decisions are D1–D37 in ",{"type":20,"tag":48,"props":49,"children":51},"a",{"href":50},"\u002Fcycles\u002Fdesign\u002Fc133\u002Fdoc\u002Fplan",[52],{"type":20,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":29,"value":58},"plan.md",{"type":29,"value":60},"; the open calls of this phase are in ",{"type":20,"tag":48,"props":62,"children":64},{"href":63},"\u002Fcycles\u002Fdesign\u002Fc133\u002Fdoc\u002Freview-5",[65],{"type":20,"tag":53,"props":66,"children":68},{"className":67},[],[69],{"type":29,"value":70},"review-5.md",{"type":29,"value":72},".",{"type":20,"tag":21,"props":74,"children":75},{},[76,81,83,89],{"type":20,"tag":25,"props":77,"children":78},{},[79],{"type":29,"value":80},"What is handed over.",{"type":29,"value":82}," A training is four things: a trigger (a policy's finding sends the person a ",{"type":20,"tag":53,"props":84,"children":86},{"className":85},[],[87],{"type":29,"value":88},"training-assignment",{"type":29,"value":90}," message), a lesson, a check and a record. The person takes it on the web app, opened from the native app's message; completion writes one audit row, ends the message and shows on the finding, in its history and in Reports as a count. Three pilots are written and published: Unapproved MCP servers (T-MCP-1, on F-A), Personal accounts for work (T-ACCT-1, on F-C), Secrets in prompts (T-SECRETS-1, on F-G). A person can also take any of them on their own from a library.",{"type":20,"tag":92,"props":93,"children":95},"h2",{"id":94},"for-c134-the-web-app",[96],{"type":29,"value":13},{"type":20,"tag":98,"props":99,"children":101},"h3",{"id":100},"_1-the-training-page",[102],{"type":29,"value":103},"1. The training page",{"type":20,"tag":21,"props":105,"children":106},{},[107,109,114,116,122],{"type":29,"value":108},"The lab mock is the reference: ",{"type":20,"tag":48,"props":110,"children":112},{"href":111},"\u002Fpages\u002Fphase4\u002Fmock\u002Ftraining?findingId=F-A",[113],{"type":29,"value":111},{"type":29,"value":115},", with ",{"type":20,"tag":53,"props":117,"children":119},{"className":118},[],[120],{"type":29,"value":121},"?at=assigned · lesson · check · passed · retake · recorded",{"type":29,"value":123}," for each stage.",{"type":20,"tag":125,"props":126,"children":127},"ul",{},[128,139,149,159,169,195,213],{"type":20,"tag":129,"props":130,"children":131},"li",{},[132,137],{"type":20,"tag":25,"props":133,"children":134},{},[135],{"type":29,"value":136},"What it is:",{"type":29,"value":138}," the person's page, not the operator's. It speaks to the person the finding names (R2, R6), takes under three minutes (R1), checks the idea and not the wording (R3), and ends every stage with a path to a person (R5).",{"type":20,"tag":129,"props":140,"children":141},{},[142,147],{"type":20,"tag":25,"props":143,"children":144},{},[145],{"type":29,"value":146},"The stages:",{"type":29,"value":148}," the assignment as the inbox shows it; the lesson, one step at a time, each with its scene; the check; the result with the explanations and the record shown before it is written (D14); the retake, which keeps what was right and names the step to reread (D3, D15); the record and where it shows.",{"type":20,"tag":129,"props":150,"children":151},{},[152,157],{"type":20,"tag":25,"props":153,"children":154},{},[155],{"type":29,"value":156},"What reaches the plane:",{"type":29,"value":158}," nothing between the assignment and Finish (D13). The page holds the progress in the browser; the plane learns one thing, the completion.",{"type":20,"tag":129,"props":160,"children":161},{},[162,167],{"type":20,"tag":25,"props":163,"children":164},{},[165],{"type":29,"value":166},"Grading:",{"type":29,"value":168}," in the web app; the published data marks the right choice (D28).",{"type":20,"tag":129,"props":170,"children":171},{},[172,177,179,185,187,193],{"type":20,"tag":25,"props":173,"children":174},{},[175],{"type":29,"value":176},"The lesson's data:",{"type":29,"value":178}," the text arrives with ",{"type":20,"tag":53,"props":180,"children":182},{"className":181},[],[183],{"type":29,"value":184},"{slots}",{"type":29,"value":186}," and the web app fills them from the finding it answers: the finding, its session, its policy, the policy's configuration (the sanctioned list, the detectors), the exceptions with their reasons as the operator wrote them (D12, D32), the policy's owner. ",{"type":20,"tag":53,"props":188,"children":190},{"className":189},[],[191],{"type":29,"value":192},"publish.md",{"type":29,"value":194}," §Slots lists them and the three that are thin in the product (the sanctioned list for the person's team, the policy's owner, an exception's reason).",{"type":20,"tag":129,"props":196,"children":197},{},[198,203,205,211],{"type":20,"tag":25,"props":199,"children":200},{},[201],{"type":29,"value":202},"The scenes:",{"type":29,"value":204}," twelve drawings, one component each, catalogued in ",{"type":20,"tag":53,"props":206,"children":208},{"className":207},[],[209],{"type":29,"value":210},"app\u002Fdata\u002Ftrainings\u002Fscenes.ts",{"type":29,"value":212}," with the slots each reads. They port as components; they read the theme's tokens and the finding, so they are true in light and dark and for every finding of their kind.",{"type":20,"tag":129,"props":214,"children":215},{},[216,221],{"type":20,"tag":25,"props":217,"children":218},{},[219],{"type":29,"value":220},"Where the page lives",{"type":29,"value":222}," in the person's reduced frame (signed in through the plane connection) is c134's to rule (plan, clarifying question 5).",{"type":20,"tag":98,"props":224,"children":226},{"id":225},"_2-the-trainings-copied-in-at-release-d29",[227],{"type":29,"value":228},"2. The trainings, copied in at release (D29)",{"type":20,"tag":125,"props":230,"children":231},{},[232,261,313,323,356],{"type":20,"tag":129,"props":233,"children":234},{},[235,240,242,248,250,260],{"type":20,"tag":25,"props":236,"children":237},{},[238],{"type":29,"value":239},"The source:",{"type":29,"value":241}," the content collection on the design site, ",{"type":20,"tag":53,"props":243,"children":245},{"className":244},[],[246],{"type":29,"value":247},"app\u002Fdata\u002Ftrainings\u002F\u003Clang>\u002F\u003Cslug>.md",{"type":29,"value":249},", one file per training and language (D4, D11); the format is ",{"type":20,"tag":48,"props":251,"children":253},{"href":252},"\u002Fcycles\u002Fdesign\u002Fc133\u002Fdoc\u002Fauthoring",[254],{"type":20,"tag":53,"props":255,"children":257},{"className":256},[],[258],{"type":29,"value":259},"authoring.md",{"type":29,"value":72},{"type":20,"tag":129,"props":262,"children":263},{},[264,269,271,277,279,285,287,293,295,301,303,312],{"type":20,"tag":25,"props":265,"children":266},{},[267],{"type":29,"value":268},"The JSON:",{"type":29,"value":270}," ",{"type":20,"tag":53,"props":272,"children":274},{"className":273},[],[275],{"type":29,"value":276},"GET \u002Fapi\u002Ftrainings",{"type":29,"value":278}," and ",{"type":20,"tag":53,"props":280,"children":282},{"className":281},[],[283],{"type":29,"value":284},"GET \u002Fapi\u002Ftrainings\u002F\u003Cid>",{"type":29,"value":286}," on the design site (",{"type":20,"tag":53,"props":288,"children":290},{"className":289},[],[291],{"type":29,"value":292},"server\u002Fapi\u002Ftrainings\u002F",{"type":29,"value":294},", ",{"type":20,"tag":53,"props":296,"children":298},{"className":297},[],[299],{"type":29,"value":300},"server\u002Fdata\u002Ftrainings.ts",{"type":29,"value":302},"); the shape, the slots, the version and the content hash in ",{"type":20,"tag":48,"props":304,"children":306},{"href":305},"\u002Fcycles\u002Fdesign\u002Fc133\u002Fdoc\u002Fpublish",[307],{"type":20,"tag":53,"props":308,"children":310},{"className":309},[],[311],{"type":29,"value":192},{"type":29,"value":72},{"type":20,"tag":129,"props":314,"children":315},{},[316,321],{"type":20,"tag":25,"props":317,"children":318},{},[319],{"type":29,"value":320},"At release",{"type":29,"value":322}," the publish step's JSON is copied into the plane's repository; the plane never reads the design site, which sits behind Access (D29). The copy step is not built (open item 3).",{"type":20,"tag":129,"props":324,"children":325},{},[326,331,333,339,341,347,349,355],{"type":20,"tag":25,"props":327,"children":328},{},[329],{"type":29,"value":330},"Versions:",{"type":29,"value":332}," the integer ",{"type":20,"tag":53,"props":334,"children":336},{"className":335},[],[337],{"type":29,"value":338},"version",{"type":29,"value":340}," moves on a change of meaning (a step, a question, a right answer); the ",{"type":20,"tag":53,"props":342,"children":344},{"className":343},[],[345],{"type":29,"value":346},"contentHash",{"type":29,"value":348}," moves with any change, a typo fix included (D26, D31). T-MCP-1 shows the difference: its choices were reordered in Phase 5 (D34), so it stayed v1 with a new hash; Phase 6 added its library words (D38), still v1, and the hash is now ",{"type":20,"tag":53,"props":350,"children":352},{"className":351},[],[353],{"type":29,"value":354},"sha256:7f6e1737e972…",{"type":29,"value":72},{"type":20,"tag":129,"props":357,"children":358},{},[359,364],{"type":20,"tag":25,"props":360,"children":361},{},[362],{"type":29,"value":363},"Languages:",{"type":29,"value":365}," English for the pilots; a language with no file gets the English one with a line saying so (D30); operator text is shown as written, never translated (D11).",{"type":20,"tag":98,"props":367,"children":369},{"id":368},"_3-the-record-as-audit-rows-event-shapemd-8-d22d27",[370,372,378],{"type":29,"value":371},"3. The record as audit rows (",{"type":20,"tag":53,"props":373,"children":375},{"className":374},[],[376],{"type":29,"value":377},"event-shape.md",{"type":29,"value":379}," §8, D22–D27)",{"type":20,"tag":381,"props":382,"children":383},"table",{},[384,408],{"type":20,"tag":385,"props":386,"children":387},"thead",{},[388],{"type":20,"tag":389,"props":390,"children":391},"tr",{},[392,398,403],{"type":20,"tag":393,"props":394,"children":395},"th",{},[396],{"type":29,"value":397},"What",{"type":20,"tag":393,"props":399,"children":400},{},[401],{"type":29,"value":402},"Row",{"type":20,"tag":393,"props":404,"children":405},{},[406],{"type":29,"value":407},"Who writes it",{"type":20,"tag":409,"props":410,"children":411},"tbody",{},[412,444,491],{"type":20,"tag":389,"props":413,"children":414},{},[415,421,439],{"type":20,"tag":416,"props":417,"children":418},"td",{},[419],{"type":29,"value":420},"The assignment",{"type":20,"tag":416,"props":422,"children":423},{},[424,430,432,437],{"type":20,"tag":53,"props":425,"children":427},{"className":426},[],[428],{"type":29,"value":429},"message.sent",{"type":29,"value":431},", type ",{"type":20,"tag":53,"props":433,"children":435},{"className":434},[],[436],{"type":29,"value":88},{"type":29,"value":438}," (c137 bones §9)",{"type":20,"tag":416,"props":440,"children":441},{},[442],{"type":29,"value":443},"the plane, on detection (D2, D18)",{"type":20,"tag":389,"props":445,"children":446},{},[447,452,486],{"type":20,"tag":416,"props":448,"children":449},{},[450],{"type":29,"value":451},"The completion",{"type":20,"tag":416,"props":453,"children":454},{},[455,461,462,468,470,476,478,484],{"type":20,"tag":53,"props":456,"children":458},{"className":457},[],[459],{"type":29,"value":460},"training.completed.policy",{"type":29,"value":294},{"type":20,"tag":53,"props":463,"children":465},{"className":464},[],[466],{"type":29,"value":467},".operator",{"type":29,"value":469}," or ",{"type":20,"tag":53,"props":471,"children":473},{"className":472},[],[474],{"type":29,"value":475},".hq",{"type":29,"value":477}," (D27); ",{"type":20,"tag":53,"props":479,"children":481},{"className":480},[],[482],{"type":29,"value":483},".self",{"type":29,"value":485}," for one taken from the library (D40; shown on the person's findings under the policy and answering none, D39; counted in the Compliance report as a strength, D42)",{"type":20,"tag":416,"props":487,"children":488},{},[489],{"type":29,"value":490},"the plane, on the web app's event",{"type":20,"tag":389,"props":492,"children":493},{},[494,499,508],{"type":20,"tag":416,"props":495,"children":496},{},[497],{"type":29,"value":498},"The message ending",{"type":20,"tag":416,"props":500,"children":501},{},[502],{"type":20,"tag":53,"props":503,"children":505},{"className":504},[],[506],{"type":29,"value":507},"message.done",{"type":20,"tag":416,"props":509,"children":510},{},[511],{"type":29,"value":512},"the app or the plane (open, Tyler)",{"type":20,"tag":125,"props":514,"children":515},{},[516,526,668,678,688,698,736],{"type":20,"tag":129,"props":517,"children":518},{},[519,524],{"type":20,"tag":25,"props":520,"children":521},{},[522],{"type":29,"value":523},"The store",{"type":29,"value":525}," is the audit log, one row per completion; the finding reads it by finding id and Reports sum it; a table of its own only if a read needs it (D22).",{"type":20,"tag":129,"props":527,"children":528},{},[529,534,536,542,543,549,551,556,558,564,565,571,572,578,580,586,587,593,595,601,602,608,609,615,616,622,623,629,630,636,638,644,645,651,652,658,660,666],{"type":20,"tag":25,"props":530,"children":531},{},[532],{"type":29,"value":533},"The contract",{"type":29,"value":535}," is the existing event pattern (qevents': a tagged enum, ",{"type":20,"tag":53,"props":537,"children":539},{"className":538},[],[540],{"type":29,"value":541},"type",{"type":29,"value":278},{"type":20,"tag":53,"props":544,"children":546},{"className":545},[],[547],{"type":29,"value":548},"payload",{"type":29,"value":550},", dotted names); the event stays small and the plane's richer record object consumes it (D23). The fields, from ",{"type":20,"tag":53,"props":552,"children":554},{"className":553},[],[555],{"type":29,"value":377},{"type":29,"value":557}," §2 with §8's amendments: ",{"type":20,"tag":53,"props":559,"children":561},{"className":560},[],[562],{"type":29,"value":563},"record_id",{"type":29,"value":294},{"type":20,"tag":53,"props":566,"children":568},{"className":567},[],[569],{"type":29,"value":570},"training_id",{"type":29,"value":294},{"type":20,"tag":53,"props":573,"children":575},{"className":574},[],[576],{"type":29,"value":577},"training_title",{"type":29,"value":579}," (D25), ",{"type":20,"tag":53,"props":581,"children":583},{"className":582},[],[584],{"type":29,"value":585},"training_version",{"type":29,"value":278},{"type":20,"tag":53,"props":588,"children":590},{"className":589},[],[591],{"type":29,"value":592},"content_hash",{"type":29,"value":594}," (D26), ",{"type":20,"tag":53,"props":596,"children":598},{"className":597},[],[599],{"type":29,"value":600},"finding_id",{"type":29,"value":294},{"type":20,"tag":53,"props":603,"children":605},{"className":604},[],[606],{"type":29,"value":607},"policy_id",{"type":29,"value":294},{"type":20,"tag":53,"props":610,"children":612},{"className":611},[],[613],{"type":29,"value":614},"person",{"type":29,"value":294},{"type":20,"tag":53,"props":617,"children":619},{"className":618},[],[620],{"type":29,"value":621},"endpoint",{"type":29,"value":294},{"type":20,"tag":53,"props":624,"children":626},{"className":625},[],[627],{"type":29,"value":628},"result: \"passed\"",{"type":29,"value":469},{"type":20,"tag":53,"props":631,"children":633},{"className":632},[],[634],{"type":29,"value":635},"proof_of_understanding: true",{"type":29,"value":637}," (Tyler names it), ",{"type":20,"tag":53,"props":639,"children":641},{"className":640},[],[642],{"type":29,"value":643},"check: { right, total }",{"type":29,"value":294},{"type":20,"tag":53,"props":646,"children":648},{"className":647},[],[649],{"type":29,"value":650},"completed_at",{"type":29,"value":294},{"type":20,"tag":53,"props":653,"children":655},{"className":654},[],[656],{"type":29,"value":657},"message_id",{"type":29,"value":659},". No ",{"type":20,"tag":53,"props":661,"children":663},{"className":662},[],[664],{"type":29,"value":665},"assigned_by",{"type":29,"value":667},": the type carries it (D27).",{"type":20,"tag":129,"props":669,"children":670},{},[671,676],{"type":20,"tag":25,"props":672,"children":673},{},[674],{"type":29,"value":675},"What is never in it",{"type":29,"value":677}," (R4): how long it took, how many tries, which answers were wrong, where it was taken.",{"type":20,"tag":129,"props":679,"children":680},{},[681,686],{"type":20,"tag":25,"props":682,"children":683},{},[684],{"type":29,"value":685},"Every completion is a row",{"type":29,"value":687}," (D25); Reports count a finding as answered once.",{"type":20,"tag":129,"props":689,"children":690},{},[691,696],{"type":20,"tag":25,"props":692,"children":693},{},[694],{"type":29,"value":695},"The association",{"type":29,"value":697}," (D24): a completion links to the finding that triggered it, and the plane associates it with the person's earlier findings under the same policy, to show the remediation and to drive what comes next.",{"type":20,"tag":129,"props":699,"children":700},{},[701,706,708,713,715,720,722,728,730,735],{"type":20,"tag":25,"props":702,"children":703},{},[704],{"type":29,"value":705},"A training taken on its own",{"type":29,"value":707}," (Phase 5): the same record with no ",{"type":20,"tag":53,"props":709,"children":711},{"className":710},[],[712],{"type":29,"value":600},{"type":29,"value":714},", no ",{"type":20,"tag":53,"props":716,"children":718},{"className":717},[],[719],{"type":29,"value":657},{"type":29,"value":721}," and the type ",{"type":20,"tag":53,"props":723,"children":725},{"className":724},[],[726],{"type":29,"value":727},"training.completed.self",{"type":29,"value":729},". Whether D24's association reaches it is call 2 in ",{"type":20,"tag":53,"props":731,"children":733},{"className":732},[],[734],{"type":29,"value":70},{"type":29,"value":72},{"type":20,"tag":129,"props":737,"children":738},{},[739,744,746,752,753,759,761,767,769,775,776,782,783,789,790,796,797,803,804,810],{"type":20,"tag":25,"props":740,"children":741},{},[742],{"type":29,"value":743},"The lab's twin",{"type":29,"value":745}," of the record: ",{"type":20,"tag":53,"props":747,"children":749},{"className":748},[],[750],{"type":29,"value":751},"TrainingRecord",{"type":29,"value":278},{"type":20,"tag":53,"props":754,"children":756},{"className":755},[],[757],{"type":29,"value":758},"AuditEvent",{"type":29,"value":760}," in ",{"type":20,"tag":53,"props":762,"children":764},{"className":763},[],[765],{"type":29,"value":766},"app\u002Fdata\u002Ftrainings\u002Ftypes.ts",{"type":29,"value":768},"; ",{"type":20,"tag":53,"props":770,"children":772},{"className":771},[],[773],{"type":29,"value":774},"recordFor",{"type":29,"value":294},{"type":20,"tag":53,"props":777,"children":779},{"className":778},[],[780],{"type":29,"value":781},"auditFor",{"type":29,"value":760},{"type":20,"tag":53,"props":784,"children":786},{"className":785},[],[787],{"type":29,"value":788},"index.ts",{"type":29,"value":768},{"type":20,"tag":53,"props":791,"children":793},{"className":792},[],[794],{"type":29,"value":795},"selfRecordFor",{"type":29,"value":294},{"type":20,"tag":53,"props":798,"children":800},{"className":799},[],[801],{"type":29,"value":802},"selfAudit",{"type":29,"value":760},{"type":20,"tag":53,"props":805,"children":807},{"className":806},[],[808],{"type":29,"value":809},"library.ts",{"type":29,"value":72},{"type":20,"tag":98,"props":812,"children":814},{"id":813},"_4-the-findings-history-row-and-the-corrections-block-d9-d16-d19-d20",[815],{"type":29,"value":816},"4. The finding's history row and the Corrections block (D9, D16, D19, D20)",{"type":20,"tag":125,"props":818,"children":819},{},[820,890,923],{"type":20,"tag":129,"props":821,"children":822},{},[823,828,830,836,838,844,845,851,853,859,861,867,868,874,876,882,883,889],{"type":20,"tag":25,"props":824,"children":825},{},[826],{"type":29,"value":827},"Today:",{"type":29,"value":829}," one row in the finding's history, ",{"type":20,"tag":53,"props":831,"children":833},{"className":832},[],[834],{"type":29,"value":835},"training completed → \u003Cstatus unchanged>",{"type":29,"value":837},", Manual, the person as actor, the record as its cause. Completion never changes the finding's status (D9). The lab: ",{"type":20,"tag":53,"props":839,"children":841},{"className":840},[],[842],{"type":29,"value":843},"mock\u002Ffinding-detail.vue",{"type":29,"value":294},{"type":20,"tag":53,"props":846,"children":848},{"className":847},[],[849],{"type":29,"value":850},"GovernancePartFindingHistory",{"type":29,"value":852},"'s ",{"type":20,"tag":53,"props":854,"children":856},{"className":855},[],[857],{"type":29,"value":858},"extra",{"type":29,"value":860}," prop, ",{"type":20,"tag":53,"props":862,"children":864},{"className":863},[],[865],{"type":29,"value":866},"useTrainingMock",{"type":29,"value":852},{"type":20,"tag":53,"props":869,"children":871},{"className":870},[],[872],{"type":29,"value":873},"historyEvents",{"type":29,"value":875},"; the event kind ",{"type":20,"tag":53,"props":877,"children":879},{"className":878},[],[880],{"type":29,"value":881},"training-completed",{"type":29,"value":760},{"type":20,"tag":53,"props":884,"children":886},{"className":885},[],[887],{"type":29,"value":888},"governance-fixture.ts",{"type":29,"value":72},{"type":20,"tag":129,"props":891,"children":892},{},[893,898,900,906,908,914,916,922],{"type":20,"tag":25,"props":894,"children":895},{},[896],{"type":29,"value":897},"Once Tyler agrees the event shape:",{"type":29,"value":899}," the Corrections block (",{"type":20,"tag":53,"props":901,"children":903},{"className":902},[],[904],{"type":29,"value":905},"components\u002Ftraining\u002FCorrections.vue",{"type":29,"value":907},") is shown by default, under History and before Details (D19, D20); the history row stays as the same event. In the lab it is behind ",{"type":20,"tag":53,"props":909,"children":911},{"className":910},[],[912],{"type":29,"value":913},"?v.corrections=block",{"type":29,"value":915},": ",{"type":20,"tag":48,"props":917,"children":919},{"href":918},"\u002Fpages\u002Fphase4\u002Fmock\u002Ffinding-detail?findingId=F-A&at=recorded&v.corrections=block",[920],{"type":29,"value":921},"the block on F-A",{"type":29,"value":72},{"type":20,"tag":129,"props":924,"children":925},{},[926,931,933,939],{"type":20,"tag":25,"props":927,"children":928},{},[929],{"type":29,"value":930},"The strip",{"type":29,"value":932}," on the finding (",{"type":20,"tag":53,"props":934,"children":936},{"className":935},[],[937],{"type":29,"value":938},"components\u002Ftraining\u002FFindingStrip.vue",{"type":29,"value":940},") shows what the plane knows and nothing more: Assigned, then Recorded (D13).",{"type":20,"tag":98,"props":942,"children":944},{"id":943},"_5-corrections-in-reports-d10-d17-d18",[945],{"type":29,"value":946},"5. Corrections in Reports (D10, D17, D18)",{"type":20,"tag":125,"props":948,"children":949},{},[950,992,1002,1012,1041],{"type":20,"tag":129,"props":951,"children":952},{},[953,955,961,963,969,970,976,977,983,985,991],{"type":29,"value":954},"c128's Findings report gains a Corrections section (",{"type":20,"tag":53,"props":956,"children":958},{"className":957},[],[959],{"type":29,"value":960},"reports-c128-specs.ts",{"type":29,"value":962},", id ",{"type":20,"tag":53,"props":964,"children":966},{"className":965},[],[967],{"type":29,"value":968},"corrections",{"type":29,"value":768},{"type":20,"tag":53,"props":971,"children":973},{"className":972},[],[974],{"type":29,"value":975},"components\u002Ftraining\u002FReportCorrections.vue",{"type":29,"value":768},{"type":20,"tag":53,"props":978,"children":980},{"className":979},[],[981],{"type":29,"value":982},"app\u002Fdata\u002Ftrainings\u002Freports.ts",{"type":29,"value":984},"): ",{"type":20,"tag":48,"props":986,"children":988},{"href":987},"\u002Fpages\u002Fphase4\u002Fmock\u002Freports\u002Ffindings?findingId=F-A&at=recorded",[989],{"type":29,"value":990},"the section on F-A",{"type":29,"value":72},{"type":20,"tag":129,"props":993,"children":994},{},[995,1000],{"type":20,"tag":25,"props":996,"children":997},{},[998],{"type":29,"value":999},"Read as a state",{"type":29,"value":1001}," as of the data cutoff, like Open now (D17): Assigned (every finding under a policy with a training counts as assigned on detection, D18), Completed, Waiting, and \"in this window\" beside Completed; per training.",{"type":20,"tag":129,"props":1003,"children":1004},{},[1005,1010],{"type":20,"tag":25,"props":1006,"children":1007},{},[1008],{"type":29,"value":1009},"Counts only",{"type":29,"value":1011}," (D10): no names.",{"type":20,"tag":129,"props":1013,"children":1014},{},[1015,1019,1020,1025,1027,1032,1033,1039],{"type":20,"tag":25,"props":1016,"children":1017},{},[1018],{"type":29,"value":239},{"type":29,"value":270},{"type":20,"tag":53,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":29,"value":429},{"type":29,"value":1026}," of type ",{"type":20,"tag":53,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":29,"value":88},{"type":29,"value":278},{"type":20,"tag":53,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":29,"value":1038},"training.completed.*",{"type":29,"value":1040},". A completion with no finding counts in none.",{"type":20,"tag":129,"props":1042,"children":1043},{},[1044,1049],{"type":20,"tag":25,"props":1045,"children":1046},{},[1047],{"type":29,"value":1048},"The window:",{"type":29,"value":1050}," a window that runs to the reports' last day of data runs to the cutoff, so a record written at the cutoff counts in it (fixed in Phase 5; the lab's two clocks differ).",{"type":20,"tag":98,"props":1052,"children":1054},{"id":1053},"_6-who-may-read-what-d10",[1055],{"type":29,"value":1056},"6. Who may read what (D10)",{"type":20,"tag":125,"props":1058,"children":1059},{},[1060,1065,1070,1075],{"type":20,"tag":129,"props":1061,"children":1062},{},[1063],{"type":29,"value":1064},"The person's name is on the finding (operators who may open it) and in the audit log (its readers).",{"type":20,"tag":129,"props":1066,"children":1067},{},[1068],{"type":29,"value":1069},"Reports show counts. Retention follows the finding's and the audit log's.",{"type":20,"tag":129,"props":1071,"children":1072},{},[1073],{"type":29,"value":1074},"The person sees their own records in the library.",{"type":20,"tag":129,"props":1076,"children":1077},{},[1078],{"type":29,"value":1079},"The open question for Peterson (D10, D33): whether a completed training counts as personnel data in the organisations he knows. If it does, the plane needs a setting for who may read training rows; the rows still exist.",{"type":20,"tag":98,"props":1081,"children":1083},{"id":1082},"_7-trainings-on-a-topic-d49d51-phase-7",[1084],{"type":29,"value":1085},"7. Trainings on a topic (D49–D51, Phase 7)",{"type":20,"tag":125,"props":1087,"children":1088},{},[1089,1107,1132,1164,1174],{"type":20,"tag":129,"props":1090,"children":1091},{},[1092,1097,1099,1105],{"type":20,"tag":25,"props":1093,"children":1094},{},[1095],{"type":29,"value":1096},"What:",{"type":29,"value":1098}," a training can answer a topic in place of a policy: one of the c125 guide's concepts, all 18 as the seed list (D50). It answers no finding and is written for anyone. The first is Observe and Enforce (T-MODES-1, ",{"type":20,"tag":53,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":29,"value":1104},"en\u002Fobserve-and-enforce.md",{"type":29,"value":1106},"), with four new scenes.",{"type":20,"tag":129,"props":1108,"children":1109},{},[1110,1115,1117,1122,1124,1130],{"type":20,"tag":25,"props":1111,"children":1112},{},[1113],{"type":29,"value":1114},"Who offers it",{"type":29,"value":1116}," (D51): the library lists it; an operator can send one (a ",{"type":20,"tag":53,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":29,"value":88},{"type":29,"value":1123}," whose first sentence is the operator's, recorded as ",{"type":20,"tag":53,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":29,"value":1129},"training.completed.operator",{"type":29,"value":1131}," naming the topic); later the c127 guide suggests one when a person asks about the same area twice.",{"type":20,"tag":129,"props":1133,"children":1134},{},[1135,1140,1142,1148,1150,1155,1157,1162],{"type":20,"tag":25,"props":1136,"children":1137},{},[1138],{"type":29,"value":1139},"The record:",{"type":29,"value":1141}," the same record with ",{"type":20,"tag":53,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":29,"value":1147},"topic",{"type":29,"value":1149}," in place of ",{"type":20,"tag":53,"props":1151,"children":1153},{"className":1152},[],[1154],{"type":29,"value":607},{"type":29,"value":1156}," and no finding: ",{"type":20,"tag":53,"props":1158,"children":1160},{"className":1159},[],[1161],{"type":29,"value":727},{"type":29,"value":1163}," from the library, counted in the Compliance report's \"Trainings taken on their own\" with the rest (D42, D47).",{"type":20,"tag":129,"props":1165,"children":1166},{},[1167,1172],{"type":20,"tag":25,"props":1168,"children":1169},{},[1170],{"type":29,"value":1171},"For c134:",{"type":29,"value":1173}," the library page lists topics beside policies; the operator's send needs a way to pick a topic and a person (not mocked; c134's by D56).",{"type":20,"tag":129,"props":1175,"children":1176},{},[1177,1182],{"type":20,"tag":25,"props":1178,"children":1179},{},[1180],{"type":29,"value":1181},"For Tyler:",{"type":29,"value":1183}," T-MODES-1's Enforce step says some policies can only record whatever their mode (a sign-in to a personal account); confirm it with D22–D27 (D55).",{"type":20,"tag":98,"props":1185,"children":1187},{"id":1186},"_8-the-library-d2-phase-5",[1188],{"type":29,"value":1189},"8. The library (D2, Phase 5)",{"type":20,"tag":21,"props":1191,"children":1192},{},[1193,1195,1200,1202,1208,1209,1215,1216,1222],{"type":29,"value":1194},"The lab mock: ",{"type":20,"tag":48,"props":1196,"children":1198},{"href":1197},"\u002Fpages\u002Fphase4\u002Fmock\u002Ftraining-library",[1199],{"type":29,"value":1197},{"type":29,"value":1201}," (",{"type":20,"tag":53,"props":1203,"children":1205},{"className":1204},[],[1206],{"type":29,"value":1207},"app\u002Fpages\u002Fpages\u002Fphase4\u002Fmock\u002Ftraining-library.vue",{"type":29,"value":294},{"type":20,"tag":53,"props":1210,"children":1212},{"className":1211},[],[1213],{"type":29,"value":1214},"useTrainingLibrary.ts",{"type":29,"value":294},{"type":20,"tag":53,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":29,"value":1221},"app\u002Fdata\u002Ftrainings\u002Flibrary.ts",{"type":29,"value":1223},").",{"type":20,"tag":125,"props":1225,"children":1226},{},[1227,1245,1255,1265,1275,1301,1318],{"type":20,"tag":129,"props":1228,"children":1229},{},[1230,1235,1237,1243],{"type":20,"tag":25,"props":1231,"children":1232},{},[1233],{"type":29,"value":1234},"The list:",{"type":29,"value":1236}," every published training with its title, minutes, policy, what it covers (the training's own ",{"type":20,"tag":53,"props":1238,"children":1240},{"className":1239},[],[1241],{"type":29,"value":1242},"matters",{"type":29,"value":1244}," sentence) and the person's record.",{"type":20,"tag":129,"props":1246,"children":1247},{},[1248,1253],{"type":20,"tag":25,"props":1249,"children":1250},{},[1251],{"type":29,"value":1252},"Assigned:",{"type":29,"value":1254}," a finding of theirs under its policy waits for it (D18); Start opens the training on that finding, and the record answers it.",{"type":20,"tag":129,"props":1256,"children":1257},{},[1258,1263],{"type":20,"tag":25,"props":1259,"children":1260},{},[1261],{"type":29,"value":1262},"Recorded:",{"type":29,"value":1264}," the latest record, for a finding or on their own; Take it again writes another record (D25).",{"type":20,"tag":129,"props":1266,"children":1267},{},[1268,1273],{"type":20,"tag":25,"props":1269,"children":1270},{},[1271],{"type":29,"value":1272},"No record:",{"type":29,"value":1274}," no finding of theirs asks for it; Take it on your own.",{"type":20,"tag":129,"props":1276,"children":1277},{},[1278,1283,1285,1291,1293,1299],{"type":20,"tag":25,"props":1279,"children":1280},{},[1281],{"type":29,"value":1282},"On its own:",{"type":29,"value":1284}," a training is written for a finding (R2), so on its own it is filled from the reader and the policy, never from a finding: the reader's machine and team, the policy's name, owner and configuration, a server another team is allowed under an exception, the policy's first detector, and a plain phrase where a slot names the finding's own thing (\"a personal account\", \"your agent\"). Since Phase 6 (D38) each file carries its own words for the steps and questions that tell the finding (its ",{"type":20,"tag":53,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":29,"value":1290},"# Library",{"type":29,"value":1292}," section, served as ",{"type":20,"tag":53,"props":1294,"children":1296},{"className":1295},[],[1297],{"type":29,"value":1298},"library",{"type":29,"value":1300},"), so all three read 4 of 4 steps and 4 of 4 questions on their own; a step that still needs a finding would be left out, and the page would say so.",{"type":20,"tag":129,"props":1302,"children":1303},{},[1304,1309,1311,1316],{"type":20,"tag":25,"props":1305,"children":1306},{},[1307],{"type":29,"value":1308},"The record",{"type":29,"value":1310}," has no finding and no assigner; the audit log gets one row, ",{"type":20,"tag":53,"props":1312,"children":1314},{"className":1313},[],[1315],{"type":29,"value":727},{"type":29,"value":1317},"; no message was sent, so none ends.",{"type":20,"tag":129,"props":1319,"children":1320},{},[1321,1326],{"type":20,"tag":25,"props":1322,"children":1323},{},[1324],{"type":29,"value":1325},"Where it lives",{"type":29,"value":1327}," in the person's frame is c134's (as for the training page).",{"type":20,"tag":98,"props":1329,"children":1331},{"id":1330},"files-to-read-c134",[1332],{"type":29,"value":1333},"Files to read (c134)",{"type":20,"tag":21,"props":1335,"children":1336},{},[1337,1343,1344,1349,1351,1356,1358,1363,1364,1369,1370,1375,1377,1383,1384,1390,1391,1396,1397,1403,1404,1410,1411,1417,1418,1424,1425,1431,1432,1437,1439,1445,1447,1453,1454,1459,1460,1466,1467,1473,1474,1480,1481,1486,1488,1494],{"type":20,"tag":53,"props":1338,"children":1340},{"className":1339},[],[1341],{"type":29,"value":1342},"cycles\u002Fc133.remediation-training\u002F",{"type":29,"value":915},{"type":20,"tag":53,"props":1345,"children":1347},{"className":1346},[],[1348],{"type":29,"value":58},{"type":29,"value":1350}," (D1–D37), ",{"type":20,"tag":53,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":29,"value":377},{"type":29,"value":1357}," (§2, §8), ",{"type":20,"tag":53,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":29,"value":192},{"type":29,"value":294},{"type":20,"tag":53,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":29,"value":259},{"type":29,"value":294},{"type":20,"tag":53,"props":1371,"children":1373},{"className":1372},[],[1374],{"type":29,"value":70},{"type":29,"value":1376},". The lab: ",{"type":20,"tag":53,"props":1378,"children":1380},{"className":1379},[],[1381],{"type":29,"value":1382},"app\u002Fdata\u002Ftrainings\u002F",{"type":29,"value":1201},{"type":20,"tag":53,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":29,"value":1389},"types.ts",{"type":29,"value":294},{"type":20,"tag":53,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":29,"value":788},{"type":29,"value":294},{"type":20,"tag":53,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":29,"value":1402},"slots.ts",{"type":29,"value":294},{"type":20,"tag":53,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":29,"value":1409},"parse.ts",{"type":29,"value":294},{"type":20,"tag":53,"props":1412,"children":1414},{"className":1413},[],[1415],{"type":29,"value":1416},"hash.ts",{"type":29,"value":294},{"type":20,"tag":53,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":29,"value":1423},"scenes.ts",{"type":29,"value":294},{"type":20,"tag":53,"props":1426,"children":1428},{"className":1427},[],[1429],{"type":29,"value":1430},"reports.ts",{"type":29,"value":294},{"type":20,"tag":53,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":29,"value":809},{"type":29,"value":1438},", the three files in ",{"type":20,"tag":53,"props":1440,"children":1442},{"className":1441},[],[1443],{"type":29,"value":1444},"en\u002F",{"type":29,"value":1446},"), ",{"type":20,"tag":53,"props":1448,"children":1450},{"className":1449},[],[1451],{"type":29,"value":1452},"app\u002Fcomposables\u002FuseTrainingMock.ts",{"type":29,"value":278},{"type":20,"tag":53,"props":1455,"children":1457},{"className":1456},[],[1458],{"type":29,"value":1214},{"type":29,"value":294},{"type":20,"tag":53,"props":1461,"children":1463},{"className":1462},[],[1464],{"type":29,"value":1465},"app\u002Fcomponents\u002Ftraining\u002F",{"type":29,"value":294},{"type":20,"tag":53,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":29,"value":1472},"app\u002Fpages\u002Fpages\u002Fphase4\u002Fmock\u002Ftraining.vue",{"type":29,"value":278},{"type":20,"tag":53,"props":1475,"children":1477},{"className":1476},[],[1478],{"type":29,"value":1479},"training-library.vue",{"type":29,"value":294},{"type":20,"tag":53,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":29,"value":292},{"type":29,"value":1487},". The captures: threads p1-training, p2-record, p3-pipeline, p4-accounts, p4-secrets, p5-reorder and p5-library on ",{"type":20,"tag":48,"props":1489,"children":1491},{"href":1490},"\u002Fcycles\u002Fdesign\u002Fc133",[1492],{"type":29,"value":1493},"the cycle page",{"type":29,"value":72},{"type":20,"tag":98,"props":1496,"children":1498},{"id":1497},"open-for-c134",[1499],{"type":29,"value":1500},"Open for c134",{"type":20,"tag":1502,"props":1503,"children":1504},"ol",{},[1505,1528,1538,1548,1581,1599],{"type":20,"tag":129,"props":1506,"children":1507},{},[1508,1513,1514,1519,1521,1526],{"type":20,"tag":25,"props":1509,"children":1510},{},[1511],{"type":29,"value":1512},"Tyler on D22–D27",{"type":29,"value":1201},{"type":20,"tag":53,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":29,"value":377},{"type":29,"value":1520}," §8): the crate, the event names (with ",{"type":20,"tag":53,"props":1522,"children":1524},{"className":1523},[],[1525],{"type":29,"value":483},{"type":29,"value":1527},"), retention against report windows, and whether the app or the plane ends the assignment message (bones §5 says the app).",{"type":20,"tag":129,"props":1529,"children":1530},{},[1531,1536],{"type":20,"tag":25,"props":1532,"children":1533},{},[1534],{"type":29,"value":1535},"The person's frame",{"type":29,"value":1537}," (plan, question 5): where the training page and the library live for a person signed in through the plane connection.",{"type":20,"tag":129,"props":1539,"children":1540},{},[1541,1546],{"type":20,"tag":25,"props":1542,"children":1543},{},[1544],{"type":29,"value":1545},"The copy at release",{"type":29,"value":1547}," (D29): where the JSON lands in the plane's repository, and the step that copies it (a script on the design side is the obvious home; not built).",{"type":20,"tag":129,"props":1549,"children":1550},{},[1551,1556,1558,1564,1565,1571,1573,1579],{"type":20,"tag":25,"props":1552,"children":1553},{},[1554],{"type":29,"value":1555},"D2's field on the policy:",{"type":29,"value":1557}," the lab derives the policy → training map from each file's ",{"type":20,"tag":53,"props":1559,"children":1561},{"className":1560},[],[1562],{"type":29,"value":1563},"policyId",{"type":29,"value":1201},{"type":20,"tag":53,"props":1566,"children":1568},{"className":1567},[],[1569],{"type":29,"value":1570},"POLICY_TRAININGS",{"type":29,"value":1572},"); c121's policy model takes the ",{"type":20,"tag":53,"props":1574,"children":1576},{"className":1575},[],[1577],{"type":29,"value":1578},"training",{"type":29,"value":1580}," field.",{"type":20,"tag":129,"props":1582,"children":1583},{},[1584,1589,1591,1597],{"type":20,"tag":25,"props":1585,"children":1586},{},[1587],{"type":29,"value":1588},"The policy's owner:",{"type":29,"value":1590}," the lab reads the last person who changed the policy; an ",{"type":20,"tag":53,"props":1592,"children":1594},{"className":1593},[],[1595],{"type":29,"value":1596},"owner",{"type":29,"value":1598}," on the policy (c121) would be honest.",{"type":20,"tag":129,"props":1600,"children":1601},{},[1602,1607],{"type":20,"tag":25,"props":1603,"children":1604},{},[1605],{"type":29,"value":1606},"Peterson:",{"type":29,"value":1608}," personnel data (D10) and the self-report in the accounts lesson (D33).",{"type":20,"tag":92,"props":1610,"children":1612},{"id":1611},"for-c131-and-qnative-c4-the-native-app",[1613],{"type":29,"value":14},{"type":20,"tag":98,"props":1615,"children":1617},{"id":1616},"the-notice",[1618],{"type":29,"value":1619},"The notice",{"type":20,"tag":125,"props":1621,"children":1622},{},[1623,1639,1657,1683,1729,1769],{"type":20,"tag":129,"props":1624,"children":1625},{},[1626,1631,1632,1637],{"type":20,"tag":25,"props":1627,"children":1628},{},[1629],{"type":29,"value":1630},"The message:",{"type":29,"value":270},{"type":20,"tag":53,"props":1633,"children":1635},{"className":1634},[],[1636],{"type":29,"value":88},{"type":29,"value":1638}," (c137 bones §2, the type table, and E7): plane to person, attention, no acknowledgement, nothing blocked meanwhile (D9).",{"type":20,"tag":129,"props":1640,"children":1641},{},[1642,1647,1649,1655],{"type":20,"tag":25,"props":1643,"children":1644},{},[1645],{"type":29,"value":1646},"Its three sentences",{"type":29,"value":1648}," (c137 R2): the first two are the training's own (its ",{"type":20,"tag":53,"props":1650,"children":1652},{"className":1651},[],[1653],{"type":29,"value":1654},"# Assignment",{"type":29,"value":1656}," section, filled from the finding); the third is every training's: \"Take it when you have a moment; completion goes into the audit log as proof of correction, and nothing is blocked meanwhile.\"",{"type":20,"tag":129,"props":1658,"children":1659},{},[1660,1665,1667,1673,1675,1681],{"type":20,"tag":25,"props":1661,"children":1662},{},[1663],{"type":29,"value":1664},"Its actions:",{"type":29,"value":1666}," Start training (",{"type":20,"tag":53,"props":1668,"children":1670},{"className":1669},[],[1671],{"type":29,"value":1672},"start-training",{"type":29,"value":1674},", target the training id), then See the finding (",{"type":20,"tag":53,"props":1676,"children":1678},{"className":1677},[],[1679],{"type":29,"value":1680},"open-page",{"type":29,"value":1682},", target the finding).",{"type":20,"tag":129,"props":1684,"children":1685},{},[1686,1691,1693,1699,1701],{"type":20,"tag":25,"props":1687,"children":1688},{},[1689],{"type":29,"value":1690},"Its links:",{"type":29,"value":1692}," training, finding, policy. ",{"type":20,"tag":53,"props":1694,"children":1696},{"className":1695},[],[1697],{"type":29,"value":1698},"why",{"type":29,"value":1700},": \"Policy ",{"type":20,"tag":1702,"props":1703,"children":1704},"name",{},[1705,1707,1713,1715,1721,1722,1728],{"type":29,"value":1706}," assigns this training on a finding\". ",{"type":20,"tag":53,"props":1708,"children":1710},{"className":1709},[],[1711],{"type":29,"value":1712},"expires_at",{"type":29,"value":1714},": 90 days. ",{"type":20,"tag":53,"props":1716,"children":1718},{"className":1717},[],[1719],{"type":29,"value":1720},"mute_key",{"type":29,"value":915},{"type":20,"tag":53,"props":1723,"children":1725},{"className":1724},[],[1726],{"type":29,"value":1727},"policy:\u003Cid>",{"type":29,"value":72},{"type":20,"tag":129,"props":1730,"children":1731},{},[1732,1737,1739,1745,1746,1752,1754,1760,1762,1768],{"type":20,"tag":25,"props":1733,"children":1734},{},[1735],{"type":29,"value":1736},"Built in the lab",{"type":29,"value":1738}," by ",{"type":20,"tag":53,"props":1740,"children":1742},{"className":1741},[],[1743],{"type":29,"value":1744},"assignmentFor",{"type":29,"value":760},{"type":20,"tag":53,"props":1747,"children":1749},{"className":1748},[],[1750],{"type":29,"value":1751},"app\u002Fdata\u002Ftrainings\u002Findex.ts",{"type":29,"value":1753},", rendered by c137's ",{"type":20,"tag":53,"props":1755,"children":1757},{"className":1756},[],[1758],{"type":29,"value":1759},"MessagingCard",{"type":29,"value":1761}," on the training page's first stage (",{"type":20,"tag":48,"props":1763,"children":1765},{"href":1764},"\u002Fpages\u002Fphase4\u002Fmock\u002Ftraining?findingId=F-A&at=assigned",[1766],{"type":29,"value":1767},"at=assigned",{"type":29,"value":1223},{"type":20,"tag":129,"props":1770,"children":1771},{},[1772,1777,1779,1785],{"type":20,"tag":25,"props":1773,"children":1774},{},[1775],{"type":29,"value":1776},"In the inbox and tray",{"type":29,"value":1778}," it is an ordinary attention message: the tray counts it, the OS notification follows the person's per-type control (c137), ",{"type":20,"tag":53,"props":1780,"children":1782},{"className":1781},[],[1783],{"type":29,"value":1784},"seen",{"type":29,"value":1786}," is not reported because it needs no acknowledgement (bones §5, D13).",{"type":20,"tag":98,"props":1788,"children":1790},{"id":1789},"the-link",[1791],{"type":29,"value":1792},"The link",{"type":20,"tag":125,"props":1794,"children":1795},{},[1796,1806,1818],{"type":20,"tag":129,"props":1797,"children":1798},{},[1799,1804],{"type":20,"tag":53,"props":1800,"children":1802},{"className":1801},[],[1803],{"type":29,"value":1672},{"type":29,"value":1805}," opens the web app in the browser at the training page for that finding, signed in through the plane connection (c131 D13; bones §4).",{"type":20,"tag":129,"props":1807,"children":1808},{},[1809,1811,1817],{"type":29,"value":1810},"The route is c134's; the lab's is ",{"type":20,"tag":53,"props":1812,"children":1814},{"className":1813},[],[1815],{"type":29,"value":1816},"\u002Fpages\u002Fphase4\u002Fmock\u002Ftraining?findingId=\u003Cid>",{"type":29,"value":72},{"type":20,"tag":129,"props":1819,"children":1820},{},[1821],{"type":29,"value":1822},"A training is only ever assigned by a plane, so local mode never shows one.",{"type":20,"tag":98,"props":1824,"children":1826},{"id":1825},"the-ending",[1827],{"type":29,"value":1828},"The ending",{"type":20,"tag":125,"props":1830,"children":1831},{},[1832,1852,1864,1869],{"type":20,"tag":129,"props":1833,"children":1834},{},[1835,1837,1842,1844,1850],{"type":29,"value":1836},"The web app sends the completion; the plane writes ",{"type":20,"tag":53,"props":1838,"children":1840},{"className":1839},[],[1841],{"type":29,"value":1038},{"type":29,"value":1843},", and the assignment ends as ",{"type":20,"tag":53,"props":1845,"children":1847},{"className":1846},[],[1848],{"type":29,"value":1849},"done",{"type":29,"value":1851}," (bones §5: the linked action completes).",{"type":20,"tag":129,"props":1853,"children":1854},{},[1855,1857,1862],{"type":29,"value":1856},"A quiet ",{"type":20,"tag":53,"props":1858,"children":1860},{"className":1859},[],[1861],{"type":29,"value":881},{"type":29,"value":1863}," reply goes to the operator's inbox in the assignment's thread (bones §2, §7).",{"type":20,"tag":129,"props":1865,"children":1866},{},[1867],{"type":29,"value":1868},"The native app sees the new state on its next read of the inbox (a poll today, the stream later, gap 26).",{"type":20,"tag":129,"props":1870,"children":1871},{},[1872,1874,1879],{"type":29,"value":1873},"Whether the app or the plane moves the message to ",{"type":20,"tag":53,"props":1875,"children":1877},{"className":1876},[],[1878],{"type":29,"value":1849},{"type":29,"value":1880}," is Tyler's (open item 1).",{"type":20,"tag":98,"props":1882,"children":1884},{"id":1883},"whose-is-what",[1885],{"type":29,"value":1886},"Whose is what",{"type":20,"tag":381,"props":1888,"children":1889},{},[1890,1906],{"type":20,"tag":385,"props":1891,"children":1892},{},[1893],{"type":20,"tag":389,"props":1894,"children":1895},{},[1896,1901],{"type":20,"tag":393,"props":1897,"children":1898},{},[1899],{"type":29,"value":1900},"Piece",{"type":20,"tag":393,"props":1902,"children":1903},{},[1904],{"type":29,"value":1905},"Whose",{"type":20,"tag":409,"props":1907,"children":1908},{},[1909,1922,1963,1984,1997,2009,2022],{"type":20,"tag":389,"props":1910,"children":1911},{},[1912,1917],{"type":20,"tag":416,"props":1913,"children":1914},{},[1915],{"type":29,"value":1916},"The message schema, states, inbox, tray, OS notification, per-type controls",{"type":20,"tag":416,"props":1918,"children":1919},{},[1920],{"type":29,"value":1921},"c137 (design), qnative c4 (build)",{"type":20,"tag":389,"props":1923,"children":1924},{},[1925,1950],{"type":20,"tag":416,"props":1926,"children":1927},{},[1928,1934,1935,1941,1942,1948],{"type":20,"tag":53,"props":1929,"children":1931},{"className":1930},[],[1932],{"type":29,"value":1933},"TrainingAssignment",{"type":29,"value":294},{"type":20,"tag":53,"props":1936,"children":1938},{"className":1937},[],[1939],{"type":29,"value":1940},"TrainingCompleted",{"type":29,"value":294},{"type":20,"tag":53,"props":1943,"children":1945},{"className":1944},[],[1946],{"type":29,"value":1947},"StartTraining",{"type":29,"value":1949}," as types",{"type":20,"tag":416,"props":1951,"children":1952},{},[1953,1955,1961],{"type":29,"value":1954},"qnative c4, done (",{"type":20,"tag":53,"props":1956,"children":1958},{"className":1957},[],[1959],{"type":29,"value":1960},"crates\u002Ftypes\u002Fsrc\u002Fmessages.rs",{"type":29,"value":1962},")",{"type":20,"tag":389,"props":1964,"children":1965},{},[1966,1971],{"type":20,"tag":416,"props":1967,"children":1968},{},[1969],{"type":29,"value":1970},"Start training's handler",{"type":20,"tag":416,"props":1972,"children":1973},{},[1974,1976,1982],{"type":29,"value":1975},"qnative c4: today it answers \"Trainings arrive with remediation training (c133); not on this build yet.\" (",{"type":20,"tag":53,"props":1977,"children":1979},{"className":1978},[],[1980],{"type":29,"value":1981},"crates\u002Fapp\u002Fsrc\u002Fmessaging.rs:468",{"type":29,"value":1983},"); next, open the plane's training URL in the browser once c134 names the route and c131 D13 signs it in",{"type":20,"tag":389,"props":1985,"children":1986},{},[1987,1992],{"type":20,"tag":416,"props":1988,"children":1989},{},[1990],{"type":29,"value":1991},"Opening the web app signed in through the plane connection",{"type":20,"tag":416,"props":1993,"children":1994},{},[1995],{"type":29,"value":1996},"c131 D13, with c134 (the credential)",{"type":20,"tag":389,"props":1998,"children":1999},{},[2000,2005],{"type":20,"tag":416,"props":2001,"children":2002},{},[2003],{"type":29,"value":2004},"The assignment's words, actions and links; the record; the event",{"type":20,"tag":416,"props":2006,"children":2007},{},[2008],{"type":29,"value":5},{"type":20,"tag":389,"props":2010,"children":2011},{},[2012,2017],{"type":20,"tag":416,"props":2013,"children":2014},{},[2015],{"type":29,"value":2016},"The training page, the record's homes, Reports, the library",{"type":20,"tag":416,"props":2018,"children":2019},{},[2020],{"type":29,"value":2021},"c134, from c133's mocks",{"type":20,"tag":389,"props":2023,"children":2024},{},[2025,2030],{"type":20,"tag":416,"props":2026,"children":2027},{},[2028],{"type":29,"value":2029},"An inline training in the native app (D1 \"later\"; D5 content modules)",{"type":20,"tag":416,"props":2031,"children":2032},{},[2033],{"type":29,"value":2034},"not in V1; the same JSON would be the module's payload",{"type":20,"tag":92,"props":2036,"children":2038},{"id":2037},"what-c133-still-owes",[2039],{"type":29,"value":15},{"type":20,"tag":125,"props":2041,"children":2042},{},[2043,2061,2079,2094],{"type":20,"tag":129,"props":2044,"children":2045},{},[2046,2051,2053,2059],{"type":20,"tag":25,"props":2047,"children":2048},{},[2049],{"type":29,"value":2050},"Captures and records:",{"type":29,"value":2052}," done for Phases 1–5 (the threads above, ",{"type":20,"tag":53,"props":2054,"children":2056},{"className":2055},[],[2057],{"type":29,"value":2058},"CYCLE.md",{"type":29,"value":2060},", the story module).",{"type":20,"tag":129,"props":2062,"children":2063},{},[2064,2069,2071,2077],{"type":20,"tag":25,"props":2065,"children":2066},{},[2067],{"type":29,"value":2068},"The brief in market-analyst",{"type":29,"value":2070}," (Phase 0): merged 2026-11-11 as ",{"type":20,"tag":53,"props":2072,"children":2074},{"className":2073},[],[2075],{"type":29,"value":2076},"briefs\u002Fenforcement-without-local-context.md",{"type":29,"value":2078}," (qpoint-io\u002Fmarket-analysis#15); this line was corrected on 2026-11-12.",{"type":20,"tag":129,"props":2080,"children":2081},{},[2082,2087,2088,2093],{"type":20,"tag":25,"props":2083,"children":2084},{},[2085],{"type":29,"value":2086},"The calls of this phase:",{"type":29,"value":760},{"type":20,"tag":53,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":29,"value":70},{"type":29,"value":72},{"type":20,"tag":129,"props":2095,"children":2096},{},[2097,2102],{"type":20,"tag":25,"props":2098,"children":2099},{},[2100],{"type":29,"value":2101},"The close:",{"type":29,"value":2103}," c133 closes once Mark has ruled them and c134 and c131 have taken this hand-off.",1794599379646]