[{"data":1,"prerenderedAt":4964},["ShallowReactive",2],{"$f55Eito9hqEa3HzF5Wc7UIZlr7-Gxqsf5h6s4EzTXHAM":3},{"newThing":4,"project":5,"cycle":9,"sections":26,"threads":4436,"otherDocs":4453,"documents":4455,"images":4483,"archiveItems":4929,"links":4930},"S1 Finding detail on the fixture world: evidence above the line, the organ below, Respond with reach; Ignore and Create exception live",{"id":6,"label":7,"liveBase":8},"design","Design",null,{"id":10,"num":11,"dir":12,"name":13,"title":14,"focus":15,"status":16,"statusNote":17,"created":18,"completed":8,"mode":19,"report":8,"recordless":20,"thumbnail":21,"imageCount":22,"artifactCount":23,"lastActivity":24,"hasPickup":25,"hasInitialPrompt":25},"c114",114,"c114.governance-phase2","governance-phase2","Governance Phase II","Build the Phase II governance dashboard for qdash around the object model the `..\u002Fintents` repo describes, so that Findings, Policies, Scope, Groups, Exceptions, Enforcement and Frameworks appear as one coherent system rather than fourteen features","active","the lab carries c118 and c121; product-session decisions recorded in the Outcome 2026-10-26; `object-model.md` still describes 2026-10-09","2026-10-09","archaeology (the model is already in the intents, the c64\u002Fc65\u002Fc79 mocks and the live qdash pages; surface it) → assemblage (compose those pieces into one dashboard)",false,"\u002Fcycles\u002Fdesign\u002Fc114-finding-detail-minimal.png",76,14,"2026-11-05",true,[27,91,175,329,3816,4199],{"key":28,"title":29,"empty":20,"ast":30},"why","Why",{"type":31,"children":32},"root",[33,50,86],{"type":34,"tag":35,"props":36,"children":37},"element","p",{},[38,41,48],{"type":39,"value":40},"text","Mark Peterson's ",{"type":34,"tag":42,"props":43,"children":45},"code",{"className":44},[],[46],{"type":39,"value":47},"qpoint-io\u002Fintents",{"type":39,"value":49}," repo (fourteen Observe\u002FEnforce intents, two PRs merged 2026-10-09) is the Plan-stage artifact of the AI-native SDLC playbook: the \"what and why\" of the governance surface, upstream of spec and implementation. Read together they are not fourteen features. They are one object model with one invariant repeated in every file: historical evidence is immutable, current state is mutable, and every state change records who, when and which policy change caused it.",{"type":34,"tag":35,"props":51,"children":52},{},[53,55,61,63,69,70,76,78,84],{"type":39,"value":54},"qdash today has ",{"type":34,"tag":42,"props":56,"children":58},{"className":57},[],[59],{"type":39,"value":60},"\u002Ffindings",{"type":39,"value":62},", ",{"type":34,"tag":42,"props":64,"children":66},{"className":65},[],[67],{"type":39,"value":68},"\u002Fpolicies",{"type":39,"value":62},{"type":34,"tag":42,"props":71,"children":73},{"className":72},[],[74],{"type":39,"value":75},"\u002Fcompliance",{"type":39,"value":77}," and ",{"type":34,"tag":42,"props":79,"children":81},{"className":80},[],[82],{"type":39,"value":83},"\u002Fframework",{"type":39,"value":85}," built on an older vocabulary (Control, pack, workflow status) that predates the intents. The design site has three earlier passes at the same territory (c64 control center, c65 policy catalog and config shapes, c79 finding lifecycle) that were never reconciled. Phase II is the moment to reconcile them: form the model first, then let every page be a view onto it.",{"type":34,"tag":35,"props":87,"children":88},{},[89],{"type":39,"value":90},"This is the methodology applied directly. Design is assemblage; the first formative step is identifying the pieces. The intents name the pieces. The work is composition.",{"key":92,"title":93,"empty":20,"ast":94},"objective","Objective",{"type":31,"children":95},[96,170],{"type":34,"tag":97,"props":98,"children":99},"ol",{},[100,112,122,132,142,152],{"type":34,"tag":101,"props":102,"children":103},"li",{},[104,110],{"type":34,"tag":105,"props":106,"children":107},"strong",{},[108],{"type":39,"value":109},"One object model",{"type":39,"value":111},", written down, that the intents, qdash and the design site all agree on: objects, relationships, lifecycle states, what is stored versus derived, and the vocabulary crosswalk from the intents' terms to qdash's.",{"type":34,"tag":101,"props":113,"children":114},{},[115,120],{"type":34,"tag":105,"props":116,"children":117},{},[118],{"type":39,"value":119},"One fixture world",{"type":39,"value":121}," (the Vanta MCP story every intent uses, plus the OWASP LLM02 and Finance\u002FEngineering group stories) that every mock renders, so the model can be felt before it is built.",{"type":34,"tag":101,"props":123,"children":124},{},[125,130],{"type":34,"tag":105,"props":126,"children":127},{},[128],{"type":39,"value":129},"A surface map",{"type":39,"value":131},": every object has one home, every relationship one traversal, every state change renders through one lifecycle-history organ. Navigation under Govern settled.",{"type":34,"tag":101,"props":133,"children":134},{},[135,140],{"type":34,"tag":105,"props":136,"children":137},{},[138],{"type":39,"value":139},"Mocks on the design site",{"type":39,"value":141}," for the eight surfaces the intents imply, each with empty\u002Fminimal\u002Ftypical\u002Foverflow states and captures, reviewed one at a time.",{"type":34,"tag":101,"props":143,"children":144},{},[145,150],{"type":34,"tag":105,"props":146,"children":147},{},[148],{"type":39,"value":149},"The three gating decisions",{"type":39,"value":151}," (scope precedence, re-evaluation triggers, proof of enforcement) ruled and written back to the intents repo, with the missing Exceptions intent drafted.",{"type":34,"tag":101,"props":153,"children":154},{},[155,160,162,168],{"type":34,"tag":105,"props":156,"children":157},{},[158],{"type":39,"value":159},"Port to qdash",{"type":39,"value":161}," ",{"type":34,"tag":42,"props":163,"children":165},{"className":164},[],[166],{"type":39,"value":167},"feat\u002Fnew-pages",{"type":39,"value":169}," after Mark's picks, with layer extractions, contract types and a backend gap list for engineering.",{"type":34,"tag":35,"props":171,"children":172},{},[173],{"type":39,"value":174},"Done = a practitioner can walk the Vanta story end to end on qdash (session → finding → policy → scope change → re-evaluation → resolved with cause) and every screen on the way uses the same words for the same things.",{"key":176,"title":177,"empty":20,"ast":178},"scope","Scope",{"type":31,"children":179},[180],{"type":34,"tag":181,"props":182,"children":183},"ul",{},[184,195,238,243,263,318],{"type":34,"tag":101,"props":185,"children":186},{},[187,193],{"type":34,"tag":42,"props":188,"children":190},{"className":189},[],[191],{"type":39,"value":192},"..\u002Fintents",{"type":39,"value":194},": read-only source; feedback goes back as a PR or issue (open questions answered, Exceptions intent).",{"type":34,"tag":101,"props":196,"children":197},{},[198,200,206,207,213,214,220,222,228,230,236],{"type":39,"value":199},"Design: this record, ",{"type":34,"tag":42,"props":201,"children":203},{"className":202},[],[204],{"type":39,"value":205},"plan.md",{"type":39,"value":62},{"type":34,"tag":42,"props":208,"children":210},{"className":209},[],[211],{"type":39,"value":212},"object-model.md",{"type":39,"value":62},{"type":34,"tag":42,"props":215,"children":217},{"className":216},[],[218],{"type":39,"value":219},"app\u002Fdata\u002Fgovernance-fixture.ts",{"type":39,"value":221},", a ",{"type":34,"tag":42,"props":223,"children":225},{"className":224},[],[226],{"type":39,"value":227},"_meta",{"type":39,"value":229}," model page, mocks under ",{"type":34,"tag":42,"props":231,"children":233},{"className":232},[],[234],{"type":39,"value":235},"app\u002Fpages\u002Fpages\u002F",{"type":39,"value":237}," (registry phase to be named), captures.",{"type":34,"tag":101,"props":239,"children":240},{},[241],{"type":39,"value":242},"Layer: extractions as they graduate (lifecycle history, recommended-vs-configured severity, coverage state, scope path, change preview).",{"type":34,"tag":101,"props":244,"children":245},{},[246,248,253,255,261],{"type":39,"value":247},"qdash ",{"type":34,"tag":42,"props":249,"children":251},{"className":250},[],[252],{"type":39,"value":167},{"type":39,"value":254},": port after review; ",{"type":34,"tag":42,"props":256,"children":258},{"className":257},[],[259],{"type":39,"value":260},"types\u002Fapi\u002F",{"type":39,"value":262}," grows Policy, Scope, PolicyGroup, Exception, Resolution, FindingEvent.",{"type":34,"tag":101,"props":264,"children":265},{},[266,268,274,275,281,282,288,289,295,296,302,303,309,310,316],{"type":39,"value":267},"market-analyst: ",{"type":34,"tag":42,"props":269,"children":271},{"className":270},[],[272],{"type":39,"value":273},"problem:findings-resolution-workflow",{"type":39,"value":62},{"type":34,"tag":42,"props":276,"children":278},{"className":277},[],[279],{"type":39,"value":280},"problem:safe-to-enforce",{"type":39,"value":62},{"type":34,"tag":42,"props":283,"children":285},{"className":284},[],[286],{"type":39,"value":287},"problem:unreviewed-mcp-surface",{"type":39,"value":62},{"type":34,"tag":42,"props":290,"children":292},{"className":291},[],[293],{"type":39,"value":294},"problem:personal-vs-enterprise-accounts",{"type":39,"value":62},{"type":34,"tag":42,"props":297,"children":299},{"className":298},[],[300],{"type":39,"value":301},"problem:unsanctioned-external-services",{"type":39,"value":62},{"type":34,"tag":42,"props":304,"children":306},{"className":305},[],[307],{"type":39,"value":308},"problem:prove-posture-over-time",{"type":39,"value":62},{"type":34,"tag":42,"props":311,"children":313},{"className":312},[],[314],{"type":39,"value":315},"problem:fleet-scale-compliance-state",{"type":39,"value":317},".",{"type":34,"tag":101,"props":319,"children":320},{},[321,323],{"type":39,"value":322},"Plan: ",{"type":34,"tag":324,"props":325,"children":327},"a",{"href":326},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fplan",[328],{"type":39,"value":205},{"key":330,"title":331,"empty":20,"ast":332},"key-changes","Key Changes",{"type":31,"children":333},[334,380,390,406,518,567,600,656,763,819,921,1008,1041,1066,1083,1108,1318,1335,1526,1536,1729,1752,3222,3255,3557,3590,3783],{"type":34,"tag":35,"props":335,"children":336},{},[337,342,344,350,352,358,359,365,366,372,374,378],{"type":34,"tag":105,"props":338,"children":339},{},[340],{"type":39,"value":341},"kick-off (2026-10-09):",{"type":39,"value":343}," the playbook thread became this cycle (",{"type":34,"tag":324,"props":345,"children":347},{"href":346},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Finitial-prompt",[348],{"type":39,"value":349},"initial-prompt.md",{"type":39,"value":351},"). Read all fourteen intents plus README; grounded against qdash's current contract types (",{"type":34,"tag":42,"props":353,"children":355},{"className":354},[],[356],{"type":39,"value":357},"Finding",{"type":39,"value":62},{"type":34,"tag":42,"props":360,"children":362},{"className":361},[],[363],{"type":39,"value":364},"FindingWorkflow",{"type":39,"value":62},{"type":34,"tag":42,"props":367,"children":369},{"className":368},[],[370],{"type":39,"value":371},"Control",{"type":39,"value":373},"), its four governance pages and seven API routes, the design site's c64\u002Fc65\u002Fc79 mocks, the layer's security\u002Fcompliance\u002Fdata parts, and seven matching problems in the registry. Plan written with six phases (",{"type":34,"tag":324,"props":375,"children":376},{"href":326},[377],{"type":39,"value":205},{"type":39,"value":379},").",{"type":34,"tag":35,"props":381,"children":382},{},[383,388],{"type":34,"tag":105,"props":384,"children":385},{},[386],{"type":39,"value":387},"rulings (2026-10-09):",{"type":39,"value":389}," D1–D6 ruled in conversation (CSS specificity, forward-only re-evaluation that can reopen, two enforcement states, the intents' words, all eight mocks, design leads).",{"type":34,"tag":35,"props":391,"children":392},{},[393,398,399,404],{"type":34,"tag":105,"props":394,"children":395},{},[396],{"type":39,"value":397},"Phase 0 (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":324,"props":400,"children":402},{"href":401},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fobject-model",[403],{"type":39,"value":212},{"type":39,"value":405}," written: the invariant, the chain, eleven objects with stored\u002Fderived split, relationship table, five lifecycles, what each ruling does to the model, the fixture world (three stories from the intents' own examples), the crosswalk (intents ↔ qdash contract ↔ design-site mocks ↔ layer), seven gaps for the intents repo, and the Source note mapping intents to seven registry problems. Awaiting Mark's read and Mark Peterson's \"that is what I meant.\"",{"type":34,"tag":35,"props":407,"children":408},{},[409,414,416,421,423,429,431,437,439,445,447,453,455,461,463,469,471,477,479,485,487,493,495,501,503,508,510,516],{"type":34,"tag":105,"props":410,"children":411},{},[412],{"type":39,"value":413},"Phase 1 (2026-10-09):",{"type":39,"value":415}," the model on a page. ",{"type":34,"tag":42,"props":417,"children":419},{"className":418},[],[420],{"type":39,"value":219},{"type":39,"value":422}," (the three stories as one world; pure functions ",{"type":34,"tag":42,"props":424,"children":426},{"className":425},[],[427],{"type":39,"value":428},"applicability()",{"type":39,"value":430}," for D1, ",{"type":34,"tag":42,"props":432,"children":434},{"className":433},[],[435],{"type":39,"value":436},"foldFinding()",{"type":39,"value":438}," over append-only FindingEvents, ",{"type":34,"tag":42,"props":440,"children":442},{"className":441},[],[443],{"type":39,"value":444},"applyChange()",{"type":39,"value":446}," + re-evaluation for D2\u002FD3, ",{"type":34,"tag":42,"props":448,"children":450},{"className":449},[],[451],{"type":39,"value":452},"coverage()",{"type":39,"value":454}," for frameworks; rulings are inputs, ",{"type":34,"tag":42,"props":456,"children":458},{"className":457},[],[459],{"type":39,"value":460},"RULED",{"type":39,"value":462}," the defaults) and ",{"type":34,"tag":42,"props":464,"children":466},{"className":465},[],[467],{"type":39,"value":468},"\u002Fpages\u002Fphase4\u002Fgovernance-model",{"type":39,"value":470}," (rulings as switches, the chain with live counts, ten object cards stored-vs-derived, the Vanta story run to its end in seven frames, the lifecycle organ, the effective-policies probe, derived coverage). Verified in the browser: the story reaches its end under every ruling and the alternatives differ where the intents say they should (broad wins: the Team A exception loses and A is only resolved by enforcement; manual only: A waits for a person; config is proof: B resolves on publish). Three captures via ",{"type":34,"tag":42,"props":472,"children":474},{"className":473},[],[475],{"type":39,"value":476},"scripts\u002Fshot-programs\u002Fc114-governance-model.json",{"type":39,"value":478}," (ruled, d1=broad-wins, d3=config-is-proof), subject ",{"type":34,"tag":42,"props":480,"children":482},{"className":481},[],[483],{"type":39,"value":484},"page\u002Fgovernance-model",{"type":39,"value":486},". Registered in ",{"type":34,"tag":42,"props":488,"children":490},{"className":489},[],[491],{"type":39,"value":492},"page-registry.ts",{"type":39,"value":494}," under collapse ",{"type":34,"tag":42,"props":496,"children":498},{"className":497},[],[499],{"type":39,"value":500},"c114-governance",{"type":39,"value":502},"; moved from ",{"type":34,"tag":42,"props":504,"children":506},{"className":505},[],[507],{"type":39,"value":227},{"type":39,"value":509}," to the new Phase 4 the same afternoon (D7) with a Phase 4 index and a card on ",{"type":34,"tag":42,"props":511,"children":513},{"className":512},[],[514],{"type":39,"value":515},"\u002Fpages",{"type":39,"value":517},", and recaptured at the new route. Committed as d84d131ac.",{"type":34,"tag":35,"props":519,"children":520},{},[521,526,528,534,536,541,543,549,551,557,559,565],{"type":34,"tag":105,"props":522,"children":523},{},[524],{"type":39,"value":525},"Phase 2 (2026-10-09):",{"type":39,"value":527}," the surface map. ",{"type":34,"tag":324,"props":529,"children":531},{"href":530},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fsurface-map",[532],{"type":39,"value":533},"surface-map.md",{"type":39,"value":535},": homes (one per object; Scope, Enforcement, Exceptions and Change deliberately not pages), traversals (one per relationship), the intents × surfaces matrix (every intent has one primary surface; re-evaluation shows as organ rows and preview counts), the Govern rail proposal (Findings · Policies & Frameworks with Policies \u002F Frameworks \u002F Groups views; ",{"type":34,"tag":42,"props":537,"children":539},{"className":538},[],[540],{"type":39,"value":75},{"type":39,"value":542}," redirects), the eight surfaces as blocks with what carries over, what is new and the four states each mock renders, the organ's placement, the five-question check per surface, and the open questions the mocks will settle. Rendered as grey boxes at ",{"type":34,"tag":42,"props":544,"children":546},{"className":545},[],[547],{"type":39,"value":548},"\u002Fpages\u002Fphase4\u002Fgovernance-wireframes",{"type":39,"value":550}," (registry ",{"type":34,"tag":42,"props":552,"children":554},{"className":553},[],[555],{"type":39,"value":556},"governance-wireframes",{"type":39,"value":558},", captured as ",{"type":34,"tag":42,"props":560,"children":562},{"className":561},[],[563],{"type":39,"value":564},"c114-governance-wireframes",{"type":39,"value":566},"). Committed as 2465c12c8.",{"type":34,"tag":35,"props":568,"children":569},{},[570,575,576,582,584,590,592,598],{"type":34,"tag":105,"props":571,"children":572},{},[573],{"type":39,"value":574},"Phase 3 · S1 Finding detail (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":42,"props":577,"children":579},{"className":578},[],[580],{"type":39,"value":581},"\u002Fpages\u002Fphase4\u002Ffinding-detail",{"type":39,"value":583}," on the fixture world at the story's end, four states by ",{"type":34,"tag":42,"props":585,"children":587},{"className":586},[],[588],{"type":39,"value":589},"?findingId=",{"type":39,"value":591}," (F-A typical · F-S01 minimal · F-S04 overflow · F-NOPE unknown). Blocks per surface-map.md: crumb + header with Resolve ▾, the band, What happened (sunken, immutable), Why it violates (computed: paths, exceptions considered, still a violation now), the lifecycle organ, related findings, the Respond aside with derived reach. Ignore (required duration, the blank-reason warning with Confirm \u002F Cancel \u002F Don't ask again, then Done \u002F Create an exception) and Create exception (scope picker with specificity, derived preview, re-evaluation) act for real against a page-local world; verified in the browser on F-S04: the organ gained its rows, the finding went Resolved: ignore, then the exception made it Allowed and \"still a violation\" turned no. Fixture gained the overflow history (F-S04: two Ignores, expiry, revoke, Enforced, reopen on CH-G1, a third Ignore revoked) and a Team GRC observe entry. Four captures. S1 reuse inventory in surface-map.md §5. Lesson: the design dev server served a stale transform of the new page (no edit after creation reached it; an unchanged ",{"type":34,"tag":42,"props":593,"children":595},{"className":594},[],[596],{"type":39,"value":597},"touch nuxt.config.ts",{"type":39,"value":599}," did nothing; a real one-line config change restarted it in place and fixed it, reverted after). Committed as b9b7e3f14.",{"type":34,"tag":35,"props":601,"children":602},{},[603,608,609,615,617,623,625,631,633,639,640,646,648,654],{"type":34,"tag":105,"props":604,"children":605},{},[606],{"type":39,"value":607},"Phase 3 · S2 Findings (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":42,"props":610,"children":612},{"className":611},[],[613],{"type":39,"value":614},"\u002Fpages\u002Fphase4\u002Ffindings",{"type":39,"value":616}," from the live listing's pieces per the D8 inventory: the four severity cards (past SLA fourth), the filter bar on URL state (",{"type":34,"tag":42,"props":618,"children":620},{"className":619},[],[621],{"type":39,"value":622},"?status=&sev=&fw=&policy=&team=&q=&view=",{"type":39,"value":624},"), group rows per policy (severity tag with ink while open, ribbon, severity cells, harness pills, framework tags, sorters) with the policy section and the member rows on expand, and the adjudication card (subject · applies via · clock with Ignore \u002F Create exception \u002F Block, evidence beside the lifecycle) with Ignore live. Changed: Open and Resolved as independent toggles (Open default), Grouped ⇄ Individual on the ink switch, the group header linking to the policy, a status \u002F resolution column and a last-event cell, the finding id linking to S1; the handling select retired; groups with nothing under the filters disappear and the page says how many. Fixture gained ",{"type":34,"tag":42,"props":626,"children":628},{"className":627},[],[629],{"type":39,"value":630},"frameworksFor",{"type":39,"value":632},", the c79 SLA clock (",{"type":34,"tag":42,"props":634,"children":636},{"className":635},[],[637],{"type":39,"value":638},"slaClock",{"type":39,"value":62},{"type":34,"tag":42,"props":641,"children":643},{"className":642},[],[644],{"type":39,"value":645},"SLA_RUBRIC",{"type":39,"value":647},") and ",{"type":34,"tag":42,"props":649,"children":651},{"className":650},[],[652],{"type":39,"value":653},"withOverflow",{"type":39,"value":655}," (400 deterministic findings). Seven captures: default, with-resolved, individual, filtered, empty, overflow, expanded (group open, first member's card). Verified in the browser: expand, the card, the Ignore warning and Confirm (the row leaves the Open view and returns under Resolved). Committed as 5429239a2; deployed the same afternoon.",{"type":34,"tag":35,"props":657,"children":658},{},[659,664,665,671,673,679,681,687,689,694,696,702,703,709,711,717,719,725,727,733,734,740,741,747,748,754,755,761],{"type":34,"tag":105,"props":660,"children":661},{},[662],{"type":39,"value":663},"Phase 3 · S3 Policy detail (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":42,"props":666,"children":668},{"className":667},[],[669],{"type":39,"value":670},"\u002Fpages\u002Fphase4\u002Fpolicy-detail",{"type":39,"value":672},", four states by ",{"type":34,"tag":42,"props":674,"children":676},{"className":675},[],[677],{"type":39,"value":678},"?policyId=",{"type":39,"value":680}," (P-MCP typical · P-SENS-SANITIZE rich · P-TRANSPORT applied nowhere · P-NOPE unknown). The layer shell's header, meta strip and condition disclosure copied where they fit (its Exceptions block is not seated: old scope words, no resource; a slot is the layer follow-up); beneath: Definition, Severity as the recommended \u002F configured pair with Set and Reset (live), Where it applies as scope paths with specificity, enforcement at each scope, population, overlap and conflict callouts and the effective-for-a-person probe, Enforcement per scope with reach and observe-first guidance, Exceptions (resource · scope · reason · until · by · revoke), Groups, Frameworks as mapped requirements, Findings, History as the organ. Every section tagged with its delivery phase (Mark Peterson's 2 Foundation \u002F 3 Organization \u002F 4 Applicability). The change sheet is S6 and S8b drawn in place: add \u002F remove scope, enforce \u002F observe per scope, add \u002F revoke exception; ",{"type":34,"tag":42,"props":682,"children":684},{"className":683},[],[685],{"type":39,"value":686},"previewChange()",{"type":39,"value":688}," dry-runs the change on a clone and reports population, reach (broadens \u002F narrows), duplicate paths, equal-specificity conflicts (apply blocked until resolved), findings that resolve \u002F reopen \u002F resolve as Enforced, and the observe-first counts; the audit line shows the History row it adds. Fixture: ",{"type":34,"tag":42,"props":690,"children":692},{"className":691},[],[693],{"type":39,"value":28},{"type":39,"value":695}," · ",{"type":34,"tag":42,"props":697,"children":699},{"className":698},[],[700],{"type":39,"value":701},"fails",{"type":39,"value":695},{"type":34,"tag":42,"props":704,"children":706},{"className":705},[],[707],{"type":39,"value":708},"rule",{"type":39,"value":710}," on every policy, P-TRANSPORT (no scope), ",{"type":34,"tag":42,"props":712,"children":714},{"className":713},[],[715],{"type":39,"value":716},"scope-add",{"type":39,"value":718}," \u002F ",{"type":34,"tag":42,"props":720,"children":722},{"className":721},[],[723],{"type":39,"value":724},"scope-remove",{"type":39,"value":726}," changes, ",{"type":34,"tag":42,"props":728,"children":730},{"className":729},[],[731],{"type":39,"value":732},"scopeRows",{"type":39,"value":62},{"type":34,"tag":42,"props":735,"children":737},{"className":736},[],[738],{"type":39,"value":739},"overlaps",{"type":39,"value":62},{"type":34,"tag":42,"props":742,"children":744},{"className":743},[],[745],{"type":39,"value":746},"policyHistory",{"type":39,"value":62},{"type":34,"tag":42,"props":749,"children":751},{"className":750},[],[752],{"type":39,"value":753},"previewChange",{"type":39,"value":62},{"type":34,"tag":42,"props":756,"children":758},{"className":757},[],[759],{"type":39,"value":760},"scopeValues",{"type":39,"value":762},". Five captures including the sheet open. Verified in the browser: the sheet's preview and apply (Team: Legal added, History row), severity Reset, the Enforce and Create exception previews. Committed as 5a797bbb8.",{"type":34,"tag":35,"props":764,"children":765},{},[766,771,772,778,780,786,788,794,796,802,804,810,811,817],{"type":34,"tag":105,"props":767,"children":768},{},[769],{"type":39,"value":770},"Phase 3 · S4 Policies & Frameworks (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":42,"props":773,"children":775},{"className":774},[],[776],{"type":39,"value":777},"\u002Fpages\u002Fphase4\u002Fpolicies",{"type":39,"value":779},", one area with three views on the ink switch (",{"type":34,"tag":42,"props":781,"children":783},{"className":782},[],[784],{"type":39,"value":785},"?view=policies|frameworks|groups",{"type":39,"value":787},"). Policies: the Control Center's category sections and rows kept (D8); severity as effective with the recommended value and an inline Reset (live); the activation toggle replaced by an Applies column (organization-wide · N groups · Not in scope) with the enforcement summary; framework tags; open findings → S2; group by Category ⇄ Policy Group (then \"Not in any group\"); chips for severity, capability, in scope, framework; search. Frameworks: the Compliance listing's row kept; one list with Tracked (live, changes no policy); derived coverage counts per framework; open findings through mapped policies. Groups: S7's list (policies · scope with population · state · enforcement summary · open; New group, Duplicate as seams). Fixture: ",{"type":34,"tag":42,"props":789,"children":791},{"className":790},[],[792],{"type":39,"value":793},"tracked",{"type":39,"value":795}," on Framework, ",{"type":34,"tag":42,"props":797,"children":799},{"className":798},[],[800],{"type":39,"value":801},"framework-track",{"type":39,"value":803}," change, ",{"type":34,"tag":42,"props":805,"children":807},{"className":806},[],[808],{"type":39,"value":809},"applicabilitySummary",{"type":39,"value":62},{"type":34,"tag":42,"props":812,"children":814},{"className":813},[],[815],{"type":39,"value":816},"withManyPolicies",{"type":39,"value":818}," (the 69-policy overflow). Seven captures. Verified in the browser: Reset clears the override, group-by shows the four groups then the ungrouped, Track flips ISO to Tracked. Committed as 81a127765.",{"type":34,"tag":35,"props":820,"children":821},{},[822,827,828,834,836,842,844,850,852,858,860,866,868,874,876,881,883,889,891,897,898,904,906,912,913,919],{"type":34,"tag":105,"props":823,"children":824},{},[825],{"type":39,"value":826},"Phase 3 · S5 Framework detail (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":42,"props":829,"children":831},{"className":830},[],[832],{"type":39,"value":833},"\u002Fpages\u002Fphase4\u002Fframework-detail",{"type":39,"value":835},", five states (",{"type":34,"tag":42,"props":837,"children":839},{"className":838},[],[840],{"type":39,"value":841},"?frameworkId=owasp-llm",{"type":39,"value":843}," typical · ",{"type":34,"tag":42,"props":845,"children":847},{"className":846},[],[848],{"type":39,"value":849},"iso-27001",{"type":39,"value":851}," untracked · ",{"type":34,"tag":42,"props":853,"children":855},{"className":854},[],[856],{"type":39,"value":857},"soc2",{"type":39,"value":859}," no mapped policies · ",{"type":34,"tag":42,"props":861,"children":863},{"className":862},[],[864],{"type":39,"value":865},"iso-27001&state=overflow",{"type":39,"value":867}," 93 controls · ",{"type":34,"tag":42,"props":869,"children":871},{"className":870},[],[872],{"type":39,"value":873},"NOPE",{"type":39,"value":875},"). Mark's steer: the earlier framework page (qdash ",{"type":34,"tag":42,"props":877,"children":879},{"className":878},[],[880],{"type":39,"value":83},{"type":39,"value":882},", c56 mock) is the starting point, the new phase takes precedence. Kept from it: the title row, the table shape, all ten OWASP risks with their fit notes (",{"type":34,"tag":42,"props":884,"children":886},{"className":885},[],[887],{"type":39,"value":888},"Requirement.note",{"type":39,"value":890},", shown beneath the state), and its satisfying controls, which the catalog now carries as ten policies (nineteen total; P-PROVENANCE and P-SPEND left unassigned, so three policies read Not in scope). Changed: Activate → Track (changes no policy, live); the hand-set addressability dot → the derived coverage state; one controls cell → capability · configuration · findings as three cells; added the gap-reason column, the summary band, the Gaps list never hidden, coverage filter chips, the \"What coverage means\" disclosure and the risk-taxonomy caveat; retired the per-control toggles, Activate all, the progress bar. Fixture: ",{"type":34,"tag":42,"props":892,"children":894},{"className":893},[],[895],{"type":39,"value":896},"sourceTerm",{"type":39,"value":77},{"type":34,"tag":42,"props":899,"children":901},{"className":900},[],[902],{"type":39,"value":903},"description",{"type":39,"value":905}," on Framework, SOC 2 (no mappings), ",{"type":34,"tag":42,"props":907,"children":909},{"className":908},[],[910],{"type":39,"value":911},"gapReasons",{"type":39,"value":62},{"type":34,"tag":42,"props":914,"children":916},{"className":915},[],[917],{"type":39,"value":918},"withManyRequirements",{"type":39,"value":920},". Five captures; S4 captions and copy updated for the larger catalog. Lesson: the two-day-old dev server was serving stale transforms and the machine was at load 10 from Spotlight and fseventsd; Mark restarted the server (fresh process picks up new pages without a nudge). Committed as 1fbc18f78.",{"type":34,"tag":35,"props":922,"children":923},{},[924,929,930,936,938,944,945,951,953,959,961,967,969,975,977,983,984,990,992,998,1000,1006],{"type":34,"tag":105,"props":925,"children":926},{},[927],{"type":39,"value":928},"Phase 3 · S7 Policy Group (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":42,"props":931,"children":933},{"className":932},[],[934],{"type":39,"value":935},"\u002Fpages\u002Fphase4\u002Fpolicy-groups",{"type":39,"value":937},", four states (",{"type":34,"tag":42,"props":939,"children":941},{"className":940},[],[942],{"type":39,"value":943},"?groupId=G-ENG",{"type":39,"value":843},{"type":34,"tag":42,"props":946,"children":948},{"className":947},[],[949],{"type":39,"value":950},"G-DRAFT",{"type":39,"value":952}," draft · ",{"type":34,"tag":42,"props":954,"children":956},{"className":955},[],[957],{"type":39,"value":958},"G-OLD",{"type":39,"value":960}," retired · ",{"type":34,"tag":42,"props":962,"children":964},{"className":963},[],[965],{"type":39,"value":966},"G-NOPE",{"type":39,"value":968},"). Header with the state pill and Duplicate · Activate \u002F Retire \u002F Re-enable; the band; Scope with the change sheet (S6 reused); Policies as references with severity, capability, enforcement in this scope, open in scope and \"also in\", Add from the catalog and remove per row; Overlaps naming every other active group that shares people, the shared policies and any equal-specificity enforcement conflict, plus the effective-policies probe with this group's policies in bold; History as the organ. The sheet previews population, re-evaluation and conflicts for scope, membership, state and duplicate; Duplicate creates a draft referencing the same policies and opens it. Fixture: ",{"type":34,"tag":42,"props":970,"children":972},{"className":971},[],[973],{"type":39,"value":974},"draft",{"type":39,"value":976}," state, ",{"type":34,"tag":42,"props":978,"children":980},{"className":979},[],[981],{"type":39,"value":982},"createdAt",{"type":39,"value":718},{"type":34,"tag":42,"props":985,"children":987},{"className":986},[],[988],{"type":39,"value":989},"createdBy",{"type":39,"value":991},", G-DRAFT and G-OLD, the ",{"type":34,"tag":42,"props":993,"children":995},{"className":994},[],[996],{"type":39,"value":997},"group-change",{"type":39,"value":999}," record (create · scope · policyIds · state) in ",{"type":34,"tag":42,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":39,"value":1005},"applyChange",{"type":39,"value":1007},", four group history rows. Five captures. Verified in the browser: the scope preview, adding Restricted file access (policies 4 → 5, History row), Duplicate opening the new draft, Activate flipping it active. Committed as 04ddb4cab; deployed (live record 2026-10-09T21:33Z, all eight Phase 4 pages).",{"type":34,"tag":35,"props":1009,"children":1010},{},[1011,1016,1018,1024,1026,1031,1033,1039],{"type":34,"tag":105,"props":1012,"children":1013},{},[1014],{"type":39,"value":1015},"fixture · reach per device (2026-10-09):",{"type":39,"value":1017}," the S7 sheet surfaced that the four open sanitization findings sat under organisation-wide enforcement already confirmed on every device, so any change touching the policy previewed them resolving as Enforced. D3 is now per device: ",{"type":34,"tag":42,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":39,"value":1023},"EnforcementState.reach.pending",{"type":39,"value":1025}," names the devices enforcement has not reached, and ",{"type":34,"tag":42,"props":1027,"children":1029},{"className":1028},[],[1030],{"type":39,"value":428},{"type":39,"value":1032}," returns configured (with ",{"type":34,"tag":42,"props":1034,"children":1036},{"className":1035},[],[1037],{"type":39,"value":1038},"pendingDevice",{"type":39,"value":1040},") for a subject on one of them. The sanitization enforcement is confirmed on 97 of 100 with the three devices behind F-S01..F-S03 pending; those findings read Open · pending, S1 says \"not yet on mac-eng-07\", S3's Findings block counts 3 pending, and the group sheet previews no Enforced resolutions. Captions updated; every shot recaptured. Committed as 0f5cbcb66.",{"type":34,"tag":35,"props":1042,"children":1043},{},[1044,1049,1050,1056,1058,1064],{"type":34,"tag":105,"props":1045,"children":1046},{},[1047],{"type":39,"value":1048},"Phase 4 · the review walk (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":42,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":39,"value":1055},"\u002Fpages\u002Fphase4\u002Freview-walk",{"type":39,"value":1057}," reads ",{"type":34,"tag":42,"props":1059,"children":1061},{"className":1060},[],[1062],{"type":39,"value":1063},"app\u002Fdata\u002Fc114-review.ts",{"type":39,"value":1065}," (eight stops in dependency order: where to look with every state linked, what to look for, the captures by subject from the atlas manifest, and the questions each mock raises with what it does today; cross-cutting questions on the delivery phasing and the model; the rulings so far and Mark Peterson's delivery phases up top; progress counted from rulings). Rulings are recorded in the data file and in Decisions here as they land, so the page is the living review record. Thirty-five questions open at the start. Committed as eac972b12; deployed (live record 2026-10-09T21:58Z).",{"type":34,"tag":35,"props":1067,"children":1068},{},[1069,1074,1075,1081],{"type":34,"tag":105,"props":1070,"children":1071},{},[1072],{"type":39,"value":1073},"parked for the weekend (2026-10-09):",{"type":39,"value":161},{"type":34,"tag":324,"props":1076,"children":1078},{"href":1077},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002FPICKUP",[1079],{"type":39,"value":1080},"PICKUP.md",{"type":39,"value":1082}," written; the walk resumes Monday 2026-10-12 with a fresh agent. Ten c114 commits today, all deployed; nothing of the cycle's uncommitted.",{"type":34,"tag":35,"props":1084,"children":1085},{},[1086,1091,1093,1099,1100,1106],{"type":34,"tag":105,"props":1087,"children":1088},{},[1089],{"type":39,"value":1090},"composed mocks · the harness (2026-10-14):",{"type":39,"value":1092}," Mark: \"similar to phase 3, we're going to be building composed mocks starting with finding details\" (",{"type":34,"tag":324,"props":1094,"children":1096},{"href":1095},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fmocks-prompt",[1097],{"type":39,"value":1098},"prompt",{"type":39,"value":695},{"type":34,"tag":324,"props":1101,"children":1103},{"href":1102},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fmocks-plan",[1104],{"type":39,"value":1105},"plan",{"type":39,"value":1107},"), then \"I haven't provided any direction, so just build the 'harness' for now\".",{"type":34,"tag":181,"props":1109,"children":1110},{},[1111,1301,1313],{"type":34,"tag":101,"props":1112,"children":1113},{},[1114,1116],{"type":39,"value":1115},"What was built:\n",{"type":34,"tag":181,"props":1117,"children":1118},{},[1119,1148,1177,1250,1277,1296],{"type":34,"tag":101,"props":1120,"children":1121},{},[1122,1124,1130,1132,1138,1140,1146],{"type":39,"value":1123},"c100's Stage 3 workspace for Governance: ",{"type":34,"tag":42,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":39,"value":1129},"\u002Fpages\u002Fphase4\u002Fmock",{"type":39,"value":1131}," (index of the surfaces, composed or not), ",{"type":34,"tag":42,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":39,"value":1137},"\u002Fmock\u002Ffinding-detail",{"type":39,"value":1139}," (S1: the shell, the shared world and the finding the URL names; nothing composed) and ",{"type":34,"tag":42,"props":1141,"children":1143},{"className":1142},[],[1144],{"type":39,"value":1145},"\u002Fmock\u002Fparts",{"type":39,"value":1147}," (an empty parts bin).",{"type":34,"tag":101,"props":1149,"children":1150},{},[1151,1153,1159,1161,1167,1169,1175],{"type":39,"value":1152},"Shell: ",{"type":34,"tag":42,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":39,"value":1158},"layouts\u002Fgovernance-mock.vue",{"type":39,"value":1160}," with ",{"type":34,"tag":42,"props":1162,"children":1164},{"className":1163},[],[1165],{"type":39,"value":1166},"GovernanceMockSidebar",{"type":39,"value":1168},", which mirrors qdash's current rail (MONITOR · GOVERN + SECURE · ADMIN, EXP hidden, Inventory \u002F Organization as disclosures; an item links only when its surface has a mock; exact-match lighting, as in qdash). The MOCK bar ",{"type":34,"tag":42,"props":1170,"children":1172},{"className":1171},[],[1173],{"type":39,"value":1174},"GovernanceMockBar",{"type":39,"value":1176}," carries finding (F-A · F-S01 · F-S04 · F-NOPE), delivery phase (2 · 3 · 4), show parts, reset world and the parts bin.",{"type":34,"tag":101,"props":1178,"children":1179},{},[1180,1182,1188,1190,1196,1198,1204,1206,1212,1214,1220,1221,1227,1229,1235,1236,1242,1243,1249],{"type":39,"value":1181},"World: ",{"type":34,"tag":42,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":39,"value":1187},"useGovernanceMock()",{"type":39,"value":1189}," holds the fixture at the story's end in ",{"type":34,"tag":42,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":39,"value":1195},"useState",{"type":39,"value":1197},", so changes persist across mocks until reset. It exposes ",{"type":34,"tag":42,"props":1199,"children":1201},{"className":1200},[],[1202],{"type":39,"value":1203},"act()",{"type":39,"value":1205}," (applyChange under RULED), ",{"type":34,"tag":42,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":39,"value":1211},"finding",{"type":39,"value":1213}," (folded), ",{"type":34,"tag":42,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":39,"value":1219},"all",{"type":39,"value":77},{"type":34,"tag":42,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":39,"value":1226},"to()",{"type":39,"value":1228}," (links keep ",{"type":34,"tag":42,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":39,"value":1234},"findingId",{"type":39,"value":718},{"type":34,"tag":42,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":39,"value":1241},"dp",{"type":39,"value":718},{"type":34,"tag":42,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":39,"value":1248},"parts",{"type":39,"value":379},{"type":34,"tag":101,"props":1251,"children":1252},{},[1253,1255,1261,1263,1269,1270,1276],{"type":39,"value":1254},"Manifest: ",{"type":34,"tag":42,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":39,"value":1260},"app\u002Fdata\u002Fgovernance-parts.ts",{"type":39,"value":1262}," (",{"type":34,"tag":42,"props":1264,"children":1266},{"className":1265},[],[1267],{"type":39,"value":1268},"SURFACES",{"type":39,"value":62},{"type":34,"tag":42,"props":1271,"children":1273},{"className":1272},[],[1274],{"type":39,"value":1275},"PARTS = []",{"type":39,"value":379},{"type":34,"tag":101,"props":1278,"children":1279},{},[1280,1282,1288,1289,1295],{"type":39,"value":1281},"Reused unedited from c100: ",{"type":34,"tag":42,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":39,"value":1287},"LandingMockSlot",{"type":39,"value":62},{"type":34,"tag":42,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":39,"value":1294},"useSlotVariant",{"type":39,"value":317},{"type":34,"tag":101,"props":1297,"children":1298},{},[1299],{"type":39,"value":1300},"Registry: three phase4 entries. The Phase 4 index has a \"Composed mocks\" section.",{"type":34,"tag":101,"props":1302,"children":1303},{},[1304,1306,1311],{"type":39,"value":1305},"Verified in the browser: the knobs write the URL, F-NOPE renders the honest absence, the disclosure opens, links carry the knobs, and there are no console errors. ",{"type":34,"tag":42,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":39,"value":1203},{"type":39,"value":1312}," \u002F reset are not exercised until a part acts.",{"type":34,"tag":101,"props":1314,"children":1315},{},[1316],{"type":39,"value":1317},"The S1 slot and variant table in mocks-plan.md is a proposal awaiting Mark's direction. Uncommitted.",{"type":34,"tag":35,"props":1319,"children":1320},{},[1321,1326,1328,1334],{"type":34,"tag":105,"props":1322,"children":1323},{},[1324],{"type":39,"value":1325},"S1 in Illustrator (2026-10-14):",{"type":39,"value":1327}," Mark wanted the Finding detail page in Illustrator as a starting point for manual design work, with every text field already created; it doesn't need to match exactly. No MCP server drives desktop Illustrator: the plugin catalog has nothing, and the registry's Adobe connector is Adobe's cloud tools. So I added ",{"type":34,"tag":42,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":39,"value":1333},"scripts\u002Fillustrator-export.mjs",{"type":39,"value":317},{"type":34,"tag":181,"props":1336,"children":1337},{},[1338,1366,1379,1408,1494,1499],{"type":34,"tag":101,"props":1339,"children":1340},{},[1341,1343],{"type":39,"value":1342},"What it does: headless Chrome reads one region's boxes and text, and the script writes an ExtendScript that rebuilds it as live objects.\n",{"type":34,"tag":181,"props":1344,"children":1345},{},[1346,1351,1356,1361],{"type":34,"tag":101,"props":1347,"children":1348},{},[1349],{"type":39,"value":1350},"Rectangles (rounded where the CSS is) and one-sided rules.",{"type":34,"tag":101,"props":1352,"children":1353},{},[1354],{"type":39,"value":1355},"One text frame per text block with its styled runs: Inter \u002F Consolas, weight, size, leading, case.",{"type":34,"tag":101,"props":1357,"children":1358},{},[1359],{"type":39,"value":1360},"Translucent colours flattened over what is behind them.",{"type":34,"tag":101,"props":1362,"children":1363},{},[1364],{"type":39,"value":1365},"Layers page · boxes · text.",{"type":34,"tag":101,"props":1367,"children":1368},{},[1369,1371,1377],{"type":39,"value":1370},"Run through ",{"type":34,"tag":42,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":39,"value":1376},"osascript … do javascript \"#include …\"",{"type":39,"value":1378}," in Illustrator 2026.",{"type":34,"tag":101,"props":1380,"children":1381},{},[1382,1384,1390,1392,1398,1400,1406],{"type":39,"value":1383},"Output in ",{"type":34,"tag":42,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":39,"value":1389},"illustrator\u002F",{"type":39,"value":1391},": ",{"type":34,"tag":42,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":39,"value":1397},"c114-finding-detail.jsx",{"type":39,"value":1399}," + ",{"type":34,"tag":42,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":39,"value":1405},".ai",{"type":39,"value":1407}," (F-A, light, 1440px viewport: 25 shapes, 97 text frames, no style misses). Checked against a screenshot of the page.",{"type":34,"tag":101,"props":1409,"children":1410},{},[1411,1413,1419,1420,1426,1428],{"type":39,"value":1412},"Mark, same day: \"let's turn this into a skill\" → ",{"type":34,"tag":42,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":39,"value":1418},"\u002Fillustrator",{"type":39,"value":1262},{"type":34,"tag":42,"props":1421,"children":1423},{"className":1422},[],[1424],{"type":39,"value":1425},".claude\u002Fskills\u002Fillustrator\u002FSKILL.md",{"type":39,"value":1427},"). The script gained:\n",{"type":34,"tag":181,"props":1429,"children":1430},{},[1431,1442,1453,1464,1484,1489],{"type":34,"tag":101,"props":1432,"children":1433},{},[1434,1440],{"type":34,"tag":42,"props":1435,"children":1437},{"className":1436},[],[1438],{"type":39,"value":1439},"--run",{"type":39,"value":1441},": builds in the newest Illustrator and leaves the document open",{"type":34,"tag":101,"props":1443,"children":1444},{},[1445,1451],{"type":34,"tag":42,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":39,"value":1450},"--check",{"type":39,"value":1452},": a PNG to compare against the page",{"type":34,"tag":101,"props":1454,"children":1455},{},[1456,1462],{"type":34,"tag":42,"props":1457,"children":1459},{"className":1458},[],[1460],{"type":39,"value":1461},"--click",{"type":39,"value":1463},": opens menus and sheets first",{"type":34,"tag":101,"props":1465,"children":1466},{},[1467,1469,1474,1476,1482],{"type":39,"value":1468},"an overwrite guard: an existing ",{"type":34,"tag":42,"props":1470,"children":1472},{"className":1471},[],[1473],{"type":39,"value":1405},{"type":39,"value":1475}," needs ",{"type":34,"tag":42,"props":1477,"children":1479},{"className":1478},[],[1480],{"type":39,"value":1481},"--force",{"type":39,"value":1483},", and the run stops if that file is open with unsaved changes",{"type":34,"tag":101,"props":1485,"children":1486},{},[1487],{"type":39,"value":1488},"fallbacks for ▾ and similar glyphs",{"type":34,"tag":101,"props":1490,"children":1491},{},[1492],{"type":39,"value":1493},"better line detection",{"type":34,"tag":101,"props":1495,"children":1496},{},[1497],{"type":39,"value":1498},"Tested on F-S04 with the Ignore sheet open.",{"type":34,"tag":101,"props":1500,"children":1501},{},[1502,1504,1509,1510,1516,1518,1524],{"type":39,"value":1503},"2026-10-16: S3 Policy detail, P-MCP, built with ",{"type":34,"tag":42,"props":1505,"children":1507},{"className":1506},[],[1508],{"type":39,"value":1418},{"type":39,"value":1262},{"type":34,"tag":42,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":39,"value":1515},"illustrator\u002Fc114-policy-detail.{ai,jsx}",{"type":39,"value":1517},": 57 shapes, 198 text frames). The script gained closed-",{"type":34,"tag":42,"props":1519,"children":1521},{"className":1520},[],[1522],{"type":39,"value":1523},"\u003Cdetails>",{"type":39,"value":1525}," handling, form-field values, margin spaces and underlines.",{"type":34,"tag":35,"props":1527,"children":1528},{},[1529,1534],{"type":34,"tag":105,"props":1530,"children":1531},{},[1532],{"type":39,"value":1533},"S3 configuration (2026-10-18):",{"type":39,"value":1535}," Mark: \"for the policy details page, I don't see any place for custom configurations per policy, is that correct?\" It was correct, and deliberate: surface-map.md S3 dropped qdash's PolicyConfig shapes because no intent asks for them, but that decision never reached the review walk. Then: \"take a look at ..\u002Fqcontrol policy listing page. The expand rows have much better policy configuration. Take a look at that and add something similar.\"",{"type":34,"tag":181,"props":1537,"children":1538},{},[1539,1603,1644,1662,1693,1724],{"type":34,"tag":101,"props":1540,"children":1541},{},[1542,1547],{"type":34,"tag":105,"props":1543,"children":1544},{},[1545],{"type":39,"value":1546},"Fixture.",{"type":34,"tag":181,"props":1548,"children":1549},{},[1550,1561,1580,1598],{"type":34,"tag":101,"props":1551,"children":1552},{},[1553,1559],{"type":34,"tag":42,"props":1554,"children":1556},{"className":1555},[],[1557],{"type":39,"value":1558},"app\u002Fdata\u002Fgovernance-policy-config.ts",{"type":39,"value":1560}," holds the config for 14 of the 19 policies, copied from the qdash catalog (P5–P17). Shapes: lists for P-MCP, P-PROVIDERS, P-TOOL-ALLOW and P-PROVENANCE; detectors for P-SENS-*, P-DATA-BOUNDARY, P-CREDENTIALS, P-FILES, P-PROMPT-INSPECT and P-OUTPUT; levels for P-SANDBOX and P-TRANSPORT; a threshold for P-SPEND.",{"type":34,"tag":101,"props":1562,"children":1563},{},[1564,1570,1572,1578],{"type":34,"tag":42,"props":1565,"children":1567},{"className":1566},[],[1568],{"type":39,"value":1569},"World.configs",{"type":39,"value":1571}," holds it, and a new ",{"type":34,"tag":42,"props":1573,"children":1575},{"className":1574},[],[1576],{"type":39,"value":1577},"config-set",{"type":39,"value":1579}," Change kind records each edit.",{"type":34,"tag":101,"props":1581,"children":1582},{},[1583,1588,1590,1596],{"type":34,"tag":42,"props":1584,"children":1586},{"className":1585},[],[1587],{"type":39,"value":428},{"type":39,"value":1589}," adds ",{"type":34,"tag":42,"props":1591,"children":1593},{"className":1592},[],[1594],{"type":39,"value":1595},"configAllows",{"type":39,"value":1597},": a global list entry, or a detector switched off for a finding's data class, means the activity no longer violates.",{"type":34,"tag":101,"props":1599,"children":1600},{},[1601],{"type":39,"value":1602},"A config change re-evaluates the open findings it touches (D2).",{"type":34,"tag":101,"props":1604,"children":1605},{},[1606,1611],{"type":34,"tag":105,"props":1607,"children":1608},{},[1609],{"type":39,"value":1610},"S3.",{"type":34,"tag":181,"props":1612,"children":1613},{},[1614,1619,1624,1629,1634,1639],{"type":34,"tag":101,"props":1615,"children":1616},{},[1617],{"type":39,"value":1618},"A Configuration section sits after Definition, tagged delivery phase 2 with G7 and its own jump pill.",{"type":34,"tag":101,"props":1620,"children":1621},{},[1622],{"type":39,"value":1623},"It seats the layer's PolicyConfigListEditor, DetectorList, LevelSelect and Threshold as they are.",{"type":34,"tag":101,"props":1625,"children":1626},{},[1627],{"type":39,"value":1628},"\"Seen, not on the list\" comes from the policy's findings, the way qdash's pending destinations work.",{"type":34,"tag":101,"props":1630,"children":1631},{},[1632],{"type":39,"value":1633},"Detector hits are counted from the policy's findings, so the layer's \"last 24h\" caption doesn't match the count.",{"type":34,"tag":101,"props":1635,"children":1636},{},[1637],{"type":39,"value":1638},"Edits apply at once, add a History row and say what re-evaluation did. Threshold edits are debounced into one row, and no-op toggles are skipped.",{"type":34,"tag":101,"props":1640,"children":1641},{},[1642],{"type":39,"value":1643},"Policies with nothing to configure say so.",{"type":34,"tag":101,"props":1645,"children":1646},{},[1647,1652,1654,1660],{"type":34,"tag":105,"props":1648,"children":1649},{},[1650],{"type":39,"value":1651},"Records.",{"type":39,"value":1653}," G7 is in object-model.md §10. S3.6 in ",{"type":34,"tag":42,"props":1655,"children":1657},{"className":1656},[],[1658],{"type":39,"value":1659},"c114-review.ts",{"type":39,"value":1661}," asks: is a global allow-list entry the same as an org-wide exception? Should configuration be per scope? Should edits preview first? There is also a composition note on the page.",{"type":34,"tag":101,"props":1663,"children":1664},{},[1665,1670],{"type":34,"tag":105,"props":1666,"children":1667},{},[1668],{"type":39,"value":1669},"Verified in the browser.",{"type":34,"tag":181,"props":1671,"children":1672},{},[1673,1678,1683,1688],{"type":34,"tag":101,"props":1674,"children":1675},{},[1676],{"type":39,"value":1677},"P-SENS-SANITIZE: switching SSN off resolved F-S01 and F-S04 as Policy changed (4 open became 2) and added a \"config set\" History row.",{"type":34,"tag":101,"props":1679,"children":1680},{},[1681],{"type":39,"value":1682},"P-MCP: adding Vanta MCP to the sanctioned list re-evaluated nothing, since both its findings were already resolved.",{"type":34,"tag":101,"props":1684,"children":1685},{},[1686],{"type":39,"value":1687},"P-TRANSPORT, P-SPEND and P-ACCT render their shapes, or the empty line.",{"type":34,"tag":101,"props":1689,"children":1690},{},[1691],{"type":39,"value":1692},"No console errors.",{"type":34,"tag":101,"props":1694,"children":1695},{},[1696,1701,1703,1709,1710,1716,1718,1723],{"type":34,"tag":105,"props":1697,"children":1698},{},[1699],{"type":39,"value":1700},"Other session.",{"type":39,"value":1702}," A concurrent session is composing S3 in the harness (",{"type":34,"tag":42,"props":1704,"children":1706},{"className":1705},[],[1707],{"type":39,"value":1708},"mock\u002Fpolicy-detail",{"type":39,"value":62},{"type":34,"tag":42,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":39,"value":1715},"part\u002FPolicyScope",{"type":39,"value":1717},") in the same tree; it can seat the same editors from ",{"type":34,"tag":42,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":39,"value":1569},{"type":39,"value":317},{"type":34,"tag":101,"props":1725,"children":1726},{},[1727],{"type":39,"value":1728},"Uncommitted.",{"type":34,"tag":35,"props":1730,"children":1731},{},[1732,1737,1739,1744,1745,1750],{"type":34,"tag":105,"props":1733,"children":1734},{},[1735],{"type":39,"value":1736},"composed S3 · Where it applies (2026-10-18):",{"type":39,"value":1738}," Mark: \"c114, policy detail. We'll be building the revised page section by section. I think we can combine the 'where it applies' and the 'enforcement' sections. Also, let's use our standard uxTable here.\" Asked where, he answered \"the composed mocks\". Then: \"let's lose the white backgrounds and use a simple title with a hairline, per section.\" (",{"type":34,"tag":324,"props":1740,"children":1742},{"href":1741},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fs3-composed-prompt",[1743],{"type":39,"value":1098},{"type":39,"value":695},{"type":34,"tag":324,"props":1746,"children":1748},{"href":1747},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fs3-composed-plan",[1749],{"type":39,"value":1105},{"type":39,"value":1751},")",{"type":34,"tag":181,"props":1753,"children":1754},{},[1755,1801,1826,1843,1852,1870,1889,1909,1936,1941,1970,1983,2004,2115,2128,2141,2174,2201,2240,2261,2312,2372,2403,2414,2486,2512,2565,2601,2613,2695,2708,2720,2733,2738,2758,2778,2963,3148,3153,3201,3206,3218],{"type":34,"tag":101,"props":1756,"children":1757},{},[1758,1763,1764,1770,1772,1777,1779,1785,1787,1792,1794,1799],{"type":34,"tag":105,"props":1759,"children":1760},{},[1761],{"type":39,"value":1762},"The page.",{"type":39,"value":161},{"type":34,"tag":42,"props":1765,"children":1767},{"className":1766},[],[1768],{"type":39,"value":1769},"\u002Fpages\u002Fphase4\u002Fmock\u002Fpolicy-detail",{"type":39,"value":1771},", S3 in the harness (",{"type":34,"tag":42,"props":1773,"children":1775},{"className":1774},[],[1776],{"type":39,"value":1268},{"type":39,"value":1778}," gains its mock; registry ",{"type":34,"tag":42,"props":1780,"children":1782},{"className":1781},[],[1783],{"type":39,"value":1784},"mock-policy-detail",{"type":39,"value":1786},"). It takes a new ",{"type":34,"tag":42,"props":1788,"children":1790},{"className":1789},[],[1791],{"type":39,"value":678},{"type":39,"value":1793}," knob (P-MCP · P-SENS-SANITIZE · P-TRANSPORT · P-NOPE) in ",{"type":34,"tag":42,"props":1795,"children":1797},{"className":1796},[],[1798],{"type":39,"value":1187},{"type":39,"value":1800}," and the MOCK bar. Sections follow the surface mock's order. Each is a title over a hairline with no card. The ones not composed yet say so.",{"type":34,"tag":101,"props":1802,"children":1803},{},[1804,1816,1818,1824],{"type":34,"tag":105,"props":1805,"children":1806},{},[1807,1809,1815],{"type":39,"value":1808},"First part, ",{"type":34,"tag":42,"props":1810,"children":1812},{"className":1811},[],[1813],{"type":39,"value":1814},"GovernancePartPolicyScope",{"type":39,"value":317},{"type":39,"value":1817}," It merges Where it applies and Enforcement into one ",{"type":34,"tag":42,"props":1819,"children":1821},{"className":1820},[],[1822],{"type":39,"value":1823},"UxTable",{"type":39,"value":1825},". Each scope path is one row: scope · via (direct or group link) · spec · people · enforcement level with reach · open findings and exceptions in this scope · Enforce \u002F Back to observe \u002F remove. An enforcement entry whose scope no path assigns shows as \"not assigned\". The overlaps callout and the effective-for-a-person probe stay under the table. Below delivery phase 4 it shows one organization-wide row. A non-enforceable policy reads \"observe only\" and has no buttons.",{"type":34,"tag":101,"props":1827,"children":1828},{},[1829,1834,1836,1841],{"type":34,"tag":105,"props":1830,"children":1831},{},[1832],{"type":39,"value":1833},"Acting.",{"type":39,"value":1835}," A row emits the Change it would make. Until the S6 sheet is composed, the page shows it in a small stand-in panel with ",{"type":34,"tag":42,"props":1837,"children":1839},{"className":1838},[],[1840],{"type":39,"value":686},{"type":39,"value":1842}," counts, Apply and Cancel. Add scope says the picker comes with the sheet.",{"type":34,"tag":101,"props":1844,"children":1845},{},[1846,1850],{"type":34,"tag":105,"props":1847,"children":1848},{},[1849],{"type":39,"value":1669},{"type":39,"value":1851}," Enforce on Team: Engineering previewed, applied, and the row became configured · 0 of 40 (the probe followed). Checked dp 2, P-TRANSPORT (not in scope), P-SENS-SANITIZE, P-NOPE, and the parts bin following the policy knob.",{"type":34,"tag":101,"props":1853,"children":1854},{},[1855,1860,1862,1868],{"type":34,"tag":105,"props":1856,"children":1857},{},[1858],{"type":39,"value":1859},"Dev server.",{"type":39,"value":1861}," The SSR side served stale transforms twice (the client bundle was current). A real one-line ",{"type":34,"tag":42,"props":1863,"children":1865},{"className":1864},[],[1866],{"type":39,"value":1867},"nuxt.config.ts",{"type":39,"value":1869}," change restarted it each time, and was reverted.",{"type":34,"tag":101,"props":1871,"children":1872},{},[1873,1875,1880,1882,1888],{"type":39,"value":1874},"Same day, Mark: \"rename where it applies to Scop + enforcement and let's make these title 22 px\". The section is now ",{"type":34,"tag":105,"props":1876,"children":1877},{},[1878],{"type":39,"value":1879},"Scope + enforcement",{"type":39,"value":1881},", and every section title is ",{"type":34,"tag":42,"props":1883,"children":1885},{"className":1884},[],[1886],{"type":39,"value":1887},"text-22",{"type":39,"value":317},{"type":34,"tag":101,"props":1890,"children":1891},{},[1892,1894,1900,1901,1907],{"type":39,"value":1893},"Mark: \"that table doesn't look quite right, let's use our usTable components including the header\". It is now ",{"type":34,"tag":42,"props":1895,"children":1897},{"className":1896},[],[1898],{"type":39,"value":1899},"UxTableList",{"type":39,"value":1160},{"type":34,"tag":42,"props":1902,"children":1904},{"className":1903},[],[1905],{"type":39,"value":1906},"UxTableListColumnHeader",{"type":39,"value":1908}," sorters (Scope sorts by specificity, the default), with the 3px rules above and below the rows as in qdash's FrameworkRequirements. The delivery-phase 2–3 single row uses the same components.",{"type":34,"tag":101,"props":1910,"children":1911},{},[1912,1914,1920,1922,1927,1929,1934],{"type":39,"value":1913},"Mark: \"grab the new configuration section from the old page (another agent added)\". It is now ",{"type":34,"tag":42,"props":1915,"children":1917},{"className":1916},[],[1918],{"type":39,"value":1919},"GovernancePartPolicyConfiguration",{"type":39,"value":1921}," (dp 2), seated after Definition. It holds the same PolicyConfig* editors on ",{"type":34,"tag":42,"props":1923,"children":1925},{"className":1924},[],[1926],{"type":39,"value":1569},{"type":39,"value":1928},". An edit applies at once through ",{"type":34,"tag":42,"props":1930,"children":1932},{"className":1931},[],[1933],{"type":39,"value":1203},{"type":39,"value":1935},", which now returns the applied result so the part can say what re-evaluated. Verified: adding Vanta MCP to P-MCP's sanctioned list re-evaluated nothing (both its findings were already resolved).",{"type":34,"tag":101,"props":1937,"children":1938},{},[1939],{"type":39,"value":1940},"Mark asked about the effective-for-a-person probe (\"do we need that?\"). The question is open; the probe is still under the table.",{"type":34,"tag":101,"props":1942,"children":1943},{},[1944,1946,1952,1954,1960,1962,1968],{"type":39,"value":1945},"Mark: \"let's add the sticky pill bar for sub items\". The governance-mock layout now mounts qdash's sticky band (",{"type":34,"tag":42,"props":1947,"children":1949},{"className":1948},[],[1950],{"type":39,"value":1951},"UxStickyBand title",{"type":39,"value":1953},", as qdash's default layout does). The page header is the layer's ",{"type":34,"tag":42,"props":1955,"children":1957},{"className":1956},[],[1958],{"type":39,"value":1959},"UxPageTitle",{"type":39,"value":1961}," (qdash PageHeader's settings), and ",{"type":34,"tag":42,"props":1963,"children":1965},{"className":1964},[],[1966],{"type":39,"value":1967},"NavJumpPills sticky",{"type":39,"value":1969}," sits under the Band placeholder with one pill per section. Scrolled, the title pins compact on row 1 and the pills dock under it; the scroll-spy and jumps work. The MOCK bar no longer sticks (it would sit over the band).",{"type":34,"tag":101,"props":1971,"children":1972},{},[1973,1975,1981],{"type":39,"value":1974},"Mark: \"let's give the configuration section a white bg similar to a surface item\", then \"leave the title out of the white bg\". The Configuration content now sits on a DataSurfacePanel-style card (",{"type":34,"tag":42,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":39,"value":1980},"rounded-12 border bg-surface p-5",{"type":39,"value":1982},"), with the title over its hairline above it.",{"type":34,"tag":101,"props":1984,"children":1985},{},[1986,1988,1994,1996,2002],{"type":39,"value":1987},"Dev server: the fresh ",{"type":34,"tag":42,"props":1989,"children":1991},{"className":1990},[],[1992],{"type":39,"value":1993},":3000",{"type":39,"value":1995}," still missed edits, so it now runs from the ",{"type":34,"tag":42,"props":1997,"children":1999},{"className":1998},[],[2000],{"type":39,"value":2001},"design-polling",{"type":39,"value":2003}," launch config (CHOKIDAR_USEPOLLING), started from the app's preview.",{"type":34,"tag":101,"props":2005,"children":2006},{},[2007,2009,2015,2017,2022,2023,2028,2030,2036,2038,2044,2046,2052,2054,2060,2061,2067,2068,2074,2076,2081,2083],{"type":39,"value":2008},"Mark: \"let's move the exceptions over to the new page and use the UxTable - with header\". It is now ",{"type":34,"tag":42,"props":2010,"children":2012},{"className":2011},[],[2013],{"type":39,"value":2014},"GovernancePartPolicyExceptions",{"type":39,"value":2016}," (dp 4), seated after Scope + enforcement with its own pill. It is a ",{"type":34,"tag":42,"props":2018,"children":2020},{"className":2019},[],[2021],{"type":39,"value":1899},{"type":39,"value":1160},{"type":34,"tag":42,"props":2024,"children":2026},{"className":2025},[],[2027],{"type":39,"value":1906},{"type":39,"value":2029}," sorters: Allow · Scope · Reason · Until · Added by, plus a ",{"type":34,"tag":42,"props":2031,"children":2033},{"className":2032},[],[2034],{"type":39,"value":2035},"UxClose",{"type":39,"value":2037}," that revokes a live exception. Live exceptions come first and revoked ones are dimmed. Add exception and revoke emit ",{"type":34,"tag":42,"props":2039,"children":2041},{"className":2040},[],[2042],{"type":39,"value":2043},"request",{"type":39,"value":2045},". ",{"type":34,"tag":42,"props":2047,"children":2049},{"className":2048},[],[2050],{"type":39,"value":2051},"ScopeRequest",{"type":39,"value":2053}," gained ",{"type":34,"tag":42,"props":2055,"children":2057},{"className":2056},[],[2058],{"type":39,"value":2059},"exception-add",{"type":39,"value":718},{"type":34,"tag":42,"props":2062,"children":2064},{"className":2063},[],[2065],{"type":39,"value":2066},"exception-revoke",{"type":39,"value":1399},{"type":34,"tag":42,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":39,"value":2073},"exceptionId",{"type":39,"value":2075},", and the page's stand-in panel builds the revoke change with its preview. Add waits for the S8b sheet. Verified after the 12:20 reboot (a fresh ",{"type":34,"tag":42,"props":2077,"children":2079},{"className":2078},[],[2080],{"type":39,"value":1993},{"type":39,"value":2082}," picked everything up):\n",{"type":34,"tag":181,"props":2084,"children":2085},{},[2086,2091,2096,2101,2106,2111],{"type":34,"tag":101,"props":2087,"children":2088},{},[2089],{"type":39,"value":2090},"P-MCP: the live GRC row shows first, and the revoked Team A row is dimmed with no X.",{"type":34,"tag":101,"props":2092,"children":2093},{},[2094],{"type":39,"value":2095},"The header sort works.",{"type":34,"tag":101,"props":2097,"children":2098},{},[2099],{"type":39,"value":2100},"Revoking E-GRC: the panel previews 0 resolve \u002F 0 reopen, and Apply dims the row as revoked 2026-11-01.",{"type":34,"tag":101,"props":2102,"children":2103},{},[2104],{"type":39,"value":2105},"At dp 2 the section shows its one-line note.",{"type":34,"tag":101,"props":2107,"children":2108},{},[2109],{"type":39,"value":2110},"P-TRANSPORT shows the empty line, and its Add opens the stand-in.",{"type":34,"tag":101,"props":2112,"children":2113},{},[2114],{"type":39,"value":1692},{"type":34,"tag":101,"props":2116,"children":2117},{},[2118,2120,2126],{"type":39,"value":2119},"Row actions, per Mark's notes. \"make the icon larger\", then \"do we have a fat x?\": the layer has plus-fat and check-fat but no X, so the row X is now a fat X (stroke 3, round caps). It is drawn inline because the SSR icon lookup missed a newly added ",{"type":34,"tag":42,"props":2121,"children":2123},{"className":2122},[],[2124],{"type":39,"value":2125},"app\u002Fassets\u002Fsvg-icons",{"type":39,"value":2127}," file. It is a layer icon candidate for Phase 5. Sized 22 → 16 → \"14 px\". Mark: \"add a 'remove' to the left of the x\". The label sits inside the same button: \"remove\" on scope rows, \"revoke\" on exceptions (the row stays as a dimmed record), \"clear\" on an enforcement-only row.",{"type":34,"tag":101,"props":2129,"children":2130},{},[2131,2133,2139],{"type":39,"value":2132},"Mark asked twice what \"Effective for a person\" was for, then: \"let's remove it\". The probe is gone from ",{"type":34,"tag":42,"props":2134,"children":2136},{"className":2135},[],[2137],{"type":39,"value":2138},"PolicyScope",{"type":39,"value":2140},", along with its state and imports. The question it answered belongs to a finding (S1 Why it violates) or a person's page (\"policies that apply to this person\"), not the policy page.",{"type":34,"tag":101,"props":2142,"children":2143},{},[2144,2146,2151,2153,2159,2160,2166,2168,2173],{"type":39,"value":2145},"Overlaps → ",{"type":34,"tag":105,"props":2147,"children":2148},{},[2149],{"type":39,"value":2150},"D9",{"type":39,"value":2152}," (Decisions). The Overlaps callout is gone from Scope + enforcement. A D9 tie now reads on both rows: \"stricter than Environment: Production · wins for 1 person\" and \"Device group: Production Macs is stricter · overrides this for 1 person\". The policy knob gained P-PROVIDERS (the fixture's tie). The model page shows D9 as a fourth ruling, and its probe explains the tie. The record page's empty ",{"type":34,"tag":42,"props":2154,"children":2156},{"className":2155},[],[2157],{"type":39,"value":2158},"Applicability",{"type":39,"value":2053},{"type":34,"tag":42,"props":2161,"children":2163},{"className":2162},[],[2164],{"type":39,"value":2165},"outranked: []",{"type":39,"value":2167},". S6.2 is ruled moot in ",{"type":34,"tag":42,"props":2169,"children":2171},{"className":2170},[],[2172],{"type":39,"value":1659},{"type":39,"value":317},{"type":34,"tag":101,"props":2175,"children":2176},{},[2177,2179,2185,2186,2192,2194,2200],{"type":39,"value":2178},"Mark: \"let's use our standard hairline for these sections, the current one isn't dark enough\". Every section title now uses the layer's ",{"type":34,"tag":42,"props":2180,"children":2182},{"className":2181},[],[2183],{"type":39,"value":2184},".hairline",{"type":39,"value":1262},{"type":34,"tag":42,"props":2187,"children":2189},{"className":2188},[],[2190],{"type":39,"value":2191},"border-b-stroke-strong",{"type":39,"value":2193},") instead of ",{"type":34,"tag":42,"props":2195,"children":2197},{"className":2196},[],[2198],{"type":39,"value":2199},"border-stroke",{"type":39,"value":317},{"type":34,"tag":101,"props":2202,"children":2203},{},[2204,2206,2212,2214,2219,2221],{"type":39,"value":2205},"Mark: \"will you build the scrolled sticky nav in illustrator for me?\" Output: ",{"type":34,"tag":42,"props":2207,"children":2209},{"className":2208},[],[2210],{"type":39,"value":2211},"illustrator\u002Fc114-policy-detail-sticky-band.{ai,jsx}",{"type":39,"value":2213},". It is the pinned band with \"Scope + enforcement\" active: the compact 15px title row, the pill bar, and the backing strip with its bottom rule. 4 shapes, 14 text frames, no style misses, and the check image matches the page. ",{"type":34,"tag":42,"props":2215,"children":2217},{"className":2216},[],[2218],{"type":39,"value":1333},{"type":39,"value":2220}," gained two things for it:\n",{"type":34,"tag":181,"props":2222,"children":2223},{},[2224,2235],{"type":34,"tag":101,"props":2225,"children":2226},{},[2227,2233],{"type":34,"tag":42,"props":2228,"children":2230},{"className":2229},[],[2231],{"type":39,"value":2232},"--only \"sel,…\"",{"type":39,"value":2234},": keep only what sits inside those elements and fit the artboard to them, for pinned pieces with no single wrapper.",{"type":34,"tag":101,"props":2236,"children":2237},{},[2238],{"type":39,"value":2239},"Inset box-shadow rings (the c106 active pill) carried as strokes.",{"type":34,"tag":101,"props":2241,"children":2242},{},[2243,2245,2251,2253,2259],{"type":39,"value":2244},"Mark: \"let's turn off wrapping\" (the pill read \"Scope + \u002F enforcement\" in a narrow window). The layer's ",{"type":34,"tag":42,"props":2246,"children":2248},{"className":2247},[],[2249],{"type":39,"value":2250},"NavJumpPills",{"type":39,"value":2252}," pills got ",{"type":34,"tag":42,"props":2254,"children":2256},{"className":2255},[],[2257],{"type":39,"value":2258},"whitespace-nowrap",{"type":39,"value":2260}," in q-nuxt-layer. It is uncommitted and unreleased, so qdash and deploys get it with the next layer release. The design dev server already shows it, and at 900px every pill stays one line.",{"type":34,"tag":101,"props":2262,"children":2263},{},[2264,2266,2271,2273],{"type":39,"value":2265},"Mark's redraw of the pinned pill bar: \"re-do the highlighted items to look like\" (a screenshot), then \"end items should have rounded corners to match the bg\". In the layer's ",{"type":34,"tag":42,"props":2267,"children":2269},{"className":2268},[],[2270],{"type":39,"value":2250},{"type":39,"value":2272},", compact (pinned) state only:\n",{"type":34,"tag":181,"props":2274,"children":2275},{},[2276,2289,2302,2307],{"type":34,"tag":101,"props":2277,"children":2278},{},[2279,2281,2287],{"type":39,"value":2280},"The active item is a flat ",{"type":34,"tag":42,"props":2282,"children":2284},{"className":2283},[],[2285],{"type":39,"value":2286},"primary\u002F10",{"type":39,"value":2288}," block with purple text: no ring, square corners, and it fills the bar's height. All items are 12px semibold with 7px × 10px padding, so selecting never changes a width.",{"type":34,"tag":101,"props":2290,"children":2291},{},[2292,2294,2300],{"type":39,"value":2293},"The bar has no padding and clips its items (",{"type":34,"tag":42,"props":2295,"children":2297},{"className":2296},[],[2298],{"type":39,"value":2299},"overflow: hidden",{"type":39,"value":2301},"), so a first or last active item rounds with the bar's ends.",{"type":34,"tag":101,"props":2303,"children":2304},{},[2305],{"type":39,"value":2306},"Bar 32px. Checked at 2× with Scope + enforcement, Definition and History active.",{"type":34,"tag":101,"props":2308,"children":2309},{},[2310],{"type":39,"value":2311},"The rest state is unchanged. It is uncommitted and unreleased in q-nuxt-layer, together with the nowrap fix, and reaches qdash's detail pages on release.",{"type":34,"tag":101,"props":2313,"children":2314},{},[2315,2317,2323,2325,2331,2333],{"type":39,"value":2316},"Mark: \"can we populate a synthetic view with a few exceptions\". The MOCK bar gained an ",{"type":34,"tag":42,"props":2318,"children":2320},{"className":2319},[],[2321],{"type":39,"value":2322},"exceptions",{"type":39,"value":2324}," knob on S3: as is · populated (",{"type":34,"tag":42,"props":2326,"children":2328},{"className":2327},[],[2329],{"type":39,"value":2330},"?exc=many",{"type":39,"value":2332},", kept across mock links).\n",{"type":34,"tag":181,"props":2334,"children":2335},{},[2336,2357,2362,2367],{"type":34,"tag":101,"props":2337,"children":2338},{},[2339,2341,2347,2349,2355],{"type":39,"value":2340},"Populated adds ",{"type":34,"tag":42,"props":2342,"children":2344},{"className":2343},[],[2345],{"type":39,"value":2346},"withExceptions(world, policyId)",{"type":39,"value":2348}," from the fixture: six real Exception records (",{"type":34,"tag":42,"props":2350,"children":2352},{"className":2351},[],[2353],{"type":39,"value":2354},"E-DEMO-\u003Cpolicy>-n",{"type":39,"value":2356},") across team, user, agent, device-group and environment scopes. One is dated, one indefinite, one expired (amber), one revoked.",{"type":34,"tag":101,"props":2358,"children":2359},{},[2360],{"type":39,"value":2361},"The resource kind follows what the policy matches: MCP servers for P-MCP, data classes for P-SENS-SANITIZE.",{"type":34,"tag":101,"props":2363,"children":2364},{},[2365],{"type":39,"value":2366},"The page adds them to the shared world and removes them when the knob is off. Revoke works on them.",{"type":34,"tag":101,"props":2368,"children":2369},{},[2370],{"type":39,"value":2371},"Verified: P-MCP shows 8 rows, revoking GitHub MCP works, off returns to 2, and no console errors.",{"type":34,"tag":101,"props":2373,"children":2374},{},[2375,2377,2383,2385],{"type":39,"value":2376},"Mark: \"let's bring the findings table in and I don't see any reason not to duplicated the table from the findings listing page–scoped to this policy though\". It is now ",{"type":34,"tag":42,"props":2378,"children":2380},{"className":2379},[],[2381],{"type":39,"value":2382},"GovernancePartPolicyFindings",{"type":39,"value":2384}," (dp 2), seated after Frameworks with its pill.\n",{"type":34,"tag":181,"props":2386,"children":2387},{},[2388,2393,2398],{"type":34,"tag":101,"props":2389,"children":2390},{},[2391],{"type":39,"value":2392},"It duplicates S2's member table (the live qdash listing's pieces, D8), rewritten from S2's render function as a template: Severity · Finding · Subject · Detected · Status · Last event · SLA, the Adjudicate expand row with the card (subject, applies via, remediation clock and verbs, the Ignore capture, evidence | lifecycle).",{"type":34,"tag":101,"props":2394,"children":2395},{},[2396],{"type":39,"value":2397},"It has S2's Open \u002F Resolved toggles (Open by default), an open · resolved count, and \"all in Findings →\" (S2 filtered to the policy).",{"type":34,"tag":101,"props":2399,"children":2400},{},[2401],{"type":39,"value":2402},"Ignore acts at once on the shared world. Verified on P-SENS-SANITIZE: 4 open → 3 open after an Ignore, and no console errors.",{"type":34,"tag":101,"props":2404,"children":2405},{},[2406,2408],{"type":39,"value":2407},"Mark: the policy id in the crumb (\"what is that second item…\"), then \"make it so, let's also remove the definition, that will be part of the band\". The trail is now \"Policies \u002F ",{"type":34,"tag":2409,"props":2410,"children":2411},"name",{},[2412],{"type":39,"value":2413},"\", as on qdash's detail pages, and the Definition section and its pill are gone. The Band placeholder says it will carry the definition (what it tests, why it matters, what fails it, what happens on failure).",{"type":34,"tag":101,"props":2415,"children":2416},{},[2417,2419],{"type":39,"value":2418},"Mark: \"let's update the left nav to link to the pages\", then \"just link to a blank page if not exists\". Every item in the mock rail now links, including the Inventory and Organization sub-items:\n",{"type":34,"tag":181,"props":2420,"children":2421},{},[2422,2435,2476,2481],{"type":34,"tag":101,"props":2423,"children":2424},{},[2425,2427,2433],{"type":39,"value":2426},"It goes to its listing's composed mock, or to a blank page in the mock shell: ",{"type":34,"tag":42,"props":2428,"children":2430},{"className":2429},[],[2431],{"type":39,"value":2432},"\u002Fpages\u002Fphase4\u002Fmock\u002F[...slug].vue",{"type":39,"value":2434},", titled with the rail label and saying \"Not composed yet.\".",{"type":34,"tag":101,"props":2436,"children":2437},{},[2438,2440,2446,2447,2453,2454,2460,2461,2467,2468,2474],{"type":39,"value":2439},"The rail lives in ",{"type":34,"tag":42,"props":2441,"children":2443},{"className":2442},[],[2444],{"type":39,"value":2445},"governance-parts.ts",{"type":39,"value":1262},{"type":34,"tag":42,"props":2448,"children":2450},{"className":2449},[],[2451],{"type":39,"value":2452},"MOCK_NAV",{"type":39,"value":62},{"type":34,"tag":42,"props":2455,"children":2457},{"className":2456},[],[2458],{"type":39,"value":2459},"MOCK_SUBMENUS",{"type":39,"value":62},{"type":34,"tag":42,"props":2462,"children":2464},{"className":2463},[],[2465],{"type":39,"value":2466},"navSlug",{"type":39,"value":62},{"type":34,"tag":42,"props":2469,"children":2471},{"className":2470},[],[2472],{"type":39,"value":2473},"navLabel",{"type":39,"value":2475},"). Items light on an exact match, and a disclosure starts open when you're on one of its items.",{"type":34,"tag":101,"props":2477,"children":2478},{},[2479],{"type":39,"value":2480},"Composed routes win over the catch-all.",{"type":34,"tag":101,"props":2482,"children":2483},{},[2484],{"type":39,"value":2485},"Verified: 19 links, the blank page for Inventory › MCP Servers, the composed S3 page, and no console errors.",{"type":34,"tag":101,"props":2487,"children":2488},{},[2489,2491,2497,2499,2504,2505,2510],{"type":39,"value":2490},"Mark: \"let's bring in the history section–using our uxTable including header\". It is now ",{"type":34,"tag":42,"props":2492,"children":2494},{"className":2493},[],[2495],{"type":39,"value":2496},"GovernancePartPolicyHistory",{"type":39,"value":2498}," (dp 2), the last section, on ",{"type":34,"tag":42,"props":2500,"children":2502},{"className":2501},[],[2503],{"type":39,"value":1899},{"type":39,"value":1160},{"type":34,"tag":42,"props":2506,"children":2508},{"className":2507},[],[2509],{"type":39,"value":1906},{"type":39,"value":2511}," sorters: When (newest first) · By · Change · Detail · Id. A row's DOM id is its change id. Verified: P-MCP shows 5 rows, and a revoke from the Exceptions table added row 6 at the top. No console errors. Every S3 section except Band, Severity, Groups and Frameworks is now composed.",{"type":34,"tag":101,"props":2513,"children":2514},{},[2515,2517],{"type":39,"value":2516},"Groups, after a talk-through (\"talk to me about the groups section\", then \"yes, fold it in\"). The separate section would have listed the group rows Scope + enforcement already shows, so it was folded into that table:\n",{"type":34,"tag":181,"props":2518,"children":2519},{},[2520,2533,2538,2543,2555,2560],{"type":34,"tag":101,"props":2521,"children":2522},{},[2523,2525,2531],{"type":39,"value":2524},"Each group link has a hover card (",{"type":34,"tag":42,"props":2526,"children":2528},{"className":2527},[],[2529],{"type":39,"value":2530},"GovernanceMockGroupCard",{"type":39,"value":2532},", mock-local, CSS hover, a layer candidate): purpose · scope · policy count · state · the policies it bundles with this one.",{"type":34,"tag":101,"props":2534,"children":2535},{},[2536],{"type":39,"value":2537},"Groups that include the policy but assign nothing (draft, disabled, retired) show as dimmed rows: \"draft · not applied\", \"retired\".",{"type":34,"tag":101,"props":2539,"children":2540},{},[2541],{"type":39,"value":2542},"At delivery phase 3 the table lists the policy's groups as membership rows, since a group's scope arrives in phase 4.",{"type":34,"tag":101,"props":2544,"children":2545},{},[2546,2548,2554],{"type":39,"value":2547},"\"Add to group\" sits by \"Add scope\" and opens the S6 stand-in (",{"type":34,"tag":42,"props":2549,"children":2551},{"className":2550},[],[2552],{"type":39,"value":2553},"group-add",{"type":39,"value":379},{"type":34,"tag":101,"props":2556,"children":2557},{},[2558],{"type":39,"value":2559},"The Groups placeholder and its pill are gone.",{"type":34,"tag":101,"props":2561,"children":2562},{},[2563],{"type":39,"value":2564},"Verified: P-ENTERPRISE's draft and retired rows, P-MCP at dp 3, Add to group, the hover card on a real hover, and no console errors.",{"type":34,"tag":101,"props":2566,"children":2567},{},[2568,2570,2576,2578],{"type":39,"value":2569},"Group vs scope talk-through (\"what's the diff between group and scope?\", \"should they be combined?\"): a scope is a ",{"type":34,"tag":2571,"props":2572,"children":2573},"em",{},[2574],{"type":39,"value":2575},"where",{"type":39,"value":2577},", and a policy group is a named set of policies sent to a scope. Kept separate in the model. Then Mark: \"let's rename group to policy group\". It is the intents' own term, and it stops the clash with groups of people or devices (a team, a device group). Done on the composed mock:\n",{"type":34,"tag":181,"props":2579,"children":2580},{},[2581,2586,2591,2596],{"type":34,"tag":101,"props":2582,"children":2583},{},[2584],{"type":39,"value":2585},"\"Add to policy group\" and the phase 3 wording.",{"type":34,"tag":101,"props":2587,"children":2588},{},[2589],{"type":39,"value":2590},"The stand-in panel.",{"type":34,"tag":101,"props":2592,"children":2593},{},[2594],{"type":39,"value":2595},"A \"Policy group\" label on the hover card.",{"type":34,"tag":101,"props":2597,"children":2598},{},[2599],{"type":39,"value":2600},"\"Device group\" stays, since it is a scope. The record pages are untouched.",{"type":34,"tag":101,"props":2602,"children":2603},{},[2604,2606,2611],{"type":39,"value":2605},"Mark: \"should we rename the column 'Assigned by' to 'Policy Group'?\", then \"make it so\". The column is now ",{"type":34,"tag":105,"props":2607,"children":2608},{},[2609],{"type":39,"value":2610},"Policy group",{"type":39,"value":2612},". A row with no policy group shows a muted dash: \"— set on this policy\" (a direct scope) or \"— none\" (a leftover enforcement entry, still with \"clear\"). Such rows sort last on that column. Verified on P-MCP and P-PROVIDERS, with no console errors.",{"type":34,"tag":101,"props":2614,"children":2615},{},[2616,2618,2623,2625,2631,2633,2639,2641,2647,2649],{"type":39,"value":2617},"Mark: \"Let's add the findings page\". ",{"type":34,"tag":105,"props":2619,"children":2620},{},[2621],{"type":39,"value":2622},"Composed S2",{"type":39,"value":2624}," at ",{"type":34,"tag":42,"props":2626,"children":2628},{"className":2627},[],[2629],{"type":39,"value":2630},"\u002Fpages\u002Fphase4\u002Fmock\u002Ffindings",{"type":39,"value":2632}," (SURFACES S2 ",{"type":34,"tag":42,"props":2634,"children":2636},{"className":2635},[],[2637],{"type":39,"value":2638},"mock",{"type":39,"value":2640},", registry ",{"type":34,"tag":42,"props":2642,"children":2644},{"className":2643},[],[2645],{"type":39,"value":2646},"mock-findings",{"type":39,"value":2648},"), so the rail's Findings item opens it and lights.\n",{"type":34,"tag":181,"props":2650,"children":2651},{},[2652,2657,2678,2683],{"type":34,"tag":101,"props":2653,"children":2654},{},[2655],{"type":39,"value":2656},"It holds S2 in the qdash shell on the shared world: header, severity cards (past SLA fourth), the listing bar (Open \u002F Resolved, framework chips, policy \u002F team chips, search, Grouped ⇄ Individual), the grouped ledger with its policy-in-context section, and the member table. Filters ride the URL, and clear keeps the mock's knobs.",{"type":34,"tag":101,"props":2658,"children":2659},{},[2660,2662,2668,2670,2676],{"type":39,"value":2661},"The member table and adjudication card are now one shared part, ",{"type":34,"tag":42,"props":2663,"children":2665},{"className":2664},[],[2666],{"type":39,"value":2667},"GovernancePartFindingsTable",{"type":39,"value":2669}," (optional Policy column). The row model moved to ",{"type":34,"tag":42,"props":2671,"children":2673},{"className":2672},[],[2674],{"type":39,"value":2675},"app\u002Fdata\u002Fgovernance-finding-rows.ts",{"type":39,"value":2677},". S3's Findings section uses the same table.",{"type":34,"tag":101,"props":2679,"children":2680},{},[2681],{"type":39,"value":2682},"Policy links go to the composed S3. S3's \"all in Findings →\" lands here filtered to the policy. Finding ids still open the S1 record (S1 is not composed yet).",{"type":34,"tag":101,"props":2684,"children":2685},{},[2686,2688,2693],{"type":39,"value":2687},"Verified with headless Playwright, because the browser pane now refuses ",{"type":34,"tag":42,"props":2689,"children":2691},{"className":2690},[],[2692],{"type":39,"value":1993},{"type":39,"value":2694},", which another chat's server owns: rail link and lit state, cards 5 high · 4 past SLA, 2 groups, group expand → Adjudicate card, the Individual view with Policy, S3 → filtered (16 of 19), and no console or hydration errors.",{"type":34,"tag":101,"props":2696,"children":2697},{},[2698,2700,2706],{"type":39,"value":2699},"Mark: \"let's lose the high \u002F medium \u002F low bar\". The composed Findings page dropped its four severity cards (high · medium · low · past SLA) and the ",{"type":34,"tag":42,"props":2701,"children":2703},{"className":2702},[],[2704],{"type":39,"value":2705},"?sev=",{"type":39,"value":2707}," filter they drove. Severity still reads in each group row and each finding, and past SLA in the group's count. Verified headlessly with no console errors. The S2 record keeps its cards.",{"type":34,"tag":101,"props":2709,"children":2710},{},[2711,2713,2718],{"type":39,"value":2712},"Mark: \"rename grouped -> Group by policy\". The view switch on the composed Findings page now reads ",{"type":34,"tag":105,"props":2714,"children":2715},{},[2716],{"type":39,"value":2717},"Group by policy",{"type":39,"value":2719}," · Individual.",{"type":34,"tag":101,"props":2721,"children":2722},{},[2723,2725,2731],{"type":39,"value":2724},"Search, after \"what's the filter do?\": two text searches overlapped (the \"filter findings…\" box above the table, and the ledger's \"Policy + Findings\" header search on policy names). Mark: \"remove the other one not attached to the table\". The box is gone. The header search now carries the broad match (id · policy · resource · user · team · harness) through ",{"type":34,"tag":42,"props":2726,"children":2728},{"className":2727},[],[2729],{"type":39,"value":2730},"?q=",{"type":39,"value":2732},"; \"priya\" gives 4 of 19. It exists in the Group-by-policy view only.",{"type":34,"tag":101,"props":2734,"children":2735},{},[2736],{"type":39,"value":2737},"Mark: \"let's remove : 5 of 19 findings · 2 policies\". The count is gone, and the view switch sits at the bar's right edge. Verified headlessly with no console errors.",{"type":34,"tag":101,"props":2739,"children":2740},{},[2741,2743,2748,2750,2756],{"type":39,"value":2742},"Mark: \"add ... overflow to the finding titles\". In the Individual view the Finding column was squeezed and titles ran into Policy: the inner row's 180px minimum overflowed a narrower cell, and the title couldn't shrink in its flex row. In the shared ",{"type":34,"tag":42,"props":2744,"children":2746},{"className":2745},[],[2747],{"type":39,"value":2667},{"type":39,"value":2749}," the row is now ",{"type":34,"tag":42,"props":2751,"children":2753},{"className":2752},[],[2754],{"type":39,"value":2755},"min-w-0",{"type":39,"value":2757}," and the title truncates with … (full text on hover). A 200px cell minimum was tried, then dropped: \"let's do truncation instead of forcing width\". Checked at 1440 and 1100 and on S3, with no console errors.",{"type":34,"tag":101,"props":2759,"children":2760},{},[2761,2763,2768,2770,2776],{"type":39,"value":2762},"Mark: \"let's lose the adjudicate column\". The shared ",{"type":34,"tag":42,"props":2764,"children":2766},{"className":2765},[],[2767],{"type":39,"value":2667},{"type":39,"value":2769}," dropped its Adjudicate \u002F Close button column (and the label CSS). The row itself opens the adjudication card, as ",{"type":34,"tag":42,"props":2771,"children":2773},{"className":2772},[],[2774],{"type":39,"value":2775},"UxTableListExpandRow",{"type":39,"value":2777}," toggles on row click. Verified on both pages: columns end at SLA, and a click on F-S01 opens its card.",{"type":34,"tag":101,"props":2779,"children":2780},{},[2781,2783,2795,2797,2803,2805,2810,2811,2817,2819],{"type":39,"value":2782},"Mark: \"let's copy the policies listing pages from the live app\". ",{"type":34,"tag":105,"props":2784,"children":2785},{},[2786,2788,2793],{"type":39,"value":2787},"The live qdash ",{"type":34,"tag":42,"props":2789,"children":2791},{"className":2790},[],[2792],{"type":39,"value":68},{"type":39,"value":2794}," page (its \"Control Center\") is now copied",{"type":39,"value":2796}," to ",{"type":34,"tag":42,"props":2798,"children":2800},{"className":2799},[],[2801],{"type":39,"value":2802},"\u002Fpages\u002Fphase4\u002Fmock\u002Fpolicies",{"type":39,"value":2804}," (SURFACES S4 ",{"type":34,"tag":42,"props":2806,"children":2808},{"className":2807},[],[2809],{"type":39,"value":2638},{"type":39,"value":2640},{"type":34,"tag":42,"props":2812,"children":2814},{"className":2813},[],[2815],{"type":39,"value":2816},"mock-policies",{"type":39,"value":2818},"), so the rail's Policies item opens it.\n",{"type":34,"tag":181,"props":2820,"children":2821},{},[2822,2869,2889,2953,2958],{"type":34,"tag":101,"props":2823,"children":2824},{},[2825,2827,2833,2834,2840,2841,2847,2848,2854,2855,2861,2862,2868],{"type":39,"value":2826},"The four fed components are copied with their markup unchanged into ",{"type":34,"tag":42,"props":2828,"children":2830},{"className":2829},[],[2831],{"type":39,"value":2832},"app\u002Fcomponents\u002Fgovernance\u002Flive\u002F",{"type":39,"value":1262},{"type":34,"tag":42,"props":2835,"children":2837},{"className":2836},[],[2838],{"type":39,"value":2839},"ControlsFrameworks",{"type":39,"value":62},{"type":34,"tag":42,"props":2842,"children":2844},{"className":2843},[],[2845],{"type":39,"value":2846},"ControlsPolicies",{"type":39,"value":62},{"type":34,"tag":42,"props":2849,"children":2851},{"className":2850},[],[2852],{"type":39,"value":2853},"PolicyConfig",{"type":39,"value":62},{"type":34,"tag":42,"props":2856,"children":2858},{"className":2857},[],[2859],{"type":39,"value":2860},"ControlsCustom",{"type":39,"value":62},{"type":34,"tag":42,"props":2863,"children":2865},{"className":2864},[],[2866],{"type":39,"value":2867},"ControlsEvidence",{"type":39,"value":379},{"type":34,"tag":101,"props":2870,"children":2871},{},[2872,2874,2880,2881,2887],{"type":39,"value":2873},"Only qdash-specific pieces were swapped: the P10 served-egress branch, ",{"type":34,"tag":42,"props":2875,"children":2877},{"className":2876},[],[2878],{"type":39,"value":2879},"StateEmpty",{"type":39,"value":77},{"type":34,"tag":42,"props":2882,"children":2884},{"className":2883},[],[2885],{"type":39,"value":2886},"Panel",{"type":39,"value":2888}," (inlined). The API-wired control editor and the Govern sheet are not copied.",{"type":34,"tag":101,"props":2890,"children":2891},{},[2892,2898,2900,2906,2908],{"type":34,"tag":42,"props":2893,"children":2895},{"className":2894},[],[2896],{"type":39,"value":2897},"app\u002Fcomposables\u002FuseControlCenterMock.ts",{"type":39,"value":2899}," re-sources the live ",{"type":34,"tag":42,"props":2901,"children":2903},{"className":2902},[],[2904],{"type":39,"value":2905},"useControlCenter",{"type":39,"value":2907}," on the shared world:\n",{"type":34,"tag":181,"props":2909,"children":2910},{},[2911,2923,2948],{"type":34,"tag":101,"props":2912,"children":2913},{},[2914,2916,2921],{"type":39,"value":2915},"the frameworks strip comes from tracked frameworks and their mapped policies (activate is ",{"type":34,"tag":42,"props":2917,"children":2919},{"className":2918},[],[2920],{"type":39,"value":801},{"type":39,"value":2922},");",{"type":34,"tag":101,"props":2924,"children":2925},{},[2926,2928,2933,2935,2940,2942,2947],{"type":39,"value":2927},"the policy rows come from the fixture's 19 policies by category, with effective severity, mapped frameworks, the G7 configs (edits are ",{"type":34,"tag":42,"props":2929,"children":2931},{"className":2930},[],[2932],{"type":39,"value":1577},{"type":39,"value":2934},") and live exceptions (remove is ",{"type":34,"tag":42,"props":2936,"children":2938},{"className":2937},[],[2939],{"type":39,"value":2066},{"type":39,"value":2941},", add is ",{"type":34,"tag":42,"props":2943,"children":2945},{"className":2944},[],[2946],{"type":39,"value":2059},{"type":39,"value":2922},{"type":34,"tag":101,"props":2949,"children":2950},{},[2951],{"type":39,"value":2952},"on \u002F off stays the live app's browser-local activation, a mock-wide map first set from whether the policy applies anywhere. The model would derive State from scope instead (review S3.1), so this page reintroduces the toggle the S4 record retired.",{"type":34,"tag":101,"props":2954,"children":2955},{},[2956],{"type":39,"value":2957},"\"Full details →\" opens the composed S3.",{"type":34,"tag":101,"props":2959,"children":2960},{},[2961],{"type":39,"value":2962},"Verified headlessly: OWASP 88% (14 \u002F 16), 9 categories over 19 policies, toggling Unsanctioned MCP gives 1 of 3 active and OWASP 81% with a Required gap, the row opens its sanctioned-servers editor, and no console errors.",{"type":34,"tag":101,"props":2964,"children":2965},{},[2966,2968,2979,2980,2986,2988,2994,2995,3001,3003],{"type":39,"value":2967},"Mark: \"Yes, copy the live Compliance page into the mock the same way\". ",{"type":34,"tag":105,"props":2969,"children":2970},{},[2971,2972,2977],{"type":39,"value":2787},{"type":34,"tag":42,"props":2973,"children":2975},{"className":2974},[],[2976],{"type":39,"value":75},{"type":39,"value":2978}," page is now copied",{"type":39,"value":2796},{"type":34,"tag":42,"props":2981,"children":2983},{"className":2982},[],[2984],{"type":39,"value":2985},"\u002Fpages\u002Fphase4\u002Fmock\u002Fcompliance",{"type":39,"value":2987}," (SURFACES ",{"type":34,"tag":42,"props":2989,"children":2991},{"className":2990},[],[2992],{"type":39,"value":2993},"S4f",{"type":39,"value":2640},{"type":34,"tag":42,"props":2996,"children":2998},{"className":2997},[],[2999],{"type":39,"value":3000},"mock-compliance",{"type":39,"value":3002},"), so the rail's Compliance item opens it.\n",{"type":34,"tag":181,"props":3004,"children":3005},{},[3006,3090,3138,3143],{"type":34,"tag":101,"props":3007,"children":3008},{},[3009,3011,3017,3018,3024,3025,3031,3032,3038,3039,3045,3046,3052,3054,3060,3061,3067,3068,3073,3075,3081,3083,3089],{"type":39,"value":3010},"The seven components are copied with their markup unchanged into ",{"type":34,"tag":42,"props":3012,"children":3014},{"className":3013},[],[3015],{"type":39,"value":3016},"governance\u002Flive\u002F",{"type":39,"value":1391},{"type":34,"tag":42,"props":3019,"children":3021},{"className":3020},[],[3022],{"type":39,"value":3023},"ComplianceAttention",{"type":39,"value":62},{"type":34,"tag":42,"props":3026,"children":3028},{"className":3027},[],[3029],{"type":39,"value":3030},"ComplianceFrameworksListing",{"type":39,"value":62},{"type":34,"tag":42,"props":3033,"children":3035},{"className":3034},[],[3036],{"type":39,"value":3037},"ComplianceInstrumentedCards",{"type":39,"value":62},{"type":34,"tag":42,"props":3040,"children":3042},{"className":3041},[],[3043],{"type":39,"value":3044},"ComplianceProjectedCards",{"type":39,"value":62},{"type":34,"tag":42,"props":3047,"children":3049},{"className":3048},[],[3050],{"type":39,"value":3051},"ComplianceEvidenceExport",{"type":39,"value":3053},", plus qdash's lib ",{"type":34,"tag":42,"props":3055,"children":3057},{"className":3056},[],[3058],{"type":39,"value":3059},"AttentionStrip",{"type":39,"value":77},{"type":34,"tag":42,"props":3062,"children":3064},{"className":3063},[],[3065],{"type":39,"value":3066},"AttentionMessage",{"type":39,"value":2045},{"type":34,"tag":42,"props":3069,"children":3071},{"className":3070},[],[3072],{"type":39,"value":2886},{"type":39,"value":3074}," is inlined, and ",{"type":34,"tag":42,"props":3076,"children":3078},{"className":3077},[],[3079],{"type":39,"value":3080},"fmtN",{"type":39,"value":3082}," became ",{"type":34,"tag":42,"props":3084,"children":3086},{"className":3085},[],[3087],{"type":39,"value":3088},"toLocaleString",{"type":39,"value":317},{"type":34,"tag":101,"props":3091,"children":3092},{},[3093,3099,3101,3107,3108],{"type":34,"tag":42,"props":3094,"children":3096},{"className":3095},[],[3097],{"type":39,"value":3098},"app\u002Fcomposables\u002FuseComplianceMock.ts",{"type":39,"value":3100}," re-sources ",{"type":34,"tag":42,"props":3102,"children":3104},{"className":3103},[],[3105],{"type":39,"value":3106},"useCompliance",{"type":39,"value":2907},{"type":34,"tag":181,"props":3109,"children":3110},{},[3111,3123,3128,3133],{"type":34,"tag":101,"props":3112,"children":3113},{},[3114,3116,3121],{"type":39,"value":3115},"framework rows: active = tracked (activate is ",{"type":34,"tag":42,"props":3117,"children":3119},{"className":3118},[],[3120],{"type":39,"value":801},{"type":39,"value":3122},"), violations are live (open findings under the framework's mapped policies), completeness = requirements fully covered;",{"type":34,"tag":101,"props":3124,"children":3125},{},[3126],{"type":39,"value":3127},"instrumented cards for tracked frameworks, with real requirement ids as \"Controls firing\";",{"type":34,"tag":101,"props":3129,"children":3130},{},[3131],{"type":39,"value":3132},"the unmapped-findings attention chip;",{"type":34,"tag":101,"props":3134,"children":3135},{},[3136],{"type":39,"value":3137},"the live ledger's projected cards and tooltips.",{"type":34,"tag":101,"props":3139,"children":3140},{},[3141],{"type":39,"value":3142},"\"Details + Configuration\" opens the S5 surface mock, since S5 is not composed. Card links go to the composed Findings page filtered to the framework.",{"type":34,"tag":101,"props":3144,"children":3145},{},[3146],{"type":39,"value":3147},"Verified headlessly: 1 unmapped chip, OWASP active at 4 violations and 40% (4 \u002F 10), activating ISO 27001 moves it to Active with its card, and no console errors once the attention link became a string.",{"type":34,"tag":101,"props":3149,"children":3150},{},[3151],{"type":39,"value":3152},"Mark: \"let's ... the descriptions on overflow instead of wrapping\". The Control Policies Description column and the instrumented framework card's description are now one line, ending in … with the full text on hover. The framework listing already truncated.",{"type":34,"tag":101,"props":3154,"children":3155},{},[3156,3158,3164,3166,3171,3172,3178,3179,3185,3186,3192,3193,3199],{"type":39,"value":3157},"Mark: \"the add button collision\". The copied frameworks strip's \"Add Framework\" tile collapsed and overlapped \"Control Policies\" whenever it wrapped onto its own row. Its height comes from ",{"type":34,"tag":42,"props":3159,"children":3161},{"className":3160},[],[3162],{"type":39,"value":3163},"min-h-[100px]",{"type":39,"value":3165},", which the design site's Tailwind never generated from the copied file. The two min-heights are now inline styles. Checked with OWASP and ISO active at 760px: the tile is 100px and clears the heading. The other arbitrary classes in ",{"type":34,"tag":42,"props":3167,"children":3169},{"className":3168},[],[3170],{"type":39,"value":3016},{"type":39,"value":1262},{"type":34,"tag":42,"props":3173,"children":3175},{"className":3174},[],[3176],{"type":39,"value":3177},"h-[3px]",{"type":39,"value":62},{"type":34,"tag":42,"props":3180,"children":3182},{"className":3181},[],[3183],{"type":39,"value":3184},"text-[9px]",{"type":39,"value":62},{"type":34,"tag":42,"props":3187,"children":3189},{"className":3188},[],[3190],{"type":39,"value":3191},"max-w-[260px]",{"type":39,"value":62},{"type":34,"tag":42,"props":3194,"children":3196},{"className":3195},[],[3197],{"type":39,"value":3198},"max-w-[760px]",{"type":39,"value":3200},") apply.",{"type":34,"tag":101,"props":3202,"children":3203},{},[3204],{"type":39,"value":3205},"Mark: \"for policies, instead of opening in place, link to the policy details page\". The Control Policies rows are plain rows now: a click opens the composed S3 for that policy. The in-place expand (severity, config editors, exceptions, Full details) is dropped, and the lede reads \"open a row for the policy's details\". The toggle cell still only toggles. Verified: the toggle gives 2 → 1 of 3 and stays on the page, and a row click lands on S3 for P-MCP.",{"type":34,"tag":101,"props":3207,"children":3208},{},[3209,3211,3216],{"type":39,"value":3210},"Concurrently, another session reworked ",{"type":34,"tag":42,"props":3212,"children":3214},{"className":3213},[],[3215],{"type":39,"value":2138},{"type":39,"value":3217}," (Assigned by column, the level as the control, override notes, row menu; spec, people and readiness left the table).",{"type":34,"tag":101,"props":3219,"children":3220},{},[3221],{"type":39,"value":1728},{"type":34,"tag":35,"props":3223,"children":3224},{},[3225,3230,3232,3241,3243,3248,3249,3254],{"type":34,"tag":105,"props":3226,"children":3227},{},[3228],{"type":39,"value":3229},"composed S1 · Finding detail (2026-10-19):",{"type":39,"value":3231}," built from Mark's Illustrator screenshot (",{"type":34,"tag":324,"props":3233,"children":3235},{"href":3234},"illustrator\u002Fc114-s1-finding-detail-design.webp",[3236],{"type":34,"tag":42,"props":3237,"children":3239},{"className":3238},[],[3240],{"type":39,"value":3234},{"type":39,"value":3242},") and his notes: \"the table should be our uxTable with the appropriate header\", \"details strip, let's try to re-use any components like the framework item\", \"upper right–actions section … here's where the actions go\", \"session - re-use the existing transcript component\", \"related findings - related means two things here: any findings from the same session, any findings related to the same policy this finding violated\". (",{"type":34,"tag":324,"props":3244,"children":3246},{"href":3245},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fs1-composed-prompt",[3247],{"type":39,"value":1098},{"type":39,"value":695},{"type":34,"tag":324,"props":3250,"children":3252},{"href":3251},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fs1-composed-plan",[3253],{"type":39,"value":1105},{"type":39,"value":1751},{"type":34,"tag":181,"props":3256,"children":3257},{},[3258,3477,3496,3522,3541,3553],{"type":34,"tag":101,"props":3259,"children":3260},{},[3261,3272,3274],{"type":34,"tag":105,"props":3262,"children":3263},{},[3264,3270],{"type":34,"tag":42,"props":3265,"children":3267},{"className":3266},[],[3268],{"type":39,"value":3269},"\u002Fpages\u002Fphase4\u002Fmock\u002Ffinding-detail",{"type":39,"value":3271}," is composed",{"type":39,"value":3273}," on the shared world, top to bottom as drawn:\n",{"type":34,"tag":181,"props":3275,"children":3276},{},[3277,3289,3323,3328],{"type":34,"tag":101,"props":3278,"children":3279},{},[3280,3282,3287],{"type":39,"value":3281},"the crumb \"Findings \u002F\" (",{"type":34,"tag":42,"props":3283,"children":3285},{"className":3284},[],[3286],{"type":39,"value":1959},{"type":39,"value":3288},", pins in the band) over the rule;",{"type":34,"tag":101,"props":3290,"children":3291},{},[3292,3294,3300,3302,3307,3308,3314,3316,3321],{"type":39,"value":3293},"the title ",{"type":34,"tag":42,"props":3295,"children":3297},{"className":3296},[],[3298],{"type":39,"value":3299},"policy · resource",{"type":39,"value":3301}," (24px, so it fits on one line with its status pill and the actions) with ",{"type":34,"tag":105,"props":3303,"children":3304},{},[3305],{"type":39,"value":3306},"Resolve · Block · Ignore",{"type":39,"value":1262},{"type":34,"tag":42,"props":3309,"children":3311},{"className":3310},[],[3312],{"type":39,"value":3313},"UxButton kind=\"stroke\"",{"type":39,"value":3315},") at the upper right. Resolve opens the record's Create exception capture (S8b, with the derived preview), Ignore its S8 capture (duration required, reason recommended), Block an S6 stand-in. The first two act through ",{"type":34,"tag":42,"props":3317,"children":3319},{"className":3318},[],[3320],{"type":39,"value":1203},{"type":39,"value":3322},", so S2 and S3 see the result. Mark: \"there may be changes\";",{"type":34,"tag":101,"props":3324,"children":3325},{},[3326],{"type":39,"value":3327},"What happened (the evidence) and Why it violates (the policy's description), side by side over the hairline;",{"type":34,"tag":101,"props":3329,"children":3330},{},[3331,3333,3339,3340,3346,3348,3354,3356],{"type":39,"value":3332},"then four new parts, each ",{"type":34,"tag":42,"props":3334,"children":3336},{"className":3335},[],[3337],{"type":39,"value":3338},"world",{"type":39,"value":1399},{"type":34,"tag":42,"props":3341,"children":3343},{"className":3342},[],[3344],{"type":39,"value":3345},"state",{"type":39,"value":3347}," and in ",{"type":34,"tag":42,"props":3349,"children":3351},{"className":3350},[],[3352],{"type":39,"value":3353},"PARTS",{"type":39,"value":3355},":\n",{"type":34,"tag":181,"props":3357,"children":3358},{},[3359,3377,3420,3450],{"type":34,"tag":101,"props":3360,"children":3361},{},[3362,3368,3370,3375],{"type":34,"tag":42,"props":3363,"children":3365},{"className":3364},[],[3366],{"type":39,"value":3367},"GovernancePartFindingHistory",{"type":39,"value":3369},": the record's Lifecycle on ",{"type":34,"tag":42,"props":3371,"children":3373},{"className":3372},[],[3374],{"type":39,"value":1899},{"type":39,"value":3376}," with sorters, Time · Actor · What → State · Cause, oldest first. The cause's change id links to S3's History row;",{"type":34,"tag":101,"props":3378,"children":3379},{},[3380,3386,3388,3394,3396,3402,3404,3410,3412,3418],{"type":34,"tag":42,"props":3381,"children":3383},{"className":3382},[],[3384],{"type":39,"value":3385},"GovernancePartFindingDetails",{"type":39,"value":3387},": Severity (",{"type":34,"tag":42,"props":3389,"children":3391},{"className":3390},[],[3392],{"type":39,"value":3393},"SecuritySeverityTag",{"type":39,"value":3395},") · Status · User (",{"type":34,"tag":42,"props":3397,"children":3399},{"className":3398},[],[3400],{"type":39,"value":3401},"UxAvatar",{"type":39,"value":3403},") · Team · Endpoint (",{"type":34,"tag":42,"props":3405,"children":3407},{"className":3406},[],[3408],{"type":39,"value":3409},"EndpointPawn",{"type":39,"value":3411},") · Policy · Policy group(s) · Framework(s) (",{"type":34,"tag":42,"props":3413,"children":3415},{"className":3414},[],[3416],{"type":39,"value":3417},"ComplianceTag",{"type":39,"value":3419},", the framework item);",{"type":34,"tag":101,"props":3421,"children":3422},{},[3423,3429,3430,3435,3436,3441,3443,3448],{"type":34,"tag":42,"props":3424,"children":3426},{"className":3425},[],[3427],{"type":39,"value":3428},"GovernancePartFindingRelated",{"type":39,"value":1391},{"type":34,"tag":105,"props":3431,"children":3432},{},[3433],{"type":39,"value":3434},"Same session",{"type":39,"value":77},{"type":34,"tag":105,"props":3437,"children":3438},{},[3439],{"type":39,"value":3440},"Same policy",{"type":39,"value":3442},", each a compact ",{"type":34,"tag":42,"props":3444,"children":3446},{"className":3445},[],[3447],{"type":39,"value":1899},{"type":39,"value":3449}," (Severity · Finding · User · Status), five shown with the count; a row opens that finding here;",{"type":34,"tag":101,"props":3451,"children":3452},{},[3453,3459,3461,3467,3469,3475],{"type":34,"tag":42,"props":3454,"children":3456},{"className":3455},[],[3457],{"type":39,"value":3458},"GovernancePartFindingSession",{"type":39,"value":3460},": View Full Session over the layer's ",{"type":34,"tag":42,"props":3462,"children":3464},{"className":3463},[],[3465],{"type":39,"value":3466},"TranscriptPanel",{"type":39,"value":3468},". The world records sessions but not turns, so ",{"type":34,"tag":42,"props":3470,"children":3472},{"className":3471},[],[3473],{"type":39,"value":3474},"app\u002Fdata\u002Fgovernance-transcript.ts",{"type":39,"value":3476}," builds them: an opening turn, a turn per finding the session generated at its evidence moment (an MCP tool call, the pasted value masked, the account's whoami), a closing turn.",{"type":34,"tag":101,"props":3478,"children":3479},{},[3480,3482,3487,3489,3494],{"type":39,"value":3481},"Mark, mid-build: \"let's also add the policy or policy groups this violated to the details section\". Details gained ",{"type":34,"tag":105,"props":3483,"children":3484},{},[3485],{"type":39,"value":3486},"Policy",{"type":39,"value":3488}," (links to the composed S3) and ",{"type":34,"tag":105,"props":3490,"children":3491},{},[3492],{"type":39,"value":3493},"Policy group(s)",{"type":39,"value":3495},": the groups through which the policy reached this subject (its applicability paths), each with S3's group hover card, or \"none · set on the policy\" \u002F \"not in scope now\".",{"type":34,"tag":101,"props":3497,"children":3498},{},[3499,3505,3506,3512,3514,3520],{"type":34,"tag":42,"props":3500,"children":3502},{"className":3501},[],[3503],{"type":39,"value":3504},"statusLabel",{"type":39,"value":718},{"type":34,"tag":42,"props":3507,"children":3509},{"className":3508},[],[3510],{"type":39,"value":3511},"statusPill",{"type":39,"value":3513}," moved into ",{"type":34,"tag":42,"props":3515,"children":3517},{"className":3516},[],[3518],{"type":39,"value":3519},"governance-finding-rows.ts",{"type":39,"value":3521},", shared by the header and Details.",{"type":34,"tag":101,"props":3523,"children":3524},{},[3525,3527,3532,3534,3539],{"type":39,"value":3526},"The shared ",{"type":34,"tag":42,"props":3528,"children":3530},{"className":3529},[],[3531],{"type":39,"value":2667},{"type":39,"value":3533}," and the composed Findings page now open the ",{"type":34,"tag":105,"props":3535,"children":3536},{},[3537],{"type":39,"value":3538},"composed",{"type":39,"value":3540}," S1 inside the shell, keeping the knobs (they opened the S1 record).",{"type":34,"tag":101,"props":3542,"children":3543},{},[3544,3546,3551],{"type":39,"value":3545},"Verified headlessly on ",{"type":34,"tag":42,"props":3547,"children":3549},{"className":3548},[],[3550],{"type":39,"value":1993},{"type":39,"value":3552},": F-A (resolved: enforced, four rows, F-C in the same session S-1), F-S01 (open · pending, 15 on the same policy, two policy groups), F-S04 (nine rows), F-NOPE (honest absence). Ignore on F-S01 → Resolved: ignore with a third row; Resolve on F-S03 → E-U created, Resolved: allowed; Block opens the stand-in; S3's finding rows land on the composed S1; the parts bin renders all four. No console errors.",{"type":34,"tag":101,"props":3554,"children":3555},{},[3556],{"type":39,"value":1728},{"type":34,"tag":35,"props":3558,"children":3559},{},[3560,3565,3567,3576,3578,3583,3584,3589],{"type":34,"tag":105,"props":3561,"children":3562},{},[3563],{"type":39,"value":3564},"composed S3 · overview strip, Severity, Frameworks (2026-10-19):",{"type":39,"value":3566}," Mark: \"for the policy page, let's flesh out the missing severity and frameworks sections; add an overview strip replacing the band based on the screenshot\" (",{"type":34,"tag":324,"props":3568,"children":3570},{"href":3569},"illustrator\u002Fc114-s3-overview-design.webp",[3571],{"type":34,"tag":42,"props":3572,"children":3574},{"className":3573},[],[3575],{"type":39,"value":3569},{"type":39,"value":3577},"). (",{"type":34,"tag":324,"props":3579,"children":3581},{"href":3580},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fs3-overview-prompt",[3582],{"type":39,"value":1098},{"type":39,"value":695},{"type":34,"tag":324,"props":3585,"children":3587},{"href":3586},"\u002Fcycles\u002Fdesign\u002Fc114\u002Fdoc\u002Fs3-overview-plan",[3588],{"type":39,"value":1105},{"type":39,"value":1751},{"type":34,"tag":181,"props":3591,"children":3592},{},[3593,3631,3665,3689,3721,3755,3774,3779],{"type":34,"tag":101,"props":3594,"children":3595},{},[3596,3601,3602,3608,3610,3615,3617,3622,3624,3629],{"type":34,"tag":105,"props":3597,"children":3598},{},[3599],{"type":39,"value":3600},"The overview strip replaces the Band",{"type":39,"value":1262},{"type":34,"tag":42,"props":3603,"children":3605},{"className":3604},[],[3606],{"type":39,"value":3607},"GovernancePartPolicyOverview",{"type":39,"value":3609},", above the jump pills): What it tests · Why it matters · What fails it · What happens on failure (derived from the enforcement action), then Framework(s) as ",{"type":34,"tag":42,"props":3611,"children":3613},{"className":3612},[],[3614],{"type":39,"value":3417},{"type":39,"value":3616},"s, ",{"type":34,"tag":105,"props":3618,"children":3619},{},[3620],{"type":39,"value":3621},"Organization Severity",{"type":39,"value":3623}," editable in place over \"Recommended : …\", and ",{"type":34,"tag":105,"props":3625,"children":3626},{},[3627],{"type":39,"value":3628},"Findings",{"type":39,"value":3630}," as the open count in a box, coloured and labelled by the most severe open finding (P-SENS-SANITIZE: 4 · High; P-MCP: 0 · Open).",{"type":34,"tag":101,"props":3632,"children":3633},{},[3634,3640,3642,3648,3650,3656,3658,3663],{"type":34,"tag":42,"props":3635,"children":3637},{"className":3636},[],[3638],{"type":39,"value":3639},"GovernanceMockSeverityPicker",{"type":39,"value":3641},": the severity tag with a ▾ and a native select over it. Picking the recommendation is a ",{"type":34,"tag":42,"props":3643,"children":3645},{"className":3644},[],[3646],{"type":39,"value":3647},"severity-reset",{"type":39,"value":3649},", anything else a ",{"type":34,"tag":42,"props":3651,"children":3653},{"className":3652},[],[3654],{"type":39,"value":3655},"severity-override",{"type":39,"value":3657},", through ",{"type":34,"tag":42,"props":3659,"children":3661},{"className":3660},[],[3662],{"type":39,"value":1203},{"type":39,"value":3664},". The overview and the Severity section share it, so both and History move together. It never re-evaluates (D2).",{"type":34,"tag":101,"props":3666,"children":3667},{},[3668,3673,3674,3680,3682,3687],{"type":34,"tag":105,"props":3669,"children":3670},{},[3671],{"type":39,"value":3672},"Severity",{"type":39,"value":1262},{"type":34,"tag":42,"props":3675,"children":3677},{"className":3676},[],[3678],{"type":39,"value":3679},"GovernancePartPolicySeverity",{"type":39,"value":3681},"): two ",{"type":34,"tag":42,"props":3683,"children":3685},{"className":3684},[],[3686],{"type":39,"value":1899},{"type":39,"value":3688}," rows, Qpoint recommended (definition version) and Organization (the picker, set by, when, stricter \u002F softer than recommended), with \"clear\" back to the recommendation. Under them, the open findings generated at another severity, which keep theirs.",{"type":34,"tag":101,"props":3690,"children":3691},{},[3692,3697,3698,3704,3706,3711,3713,3719],{"type":34,"tag":105,"props":3693,"children":3694},{},[3695],{"type":39,"value":3696},"Frameworks",{"type":39,"value":1262},{"type":34,"tag":42,"props":3699,"children":3701},{"className":3700},[],[3702],{"type":39,"value":3703},"GovernancePartPolicyFrameworks",{"type":39,"value":3705},"): one sortable ",{"type":34,"tag":42,"props":3707,"children":3709},{"className":3708},[],[3710],{"type":39,"value":1899},{"type":39,"value":3712}," row per mapped requirement: framework item (grey ",{"type":34,"tag":42,"props":3714,"children":3716},{"className":3715},[],[3717],{"type":39,"value":3718},"gap",{"type":39,"value":3720}," tag and a dimmed row when the framework isn't tracked) · requirement id and label (fit note on hover) · contributes (observe, or observe + enforce; + process when procedural) · shared with (the other policies mapped) · tracked · framework → (S5's surface mock).",{"type":34,"tag":101,"props":3722,"children":3723},{},[3724,3726,3732,3734,3740,3741,3746,3748,3753],{"type":39,"value":3725},"In a table column the tag's shield ",{"type":34,"tag":42,"props":3727,"children":3729},{"className":3728},[],[3730],{"type":39,"value":3731},"\u003Cimg>",{"type":39,"value":3733}," (no intrinsic width) counts as 0 at min-content, so the pill clipped by its 10px. The cell's wrapper is ",{"type":34,"tag":42,"props":3735,"children":3737},{"className":3736},[],[3738],{"type":39,"value":3739},"width: max-content",{"type":39,"value":2045},{"type":34,"tag":105,"props":3742,"children":3743},{},[3744],{"type":39,"value":3745},"Layer follow-up:",{"type":39,"value":3747}," give ",{"type":34,"tag":42,"props":3749,"children":3751},{"className":3750},[],[3752],{"type":39,"value":3417},{"type":39,"value":3754},"'s shield an explicit width.",{"type":34,"tag":101,"props":3756,"children":3757},{},[3758,3760,3766,3767,3772],{"type":39,"value":3759},"Every jump pill now points at a composed section. ",{"type":34,"tag":42,"props":3761,"children":3763},{"className":3762},[],[3764],{"type":39,"value":3765},"frameworkTags()",{"type":39,"value":3513},{"type":34,"tag":42,"props":3768,"children":3770},{"className":3769},[],[3771],{"type":39,"value":3519},{"type":39,"value":3773},", shared with S1's Details.",{"type":34,"tag":101,"props":3775,"children":3776},{},[3777],{"type":39,"value":3778},"Verified headlessly: P-MCP, P-SENS-SANITIZE, P-PROVIDERS (three OWASP requirements), P-TRANSPORT (none mapped), P-NOPE; on P-MCP, picking Medium resets, Critical overrides, clear resets, each a History row; the parts bin renders the three parts. No console errors.",{"type":34,"tag":101,"props":3780,"children":3781},{},[3782],{"type":39,"value":1728},{"type":34,"tag":35,"props":3784,"children":3785},{},[3786,3791,3793,3798,3800,3806,3808,3814],{"type":34,"tag":105,"props":3787,"children":3788},{},[3789],{"type":39,"value":3790},"c118 · the Oct 19 model in the lab (2026-10-20):",{"type":39,"value":3792}," c118 (policy structure and publishing) now draws the 2026-10-19 product session's landings in this cycle's lab: ",{"type":34,"tag":42,"props":3794,"children":3796},{"className":3795},[],[3797],{"type":39,"value":460},{"type":39,"value":3799}," runs the Oct 19 world (policy mode Off \u002F Observe \u002F Enforce, mode and advanced exceptions by org \u002F team \u002F user context with the narrowest winning, a policy snooze, resolve with a reason, no stored groups or per-scope enforcement), and ",{"type":34,"tag":42,"props":3801,"children":3803},{"className":3802},[],[3804],{"type":39,"value":3805},"C114_RULED",{"type":39,"value":3807}," keeps c114 as ruled through 2026-10-18 for the Phase 3 record pages and as the model page's alternative. The live Policies copy's toggle became a three-state Mode column. The record and the change list are in c118's ",{"type":34,"tag":324,"props":3809,"children":3811},{"href":3810},"\u002Fcycles\u002Fdesign\u002Fc118\u002Fdoc\u002Flab-plan",[3812],{"type":39,"value":3813},"lab-plan.md",{"type":39,"value":3815}," (Log); this cycle's rulings D0–D9 are unchanged.",{"key":3817,"title":3818,"empty":20,"ast":3819},"outcome","Outcome",{"type":31,"children":3820},[3821,3829,3836,3884,3894,3917,3929,3937,4034,4042,4148,4156],{"type":34,"tag":35,"props":3822,"children":3823},{},[3824],{"type":34,"tag":2571,"props":3825,"children":3826},{},[3827],{"type":39,"value":3828},"(at completion)",{"type":34,"tag":3830,"props":3831,"children":3833},"h3",{"id":3832},"product-session-decisions",[3834],{"type":39,"value":3835},"Product-session decisions",{"type":34,"tag":35,"props":3837,"children":3838},{},[3839],{"type":34,"tag":2571,"props":3840,"children":3841},{},[3842,3844,3850,3852,3858,3860,3866,3868,3874,3876,3882],{"type":39,"value":3843},"What the Qpoint Product sessions did to this cycle's object model, as of 2026-10-26. The cycle is still open, so this records the model's movement, not the cycle's result. Attendees: Mark Parson, Mark Peterson (advisor), Rob Genova, Tyler Flint. Transcripts are extracted in market-analyst: ",{"type":34,"tag":42,"props":3845,"children":3847},{"className":3846},[],[3848],{"type":39,"value":3849},"f06500e3",{"type":39,"value":3851}," (2026-10-12), ",{"type":34,"tag":42,"props":3853,"children":3855},{"className":3854},[],[3856],{"type":39,"value":3857},"04e3d850",{"type":39,"value":3859}," (10-14), ",{"type":34,"tag":42,"props":3861,"children":3863},{"className":3862},[],[3864],{"type":39,"value":3865},"154b2679",{"type":39,"value":3867}," (10-19), ",{"type":34,"tag":42,"props":3869,"children":3871},{"className":3870},[],[3872],{"type":39,"value":3873},"5c8785e2",{"type":39,"value":3875}," (10-21), ",{"type":34,"tag":42,"props":3877,"children":3879},{"className":3878},[],[3880],{"type":39,"value":3881},"5b4bae13",{"type":39,"value":3883}," (10-23). Status words: ruled, direction, open, superseded. A later session wins over an earlier one.",{"type":34,"tag":35,"props":3885,"children":3886},{},[3887,3892],{"type":34,"tag":105,"props":3888,"children":3889},{},[3890],{"type":39,"value":3891},"The story.",{"type":39,"value":3893}," This cycle read fourteen intents as one object model: Policy, Scope, Policy Group, Exception, Enforcement State, Finding. It drew that model across eight surfaces. Over two weeks of sessions the model got smaller.",{"type":34,"tag":181,"props":3895,"children":3896},{},[3897,3902,3907,3912],{"type":34,"tag":101,"props":3898,"children":3899},{},[3900],{"type":39,"value":3901},"Scope and Policy Group stopped being objects.",{"type":34,"tag":101,"props":3903,"children":3904},{},[3905],{"type":39,"value":3906},"Enforcement moved from a policy × scope table to a mode on the policy.",{"type":34,"tag":101,"props":3908,"children":3909},{},[3910],{"type":39,"value":3911},"Exceptions became the only way to vary a policy.",{"type":34,"tag":101,"props":3913,"children":3914},{},[3915],{"type":39,"value":3916},"Ignore and Block left the finding.",{"type":34,"tag":35,"props":3918,"children":3919},{},[3920,3922,3927],{"type":39,"value":3921},"c118 and c121 built each step in this cycle's lab, so the lab now runs a model this cycle's ",{"type":34,"tag":42,"props":3923,"children":3925},{"className":3924},[],[3926],{"type":39,"value":212},{"type":39,"value":3928}," doesn't describe. That document still reads as of 2026-10-09.",{"type":34,"tag":35,"props":3930,"children":3931},{},[3932],{"type":34,"tag":105,"props":3933,"children":3934},{},[3935],{"type":39,"value":3936},"This cycle's rulings, and what became of them",{"type":34,"tag":181,"props":3938,"children":3939},{},[3940,3950,3960,3970,3987,4004,4014,4024],{"type":34,"tag":101,"props":3941,"children":3942},{},[3943,3948],{"type":34,"tag":105,"props":3944,"children":3945},{},[3946],{"type":39,"value":3947},"D0 Model first.",{"type":39,"value":3949}," Stands. The sessions argued about the model before any page.",{"type":34,"tag":101,"props":3951,"children":3952},{},[3953,3958],{"type":34,"tag":105,"props":3954,"children":3955},{},[3956],{"type":39,"value":3957},"D1 Scope precedence by specificity.",{"type":39,"value":3959}," The cascade stands as \"the narrowest context wins\" (Oct 19). It now runs among exceptions on a policy rather than among scopes.",{"type":34,"tag":101,"props":3961,"children":3962},{},[3963,3968],{"type":34,"tag":105,"props":3964,"children":3965},{},[3966],{"type":39,"value":3967},"D2 Re-evaluation is forward-only and can reopen.",{"type":39,"value":3969}," Stands. Turning a policy Off resolves its open findings as Policy Changed (c118 Q9).",{"type":34,"tag":101,"props":3971,"children":3972},{},[3973,3978,3980,3985],{"type":34,"tag":105,"props":3974,"children":3975},{},[3976],{"type":39,"value":3977},"D3 Configured vs confirmed.",{"type":39,"value":3979}," Reach stands as propagation per Policy Config version (c121 D11). ",{"type":34,"tag":2571,"props":3981,"children":3982},{},[3983],{"type":39,"value":3984},"Superseded in part:",{"type":39,"value":3986}," a finding no longer resolves \"as Enforced\". Its outcome is stamped at detection, and confirmation resolves an Observed finding \"now enforced\" (c121 D16).",{"type":34,"tag":101,"props":3988,"children":3989},{},[3990,3995,3997,4002],{"type":34,"tag":105,"props":3991,"children":3992},{},[3993],{"type":39,"value":3994},"D4 Vocabulary.",{"type":39,"value":3996}," Policy, Framework, Finding, Resolution and Exception stand. Scope is gone as an object (c118 Q2). ",{"type":34,"tag":2571,"props":3998,"children":3999},{},[4000],{"type":39,"value":4001},"Open:",{"type":39,"value":4003}," on 2026-10-23, Mark Peterson put a framework's control (and control family) above our policies, with \"control intents\" alongside them. That clashes with D4's use of Control as qdash's internal word for the rule.",{"type":34,"tag":101,"props":4005,"children":4006},{},[4007,4012],{"type":34,"tag":105,"props":4008,"children":4009},{},[4010],{"type":39,"value":4011},"D5 All eight surfaces.",{"type":39,"value":4013}," S7 Policy Group is retired into the team page's Policies section (c118 L5). S6 and S8's Ignore and Block are gone, and S3's per-scope enforcement table is retired (c118 L2).",{"type":34,"tag":101,"props":4015,"children":4016},{},[4017,4022],{"type":34,"tag":105,"props":4018,"children":4019},{},[4020],{"type":39,"value":4021},"D6 Engineering.",{"type":39,"value":4023}," On 2026-10-23, Tyler said he and Kamal are down to single-digit items on Symbiote and Qcontrol, so the backend can start soon. Configuration goes in Postgres and events in ClickHouse. The UI's job is to generate the config Qcontrol loads: datasets first, then rules.",{"type":34,"tag":101,"props":4025,"children":4026},{},[4027,4032],{"type":34,"tag":105,"props":4028,"children":4029},{},[4030],{"type":39,"value":4031},"D9 The stricter wins on ties.",{"type":39,"value":4033}," Stands for mode exceptions (c118 W.5). It's on c121's feedback list as our answer to the intent's open question.",{"type":34,"tag":35,"props":4035,"children":4036},{},[4037],{"type":34,"tag":105,"props":4038,"children":4039},{},[4040],{"type":39,"value":4041},"What the sessions settled about the model",{"type":34,"tag":181,"props":4043,"children":4044},{},[4045,4062,4076,4090,4104,4118,4132],{"type":34,"tag":101,"props":4046,"children":4047},{},[4048,4053,4055,4060],{"type":34,"tag":105,"props":4049,"children":4050},{},[4051],{"type":39,"value":4052},"Resolving a finding closes the past; preventing recurrence is the policy's job",{"type":39,"value":4054}," (Oct 12). ",{"type":34,"tag":2571,"props":4056,"children":4057},{},[4058],{"type":39,"value":4059},"Ruled.",{"type":39,"value":4061}," Resolve records a decision and never changes enforcement (Oct 23, c121 D10).",{"type":34,"tag":101,"props":4063,"children":4064},{},[4065,4070,4072],{"type":34,"tag":105,"props":4066,"children":4067},{},[4068],{"type":39,"value":4069},"One policy per area of concern.",{"type":39,"value":4071}," It holds its definition, severity, mode, exceptions and knobs (Oct 19). ",{"type":34,"tag":2571,"props":4073,"children":4074},{},[4075],{"type":39,"value":4059},{"type":34,"tag":101,"props":4077,"children":4078},{},[4079,4084,4086],{"type":34,"tag":105,"props":4080,"children":4081},{},[4082],{"type":39,"value":4083},"Mode on the policy, Off · Observe · Enforce, with an optional Until",{"type":39,"value":4085}," (Oct 19, then Oct 21). ",{"type":34,"tag":2571,"props":4087,"children":4088},{},[4089],{"type":39,"value":4059},{"type":34,"tag":101,"props":4091,"children":4092},{},[4093,4098,4100],{"type":34,"tag":105,"props":4094,"children":4095},{},[4096],{"type":39,"value":4097},"Exceptions by org, team or user",{"type":39,"value":4099}," (Oct 19). In v1 an exception changes mode only (Mark Peterson, Oct 23); exceptions that change a policy's knobs come later; device groups wait for MDM. ",{"type":34,"tag":2571,"props":4101,"children":4102},{},[4103],{"type":39,"value":4059},{"type":34,"tag":101,"props":4105,"children":4106},{},[4107,4112,4114],{"type":34,"tag":105,"props":4108,"children":4109},{},[4110],{"type":39,"value":4111},"Policy groups emerge from exceptions and are never managed",{"type":39,"value":4113}," (Oct 19, confirmed Oct 21). ",{"type":34,"tag":2571,"props":4115,"children":4116},{},[4117],{"type":39,"value":4059},{"type":34,"tag":101,"props":4119,"children":4120},{},[4121,4125,4127],{"type":34,"tag":105,"props":4122,"children":4123},{},[4124],{"type":39,"value":3696},{"type":39,"value":4126},": deferred (Oct 14), then made the entry point and the only predefined grouping (Oct 19, Oct 21). They're the subject of the 2026-10-26 session. ",{"type":34,"tag":2571,"props":4128,"children":4129},{},[4130],{"type":39,"value":4131},"Direction.",{"type":34,"tag":101,"props":4133,"children":4134},{},[4135,4140,4142,4146],{"type":34,"tag":105,"props":4136,"children":4137},{},[4138],{"type":39,"value":4139},"Inside a policy: explicit rules and implicit intent questions",{"type":39,"value":4141}," (Oct 23). Explicit means conditions and operator-defined lists. Implicit means questions judged at run time, each with a probability threshold and the context it needs. ",{"type":34,"tag":2571,"props":4143,"children":4144},{},[4145],{"type":39,"value":4131},{"type":39,"value":4147}," Neither this cycle's model nor the intents have this layer yet.",{"type":34,"tag":35,"props":4149,"children":4150},{},[4151],{"type":34,"tag":105,"props":4152,"children":4153},{},[4154],{"type":39,"value":4155},"Superseded by the sessions",{"type":34,"tag":181,"props":4157,"children":4158},{},[4159,4169,4179,4189],{"type":34,"tag":101,"props":4160,"children":4161},{},[4162,4167],{"type":34,"tag":105,"props":4163,"children":4164},{},[4165],{"type":39,"value":4166},"Policy groups mapped to teams as the core organizing model, with policies also assignable to a team directly",{"type":39,"value":4168}," (Oct 14). Gone on Oct 19.",{"type":34,"tag":101,"props":4170,"children":4171},{},[4172,4177],{"type":34,"tag":105,"props":4173,"children":4174},{},[4175],{"type":39,"value":4176},"Exceptions deferred past the private beta",{"type":39,"value":4178}," (Oct 14, open). Instead they became the only nuance mechanism (Oct 19).",{"type":34,"tag":101,"props":4180,"children":4181},{},[4182,4187],{"type":34,"tag":105,"props":4183,"children":4184},{},[4185],{"type":39,"value":4186},"Sentinel as a separate, non-deterministic layer",{"type":39,"value":4188}," (Oct 12). On Oct 19 it is the one rules engine. On Oct 23 deterministic and intent-based rules can sit in the same policy.",{"type":34,"tag":101,"props":4190,"children":4191},{},[4192,4197],{"type":34,"tag":105,"props":4193,"children":4194},{},[4195],{"type":39,"value":4196},"Ignore on a finding, with a required duration (§5).",{"type":39,"value":4198}," It became a snooze on the policy (Oct 19), then a mode with an Until (Oct 21).",{"key":4200,"title":4201,"empty":20,"ast":4202},"extra","Decisions",{"type":31,"children":4203},[4204],{"type":34,"tag":181,"props":4205,"children":4206},{},[4207,4217,4232,4250,4282,4292,4302,4312,4341,4388],{"type":34,"tag":101,"props":4208,"children":4209},{},[4210,4215],{"type":34,"tag":105,"props":4211,"children":4212},{},[4213],{"type":39,"value":4214},"D0 Model first (Mark, 2026-10-09).",{"type":39,"value":4216}," The intents are read for the object model and how the pieces interact, not executed one intent per page. Mocks follow from the model.",{"type":34,"tag":101,"props":4218,"children":4219},{},[4220,4225,4227],{"type":34,"tag":105,"props":4221,"children":4222},{},[4223],{"type":39,"value":4224},"D1 Scope precedence (Mark, 2026-10-09): CSS specificity.",{"type":39,"value":4226}," Global rules apply everywhere; a more specific scope (team, then user or device) overrides a broader one; an exception is a more specific allow. Proposed addendum: two assignments at equal specificity with different settings are shown as a conflict for the practitioner to resolve, never picked silently (the intents forbid silent resolution). ",{"type":34,"tag":2571,"props":4228,"children":4229},{},[4230],{"type":39,"value":4231},"(Replaced by D9, 2026-10-18.)",{"type":34,"tag":101,"props":4233,"children":4234},{},[4235,4240,4242,4248],{"type":34,"tag":105,"props":4236,"children":4237},{},[4238],{"type":39,"value":4239},"D2 Re-evaluation triggers (Mark, 2026-10-09): forward-only, can reopen.",{"type":39,"value":4241}," A change to policy, scope, group, exception or enforcement re-evaluates the open findings it touches. A finding that no longer violates resolves as ",{"type":34,"tag":42,"props":4243,"children":4245},{"className":4244},[],[4246],{"type":39,"value":4247},"Policy Changed",{"type":39,"value":4249}," with its evidence kept; a later change can reopen it with a cause. Adding scope never evaluates historical activity retroactively. Severity changes reprioritise only.",{"type":34,"tag":101,"props":4251,"children":4252},{},[4253,4258,4260,4265,4267,4272,4274,4280],{"type":34,"tag":105,"props":4254,"children":4255},{},[4256],{"type":39,"value":4257},"D3 Proof of enforcement (Mark, 2026-10-09): two states.",{"type":39,"value":4259}," Enforcement ",{"type":34,"tag":2571,"props":4261,"children":4262},{},[4263],{"type":39,"value":4264},"configured",{"type":39,"value":4266}," and enforcement ",{"type":34,"tag":2571,"props":4268,"children":4269},{},[4270],{"type":39,"value":4271},"confirmed",{"type":39,"value":4273}," are distinct. A finding resolves as ",{"type":34,"tag":42,"props":4275,"children":4277},{"className":4276},[],[4278],{"type":39,"value":4279},"Enforced",{"type":39,"value":4281}," only on confirmation (qdash observed the block, redaction or redirect). The enforcement control shows reach (\"97 of 100 devices enforcing\"), not just on\u002Foff.",{"type":34,"tag":101,"props":4283,"children":4284},{},[4285,4290],{"type":34,"tag":105,"props":4286,"children":4287},{},[4288],{"type":39,"value":4289},"D4 Vocabulary (Mark, 2026-10-09): the intents' words.",{"type":39,"value":4291}," Policy, Framework, Finding, Resolution, Scope, Exception everywhere a practitioner reads. Control stays the internal name of the executable rule in qdash.",{"type":34,"tag":101,"props":4293,"children":4294},{},[4295,4300],{"type":34,"tag":105,"props":4296,"children":4297},{},[4298],{"type":39,"value":4299},"D5 Scope and sequence (Mark, 2026-10-09).",{"type":39,"value":4301}," All eight mocks, in dependency order, Observe and Enforce together.",{"type":34,"tag":101,"props":4303,"children":4304},{},[4305,4310],{"type":34,"tag":105,"props":4306,"children":4307},{},[4308],{"type":39,"value":4309},"D6 Engineering (Mark, 2026-10-09).",{"type":39,"value":4311}," Backend work has not started; design leads and the Phase 5 gap list is engineering's first input. No fixed date.",{"type":34,"tag":101,"props":4313,"children":4314},{},[4315,4320,4322,4327,4328,4333,4334,4339],{"type":34,"tag":105,"props":4316,"children":4317},{},[4318],{"type":39,"value":4319},"D8 The model is the base; existing work is reused where it fits (Mark, 2026-10-09).",{"type":39,"value":4321}," Every surface is designed from the object model and the surface map. Where qdash or the design site already has a piece that fits that design — the findings listing's group rows, expand row, adjudication card, composable and deep links; the older ",{"type":34,"tag":42,"props":4323,"children":4325},{"className":4324},[],[4326],{"type":39,"value":68},{"type":39,"value":62},{"type":34,"tag":42,"props":4329,"children":4331},{"className":4330},[],[4332],{"type":39,"value":75},{"type":39,"value":77},{"type":34,"tag":42,"props":4335,"children":4337},{"className":4336},[],[4338],{"type":39,"value":83},{"type":39,"value":4340}," pages; the c79 \u002F c65 mocks — the piece is reused as it is rather than rebuilt. Where a piece contradicts the model (status vocabulary, the framework strip activating policies, an Ignore without a duration) it changes or retires. Each mock opens with a keep \u002F change \u002F add \u002F retire inventory of the existing pieces (S2's is in surface-map.md §5).",{"type":34,"tag":101,"props":4342,"children":4343},{},[4344,4349,4351,4357,4358,4364,4365,4371,4373,4379,4381,4386],{"type":34,"tag":105,"props":4345,"children":4346},{},[4347],{"type":39,"value":4348},"D7 Registry phase (Mark, 2026-10-09): Phase 4 — Governance.",{"type":39,"value":4350}," c114's pages live under ",{"type":34,"tag":42,"props":4352,"children":4354},{"className":4353},[],[4355],{"type":39,"value":4356},"\u002Fpages\u002Fphase4\u002F",{"type":39,"value":1262},{"type":34,"tag":42,"props":4359,"children":4361},{"className":4360},[],[4362],{"type":39,"value":4363},"PagePhase",{"type":39,"value":161},{"type":34,"tag":42,"props":4366,"children":4368},{"className":4367},[],[4369],{"type":39,"value":4370},"'phase4'",{"type":39,"value":4372},", index at ",{"type":34,"tag":42,"props":4374,"children":4376},{"className":4375},[],[4377],{"type":39,"value":4378},"app\u002Fpages\u002Fpages\u002Fphase4\u002Findex.vue",{"type":39,"value":4380},"), not ",{"type":34,"tag":42,"props":4382,"children":4384},{"className":4383},[],[4385],{"type":39,"value":227},{"type":39,"value":4387},". The model page moved there the same day.",{"type":34,"tag":101,"props":4389,"children":4390},{},[4391,4396,4398,4404,4405,4411,4413,4419,4421,4427,4428,4434],{"type":34,"tag":105,"props":4392,"children":4393},{},[4394],{"type":39,"value":4395},"D9 Equal-specificity ties (Mark, 2026-10-18): the stricter wins.",{"type":39,"value":4397}," Overlapping scopes cascade (D1: org → team → user, the more specific decides). When two scopes at the same specificity disagree (a person in two teams, two groups on one scope, a team and an agent, an environment and a device group), Enforce beats Observe. Nothing is left for an admin to resolve, so the composed S3 drops its Overlaps callout and notes a tie on the rows it touches. It replaces D1's \"show as a conflict\" addendum. In the fixture it is ",{"type":34,"tag":42,"props":4399,"children":4401},{"className":4400},[],[4402],{"type":39,"value":4403},"Rulings.d9",{"type":39,"value":1262},{"type":34,"tag":42,"props":4406,"children":4408},{"className":4407},[],[4409],{"type":39,"value":4410},"stricter-wins",{"type":39,"value":4412},", with ",{"type":34,"tag":42,"props":4414,"children":4416},{"className":4415},[],[4417],{"type":39,"value":4418},"conflict",{"type":39,"value":4420}," kept as the alternative on the model page), ",{"type":34,"tag":42,"props":4422,"children":4424},{"className":4423},[],[4425],{"type":39,"value":4426},"STRICTNESS",{"type":39,"value":77},{"type":34,"tag":42,"props":4429,"children":4431},{"className":4430},[],[4432],{"type":39,"value":4433},"Applicability.outranked",{"type":39,"value":4435},". It also settles S6.2 as moot. Mark: \"we should treat overlaps as cascading precedence. Org -> team -> user–with the right most receiving precedence\", then \"yes\" to \"ties go to the stricter\".",[4437,4441,4445,4449],{"name":4438,"prompt":4439,"plan":4440},"mocks","mocks-prompt.md","mocks-plan.md",{"name":4442,"prompt":4443,"plan":4444},"s1-composed","s1-composed-prompt.md","s1-composed-plan.md",{"name":4446,"prompt":4447,"plan":4448},"s3-composed","s3-composed-prompt.md","s3-composed-plan.md",{"name":4450,"prompt":4451,"plan":4452},"s3-overview","s3-overview-prompt.md","s3-overview-plan.md",[1080,349,212,205,4454,533],"s1-composed-pickup.md",[4456,4458,4459,4461,4463,4465,4467,4469,4471,4473,4475,4477,4479,4481],{"file":1080,"title":4457},"Pickup Note",{"file":349,"title":14},{"file":4440,"title":4460},"— Composed mocks plan",{"file":4439,"title":4462},"— Composed mocks thread prompt (2026-10-14)",{"file":212,"title":4464},"The governance object model",{"file":205,"title":4466},"plan: the governance model into the design process",{"file":4454,"title":4468},"— Pickup: compose S1 Finding detail from an Illustrator screenshot",{"file":4444,"title":4470},"— composed S1 Finding detail: the plan (2026-10-19)",{"file":4443,"title":4472},"— composed S1 Finding detail: the prompt (2026-10-19)",{"file":4448,"title":4474},"— Composed S3 plan",{"file":4447,"title":4476},"— Composed S3 thread prompt (2026-10-18)",{"file":4452,"title":4478},"— composed S3: overview strip, Severity, Frameworks — the plan (2026-10-19)",{"file":4451,"title":4480},"— composed S3: overview strip, Severity, Frameworks — the prompt (2026-10-19)",{"file":533,"title":4482},"The surface map",[4484,4495,4501,4507,4512,4520,4526,4533,4540,4548,4553,4560,4567,4574,4581,4587,4595,4601,4608,4615,4622,4629,4636,4643,4650,4657,4664,4671,4679,4686,4693,4700,4707,4714,4719,4725,4731,4737,4744,4750,4755,4760,4764,4769,4774,4779,4784,4789,4794,4799,4804,4809,4814,4819,4824,4829,4834,4839,4844,4849,4854,4859,4864,4869,4874,4879,4884,4889,4894,4899,4904,4908,4912,4916,4920,4924],{"src":4485,"kind":4486,"order":4487,"caption":4488,"thread":4489,"capturedAt":4492,"subject":484,"route":468,"evolution":4493},"\u002Fcycles\u002Fdesign\u002Fc114-governance-model.png","hero",0,"Ruled: specific wins, forward-only re-evaluation that can reopen, configured → confirmed. Finding A allowed at step 1, B pending then Enforced, C ignored until 31 Oct and back; the probe shows Priya's equal-specificity conflict",{"id":4490,"label":4491,"date":18},"phase1-model","Phase 1 — the model on a page","2026-10-09T21:48:41.321Z",{"subject":484,"moments":4494},3,{"src":4496,"kind":4486,"order":4497,"caption":4498,"thread":4499,"capturedAt":4492,"subject":484,"route":468,"evolution":4500},"\u002Fcycles\u002Fdesign\u002Fc114-governance-model-broad-wins.png",1,"D1 alternative, broad wins: the Team A exception loses to the organisation-wide assignment, so Finding A stays open and is only resolved by enforcement",{"id":4490,"label":4491,"date":18},{"subject":484,"moments":4494},{"src":4502,"kind":4486,"order":4503,"caption":4504,"thread":4505,"capturedAt":4492,"subject":484,"route":468,"evolution":4506},"\u002Fcycles\u002Fdesign\u002Fc114-governance-model-config-is-proof.png",2,"D3 alternative, config is proof: Finding B resolves as Enforced the moment the block is published, before any device confirms it",{"id":4490,"label":4491,"date":18},{"subject":484,"moments":4494},{"src":4508,"kind":4486,"order":4494,"caption":4509,"thread":4510,"capturedAt":4492,"subject":4511,"route":548},"\u002Fcycles\u002Fdesign\u002Fc114-governance-wireframes.png","Phase 2: the Govern rail today vs proposed, then S1 Finding detail as blocks — evidence above the line, the organ below, Respond as an aside with reach counts",{"id":4490,"label":4491,"date":18},"page\u002Fgovernance-wireframes",{"src":4513,"kind":4486,"order":4514,"caption":4515,"thread":4516,"capturedAt":4492,"subject":4517,"route":4518,"evolution":4519},"\u002Fcycles\u002Fdesign\u002Fc114-finding-detail.png",4,"S1 typical: F-A at the end of the Vanta story — allowed by the Team A exception, reopened when it was revoked, Enforced on confirmation; four organ rows, two related, Respond with reach counts",{"id":4490,"label":4491,"date":18},"page\u002Ffinding-detail","\u002Fpages\u002Fphase4\u002Ffinding-detail?findingId=F-A",{"subject":4517,"moments":4503},{"src":21,"kind":4486,"order":4521,"caption":4522,"thread":4523,"capturedAt":4492,"subject":4517,"route":4524,"evolution":4525},5,"S1 minimal: a sanitization finding with only its detect row; enforcement is confirmed in the scope but has not reached this device, so the finding is Open · pending (D3); 15 related",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Ffinding-detail?findingId=F-S01",{"subject":4517,"moments":4503},{"src":4527,"kind":4486,"order":4528,"caption":4529,"thread":4530,"capturedAt":4492,"subject":4517,"route":4531,"evolution":4532},"\u002Fcycles\u002Fdesign\u002Fc114-finding-detail-overflow.png",6,"S1 overflow: nine organ rows — two Ignores, an expiry, a revoke, Enforced, a reopen when GRC went back to observe, a third Ignore revoked; related shows 5 of 15 and says so",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Ffinding-detail?findingId=F-S04",{"subject":4517,"moments":4503},{"src":4534,"kind":4486,"order":4535,"caption":4536,"thread":4537,"capturedAt":4492,"subject":4517,"route":4538,"evolution":4539},"\u002Fcycles\u002Fdesign\u002Fc114-finding-detail-unknown.png",7,"S1 unknown id: honest absence, the count of findings the world knows, a way back",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Ffinding-detail?findingId=F-NOPE",{"subject":4517,"moments":4503},{"src":4541,"kind":4486,"order":4542,"caption":4543,"thread":4544,"capturedAt":4492,"subject":4545,"route":614,"evolution":4546},"\u002Fcycles\u002Fdesign\u002Fc114-findings.png",8,"S2 typical: the story’s end — 5 open findings in 2 policies, Open on by default, grouped; the Vanta policy has nothing open and is not listed, the page says so",{"id":4490,"label":4491,"date":18},"page\u002Ffindings",{"subject":4545,"moments":4547},9,{"src":4549,"kind":4486,"order":4547,"caption":4550,"thread":4551,"capturedAt":4492,"subject":4545,"route":614,"evolution":4552},"\u002Fcycles\u002Fdesign\u002Fc114-findings-expanded.png","S2 expanded: the sanitization policy open — its section (description, severity with the recommended value, counts, upcoming deadlines) over the four member rows, and the first member’s adjudication card: subject, applies via, the clock with Ignore \u002F Create exception \u002F Block, evidence beside the lifecycle",{"id":4490,"label":4491,"date":18},{"subject":4545,"moments":4547},{"src":4554,"kind":4486,"order":4555,"caption":4556,"thread":4557,"capturedAt":4492,"subject":4545,"route":4558,"evolution":4559},"\u002Fcycles\u002Fdesign\u002Fc114-findings-with-resolved.png",10,"S2 with Resolved included: the Vanta policy returns with its two enforced findings; group rows show the resolved count beside the open cells",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Ffindings?status=open,resolved",{"subject":4545,"moments":4547},{"src":4561,"kind":4486,"order":4562,"caption":4563,"thread":4564,"capturedAt":4492,"subject":4545,"route":4565,"evolution":4566},"\u002Fcycles\u002Fdesign\u002Fc114-findings-individual.png",11,"S2 Individual: the same members flat with policy as a column; the filters unchanged",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Ffindings?view=individual",{"subject":4545,"moments":4547},{"src":4568,"kind":4486,"order":4569,"caption":4570,"thread":4571,"capturedAt":4492,"subject":4545,"route":4572,"evolution":4573},"\u002Fcycles\u002Fdesign\u002Fc114-findings-filtered.png",12,"S2 filtered to nothing: the counts stay honest and clear is one click",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Ffindings?q=zzz",{"subject":4545,"moments":4547},{"src":4575,"kind":4486,"order":4576,"caption":4577,"thread":4578,"capturedAt":4492,"subject":4545,"route":4579,"evolution":4580},"\u002Fcycles\u002Fdesign\u002Fc114-findings-empty.png",13,"S2 empty: no findings at all — the all-clear with the policies still evaluating",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Ffindings?state=empty",{"subject":4545,"moments":4547},{"src":4582,"kind":4486,"order":23,"caption":4583,"thread":4584,"capturedAt":4492,"subject":4545,"route":4585,"evolution":4586},"\u002Fcycles\u002Fdesign\u002Fc114-findings-overflow.png","S2 overflow: 400 findings over eight policies, groups collapsed, harness pills capped at two plus N",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Ffindings?state=overflow",{"subject":4545,"moments":4547},{"src":4588,"kind":4486,"order":4589,"caption":4590,"thread":4591,"capturedAt":4492,"subject":4592,"route":4593,"evolution":4594},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail.png",15,"S3 typical, the Vanta policy: severity overridden to High over a Medium recommendation, three scope paths (org-wide direct, two groups), enforcement confirmed org-wide and for Finance with Engineering observed, one exception live and one revoked, the story’s four changes in History; every section tagged with its delivery phase",{"id":4490,"label":4491,"date":18},"page\u002Fpolicy-detail","\u002Fpages\u002Fphase4\u002Fpolicy-detail?policyId=P-MCP",{"subject":4592,"moments":4514},{"src":4596,"kind":4486,"order":4597,"caption":4598,"thread":4599,"capturedAt":4492,"subject":4592,"route":4593,"evolution":4600},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-sheet.png",16,"S3 with the change sheet open (S6): adding Team: Legal — the preview says who it reaches, that it broadens, who is reached twice, and that no finding changes",{"id":4490,"label":4491,"date":18},{"subject":4592,"moments":4514},{"src":4602,"kind":4486,"order":4603,"caption":4604,"thread":4605,"capturedAt":4492,"subject":4592,"route":4606,"evolution":4607},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-rich.png",17,"S3 rich: organisation-wide sanitization — enforcement confirmed on 97 of 100 devices (three behind the open findings still pending) with GRC set back to observe, 16 findings, two framework requirements, the GRC change in History",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicy-detail?policyId=P-SENS-SANITIZE",{"subject":4592,"moments":4514},{"src":4609,"kind":4486,"order":4610,"caption":4611,"thread":4612,"capturedAt":4492,"subject":4592,"route":4613,"evolution":4614},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-nowhere.png",18,"S3 applied nowhere: in the catalog, no scope, no group, no findings — State reads Not in scope and Add scope is the only door",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicy-detail?policyId=P-TRANSPORT",{"subject":4592,"moments":4514},{"src":4616,"kind":4486,"order":4617,"caption":4618,"thread":4619,"capturedAt":4492,"subject":4592,"route":4620,"evolution":4621},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-unknown.png",19,"S3 unknown id: honest absence with the catalog size and a way back",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicy-detail?policyId=P-NOPE",{"subject":4592,"moments":4514},{"src":4623,"kind":4486,"order":4624,"caption":4625,"thread":4626,"capturedAt":4492,"subject":4627,"route":777,"evolution":4628},"\u002Fcycles\u002Fdesign\u002Fc114-policies.png",20,"S4 Policies view: the catalog by category (nineteen policies, the earlier framework page’s controls included) — severity as effective with the recommended value and Reset where overridden, the Applies column (organization-wide · groups · Not in scope) with the enforcement summary, framework tags, open findings",{"id":4490,"label":4491,"date":18},"page\u002Fpolicies",{"subject":4627,"moments":4528},{"src":4630,"kind":4486,"order":4631,"caption":4632,"thread":4633,"capturedAt":4492,"subject":4627,"route":4634,"evolution":4635},"\u002Fcycles\u002Fdesign\u002Fc114-policies-by-group.png",21,"S4 Policies grouped by Policy Group: each group’s policies under its scope, then the policies in no group",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicies?groupBy=group",{"subject":4627,"moments":4528},{"src":4637,"kind":4486,"order":4638,"caption":4639,"thread":4640,"capturedAt":4492,"subject":4627,"route":4641,"evolution":4642},"\u002Fcycles\u002Fdesign\u002Fc114-policies-frameworks.png",22,"S4 Frameworks view: OWASP tracked and ISO not, each with its type, requirement count, derived coverage (fully · partially · not) and open findings through mapped policies",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicies?view=frameworks",{"subject":4627,"moments":4528},{"src":4644,"kind":4486,"order":4645,"caption":4646,"thread":4647,"capturedAt":4492,"subject":4627,"route":4648,"evolution":4649},"\u002Fcycles\u002Fdesign\u002Fc114-policies-untracked.png",23,"S4 Frameworks with none tracked: the catalog still shows what each would cover; tracking is a declaration",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicies?view=frameworks&state=untracked",{"subject":4627,"moments":4528},{"src":4651,"kind":4486,"order":4652,"caption":4653,"thread":4654,"capturedAt":4492,"subject":4627,"route":4655,"evolution":4656},"\u002Fcycles\u002Fdesign\u002Fc114-policies-groups.png",24,"S4 Groups view (S7’s list): four groups with policies, scope and population, state, enforcement summary and open findings; Legal duplicated from Finance",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicies?view=groups",{"subject":4627,"moments":4528},{"src":4658,"kind":4486,"order":4659,"caption":4660,"thread":4661,"capturedAt":4492,"subject":4627,"route":4662,"evolution":4663},"\u002Fcycles\u002Fdesign\u002Fc114-policies-filtered.png",25,"S4 filtered to nothing: the catalog size stays visible, clear is one click",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicies?q=zzz",{"subject":4627,"moments":4528},{"src":4665,"kind":4486,"order":4666,"caption":4667,"thread":4668,"capturedAt":4492,"subject":4627,"route":4669,"evolution":4670},"\u002Fcycles\u002Fdesign\u002Fc114-policies-overflow.png",26,"S4 overflow: 79 policies over nine categories, section rows carrying the in-scope count",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicies?state=overflow",{"subject":4627,"moments":4528},{"src":4672,"kind":4486,"order":4673,"caption":4674,"thread":4675,"capturedAt":4492,"subject":4676,"route":4677,"evolution":4678},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail.png",27,"S5 typical, OWASP LLM Top 10 tracked: all ten risks as the earlier page broke them down, with their fit notes — four fully addressable, six partially (injection, supply chain, poisoning, prompt leakage, vectors and misinformation need process Qpoint cannot provide); each mapped policy with capability, configuration and findings as distinct cells; the gap reasons in their own column",{"id":4490,"label":4491,"date":18},"page\u002Fframework-detail","\u002Fpages\u002Fphase4\u002Fframework-detail?frameworkId=owasp-llm",{"subject":4676,"moments":4494},{"src":4680,"kind":4486,"order":4681,"caption":4682,"thread":4683,"capturedAt":4492,"subject":4676,"route":4684,"evolution":4685},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-untracked.png",28,"S5 ISO 27001, untracked: three Annex A controls, one fully covered through three data-handling policies, one partial (access control is also procedural), one procedural only",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fframework-detail?frameworkId=iso-27001",{"subject":4676,"moments":4494},{"src":4687,"kind":4486,"order":4688,"caption":4689,"thread":4690,"capturedAt":4492,"subject":4676,"route":4691,"evolution":4692},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-gaps.png",29,"S5 SOC 2 with no mapped policies: every criterion not addressable, every one listed under Gaps",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fframework-detail?frameworkId=soc2",{"subject":4676,"moments":4494},{"src":4694,"kind":4486,"order":4695,"caption":4696,"thread":4697,"capturedAt":4492,"subject":4676,"route":4698,"evolution":4699},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-overflow.png",30,"S5 overflow: all 93 Annex A controls of ISO 27001 with the coverage filter chips; the summary band carries the counts",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fframework-detail?frameworkId=iso-27001&state=overflow",{"subject":4676,"moments":4494},{"src":4701,"kind":4486,"order":4702,"caption":4703,"thread":4704,"capturedAt":4492,"subject":4676,"route":4705,"evolution":4706},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-unknown.png",31,"S5 unknown id: honest absence with the catalog size and a way back",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fframework-detail?frameworkId=NOPE",{"subject":4676,"moments":4494},{"src":4708,"kind":4486,"order":4709,"caption":4710,"thread":4711,"capturedAt":4492,"subject":4712,"route":4713},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups.png",32,"S7 typical, Engineering AI Controls: four policies as references (three also in the baseline), enforcement decided per scope, the baseline named as the overlap with Priya reached twice and no conflict, the probe showing her policies through this group in bold, and the membership change in History",{"id":4490,"label":4491,"date":18},"page\u002Fpolicy-groups","\u002Fpages\u002Fphase4\u002Fpolicy-groups?groupId=G-ENG",{"src":4715,"kind":4486,"order":4716,"caption":4717,"thread":4718,"capturedAt":4492,"subject":4712,"route":4713},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-sheet.png",33,"S7 with the change sheet open: changing the group’s scope — who it would reach, what re-evaluates, duplicate paths and conflicts, the audit line",{"id":4490,"label":4491,"date":18},{"src":4720,"kind":4486,"order":4721,"caption":4722,"thread":4723,"capturedAt":4492,"subject":4712,"route":4724},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-draft.png",34,"S7 draft: Contractors AI Controls — three policies, a scope no one is in yet, applies nothing until Activate",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicy-groups?groupId=G-DRAFT",{"src":4726,"kind":4486,"order":4727,"caption":4728,"thread":4729,"capturedAt":4492,"subject":4712,"route":4730},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-retired.png",35,"S7 retired: the spring pilot read-only, its retirement in History, superseded by the baseline",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicy-groups?groupId=G-OLD",{"src":4732,"kind":4486,"order":4733,"caption":4734,"thread":4735,"capturedAt":4492,"subject":4712,"route":4736},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-unknown.png",36,"S7 unknown id: honest absence with the group count and a way back",{"id":4490,"label":4491,"date":18},"\u002Fpages\u002Fphase4\u002Fpolicy-groups?groupId=G-NOPE",{"src":4738,"kind":4486,"order":4739,"caption":4740,"thread":4741,"capturedAt":4492,"subject":4742,"route":1055,"evolution":4743},"\u002Fcycles\u002Fdesign\u002Fc114-review-walk.png",37,"The review walk at the start of Phase 4: no question ruled yet; progress, the rulings so far, the delivery phases, then S1 with its states, what to look for, captures and four open questions",{"id":4490,"label":4491,"date":18},"page\u002Freview-walk",{"subject":4742,"moments":4503},{"src":4745,"kind":4746,"order":4747,"thread":4748,"capturedAt":4492,"subject":484,"route":468,"evolution":4749},"\u002Fcycles\u002Fdesign\u002Fc114-governance-model-full.png","full",9000,{"id":4490,"label":4491,"date":18},{"subject":484,"moments":4494},{"src":4751,"kind":4746,"order":4752,"thread":4753,"capturedAt":4492,"subject":484,"route":468,"evolution":4754},"\u002Fcycles\u002Fdesign\u002Fc114-governance-model-broad-wins-full.png",9001,{"id":4490,"label":4491,"date":18},{"subject":484,"moments":4494},{"src":4756,"kind":4746,"order":4757,"thread":4758,"capturedAt":4492,"subject":484,"route":468,"evolution":4759},"\u002Fcycles\u002Fdesign\u002Fc114-governance-model-config-is-proof-full.png",9002,{"id":4490,"label":4491,"date":18},{"subject":484,"moments":4494},{"src":4761,"kind":4746,"order":4762,"thread":4763,"capturedAt":4492,"subject":4511,"route":548},"\u002Fcycles\u002Fdesign\u002Fc114-governance-wireframes-full.png",9003,{"id":4490,"label":4491,"date":18},{"src":4765,"kind":4746,"order":4766,"thread":4767,"capturedAt":4492,"subject":4517,"route":4518,"evolution":4768},"\u002Fcycles\u002Fdesign\u002Fc114-finding-detail-full.png",9004,{"id":4490,"label":4491,"date":18},{"subject":4517,"moments":4503},{"src":4770,"kind":4746,"order":4771,"thread":4772,"capturedAt":4492,"subject":4517,"route":4524,"evolution":4773},"\u002Fcycles\u002Fdesign\u002Fc114-finding-detail-minimal-full.png",9005,{"id":4490,"label":4491,"date":18},{"subject":4517,"moments":4503},{"src":4775,"kind":4746,"order":4776,"thread":4777,"capturedAt":4492,"subject":4517,"route":4531,"evolution":4778},"\u002Fcycles\u002Fdesign\u002Fc114-finding-detail-overflow-full.png",9006,{"id":4490,"label":4491,"date":18},{"subject":4517,"moments":4503},{"src":4780,"kind":4746,"order":4781,"thread":4782,"capturedAt":4492,"subject":4517,"route":4538,"evolution":4783},"\u002Fcycles\u002Fdesign\u002Fc114-finding-detail-unknown-full.png",9007,{"id":4490,"label":4491,"date":18},{"subject":4517,"moments":4503},{"src":4785,"kind":4746,"order":4786,"thread":4787,"capturedAt":4492,"subject":4545,"route":614,"evolution":4788},"\u002Fcycles\u002Fdesign\u002Fc114-findings-full.png",9008,{"id":4490,"label":4491,"date":18},{"subject":4545,"moments":4547},{"src":4790,"kind":4746,"order":4791,"thread":4792,"capturedAt":4492,"subject":4545,"route":614,"evolution":4793},"\u002Fcycles\u002Fdesign\u002Fc114-findings-expanded-full.png",9009,{"id":4490,"label":4491,"date":18},{"subject":4545,"moments":4547},{"src":4795,"kind":4746,"order":4796,"thread":4797,"capturedAt":4492,"subject":4545,"route":4558,"evolution":4798},"\u002Fcycles\u002Fdesign\u002Fc114-findings-with-resolved-full.png",9010,{"id":4490,"label":4491,"date":18},{"subject":4545,"moments":4547},{"src":4800,"kind":4746,"order":4801,"thread":4802,"capturedAt":4492,"subject":4545,"route":4565,"evolution":4803},"\u002Fcycles\u002Fdesign\u002Fc114-findings-individual-full.png",9011,{"id":4490,"label":4491,"date":18},{"subject":4545,"moments":4547},{"src":4805,"kind":4746,"order":4806,"thread":4807,"capturedAt":4492,"subject":4545,"route":4572,"evolution":4808},"\u002Fcycles\u002Fdesign\u002Fc114-findings-filtered-full.png",9012,{"id":4490,"label":4491,"date":18},{"subject":4545,"moments":4547},{"src":4810,"kind":4746,"order":4811,"thread":4812,"capturedAt":4492,"subject":4545,"route":4579,"evolution":4813},"\u002Fcycles\u002Fdesign\u002Fc114-findings-empty-full.png",9013,{"id":4490,"label":4491,"date":18},{"subject":4545,"moments":4547},{"src":4815,"kind":4746,"order":4816,"thread":4817,"capturedAt":4492,"subject":4545,"route":4585,"evolution":4818},"\u002Fcycles\u002Fdesign\u002Fc114-findings-overflow-full.png",9014,{"id":4490,"label":4491,"date":18},{"subject":4545,"moments":4547},{"src":4820,"kind":4746,"order":4821,"thread":4822,"capturedAt":4492,"subject":4592,"route":4593,"evolution":4823},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-full.png",9015,{"id":4490,"label":4491,"date":18},{"subject":4592,"moments":4514},{"src":4825,"kind":4746,"order":4826,"thread":4827,"capturedAt":4492,"subject":4592,"route":4593,"evolution":4828},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-sheet-full.png",9016,{"id":4490,"label":4491,"date":18},{"subject":4592,"moments":4514},{"src":4830,"kind":4746,"order":4831,"thread":4832,"capturedAt":4492,"subject":4592,"route":4606,"evolution":4833},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-rich-full.png",9017,{"id":4490,"label":4491,"date":18},{"subject":4592,"moments":4514},{"src":4835,"kind":4746,"order":4836,"thread":4837,"capturedAt":4492,"subject":4592,"route":4613,"evolution":4838},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-nowhere-full.png",9018,{"id":4490,"label":4491,"date":18},{"subject":4592,"moments":4514},{"src":4840,"kind":4746,"order":4841,"thread":4842,"capturedAt":4492,"subject":4592,"route":4620,"evolution":4843},"\u002Fcycles\u002Fdesign\u002Fc114-policy-detail-unknown-full.png",9019,{"id":4490,"label":4491,"date":18},{"subject":4592,"moments":4514},{"src":4845,"kind":4746,"order":4846,"thread":4847,"capturedAt":4492,"subject":4627,"route":777,"evolution":4848},"\u002Fcycles\u002Fdesign\u002Fc114-policies-full.png",9020,{"id":4490,"label":4491,"date":18},{"subject":4627,"moments":4528},{"src":4850,"kind":4746,"order":4851,"thread":4852,"capturedAt":4492,"subject":4627,"route":4634,"evolution":4853},"\u002Fcycles\u002Fdesign\u002Fc114-policies-by-group-full.png",9021,{"id":4490,"label":4491,"date":18},{"subject":4627,"moments":4528},{"src":4855,"kind":4746,"order":4856,"thread":4857,"capturedAt":4492,"subject":4627,"route":4641,"evolution":4858},"\u002Fcycles\u002Fdesign\u002Fc114-policies-frameworks-full.png",9022,{"id":4490,"label":4491,"date":18},{"subject":4627,"moments":4528},{"src":4860,"kind":4746,"order":4861,"thread":4862,"capturedAt":4492,"subject":4627,"route":4648,"evolution":4863},"\u002Fcycles\u002Fdesign\u002Fc114-policies-untracked-full.png",9023,{"id":4490,"label":4491,"date":18},{"subject":4627,"moments":4528},{"src":4865,"kind":4746,"order":4866,"thread":4867,"capturedAt":4492,"subject":4627,"route":4655,"evolution":4868},"\u002Fcycles\u002Fdesign\u002Fc114-policies-groups-full.png",9024,{"id":4490,"label":4491,"date":18},{"subject":4627,"moments":4528},{"src":4870,"kind":4746,"order":4871,"thread":4872,"capturedAt":4492,"subject":4627,"route":4662,"evolution":4873},"\u002Fcycles\u002Fdesign\u002Fc114-policies-filtered-full.png",9025,{"id":4490,"label":4491,"date":18},{"subject":4627,"moments":4528},{"src":4875,"kind":4746,"order":4876,"thread":4877,"capturedAt":4492,"subject":4627,"route":4669,"evolution":4878},"\u002Fcycles\u002Fdesign\u002Fc114-policies-overflow-full.png",9026,{"id":4490,"label":4491,"date":18},{"subject":4627,"moments":4528},{"src":4880,"kind":4746,"order":4881,"thread":4882,"capturedAt":4492,"subject":4676,"route":4677,"evolution":4883},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-full.png",9027,{"id":4490,"label":4491,"date":18},{"subject":4676,"moments":4494},{"src":4885,"kind":4746,"order":4886,"thread":4887,"capturedAt":4492,"subject":4676,"route":4684,"evolution":4888},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-untracked-full.png",9028,{"id":4490,"label":4491,"date":18},{"subject":4676,"moments":4494},{"src":4890,"kind":4746,"order":4891,"thread":4892,"capturedAt":4492,"subject":4676,"route":4691,"evolution":4893},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-gaps-full.png",9029,{"id":4490,"label":4491,"date":18},{"subject":4676,"moments":4494},{"src":4895,"kind":4746,"order":4896,"thread":4897,"capturedAt":4492,"subject":4676,"route":4698,"evolution":4898},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-overflow-full.png",9030,{"id":4490,"label":4491,"date":18},{"subject":4676,"moments":4494},{"src":4900,"kind":4746,"order":4901,"thread":4902,"capturedAt":4492,"subject":4676,"route":4705,"evolution":4903},"\u002Fcycles\u002Fdesign\u002Fc114-framework-detail-unknown-full.png",9031,{"id":4490,"label":4491,"date":18},{"subject":4676,"moments":4494},{"src":4905,"kind":4746,"order":4906,"thread":4907,"capturedAt":4492,"subject":4712,"route":4713},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-full.png",9032,{"id":4490,"label":4491,"date":18},{"src":4909,"kind":4746,"order":4910,"thread":4911,"capturedAt":4492,"subject":4712,"route":4713},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-sheet-full.png",9033,{"id":4490,"label":4491,"date":18},{"src":4913,"kind":4746,"order":4914,"thread":4915,"capturedAt":4492,"subject":4712,"route":4724},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-draft-full.png",9034,{"id":4490,"label":4491,"date":18},{"src":4917,"kind":4746,"order":4918,"thread":4919,"capturedAt":4492,"subject":4712,"route":4730},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-retired-full.png",9035,{"id":4490,"label":4491,"date":18},{"src":4921,"kind":4746,"order":4922,"thread":4923,"capturedAt":4492,"subject":4712,"route":4736},"\u002Fcycles\u002Fdesign\u002Fc114-policy-groups-unknown-full.png",9036,{"id":4490,"label":4491,"date":18},{"src":4925,"kind":4746,"order":4926,"thread":4927,"capturedAt":4492,"subject":4742,"route":1055,"evolution":4928},"\u002Fcycles\u002Fdesign\u002Fc114-review-walk-full.png",9037,{"id":4490,"label":4491,"date":18},{"subject":4742,"moments":4503},[],[4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954,4955,4956,4957,4958,4959,4960,4961,4962,4963],{"route":4524,"href":4524},{"route":4531,"href":4531},{"route":4538,"href":4538},{"route":4518,"href":4518},{"route":4579,"href":4579},{"route":614,"href":614},{"route":4572,"href":4572},{"route":4565,"href":4565},{"route":4585,"href":4585},{"route":4558,"href":4558},{"route":4691,"href":4691},{"route":4698,"href":4698},{"route":4705,"href":4705},{"route":4684,"href":4684},{"route":4677,"href":4677},{"route":468,"href":468},{"route":548,"href":548},{"route":4634,"href":4634},{"route":4662,"href":4662},{"route":4641,"href":4641},{"route":4655,"href":4655},{"route":4669,"href":4669},{"route":4648,"href":4648},{"route":777,"href":777},{"route":4613,"href":4613},{"route":4606,"href":4606},{"route":4593,"href":4593},{"route":4620,"href":4620},{"route":4724,"href":4724},{"route":4730,"href":4730},{"route":4713,"href":4713},{"route":4736,"href":4736},{"route":1055,"href":1055},1794599334587]