[{"data":1,"prerenderedAt":1324},["ShallowReactive",2],{"$fG8Frg4_KKlFBM1A_FsDPncaYOKGmhV29ODiouzdRSgA":3},{"newThing":4,"project":5,"cycle":8,"sections":21,"threads":1138,"otherDocs":1139,"documents":1141,"images":1150,"archiveItems":1293,"links":1302},null,{"id":6,"label":7,"liveBase":4},"design","Design",{"id":9,"num":10,"dir":11,"name":12,"title":12,"focus":13,"status":14,"statusNote":4,"created":15,"completed":4,"mode":4,"report":4,"recordless":16,"thumbnail":17,"imageCount":18,"artifactCount":19,"lastActivity":15,"hasPickup":16,"hasInitialPrompt":20},"c65",65,"c65.control-center-v2","control-center-v2","Shift the control center from infinitely-configurable controls to a compliance-driven system of pre-defined Policies — research the framework↔policy connection, then mock the policy catalog and per-policy config pages","active","2026-08-12",false,"\u002Fcycles\u002Fdesign\u002Fc65-compliance-frameworks.png",27,4,true,[22,95,129,280,1099],{"key":23,"title":24,"empty":16,"ast":25},"why","Why",{"type":26,"children":27},"root",[28,76],{"type":29,"tag":30,"props":31,"children":32},"element","p",{},[33,36,42,44,50,52,59,61,66,68,74],{"type":34,"value":35},"text","c64 consolidated qdash around the flexible control model and shipped the V5 expand-card authoring flow — and in doing so made the cost of that flexibility visible: every control is a hand-built rule (signal + clauses + decisions + actions + packs), which is more complexity and manual configuration than the product wants to put in front of an operator. c65 deliberately reverses the emphasis: the infinite configurability moves ",{"type":29,"tag":37,"props":38,"children":39},"em",{},[40],{"type":34,"value":41},"behind",{"type":34,"value":43}," a curated set of ",{"type":29,"tag":45,"props":46,"children":47},"strong",{},[48],{"type":34,"value":49},"pre-defined Policies",{"type":34,"value":51}," — narrow in scope, activated\u002Fdeactivated with a toggle, each with focused context-specific configuration (e.g. the egress allow-list policy gets a page for managing the list). The ",{"type":29,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":34,"value":58},"\u002Fpolicy",{"type":34,"value":60}," page had already started down this path; we veer back toward it, minus its enforcement-mode\u002Fviolation-handling cascade (that becomes a global function, out of scope here). ",{"type":29,"tag":45,"props":62,"children":63},{},[64],{"type":34,"value":65},"Compliance frameworks are the driver:",{"type":34,"value":67}," frameworks are toggled globally (as on ",{"type":29,"tag":53,"props":69,"children":71},{"className":70},[],[72],{"type":34,"value":73},"\u002Fcompliance",{"type":34,"value":75}," today) and determine global health and security posture; policies exist to satisfy them.",{"type":29,"tag":30,"props":77,"children":78},{},[79,81,86,88,93],{"type":34,"value":80},"Vocabulary decision (2026-08-12): the pre-defined units are ",{"type":29,"tag":45,"props":82,"children":83},{},[84],{"type":34,"value":85},"Policies",{"type":34,"value":87},", a distinct concept sitting above the flexible ",{"type":29,"tag":45,"props":89,"children":90},{},[91],{"type":34,"value":92},"Controls",{"type":34,"value":94}," engine — reintroducing the word c64's IA pass retired, now with a real distinction to carry (policy = curated, narrow, toggleable unit; control = underlying executable rule).",{"key":96,"title":97,"empty":16,"ast":98},"objective","Objective",{"type":26,"children":99},[100],{"type":29,"tag":30,"props":101,"children":102},{},[103,105,111,113,119,121,127],{"type":34,"value":104},"Four deliverables: (1) ",{"type":29,"tag":53,"props":106,"children":108},{"className":107},[],[109],{"type":34,"value":110},"research-frameworks.md",{"type":34,"value":112}," — in-depth analysis of the 12-framework union catalog (rules.rs PACKS ∪ frontend catalog): what each framework demands that is runtime-addressable, provable\u002Fattestation\u002Fout-of-scope split, and the policy mappings it implies; (2) ",{"type":29,"tag":53,"props":114,"children":116},{"className":115},[],[117],{"type":34,"value":118},"policy-definitions.md",{"type":34,"value":120}," — the canonical policy roster with stable P-ids: purpose, underlying control rule, config shape + fields, framework mappings, provenance; (3) ",{"type":29,"tag":53,"props":122,"children":124},{"className":123},[],[125],{"type":34,"value":126},"\u002Fpages\u002Fpolicy-catalog",{"type":34,"value":128}," — the main mock: global framework toggles + posture rollup over a categorized policy table with toggles and framework-gap emphasis; (4) first-pass config pages — one page per policy, built almost entirely from ~5 shared config-shape template components (list editor, threshold, level select, detector list, toggle + exceptions), egress allow-list as the deep exemplar. Explicitly NOT solving enforcement modes, violation handling\u002Falerting, or qdash implementation.",{"key":130,"title":131,"empty":16,"ast":132},"scope","Scope",{"type":26,"children":133},[134],{"type":29,"tag":135,"props":136,"children":137},"ul",{},[138,150,169,180,275],{"type":29,"tag":139,"props":140,"children":141},"li",{},[142,148],{"type":29,"tag":53,"props":143,"children":145},{"className":144},[],[146],{"type":34,"value":147},"cycles\u002Fc65.control-center-v2\u002F",{"type":34,"value":149}," — research-frameworks.md, policy-definitions.md",{"type":29,"tag":139,"props":151,"children":152},{},[153,159,161,167],{"type":29,"tag":53,"props":154,"children":156},{"className":155},[],[157],{"type":34,"value":158},"app\u002Fpages\u002Fpages\u002Fpolicy-catalog.vue",{"type":34,"value":160}," + ",{"type":29,"tag":53,"props":162,"children":164},{"className":163},[],[165],{"type":34,"value":166},"app\u002Fpages\u002Fpages\u002Fpolicy-config-*.vue",{"type":34,"value":168}," + page-registry entries",{"type":29,"tag":139,"props":170,"children":171},{},[172,178],{"type":29,"tag":53,"props":173,"children":175},{"className":174},[],[176],{"type":34,"value":177},"app\u002Fcomponents\u002Fpolicy\u002F",{"type":34,"value":179}," — site-local config shell + shape components (layer extraction is a later cycle)",{"type":29,"tag":139,"props":181,"children":182},{},[183,185,191,193,199,201,207,208,214,215,221,222,228,229,235,237,243,244,250,252,258,260,266,267,273],{"type":34,"value":184},"Read-only inputs: qcontrol ",{"type":29,"tag":53,"props":186,"children":188},{"className":187},[],[189],{"type":34,"value":190},"crates\u002Fqdash\u002Fui",{"type":34,"value":192}," (",{"type":29,"tag":53,"props":194,"children":196},{"className":195},[],[197],{"type":34,"value":198},"policy.vue",{"type":34,"value":200},", ",{"type":29,"tag":53,"props":202,"children":204},{"className":203},[],[205],{"type":34,"value":206},"compliance.vue",{"type":34,"value":200},{"type":29,"tag":53,"props":209,"children":211},{"className":210},[],[212],{"type":34,"value":213},"framework.vue",{"type":34,"value":200},{"type":29,"tag":53,"props":216,"children":218},{"className":217},[],[219],{"type":34,"value":220},"controls.vue",{"type":34,"value":200},{"type":29,"tag":53,"props":223,"children":225},{"className":224},[],[226],{"type":34,"value":227},"GovernSheet.vue",{"type":34,"value":200},{"type":29,"tag":53,"props":230,"children":232},{"className":231},[],[233],{"type":34,"value":234},"utils\u002Fframeworks.ts",{"type":34,"value":236},"), ",{"type":29,"tag":53,"props":238,"children":240},{"className":239},[],[241],{"type":34,"value":242},"crates\u002Fqdash\u002Fsrc\u002Frules.rs",{"type":34,"value":160},{"type":29,"tag":53,"props":245,"children":247},{"className":246},[],[248],{"type":34,"value":249},"db.rs",{"type":34,"value":251}," seeds, ",{"type":29,"tag":53,"props":253,"children":255},{"className":254},[],[256],{"type":34,"value":257},"docs\u002Fplan\u002Fqdash-information-architecture.md",{"type":34,"value":259}," §7.5; bob-wire ",{"type":29,"tag":53,"props":261,"children":263},{"className":262},[],[264],{"type":34,"value":265},"c17-governance.ts",{"type":34,"value":160},{"type":29,"tag":53,"props":268,"children":270},{"className":269},[],[271],{"type":34,"value":272},"c17-frameworks.ts",{"type":34,"value":274},"; design c54\u002Fc56\u002Fc64 cycles",{"type":29,"tag":139,"props":276,"children":277},{},[278],{"type":34,"value":279},"Out: qdash code changes, enforcement\u002Fviolation-handling design, layer changes beyond necessity",{"key":281,"title":282,"empty":16,"ast":283},"key-changes","Key Changes",{"type":26,"children":284},[285],{"type":29,"tag":135,"props":286,"children":287},{},[288,318,356,400,421,503,571,581,651,707,746,777,809,859,946,999],{"type":29,"tag":139,"props":289,"children":290},{},[291,296,298,302,304,309,311,316],{"type":29,"tag":45,"props":292,"children":293},{},[294],{"type":34,"value":295},"Kick-off + decisions (2026-08-12):",{"type":34,"value":297}," vocabulary = ",{"type":29,"tag":45,"props":299,"children":300},{},[301],{"type":34,"value":85},{"type":34,"value":303}," above Controls; framework catalog = ",{"type":29,"tag":45,"props":305,"children":306},{},[307],{"type":34,"value":308},"union of 12",{"type":34,"value":310}," (rules.rs PACKS ∪ frontend catalog — adds HIPAA\u002FGDPR and NIST CSF\u002FISO 27001 to one list); config pages = ",{"type":29,"tag":45,"props":312,"children":313},{},[314],{"type":34,"value":315},"one page per policy leaning on ~5 shared shape templates",{"type":34,"value":317},"; custom-control engine kept as a de-emphasized escape hatch.",{"type":29,"tag":139,"props":319,"children":320},{},[321,331,333,339,341,347,349,354],{"type":29,"tag":45,"props":322,"children":323},{},[324,329],{"type":29,"tag":53,"props":325,"children":327},{"className":326},[],[328],{"type":34,"value":110},{"type":34,"value":330}," (2026-08-12):",{"type":34,"value":332}," per-framework runtime-addressability analysis for all 12 (provable\u002Fattestation\u002Fout-of-scope per IA doc §7.5, ",{"type":29,"tag":53,"props":334,"children":336},{"className":335},[],[337],{"type":34,"value":338},"ok\u002Fpartial\u002Fout",{"type":34,"value":340}," fits following the OWASP LLM01–10 exemplar), a reverse view ranking policies by compliance weight (P8 Credential Protection carries 9 frameworks; P10\u002FP1\u002FP2\u002FP9 next), findings R1–R6 (framework-list drift, hipaa\u002Fgdpr missing from ",{"type":29,"tag":53,"props":342,"children":344},{"className":343},[],[345],{"type":34,"value":346},"valid_pack()",{"type":34,"value":348},", casing drift, crosswalk too coarse, only OWASP LLM has a requirements mapping, framework ",{"type":29,"tag":37,"props":350,"children":351},{},[352],{"type":34,"value":353},"kind",{"type":34,"value":355}," should shape the UI).",{"type":29,"tag":139,"props":357,"children":358},{},[359,368,370,375,377,382,384,390,392,398],{"type":29,"tag":45,"props":360,"children":361},{},[362,367],{"type":29,"tag":53,"props":363,"children":365},{"className":364},[],[366],{"type":34,"value":118},{"type":34,"value":330},{"type":34,"value":369}," the canonical roster — ",{"type":29,"tag":45,"props":371,"children":372},{},[373],{"type":34,"value":374},"17 policies (P1–P17)",{"type":34,"value":376}," in 5 categories (adds Cost & Consumption to \u002Fpolicy's 4), each with purpose, executable underlying rule (rules.rs vocabulary), config shape + fields, defaults (seeded-backed → on), severity, remediation, 12-framework matrix, provenance. Config-shape taxonomy: list editor (P5\u002FP6\u002FP10\u002FP14), threshold (P15\u002FP16\u002FP17), level select (P7\u002FP11), detector list (P8\u002FP9\u002FP12\u002FP13), toggle + exceptions (P1–P4). ",{"type":29,"tag":45,"props":378,"children":379},{},[380],{"type":34,"value":381},"Exceptions replace enforcement modes",{"type":34,"value":383}," — scoped, reasoned, expiring carve-outs instead of the Audit\u002FEnforce cascade. Capability gaps fed back to qcontrol: G1 no negated set operator (allow-lists need the egress ",{"type":29,"tag":53,"props":385,"children":387},{"className":386},[],[388],{"type":34,"value":389},"allowlisted",{"type":34,"value":391}," derived-flag pattern), G2 no injection\u002FPII detector families on ",{"type":29,"tag":53,"props":393,"children":395},{"className":394},[],[396],{"type":34,"value":397},"content",{"type":34,"value":399},", G3 hipaa\u002Fgdpr unrecognized packs. Not carried forward: targets\u002Fcampaigns, the \u002Fpolicy cascade, per-framework control toggles.",{"type":29,"tag":139,"props":401,"children":402},{},[403,412,414,419],{"type":29,"tag":45,"props":404,"children":405},{},[406,411],{"type":29,"tag":53,"props":407,"children":409},{"className":408},[],[410],{"type":34,"value":126},{"type":34,"value":330},{"type":34,"value":413}," the main mock (",{"type":29,"tag":53,"props":415,"children":417},{"className":416},[],[418],{"type":34,"value":158},{"type":34,"value":420},", registered) — 12-framework toggle grid (kind icon, live completeness bar, per-framework \"N gaps — enable\" bulk close), 4-tile posture rollup (posture % = active ÷ required across active frameworks), categorized policy table in the \u002Fpolicy toggle idiom with Enforcement\u002FAlerting columns replaced by compliance chips (active-framework requirements, red when the policy is off = gap), mono underlying-rule line per row, Configure→ links to the config pages, quiet custom-controls footer. One shared reactive model — framework toggles, policy toggles, gaps, and posture all recompute live.",{"type":29,"tag":139,"props":422,"children":423},{},[424,429,431,437,439,445,447,453,455,461,463,469,471,477,479,485,487,493,495,501],{"type":29,"tag":45,"props":425,"children":426},{},[427],{"type":34,"value":428},"Config shell + 5 shape components (2026-08-12):",{"type":34,"value":430}," ",{"type":29,"tag":53,"props":432,"children":434},{"className":433},[],[435],{"type":34,"value":436},"app\u002Fcomponents\u002Fpolicy-config\u002F",{"type":34,"value":438}," (site-local; layer extraction deferred) — ",{"type":29,"tag":53,"props":440,"children":442},{"className":441},[],[443],{"type":34,"value":444},"Shell",{"type":34,"value":446}," (back-link, name + activation toggle, meta strip with SecuritySeverity + satisfies chips, ",{"type":29,"tag":53,"props":448,"children":450},{"className":449},[],[451],{"type":34,"value":452},"\u003Cdetails>",{"type":34,"value":454}," underlying-control disclosure, body dims when inactive, remediation footer), ",{"type":29,"tag":53,"props":456,"children":458},{"className":457},[],[459],{"type":34,"value":460},"Exceptions",{"type":34,"value":462}," (shared section on every policy — scope\u002Fvalue\u002Freason\u002Fexpiry with add\u002Fremove), ",{"type":29,"tag":53,"props":464,"children":466},{"className":465},[],[467],{"type":34,"value":468},"ListEditor",{"type":34,"value":470}," (mutates the passed reactive array so page-level flows can push into it), ",{"type":29,"tag":53,"props":472,"children":474},{"className":473},[],[475],{"type":34,"value":476},"Threshold",{"type":34,"value":478}," (ceiling\u002Ffloor via ",{"type":29,"tag":53,"props":480,"children":482},{"className":481},[],[483],{"type":34,"value":484},"dir",{"type":34,"value":486},", observed-value breach state), ",{"type":29,"tag":53,"props":488,"children":490},{"className":489},[],[491],{"type":34,"value":492},"LevelSelect",{"type":34,"value":494}," (ordered floor, below-floor blast-radius preview), ",{"type":29,"tag":53,"props":496,"children":498},{"className":497},[],[499],{"type":34,"value":500},"DetectorList",{"type":34,"value":502}," (families, per-detector toggle + severity + 24h hits, enable-all).",{"type":29,"tag":139,"props":504,"children":505},{},[506,511,512,518,520,529,531,537,539,545,547,553,555,561,563,569],{"type":29,"tag":45,"props":507,"children":508},{},[509],{"type":34,"value":510},"17 config pages (2026-08-12):",{"type":34,"value":430},{"type":29,"tag":53,"props":513,"children":515},{"className":514},[],[516],{"type":34,"value":517},"policy-config-\u003Cslug>.vue",{"type":34,"value":519}," for P1–P17, all registered — thin shell+shape instantiations from the P-id specs. Deep exemplar = ",{"type":29,"tag":45,"props":521,"children":522},{},[523],{"type":29,"tag":53,"props":524,"children":526},{"className":525},[],[527],{"type":34,"value":528},"policy-config-egress-allowlist",{"type":34,"value":530}," (the prompt's named case): pending non-allowlisted destinations (83-match c64 snapshot framing) with a live approve→list flow, scoped entries (global\u002Fhost\u002Fagent per EgressDecisionModal). Toggle-shaped pages carry a live status band (shadow installs, static-key runs, root runs, never-ask runs). Verified: all 18 routes 200 on the running dev server, SSR content present, no stale classes. Two vocabulary fixes along the way: ",{"type":29,"tag":53,"props":532,"children":534},{"className":533},[],[535],{"type":34,"value":536},"error-surface",{"type":34,"value":538},"\u002F",{"type":29,"tag":53,"props":540,"children":542},{"className":541},[],[543],{"type":34,"value":544},"warning-surface",{"type":34,"value":546}," don't exist in the layer tokens (swapped for ",{"type":29,"tag":53,"props":548,"children":550},{"className":549},[],[551],{"type":34,"value":552},"error\u002F10",{"type":34,"value":554},"-style tints) and there is no ",{"type":29,"tag":53,"props":556,"children":558},{"className":557},[],[559],{"type":34,"value":560},"arrow-left",{"type":34,"value":562}," icon (back-link uses the precedent's ",{"type":29,"tag":53,"props":564,"children":566},{"className":565},[],[567],{"type":34,"value":568},"‹",{"type":34,"value":570}," character).",{"type":29,"tag":139,"props":572,"children":573},{},[574,579],{"type":29,"tag":45,"props":575,"children":576},{},[577],{"type":34,"value":578},"Catalog iteration (2026-08-12):",{"type":34,"value":580}," \"Show inactive (N)\" toggle on the framework strip header — hides non-activated framework cards, live count, defaults to showing all. Later same-day passes: description into its own column (4-col table), shrink-to-fit Policy\u002FConfig columns (width:1% + nowrap), align-middle rows, bare-dash empty state replaced with \"N mapped frameworks — none active\" text, Compliance column header renamed by Mark.",{"type":29,"tag":139,"props":582,"children":583},{},[584,594,596,602,604,609,611,617,619,625,627,633,635,641,643,649],{"type":29,"tag":45,"props":585,"children":586},{},[587,593],{"type":29,"tag":53,"props":588,"children":590},{"className":589},[],[591],{"type":34,"value":592},"\u002Fpages\u002Fcompliance-frameworks",{"type":34,"value":330},{"type":34,"value":595}," visual-semantics iteration page (",{"type":29,"tag":53,"props":597,"children":599},{"className":598},[],[600],{"type":34,"value":601},"compliance-frameworks.vue",{"type":34,"value":603},", registered) — the policy-catalog framework grid duplicated as baseline with the kind label dropped and ComplianceFrameworkIcon replaced by the new ",{"type":29,"tag":45,"props":605,"children":606},{},[607],{"type":34,"value":608},"compliance-shield",{"type":34,"value":610}," art (via ",{"type":29,"tag":53,"props":612,"children":614},{"className":613},[],[615],{"type":34,"value":616},"\u003Cimg>",{"type":34,"value":618},", own brand purples). Inactive state got its own grey-variant svg (",{"type":29,"tag":53,"props":620,"children":622},{"className":621},[],[623],{"type":34,"value":624},"compliance-shield-grey.svg",{"type":34,"value":626},", light half #d4d4d4 — a filter can't split the two halves). Iteration same-day: V2 \"surface semantics\" set added (shared state with V1) — active = white card + grape-400 border, inactive = dashed stroke-strong border on ",{"type":29,"tag":53,"props":628,"children":630},{"className":629},[],[631],{"type":34,"value":632},"surface-sunken-subtle",{"type":34,"value":634}," (one step lighter than the page's ",{"type":29,"tag":53,"props":636,"children":638},{"className":637},[],[639],{"type":34,"value":640},"surface-sunken",{"type":34,"value":642},"); gaps tag → \"Enable Required Policies\" outline button; progress bar de-semanticized (grey-400 fill via inline style — arbitrary Tailwind classes aren't generated on this page — grape-500 only at 100%); toggle micro→tiny with ",{"type":29,"tag":53,"props":644,"children":646},{"className":645},[],[647],{"type":34,"value":648},"-mr-3",{"type":34,"value":650}," flush-right fix (UxToggle keeps its label wrapper's pl-2 + root gap-1 even with an empty label slot — layer nit worth fixing upstream).",{"type":29,"tag":139,"props":652,"children":653},{},[654,659,660,666,668,674,676,682,684,690,692,698,700,705],{"type":29,"tag":45,"props":655,"children":656},{},[657],{"type":34,"value":658},"Layer fix — UxToggle empty-label gap (2026-08-12):",{"type":34,"value":430},{"type":29,"tag":53,"props":661,"children":663},{"className":662},[],[664],{"type":34,"value":665},"q-nuxt-layer\u002Fcomponents\u002Fux\u002FToggle.vue",{"type":34,"value":667}," — the label wrapper div rendered unconditionally, so a label-less toggle carried a 12px phantom on the right (wrapper ",{"type":29,"tag":53,"props":669,"children":671},{"className":670},[],[672],{"type":34,"value":673},"pl-2",{"type":34,"value":675}," + root ",{"type":29,"tag":53,"props":677,"children":679},{"className":678},[],[680],{"type":34,"value":681},"gap-1",{"type":34,"value":683}," as an empty flex item). Root cause of the V2-card alignment issue; the root's ",{"type":29,"tag":53,"props":685,"children":687},{"className":686},[],[688],{"type":34,"value":689},"inline-flex",{"type":34,"value":691}," is load-bearing (track\u002Flabel row, items-center, gap, reverse mode) and must stay. Fix: ",{"type":29,"tag":53,"props":693,"children":695},{"className":694},[],[696],{"type":34,"value":697},"v-if=\"$slots.label\"",{"type":34,"value":699}," on the wrapper. The ",{"type":29,"tag":53,"props":701,"children":703},{"className":702},[],[704],{"type":34,"value":648},{"type":34,"value":706}," page hack removed; labeled toggles verified unaffected. Rides along with ComplianceTag in the next layer release.",{"type":29,"tag":139,"props":708,"children":709},{},[710,720,722,728,730,736,738,744],{"type":29,"tag":45,"props":711,"children":712},{},[713,719],{"type":29,"tag":53,"props":714,"children":716},{"className":715},[],[717],{"type":34,"value":718},"\u002Fpages\u002Fpolicy-catalog-v2",{"type":34,"value":330},{"type":34,"value":721}," expand-row variation (",{"type":29,"tag":53,"props":723,"children":725},{"className":724},[],[726],{"type":34,"value":727},"policy-catalog-v2.vue",{"type":34,"value":729},", registered, non-destructive) — Config column dropped to a 3-column table; each policy row is a ",{"type":29,"tag":53,"props":731,"children":733},{"className":732},[],[734],{"type":34,"value":735},"UxTableListExpandRow",{"type":34,"value":737}," whose card carries the underlying rule (mono, sunken box + custom-control escape hatch), the FULL framework mapping as small ComplianceTags (inactive frameworks dimmed at 40%, error state only when an active framework is unmet), severity + P-id + maturity + remediation, and the \"Open config page →\" link. Activation toggle wrapped in ",{"type":29,"tag":53,"props":739,"children":741},{"className":740},[],[742],{"type":34,"value":743},"@click.stop",{"type":34,"value":745}," so it doesn't fight the row expand. Framework strip\u002Fposture rollup identical to v1.",{"type":29,"tag":139,"props":747,"children":748},{},[749,759,761,767,769,775],{"type":29,"tag":45,"props":750,"children":751},{},[752,758],{"type":29,"tag":53,"props":753,"children":755},{"className":754},[],[756],{"type":34,"value":757},"\u002Fpages\u002Fpolicy-catalog-v3",{"type":34,"value":330},{"type":34,"value":760}," inline-config variation (",{"type":29,"tag":53,"props":762,"children":764},{"className":763},[],[765],{"type":34,"value":766},"policy-catalog-v3.vue",{"type":34,"value":768},", registered) — direct duplicate of v2 with the expand row hosting the policy's ACTUAL config controls: shape components (",{"type":29,"tag":53,"props":770,"children":772},{"className":771},[],[773],{"type":34,"value":774},"\u003Ccomponent :is>",{"type":34,"value":776}," over a shape→component map — explicit imports, since resolveComponent can't see auto-imports) + the shared Exceptions section, fed by the same config snapshots the policy-config-* pages carry (CONFIGS\u002FEXCEPTIONS keyed by P-id). Identity strip (rule · severity · P-id · maturity · escape hatch) above the config; config dims at 50% when the policy is off (the config-shell idiom). Poses the open question: do the standalone config pages survive, or is the catalog the config surface?",{"type":29,"tag":139,"props":778,"children":779},{},[780,785,787,800,802,807],{"type":29,"tag":45,"props":781,"children":782},{},[783],{"type":34,"value":784},"Gap-cluster + pill polish (2026-08-12):",{"type":34,"value":786}," exclaim circle sized up to h-5 with an italic muted \"Required\" label after it (gap rows only); Beta pill iterated warning-amber → grey → light blue → ",{"type":29,"tag":45,"props":788,"children":789},{},[790,792,798],{"type":34,"value":791},"grey body with a ",{"type":29,"tag":53,"props":793,"children":795},{"className":794},[],[796],{"type":34,"value":797},"#318bc4",{"type":34,"value":799},"\u002F60% blue border",{"type":34,"value":801}," (Roadmap = full grey) — blue applied via style binding since one-off arbitrary color classes don't generate on pages; ",{"type":29,"tag":53,"props":803,"children":805},{"className":804},[],[806],{"type":34,"value":797},{"type":34,"value":808}," is a token candidate if a layer blue ramp ever lands.",{"type":29,"tag":139,"props":810,"children":811},{},[812,817,819,825,827,833,835,841,843,849,851,857],{"type":29,"tag":45,"props":813,"children":814},{},[815],{"type":34,"value":816},"ComplianceTag gap variant (2026-08-12):",{"type":34,"value":818}," third state on the tag — ",{"type":29,"tag":53,"props":820,"children":822},{"className":821},[],[823],{"type":34,"value":824},"gap",{"type":34,"value":826},": muted grey pill + grey shield for required-but-off, with ONE page-side exclaim circle (UxIcon ",{"type":29,"tag":53,"props":828,"children":830},{"className":829},[],[831],{"type":34,"value":832},"exclaim",{"type":34,"value":834}," in a red-tinted rounded-full span) placed inline after the tag cluster rather than marking every tag. All three catalog pages swapped from ",{"type":29,"tag":53,"props":836,"children":838},{"className":837},[],[839],{"type":34,"value":840},":error",{"type":34,"value":842}," to ",{"type":29,"tag":53,"props":844,"children":846},{"className":845},[],[847],{"type":34,"value":848},":gap",{"type":34,"value":850}," + cluster exclaim; the red ",{"type":29,"tag":53,"props":852,"children":854},{"className":853},[],[855],{"type":34,"value":856},"error",{"type":34,"value":858}," variant remains for loud failure contexts. Demo + registry docs updated.",{"type":29,"tag":139,"props":860,"children":861},{},[862,867,869,875,877,883,884,890,892,897,899,905,907,913,915,921,923,929,931,937,938,944],{"type":29,"tag":45,"props":863,"children":864},{},[865],{"type":34,"value":866},"ComplianceToggleCard extraction + component docs (2026-08-12):",{"type":34,"value":868}," the settled framework card extracted to the layer as ",{"type":29,"tag":53,"props":870,"children":872},{"className":871},[],[873],{"type":34,"value":874},"compliance\u002FToggleCard.vue",{"type":34,"value":876}," (props name\u002Factive\u002Fpercent\u002Fsatisfied\u002Frequired\u002Fgaps\u002FgapTitle, emits toggle + enable-gaps; shield art from layer assets, grey bar fill inline to dodge consumer-scan issues); both grids (",{"type":29,"tag":53,"props":878,"children":880},{"className":879},[],[881],{"type":34,"value":882},"policy-catalog",{"type":34,"value":200},{"type":29,"tag":53,"props":885,"children":887},{"className":886},[],[888],{"type":34,"value":889},"compliance-frameworks",{"type":34,"value":891}," V2) now consume it — V1 stays inline as the baseline artifact. ComplianceTag gained ",{"type":29,"tag":53,"props":893,"children":895},{"className":894},[],[896],{"type":34,"value":856},{"type":34,"value":898}," (red two-tone shield ",{"type":29,"tag":53,"props":900,"children":902},{"className":901},[],[903],{"type":34,"value":904},"compliance-shield-error.svg",{"type":34,"value":906}," + error border\u002Ftext) and ",{"type":29,"tag":53,"props":908,"children":910},{"className":909},[],[911],{"type":34,"value":912},"size",{"type":34,"value":914}," ('small' | 'medium', UxToggle convention); small got a py bump; catalog table gap chips → ",{"type":29,"tag":53,"props":916,"children":918},{"className":917},[],[919],{"type":34,"value":920},"\u003CComplianceTag size=\"small\" error>",{"type":34,"value":922},". Both components documented: new ",{"type":29,"tag":53,"props":924,"children":926},{"className":925},[],[927],{"type":34,"value":928},"compliance",{"type":34,"value":930}," group in component-registry (also fixes ComplianceFrameworkIcon's dangling group id), registry entries with coverage, interactive demos (",{"type":29,"tag":53,"props":932,"children":934},{"className":933},[],[935],{"type":34,"value":936},"_demos\u002FComplianceTag.vue",{"type":34,"value":200},{"type":29,"tag":53,"props":939,"children":941},{"className":940},[],[942],{"type":34,"value":943},"_demos\u002FComplianceToggleCard.vue",{"type":34,"value":945},"), and a Compliance section on the \u002Fcomponents visual index.",{"type":29,"tag":139,"props":947,"children":948},{},[949,954,955,961,963,969,971,977,979,985,987,992,994],{"type":29,"tag":45,"props":950,"children":951},{},[952],{"type":34,"value":953},"Layer component — ComplianceTag (2026-08-12):",{"type":34,"value":430},{"type":29,"tag":53,"props":956,"children":958},{"className":957},[],[959],{"type":34,"value":960},"q-nuxt-layer\u002Fcomponents\u002Fcompliance\u002FTag.vue",{"type":34,"value":962}," — small reusable compliance tag: shield mark + framework name in a grape-50 pill (grape-400 border, grape-600 bold label), optional ",{"type":29,"tag":53,"props":964,"children":966},{"className":965},[],[967],{"type":34,"value":968},"removable",{"type":34,"value":970}," ✕ emitting ",{"type":29,"tag":53,"props":972,"children":974},{"className":973},[],[975],{"type":34,"value":976},"@remove",{"type":34,"value":978},", label via default slot. Shield asset resolved from the layer's own assets at build (",{"type":29,"tag":53,"props":980,"children":982},{"className":981},[],[983],{"type":34,"value":984},"?url",{"type":34,"value":986}," import, AgentPawn pattern). Demo strip added to ",{"type":29,"tag":53,"props":988,"children":990},{"className":989},[],[991],{"type":34,"value":592},{"type":34,"value":993}," (static, removable, and live-wired tags that deactivate frameworks on remove). Confirmed the design dev server runs NUXT_LOCAL_LAYER (picked the component up without a release). ",{"type":29,"tag":45,"props":995,"children":996},{},[997],{"type":34,"value":998},"Not yet in a layer release — run \u002Frelease-layer (→ v0.9.8) before tarball consumers can use it; component not yet added to the design-site component docs.",{"type":29,"tag":139,"props":1000,"children":1001},{},[1002,1007,1008,1014,1016,1022,1024,1030,1032,1037,1039,1044,1045,1051,1053,1058,1060,1066,1067,1073,1075,1081,1083,1089,1091,1097],{"type":29,"tag":45,"props":1003,"children":1004},{},[1005],{"type":34,"value":1006},"qcontrol application (2026-08-12):",{"type":34,"value":430},{"type":29,"tag":53,"props":1009,"children":1011},{"className":1010},[],[1012],{"type":34,"value":1013},"qcontrol-application.md",{"type":34,"value":1015}," written (reuse model, hybrid persistence map, backend backlog B1–B8, supersession map). The six policy-config components extracted to the layer as controlled components (emit contracts: add\u002Fremove\u002Fchange\u002Ftoggle\u002Ftoggle-all\u002Ffloor; arbitrary classes → inline styles; Shell gained the white bg-surface content box + backTo\u002FbackLabel props + ComplianceTag satisfies chips) — design locals deleted, all 17 config pages + v3 rewired to the new contracts (v3 imports via ",{"type":29,"tag":53,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":34,"value":1021},"#components",{"type":34,"value":1023},"), registry ",{"type":29,"tag":53,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":34,"value":1029},"policy-config",{"type":34,"value":1031}," group + 6 entries + 6 demos added. ",{"type":29,"tag":45,"props":1033,"children":1034},{},[1035],{"type":34,"value":1036},"Layer v0.9.8 released",{"type":34,"value":1038}," (commit 4708cf2, tag-driven CI publish, all 5 consumer lockfiles re-resolved — qcontrol's git#main ref included). ",{"type":29,"tag":45,"props":1040,"children":1041},{},[1042],{"type":34,"value":1043},"qdash c13 executed:",{"type":34,"value":430},{"type":29,"tag":53,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":34,"value":1050},"\u002Fcontrols",{"type":34,"value":1052}," replaced by the policy catalog (framework strip + 17-policy expand-row table + custom-controls escape section), ",{"type":29,"tag":53,"props":1054,"children":1056},{"className":1055},[],[1057],{"type":34,"value":58},{"type":34,"value":1059}," deleted, one ",{"type":29,"tag":53,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":34,"value":1065},"controls\u002Fdetail.vue",{"type":34,"value":192},{"type":29,"tag":53,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":34,"value":1072},"?policyId=",{"type":34,"value":1074},") serving all policies, hybrid persistence (egress via ",{"type":29,"tag":53,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":34,"value":1080},"\u002Fapi\u002Fegress-decisions",{"type":34,"value":1082},", P15\u002FP17 thresholds via real control rule rewrites with dry-run, rest via ",{"type":29,"tag":53,"props":1084,"children":1086},{"className":1085},[],[1087],{"type":34,"value":1088},"usePolicyState",{"type":34,"value":1090}," localStorage). Verified: 11\u002F11 headless DOM checks, live API round-trips, 137 vitest, dist regenerated. See ",{"type":29,"tag":53,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":34,"value":1096},"qcontrol crates\u002Fqdash\u002Fui\u002Fcycles\u002Fc13.control-policies\u002FCYCLE.md",{"type":34,"value":1098},".",{"key":1100,"title":1101,"empty":16,"ast":1102},"outcome","Outcome",{"type":26,"children":1103},[1104],{"type":29,"tag":30,"props":1105,"children":1106},{},[1107,1109,1114,1116,1121,1123,1128,1130,1136],{"type":34,"value":1108},"The full arc shipped in one cycle: research (12-framework analysis + P1–P17 policy definitions with stable IDs) → design-site mocks (policy-catalog v1\u002Fv2\u002Fv3, 17 config pages, compliance-frameworks iteration surface) → layer components (ComplianceTag, ComplianceToggleCard, the policy-config six, UxToggle fix — released as v0.9.8) → qcontrol application (qdash c13: ",{"type":29,"tag":53,"props":1110,"children":1112},{"className":1111},[],[1113],{"type":34,"value":1050},{"type":34,"value":1115}," IS the policy catalog, ",{"type":29,"tag":53,"props":1117,"children":1119},{"className":1118},[],[1120],{"type":34,"value":58},{"type":34,"value":1122}," retired). Backend follow-ons specified in ",{"type":29,"tag":53,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":34,"value":1013},{"type":34,"value":1129}," (B1–B8). Design-site mocks remain as the iteration surface; qdash work sits uncommitted on ",{"type":29,"tag":53,"props":1131,"children":1133},{"className":1132},[],[1134],{"type":34,"value":1135},"feat\u002Fcontrol-center",{"type":34,"value":1137}," for review.",[],[1140,118,1013,110],"initial-prompt.md",[1142,1144,1146,1148],{"file":1140,"title":1143},"Control-Center-V2",{"file":118,"title":1145},"— Policy Definitions",{"file":1013,"title":1147},"— qcontrol Application Plan",{"file":110,"title":1149},"— Compliance Framework Analysis",[1151,1159,1165,1171,1177,1182,1188,1194,1200,1206,1212,1218,1224,1230,1236,1242,1248,1254,1261,1266,1270,1274,1277,1281,1284,1287,1290],{"src":1152,"kind":1153,"order":1154,"caption":1155,"capturedAt":1156,"subject":1157,"route":1158},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-egress-allowlist.png","hero",0,"Policy Config — Egress Allow-List — c65 P10 — list-editor shape, the deep exemplar: pending non-allowlisted destinations with live approve-into-list flow, scope","2026-08-18T20:41:09.112Z","page\u002Fpolicy-config-egress-allowlist","\u002Fpages\u002Fpolicy-config-egress-allowlist",{"src":1160,"kind":1153,"order":1161,"caption":1162,"capturedAt":1156,"subject":1163,"route":1164},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-agent-registration.png",1,"Policy Config — Agent Registration — c65 P1 — toggle + exceptions shape, shadow-AI status band, scoped carve-outs with reason + expiry","page\u002Fpolicy-config-agent-registration","\u002Fpages\u002Fpolicy-config-agent-registration",{"src":1166,"kind":1153,"order":1167,"caption":1168,"capturedAt":1156,"subject":1169,"route":1170},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-org-backed-identity.png",2,"Policy Config — Org-Backed Identity — c65 P2 — toggle + exceptions shape, static-key run status, service-account exception","page\u002Fpolicy-config-org-backed-identity","\u002Fpages\u002Fpolicy-config-org-backed-identity",{"src":1172,"kind":1153,"order":1173,"caption":1174,"capturedAt":1156,"subject":1175,"route":1176},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-no-root-execution.png",3,"Policy Config — No Root Execution — c65 P3 — toggle + exceptions shape, live privileged-run status","page\u002Fpolicy-config-no-root-execution","\u002Fpages\u002Fpolicy-config-no-root-execution",{"src":1178,"kind":1153,"order":19,"caption":1179,"capturedAt":1156,"subject":1180,"route":1181},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-require-tool-approval.png","Policy Config — Require Tool Approval — c65 P4 — toggle + exceptions shape, never-ask run status, batch-pipeline exception","page\u002Fpolicy-config-require-tool-approval","\u002Fpages\u002Fpolicy-config-require-tool-approval",{"src":1183,"kind":1153,"order":1184,"caption":1185,"capturedAt":1156,"subject":1186,"route":1187},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-tool-allowlist.png",5,"Policy Config — Tool Allow-List — c65 P5 — list-editor shape, approved tools with glob patterns and global\u002Fagent scope","page\u002Fpolicy-config-tool-allowlist","\u002Fpages\u002Fpolicy-config-tool-allowlist",{"src":1189,"kind":1153,"order":1190,"caption":1191,"capturedAt":1156,"subject":1192,"route":1193},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-mcp-allowlist.png",6,"Policy Config — MCP Server Allow-List — c65 P6 — list-editor shape, approved MCP servers (the tool-supply-chain control)","page\u002Fpolicy-config-mcp-allowlist","\u002Fpages\u002Fpolicy-config-mcp-allowlist",{"src":1195,"kind":1153,"order":1196,"caption":1197,"capturedAt":1156,"subject":1198,"route":1199},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-sandbox-required.png",7,"Policy Config — Sandbox Required — c65 P7 — level-select shape, sandbox-mode floor with live below-floor blast radius","page\u002Fpolicy-config-sandbox-required","\u002Fpages\u002Fpolicy-config-sandbox-required",{"src":1201,"kind":1153,"order":1202,"caption":1203,"capturedAt":1156,"subject":1204,"route":1205},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-credential-protection.png",8,"Policy Config — Credential Protection — c65 P8 — detector-list shape, sensitive-path categories with severity + 24h opens","page\u002Fpolicy-config-credential-protection","\u002Fpages\u002Fpolicy-config-credential-protection",{"src":1207,"kind":1153,"order":1208,"caption":1209,"capturedAt":1156,"subject":1210,"route":1211},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-data-redaction.png",9,"Policy Config — Data Redaction — c65 P9 — detector-list shape, Secrets + PII\u002FPHI families (the HIPAA\u002FGDPR carrier)","page\u002Fpolicy-config-data-redaction","\u002Fpages\u002Fpolicy-config-data-redaction",{"src":1213,"kind":1153,"order":1214,"caption":1215,"capturedAt":1156,"subject":1216,"route":1217},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-tls-floor.png",10,"Policy Config — TLS Floor — c65 P11 — level-select shape, TLS version ladder with SP 800-52 minimum and weak-TLS counts","page\u002Fpolicy-config-tls-floor","\u002Fpages\u002Fpolicy-config-tls-floor",{"src":1219,"kind":1153,"order":1220,"caption":1221,"capturedAt":1156,"subject":1222,"route":1223},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-prompt-inspection.png",11,"Policy Config — Prompt Inspection — c65 P12 — detector-list shape, injection heuristics (detect & contain, honest-partial)","page\u002Fpolicy-config-prompt-inspection","\u002Fpages\u002Fpolicy-config-prompt-inspection",{"src":1225,"kind":1153,"order":1226,"caption":1227,"capturedAt":1156,"subject":1228,"route":1229},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-output-validation.png",12,"Policy Config — Output Validation — c65 P13 — detector-list shape, output detectors before downstream tools act","page\u002Fpolicy-config-output-validation","\u002Fpages\u002Fpolicy-config-output-validation",{"src":1231,"kind":1153,"order":1232,"caption":1233,"capturedAt":1156,"subject":1234,"route":1235},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-provenance-pinning.png",13,"Policy Config — Provenance Pinning — c65 P14 — list-editor shape, pinned model\u002Ftool sources (pin-at-load, honest-partial)","page\u002Fpolicy-config-provenance-pinning","\u002Fpages\u002Fpolicy-config-provenance-pinning",{"src":1237,"kind":1153,"order":1238,"caption":1239,"capturedAt":1156,"subject":1240,"route":1241},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-spend-ceiling.png",14,"Policy Config — Spend Ceiling — c65 P15 — threshold shape, fleet\u002Fper-run ceilings with observed values and breach state","page\u002Fpolicy-config-spend-ceiling","\u002Fpages\u002Fpolicy-config-spend-ceiling",{"src":1243,"kind":1153,"order":1244,"caption":1245,"capturedAt":1156,"subject":1246,"route":1247},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-quota-compliance.png",15,"Policy Config — Quota Compliance — c65 P16 — threshold shape, quota warning levels; overage rejections always flag","page\u002Fpolicy-config-quota-compliance","\u002Fpages\u002Fpolicy-config-quota-compliance",{"src":1249,"kind":1153,"order":1250,"caption":1251,"capturedAt":1156,"subject":1252,"route":1253},"\u002Fcycles\u002Fdesign\u002Fc65-policy-config-posture-floor.png",16,"Policy Config — Posture Floor — c65 P17 — threshold shape with floor direction, minimum posture score vs fleet reality","page\u002Fpolicy-config-posture-floor","\u002Fpages\u002Fpolicy-config-posture-floor",{"src":1255,"kind":1153,"order":1256,"caption":1257,"capturedAt":1258,"subject":1259,"route":1260},"\u002Fcycles\u002Fdesign\u002Fc65-control-verification.png",34,"POL-701 — Independent verification that agent connections are governed","2026-08-18T20:38:41.199Z","page\u002Fcontrol-verification","\u002Fpages\u002Fcontrol-verification",{"src":1262,"kind":1153,"order":1263,"caption":1264,"capturedAt":1258,"subject":1265,"route":718},"\u002Fcycles\u002Fdesign\u002Fc65-policy-catalog-v2.png",42,"c65 iteration — Config column dropped; policy rows expand (UxTableListExpandRow) to the underlying rule, full framework mapping with inactive dimmed, severity\u002Fremediation, and the config-page link","page\u002Fpolicy-catalog",{"src":1267,"kind":1153,"order":1268,"caption":1269,"capturedAt":1258,"subject":1265,"route":757},"\u002Fcycles\u002Fdesign\u002Fc65-policy-catalog-v3.png",43,"c65 iteration — direct duplicate of v2 with the config controls inside the expand row: shape components (list editor \u002F threshold \u002F level select \u002F detector list) + Exceptions inline, config dims when the policy is off",{"src":17,"kind":1153,"order":1271,"caption":1272,"capturedAt":1258,"subject":1273,"route":592},44,"c65 iteration surface — the policy-catalog framework grid as baseline: kind label dropped, compliance-shield art in place of the kind icon, same live completeness\u002Fgap mechanics","page\u002Fcompliance-frameworks",{"src":1275,"kind":1153,"order":1276},"\u002Farchive\u002F2026-q3\u002Fc65-policy-catalog.png",4999,{"src":1278,"kind":1279,"order":1280},"\u002Farchive\u002F2026-q3\u002Fc65-policy-catalog-full.png","full",9000,{"src":1282,"kind":1279,"order":1283,"capturedAt":1258,"subject":1259,"route":1260},"\u002Fcycles\u002Fdesign\u002Fc65-control-verification-full.png",9034,{"src":1285,"kind":1279,"order":1286,"capturedAt":1258,"subject":1265,"route":718},"\u002Fcycles\u002Fdesign\u002Fc65-policy-catalog-v2-full.png",9042,{"src":1288,"kind":1279,"order":1289,"capturedAt":1258,"subject":1265,"route":757},"\u002Fcycles\u002Fdesign\u002Fc65-policy-catalog-v3-full.png",9043,{"src":1291,"kind":1279,"order":1292,"capturedAt":1258,"subject":1273,"route":592},"\u002Fcycles\u002Fdesign\u002Fc65-compliance-frameworks-full.png",9044,[1294],{"path":1295,"title":1296,"image":1275,"gallery":1297},"archive\u002F2026-q3\u002F2026-08-12-c65-policy-catalog","Policy Catalog",[1298,1300],{"src":1275,"alt":1299},"The policy catalog mock — compliance-driven pre-defined policies with P-ids.",{"src":1278,"alt":1301},"Policy Catalog — full page",[1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323],{"route":592,"href":592},{"route":1260,"href":1260},{"route":718,"href":718},{"route":757,"href":757},{"route":1164,"href":1164},{"route":1205,"href":1205},{"route":1211,"href":1211},{"route":1158,"href":1158},{"route":1193,"href":1193},{"route":1176,"href":1176},{"route":1170,"href":1170},{"route":1229,"href":1229},{"route":1253,"href":1253},{"route":1223,"href":1223},{"route":1235,"href":1235},{"route":1247,"href":1247},{"route":1181,"href":1181},{"route":1199,"href":1199},{"route":1241,"href":1241},{"route":1217,"href":1217},{"route":1187,"href":1187},1794599347228]