[{"data":1,"prerenderedAt":999},["ShallowReactive",2],{"$fjBeCx-1GporwbFhOXRGE6laL3E94nAbGETkEmPvNVPE":3},{"newThing":4,"project":5,"cycle":9,"sections":21,"threads":954,"otherDocs":955,"documents":956,"images":957,"archiveItems":996,"links":997},"Runtime tag-based regrouping with animated boundary morphs",{"id":6,"label":7,"liveBase":8},"qmap","Qmap",null,{"id":10,"num":11,"dir":12,"name":13,"title":13,"focus":8,"status":14,"statusNote":8,"created":15,"completed":8,"mode":8,"report":8,"recordless":16,"thumbnail":17,"imageCount":18,"artifactCount":19,"lastActivity":20,"hasPickup":16,"hasInitialPrompt":16},"c5",5,"c5.boundary-morphing","boundary-morphing","archived","2026-03-23",false,"\u002Fcycles\u002Fqmap\u002Fc5-apps-criticality.png",9,0,"2026-08-15",[22,40,73,122,197,351,446,785,835,932],{"key":23,"title":24,"empty":16,"ast":25},"objective","Goal",{"type":26,"children":27},"root",[28,36],{"type":29,"tag":30,"props":31,"children":32},"element","p",{},[33],{"type":34,"value":35},"text","Explore dynamic boundary grouping based on actor tags, with animated transitions when groupings change.",{"type":29,"tag":37,"props":38,"children":39},"hr",{},[],{"key":41,"title":42,"empty":16,"ast":43},"extra","Focus",{"type":26,"children":44},[45,70],{"type":29,"tag":46,"props":47,"children":48},"ul",{},[49,55,60,65],{"type":29,"tag":50,"props":51,"children":52},"li",{},[53],{"type":34,"value":54},"Tag-based data model for actors (Apps, Vendors, Datasets)",{"type":29,"tag":50,"props":56,"children":57},{},[58],{"type":34,"value":59},"Dynamic re-grouping at runtime",{"type":29,"tag":50,"props":61,"children":62},{},[63],{"type":34,"value":64},"Animated morphing between grouping configurations",{"type":29,"tag":50,"props":66,"children":67},{},[68],{"type":34,"value":69},"Visual \"rug\" boundaries beneath each group",{"type":29,"tag":37,"props":71,"children":72},{},[],{"key":41,"title":74,"empty":16,"ast":75},"Approach",{"type":26,"children":76},[77,119],{"type":29,"tag":78,"props":79,"children":80},"ol",{},[81,86,91],{"type":29,"tag":50,"props":82,"children":83},{},[84],{"type":34,"value":85},"Each actor type has props and tags (key-value pairs)",{"type":29,"tag":50,"props":87,"children":88},{},[89],{"type":34,"value":90},"UI dropdowns let user select which tag to group by per actor type",{"type":29,"tag":50,"props":92,"children":93},{},[94,96],{"type":34,"value":95},"When grouping changes:\n",{"type":29,"tag":46,"props":97,"children":98},{},[99,104,109,114],{"type":29,"tag":50,"props":100,"children":101},{},[102],{"type":34,"value":103},"Compute new layout positions",{"type":29,"tag":50,"props":105,"children":106},{},[107],{"type":34,"value":108},"Animate actors to new positions",{"type":29,"tag":50,"props":110,"children":111},{},[112],{"type":34,"value":113},"Fade out old rugs, fade in new rugs",{"type":29,"tag":50,"props":115,"children":116},{},[117],{"type":34,"value":118},"Update flow connections",{"type":29,"tag":37,"props":120,"children":121},{},[],{"key":41,"title":123,"empty":16,"ast":124},"Data Model",{"type":26,"children":125},[126,133,147,153,161,167,175,181,189,192],{"type":29,"tag":127,"props":128,"children":130},"h3",{"id":129},"apps",[131],{"type":34,"value":132},"Apps",{"type":29,"tag":134,"props":135,"children":141},"pre",{"className":136,"code":137,"language":138,"meta":139,"style":140},"language-javascript","{\n  id: \"app-api-gateway\",\n  type: \"app\",\n  name: \"API Gateway\",\n  tags: {\n    criticality: \"production\",\n    language: \"node\",\n    datacenter: \"AWS East\",\n    pod: \"gateway-7f8d9c\",\n    team: \"platform\",\n  }\n}\n","javascript","","undefined",[142],{"type":29,"tag":143,"props":144,"children":145},"code",{"__ignoreMap":139},[146],{"type":34,"value":137},{"type":29,"tag":127,"props":148,"children":150},{"id":149},"vendors",[151],{"type":34,"value":152},"Vendors",{"type":29,"tag":134,"props":154,"children":156},{"className":136,"code":155,"language":138,"meta":139,"style":140},"{\n  id: \"vendor-stripe\",\n  type: \"vendor\",\n  name: \"Stripe\",\n  url: \"stripe.com\",\n  tags: {\n    securityPolicy: \"critical-data\",\n    continent: \"N. America\",\n  }\n}\n",[157],{"type":29,"tag":143,"props":158,"children":159},{"__ignoreMap":139},[160],{"type":34,"value":155},{"type":29,"tag":127,"props":162,"children":164},{"id":163},"datasets",[165],{"type":34,"value":166},"Datasets",{"type":29,"tag":134,"props":168,"children":170},{"className":136,"code":169,"language":138,"meta":139,"style":140},"{\n  id: \"db-users\",\n  type: \"dataset\",\n  name: \"Users DB\",\n  tags: {\n    kind: \"Postgres\",\n    pii: true,\n    sensitiveData: true,\n    criticality: \"production\",\n  }\n}\n",[171],{"type":29,"tag":143,"props":172,"children":173},{"__ignoreMap":139},[174],{"type":34,"value":169},{"type":29,"tag":127,"props":176,"children":178},{"id":177},"connections",[179],{"type":34,"value":180},"Connections",{"type":29,"tag":134,"props":182,"children":184},{"className":136,"code":183,"language":138,"meta":139,"style":140},"{ id: \"conn-1\", origin: \"app-api-gateway\", destination: \"vendor-stripe\", timestamp: 1706900000000 }\n",[185],{"type":29,"tag":143,"props":186,"children":187},{"__ignoreMap":139},[188],{"type":34,"value":183},{"type":29,"tag":37,"props":190,"children":191},{},[],{"type":29,"tag":193,"props":194,"children":195},"style",{},[196],{"type":34,"value":139},{"key":41,"title":198,"empty":16,"ast":199},"Key Files",{"type":26,"children":200},[201,348],{"type":29,"tag":202,"props":203,"children":204},"table",{},[205,224],{"type":29,"tag":206,"props":207,"children":208},"thead",{},[209],{"type":29,"tag":210,"props":211,"children":212},"tr",{},[213,219],{"type":29,"tag":214,"props":215,"children":216},"th",{},[217],{"type":34,"value":218},"File",{"type":29,"tag":214,"props":220,"children":221},{},[222],{"type":34,"value":223},"Purpose",{"type":29,"tag":225,"props":226,"children":227},"tbody",{},[228,246,263,280,297,314,331],{"type":29,"tag":210,"props":229,"children":230},{},[231,241],{"type":29,"tag":232,"props":233,"children":234},"td",{},[235],{"type":29,"tag":143,"props":236,"children":238},{"className":237},[],[239],{"type":34,"value":240},"shared\u002FtestData.js",{"type":29,"tag":232,"props":242,"children":243},{},[244],{"type":34,"value":245},"Tagged actor data (8 Apps, 6 Vendors, 6 Datasets, 16 Connections)",{"type":29,"tag":210,"props":247,"children":248},{},[249,258],{"type":29,"tag":232,"props":250,"children":251},{},[252],{"type":29,"tag":143,"props":253,"children":255},{"className":254},[],[256],{"type":34,"value":257},"shared\u002FlayoutEngine.js",{"type":29,"tag":232,"props":259,"children":260},{},[261],{"type":34,"value":262},"Computes positions for grouped actors and rug bounds",{"type":29,"tag":210,"props":264,"children":265},{},[266,275],{"type":29,"tag":232,"props":267,"children":268},{},[269],{"type":29,"tag":143,"props":270,"children":272},{"className":271},[],[273],{"type":34,"value":274},"shared\u002FmorphAnimation.js",{"type":29,"tag":232,"props":276,"children":277},{},[278],{"type":34,"value":279},"Animation system for smooth transitions",{"type":29,"tag":210,"props":281,"children":282},{},[283,292],{"type":29,"tag":232,"props":284,"children":285},{},[286],{"type":29,"tag":143,"props":287,"children":289},{"className":288},[],[290],{"type":34,"value":291},"boundaries\u002FGroupRug.js",{"type":29,"tag":232,"props":293,"children":294},{},[295],{"type":34,"value":296},"Rug boundary visualization with labels",{"type":29,"tag":210,"props":298,"children":299},{},[300,309],{"type":29,"tag":232,"props":301,"children":302},{},[303],{"type":29,"tag":143,"props":304,"children":306},{"className":305},[],[307],{"type":34,"value":308},"components\u002FGroupingControls.vue",{"type":29,"tag":232,"props":310,"children":311},{},[312],{"type":34,"value":313},"UI dropdowns for selecting groupings",{"type":29,"tag":210,"props":315,"children":316},{},[317,326],{"type":29,"tag":232,"props":318,"children":319},{},[320],{"type":29,"tag":143,"props":321,"children":323},{"className":322},[],[324],{"type":34,"value":325},"entities\u002F",{"type":29,"tag":232,"props":327,"children":328},{},[329],{"type":34,"value":330},"Reused from c3 (AppMesh, VendorMesh, DatabaseMesh)",{"type":29,"tag":210,"props":332,"children":333},{},[334,343],{"type":29,"tag":232,"props":335,"children":336},{},[337],{"type":29,"tag":143,"props":338,"children":340},{"className":339},[],[341],{"type":34,"value":342},"flows\u002F",{"type":29,"tag":232,"props":344,"children":345},{},[346],{"type":34,"value":347},"Reused from c3 (LineFlow for connections)",{"type":29,"tag":37,"props":349,"children":350},{},[],{"key":41,"title":352,"empty":16,"ast":353},"Test Data",{"type":26,"children":354},[355,432,443],{"type":29,"tag":202,"props":356,"children":357},{},[358,379],{"type":29,"tag":206,"props":359,"children":360},{},[361],{"type":29,"tag":210,"props":362,"children":363},{},[364,369,374],{"type":29,"tag":214,"props":365,"children":366},{},[367],{"type":34,"value":368},"Actor Type",{"type":29,"tag":214,"props":370,"children":371},{},[372],{"type":34,"value":373},"Count",{"type":29,"tag":214,"props":375,"children":376},{},[377],{"type":34,"value":378},"Groupable Tags",{"type":29,"tag":225,"props":380,"children":381},{},[382,399,416],{"type":29,"tag":210,"props":383,"children":384},{},[385,389,394],{"type":29,"tag":232,"props":386,"children":387},{},[388],{"type":34,"value":132},{"type":29,"tag":232,"props":390,"children":391},{},[392],{"type":34,"value":393},"8",{"type":29,"tag":232,"props":395,"children":396},{},[397],{"type":34,"value":398},"criticality, language, datacenter, pod, team",{"type":29,"tag":210,"props":400,"children":401},{},[402,406,411],{"type":29,"tag":232,"props":403,"children":404},{},[405],{"type":34,"value":152},{"type":29,"tag":232,"props":407,"children":408},{},[409],{"type":34,"value":410},"6",{"type":29,"tag":232,"props":412,"children":413},{},[414],{"type":34,"value":415},"securityPolicy, continent",{"type":29,"tag":210,"props":417,"children":418},{},[419,423,427],{"type":29,"tag":232,"props":420,"children":421},{},[422],{"type":34,"value":166},{"type":29,"tag":232,"props":424,"children":425},{},[426],{"type":34,"value":410},{"type":29,"tag":232,"props":428,"children":429},{},[430],{"type":34,"value":431},"kind, pii, sensitiveData, criticality",{"type":29,"tag":30,"props":433,"children":434},{},[435,441],{"type":29,"tag":436,"props":437,"children":438},"strong",{},[439],{"type":34,"value":440},"Connections:",{"type":34,"value":442}," 16 (linking apps to vendors, apps to datasets, apps to apps)",{"type":29,"tag":37,"props":444,"children":445},{},[],{"key":41,"title":447,"empty":16,"ast":448},"Learnings",{"type":26,"children":449},[450,456,520,526,565,571,611,617,672,678,734,740,758,764,782],{"type":29,"tag":127,"props":451,"children":453},{"id":452},"animation-system-architecture",[454],{"type":34,"value":455},"Animation System Architecture",{"type":29,"tag":46,"props":457,"children":458},{},[459,477,495],{"type":29,"tag":50,"props":460,"children":461},{},[462,467,469,475],{"type":29,"tag":436,"props":463,"children":464},{},[465],{"type":34,"value":466},"Singleton AnimationController",{"type":34,"value":468}," - Central controller manages all active animations via ",{"type":29,"tag":143,"props":470,"children":472},{"className":471},[],[473],{"type":34,"value":474},"requestAnimationFrame",{"type":34,"value":476}," loop; prevents multiple competing loops",{"type":29,"tag":50,"props":478,"children":479},{},[480,485,487,493],{"type":29,"tag":436,"props":481,"children":482},{},[483],{"type":34,"value":484},"Promise-based API",{"type":34,"value":486}," - ",{"type":29,"tag":143,"props":488,"children":490},{"className":489},[],[491],{"type":34,"value":492},"animateValue()",{"type":34,"value":494}," returns Promise for clean async\u002Fawait sequencing; enables \"wait for X then do Y\" patterns",{"type":29,"tag":50,"props":496,"children":497},{},[498,503,504,510,512,518],{"type":29,"tag":436,"props":499,"children":500},{},[501],{"type":34,"value":502},"Easing functions",{"type":34,"value":486},{"type":29,"tag":143,"props":505,"children":507},{"className":506},[],[508],{"type":34,"value":509},"easeInOutCubic",{"type":34,"value":511}," for position morphing (smooth start\u002Fend), ",{"type":29,"tag":143,"props":513,"children":515},{"className":514},[],[516],{"type":34,"value":517},"easeOutCubic",{"type":34,"value":519}," for fades (quick start, gentle landing)",{"type":29,"tag":127,"props":521,"children":523},{"id":522},"morph-transition-coordination",[524],{"type":34,"value":525},"Morph Transition Coordination",{"type":29,"tag":46,"props":527,"children":528},{},[529,545,555],{"type":29,"tag":50,"props":530,"children":531},{},[532,537,539],{"type":29,"tag":436,"props":533,"children":534},{},[535],{"type":34,"value":536},"Parallel where possible",{"type":34,"value":538}," - Rug fades, actor visibility changes, and position animations run concurrently via ",{"type":29,"tag":143,"props":540,"children":542},{"className":541},[],[543],{"type":34,"value":544},"Promise.all",{"type":29,"tag":50,"props":546,"children":547},{},[548,553],{"type":29,"tag":436,"props":549,"children":550},{},[551],{"type":34,"value":552},"Real-time flow updates",{"type":34,"value":554}," - Flow connections update every frame during actor position animation, not just at start\u002Fend",{"type":29,"tag":50,"props":556,"children":557},{},[558,563],{"type":29,"tag":436,"props":559,"children":560},{},[561],{"type":34,"value":562},"Visibility-first filtering",{"type":34,"value":564}," - Determine which actors have target positions; skip animating hidden elements entirely",{"type":29,"tag":127,"props":566,"children":568},{"id":567},"layout-engine-design",[569],{"type":34,"value":570},"Layout Engine Design",{"type":29,"tag":46,"props":572,"children":573},{},[574,584,601],{"type":29,"tag":50,"props":575,"children":576},{},[577,582],{"type":29,"tag":436,"props":578,"children":579},{},[580],{"type":34,"value":581},"Two-pass algorithm",{"type":34,"value":583},": (1) compute each group's internal grid layout and bounds, (2) arrange groups in a row and apply global offsets",{"type":29,"tag":50,"props":585,"children":586},{},[587,592,593,599],{"type":29,"tag":436,"props":588,"children":589},{},[590],{"type":34,"value":591},"Grid positioning",{"type":34,"value":486},{"type":29,"tag":143,"props":594,"children":596},{"className":595},[],[597],{"type":34,"value":598},"Math.ceil(Math.sqrt(count))",{"type":34,"value":600}," columns gives roughly square grids",{"type":29,"tag":50,"props":602,"children":603},{},[604,609],{"type":29,"tag":436,"props":605,"children":606},{},[607],{"type":34,"value":608},"Type-specific Z offsets",{"type":34,"value":610}," - Actors separated by type (datasets: -4, apps: 0, vendors: +4) for visual clarity without overlap",{"type":29,"tag":127,"props":612,"children":614},{"id":613},"grouprug-implementation",[615],{"type":34,"value":616},"GroupRug Implementation",{"type":29,"tag":46,"props":618,"children":619},{},[620,630,640],{"type":29,"tag":50,"props":621,"children":622},{},[623,628],{"type":29,"tag":436,"props":624,"children":625},{},[626],{"type":34,"value":627},"Actor-type coloring",{"type":34,"value":629}," - Blue\u002Fpurple\u002Fgreen by type creates instant visual association",{"type":29,"tag":50,"props":631,"children":632},{},[633,638],{"type":29,"tag":436,"props":634,"children":635},{},[636],{"type":34,"value":637},"Canvas label coloring",{"type":34,"value":639}," - Label text uses same hex color as rug, maintaining cohesion",{"type":29,"tag":50,"props":641,"children":642},{},[643,648,649,655,657,663,664,670],{"type":29,"tag":436,"props":644,"children":645},{},[646],{"type":34,"value":647},"Depth buffer settings",{"type":34,"value":486},{"type":29,"tag":143,"props":650,"children":652},{"className":651},[],[653],{"type":34,"value":654},"depthWrite: false",{"type":34,"value":656},", ",{"type":29,"tag":143,"props":658,"children":660},{"className":659},[],[661],{"type":34,"value":662},"polygonOffset: true",{"type":34,"value":656},{"type":29,"tag":143,"props":665,"children":667},{"className":666},[],[668],{"type":34,"value":669},"renderOrder",{"type":34,"value":671}," hierarchy prevents z-fighting between overlapping transparent surfaces",{"type":29,"tag":127,"props":673,"children":675},{"id":674},"tag-based-data-model",[676],{"type":34,"value":677},"Tag-Based Data Model",{"type":29,"tag":46,"props":679,"children":680},{},[681,691,701],{"type":29,"tag":50,"props":682,"children":683},{},[684,689],{"type":29,"tag":436,"props":685,"children":686},{},[687],{"type":34,"value":688},"Flat actors + rich metadata",{"type":34,"value":690}," - No nested hierarchies; grouping is derived from tag queries at runtime",{"type":29,"tag":50,"props":692,"children":693},{},[694,699],{"type":29,"tag":436,"props":695,"children":696},{},[697],{"type":34,"value":698},"\"Unknown\" fallback group",{"type":34,"value":700}," - Actors missing the selected tag go to a catch-all group rather than disappearing",{"type":29,"tag":50,"props":702,"children":703},{},[704,709,711,717,718,724,726,732],{"type":29,"tag":436,"props":705,"children":706},{},[707],{"type":34,"value":708},"Runtime flexibility",{"type":34,"value":710}," - Same data, different views—grouping by ",{"type":29,"tag":143,"props":712,"children":714},{"className":713},[],[715],{"type":34,"value":716},"team",{"type":34,"value":656},{"type":29,"tag":143,"props":719,"children":721},{"className":720},[],[722],{"type":34,"value":723},"datacenter",{"type":34,"value":725},", or ",{"type":29,"tag":143,"props":727,"children":729},{"className":728},[],[730],{"type":34,"value":731},"criticality",{"type":34,"value":733}," without restructuring",{"type":29,"tag":127,"props":735,"children":737},{"id":736},"what-worked-well",[738],{"type":34,"value":739},"What Worked Well",{"type":29,"tag":46,"props":741,"children":742},{},[743,748,753],{"type":29,"tag":50,"props":744,"children":745},{},[746],{"type":34,"value":747},"Reusing c3 entity meshes and c4's ContainerRug pattern saved significant time",{"type":29,"tag":50,"props":749,"children":750},{},[751],{"type":34,"value":752},"Animation system is composable—can animate any value, not just specific properties",{"type":29,"tag":50,"props":754,"children":755},{},[756],{"type":34,"value":757},"Layout engine is deterministic (same inputs → same outputs), which simplifies debugging",{"type":29,"tag":127,"props":759,"children":761},{"id":760},"open-questions-answered",[762],{"type":34,"value":763},"Open Questions Answered",{"type":29,"tag":46,"props":765,"children":766},{},[767,772,777],{"type":29,"tag":50,"props":768,"children":769},{},[770],{"type":34,"value":771},"Missing tags → \"unknown\" group (implemented)",{"type":29,"tag":50,"props":773,"children":774},{},[775],{"type":34,"value":776},"\"No grouping\" option → not implemented, but trivial (group all by constant key)",{"type":29,"tag":50,"props":778,"children":779},{},[780],{"type":34,"value":781},"Cross-boundary flows → flows animate correctly but don't yet visually emphasize boundary crossing",{"type":29,"tag":37,"props":783,"children":784},{},[],{"key":41,"title":786,"empty":16,"ast":787},"Relationship to Other Cycles",{"type":26,"children":788},[789,832],{"type":29,"tag":46,"props":790,"children":791},{},[792,802,812,822],{"type":29,"tag":50,"props":793,"children":794},{},[795,800],{"type":29,"tag":436,"props":796,"children":797},{},[798],{"type":34,"value":799},"c1.border-grouping:",{"type":34,"value":801}," Rug visualization patterns reused here",{"type":29,"tag":50,"props":803,"children":804},{},[805,810],{"type":29,"tag":436,"props":806,"children":807},{},[808],{"type":34,"value":809},"c2.entity-meshes:",{"type":34,"value":811}," N\u002FA (skipped to c3)",{"type":29,"tag":50,"props":813,"children":814},{},[815,820],{"type":29,"tag":436,"props":816,"children":817},{},[818],{"type":34,"value":819},"c3.data-flows:",{"type":34,"value":821}," Entity meshes and flow rendering reused",{"type":29,"tag":50,"props":823,"children":824},{},[825,830],{"type":29,"tag":436,"props":826,"children":827},{},[828],{"type":34,"value":829},"c4.semantic-zoom:",{"type":34,"value":831}," Morphing animation patterns informed by cube-to-rug transitions",{"type":29,"tag":37,"props":833,"children":834},{},[],{"key":41,"title":836,"empty":16,"ast":837},"Progress",{"type":26,"children":838},[839,929],{"type":29,"tag":46,"props":840,"children":843},{"className":841},[842],"contains-task-list",[844,857,866,875,884,893,902,911,920],{"type":29,"tag":50,"props":845,"children":848},{"className":846},[847],"task-list-item",[849,855],{"type":29,"tag":850,"props":851,"children":854},"input",{"checked":852,"disabled":852,"type":853},true,"checkbox",[],{"type":34,"value":856}," Create cycle structure",{"type":29,"tag":50,"props":858,"children":860},{"className":859},[847],[861,864],{"type":29,"tag":850,"props":862,"children":863},{"checked":852,"disabled":852,"type":853},[],{"type":34,"value":865}," Tag-based test data",{"type":29,"tag":50,"props":867,"children":869},{"className":868},[847],[870,873],{"type":29,"tag":850,"props":871,"children":872},{"checked":852,"disabled":852,"type":853},[],{"type":34,"value":874}," Layout engine for grouped actors",{"type":29,"tag":50,"props":876,"children":878},{"className":877},[847],[879,882],{"type":29,"tag":850,"props":880,"children":881},{"checked":852,"disabled":852,"type":853},[],{"type":34,"value":883}," GroupRug boundary visualization",{"type":29,"tag":50,"props":885,"children":887},{"className":886},[847],[888,891],{"type":29,"tag":850,"props":889,"children":890},{"checked":852,"disabled":852,"type":853},[],{"type":34,"value":892}," Morph animation system",{"type":29,"tag":50,"props":894,"children":896},{"className":895},[847],[897,900],{"type":29,"tag":850,"props":898,"children":899},{"checked":852,"disabled":852,"type":853},[],{"type":34,"value":901}," Grouping controls UI",{"type":29,"tag":50,"props":903,"children":905},{"className":904},[847],[906,909],{"type":29,"tag":850,"props":907,"children":908},{"checked":852,"disabled":852,"type":853},[],{"type":34,"value":910}," Wire up ExperimentsApp.vue",{"type":29,"tag":50,"props":912,"children":914},{"className":913},[847],[915,918],{"type":29,"tag":850,"props":916,"children":917},{"disabled":852,"type":853},[],{"type":34,"value":919}," Test and iterate",{"type":29,"tag":50,"props":921,"children":923},{"className":922},[847],[924,927],{"type":29,"tag":850,"props":925,"children":926},{"disabled":852,"type":853},[],{"type":34,"value":928}," Document learnings",{"type":29,"tag":37,"props":930,"children":931},{},[],{"key":41,"title":933,"empty":16,"ast":934},"Open Questions",{"type":26,"children":935},[936],{"type":29,"tag":78,"props":937,"children":938},{},[939,944,949],{"type":29,"tag":50,"props":940,"children":941},{},[942],{"type":34,"value":943},"How should actors with missing tags be grouped? (Currently: \"unknown\" group)",{"type":29,"tag":50,"props":945,"children":946},{},[947],{"type":34,"value":948},"Should there be a \"no grouping\" option showing all actors flat?",{"type":29,"tag":50,"props":950,"children":951},{},[952],{"type":34,"value":953},"How do flows look when they cross group boundaries?",[],[],[],[958,965,968,972,976,980,984,988,992],{"src":959,"kind":960,"order":961,"caption":962,"capturedAt":963,"route":964},"\u002Fcycles\u002Fqmap\u002Fc5-team-continent-kind.png","hero",30,"Default: apps by team, vendors by continent, datasets by kind","2026-08-16T03:06:59.862Z","\u002Fexperiments\u002Fc5.boundary-morphing\u002F",{"src":17,"kind":960,"order":966,"caption":967,"capturedAt":963,"route":964},31,"Apps regrouped by criticality — mid-morph identity",{"src":969,"kind":960,"order":970,"caption":971,"capturedAt":963,"route":964},"\u002Fcycles\u002Fqmap\u002Fc5-apps-language.png",32,"Apps by language",{"src":973,"kind":960,"order":974,"caption":975,"capturedAt":963,"route":964},"\u002Fcycles\u002Fqmap\u002Fc5-apps-datacenter.png",33,"Apps by datacenter",{"src":977,"kind":960,"order":978,"caption":979,"capturedAt":963,"route":964},"\u002Fcycles\u002Fqmap\u002Fc5-apps-pod.png",34,"Apps by pod — the finest grain",{"src":981,"kind":960,"order":982,"caption":983,"capturedAt":963,"route":964},"\u002Fcycles\u002Fqmap\u002Fc5-vendors-policy.png",35,"Vendors regrouped by security policy",{"src":985,"kind":960,"order":986,"caption":987,"capturedAt":963,"route":964},"\u002Fcycles\u002Fqmap\u002Fc5-datasets-sensitive.png",36,"Datasets by sensitive-data flag",{"src":989,"kind":960,"order":990,"caption":991,"capturedAt":963,"route":964},"\u002Fcycles\u002Fqmap\u002Fc5-high-arcs.png",37,"Curve height 8 over the regrouped field",{"src":993,"kind":994,"order":995},"\u002Fcycles\u002Fqmap\u002Fc5.outcomes.png","legacy",100,[],[998],{"route":964,"href":8},1794599370209]