[{"data":1,"prerenderedAt":871},["ShallowReactive",2],{"cycle-doc-design-c133-event-shape.md":3},{"cycle":4,"project":7,"path":10,"title":11,"toc":12,"ast":21},{"id":5,"title":6},"c133","Remediation Training",{"id":8,"label":9},"design","Design","event-shape.md","c133 Phase 2: the record's event shape (a proposal for Tyler)",[13,14,15,16,17,18,19,20],"1. What happens, in order","2. The event","3. The audit log row","4. The projections","5. Who may read it (D10)","6. Questions for Tyler","7. What the lab shows","8. Mark's assumptions (2026-11-11), to validate with Tyler",{"type":22,"children":23},"root",[24,83,89,161,166,187,199,211,216,221,311,337,342,444,449,454,459,597,602,661,666,679,866],{"type":25,"tag":26,"props":27,"children":28},"element","p",{},[29,36,38,43,45,50,52,59,61,66,68,73,75,81],{"type":25,"tag":30,"props":31,"children":32},"strong",{},[33],{"type":34,"value":35},"text","Written:",{"type":34,"value":37}," 2026-11-11. ",{"type":25,"tag":30,"props":39,"children":40},{},[41],{"type":34,"value":42},"Reader:",{"type":34,"value":44}," Tyler first (plan Phase 2: agree the event shape), then c134's executor (the plane keeps it), c128 (Reports reads it), c137 (the message that carries it back). ",{"type":25,"tag":30,"props":46,"children":47},{},[48],{"type":34,"value":49},"Status:",{"type":34,"value":51}," a proposal in the wire shape, drawn from the lab mock; nothing is implemented in qcontrol or the plane. Field names are ",{"type":25,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":34,"value":58},"snake_case",{"type":34,"value":60}," on the wire, as c137's bones; timestamps are RFC 3339 in UTC.\n",{"type":25,"tag":30,"props":62,"children":63},{},[64],{"type":34,"value":65},"2026-11-11, later:",{"type":34,"value":67}," Mark walked §6 and set the assumptions in §8, to validate with Tyler; §2 and §3 are read with §8's amendments.\n",{"type":25,"tag":30,"props":69,"children":70},{},[71],{"type":34,"value":72},"Rulings it follows:",{"type":34,"value":74}," R4 (the record is proof, not surveillance), D3 (all right with retake; only the final result), D8 (completion travels as ",{"type":25,"tag":53,"props":76,"children":78},{"className":77},[],[79],{"type":34,"value":80},"training-completed",{"type":34,"value":82}," in the assignment's thread), D9 (completion changes no status), D10 (the person's name on the finding and in the audit log, counts only in Reports), D13 (the plane learns nothing between assignment and record), D14 (the person sees the record before it is written), D16 (the history row now, a Corrections block once this shape is agreed).",{"type":25,"tag":84,"props":85,"children":87},"h2",{"id":86},"_1-what-happens-in-order",[88],{"type":34,"value":13},{"type":25,"tag":90,"props":91,"children":92},"ol",{},[93,123,128,156],{"type":25,"tag":94,"props":95,"children":96},"li",{},[97,99,105,107,113,115,121],{"type":34,"value":98},"A policy with a ",{"type":25,"tag":53,"props":100,"children":102},{"className":101},[],[103],{"type":34,"value":104},"training",{"type":34,"value":106}," field detects a finding; the plane sends the person a ",{"type":25,"tag":53,"props":108,"children":110},{"className":109},[],[111],{"type":34,"value":112},"training-assignment",{"type":34,"value":114}," message (c137 bones §2, §10 E7) and writes ",{"type":25,"tag":53,"props":116,"children":118},{"className":117},[],[119],{"type":34,"value":120},"message.sent",{"type":34,"value":122}," to the audit log (bones §9). That send is the only assignment record: Reports count assignments from it.",{"type":25,"tag":94,"props":124,"children":125},{},[126],{"type":34,"value":127},"The person opens the training on the web app, reads the lesson, passes the check, and presses Finish (D14). Nothing reaches the plane before that press (D13).",{"type":25,"tag":94,"props":129,"children":130},{},[131,133,139,141,147,149,154],{"type":34,"value":132},"The web app sends one ",{"type":25,"tag":53,"props":134,"children":136},{"className":135},[],[137],{"type":34,"value":138},"training.completed",{"type":34,"value":140}," event to the plane. The plane writes the record to the audit log, ends the assignment message (",{"type":25,"tag":53,"props":142,"children":144},{"className":143},[],[145],{"type":34,"value":146},"message.done",{"type":34,"value":148},", bones §5), and answers the thread with a ",{"type":25,"tag":53,"props":150,"children":152},{"className":151},[],[153],{"type":34,"value":80},{"type":34,"value":155}," message to the operator's inbox, quiet (bones §2).",{"type":25,"tag":94,"props":157,"children":158},{},[159],{"type":34,"value":160},"The finding's history shows the record as a row (today); a Corrections block on the finding and a Corrections section in Reports read the same record (D16, D10).",{"type":25,"tag":84,"props":162,"children":164},{"id":163},"_2-the-event",[165],{"type":34,"value":14},{"type":25,"tag":26,"props":167,"children":168},{},[169,171,177,179,185],{"type":34,"value":170},"In qevents' pattern (a tagged enum, ",{"type":25,"tag":53,"props":172,"children":174},{"className":173},[],[175],{"type":34,"value":176},"type",{"type":34,"value":178}," and ",{"type":25,"tag":53,"props":180,"children":182},{"className":181},[],[183],{"type":34,"value":184},"payload",{"type":34,"value":186},", dotted type names):",{"type":25,"tag":188,"props":189,"children":193},"pre",{"className":190,"code":192,"language":34},[191],"language-text","#[serde(tag = \"type\", content = \"payload\")]\npub enum TrainingEvent {\n    #[serde(rename = \"training.completed\")]\n    Completed(TrainingCompleted),\n}\n\npub struct TrainingCompleted {\n    record_id:        RecordId,          \u002F\u002F TR-\u003Culid>: the plane assigns it; the person sees it on the result page\n    training_id:      TrainingId,        \u002F\u002F T-MCP-1\n    training_version: u32,               \u002F\u002F the content's revision at the time; a later edit never rewrites a pass\n    finding_id:       FindingId,         \u002F\u002F the finding it answers\n    policy_id:        PolicyId,          \u002F\u002F the policy that assigned it (D2)\n    person:           { id, name },      \u002F\u002F as the finding names them\n    endpoint:         { id, name },      \u002F\u002F the machine the finding was on\n    result:           \"passed\",          \u002F\u002F the only value: a training not passed has no record (D3)\n    check:            { right: u8, total: u8 },   \u002F\u002F the final result, n of n\n    completed_at:     Timestamp,         \u002F\u002F when Finish was pressed, UTC\n    assigned_by:      \"policy\" | \"operator\" | \"hq\",   \u002F\u002F D2\n    message_id:       MessageId,         \u002F\u002F the training-assignment this answers (D8)\n}\n",[194],{"type":25,"tag":53,"props":195,"children":197},{"__ignoreMap":196},"",[198],{"type":34,"value":192},{"type":25,"tag":26,"props":200,"children":201},{},[202,204,209],{"type":34,"value":203},"What is ",{"type":25,"tag":30,"props":205,"children":206},{},[207],{"type":34,"value":208},"not",{"type":34,"value":210}," in the event, by rule (R4): how long the person took, how many tries, which answers were wrong, where they took it (the browser, the device), the delivery channel of the assignment. The event carries nothing a later reader could turn into a score.",{"type":25,"tag":84,"props":212,"children":214},{"id":213},"_3-the-audit-log-row",[215],{"type":34,"value":15},{"type":25,"tag":26,"props":217,"children":218},{},[219],{"type":34,"value":220},"The plane keeps one row per event, in the shape its audit log already uses for messages (bones §9):",{"type":25,"tag":222,"props":223,"children":224},"table",{},[225,259],{"type":25,"tag":226,"props":227,"children":228},"thead",{},[229],{"type":25,"tag":230,"props":231,"children":232},"tr",{},[233,239,244,249,254],{"type":25,"tag":234,"props":235,"children":236},"th",{},[237],{"type":34,"value":238},"time",{"type":25,"tag":234,"props":240,"children":241},{},[242],{"type":34,"value":243},"event",{"type":25,"tag":234,"props":245,"children":246},{},[247],{"type":34,"value":248},"actor",{"type":25,"tag":234,"props":250,"children":251},{},[252],{"type":34,"value":253},"subject",{"type":25,"tag":234,"props":255,"children":256},{},[257],{"type":34,"value":258},"links",{"type":25,"tag":260,"props":261,"children":262},"tbody",{},[263],{"type":25,"tag":230,"props":264,"children":265},{},[266,276,284,297,306],{"type":25,"tag":267,"props":268,"children":269},"td",{},[270],{"type":25,"tag":53,"props":271,"children":273},{"className":272},[],[274],{"type":34,"value":275},"completed_at",{"type":25,"tag":267,"props":277,"children":278},{},[279],{"type":25,"tag":53,"props":280,"children":282},{"className":281},[],[283],{"type":34,"value":138},{"type":25,"tag":267,"props":285,"children":286},{},[287,289,295],{"type":34,"value":288},"the person (",{"type":25,"tag":53,"props":290,"children":292},{"className":291},[],[293],{"type":34,"value":294},"person.name",{"type":34,"value":296},")",{"type":25,"tag":267,"props":298,"children":299},{},[300],{"type":25,"tag":53,"props":301,"children":303},{"className":302},[],[304],{"type":34,"value":305},"training_id v\u003Cversion> · finding_id",{"type":25,"tag":267,"props":307,"children":308},{},[309],{"type":34,"value":310},"record, finding, training, message",{"type":25,"tag":26,"props":312,"children":313},{},[314,316,321,323,328,330,335],{"type":34,"value":315},"Beside it, the two message rows the assignment already produces: ",{"type":25,"tag":53,"props":317,"children":319},{"className":318},[],[320],{"type":34,"value":120},{"type":34,"value":322}," when the policy assigned it, ",{"type":25,"tag":53,"props":324,"children":326},{"className":325},[],[327],{"type":34,"value":146},{"type":34,"value":329}," when ",{"type":25,"tag":53,"props":331,"children":333},{"className":332},[],[334],{"type":34,"value":138},{"type":34,"value":336}," ended it. The lab's audit log mock shows exactly these three rows.",{"type":25,"tag":84,"props":338,"children":340},{"id":339},"_4-the-projections",[341],{"type":34,"value":16},{"type":25,"tag":343,"props":344,"children":345},"ul",{},[346,379,396,427],{"type":25,"tag":94,"props":347,"children":348},{},[349,354,356,362,364,369,371,377],{"type":25,"tag":30,"props":350,"children":351},{},[352],{"type":34,"value":353},"The finding's history",{"type":34,"value":355}," (today, D16): one row, ",{"type":25,"tag":53,"props":357,"children":359},{"className":358},[],[360],{"type":34,"value":361},"training completed → \u003Cstatus unchanged>",{"type":34,"value":363},", Manual, the person as actor, the record as the cause. The lab adds an event kind ",{"type":25,"tag":53,"props":365,"children":367},{"className":366},[],[368],{"type":34,"value":80},{"type":34,"value":370}," to the finding's lifecycle for it; the plane need not store it twice if the history view can read the audit log by ",{"type":25,"tag":53,"props":372,"children":374},{"className":373},[],[375],{"type":34,"value":376},"finding_id",{"type":34,"value":378},".",{"type":25,"tag":94,"props":380,"children":381},{},[382,387,389,395],{"type":25,"tag":30,"props":383,"children":384},{},[385],{"type":34,"value":386},"The Corrections block on the finding",{"type":34,"value":388}," (once this shape is agreed, D16): the record as the audit log keeps it, the three audit rows, a link to the training's record page. Shown in the lab behind ",{"type":25,"tag":53,"props":390,"children":392},{"className":391},[],[393],{"type":34,"value":394},"?v.corrections=block",{"type":34,"value":378},{"type":25,"tag":94,"props":397,"children":398},{},[399,404,406,411,413,418,420,425],{"type":25,"tag":30,"props":400,"children":401},{},[402],{"type":34,"value":403},"Reports",{"type":34,"value":405}," (c128's Findings report, D10): a Corrections section, counts only, as of the data cutoff: assigned (findings under a policy with a training), completed (with a record), waiting; per training. Assigned comes from ",{"type":25,"tag":53,"props":407,"children":409},{"className":408},[],[410],{"type":34,"value":120},{"type":34,"value":412}," of type ",{"type":25,"tag":53,"props":414,"children":416},{"className":415},[],[417],{"type":34,"value":112},{"type":34,"value":419},"; completed from ",{"type":25,"tag":53,"props":421,"children":423},{"className":422},[],[424],{"type":34,"value":138},{"type":34,"value":426},". No names.",{"type":25,"tag":94,"props":428,"children":429},{},[430,435,437,442],{"type":25,"tag":30,"props":431,"children":432},{},[433],{"type":34,"value":434},"The operator's inbox",{"type":34,"value":436}," (c137): the ",{"type":25,"tag":53,"props":438,"children":440},{"className":439},[],[441],{"type":34,"value":80},{"type":34,"value":443}," message in the assignment's thread, quiet.",{"type":25,"tag":84,"props":445,"children":447},{"id":446},"_5-who-may-read-it-d10",[448],{"type":34,"value":17},{"type":25,"tag":26,"props":450,"children":451},{},[452],{"type":34,"value":453},"The person's name is on the finding (operators who can open the finding) and in the audit log (its readers). Reports show counts. Retention follows the finding's and the audit log's; the lab does not propose a shorter one. The first question for Peterson stands: does a completed training count as personnel data in the organisations he knows? If it does, the plane setting would be who may read training rows, not whether they exist.",{"type":25,"tag":84,"props":455,"children":457},{"id":456},"_6-questions-for-tyler",[458],{"type":34,"value":18},{"type":25,"tag":90,"props":460,"children":461},{},[462,487,512,544,554,571],{"type":25,"tag":94,"props":463,"children":464},{},[465,470,472,477,479,485],{"type":25,"tag":30,"props":466,"children":467},{},[468],{"type":34,"value":469},"Where it lives.",{"type":34,"value":471}," One row in the plane's audit log, read back by ",{"type":25,"tag":53,"props":473,"children":475},{"className":474},[],[476],{"type":34,"value":376},{"type":34,"value":478}," for the finding and summed for Reports; or a ",{"type":25,"tag":53,"props":480,"children":482},{"className":481},[],[483],{"type":34,"value":484},"training_records",{"type":34,"value":486}," table beside the audit row? The lab assumes the audit log is the store and the rest are reads.",{"type":25,"tag":94,"props":488,"children":489},{},[490,495,497,502,504,510],{"type":25,"tag":30,"props":491,"children":492},{},[493],{"type":34,"value":494},"Whose event.",{"type":34,"value":496}," ",{"type":25,"tag":53,"props":498,"children":500},{"className":499},[],[501],{"type":34,"value":138},{"type":34,"value":503}," is produced by the web app on the plane's side, never by an endpoint; does it belong in qevents' public contracts (the generated schemas and TypeScript) or in the plane's own API types (c134's ",{"type":25,"tag":53,"props":505,"children":507},{"className":506},[],[508],{"type":34,"value":509},"types\u002Fapi\u002F",{"type":34,"value":511},")? The lab wrote it in qevents' pattern so it can go either way.",{"type":25,"tag":94,"props":513,"children":514},{},[515,520,522,527,529,534,536,542],{"type":25,"tag":30,"props":516,"children":517},{},[518],{"type":34,"value":519},"The assignment.",{"type":34,"value":521}," Count assignments from ",{"type":25,"tag":53,"props":523,"children":525},{"className":524},[],[526],{"type":34,"value":120},{"type":34,"value":528}," (type ",{"type":25,"tag":53,"props":530,"children":532},{"className":531},[],[533],{"type":34,"value":112},{"type":34,"value":535},"), or add ",{"type":25,"tag":53,"props":537,"children":539},{"className":538},[],[540],{"type":34,"value":541},"training.assigned",{"type":34,"value":543}," so Reports never read the message log? The lab reads the message.",{"type":25,"tag":94,"props":545,"children":546},{},[547,552],{"type":25,"tag":30,"props":548,"children":549},{},[550],{"type":34,"value":551},"Idempotency.",{"type":34,"value":553}," One record per (training, finding, person); a second Finish for the same finding is a no-op and returns the existing record. Agreed?",{"type":25,"tag":94,"props":555,"children":556},{},[557,562,563,569],{"type":25,"tag":30,"props":558,"children":559},{},[560],{"type":34,"value":561},"Version.",{"type":34,"value":496},{"type":25,"tag":53,"props":564,"children":566},{"className":565},[],[567],{"type":34,"value":568},"training_version",{"type":34,"value":570}," as an integer the content carries (the lab), or a content hash so the plane can prove which text was passed?",{"type":25,"tag":94,"props":572,"children":573},{},[574,579,581,587,589,595],{"type":25,"tag":30,"props":575,"children":576},{},[577],{"type":34,"value":578},"Operator and HQ assignment",{"type":34,"value":580}," (D2 second and third): the same event, with ",{"type":25,"tag":53,"props":582,"children":584},{"className":583},[],[585],{"type":34,"value":586},"assigned_by",{"type":34,"value":588}," set and ",{"type":25,"tag":53,"props":590,"children":592},{"className":591},[],[593],{"type":34,"value":594},"message_id",{"type":34,"value":596}," pointing at their message. Nothing else changes. Agreed?",{"type":25,"tag":84,"props":598,"children":600},{"id":599},"_7-what-the-lab-shows",[601],{"type":34,"value":19},{"type":25,"tag":26,"props":603,"children":604},{},[605,611,613,619,621,627,629,635,637,643,645,651,653,659],{"type":25,"tag":53,"props":606,"children":608},{"className":607},[],[609],{"type":34,"value":610},"\u002Fpages\u002Fphase4\u002Fmock\u002Ftraining?findingId=F-A&at=recorded",{"type":34,"value":612}," (the record and the three rows), ",{"type":25,"tag":53,"props":614,"children":616},{"className":615},[],[617],{"type":34,"value":618},"\u002Fpages\u002Fphase4\u002Fmock\u002Ffinding-detail?findingId=F-A&at=recorded",{"type":34,"value":620}," (the history row; ",{"type":25,"tag":53,"props":622,"children":624},{"className":623},[],[625],{"type":34,"value":626},"&v.corrections=block",{"type":34,"value":628}," for the block), ",{"type":25,"tag":53,"props":630,"children":632},{"className":631},[],[633],{"type":34,"value":634},"\u002Fpages\u002Fphase4\u002Fmock\u002Freports\u002Ffindings?findingId=F-A&at=recorded",{"type":34,"value":636}," (the Corrections section). ",{"type":25,"tag":53,"props":638,"children":640},{"className":639},[],[641],{"type":34,"value":642},"app\u002Fdata\u002Ftrainings\u002Ftypes.ts",{"type":34,"value":644}," holds the TypeScript twin of §2 (",{"type":25,"tag":53,"props":646,"children":648},{"className":647},[],[649],{"type":34,"value":650},"TrainingRecord",{"type":34,"value":652},", ",{"type":25,"tag":53,"props":654,"children":656},{"className":655},[],[657],{"type":34,"value":658},"AuditEvent",{"type":34,"value":660},").",{"type":25,"tag":84,"props":662,"children":664},{"id":663},"_8-marks-assumptions-2026-11-11-to-validate-with-tyler",[665],{"type":34,"value":20},{"type":25,"tag":26,"props":667,"children":668},{},[669,671,677],{"type":34,"value":670},"Walked question by question that night; recorded in ",{"type":25,"tag":53,"props":672,"children":674},{"className":673},[],[675],{"type":34,"value":676},"plan.md",{"type":34,"value":678}," as D22–D27. Where an assumption changes §2 or §3, the change is stated.",{"type":25,"tag":90,"props":680,"children":681},{},[682,692,723,739,789,814],{"type":25,"tag":94,"props":683,"children":684},{},[685,690],{"type":25,"tag":30,"props":686,"children":687},{},[688],{"type":34,"value":689},"The store:",{"type":34,"value":691}," 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":25,"tag":94,"props":693,"children":694},{},[695,700,702,707,708,713,715,721],{"type":25,"tag":30,"props":696,"children":697},{},[698],{"type":34,"value":699},"The contract:",{"type":34,"value":701}," the existing event pattern as the base (qevents': a tagged enum, ",{"type":25,"tag":53,"props":703,"children":705},{"className":704},[],[706],{"type":34,"value":176},{"type":34,"value":178},{"type":25,"tag":53,"props":709,"children":711},{"className":710},[],[712],{"type":34,"value":184},{"type":34,"value":714},", dotted names); the event stays small; the plane's richer record object consumes it and adds the metadata (D23). Which crate declares it is Tyler's to say. So §2's ",{"type":25,"tag":53,"props":716,"children":718},{"className":717},[],[719],{"type":34,"value":720},"TrainingCompleted",{"type":34,"value":722}," is the proto; the plane's record object wraps it with the links and the finding's context.",{"type":25,"tag":94,"props":724,"children":725},{},[726,731,733,738],{"type":25,"tag":30,"props":727,"children":728},{},[729],{"type":34,"value":730},"Assignment and completion are both audit rows",{"type":34,"value":732}," (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: the Corrections block on each of those findings shows the training taken after a later one, and the association drives what remediation comes next (the policy's next step after a repeat). That read is c134's and Phase 5's; the event carries only ",{"type":25,"tag":53,"props":734,"children":736},{"className":735},[],[737],{"type":34,"value":376},{"type":34,"value":378},{"type":25,"tag":94,"props":740,"children":741},{},[742,747,749,755,757,763,765,771,773,779,781,787],{"type":25,"tag":30,"props":743,"children":744},{},[745],{"type":34,"value":746},"Every completion is a row",{"type":34,"value":748}," (D25): no de-duplication, no one-row-per-action. One grouped object per completion, in Mark's words: ",{"type":25,"tag":53,"props":750,"children":752},{"className":751},[],[753],{"type":34,"value":754},"type: training · completed: \u003Cdate> · training: { id, name } · proof of understanding: true",{"type":34,"value":756},". §2 stands, with two amendments: the record carries the training's ",{"type":25,"tag":53,"props":758,"children":760},{"className":759},[],[761],{"type":34,"value":762},"title",{"type":34,"value":764}," beside ",{"type":25,"tag":53,"props":766,"children":768},{"className":767},[],[769],{"type":34,"value":770},"training_id",{"type":34,"value":772},", and ",{"type":25,"tag":53,"props":774,"children":776},{"className":775},[],[777],{"type":34,"value":778},"result: \"passed\"",{"type":34,"value":780}," may be named ",{"type":25,"tag":53,"props":782,"children":784},{"className":783},[],[785],{"type":34,"value":786},"proof_of_understanding: true",{"type":34,"value":788},", which is R3's meaning. Reports count a finding as answered once.",{"type":25,"tag":94,"props":790,"children":791},{},[792,797,799,805,806,812],{"type":25,"tag":30,"props":793,"children":794},{},[795],{"type":34,"value":796},"Version and a hash",{"type":34,"value":798}," (D26): the published training carries ",{"type":25,"tag":53,"props":800,"children":802},{"className":801},[],[803],{"type":34,"value":804},"version",{"type":34,"value":178},{"type":25,"tag":53,"props":807,"children":809},{"className":808},[],[810],{"type":34,"value":811},"content_hash",{"type":34,"value":813}," (a hash of its published JSON); the record names both. The publish step (Phase 3) computes the hash; the API serves both.",{"type":25,"tag":94,"props":815,"children":816},{},[817,822,824,830,831,837,838,844,846,851,852,857,859,864],{"type":25,"tag":30,"props":818,"children":819},{},[820],{"type":34,"value":821},"Separate events per assigner",{"type":34,"value":823}," (D27): the completion after a policy's, an operator's or HQ's assignment is its own type, so the audit log reads who asked without opening the message. Proposed names, Tyler's to adjust: ",{"type":25,"tag":53,"props":825,"children":827},{"className":826},[],[828],{"type":34,"value":829},"training.completed.policy",{"type":34,"value":652},{"type":25,"tag":53,"props":832,"children":834},{"className":833},[],[835],{"type":34,"value":836},"training.completed.operator",{"type":34,"value":652},{"type":25,"tag":53,"props":839,"children":841},{"className":840},[],[842],{"type":34,"value":843},"training.completed.hq",{"type":34,"value":845},"; the payload is the same ",{"type":25,"tag":53,"props":847,"children":849},{"className":848},[],[850],{"type":34,"value":720},{"type":34,"value":652},{"type":25,"tag":53,"props":853,"children":855},{"className":854},[],[856],{"type":34,"value":586},{"type":34,"value":858}," dropped since the type carries it, ",{"type":25,"tag":53,"props":860,"children":862},{"className":861},[],[863],{"type":34,"value":594},{"type":34,"value":865}," kept.",{"type":25,"tag":26,"props":867,"children":868},{},[869],{"type":34,"value":870},"What Tyler still decides: the crate (2), the type names (6), retention of the audit rows against report windows (3 of §6), and whether the plane or the app ends the assignment message on completion (bones §5 says the app).",1794599382698]