[{"data":1,"prerenderedAt":3810},["ShallowReactive",2],{"cycle-doc-design-c138-live-parity-plan.md":3},{"cycle":4,"project":7,"path":10,"title":11,"toc":12,"ast":21},{"id":5,"title":6},"c138","Developer Mode",{"id":8,"label":9},"design","Design","live-parity-plan.md","Live Activity: parity with qcontrol main's `\u002Flive`",[13,14,15,16,17,18,19,20],"In short","Why parity broke","What main's `\u002Flive` is (read 2026-11-12)","Side by side","The plan","Calls for Mark (before Phase 3; Phases 0–2 need none of them)","Out of this plan","2026-11-13: the firehose in main's grammar (done: qnative `f19e679`, pushed)",{"type":22,"children":23},"root",[24,147,153,158,309,314,347,352,357,382,387,392,598,611,624,1194,1199,1223,1811,1816,1829,1836,2281,2299,2312,2460,2477,2490,2702,2711,2717,2729,3115,3121,3238,3243,3461,3466,3598,3612,3659,3757,3762],{"type":25,"tag":26,"props":27,"children":28},"element","p",{},[29,36,38,45,47,52,54,59,61,68,70,76,78,84,86,92,94,100,102,107,109,115,116,122,124,130,132,138,140,145],{"type":25,"tag":30,"props":31,"children":32},"strong",{},[33],{"type":34,"value":35},"text","Written:",{"type":34,"value":37}," 2026-11-12, from Mark's prompt (",{"type":25,"tag":39,"props":40,"children":42},"a",{"href":41},"\u002Fcycles\u002Fdesign\u002Fc138\u002Fdoc\u002Flive-parity-prompt",[43],{"type":34,"value":44},"live-parity-prompt.md",{"type":34,"value":46},") and his screenshot of the live qcontrol app (",{"type":25,"tag":39,"props":48,"children":50},{"href":49},"live-parity-reference-main.webp",[51],{"type":34,"value":49},{"type":34,"value":53},").\n",{"type":25,"tag":30,"props":55,"children":56},{},[57],{"type":34,"value":58},"The reference:",{"type":34,"value":60}," qdash's ",{"type":25,"tag":62,"props":63,"children":65},"code",{"className":64},[],[66],{"type":34,"value":67},"\u002Flive",{"type":34,"value":69}," on qcontrol ",{"type":25,"tag":62,"props":71,"children":73},{"className":72},[],[74],{"type":34,"value":75},"origin\u002Fmain",{"type":34,"value":77}," ",{"type":25,"tag":62,"props":79,"children":81},{"className":80},[],[82],{"type":34,"value":83},"8677b44ed",{"type":34,"value":85}," (2026-11-12): ",{"type":25,"tag":62,"props":87,"children":89},{"className":88},[],[90],{"type":34,"value":91},"crates\u002Fqdash\u002Fui\u002Fapp\u002Fpages\u002Flive.vue",{"type":34,"value":93}," (849 lines) and what it imports. qdash's UI and backend are unchanged since ",{"type":25,"tag":62,"props":95,"children":97},{"className":96},[],[98],{"type":34,"value":99},"9e6cd55a0",{"type":34,"value":101},", the commit c138's survey read for the backend.\n",{"type":25,"tag":30,"props":103,"children":104},{},[105],{"type":34,"value":106},"Ours:",{"type":34,"value":108}," qnative ",{"type":25,"tag":62,"props":110,"children":112},{"className":111},[],[113],{"type":34,"value":114},"main",{"type":34,"value":77},{"type":25,"tag":62,"props":117,"children":119},{"className":118},[],[120],{"type":34,"value":121},"880451a",{"type":34,"value":123},", Dev › Live Activity: ",{"type":25,"tag":62,"props":125,"children":127},{"className":126},[],[128],{"type":34,"value":129},"crates\u002Fdevmode\u002Fsrc\u002Flive.rs",{"type":34,"value":131}," (1,058 lines) on the stream core in ",{"type":25,"tag":62,"props":133,"children":135},{"className":134},[],[136],{"type":34,"value":137},"crates\u002Fstream",{"type":34,"value":139},".\n",{"type":25,"tag":30,"props":141,"children":142},{},[143],{"type":34,"value":144},"Standing:",{"type":34,"value":146}," a plan for Mark's review. Nothing is built, and nothing in qcontrol changes.",{"type":25,"tag":148,"props":149,"children":151},"h2",{"id":150},"in-short",[152],{"type":34,"value":13},{"type":25,"tag":26,"props":154,"children":155},{},[156],{"type":34,"value":157},"The native page matches the wrong page.",{"type":25,"tag":159,"props":160,"children":161},"ul",{},[162,213,281,299],{"type":25,"tag":163,"props":164,"children":165},"li",{},[166,171,173,179,181,187,189,195,197,203,205,211],{"type":25,"tag":30,"props":167,"children":168},{},[169],{"type":34,"value":170},"Where the vectors came from.",{"type":34,"value":172}," Its parity vectors run qdash's TypeScript from the local qcontrol checkout, ",{"type":25,"tag":62,"props":174,"children":176},{"className":175},[],[177],{"type":34,"value":178},"scripts\u002Flive-vectors.sh",{"type":34,"value":180}," with ",{"type":25,"tag":62,"props":182,"children":184},{"className":183},[],[185],{"type":34,"value":186},"QDASH_UI=..\u002Fqcontrol\u002Fcrates\u002Fqdash\u002Fui",{"type":34,"value":188},". That checkout is on ",{"type":25,"tag":62,"props":190,"children":192},{"className":191},[],[193],{"type":34,"value":194},"feat\u002Fnew-pages",{"type":34,"value":196},", the Fable app, which branched from main on 2026-10-04 (",{"type":25,"tag":62,"props":198,"children":200},{"className":199},[],[201],{"type":34,"value":202},"8e98cdd8e",{"type":34,"value":204},"). review-3 records the source as ",{"type":25,"tag":62,"props":206,"children":208},{"className":207},[],[209],{"type":34,"value":210},"lib\u002Flive\u002F*.ts at 5c9175fa6",{"type":34,"value":212},", the Fable move.",{"type":25,"tag":163,"props":214,"children":215},{},[216,221,223],{"type":25,"tag":30,"props":217,"children":218},{},[219],{"type":34,"value":220},"What main added since.",{"type":34,"value":222}," Main has moved on without the Fable branch:\n",{"type":25,"tag":159,"props":224,"children":225},{},[226,238,250,255,260],{"type":25,"tag":163,"props":227,"children":228},{},[229,231,236],{"type":34,"value":230},"the ",{"type":25,"tag":30,"props":232,"children":233},{},[234],{"type":34,"value":235},"Audit log",{"type":34,"value":237}," (#757, 2026-10-08) and its order fix (#765);",{"type":25,"tag":163,"props":239,"children":240},{},[241,243,248],{"type":34,"value":242},"the audit-logger renamed ",{"type":25,"tag":30,"props":244,"children":245},{},[246],{"type":34,"value":247},"Sentinel",{"type":34,"value":249}," (#772);",{"type":25,"tag":163,"props":251,"children":252},{},[253],{"type":34,"value":254},"Sentinel on MCP calls and host operations (#787);",{"type":25,"tag":163,"props":256,"children":257},{},[258],{"type":34,"value":259},"Sentinel's inference categories (#835);",{"type":25,"tag":163,"props":261,"children":262},{},[263,265,271,273,279],{"type":34,"value":264},"plugin events that carry ",{"type":25,"tag":62,"props":266,"children":268},{"className":267},[],[269],{"type":34,"value":270},"data",{"type":34,"value":272}," where they carried ",{"type":25,"tag":62,"props":274,"children":276},{"className":275},[],[277],{"type":34,"value":278},"payload",{"type":34,"value":280},".",{"type":25,"tag":163,"props":282,"children":283},{},[284,289,291,297],{"type":25,"tag":30,"props":285,"children":286},{},[287],{"type":34,"value":288},"Why nobody saw it.",{"type":34,"value":290}," c138's survey read main's backend but the Fable branch's UI (",{"type":25,"tag":39,"props":292,"children":294},{"href":293},"\u002Fcycles\u002Fdesign\u002Fc138\u002Fdoc\u002Fresearch\u002Flive-viewer",[295],{"type":34,"value":296},"research\u002Flive-viewer.md",{"type":34,"value":298},", lines 4 and 10). The native port is held to the Fable app by every vector review-3 lists, and none of them knows the Audit log exists.",{"type":25,"tag":163,"props":300,"children":301},{},[302,307],{"type":25,"tag":30,"props":303,"children":304},{},[305],{"type":34,"value":306},"What the screenshot shows.",{"type":34,"value":308}," It is the Audit log, the one region the native page lacks entirely.",{"type":25,"tag":26,"props":310,"children":311},{},[312],{"type":34,"value":313},"Under that sits drift in the regions both pages share:",{"type":25,"tag":159,"props":315,"children":316},{},[317,322,327,332,337,342],{"type":25,"tag":163,"props":318,"children":319},{},[320],{"type":34,"value":321},"a side rail where the web has a filter card;",{"type":25,"tag":163,"props":323,"children":324},{},[325],{"type":34,"value":326},"no column header;",{"type":25,"tag":163,"props":328,"children":329},{},[330],{"type":34,"value":331},"a 5k\u002F20k\u002F100k picker where the web has buffer inputs;",{"type":25,"tag":163,"props":333,"children":334},{},[335],{"type":34,"value":336},"the type as coloured text where the web has a chip;",{"type":25,"tag":163,"props":338,"children":339},{},[340],{"type":34,"value":341},"a fixed detail pane with a code block where the web has a draggable pane with a tree;",{"type":25,"tag":163,"props":343,"children":344},{},[345],{"type":34,"value":346},"a bare tally.",{"type":25,"tag":26,"props":348,"children":349},{},[350],{"type":34,"value":351},"Some of these departures are c138's seven improvements, and those stay. The rest are drift.",{"type":25,"tag":26,"props":353,"children":354},{},[355],{"type":34,"value":356},"The plan has four phases, with a review stop after each:",{"type":25,"tag":358,"props":359,"children":361},"ol",{"start":360},0,[362,367,372,377],{"type":25,"tag":163,"props":363,"children":364},{},[365],{"type":34,"value":366},"Re-anchor the vectors on main.",{"type":25,"tag":163,"props":368,"children":369},{},[370],{"type":34,"value":371},"Port the audit projection and give it its own buffer.",{"type":25,"tag":163,"props":373,"children":374},{},[375],{"type":34,"value":376},"Build the Audit log tab.",{"type":25,"tag":163,"props":378,"children":379},{},[380],{"type":34,"value":381},"Bring the shared regions back to main's layout, keeping the improvements.",{"type":25,"tag":26,"props":383,"children":384},{},[385],{"type":34,"value":386},"A wipe against main ends it. Seven calls for Mark come first; they decide what Phase 3 builds.",{"type":25,"tag":148,"props":388,"children":390},{"id":389},"why-parity-broke",[391],{"type":34,"value":14},{"type":25,"tag":159,"props":393,"children":394},{},[395,502,565,583],{"type":25,"tag":163,"props":396,"children":397},{},[398,403,404,409,411,417,419,425,427,432,434,439,441,447,449],{"type":25,"tag":30,"props":399,"children":400},{},[401],{"type":34,"value":402},"The source.",{"type":34,"value":77},{"type":25,"tag":62,"props":405,"children":407},{"className":406},[],[408],{"type":34,"value":178},{"type":34,"value":410}," defaults ",{"type":25,"tag":62,"props":412,"children":414},{"className":413},[],[415],{"type":34,"value":416},"QDASH_UI",{"type":34,"value":418}," to ",{"type":25,"tag":62,"props":420,"children":422},{"className":421},[],[423],{"type":34,"value":424},"..\u002Fqcontrol\u002Fcrates\u002Fqdash\u002Fui",{"type":34,"value":426},". On this machine that is ",{"type":25,"tag":62,"props":428,"children":430},{"className":429},[],[431],{"type":34,"value":194},{"type":34,"value":433}," (merge-base with main ",{"type":25,"tag":62,"props":435,"children":437},{"className":436},[],[438],{"type":34,"value":202},{"type":34,"value":440},", 2026-10-04). The two ",{"type":25,"tag":62,"props":442,"children":444},{"className":443},[],[445],{"type":34,"value":446},"lib\u002Flive\u002F",{"type":34,"value":448}," trees have since diverged:\n",{"type":25,"tag":159,"props":450,"children":451},{},[452,473],{"type":25,"tag":163,"props":453,"children":454},{},[455,457,463,465,471],{"type":34,"value":456},"only main has ",{"type":25,"tag":62,"props":458,"children":460},{"className":459},[],[461],{"type":34,"value":462},"audit-events.ts",{"type":34,"value":464}," (146 lines) and its tests (9 cases, 285 lines), and ",{"type":25,"tag":62,"props":466,"children":468},{"className":467},[],[469],{"type":34,"value":470},"live-config.ts",{"type":34,"value":472},";",{"type":25,"tag":163,"props":474,"children":475},{},[476,478,484,486,492,494,500],{"type":34,"value":477},"only the Fable app has ",{"type":25,"tag":62,"props":479,"children":481},{"className":480},[],[482],{"type":34,"value":483},"event-context.ts",{"type":34,"value":485},", ",{"type":25,"tag":62,"props":487,"children":489},{"className":488},[],[490],{"type":34,"value":491},"event-rows.ts",{"type":34,"value":493}," and ",{"type":25,"tag":62,"props":495,"children":497},{"className":496},[],[498],{"type":34,"value":499},"run-log.ts",{"type":34,"value":501},", because it split them out of the page.",{"type":25,"tag":163,"props":503,"children":504},{},[505,510,512,518,520,525,527,532,534,539,541,547,549,555,557,563],{"type":25,"tag":30,"props":506,"children":507},{},[508],{"type":34,"value":509},"The plugin quirk.",{"type":34,"value":511}," Main's ",{"type":25,"tag":62,"props":513,"children":515},{"className":514},[],[516],{"type":34,"value":517},"events.ts",{"type":34,"value":519}," reads a plugin event's fields from ",{"type":25,"tag":62,"props":521,"children":523},{"className":522},[],[524],{"type":34,"value":270},{"type":34,"value":526},", falling back to ",{"type":25,"tag":62,"props":528,"children":530},{"className":529},[],[531],{"type":34,"value":278},{"type":34,"value":533},". The Fable ",{"type":25,"tag":62,"props":535,"children":537},{"className":536},[],[538],{"type":34,"value":517},{"type":34,"value":540}," reads ",{"type":25,"tag":62,"props":542,"children":544},{"className":543},[],[545],{"type":34,"value":546},"payload.payload",{"type":34,"value":548},", and the native port keeps that \"web quirk, kept for parity\" (",{"type":25,"tag":62,"props":550,"children":552},{"className":551},[],[553],{"type":34,"value":554},"crates\u002Fstream\u002Fsrc\u002Fpreview.rs:480",{"type":34,"value":556},"). On a sensor running Sentinel, every audit record in the native page therefore reads ",{"type":25,"tag":62,"props":558,"children":560},{"className":559},[],[561],{"type":34,"value":562},"plugin=sentinel │ event=sentinel.inference",{"type":34,"value":564}," and nothing more: no target, no model, no decision.",{"type":25,"tag":163,"props":566,"children":567},{},[568,573,575,581],{"type":25,"tag":30,"props":569,"children":570},{},[571],{"type":34,"value":572},"The corpus.",{"type":34,"value":574}," 614 lines, one ",{"type":25,"tag":62,"props":576,"children":578},{"className":577},[],[579],{"type":34,"value":580},"plugin.event",{"type":34,"value":582},", no Sentinel record. No vector could have caught it.",{"type":25,"tag":163,"props":584,"children":585},{},[586,596],{"type":25,"tag":30,"props":587,"children":588},{},[589,595],{"type":25,"tag":62,"props":590,"children":592},{"className":591},[],[593],{"type":34,"value":594},"auto_tap",{"type":34,"value":280},{"type":34,"value":597}," Main dropped the family. The Fable app and the native port still know it.",{"type":25,"tag":148,"props":599,"children":601},{"id":600},"what-mains-live-is-read-2026-11-12",[602,604,609],{"type":34,"value":603},"What main's ",{"type":25,"tag":62,"props":605,"children":607},{"className":606},[],[608],{"type":34,"value":67},{"type":34,"value":610}," is (read 2026-11-12)",{"type":25,"tag":26,"props":612,"children":613},{},[614,616,622],{"type":34,"value":615},"Regions, top to bottom (",{"type":25,"tag":62,"props":617,"children":619},{"className":618},[],[620],{"type":34,"value":621},"pages\u002Flive.vue",{"type":34,"value":623}," unless named):",{"type":25,"tag":159,"props":625,"children":626},{},[627,687,697,729,776,786,838,848,960,1024,1034,1159,1176],{"type":25,"tag":163,"props":628,"children":629},{},[630,635],{"type":25,"tag":30,"props":631,"children":632},{},[633],{"type":34,"value":634},"Header.",{"type":25,"tag":159,"props":636,"children":637},{},[638,643],{"type":25,"tag":163,"props":639,"children":640},{},[641],{"type":34,"value":642},"Title \"Live Activity\" and subtitle \"Live events and audit summaries — filter activity, inspect details, or open a captured JSONL log.\"",{"type":25,"tag":163,"props":644,"children":645},{},[646,648,654,656,662,663,669,671,677,679,685],{"type":34,"value":647},"At the right: a status pill (",{"type":25,"tag":62,"props":649,"children":651},{"className":650},[],[652],{"type":34,"value":653},"live",{"type":34,"value":655}," green, ",{"type":25,"tag":62,"props":657,"children":659},{"className":658},[],[660],{"type":34,"value":661},"connecting",{"type":34,"value":485},{"type":25,"tag":62,"props":664,"children":666},{"className":665},[],[667],{"type":34,"value":668},"reconnecting",{"type":34,"value":670}," amber, ",{"type":25,"tag":62,"props":672,"children":674},{"className":673},[],[675],{"type":34,"value":676},"disconnected",{"type":34,"value":678}," red, ",{"type":25,"tag":62,"props":680,"children":682},{"className":681},[],[683],{"type":34,"value":684},"file · \u003Cname>",{"type":34,"value":686},"), Open JSONL, and Return to live in file mode.",{"type":25,"tag":163,"props":688,"children":689},{},[690,695],{"type":25,"tag":30,"props":691,"children":692},{},[693],{"type":34,"value":694},"Drop zone.",{"type":34,"value":696}," Drop a file anywhere. The overlay reads \"Drop JSONL to load a run log \u002F The file stays local in this browser.\" If the view is not empty, the page confirms before replacing it.",{"type":25,"tag":163,"props":698,"children":699},{},[700,705],{"type":25,"tag":30,"props":701,"children":702},{},[703],{"type":34,"value":704},"Presence.",{"type":25,"tag":159,"props":706,"children":707},{},[708,713,724],{"type":25,"tag":163,"props":709,"children":710},{},[711],{"type":34,"value":712},"A right-aligned \"Show agents \u002F Hide agents\" link, shown only when cards exist. Hidden by default and remembered.",{"type":25,"tag":163,"props":714,"children":715},{},[716,722],{"type":25,"tag":62,"props":717,"children":719},{"className":718},[],[720],{"type":34,"value":721},"LiveMiniAgentCards",{"type":34,"value":723}," (the layer's agent MiniCard): status pawn, folder, logo and label, requests, files (read\u002Fwrite\u002Fedit), and tools and skills.",{"type":25,"tag":163,"props":725,"children":726},{},[727],{"type":34,"value":728},"View details toggles the agent filter; the card shows a selected ring.",{"type":25,"tag":163,"props":730,"children":731},{},[732,737],{"type":25,"tag":30,"props":733,"children":734},{},[735],{"type":34,"value":736},"Tabs and buffer, one row.",{"type":25,"tag":159,"props":738,"children":739},{},[740,745,756],{"type":25,"tag":163,"props":741,"children":742},{},[743],{"type":34,"value":744},"Tabs: Events (kept), Tally (never evicts), Audit log (audit rows), each with its count.",{"type":25,"tag":163,"props":746,"children":747},{},[748,754],{"type":25,"tag":62,"props":749,"children":751},{"className":750},[],[752],{"type":34,"value":753},"RetentionControls",{"type":34,"value":755}," beside them, keyed to the open tab: \"Event buffer\" or \"Audit buffer\", N kept, X MiB, N evicted (amber, only when above zero), a number input for events (step 500), one for MiB (step 5), and Reset.",{"type":25,"tag":163,"props":757,"children":758},{},[759,761,767,768,774],{"type":34,"value":760},"Saved separately per view (",{"type":25,"tag":62,"props":762,"children":764},{"className":763},[],[765],{"type":34,"value":766},"qdash.live.retention.v1",{"type":34,"value":485},{"type":25,"tag":62,"props":769,"children":771},{"className":770},[],[772],{"type":34,"value":773},"qdash.audit.retention.v1",{"type":34,"value":775},"); the defaults are 5,000 events and 25 MiB.",{"type":25,"tag":163,"props":777,"children":778},{},[779,784],{"type":25,"tag":30,"props":780,"children":781},{},[782],{"type":34,"value":783},"Audit note",{"type":34,"value":785}," (Audit log only): \"Audit summaries retained in this live browser session.\" In file mode, \"Audit summaries from the loaded log.\" Both then say: \"The decision records whether an action was allowed, not whether it succeeded.\"",{"type":25,"tag":163,"props":787,"children":788},{},[789,794],{"type":25,"tag":30,"props":790,"children":791},{},[792],{"type":34,"value":793},"Filter card.",{"type":25,"tag":159,"props":795,"children":796},{},[797,802,807,812],{"type":25,"tag":163,"props":798,"children":799},{},[800],{"type":34,"value":801},"Search: \"Search visible fields\", or \"Search paths, commands, tools, or decisions\" on the Audit log.",{"type":25,"tag":163,"props":803,"children":804},{},[805],{"type":34,"value":806},"The Filter popover: agent checkboxes, then a tri-state family → type tree with counts and Clear all. On the Audit log it lists categories only, with no types.",{"type":25,"tag":163,"props":808,"children":809},{},[810],{"type":34,"value":811},"Removable chips for each agent, family and type, and Reset.",{"type":25,"tag":163,"props":813,"children":814},{},[815,817,822,824,829,831,836],{"type":34,"value":816},"Under a rule, two chip rails with counts: ",{"type":25,"tag":30,"props":818,"children":819},{},[820],{"type":34,"value":821},"Agents",{"type":34,"value":823}," (unselected chips dim) and ",{"type":25,"tag":30,"props":825,"children":826},{},[827],{"type":34,"value":828},"Events",{"type":34,"value":830}," (family tones), which reads ",{"type":25,"tag":30,"props":832,"children":833},{},[834],{"type":34,"value":835},"Activity",{"type":34,"value":837}," on the Audit log.",{"type":25,"tag":163,"props":839,"children":840},{},[841,846],{"type":25,"tag":30,"props":842,"children":843},{},[844],{"type":34,"value":845},"Follow.",{"type":34,"value":847}," Scrolling away from the live edge freezes the follow. An amber banner reads \"N new events\" (or \"N new audit entries\", or \"Viewing older entries\") with \"Jump to latest\".",{"type":25,"tag":163,"props":849,"children":850},{},[851,856,858,864,866],{"type":25,"tag":30,"props":852,"children":853},{},[854],{"type":34,"value":855},"Table",{"type":34,"value":857}," (",{"type":25,"tag":62,"props":859,"children":861},{"className":860},[],[862],{"type":34,"value":863},"components\u002Flive\u002FEventTable.vue",{"type":34,"value":865},"): 44 px rows, virtualised, zebra, a selected ring.\n",{"type":25,"tag":159,"props":867,"children":868},{},[869,903,942,947],{"type":25,"tag":163,"props":870,"children":871},{},[872,877,879,885,887,893,895,901],{"type":25,"tag":30,"props":873,"children":874},{},[875],{"type":34,"value":876},"Events:",{"type":34,"value":878}," Time (the header toggles newest on top or bottom) · Seq · Event (a mono chip in the family tone) · Agent (click to filter, with ",{"type":25,"tag":62,"props":880,"children":882},{"className":881},[],[883],{"type":34,"value":884},"(run pid\u002Fagent pid)",{"type":34,"value":886}," or ",{"type":25,"tag":62,"props":888,"children":890},{"className":889},[],[891],{"type":34,"value":892},"(pid)",{"type":34,"value":894},") · Summary (",{"type":25,"tag":62,"props":896,"children":898},{"className":897},[],[899],{"type":34,"value":900},"key=",{"type":34,"value":902}," subtle, value muted).",{"type":25,"tag":163,"props":904,"children":905},{},[906,911,913,919,920,926,927,933,934,940],{"type":25,"tag":30,"props":907,"children":908},{},[909],{"type":34,"value":910},"Audit log:",{"type":34,"value":912}," Time · Activity (a chip with the readable label; a capture gap is amber) · Agent · Summary (two lines: the target, then \"Rules: … | Tags: …\") · Decision (a pill: ",{"type":25,"tag":62,"props":914,"children":916},{"className":915},[],[917],{"type":34,"value":918},"allowed",{"type":34,"value":655},{"type":25,"tag":62,"props":921,"children":923},{"className":922},[],[924],{"type":34,"value":925},"denied",{"type":34,"value":678},{"type":25,"tag":62,"props":928,"children":930},{"className":929},[],[931],{"type":34,"value":932},"flagged",{"type":34,"value":670},{"type":25,"tag":62,"props":935,"children":937},{"className":936},[],[938],{"type":34,"value":939},"—",{"type":34,"value":941},"). The pid comes from the entity index.",{"type":25,"tag":163,"props":943,"children":944},{},[945],{"type":34,"value":946},"When the table is narrower than 640 px (the detail open), the Agent column hides.",{"type":25,"tag":163,"props":948,"children":949},{},[950,952,958],{"type":34,"value":951},"Empty states: \"No events loaded …\"; \"No matching audit summaries — Run ",{"type":25,"tag":62,"props":953,"children":955},{"className":954},[],[956],{"type":34,"value":957},"qcontrol run --plugins sentinel -- …",{"type":34,"value":959}," while this page is connected, or open a captured JSONL log. Check your filters if records are hidden.\"",{"type":25,"tag":163,"props":961,"children":962},{},[963,968,969,975,976],{"type":25,"tag":30,"props":964,"children":965},{},[966],{"type":34,"value":967},"Detail",{"type":34,"value":857},{"type":25,"tag":62,"props":970,"children":972},{"className":971},[],[973],{"type":34,"value":974},"components\u002Flive\u002FEventDetail.vue",{"type":34,"value":53},{"type":25,"tag":159,"props":977,"children":978},{},[979,992,997,1002,1007,1012],{"type":25,"tag":163,"props":980,"children":981},{},[982,984,990],{"type":34,"value":983},"Header: ",{"type":25,"tag":62,"props":985,"children":987},{"className":986},[],[988],{"type":34,"value":989},"[seq] type",{"type":34,"value":991}," in the family hue, Copy JSON, and close.",{"type":25,"tag":163,"props":993,"children":994},{},[995],{"type":34,"value":996},"Context chips in order: Agent, Entity, Install, Run, Run PID, Agent PID or PID, Family, Type. Each filters or searches. On the Audit log, Type is evidence only.",{"type":25,"tag":163,"props":998,"children":999},{},[1000],{"type":34,"value":1001},"Preview as a key\u002Fvalue table.",{"type":25,"tag":163,"props":1003,"children":1004},{},[1005],{"type":34,"value":1006},"Payload as a JSON tree expanded to depth 2.",{"type":25,"tag":163,"props":1008,"children":1009},{},[1010],{"type":34,"value":1011},"Width draggable from 360 to 920 px. Below 1280 px wide the detail becomes an overlay.",{"type":25,"tag":163,"props":1013,"children":1014},{},[1015,1017,1023],{"type":34,"value":1016},"The selection is deep-linked as ",{"type":25,"tag":62,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":34,"value":1022},"#event=\u003Cid>",{"type":34,"value":280},{"type":25,"tag":163,"props":1025,"children":1026},{},[1027,1032],{"type":25,"tag":30,"props":1028,"children":1029},{},[1030],{"type":34,"value":1031},"Switching to or from the Audit log",{"type":34,"value":1033}," clears the family and type filters, closes the detail and jumps to the latest row.",{"type":25,"tag":163,"props":1035,"children":1036},{},[1037,1042,1043,1049,1050],{"type":25,"tag":30,"props":1038,"children":1039},{},[1040],{"type":34,"value":1041},"Audit projection",{"type":34,"value":857},{"type":25,"tag":62,"props":1044,"children":1046},{"className":1045},[],[1047],{"type":34,"value":1048},"lib\u002Flive\u002Faudit-events.ts",{"type":34,"value":53},{"type":25,"tag":159,"props":1051,"children":1052},{},[1053,1093,1098,1133,1154],{"type":25,"tag":163,"props":1054,"children":1055},{},[1056,1058,1063,1064,1070,1071,1077,1079,1084,1086,1091],{"type":34,"value":1057},"It takes ",{"type":25,"tag":62,"props":1059,"children":1061},{"className":1060},[],[1062],{"type":34,"value":580},{"type":34,"value":180},{"type":25,"tag":62,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":34,"value":1069},"plugin_name: sentinel",{"type":34,"value":493},{"type":25,"tag":62,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":34,"value":1076},"event: sentinel.*",{"type":34,"value":1078},", reading ",{"type":25,"tag":62,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":34,"value":270},{"type":34,"value":1085}," (or ",{"type":25,"tag":62,"props":1087,"children":1089},{"className":1088},[],[1090],{"type":34,"value":278},{"type":34,"value":1092}," for older logs).",{"type":25,"tag":163,"props":1094,"children":1095},{},[1096],{"type":34,"value":1097},"Activity labels: File read, File write, File open (a denied or flagged open), File access error, Command, HTTP request, Inference, Background inference, Subagent inference, Tool call, MCP tool call, Skill read, Skill request, Capture gap, Connection.",{"type":25,"tag":163,"props":1099,"children":1100},{},[1101,1103,1109,1111,1117,1119,1125,1126,1132],{"type":34,"value":1102},"It reads the decision from ",{"type":25,"tag":62,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":34,"value":1108},"decision.result",{"type":34,"value":1110},", falling back to a bare ",{"type":25,"tag":62,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":34,"value":1116},"decision",{"type":34,"value":1118},", and the reasons from ",{"type":25,"tag":62,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":34,"value":1124},"decision.reasons",{"type":34,"value":526},{"type":25,"tag":62,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":34,"value":1131},"rule",{"type":34,"value":280},{"type":25,"tag":163,"props":1134,"children":1135},{},[1136,1138,1144,1146,1152],{"type":34,"value":1137},"The summary is the detail or path. For inference it is ",{"type":25,"tag":62,"props":1139,"children":1141},{"className":1140},[],[1142],{"type":34,"value":1143},"authority · model",{"type":34,"value":1145},"; for a tool it is ",{"type":25,"tag":62,"props":1147,"children":1149},{"className":1148},[],[1150],{"type":34,"value":1151},"name: target [query]",{"type":34,"value":1153},", capped at 512 characters.",{"type":25,"tag":163,"props":1155,"children":1156},{},[1157],{"type":34,"value":1158},"It keeps the record and its id, and puts every scalar field into the preview.",{"type":25,"tag":163,"props":1160,"children":1161},{},[1162,1167,1168,1174],{"type":25,"tag":30,"props":1163,"children":1164},{},[1165],{"type":34,"value":1166},"Store",{"type":34,"value":857},{"type":25,"tag":62,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":34,"value":1173},"composables\u002FuseLiveEvents.ts",{"type":34,"value":1175},"): two histories, Events and Audit, bounded independently and sharing one entity index. File traffic cannot evict audit history; a late process snapshot attributes audit rows the Events buffer has already evicted; file mode fills both, untrimmed.",{"type":25,"tag":163,"props":1177,"children":1178},{},[1179,1184,1186,1192],{"type":25,"tag":30,"props":1180,"children":1181},{},[1182],{"type":34,"value":1183},"Lifetime.",{"type":34,"value":1185}," The stream is a ",{"type":25,"tag":62,"props":1187,"children":1189},{"className":1188},[],[1190],{"type":34,"value":1191},"globalThis",{"type":34,"value":1193}," singleton that survives navigating away; a reload loses it.",{"type":25,"tag":148,"props":1195,"children":1197},{"id":1196},"side-by-side",[1198],{"type":34,"value":16},{"type":25,"tag":26,"props":1200,"children":1201},{},[1202,1207,1209,1214,1216,1221],{"type":25,"tag":30,"props":1203,"children":1204},{},[1205],{"type":34,"value":1206},"Missing",{"type":34,"value":1208}," means main has it and we do not. ",{"type":25,"tag":30,"props":1210,"children":1211},{},[1212],{"type":34,"value":1213},"Drift",{"type":34,"value":1215}," means both have it, differently, for no reason that was ruled. ",{"type":25,"tag":30,"props":1217,"children":1218},{},[1219],{"type":34,"value":1220},"Ours",{"type":34,"value":1222}," means an improvement from c138 to keep.",{"type":25,"tag":1224,"props":1225,"children":1226},"table",{},[1227,1261],{"type":25,"tag":1228,"props":1229,"children":1230},"thead",{},[1231],{"type":25,"tag":1232,"props":1233,"children":1234},"tr",{},[1235,1241,1251,1256],{"type":25,"tag":1236,"props":1237,"children":1238},"th",{},[1239],{"type":34,"value":1240},"Region",{"type":25,"tag":1236,"props":1242,"children":1243},{},[1244,1246],{"type":34,"value":1245},"main ",{"type":25,"tag":62,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":34,"value":67},{"type":25,"tag":1236,"props":1252,"children":1253},{},[1254],{"type":34,"value":1255},"native Live Activity",{"type":25,"tag":1236,"props":1257,"children":1258},{},[1259],{"type":34,"value":1260},"Gap",{"type":25,"tag":1262,"props":1263,"children":1264},"tbody",{},[1265,1291,1330,1359,1381,1404,1427,1450,1479,1504,1532,1557,1600,1646,1684,1712,1734,1759,1784],{"type":25,"tag":1232,"props":1266,"children":1267},{},[1268,1274,1279,1284],{"type":25,"tag":1269,"props":1270,"children":1271},"td",{},[1272],{"type":34,"value":1273},"Audit log tab",{"type":25,"tag":1269,"props":1275,"children":1276},{},[1277],{"type":34,"value":1278},"Third tab, own buffer, projection, Decision column",{"type":25,"tag":1269,"props":1280,"children":1281},{},[1282],{"type":34,"value":1283},"none",{"type":25,"tag":1269,"props":1285,"children":1286},{},[1287],{"type":25,"tag":30,"props":1288,"children":1289},{},[1290],{"type":34,"value":1206},{"type":25,"tag":1232,"props":1292,"children":1293},{},[1294,1299,1311,1321],{"type":25,"tag":1269,"props":1295,"children":1296},{},[1297],{"type":34,"value":1298},"Sentinel records",{"type":25,"tag":1269,"props":1300,"children":1301},{},[1302,1304,1309],{"type":34,"value":1303},"Projected; ",{"type":25,"tag":62,"props":1305,"children":1307},{"className":1306},[],[1308],{"type":34,"value":270},{"type":34,"value":1310}," read",{"type":25,"tag":1269,"props":1312,"children":1313},{},[1314,1319],{"type":25,"tag":62,"props":1315,"children":1317},{"className":1316},[],[1318],{"type":34,"value":546},{"type":34,"value":1320}," read; fields lost",{"type":25,"tag":1269,"props":1322,"children":1323},{},[1324,1328],{"type":25,"tag":30,"props":1325,"children":1326},{},[1327],{"type":34,"value":1206},{"type":34,"value":1329}," (a kept quirk main fixed)",{"type":25,"tag":1232,"props":1331,"children":1332},{},[1333,1338,1343,1348],{"type":25,"tag":1269,"props":1334,"children":1335},{},[1336],{"type":34,"value":1337},"Header",{"type":25,"tag":1269,"props":1339,"children":1340},{},[1341],{"type":34,"value":1342},"Title, subtitle, status pill at right, Open JSONL",{"type":25,"tag":1269,"props":1344,"children":1345},{},[1346],{"type":34,"value":1347},"Title; a sentence state line (rate, last event, reasons)",{"type":25,"tag":1269,"props":1349,"children":1350},{},[1351,1353,1357],{"type":34,"value":1352},"Drift (pill, subtitle); ",{"type":25,"tag":30,"props":1354,"children":1355},{},[1356],{"type":34,"value":1220},{"type":34,"value":1358}," (the honest line)",{"type":25,"tag":1232,"props":1360,"children":1361},{},[1362,1367,1372,1377],{"type":25,"tag":1269,"props":1363,"children":1364},{},[1365],{"type":34,"value":1366},"Tab counts",{"type":25,"tag":1269,"props":1368,"children":1369},{},[1370],{"type":34,"value":1371},"Events N · Tally N · Audit log N",{"type":25,"tag":1269,"props":1373,"children":1374},{},[1375],{"type":34,"value":1376},"Events · Tally, no counts",{"type":25,"tag":1269,"props":1378,"children":1379},{},[1380],{"type":34,"value":1213},{"type":25,"tag":1232,"props":1382,"children":1383},{},[1384,1389,1394,1399],{"type":25,"tag":1269,"props":1385,"children":1386},{},[1387],{"type":34,"value":1388},"Buffer control",{"type":25,"tag":1269,"props":1390,"children":1391},{},[1392],{"type":34,"value":1393},"\"Event\u002FAudit buffer · kept · MiB · evicted\", two inputs, Reset, per view, saved",{"type":25,"tag":1269,"props":1395,"children":1396},{},[1397],{"type":34,"value":1398},"Keep 5k\u002F20k\u002F100k; kept and MiB in the state line",{"type":25,"tag":1269,"props":1400,"children":1401},{},[1402],{"type":34,"value":1403},"Drift (review-3 call 3 asks about the defaults)",{"type":25,"tag":1232,"props":1405,"children":1406},{},[1407,1412,1417,1422],{"type":25,"tag":1269,"props":1408,"children":1409},{},[1410],{"type":34,"value":1411},"Presence toggle",{"type":25,"tag":1269,"props":1413,"children":1414},{},[1415],{"type":34,"value":1416},"\"Show agents\", right, hidden by default",{"type":25,"tag":1269,"props":1418,"children":1419},{},[1420],{"type":34,"value":1421},"\"Show harnesses (N)\" button, shown by default",{"type":25,"tag":1269,"props":1423,"children":1424},{},[1425],{"type":34,"value":1426},"Drift (review-3 call 5)",{"type":25,"tag":1232,"props":1428,"children":1429},{},[1430,1435,1440,1445],{"type":25,"tag":1269,"props":1431,"children":1432},{},[1433],{"type":34,"value":1434},"Presence cards",{"type":25,"tag":1269,"props":1436,"children":1437},{},[1438],{"type":34,"value":1439},"The layer MiniCard: pawn, logo, folder; View details filters; focus and reveal",{"type":25,"tag":1269,"props":1441,"children":1442},{},[1443],{"type":34,"value":1444},"Text cards, 8 at most; no actions",{"type":25,"tag":1269,"props":1446,"children":1447},{},[1448],{"type":34,"value":1449},"Drift, actions missing",{"type":25,"tag":1232,"props":1451,"children":1452},{},[1453,1458,1463,1468],{"type":25,"tag":1269,"props":1454,"children":1455},{},[1456],{"type":34,"value":1457},"Filters",{"type":25,"tag":1269,"props":1459,"children":1460},{},[1461],{"type":34,"value":1462},"Card: search, popover with type tree, chips, Reset, Agents and Events chip rails",{"type":25,"tag":1269,"props":1464,"children":1465},{},[1466],{"type":34,"value":1467},"Left rail: severity, harnesses, families, \"Filtered to\", Clear filters",{"type":25,"tag":1269,"props":1469,"children":1470},{},[1471,1473,1477],{"type":34,"value":1472},"Drift; ",{"type":25,"tag":30,"props":1474,"children":1475},{},[1476],{"type":34,"value":1220},{"type":34,"value":1478}," (severity, process, session, payload search)",{"type":25,"tag":1232,"props":1480,"children":1481},{},[1482,1487,1492,1497],{"type":25,"tag":1269,"props":1483,"children":1484},{},[1485],{"type":34,"value":1486},"Type filter",{"type":25,"tag":1269,"props":1488,"children":1489},{},[1490],{"type":34,"value":1491},"Popover tree and chips",{"type":25,"tag":1269,"props":1493,"children":1494},{},[1495],{"type":34,"value":1496},"Only through the detail's type chip",{"type":25,"tag":1269,"props":1498,"children":1499},{},[1500],{"type":25,"tag":30,"props":1501,"children":1502},{},[1503],{"type":34,"value":1206},{"type":25,"tag":1232,"props":1505,"children":1506},{},[1507,1512,1517,1522],{"type":25,"tag":1269,"props":1508,"children":1509},{},[1510],{"type":34,"value":1511},"Follow and pause",{"type":25,"tag":1269,"props":1513,"children":1514},{},[1515],{"type":34,"value":1516},"Scroll away = follow frozen; amber banner, Jump to latest",{"type":25,"tag":1269,"props":1518,"children":1519},{},[1520],{"type":34,"value":1521},"Pause button and Space; the view really freezes",{"type":25,"tag":1269,"props":1523,"children":1524},{},[1525,1526,1530],{"type":34,"value":1472},{"type":25,"tag":30,"props":1527,"children":1528},{},[1529],{"type":34,"value":1220},{"type":34,"value":1531}," (a real pause)",{"type":25,"tag":1232,"props":1533,"children":1534},{},[1535,1540,1545,1550],{"type":25,"tag":1269,"props":1536,"children":1537},{},[1538],{"type":34,"value":1539},"Table header",{"type":25,"tag":1269,"props":1541,"children":1542},{},[1543],{"type":34,"value":1544},"TIME ▲ (toggles direction), SEQ, EVENT, AGENT, SUMMARY",{"type":25,"tag":1269,"props":1546,"children":1547},{},[1548],{"type":34,"value":1549},"none; newest always on top",{"type":25,"tag":1269,"props":1551,"children":1552},{},[1553],{"type":25,"tag":30,"props":1554,"children":1555},{},[1556],{"type":34,"value":1206},{"type":25,"tag":1232,"props":1558,"children":1559},{},[1560,1565,1577,1582],{"type":25,"tag":1269,"props":1561,"children":1562},{},[1563],{"type":34,"value":1564},"Row",{"type":25,"tag":1269,"props":1566,"children":1567},{},[1568,1570,1575],{"type":34,"value":1569},"44 px, zebra, type as a chip, agent clickable, ",{"type":25,"tag":62,"props":1571,"children":1573},{"className":1572},[],[1574],{"type":34,"value":900},{"type":34,"value":1576}," styled",{"type":25,"tag":1269,"props":1578,"children":1579},{},[1580],{"type":34,"value":1581},"28 px, rules, type as coloured text, severity dot, ms",{"type":25,"tag":1269,"props":1583,"children":1584},{},[1585,1586,1590,1592,1598],{"type":34,"value":1472},{"type":25,"tag":30,"props":1587,"children":1588},{},[1589],{"type":34,"value":1220},{"type":34,"value":1591}," (ms, ",{"type":25,"tag":62,"props":1593,"children":1595},{"className":1594},[],[1596],{"type":34,"value":1597},"t",{"type":34,"value":1599}," for ages, severity)",{"type":25,"tag":1232,"props":1601,"children":1602},{},[1603,1608,1628,1641],{"type":25,"tag":1269,"props":1604,"children":1605},{},[1606],{"type":34,"value":1607},"Agent cell",{"type":25,"tag":1269,"props":1609,"children":1610},{},[1611,1613,1619,1621,1626],{"type":34,"value":1612},"Adapter id ",{"type":25,"tag":62,"props":1614,"children":1616},{"className":1615},[],[1617],{"type":34,"value":1618},"claude-cli",{"type":34,"value":1620}," + ",{"type":25,"tag":62,"props":1622,"children":1624},{"className":1623},[],[1625],{"type":34,"value":892},{"type":34,"value":1627},"; click filters",{"type":25,"tag":1269,"props":1629,"children":1630},{},[1631,1633,1639],{"type":34,"value":1632},"Display name ",{"type":25,"tag":62,"props":1634,"children":1636},{"className":1635},[],[1637],{"type":34,"value":1638},"Claude Code (4312)",{"type":34,"value":1640},"; no click",{"type":25,"tag":1269,"props":1642,"children":1643},{},[1644],{"type":34,"value":1645},"Drift (the word: c92's rename)",{"type":25,"tag":1232,"props":1647,"children":1648},{},[1649,1653,1663,1674],{"type":25,"tag":1269,"props":1650,"children":1651},{},[1652],{"type":34,"value":967},{"type":25,"tag":1269,"props":1654,"children":1655},{},[1656,1661],{"type":25,"tag":62,"props":1657,"children":1659},{"className":1658},[],[1660],{"type":34,"value":989},{"type":34,"value":1662},", Copy JSON, close; 8 context chips; tree to depth 2; drag 360–920; overlay when narrow",{"type":25,"tag":1269,"props":1664,"children":1665},{},[1666,1672],{"type":25,"tag":62,"props":1667,"children":1669},{"className":1668},[],[1670],{"type":34,"value":1671},"#line type",{"type":34,"value":1673},"; time · severity · entity; 3 chips (process, session, type); code block; fixed 480 px",{"type":25,"tag":1269,"props":1675,"children":1676},{},[1677,1678,1682],{"type":34,"value":1472},{"type":25,"tag":30,"props":1679,"children":1680},{},[1681],{"type":34,"value":1220},{"type":34,"value":1683}," (masking, Reveal, session chip)",{"type":25,"tag":1232,"props":1685,"children":1686},{},[1687,1692,1697,1702],{"type":25,"tag":1269,"props":1688,"children":1689},{},[1690],{"type":34,"value":1691},"Tally",{"type":25,"tag":1269,"props":1693,"children":1694},{},[1695],{"type":34,"value":1696},"Pivot: expand a family into types, sort, hide zero rows and columns, shading, totals, Copy view and Copy full",{"type":25,"tag":1269,"props":1698,"children":1699},{},[1700],{"type":34,"value":1701},"Process, session, type or run keys; plain table; Copy CSV",{"type":25,"tag":1269,"props":1703,"children":1704},{},[1705,1706,1710],{"type":34,"value":1472},{"type":25,"tag":30,"props":1707,"children":1708},{},[1709],{"type":34,"value":1220},{"type":34,"value":1711}," (the keys)",{"type":25,"tag":1232,"props":1713,"children":1714},{},[1715,1720,1725,1730],{"type":25,"tag":1269,"props":1716,"children":1717},{},[1718],{"type":34,"value":1719},"File mode",{"type":25,"tag":1269,"props":1721,"children":1722},{},[1723],{"type":34,"value":1724},"Drop anywhere, Open JSONL, confirm replace, both buffers filled",{"type":25,"tag":1269,"props":1726,"children":1727},{},[1728],{"type":34,"value":1729},"Open JSONL (path prompt); no drop, no confirm",{"type":25,"tag":1269,"props":1731,"children":1732},{},[1733],{"type":34,"value":1213},{"type":25,"tag":1232,"props":1735,"children":1736},{},[1737,1742,1747,1752],{"type":25,"tag":1269,"props":1738,"children":1739},{},[1740],{"type":34,"value":1741},"Empty and status",{"type":25,"tag":1269,"props":1743,"children":1744},{},[1745],{"type":34,"value":1746},"One message per table",{"type":25,"tag":1269,"props":1748,"children":1749},{},[1750],{"type":34,"value":1751},"Seven honest states",{"type":25,"tag":1269,"props":1753,"children":1754},{},[1755],{"type":25,"tag":30,"props":1756,"children":1757},{},[1758],{"type":34,"value":1220},{"type":25,"tag":1232,"props":1760,"children":1761},{},[1762,1767,1772,1777],{"type":25,"tag":1269,"props":1763,"children":1764},{},[1765],{"type":34,"value":1766},"Keys and export",{"type":25,"tag":1269,"props":1768,"children":1769},{},[1770],{"type":34,"value":1771},"Enter\u002FSpace select",{"type":25,"tag":1269,"props":1773,"children":1774},{},[1775],{"type":34,"value":1776},"↑↓ j k, Space, t, Esc; Export JSONL; Clear",{"type":25,"tag":1269,"props":1778,"children":1779},{},[1780],{"type":25,"tag":30,"props":1781,"children":1782},{},[1783],{"type":34,"value":1220},{"type":25,"tag":1232,"props":1785,"children":1786},{},[1787,1792,1797,1802],{"type":25,"tag":1269,"props":1788,"children":1789},{},[1790],{"type":34,"value":1791},"Lifetime",{"type":25,"tag":1269,"props":1793,"children":1794},{},[1795],{"type":34,"value":1796},"Stream survives navigating away",{"type":25,"tag":1269,"props":1798,"children":1799},{},[1800],{"type":34,"value":1801},"Feed ends with the page (the gate)",{"type":25,"tag":1269,"props":1803,"children":1804},{},[1805,1809],{"type":25,"tag":30,"props":1806,"children":1807},{},[1808],{"type":34,"value":1220},{"type":34,"value":1810}," (call 7)",{"type":25,"tag":148,"props":1812,"children":1814},{"id":1813},"the-plan",[1815],{"type":34,"value":17},{"type":25,"tag":26,"props":1817,"children":1818},{},[1819,1821,1827],{"type":34,"value":1820},"Every phase is built in ",{"type":25,"tag":62,"props":1822,"children":1824},{"className":1823},[],[1825],{"type":34,"value":1826},"..\u002Fqnative",{"type":34,"value":1828},", in c3 or a cycle of its own at kick-off. qcontrol is only read, through a worktree of main. Each phase ends at a review stop with captures.",{"type":25,"tag":1830,"props":1831,"children":1833},"h3",{"id":1832},"phase-0-re-anchor-on-main",[1834],{"type":34,"value":1835},"Phase 0: re-anchor on main",{"type":25,"tag":358,"props":1837,"children":1838},{},[1839,1857,1913,2014,2224,2258],{"type":25,"tag":163,"props":1840,"children":1841},{},[1842,1847,1849,1855],{"type":25,"tag":30,"props":1843,"children":1844},{},[1845],{"type":34,"value":1846},"A read-only checkout of main.",{"type":34,"value":1848}," Run ",{"type":25,"tag":62,"props":1850,"children":1852},{"className":1851},[],[1853],{"type":34,"value":1854},"git -C ..\u002Fqcontrol worktree add --detach ..\u002Fqcontrol-main origin\u002Fmain",{"type":34,"value":1856},". Leave the Fable checkout alone, since other sessions use it.",{"type":25,"tag":163,"props":1858,"children":1859},{},[1860,1865],{"type":25,"tag":30,"props":1861,"children":1862},{},[1863],{"type":34,"value":1864},"The script.",{"type":25,"tag":159,"props":1866,"children":1867},{},[1868,1887,1908],{"type":25,"tag":163,"props":1869,"children":1870},{},[1871,1873,1878,1880,1886],{"type":34,"value":1872},"Point ",{"type":25,"tag":62,"props":1874,"children":1876},{"className":1875},[],[1877],{"type":34,"value":178},{"type":34,"value":1879}," at ",{"type":25,"tag":62,"props":1881,"children":1883},{"className":1882},[],[1884],{"type":34,"value":1885},"..\u002Fqcontrol-main\u002Fcrates\u002Fqdash\u002Fui",{"type":34,"value":280},{"type":25,"tag":163,"props":1888,"children":1889},{},[1890,1892,1898,1900,1906],{"type":34,"value":1891},"Add an ",{"type":25,"tag":62,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":34,"value":1897},"ESBUILD",{"type":34,"value":1899}," override, so the worktree needs no ",{"type":25,"tag":62,"props":1901,"children":1903},{"className":1902},[],[1904],{"type":34,"value":1905},"npm ci",{"type":34,"value":1907},". It borrows the Fable checkout's esbuild, which only bundles.",{"type":25,"tag":163,"props":1909,"children":1910},{},[1911],{"type":34,"value":1912},"Refuse to run when the checkout is not main, and print the commit the vectors came from (it already records it).",{"type":25,"tag":163,"props":1914,"children":1915},{},[1916,1921,1923,1929,1930,1936,1937,1943,1944],{"type":25,"tag":30,"props":1917,"children":1918},{},[1919],{"type":34,"value":1920},"The harnesses.",{"type":34,"value":1922}," They import three modules main does not have: ",{"type":25,"tag":62,"props":1924,"children":1926},{"className":1925},[],[1927],{"type":34,"value":1928},"event-context",{"type":34,"value":485},{"type":25,"tag":62,"props":1931,"children":1933},{"className":1932},[],[1934],{"type":34,"value":1935},"event-rows",{"type":34,"value":493},{"type":25,"tag":62,"props":1938,"children":1940},{"className":1939},[],[1941],{"type":34,"value":1942},"run-log",{"type":34,"value":139},{"type":25,"tag":159,"props":1945,"children":1946},{},[1947,1997,2009],{"type":25,"tag":163,"props":1948,"children":1949},{},[1950,1952,1958,1960,1966,1968,1974,1975,1981,1983,1989,1990,1996],{"type":34,"value":1951},"Main does that work inline: the detail chips in ",{"type":25,"tag":62,"props":1953,"children":1955},{"className":1954},[],[1956],{"type":34,"value":1957},"EventDetail.vue",{"type":34,"value":1959},"'s ",{"type":25,"tag":62,"props":1961,"children":1963},{"className":1962},[],[1964],{"type":34,"value":1965},"contextParts",{"type":34,"value":1967},", the rows in ",{"type":25,"tag":62,"props":1969,"children":1971},{"className":1970},[],[1972],{"type":34,"value":1973},"EventTable.vue",{"type":34,"value":180},{"type":25,"tag":62,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":34,"value":1980},"event-display.ts",{"type":34,"value":1982},", the run log in ",{"type":25,"tag":62,"props":1984,"children":1986},{"className":1985},[],[1987],{"type":34,"value":1988},"live.vue",{"type":34,"value":1959},{"type":25,"tag":62,"props":1991,"children":1993},{"className":1992},[],[1994],{"type":34,"value":1995},"loadFile",{"type":34,"value":280},{"type":25,"tag":163,"props":1998,"children":1999},{},[2000,2002,2008],{"type":34,"value":2001},"Copy each piece into its harness as a marked copy, as the tally harness does with ",{"type":25,"tag":62,"props":2003,"children":2005},{"className":2004},[],[2006],{"type":34,"value":2007},"tallyView.ts",{"type":34,"value":280},{"type":25,"tag":163,"props":2010,"children":2011},{},[2012],{"type":34,"value":2013},"Then retarget the ports to main's behaviour (the agent chip's word, the context order, the file sort).",{"type":25,"tag":163,"props":2015,"children":2016},{},[2017,2022,2024,2030,2032],{"type":25,"tag":30,"props":2018,"children":2019},{},[2020],{"type":34,"value":2021},"A Sentinel stream script",{"type":34,"value":2023}," in ",{"type":25,"tag":62,"props":2025,"children":2027},{"className":2026},[],[2028],{"type":34,"value":2029},"crates\u002Ffixtures",{"type":34,"value":2031},", joining the corpus. It covers:\n",{"type":25,"tag":159,"props":2033,"children":2034},{},[2035,2103,2127,2145,2186,2205],{"type":25,"tag":163,"props":2036,"children":2037},{},[2038,2040,2046,2047,2053,2054,2060,2061,2067,2068,2074,2075,2081,2082,2088,2089,2095,2096,2102],{"type":34,"value":2039},"every activity kind: ",{"type":25,"tag":62,"props":2041,"children":2043},{"className":2042},[],[2044],{"type":34,"value":2045},"file_open",{"type":34,"value":485},{"type":25,"tag":62,"props":2048,"children":2050},{"className":2049},[],[2051],{"type":34,"value":2052},"file_read",{"type":34,"value":485},{"type":25,"tag":62,"props":2055,"children":2057},{"className":2056},[],[2058],{"type":34,"value":2059},"file_write",{"type":34,"value":485},{"type":25,"tag":62,"props":2062,"children":2064},{"className":2063},[],[2065],{"type":34,"value":2066},"exec",{"type":34,"value":485},{"type":25,"tag":62,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":34,"value":2073},"http",{"type":34,"value":485},{"type":25,"tag":62,"props":2076,"children":2078},{"className":2077},[],[2079],{"type":34,"value":2080},"inference",{"type":34,"value":485},{"type":25,"tag":62,"props":2083,"children":2085},{"className":2084},[],[2086],{"type":34,"value":2087},"tool",{"type":34,"value":485},{"type":25,"tag":62,"props":2090,"children":2092},{"className":2091},[],[2093],{"type":34,"value":2094},"observation_gap",{"type":34,"value":485},{"type":25,"tag":62,"props":2097,"children":2099},{"className":2098},[],[2100],{"type":34,"value":2101},"connection",{"type":34,"value":472},{"type":25,"tag":163,"props":2104,"children":2105},{},[2106,2108,2113,2114,2119,2120,2125],{"type":34,"value":2107},"each decision (",{"type":25,"tag":62,"props":2109,"children":2111},{"className":2110},[],[2112],{"type":34,"value":918},{"type":34,"value":485},{"type":25,"tag":62,"props":2115,"children":2117},{"className":2116},[],[2118],{"type":34,"value":925},{"type":34,"value":485},{"type":25,"tag":62,"props":2121,"children":2123},{"className":2122},[],[2124],{"type":34,"value":932},{"type":34,"value":2126},", none) with reasons and tags;",{"type":25,"tag":163,"props":2128,"children":2129},{},[2130,2136,2138,2144],{"type":25,"tag":62,"props":2131,"children":2133},{"className":2132},[],[2134],{"type":34,"value":2135},"inference_kind",{"type":34,"value":2137}," three ways, and the legacy ",{"type":25,"tag":62,"props":2139,"children":2141},{"className":2140},[],[2142],{"type":34,"value":2143},"request_class",{"type":34,"value":472},{"type":25,"tag":163,"props":2146,"children":2147},{},[2148,2150,2156,2158,2163,2164,2170,2171,2177,2179,2185],{"type":34,"value":2149},"tool ",{"type":25,"tag":62,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":34,"value":2155},"kind",{"type":34,"value":2157}," as ",{"type":25,"tag":62,"props":2159,"children":2161},{"className":2160},[],[2162],{"type":34,"value":2087},{"type":34,"value":485},{"type":25,"tag":62,"props":2165,"children":2167},{"className":2166},[],[2168],{"type":34,"value":2169},"mcp",{"type":34,"value":493},{"type":25,"tag":62,"props":2172,"children":2174},{"className":2173},[],[2175],{"type":34,"value":2176},"skill",{"type":34,"value":2178},", plus ",{"type":25,"tag":62,"props":2180,"children":2182},{"className":2181},[],[2183],{"type":34,"value":2184},"skill_evidence: file_read",{"type":34,"value":472},{"type":25,"tag":163,"props":2187,"children":2188},{},[2189,2191,2196,2198,2203],{"type":34,"value":2190},"both the ",{"type":25,"tag":62,"props":2192,"children":2194},{"className":2193},[],[2195],{"type":34,"value":270},{"type":34,"value":2197}," and the flat legacy ",{"type":25,"tag":62,"props":2199,"children":2201},{"className":2200},[],[2202],{"type":34,"value":278},{"type":34,"value":2204}," envelopes;",{"type":25,"tag":163,"props":2206,"children":2207},{},[2208,2210,2216,2218,2223],{"type":34,"value":2209},"the screenshot's row: an Anthropic inference denied by \"Secret in prompt\", attributed through a ",{"type":25,"tag":62,"props":2211,"children":2213},{"className":2212},[],[2214],{"type":34,"value":2215},"process.started",{"type":34,"value":2217}," for ",{"type":25,"tag":62,"props":2219,"children":2221},{"className":2220},[],[2222],{"type":34,"value":1618},{"type":34,"value":280},{"type":25,"tag":163,"props":2225,"children":2226},{},[2227,2232],{"type":25,"tag":30,"props":2228,"children":2229},{},[2230],{"type":34,"value":2231},"Regenerate and fix the ports.",{"type":25,"tag":159,"props":2233,"children":2234},{},[2235,2253],{"type":25,"tag":163,"props":2236,"children":2237},{},[2238,2240,2245,2246,2251],{"type":34,"value":2239},"Expected: the plugin preview reads ",{"type":25,"tag":62,"props":2241,"children":2243},{"className":2242},[],[2244],{"type":34,"value":270},{"type":34,"value":485},{"type":25,"tag":62,"props":2247,"children":2249},{"className":2248},[],[2250],{"type":34,"value":594},{"type":34,"value":2252}," goes, and every Fable-only difference turns up.",{"type":25,"tag":163,"props":2254,"children":2255},{},[2256],{"type":34,"value":2257},"Remove the quirks main fixed, and update review-3's quirk list.",{"type":25,"tag":163,"props":2259,"children":2260},{},[2261,2266,2268,2272,2274,2279],{"type":25,"tag":30,"props":2262,"children":2263},{},[2264],{"type":34,"value":2265},"Correct the survey.",{"type":34,"value":2267}," A section 8 in ",{"type":25,"tag":39,"props":2269,"children":2270},{"href":293},[2271],{"type":34,"value":296},{"type":34,"value":2273},", \"main's ",{"type":25,"tag":62,"props":2275,"children":2277},{"className":2276},[],[2278],{"type":34,"value":67},{"type":34,"value":2280},"\", saying what the survey missed and pointing here, so the next reader starts from main.",{"type":25,"tag":26,"props":2282,"children":2283},{},[2284,2289,2291,2297],{"type":25,"tag":30,"props":2285,"children":2286},{},[2287],{"type":34,"value":2288},"Done when:",{"type":34,"value":2290}," the vectors regenerate byte-identical from main twice, and ",{"type":25,"tag":62,"props":2292,"children":2294},{"className":2293},[],[2295],{"type":34,"value":2296},"cargo test -p stream",{"type":34,"value":2298}," passes against them.",{"type":25,"tag":1830,"props":2300,"children":2302},{"id":2301},"phase-1-the-audit-logs-data-cratesstream",[2303,2305,2310],{"type":34,"value":2304},"Phase 1: the Audit log's data (",{"type":25,"tag":62,"props":2306,"children":2308},{"className":2307},[],[2309],{"type":34,"value":137},{"type":34,"value":2311},")",{"type":25,"tag":358,"props":2313,"children":2314},{},[2315,2405,2442],{"type":25,"tag":163,"props":2316,"children":2317},{},[2318,2328,2330,2335,2337,2343,2344,2350,2351,2357,2358,2364,2365,2371,2373,2379,2381],{"type":25,"tag":30,"props":2319,"children":2320},{},[2321,2327],{"type":25,"tag":62,"props":2322,"children":2324},{"className":2323},[],[2325],{"type":34,"value":2326},"stream::audit",{"type":34,"value":280},{"type":34,"value":2329}," A port of ",{"type":25,"tag":62,"props":2331,"children":2333},{"className":2332},[],[2334],{"type":34,"value":462},{"type":34,"value":2336},": ",{"type":25,"tag":62,"props":2338,"children":2340},{"className":2339},[],[2341],{"type":34,"value":2342},"is_audit_event",{"type":34,"value":485},{"type":25,"tag":62,"props":2345,"children":2347},{"className":2346},[],[2348],{"type":34,"value":2349},"project_audit_event",{"type":34,"value":485},{"type":25,"tag":62,"props":2352,"children":2354},{"className":2353},[],[2355],{"type":34,"value":2356},"audit_field",{"type":34,"value":485},{"type":25,"tag":62,"props":2359,"children":2361},{"className":2360},[],[2362],{"type":34,"value":2363},"audit_metadata",{"type":34,"value":485},{"type":25,"tag":62,"props":2366,"children":2368},{"className":2367},[],[2369],{"type":34,"value":2370},"audit_summary",{"type":34,"value":2372},", and the inference and tool labels. The 512-character cap counts code points (",{"type":25,"tag":62,"props":2374,"children":2376},{"className":2375},[],[2377],{"type":34,"value":2378},"Array.from",{"type":34,"value":2380},"), not bytes.\n",{"type":25,"tag":159,"props":2382,"children":2383},{},[2384],{"type":25,"tag":163,"props":2385,"children":2386},{},[2387,2389,2395,2397,2403],{"type":34,"value":2388},"Vectors: ",{"type":25,"tag":62,"props":2390,"children":2392},{"className":2391},[],[2393],{"type":34,"value":2394},"scripts\u002Fvectors\u002Faudit.ts",{"type":34,"value":2396}," over the corpus, plus the nine cases of ",{"type":25,"tag":62,"props":2398,"children":2400},{"className":2399},[],[2401],{"type":34,"value":2402},"audit-events.test.ts",{"type":34,"value":2404}," as fixed inputs.",{"type":25,"tag":163,"props":2406,"children":2407},{},[2408,2413],{"type":25,"tag":30,"props":2409,"children":2410},{},[2411],{"type":34,"value":2412},"Two histories.",{"type":25,"tag":159,"props":2414,"children":2415},{},[2416,2421,2426,2431],{"type":25,"tag":163,"props":2417,"children":2418},{},[2419],{"type":34,"value":2420},"A second bounded buffer fed only audit frames, with its own limits and its own protected selection.",{"type":25,"tag":163,"props":2422,"children":2423},{},[2424],{"type":34,"value":2425},"It shares the entity index, so a late process snapshot attributes audit rows already gone from the Events buffer.",{"type":25,"tag":163,"props":2427,"children":2428},{},[2429],{"type":34,"value":2430},"File mode fills both, untrimmed.",{"type":25,"tag":163,"props":2432,"children":2433},{},[2434,2440],{"type":25,"tag":62,"props":2435,"children":2437},{"className":2436},[],[2438],{"type":34,"value":2439},"stream::buffer",{"type":34,"value":2441}," keeps raw frames, so audit rows are projected on demand, like any other row.",{"type":25,"tag":163,"props":2443,"children":2444},{},[2445,2450,2452,2458],{"type":25,"tag":30,"props":2446,"children":2447},{},[2448],{"type":34,"value":2449},"The pid",{"type":34,"value":2451}," for audit rows comes from the entity index (main's ",{"type":25,"tag":62,"props":2453,"children":2455},{"className":2454},[],[2456],{"type":34,"value":2457},"pidForEvent",{"type":34,"value":2459},").",{"type":25,"tag":26,"props":2461,"children":2462},{},[2463,2467,2469,2475],{"type":25,"tag":30,"props":2464,"children":2465},{},[2466],{"type":34,"value":2288},{"type":34,"value":2468}," the audit vectors agree, and a buffer test shows that 100,000 ",{"type":25,"tag":62,"props":2470,"children":2472},{"className":2471},[],[2473],{"type":34,"value":2474},"file.*",{"type":34,"value":2476}," records leave the audit history whole.",{"type":25,"tag":1830,"props":2478,"children":2480},{"id":2479},"phase-2-the-audit-log-tab-cratesdevmode",[2481,2483,2489],{"type":34,"value":2482},"Phase 2: the Audit log tab (",{"type":25,"tag":62,"props":2484,"children":2486},{"className":2485},[],[2487],{"type":34,"value":2488},"crates\u002Fdevmode",{"type":34,"value":2311},{"type":25,"tag":358,"props":2491,"children":2492},{},[2493,2503,2513,2574,2595,2605,2615,2631],{"type":25,"tag":163,"props":2494,"children":2495},{},[2496,2501],{"type":25,"tag":30,"props":2497,"children":2498},{},[2499],{"type":34,"value":2500},"A third tab, \"Audit log N\",",{"type":34,"value":2502}," with counts on all three: Events is the number kept, Tally the never-evicting total, Audit log the audit rows.",{"type":25,"tag":163,"props":2504,"children":2505},{},[2506,2511],{"type":25,"tag":30,"props":2507,"children":2508},{},[2509],{"type":34,"value":2510},"Main's audit note,",{"type":34,"value":2512}," in both its live and file versions.",{"type":25,"tag":163,"props":2514,"children":2515},{},[2516,2521],{"type":25,"tag":30,"props":2517,"children":2518},{},[2519],{"type":34,"value":2520},"The table in audit mode.",{"type":25,"tag":159,"props":2522,"children":2523},{},[2524,2564,2569],{"type":25,"tag":163,"props":2525,"children":2526},{},[2527,2529,2534,2536,2541,2543,2548,2550,2555,2557,2562],{"type":34,"value":2528},"Columns: Time · Activity chip (a capture gap in the warning tone) · Agent ",{"type":25,"tag":62,"props":2530,"children":2532},{"className":2531},[],[2533],{"type":34,"value":892},{"type":34,"value":2535}," · a two-line Summary (the target, then \"Rules: … | Tags: …\") · Decision pill (",{"type":25,"tag":62,"props":2537,"children":2539},{"className":2538},[],[2540],{"type":34,"value":918},{"type":34,"value":2542}," SUCCESS, ",{"type":25,"tag":62,"props":2544,"children":2546},{"className":2545},[],[2547],{"type":34,"value":925},{"type":34,"value":2549}," ERROR, ",{"type":25,"tag":62,"props":2551,"children":2553},{"className":2552},[],[2554],{"type":34,"value":932},{"type":34,"value":2556}," WARNING, ",{"type":25,"tag":62,"props":2558,"children":2560},{"className":2559},[],[2561],{"type":34,"value":939},{"type":34,"value":2563}," neutral).",{"type":25,"tag":163,"props":2565,"children":2566},{},[2567],{"type":34,"value":2568},"No Seq column.",{"type":25,"tag":163,"props":2570,"children":2571},{},[2572],{"type":34,"value":2573},"When the detail leaves the table under 640 px, the Agent column hides.",{"type":25,"tag":163,"props":2575,"children":2576},{},[2577,2582],{"type":25,"tag":30,"props":2578,"children":2579},{},[2580],{"type":34,"value":2581},"Filters in audit mode.",{"type":25,"tag":159,"props":2583,"children":2584},{},[2585,2590],{"type":25,"tag":163,"props":2586,"children":2587},{},[2588],{"type":34,"value":2589},"The rail reads Activity and lists categories only; the popover shows no types; the detail's Type chip is not a filter.",{"type":25,"tag":163,"props":2591,"children":2592},{},[2593],{"type":34,"value":2594},"The search placeholder is main's, and the search reaches the decision, the rules and the tags, which are in the projected summary.",{"type":25,"tag":163,"props":2596,"children":2597},{},[2598,2603],{"type":25,"tag":30,"props":2599,"children":2600},{},[2601],{"type":34,"value":2602},"Switching tabs",{"type":34,"value":2604}," clears the family and type filters, closes the detail and jumps to the latest row, as main does.",{"type":25,"tag":163,"props":2606,"children":2607},{},[2608,2613],{"type":25,"tag":30,"props":2609,"children":2610},{},[2611],{"type":34,"value":2612},"An Audit buffer",{"type":34,"value":2614}," of its own, with limits saved per view.",{"type":25,"tag":163,"props":2616,"children":2617},{},[2618,2623,2624,2629],{"type":25,"tag":30,"props":2619,"children":2620},{},[2621],{"type":34,"value":2622},"Main's empty state,",{"type":34,"value":180},{"type":25,"tag":62,"props":2625,"children":2627},{"className":2626},[],[2628],{"type":34,"value":957},{"type":34,"value":2630},". The honest states still take precedence while the stream is not live.",{"type":25,"tag":163,"props":2632,"children":2633},{},[2634,2639],{"type":25,"tag":30,"props":2635,"children":2636},{},[2637],{"type":34,"value":2638},"Stories:",{"type":25,"tag":159,"props":2640,"children":2641},{},[2642,2652,2671,2682,2692],{"type":25,"tag":163,"props":2643,"children":2644},{},[2645,2651],{"type":25,"tag":62,"props":2646,"children":2648},{"className":2647},[],[2649],{"type":34,"value":2650},"app-dev-live-audit",{"type":34,"value":472},{"type":25,"tag":163,"props":2653,"children":2654},{},[2655,2661,2663,2669],{"type":25,"tag":62,"props":2656,"children":2658},{"className":2657},[],[2659],{"type":34,"value":2660},"-audit-denied",{"type":34,"value":2662}," (the screenshot's state, filtered to ",{"type":25,"tag":62,"props":2664,"children":2666},{"className":2665},[],[2667],{"type":34,"value":2668},"activity=Inference",{"type":34,"value":2670},");",{"type":25,"tag":163,"props":2672,"children":2673},{},[2674,2680],{"type":25,"tag":62,"props":2675,"children":2677},{"className":2676},[],[2678],{"type":34,"value":2679},"-audit-narrow",{"type":34,"value":2681}," (the detail open);",{"type":25,"tag":163,"props":2683,"children":2684},{},[2685,2691],{"type":25,"tag":62,"props":2686,"children":2688},{"className":2687},[],[2689],{"type":34,"value":2690},"-audit-empty",{"type":34,"value":472},{"type":25,"tag":163,"props":2693,"children":2694},{},[2695,2701],{"type":25,"tag":62,"props":2696,"children":2698},{"className":2697},[],[2699],{"type":34,"value":2700},"-audit-file",{"type":34,"value":280},{"type":25,"tag":26,"props":2703,"children":2704},{},[2705,2709],{"type":25,"tag":30,"props":2706,"children":2707},{},[2708],{"type":34,"value":2288},{"type":34,"value":2710}," the five stories render and their region-text tests pass. The wipe against main comes in Phase 4.",{"type":25,"tag":1830,"props":2712,"children":2714},{"id":2713},"phase-3-the-shared-regions-back-to-mains-layout",[2715],{"type":34,"value":2716},"Phase 3: the shared regions, back to main's layout",{"type":25,"tag":26,"props":2718,"children":2719},{},[2720,2722,2728],{"type":34,"value":2721},"What changes comes first in each item; what stays, because it is one of c138's improvements, is marked ",{"type":25,"tag":2723,"props":2724,"children":2725},"em",{},[2726],{"type":34,"value":2727},"keep",{"type":34,"value":280},{"type":25,"tag":159,"props":2730,"children":2731},{},[2732,2757,2782,2803,2877,2914,2968,3047,3072,3097],{"type":25,"tag":163,"props":2733,"children":2734},{},[2735,2739],{"type":25,"tag":30,"props":2736,"children":2737},{},[2738],{"type":34,"value":634},{"type":25,"tag":159,"props":2740,"children":2741},{},[2742,2747],{"type":25,"tag":163,"props":2743,"children":2744},{},[2745],{"type":34,"value":2746},"Main's subtitle, with the status pill at the right beside Open JSONL and Return to live, using main's words: live, connecting, reconnecting, disconnected, file · name.",{"type":25,"tag":163,"props":2748,"children":2749},{},[2750,2755],{"type":25,"tag":2723,"props":2751,"children":2752},{},[2753],{"type":34,"value":2754},"Keep",{"type":34,"value":2756}," the honest state line under the title, as the subtitle's second line: the pill gives the word, the line the detail.",{"type":25,"tag":163,"props":2758,"children":2759},{},[2760,2764],{"type":25,"tag":30,"props":2761,"children":2762},{},[2763],{"type":34,"value":704},{"type":25,"tag":159,"props":2765,"children":2766},{},[2767,2772,2777],{"type":25,"tag":163,"props":2768,"children":2769},{},[2770],{"type":34,"value":2771},"The toggle as main's right-aligned link above the tabs (its word is call 1; hidden or shown by default is review-3 call 5).",{"type":25,"tag":163,"props":2773,"children":2774},{},[2775],{"type":34,"value":2776},"Cards in the MiniCard's arrangement: status, folder, logo and label, Requests, Files R\u002FW\u002FE, and Tools & Skills (three, then \"+N more\").",{"type":25,"tag":163,"props":2778,"children":2779},{},[2780],{"type":34,"value":2781},"View details toggles the agent filter and rings the card. Folder and focus actions are call 6.",{"type":25,"tag":163,"props":2783,"children":2784},{},[2785,2790],{"type":25,"tag":30,"props":2786,"children":2787},{},[2788],{"type":34,"value":2789},"Tabs and buffer on one row.",{"type":25,"tag":159,"props":2791,"children":2792},{},[2793,2798],{"type":25,"tag":163,"props":2794,"children":2795},{},[2796],{"type":34,"value":2797},"The tabs at the left.",{"type":25,"tag":163,"props":2799,"children":2800},{},[2801],{"type":34,"value":2802},"At the right, main's buffer cluster: \"Event buffer · N kept · X MiB · N evicted\", an events input, a MiB input and Reset, per view, saved in the Store. This replaces the 5k\u002F20k\u002F100k picker (call 4).",{"type":25,"tag":163,"props":2804,"children":2805},{},[2806,2811,2813],{"type":25,"tag":30,"props":2807,"children":2808},{},[2809],{"type":34,"value":2810},"The filter card replaces the left rail",{"type":34,"value":2812}," (call 2).\n",{"type":25,"tag":159,"props":2814,"children":2815},{},[2816,2849,2853,2858,2867],{"type":25,"tag":163,"props":2817,"children":2818},{},[2819,2821,2827,2828,2834,2835,2841,2842,2848],{"type":34,"value":2820},"Search, then the Filter popover: agent checkboxes and a tri-state family → type tree with counts, using ",{"type":25,"tag":62,"props":2822,"children":2824},{"className":2823},[],[2825],{"type":34,"value":2826},"gpui-component",{"type":34,"value":77},{"type":25,"tag":62,"props":2829,"children":2831},{"className":2830},[],[2832],{"type":34,"value":2833},"popover",{"type":34,"value":485},{"type":25,"tag":62,"props":2836,"children":2838},{"className":2837},[],[2839],{"type":34,"value":2840},"checkbox",{"type":34,"value":493},{"type":25,"tag":62,"props":2843,"children":2845},{"className":2844},[],[2846],{"type":34,"value":2847},"tree",{"type":34,"value":280},{"type":25,"tag":163,"props":2850,"children":2851},{},[2852],{"type":34,"value":811},{"type":25,"tag":163,"props":2854,"children":2855},{},[2856],{"type":34,"value":2857},"The chip rails under a rule: Agents, then Events (or Activity).",{"type":25,"tag":163,"props":2859,"children":2860},{},[2861,2865],{"type":25,"tag":2723,"props":2862,"children":2863},{},[2864],{"type":34,"value":2754},{"type":34,"value":2866}," severity as a third rail (all, info+, warn+, error), process and session as chips, and the search over the whole record.",{"type":25,"tag":163,"props":2868,"children":2869},{},[2870,2875],{"type":25,"tag":2723,"props":2871,"children":2872},{},[2873],{"type":34,"value":2874},"Add",{"type":34,"value":2876}," Esc to close the popover. Main lacks it; it was survey item 14.",{"type":25,"tag":163,"props":2878,"children":2879},{},[2880,2884,2886],{"type":25,"tag":30,"props":2881,"children":2882},{},[2883],{"type":34,"value":1511},{"type":34,"value":2885}," (call 3).\n",{"type":25,"tag":159,"props":2887,"children":2888},{},[2889,2900,2905],{"type":25,"tag":163,"props":2890,"children":2891},{},[2892,2894,2898],{"type":34,"value":2893},"Scrolling away from the live edge pauses: ",{"type":25,"tag":2723,"props":2895,"children":2896},{},[2897],{"type":34,"value":2727},{"type":34,"value":2899}," the real freeze at a line.",{"type":25,"tag":163,"props":2901,"children":2902},{},[2903],{"type":34,"value":2904},"The pause shows main's amber banner, \"N new events\" with \"Jump to latest\", and Jump to latest resumes.",{"type":25,"tag":163,"props":2906,"children":2907},{},[2908,2912],{"type":25,"tag":2723,"props":2909,"children":2910},{},[2911],{"type":34,"value":2754},{"type":34,"value":2913}," Space and the Pause button.",{"type":25,"tag":163,"props":2915,"children":2916},{},[2917,2922],{"type":25,"tag":30,"props":2918,"children":2919},{},[2920],{"type":34,"value":2921},"Table.",{"type":25,"tag":159,"props":2923,"children":2924},{},[2925,2930,2935,2947,2952],{"type":25,"tag":163,"props":2926,"children":2927},{},[2928],{"type":34,"value":2929},"A header row: TIME ▲ toggles newest on top or bottom, then SEQ, EVENT, AGENT, SUMMARY.",{"type":25,"tag":163,"props":2931,"children":2932},{},[2933],{"type":34,"value":2934},"The type as a mono chip in the family tone. The agent cell is clickable to filter, with the pid in parentheses.",{"type":25,"tag":163,"props":2936,"children":2937},{},[2938,2940,2945],{"type":34,"value":2939},"The summary styled as ",{"type":25,"tag":62,"props":2941,"children":2943},{"className":2942},[],[2944],{"type":34,"value":900},{"type":34,"value":2946}," subtle and the value muted. Zebra rows and a selected ring.",{"type":25,"tag":163,"props":2948,"children":2949},{},[2950],{"type":34,"value":2951},"Row height is call 5.",{"type":25,"tag":163,"props":2953,"children":2954},{},[2955,2959,2961,2966],{"type":25,"tag":2723,"props":2956,"children":2957},{},[2958],{"type":34,"value":2754},{"type":34,"value":2960}," milliseconds, ",{"type":25,"tag":62,"props":2962,"children":2964},{"className":2963},[],[2965],{"type":34,"value":1597},{"type":34,"value":2967}," for ages, ↑↓ j k, and the severity dot (moved into the Time cell, so the columns match main's).",{"type":25,"tag":163,"props":2969,"children":2970},{},[2971,2976],{"type":25,"tag":30,"props":2972,"children":2973},{},[2974],{"type":34,"value":2975},"Detail.",{"type":25,"tag":159,"props":2977,"children":2978},{},[2979,2991,3002,3007,3026,3038],{"type":25,"tag":163,"props":2980,"children":2981},{},[2982,2984,2989],{"type":34,"value":2983},"The header ",{"type":25,"tag":62,"props":2985,"children":2987},{"className":2986},[],[2988],{"type":34,"value":989},{"type":34,"value":2990}," in the family hue, with Copy JSON and a close ✕.",{"type":25,"tag":163,"props":2992,"children":2993},{},[2994,2996,3000],{"type":34,"value":2995},"Main's context chips in main's order (Agent, Entity, Install, Run, Run PID, Agent PID or PID, Family, Type), each filtering or searching as main's does. ",{"type":25,"tag":2723,"props":2997,"children":2998},{},[2999],{"type":34,"value":2754},{"type":34,"value":3001}," Session after them.",{"type":25,"tag":163,"props":3003,"children":3004},{},[3005],{"type":34,"value":3006},"The preview as a key\u002Fvalue table.",{"type":25,"tag":163,"props":3008,"children":3009},{},[3010,3012,3017,3019,3025],{"type":34,"value":3011},"The payload as a tree expanded to depth 2 (",{"type":25,"tag":62,"props":3013,"children":3015},{"className":3014},[],[3016],{"type":34,"value":2847},{"type":34,"value":3018},"). Above 200,000 characters it falls back to the code block, as main falls back to ",{"type":25,"tag":62,"props":3020,"children":3022},{"className":3021},[],[3023],{"type":34,"value":3024},"\u003Cpre>",{"type":34,"value":280},{"type":25,"tag":163,"props":3027,"children":3028},{},[3029,3031,3037],{"type":34,"value":3030},"Width draggable from 360 to 920 px (",{"type":25,"tag":62,"props":3032,"children":3034},{"className":3033},[],[3035],{"type":34,"value":3036},"resizable",{"type":34,"value":2459},{"type":25,"tag":163,"props":3039,"children":3040},{},[3041,3045],{"type":25,"tag":2723,"props":3042,"children":3043},{},[3044],{"type":34,"value":2754},{"type":34,"value":3046}," masking, Reveal and \"Copy JSON (masked)\".",{"type":25,"tag":163,"props":3048,"children":3049},{},[3050,3055],{"type":25,"tag":30,"props":3051,"children":3052},{},[3053],{"type":34,"value":3054},"Tally.",{"type":25,"tag":159,"props":3056,"children":3057},{},[3058,3063],{"type":25,"tag":163,"props":3059,"children":3060},{},[3061],{"type":34,"value":3062},"Main's pivot on the Run key: expand a family into types, sort by run, total, family or type, Hide zero rows (on by default), Hide zero columns, expand or collapse all, Reset, log-scaled shading relative to the column, a totals footer, Copy view and Copy full.",{"type":25,"tag":163,"props":3064,"children":3065},{},[3066,3070],{"type":25,"tag":2723,"props":3067,"children":3068},{},[3069],{"type":34,"value":2754},{"type":34,"value":3071}," process, session and type as the key picker, with Process the default, since the Run key is one \"Unattributed\" row on today's stream.",{"type":25,"tag":163,"props":3073,"children":3074},{},[3075,3080],{"type":25,"tag":30,"props":3076,"children":3077},{},[3078],{"type":34,"value":3079},"File mode.",{"type":25,"tag":159,"props":3081,"children":3082},{},[3083,3088],{"type":25,"tag":163,"props":3084,"children":3085},{},[3086],{"type":34,"value":3087},"Drop a file anywhere on the window, with main's overlay sentence and a confirmation before replacing a view that is not empty.",{"type":25,"tag":163,"props":3089,"children":3090},{},[3091,3095],{"type":25,"tag":2723,"props":3092,"children":3093},{},[3094],{"type":34,"value":2754},{"type":34,"value":3096}," Export JSONL and Clear.",{"type":25,"tag":163,"props":3098,"children":3099},{},[3100,3105,3107,3113],{"type":25,"tag":30,"props":3101,"children":3102},{},[3103],{"type":34,"value":3104},"Stories.",{"type":34,"value":3106}," Re-capture the eight existing ",{"type":25,"tag":62,"props":3108,"children":3110},{"className":3109},[],[3111],{"type":34,"value":3112},"app-dev-live*",{"type":34,"value":3114}," stories and add one for the filter popover and one for a frozen follow.",{"type":25,"tag":1830,"props":3116,"children":3118},{"id":3117},"phase-4-the-wipe-and-the-readings",[3119],{"type":34,"value":3120},"Phase 4: the wipe, and the readings",{"type":25,"tag":358,"props":3122,"children":3123},{},[3124,3174,3192,3210,3228],{"type":25,"tag":163,"props":3125,"children":3126},{},[3127,3132],{"type":25,"tag":30,"props":3128,"children":3129},{},[3130],{"type":34,"value":3131},"Main, captured.",{"type":25,"tag":159,"props":3133,"children":3134},{},[3135,3156,3161],{"type":25,"tag":163,"props":3136,"children":3137},{},[3138,3140,3146,3148,3154],{"type":34,"value":3139},"Run main's UI from the ",{"type":25,"tag":62,"props":3141,"children":3143},{"className":3142},[],[3144],{"type":34,"value":3145},"..\u002Fqcontrol-main",{"type":34,"value":3147}," worktree on its own port, never a second ",{"type":25,"tag":62,"props":3149,"children":3151},{"className":3150},[],[3152],{"type":34,"value":3153},"nuxt dev",{"type":34,"value":3155}," in a busy tree.",{"type":25,"tag":163,"props":3157,"children":3158},{},[3159],{"type":34,"value":3160},"Load the corpus through Open JSONL (a file input in a shot program), so both pages show the same records.",{"type":25,"tag":163,"props":3162,"children":3163},{},[3164,3166,3172],{"type":34,"value":3165},"Shot program: ",{"type":25,"tag":62,"props":3167,"children":3169},{"className":3168},[],[3170],{"type":34,"value":3171},"scripts\u002Fshot-programs\u002Fc138-live-parity-main.json",{"type":34,"value":3173},", with one state each for Events, Tally, Audit log, Audit log filtered to Inference, detail open, filtered to nothing, and the popover.",{"type":25,"tag":163,"props":3175,"children":3176},{},[3177,3182,3184,3190],{"type":25,"tag":30,"props":3178,"children":3179},{},[3180],{"type":34,"value":3181},"Ours, captured",{"type":34,"value":3183}," from the same file with ",{"type":25,"tag":62,"props":3185,"children":3187},{"className":3186},[],[3188],{"type":34,"value":3189},"npm run shots -- --native",{"type":34,"value":3191},", state for state.",{"type":25,"tag":163,"props":3193,"children":3194},{},[3195,3200,3202,3208],{"type":25,"tag":30,"props":3196,"children":3197},{},[3198],{"type":34,"value":3199},"The wipe.",{"type":34,"value":3201}," Pairs in ",{"type":25,"tag":62,"props":3203,"children":3205},{"className":3204},[],[3206],{"type":34,"value":3207},"UxImageCompare",{"type":34,"value":3209},", on the c138 cycle page: c132 D7's re-check, applied to a page we replicate.",{"type":25,"tag":163,"props":3211,"children":3212},{},[3213,3218,3220,3226],{"type":25,"tag":30,"props":3214,"children":3215},{},[3216],{"type":34,"value":3217},"The readings.",{"type":34,"value":3219}," Two buffers and the projection under 100 and 1,000 events a second (",{"type":25,"tag":62,"props":3221,"children":3223},{"className":3222},[],[3224],{"type":34,"value":3225},"scripts\u002Ffootprint\u002Flive-activity.sh",{"type":34,"value":3227},"). They fold into the readings review-3 call 12 already owes.",{"type":25,"tag":163,"props":3229,"children":3230},{},[3231,3236],{"type":25,"tag":30,"props":3232,"children":3233},{},[3234],{"type":34,"value":3235},"The checklist.",{"type":34,"value":3237}," Every row of the side-by-side table above, marked matched, kept ours, or ruled away.",{"type":25,"tag":148,"props":3239,"children":3241},{"id":3240},"calls-for-mark-before-phase-3-phases-02-need-none-of-them",[3242],{"type":34,"value":18},{"type":25,"tag":358,"props":3244,"children":3245},{},[3246,3295,3320,3345,3370,3397,3435],{"type":25,"tag":163,"props":3247,"children":3248},{},[3249,3254,3256,3261,3263,3268,3270,3275,3277],{"type":25,"tag":30,"props":3250,"children":3251},{},[3252],{"type":34,"value":3253},"The word.",{"type":34,"value":3255}," Main says ",{"type":25,"tag":2723,"props":3257,"children":3258},{},[3259],{"type":34,"value":3260},"agents",{"type":34,"value":3262},": \"Show agents\", the AGENT column, and the adapter id ",{"type":25,"tag":62,"props":3264,"children":3266},{"className":3265},[],[3267],{"type":34,"value":1618},{"type":34,"value":3269},". Ours says ",{"type":25,"tag":2723,"props":3271,"children":3272},{},[3273],{"type":34,"value":3274},"harnesses",{"type":34,"value":3276},", with the display name \"Claude Code\", per c92's rename (2026-09-22), which qdash's Fable app also follows.\n",{"type":25,"tag":159,"props":3278,"children":3279},{},[3280,3290],{"type":25,"tag":163,"props":3281,"children":3282},{},[3283,3288],{"type":25,"tag":30,"props":3284,"children":3285},{},[3286],{"type":34,"value":3287},"Recommend:",{"type":34,"value":3289}," keep Harness and the display name, and put the adapter id in the chip's title.",{"type":25,"tag":163,"props":3291,"children":3292},{},[3293],{"type":34,"value":3294},"If faithful means the words as well, say so, and Phase 3 uses main's.",{"type":25,"tag":163,"props":3296,"children":3297},{},[3298,3303],{"type":25,"tag":30,"props":3299,"children":3300},{},[3301],{"type":34,"value":3302},"The filter card or the rail.",{"type":25,"tag":159,"props":3304,"children":3305},{},[3306,3315],{"type":25,"tag":163,"props":3307,"children":3308},{},[3309,3313],{"type":25,"tag":30,"props":3310,"children":3311},{},[3312],{"type":34,"value":3287},{"type":34,"value":3314}," main's card, with severity, process and session as extra rows and chips.",{"type":25,"tag":163,"props":3316,"children":3317},{},[3318],{"type":34,"value":3319},"The rail costs 200 px of table width, and main has no rail.",{"type":25,"tag":163,"props":3321,"children":3322},{},[3323,3328],{"type":25,"tag":30,"props":3324,"children":3325},{},[3326],{"type":34,"value":3327},"Follow and pause.",{"type":25,"tag":159,"props":3329,"children":3330},{},[3331,3340],{"type":25,"tag":163,"props":3332,"children":3333},{},[3334,3338],{"type":25,"tag":30,"props":3335,"children":3336},{},[3337],{"type":34,"value":3287},{"type":34,"value":3339}," one mechanism. Scrolling away is a real pause, frozen at a line, under main's banner, and Jump to latest resumes.",{"type":25,"tag":163,"props":3341,"children":3342},{},[3343],{"type":34,"value":3344},"The alternative is main's soft freeze, where rows keep evicting under you, plus our Pause button as a second, separate thing.",{"type":25,"tag":163,"props":3346,"children":3347},{},[3348,3353],{"type":25,"tag":30,"props":3349,"children":3350},{},[3351],{"type":34,"value":3352},"The buffer control.",{"type":25,"tag":159,"props":3354,"children":3355},{},[3356,3365],{"type":25,"tag":163,"props":3357,"children":3358},{},[3359,3363],{"type":25,"tag":30,"props":3360,"children":3361},{},[3362],{"type":34,"value":3287},{"type":34,"value":3364}," main's two inputs per view with our defaults, 20,000 events and 32 MiB (review-3 call 3).",{"type":25,"tag":163,"props":3366,"children":3367},{},[3368],{"type":34,"value":3369},"Fully faithful would be main's 5,000 events and 25 MiB.",{"type":25,"tag":163,"props":3371,"children":3372},{},[3373,3378,3380],{"type":25,"tag":30,"props":3374,"children":3375},{},[3376],{"type":34,"value":3377},"Row height.",{"type":34,"value":3379}," Main uses 44 px; ours is 28.\n",{"type":25,"tag":159,"props":3381,"children":3382},{},[3383,3392],{"type":25,"tag":163,"props":3384,"children":3385},{},[3386,3390],{"type":25,"tag":30,"props":3387,"children":3388},{},[3389],{"type":34,"value":3287},{"type":34,"value":3391}," 44, because the Audit log's two-line summary does not fit in 28, and one table should keep one height.",{"type":25,"tag":163,"props":3393,"children":3394},{},[3395],{"type":34,"value":3396},"The cost is about a third as many rows on screen.",{"type":25,"tag":163,"props":3398,"children":3399},{},[3400,3405,3407,3413,3415,3421,3423],{"type":25,"tag":30,"props":3401,"children":3402},{},[3403],{"type":34,"value":3404},"Presence actions and default.",{"type":34,"value":3406}," The native app can reveal a folder (",{"type":25,"tag":62,"props":3408,"children":3410},{"className":3409},[],[3411],{"type":34,"value":3412},"open -R",{"type":34,"value":3414},") and focus an app itself, without qdash's ",{"type":25,"tag":62,"props":3416,"children":3418},{"className":3417},[],[3419],{"type":34,"value":3420},"\u002Fapi\u002Fagent\u002F*",{"type":34,"value":3422}," routes.\n",{"type":25,"tag":159,"props":3424,"children":3425},{},[3426],{"type":25,"tag":163,"props":3427,"children":3428},{},[3429,3433],{"type":25,"tag":30,"props":3430,"children":3431},{},[3432],{"type":34,"value":3287},{"type":34,"value":3434}," reveal now and focus later, with the row hidden by default as main has it (review-3 call 5 asked the opposite question).",{"type":25,"tag":163,"props":3436,"children":3437},{},[3438,3442,3444],{"type":25,"tag":30,"props":3439,"children":3440},{},[3441],{"type":34,"value":1183},{"type":34,"value":3443}," Main keeps streaming after you leave the page; ours ends the feed with the page, which is what the gate measures.\n",{"type":25,"tag":159,"props":3445,"children":3446},{},[3447,3452],{"type":25,"tag":163,"props":3448,"children":3449},{},[3450],{"type":34,"value":3451},"With an Audit log, leaving the page loses its history.",{"type":25,"tag":163,"props":3453,"children":3454},{},[3455,3459],{"type":25,"tag":30,"props":3456,"children":3457},{},[3458],{"type":34,"value":3287},{"type":34,"value":3460}," keep ours while it is a developer tool. If the Audit log is ever shown outside developer mode (Findings is its natural home), it needs the sensor's cursor, not a page that stays open.",{"type":25,"tag":148,"props":3462,"children":3464},{"id":3463},"out-of-this-plan",[3465],{"type":34,"value":19},{"type":25,"tag":159,"props":3467,"children":3468},{},[3469,3578,3588],{"type":25,"tag":163,"props":3470,"children":3471},{},[3472,3489,3491,3496,3497,3502,3503,3508,3509,3515,3516,3522,3523,3529,3530,3536,3537,3542,3544,3549,3550,3556,3557,3562,3563,3569,3571,3577],{"type":25,"tag":30,"props":3473,"children":3474},{},[3475,3477,3482,3484],{"type":34,"value":3476},"qdash's own ",{"type":25,"tag":62,"props":3478,"children":3480},{"className":3479},[],[3481],{"type":34,"value":67},{"type":34,"value":3483}," on ",{"type":25,"tag":62,"props":3485,"children":3487},{"className":3486},[],[3488],{"type":34,"value":194},{"type":34,"value":3490}," has the same gap, because the Fable app replaced the files main has since changed. Both sides of PR qpoint-io\u002Fqcontrol#713 have changed ",{"type":25,"tag":62,"props":3492,"children":3494},{"className":3493},[],[3495],{"type":34,"value":1988},{"type":34,"value":485},{"type":25,"tag":62,"props":3498,"children":3500},{"className":3499},[],[3501],{"type":34,"value":1973},{"type":34,"value":485},{"type":25,"tag":62,"props":3504,"children":3506},{"className":3505},[],[3507],{"type":34,"value":1957},{"type":34,"value":485},{"type":25,"tag":62,"props":3510,"children":3512},{"className":3511},[],[3513],{"type":34,"value":3514},"FilterPopover.vue",{"type":34,"value":485},{"type":25,"tag":62,"props":3517,"children":3519},{"className":3518},[],[3520],{"type":34,"value":3521},"RetentionControls.vue",{"type":34,"value":485},{"type":25,"tag":62,"props":3524,"children":3526},{"className":3525},[],[3527],{"type":34,"value":3528},"useLiveEvents.ts",{"type":34,"value":485},{"type":25,"tag":62,"props":3531,"children":3533},{"className":3532},[],[3534],{"type":34,"value":3535},"retention-settings.ts",{"type":34,"value":493},{"type":25,"tag":62,"props":3538,"children":3540},{"className":3539},[],[3541],{"type":34,"value":517},{"type":34,"value":3543}," since the merge-base, so when it merges with main the Audit log is lost unless someone carries it across. qcontrol is read-only here; it is a task of its own. ",{"type":25,"tag":30,"props":3545,"children":3546},{},[3547],{"type":34,"value":3548},"Carried across 2026-11-12",{"type":34,"value":2023},{"type":25,"tag":62,"props":3551,"children":3553},{"className":3552},[],[3554],{"type":34,"value":3555},"..\u002Fqcontrol",{"type":34,"value":857},{"type":25,"tag":62,"props":3558,"children":3560},{"className":3559},[],[3561],{"type":34,"value":194},{"type":34,"value":485},{"type":25,"tag":62,"props":3564,"children":3566},{"className":3565},[],[3567],{"type":34,"value":3568},"d274b9306",{"type":34,"value":3570},", pushed 2026-11-13): main's #757 fitted into the Fable app's split files. The record is ",{"type":25,"tag":39,"props":3572,"children":3574},{"href":3573},"\u002Fcycles\u002Fdesign\u002Fc138\u002Fdoc\u002Ffable-audit\u002FREADME",[3575],{"type":34,"value":3576},"fable-audit\u002FREADME.md",{"type":34,"value":280},{"type":25,"tag":163,"props":3579,"children":3580},{},[3581,3586],{"type":25,"tag":30,"props":3582,"children":3583},{},[3584],{"type":34,"value":3585},"The sensor asks",{"type":34,"value":3587}," (a cursor, a gap marker, a filter on the server, a snapshot for the new subscriber only) are unchanged.",{"type":25,"tag":163,"props":3589,"children":3590},{},[3591,3596],{"type":25,"tag":30,"props":3592,"children":3593},{},[3594],{"type":34,"value":3595},"c138 Phase 4, Events,",{"type":34,"value":3597}," still waits on Mark's brief and mock.",{"type":25,"tag":148,"props":3599,"children":3601},{"id":3600},"_2026-11-13-the-firehose-in-mains-grammar-done-qnative-f19e679-pushed",[3602,3604,3610],{"type":34,"value":3603},"2026-11-13: the firehose in main's grammar (done: qnative ",{"type":25,"tag":62,"props":3605,"children":3607},{"className":3606},[],[3608],{"type":34,"value":3609},"f19e679",{"type":34,"value":3611},", pushed)",{"type":25,"tag":26,"props":3613,"children":3614},{},[3615,3617,3622,3624,3630,3632,3637,3638,3643,3645,3650,3652,3658],{"type":34,"value":3616},"Mark: \"the live view, ie the firehose. It seems like the existing version is cleaner, better color coding, filtering\". I compared main's ",{"type":25,"tag":62,"props":3618,"children":3620},{"className":3619},[],[3621],{"type":34,"value":67},{"type":34,"value":3623}," with the native page on the same corpus. Main ran on ",{"type":25,"tag":62,"props":3625,"children":3627},{"className":3626},[],[3628],{"type":34,"value":3629},":3031",{"type":34,"value":3631}," from a read-only checkout of ",{"type":25,"tag":62,"props":3633,"children":3635},{"className":3634},[],[3636],{"type":34,"value":75},{"type":34,"value":1879},{"type":25,"tag":62,"props":3639,"children":3641},{"className":3640},[],[3642],{"type":34,"value":3145},{"type":34,"value":3644},", against the seed backend. I then brought the native Events view to main's grammar in ",{"type":25,"tag":62,"props":3646,"children":3648},{"className":3647},[],[3649],{"type":34,"value":129},{"type":34,"value":3651},". Captures are in ",{"type":25,"tag":39,"props":3653,"children":3655},{"href":3654},"live-firehose\u002Fmain-vs-native-after.png",[3656],{"type":34,"value":3657},"live-firehose\u002F",{"type":34,"value":280},{"type":25,"tag":159,"props":3660,"children":3661},{},[3662,3688,3727,3737,3747],{"type":25,"tag":163,"props":3663,"children":3664},{},[3665,3670,3672,3678,3680,3686],{"type":25,"tag":30,"props":3666,"children":3667},{},[3668],{"type":34,"value":3669},"Colour:",{"type":34,"value":3671}," each type is a chip in its family's colour, from main's ",{"type":25,"tag":62,"props":3673,"children":3675},{"className":3674},[],[3676],{"type":34,"value":3677},"familyTone",{"type":34,"value":3679}," mapped to QGUIkit's tokens (",{"type":25,"tag":62,"props":3681,"children":3683},{"className":3682},[],[3684],{"type":34,"value":3685},"family_chip",{"type":34,"value":3687},"). The detail header and the tally take the same colours.",{"type":25,"tag":163,"props":3689,"children":3690},{},[3691,3696],{"type":25,"tag":30,"props":3692,"children":3693},{},[3694],{"type":34,"value":3695},"Rows:",{"type":25,"tag":159,"props":3697,"children":3698},{},[3699,3704,3709,3722],{"type":25,"tag":163,"props":3700,"children":3701},{},[3702],{"type":34,"value":3703},"44 px, zebra-striped, with the selected row tinted in primary;",{"type":25,"tag":163,"props":3705,"children":3706},{},[3707],{"type":34,"value":3708},"time, line and summary in 12 px mono;",{"type":25,"tag":163,"props":3710,"children":3711},{},[3712,3714,3720],{"type":34,"value":3713},"the summary as ",{"type":25,"tag":62,"props":3715,"children":3717},{"className":3716},[],[3718],{"type":34,"value":3719},"key=value",{"type":34,"value":3721}," parts, the key subtle and the value muted, with no pipes;",{"type":25,"tag":163,"props":3723,"children":3724},{},[3725],{"type":34,"value":3726},"only lines that failed to parse in red.",{"type":25,"tag":163,"props":3728,"children":3729},{},[3730,3735],{"type":25,"tag":30,"props":3731,"children":3732},{},[3733],{"type":34,"value":3734},"A column header:",{"type":34,"value":3736}," TIME ▲, SEQ, EVENT, HARNESS, SUMMARY.",{"type":25,"tag":163,"props":3738,"children":3739},{},[3740,3745],{"type":25,"tag":30,"props":3741,"children":3742},{},[3743],{"type":34,"value":3744},"Filtering:",{"type":34,"value":3746}," main's card above the table replaces the 200 px rail. It holds the search, the severity control (kept from c138), the active filters as removable chips, Reset, and the Harnesses and Events rails as chips with counts. While one chip is on, the others dim.",{"type":25,"tag":163,"props":3748,"children":3749},{},[3750,3755],{"type":25,"tag":30,"props":3751,"children":3752},{},[3753],{"type":34,"value":3754},"Kept from c138's improvements:",{"type":34,"value":3756}," the real pause, the honest states, the buffer, severity and payload search, the keys, export and masking.",{"type":25,"tag":26,"props":3758,"children":3759},{},[3760],{"type":34,"value":3761},"This takes calls 2 (the filter card) and 5 (44 px rows) the way Mark's direction points. Still open from Phase 3:",{"type":25,"tag":159,"props":3763,"children":3764},{},[3765,3770,3775,3780,3785,3790,3795,3800,3805],{"type":25,"tag":163,"props":3766,"children":3767},{},[3768],{"type":34,"value":3769},"main's status pill and subtitle;",{"type":25,"tag":163,"props":3771,"children":3772},{},[3773],{"type":34,"value":3774},"the presence cards;",{"type":25,"tag":163,"props":3776,"children":3777},{},[3778],{"type":34,"value":3779},"main's Event buffer cluster (call 4);",{"type":25,"tag":163,"props":3781,"children":3782},{},[3783],{"type":34,"value":3784},"scroll-away as the pause, under main's banner (call 3);",{"type":25,"tag":163,"props":3786,"children":3787},{},[3788],{"type":34,"value":3789},"the time-direction toggle;",{"type":25,"tag":163,"props":3791,"children":3792},{},[3793],{"type":34,"value":3794},"the detail's JSON tree and resizable pane;",{"type":25,"tag":163,"props":3796,"children":3797},{},[3798],{"type":34,"value":3799},"the tally's pivot features;",{"type":25,"tag":163,"props":3801,"children":3802},{},[3803],{"type":34,"value":3804},"drag and drop of a JSONL file;",{"type":25,"tag":163,"props":3806,"children":3807},{},[3808],{"type":34,"value":3809},"the Audit log tab (Phases 1 and 2).",1794599390432]