From 4691a2f40c5aad69f559e91c06e897e5385dc126 Mon Sep 17 00:00:00 2001 From: Cathryn Lavery <50469282+cathrynlavery@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:49:27 -0700 Subject: [PATCH] feat(types): ship ten editorial diagram types in one release (#118) Adds ten editorial diagram types with light, dark, and full-editorial examples; updates the taxonomy, gallery, descriptions, references, and synchronized plugin version; and adds maintainer/visual-proof contribution gates. Co-authored-by: Jacopo Vendramin --- .claude-plugin/marketplace.json | 2 +- .claude-plugin/plugin.json | 4 +- .codex-plugin/plugin.json | 6 +- .github/PULL_REQUEST_TEMPLATE.md | 19 +- .../pr-previews/editorial-diagrams-2.5.10.jpg | Bin 0 -> 321385 bytes .maintainer-policy.json | 99 ++++++ CONTRIBUTING.md | 2 +- README.md | 43 ++- commands/import-drawio.md | 2 +- commands/import-mermaid.md | 2 +- ...tic-patterns-do-not-expand-the-taxonomy.md | 6 +- docs/adr/0007-new-layout-grammars.md | 64 ++++ scripts/test-verify-motion.py | 4 +- scripts/verify-docs-sync.py | 4 +- scripts/verify-semantic-motion.py | 12 +- skills/diagram-design/SKILL.md | 46 ++- .../assets/example-db-schema-dark.html | 302 +++++++++++++++++ .../assets/example-db-schema-full.html | 305 ++++++++++++++++++ .../assets/example-db-schema.html | 302 +++++++++++++++++ .../assets/example-dependency-dark.html | 224 +++++++++++++ .../assets/example-dependency-full.html | 227 +++++++++++++ .../assets/example-dependency.html | 224 +++++++++++++ .../assets/example-deployment-dark.html | 190 +++++++++++ .../assets/example-deployment-full.html | 202 ++++++++++++ .../assets/example-deployment.html | 190 +++++++++++ .../assets/example-fishbone-dark.html | 152 +++++++++ .../assets/example-fishbone-full.html | 146 +++++++++ .../assets/example-fishbone.html | 152 +++++++++ .../assets/example-journey-dark.html | 148 +++++++++ .../assets/example-journey-full.html | 142 ++++++++ .../assets/example-journey.html | 148 +++++++++ .../assets/example-kanban-dark.html | 174 ++++++++++ .../assets/example-kanban-full.html | 178 ++++++++++ .../diagram-design/assets/example-kanban.html | 174 ++++++++++ .../assets/example-sankey-dark.html | 150 +++++++++ .../assets/example-sankey-full.html | 151 +++++++++ .../diagram-design/assets/example-sankey.html | 150 +++++++++ .../assets/example-story-map-dark.html | 184 +++++++++++ .../assets/example-story-map-full.html | 188 +++++++++++ .../assets/example-story-map.html | 184 +++++++++++ .../assets/example-uml-class-dark.html | 188 +++++++++++ .../assets/example-uml-class-full.html | 191 +++++++++++ .../assets/example-uml-class.html | 188 +++++++++++ .../assets/example-wardley-dark.html | 153 +++++++++ .../assets/example-wardley-full.html | 146 +++++++++ .../assets/example-wardley.html | 153 +++++++++ skills/diagram-design/assets/index.html | 46 ++- .../diagram-design/references/onboarding.md | 2 +- .../references/semantic-patterns.md | 2 +- .../references/type-db-schema.md | 48 +++ .../references/type-dependency.md | 44 +++ .../references/type-deployment.md | 45 +++ skills/diagram-design/references/type-er.md | 4 +- .../references/type-fishbone.md | 75 +++++ .../diagram-design/references/type-journey.md | 53 +++ .../diagram-design/references/type-kanban.md | 49 +++ .../diagram-design/references/type-sankey.md | 72 +++++ .../references/type-story-map.md | 46 +++ .../references/type-uml-class.md | 65 ++++ .../diagram-design/references/type-wardley.md | 39 +++ 60 files changed, 6453 insertions(+), 58 deletions(-) create mode 100644 .github/pr-previews/editorial-diagrams-2.5.10.jpg create mode 100644 .maintainer-policy.json create mode 100644 docs/adr/0007-new-layout-grammars.md create mode 100644 skills/diagram-design/assets/example-db-schema-dark.html create mode 100644 skills/diagram-design/assets/example-db-schema-full.html create mode 100644 skills/diagram-design/assets/example-db-schema.html create mode 100644 skills/diagram-design/assets/example-dependency-dark.html create mode 100644 skills/diagram-design/assets/example-dependency-full.html create mode 100644 skills/diagram-design/assets/example-dependency.html create mode 100644 skills/diagram-design/assets/example-deployment-dark.html create mode 100644 skills/diagram-design/assets/example-deployment-full.html create mode 100644 skills/diagram-design/assets/example-deployment.html create mode 100644 skills/diagram-design/assets/example-fishbone-dark.html create mode 100644 skills/diagram-design/assets/example-fishbone-full.html create mode 100644 skills/diagram-design/assets/example-fishbone.html create mode 100644 skills/diagram-design/assets/example-journey-dark.html create mode 100644 skills/diagram-design/assets/example-journey-full.html create mode 100644 skills/diagram-design/assets/example-journey.html create mode 100644 skills/diagram-design/assets/example-kanban-dark.html create mode 100644 skills/diagram-design/assets/example-kanban-full.html create mode 100644 skills/diagram-design/assets/example-kanban.html create mode 100644 skills/diagram-design/assets/example-sankey-dark.html create mode 100644 skills/diagram-design/assets/example-sankey-full.html create mode 100644 skills/diagram-design/assets/example-sankey.html create mode 100644 skills/diagram-design/assets/example-story-map-dark.html create mode 100644 skills/diagram-design/assets/example-story-map-full.html create mode 100644 skills/diagram-design/assets/example-story-map.html create mode 100644 skills/diagram-design/assets/example-uml-class-dark.html create mode 100644 skills/diagram-design/assets/example-uml-class-full.html create mode 100644 skills/diagram-design/assets/example-uml-class.html create mode 100644 skills/diagram-design/assets/example-wardley-dark.html create mode 100644 skills/diagram-design/assets/example-wardley-full.html create mode 100644 skills/diagram-design/assets/example-wardley.html create mode 100644 skills/diagram-design/references/type-db-schema.md create mode 100644 skills/diagram-design/references/type-dependency.md create mode 100644 skills/diagram-design/references/type-deployment.md create mode 100644 skills/diagram-design/references/type-fishbone.md create mode 100644 skills/diagram-design/references/type-journey.md create mode 100644 skills/diagram-design/references/type-kanban.md create mode 100644 skills/diagram-design/references/type-sankey.md create mode 100644 skills/diagram-design/references/type-story-map.md create mode 100644 skills/diagram-design/references/type-uml-class.md create mode 100644 skills/diagram-design/references/type-wardley.md diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index c564a39..a87f2bb 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,7 +1,7 @@ { "name": "diagram-design", "metadata": { - "description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling." + "description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, DP security matrix, sankey, fishbone, Wardley map, kanban, user journey, deployment, dependency graph, UML class, story map, or database schema diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling." }, "owner": { "name": "Cathryn Lavery" diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 383133c..0b43756 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "diagram-design", - "description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.", - "version": "2.5.6", + "description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, DP security matrix, sankey, fishbone, Wardley map, kanban, user journey, deployment, dependency graph, UML class, story map, or database schema diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.", + "version": "2.5.10", "author": { "name": "Cathryn Lavery", "url": "https://github.com/cathrynlavery" diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index aedf73f..59f8046 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "diagram-design", - "description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.", - "version": "2.5.6", + "description": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, DP security matrix, sankey, fishbone, Wardley map, kanban, user journey, deployment, dependency graph, UML class, story map, or database schema diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.", + "version": "2.5.10", "author": { "name": "Cathryn Lavery", "url": "https://github.com/cathrynlavery" @@ -26,7 +26,7 @@ "interface": { "displayName": "Diagram Design", "shortDescription": "Create editorial technical and product diagrams as standalone HTML.", - "longDescription": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.", + "longDescription": "Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, DP security matrix, Sankey, fishbone, Wardley map, kanban, user journey, deployment, dependency graph, UML class, story map, or database schema diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling.", "developerName": "Cathryn Lavery", "category": "Productivity", "capabilities": [ diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 58e3005..370d2a7 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,6 +2,22 @@ +## Visual proof + + + +| Variant | Rendered preview | +|---|---| +| Light | | +| Dark | | +| Full editorial | | + ## Validation gates @@ -19,8 +35,9 @@ - [ ] No new entries added to `scripts/lint-skin-baseline.txt` - [ ] Generated and source files are consistent (extractor ↔ verifier ↔ reference ↔ command) - [ ] Accessible SVG contract satisfied for new/changed examples +- [ ] Rendered screenshots are attached for every new/changed diagram variant, or visual proof is marked not applicable - [ ] Code of Conduct respected ## Related issues - \ No newline at end of file + diff --git a/.github/pr-previews/editorial-diagrams-2.5.10.jpg b/.github/pr-previews/editorial-diagrams-2.5.10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ec66de7a104e4ebe3132352fce9635aaaf95eba4 GIT binary patch literal 321385 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 z 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

+E#|6K$6Wh!lh#LGV%qaJ2;X1t@ zK>qM4pYJ&fxbNLaXFGPjbgjsfu$jcvqmIF`gVC^eXa0~+Mc%tl36&`Hq$q9pId}L% z9E0QJUG?;%9*}8K+N9vF_rG{krY<{Lh(~VmUO)}v>=Ou>_J=Sa^H>Rg-iImyB?^fV z7uW?RMlOm9d?dm!5t-ww)g<0(40uhfHEE7-Ep3W=DH9gE-_9?90!jW72>pHq?FUHE zi;PN6e+0;@;+8l3oD-CM6SZjS&d{d#muP>#2|uX#DWg)MyR9rqgN+{^#FfZ;_%u07O4J!@(bb{lDBlvnn zv9cKh{_7fzx~46O`?&HAlr|MUZ8|M`Q6JhIP8d=XmoFkYN2XzAfCA%1yY8kHU$Qn6J}3Qe$;AjOaKA@Aw!Yoeo06b z8}|%~^`aioP8(P{KHIx*O245nJ9-emxeK&v5H9oy6qa*LBkPrh!z?pJnd>DupmQ%b zZg%x>s$;IuCnAE9S z;EHCccSvtboYg9~*Oznq%vc+$uaKNWtEb<|!8w}-J%$y49R|+2bmC^&I&|fBoOz4K z*Tc3i<2b8rC3z9?q<>c2x}LN}{4l6irRg`(C(M;3E;WfM@)iiU6dSs#RD*Uo%}??+ zP-)M^d^otgEn$e3SP>j8oin+nogJh1_1pE3EJZl6B#gjT!;P!Y;NuM=$innP#P31s zlPp_X0br#&69p!&B=m+>wi*y8F6=nYu@2)WYkbZKGdCk-##K1>yGl@$l&;QV4qyCi zoMzx7$H0_g4b~dh*D~zS6Ul}IFkFqxcV|^jaHPg}HE@hYT92HSqQ|^~>!&slf}51l zTY2nTTT$c(;7P(_;Ycs~FU6Ay@J4{Dc>4pyg}kLt`a%-;)fla{m3No>1cUG}bPCMRkG&3eEAObjJD;MVarXhI>z*!pxif9mpyv@LZR-B@JTEuTF00 z6%c(3)TaI19N_Bq1q+H8|D6Afho6qAr6l$qP4nrk5v->uu zt_<{Z{$S=MhlJQnUDfz_>tNRcTY;r7mlpIEkVa9H)ONUZdD3#RoECDtQ1u(Q$tZEv z^vrS0Y+Vg4K4bngdo%WF%yRO!$~w~X2Jj1hy%4?|S#=adrMnmY8D07zAEH-Vy|7jFT8UR&>0*D`xprV zQVz!TbF;?){*6X|`{%*Uz53eQnq|orQ=^wT9bDm`IY)-9GRTqVfcyD2QM_$G=axa1 z&CV?L65@0fQ}eCy$;k<^u+7a~)oTiqYxah+mio#SXh*oKJR_%5uV}#(pfuYfDGdbN zgAGX>fAksw(+Zu;50$@E*FPW_#Lk7p;l|QlPx5qxRY3t_5%yzD(_Yg@Z^YnWe?BDH zV^rgSPjtWYcml#sQ4ohriGLYqmFcZ1{>r+J0-Iz5B?9HM$Tm;&fnDyhD^j-eK53A0 zz+1#T(`8wdt0Ye{w5ggKrb2#@R(xVwTv~RJGd{=XG*qZj`HmJCkaHIg0!+P5Zcyrb-A zWaQ=bYARbDkLLweagxMeiIlhW#CbFa-OHkB_-x8 z4Y(hk5U^^`Fz2U)w!-I;YwgF<{M5Sb6J+)w7+<1*d-ZEE;BG+6bMO+jm3~iqu7f7$T!KF2 zvX=GvKywgsT3PM~$Qd`|Yc2exkK$Sop6B((mX_x-{J5q0iLnweDb=T+0XbNVEpgUR zG&OI#1a=4?A2rIiv!^?aFOK;~=@V{f7_n@E);eB2s8{w`L%65ZGg}&4m6TOr%<7`W zZrIUSTV>`V(9qNe)K#DpI~-9FLV5yC*dQ=eDXT&*wQXC#0DD9kg?aD=1re3IfF!DK z@Hke^p{X?s8prZ?GZIf0-!p2CQWzusEh zMM^%m5@mH8U|xlqayW33(dOo6Cr`}=J8J}!tkh`E;RT@(e&(4Rs|OyDh^ct}dD z77CZB4pw|vBhmZcyWlRDnt*$O9E^kQ$(a9EfMZ1JN!i_HBY9@S%C=Dx;F-JdQZA8l zU(a0fV{uH_@Pc+?w_3N=ssw5~MoLC(Pxs8|^p7L8^zMtoy#=or-4y`*&Df@57#`NSM= zj@mOC8Je=w$3Pp9yBE4`h$Vn~k`iq$|{ z+iS)lIQYDfQ_>3NNKAH({BWZT^)4)|SfhbAqzj#UzRjB1%kaWd*YX(}U3?E^H;x`o z`FzrTmt43#^!e6e)EEe!)ljOwqh#BlC5`s2aTV3Y+ZdGiu5+f;Dje0I#laP)2;`oMWShg;6vc<%XE>P^`M-ddESz22gY-0@! zYlyaq)}=A?RUTgQr@e(Ws*^lEfJ{zE> z0UM-h4h`AI+tftuto$mlP}C4W$-tS9No*_79m+vhs`*U8S`W(-b4@=MnTA=MuV;?} zt#8q|+MdF9SRzK&OKxgKIVY>U5pQP;=@(q#2gSVFjpXeA%?l0Rk)WQO_uX?L1!<(R zVWe>L;+$;&Z%t-3wQa47m-nW}VbNxVFg)O^gqgW5aTJv!bAx9%XQ>#?MH&$9*56~N zMwCc6L%UNqV5B%vB!R*UX}6Z&VY#KG0gn?UpEmT(qxzfYjI?hmnQg*fFS#)KC`=Bm zj+vlSITrVf8ROfnP3T%YXR=K^-ixgYUIu!Jecsz%A-5L~(jCH)GJ-U+x~Ti&a;1S> z62};snV1+8YDnkb#j1Y1PFezJCT_-?tIJN~>_?57Xt-uy5#J5nW%qXipTAgf;{h)W zO~H7}A?h#Jp(r^}C`y!4VrSXk5zi%K@8C82&XX|ZNDV<)Z$1U9D7&4U#PHMjatR`v zwfSY71w`)Chwn8S$*i{2A-=9!xsj~B;FgH)N;s$GoS>yUs5Q274Ha^_iqZk;964n! zU>f#>um@$PGW%QX=%fR8S?=$?>P+v75+DWFm5 zEV~Y2mR$y~o&Er^qadNYf^dP=cj0VEgOlfEWunr@FeY7pW678`j&{s-m*a7z_k1UZ z_TVffq{nhTF(U4x^M*}x?2Il`YmRaab~(9*lF0Y7NgCnIEw>?knnFR|qg%HSP~AU3W>hj< zOoPW~Hm9a~cb73ZMgb|4xODkHKr(Zf^z=?peTC+6yVcbJd1)X0QEcmY8PFS(( zi0VDp+%VpXb5z+Z8tN~V>5#{xPEJcV|Csb)zIbSn9yZyP3RIWcvh2h5q>?0kOq5=X z6-x*f9m!WNx1O@hGFeTzh0!tOqJ-jMETWk8`Llz`CvL?8f*eQNQN>q}%?X(iCA6T& za5PTf-qE{rGLEze6ymbpijAR7FzLRZX4`0o+0i4c_z?(w)LY~IydQb1IxgIwpSTzE zO)1F=6Q+Q^7?aH_V-Y>0yf$)#l6VS&Cs2s#g!Qjj-)XuYC8^`+=I4hbvP5!Z4dcF7 z%6cT`%jQ*tBz<%!dpO{0mJ?Cnfqm_a`~o2V52A*H0$w~fsSJvN$CcvKeGxmIQO7<- z_+;0EP0k^?e0X_)_7&|uil_Fc9h=dpb{c2`jtMX-)Gsx&OA_g_z$baN=M!5oJ=@UD z>qjgg3S|o4zs$o)k%>JQSNk{+_ediRgk_W!hqLAgMktLqYk&_`exuWTD2%*VQr<9P zVrx_HDQ@Y4536+G5B$7PrW@>@f^2RnGz)9E&<_3q(!eUbd{@@%vE0C14^HEI+{Ym; z4aT_Oa}RPpdItG@0P;}iQYkbuBqq40Vi%K`W)WIk-(8t~wcFG}I!(~-17K(=r-FB{ z$DQeUdp^x}vkmJ9h)r75mGzVW)n+#X(8Q?5Uu;cUYrJBG(DZmzm>Yl9czLsNEd4us zOE_c+Jfm5LVFzWF%X%coi}er3rTW^v0FTliAmiOr_#sX%rsN4HH80*396`SnRRoIq zQi!5&WG?0}#h20@Gymzv&`FgG@8qJqD{-^<;t!BKkh&xfG^Hzkm81s@Ew(ZI(r+}g zM8)@$7e*zdQ;HW3g~U{HJ-g7@;xFbnQ~@MOAP{%qSqlWei<8=P*Y*RXfZ(yW)PcyW zLo;}qFHO(xG`v@fVp$c51|J%7MHI86j1HhqeCn#a#dj(ham!0}k#?+3 z_A+D?-q5J=6GB{VPScs~f!w5xJ4_{E7~alnJEY z0X!ZZ8{_o!@qoi@u8h`E(&7z9&6P?*FIiF_?k+8!F~$5OiCI)?UjHT+4DcYFmtz7U zda$#*T-f8A=AmL?1T1Otf*&Bz`$}le9>DJB^WTTVk*&u`dgTTq2p6p|+1x7jd3CEf zqCn1aL$_6R&^2m4K|0a})$JtnmRcKvYf11_r4=SFu54@qK;Th#8D2AcA+2k`3j7zm zQSIxTHA8)9Zf{?S7kE@@M~|2EG`~%WPm^g= z>oDkA?|R0~2WtDkL&;-235MV|Jsq8PT87H^r?!}o+~4G^@o|lrPbyFL+ByRFoZ2&K zS7e=jmv(JMeEaebE$;3g>*Ava}syIi(ckp+%oi6 z)x1>Sc(L2_+K~AlC7Dzf#u|#svWE*HC{^Nm?TM#I3lCQPH|d90&+ogSzqjJ0IF`j_ z4PEQey`$ne$$DuZf9XFq`a(&rufi)M#2-bC08*D$wB{S^*?RWaZ_yN!@NvJ#%5n;M z2^q>aw1=CSz2B@V&v;CsI~;pJYyMC5GWDnSmFH!irQ)uQo}m9wqdu4Ysr2CA1-APu zn;TTVsGKKN-~mxHa*uc74^_`!|0b``DFr{FB(~bG;UIVjEK`NozebiA$ojsdv4q*b zD%8RQYVs!&biKT;?I@$+E_{9~v+&qu_?!B<&nKcY4BAgWKwyKn-Z*~upcX|Z6s3+u z521z?tvyX$UCklREUMbvWZ;oiMXnc>t5{MX!N^JgKy5Y?vD$nk z2y_G2z&rk_@fy^4ryn2(di#$8la+&%Pp6 z$O>6)0b-1PB=N@w`yT{gLq>*F|0FoL#^jo@SQ9GTd49L5a#0_$A-%@AW-VY}VsM%0uu} z*uClpi0K*`-D&T0pJbbeAef{o{Z*K9)EYPKg2T- z21Z=@c74RO*yH1tpMbj>dGAZ~ds^n#W>v2Wzs>3@Og2)O8UmJ@4ci3!3dCPV)0&sT zM0t3PqNT70-qr+e#1@CzmdWsDZ_wO|A1dAJRamQi>rv9iJJ%z(IkwK9JikU@qrVFB zSN`g)_N%{WTY$7mf2m6KPbu>FGH;37fc>vV=`6*varaL2SEWT>{+t`C{@VMWH6Zg7p7s8*Kk|+xUAdf1&=XCH;@oN_!RB=dYGoTkryVG%fHH z74C23>bR2k;I?va4)!OE{z#)3*@WaP+(#;L;sOmw)XXO`A|LcPyR*dV zU!>Sb2pzN0I(NlM0Ul9C^+N%Mc2)aKF<@4zH{cpeLo?E(g>azQw5P7~NNf4EHna{o z_MXy^(2}DVDsMddW8YJ0e%iycy09k5I}^!xduhvaxj)TZK{xLW-;+cN!NDt-QRyvrzH8PNaL`!se6%Op@1+zLxh7Ie28epv1tzX zk`qaI?5<0YKdxwFIi)odKw+q)Z4w~{yk zx^phnkHF63FS|g}&{BhQNwmKb4r}cu5R*C3s#+O%m>ZJhk_nZMXOa zQXn(e5zt18!0>g3vwIOm%Zx1rzxd+;lO%2f?54YTITA2F0k1to_=l0suhi+WTY(zZ zvTva+*mL^OPzZrPJKpvwVs|Xdm~(&loIHGQ!HxMW|xZ+k|-3f*^WvskCN+D^qVC6=it0)v~n< zPDY?MQdCU@zNsD=U_ffSG^jyyjA%(tZ}S>*akbByn5X?nUb3{n{)YBu>RkBQ`b09Q z=KI+rk*yTld!i*=4~T``p)}UGniJRW$5pIM0@B2rN%$REkxVfsw#90nk<$v86LTi$ z-#kZ2@B4g#Xq!az!XUp4g9Ug?lb632X&I_M83SC?7Awri3k~QMWVu>`j@as1BS2Z> zqnK#Q#j^S`Gvh1(yAM`~wsoXGN=*sahfDpnrmM0BrmL z7~a+{9m5GzNy8vN_)+O;j1KN#GFR+3dH7H|0r>Z>*$du8;C z+o8h>%YPaz+Z!#@3FqR~vKk*=1jK~~hE7thT&3Tdv%O%eKghV$CT*!-6&DWf>8|;8 zwJjn(<`v=nd9P4(cyL%~j01ilwmYgJfRForp;=ohMA#IT=U=_ZfrdeKwqAVuf@P(V z3%?X7(sSLaO9#mHYlf-m0PiZ%%~)voMLVuOcts17Auo*^U3RH5V>nlXjuI$2YS6ha z`vf?-VBKHb53Vnf~I;)L1;^p#z;uU0)6b{d`Y zv9RInDQcpG&lKnHr?Mv878fI<;>a*wSHO{o9IT4k>HGG@WMtHWU3ibyafV10Rq&Hx z__Y%SHli%|+}e#akSb+ocjOERl)Z^uM5T$A*4tp z%M&?lgozx4p$uBpwFaR_cVfI744|NJa(XH0=T*IC1qBu6pfJQbj6e{*1Vc*An{4vL zp{U{Zl9hCDz~1^g!UUUqYjECQj*bNc@V0OC;1`va7DfuCz*WONpuJ~8(b$w~;fySr)L~|p zPxN2i{N6I>>gl^CtYQaY|3RUCH!6-M_5%YhnaHsX7`nWB&_RPqRBUj{NfdG?_T={i zENcKuZGt24r1-6NAtSwZmqlD_mbj&2A;ryTIBP}-N==E2NXv;0P5wR=Q}i6XPO!ue z5V=-F9+ywix>J(_3^Bb-Qge|0SLK|REpt*(HJ4D#Ua;_W7qDq)prH<;}uXT8oGvOV zUDxV!P9gdo+b`HS7_Oda9||kyI9jQaxqJKR*g(5eX%|Ib535hK?$n-`;QN5j+beQM z^-+_C<$(-B<3pTSMw8c0u6|dg>tj%%b81=LN^;NB=7h7Os#gwCd>%bJW0BieE_Y}Y zH6{K;>r$|cJx(jyB;}p=-UZ3M2(obdQ>RW4X4l2L*@{Vw0WtGxs2&X3$rXNps%(FT zu*@PhwR-aLwi#XiXPOZY&~C7d+Pu$e8RLbh*LO2CR3^HC4&75$;0SHfl69s^Cf0CT zAq_gwVL@hJ!vLFyM_AF9K~MFSn#^UYJfY=$H45j2bN*ZD+iG(U%2?NfcLf2;=| z^IWG_YHuf~L8BY71)7W6q5#*0S07q^4TsQ3az;$dQ(*lG&sr0U=N$Wx(kyvMGG@!+ zzKnoay;?Cr{@_J%AEMo0%1g2K!4|vCX4+N0)hFZC9PTsU50L$?A0RY^V+=)g7iwXF zj^jmoiMq5VtMi!vzgNV@M1~?V`yclO{|;f!pX%9&seGXZNXVWgi?wvxX*v>3YQ1pfF6?k~Cb^UfuZKu&_}4v!lf=8EC3RnutxRm4JKkamekkeuS+8n zwr$*}Hn_v_THH74opkx;XZx&Mhez7U8Qq2Dw-R@HI*V0Q-dXjvM_-yeO86D2uWbip z>B)p6HEfm~t|%S`O-uKBGl9XY8bF6}a5PxhK-)q(Z;xbVm?B2=QmX6SX%}h{ka;Gn z>&(rev6^LE_vBsn+Zdz{D0cNT*?{mR6;SE`iyj-8XG@&7p^+NJyszmFIPW=Ehp?n% zr#|Zex6thhu$?fO(34)VfaAxEC7n-dyX#HNHZe`xHsIe(af>sUuOzM?<;LP1*H!insoZqA5(JQjQ=9Pm2_l_}Tr=;eg2+e{B@+ zyfeASVmW=beKm1WTp-H5-sK?^d_Ps6SL6U5?;9^pWwiy}@uaKBwMR-r9XJO9DzeV= zESXzQiIC6>j)xtxla{+A8kYs})6Y#nKd;ukpbB*%lLj6?ZgEmAcwbi4l!T24DDQOa z$cYZARq0R1d4b6~b}pD9^CLlK@WoQ6*pyGlIk()J0jq=BwmtK)Mdv!z3YE|%2ZTN+ zCZ8C3aXyKVm~?-cMZL`^aDgdspTg}ph`gkEaS)Cin^Ahp7*d+9EfuIJRH#uQBUD`3RW{!dqx19g2K(eSkla0a0R)57^#LE;p#aUAj{=;0?s zxmj+a;k?i6hKMyzSl)V7B1co23Xu~%9FQvUm(1WHLsB<#-&1LO%*-B95-A-Ulc2jK zKZc>SlzxJ@Jq8Q8OfjQzq1fysPaS_qX7x7H&^nHQf}2~jp>ta-T=@@0r*RB}9@bnP zr0$b*fN!{_il~TSsOTN&&XMO}*r-qi@*N-og*{M6n;qrVNaG+o){W z%tp=9Rv5RGq=8d1PBW&4X0}!#8=x`EH8SooG^l}H!bWv3)qGr5hOr9?yOk8e-;INe z!em8nOZu$jCpF=s&ih(i@Wkwn$aYEFuUSNI2cFxDJb0|1*g*;Qv(O5*Pw2f)LJ*(b zw5spTUf}nW%l&9h)}Y0O^ABot0HY3=;FxHndR8e}IfgzfYkzH^i6NvY!^xj5TH)(( z7s)5gX4arX_7FrJIiI7S+32IQ^%&#p7zn{6a>n_u??6zOS(gLgK1R8yPv;hdI#ZZ< z7qX5d3SdEesXfO%^5V-n;x}SHlGqTc^mg4~^2sDzW0%-4_GkO0i*H{?(fz$`E_4$* zgHNf*S-BW3R3<;i`UL&VOb5yEUrP92|57#4b5-)a_leE-*1a%D-Vk!6zD{4``b=hc zeobqYZ^mv;}{YqF{5O3ibQTvtly(N5CpuYS7*=Ok%F~vV2((_KA-) zFWY<=x2*p6UjCkt+D(HQM>+U3bc1*&woGCY?CeLX>!cy7oH*2Ob}ipg zEw2)an=jN`%|Pv5{>d=;QXLs^$rq(~5dqj+WQJXxBT-K;ypCs{x6@TyhAB;CJpOW- zfDK)9V#Bro1x8%b@~Qlb{j8pG@^1A+5(;D#hfI+_KlcQ4Bo=Wz^g8Z`*N7iFQGt$G z{|Lq6r=7ke_Gh#*FHAn@eR-Y}JzI{BEc?M1TRr-Wp)B-#?*d*zoe9W+n`8h6>k&Vc zJ2^-jx7VUwYJ^8PN-1Ev;kLxgg1T!xV&TLHy;t1k>;UIVJuz9leaKJ9LQ2;Z%Db&d z`=LmrsZ0(qT^UG)eNEOPPVW8lq6+7=0KzT0uUJUQ@Orre0@W5uoq-8*XU?bbl^cyU zz!^v@7G-M9*e-?l+5v$6E!=FCtu9R}#|b&aIZ7)hn*Zk|2DLPq>r5h`b7^%GF&~Xg z>Fp$7I`NuDhcW3S3FouEH6J-lKv7Sx&T2iLUIyAH?V7?q3U1C95yW1T7P^+2O%Dfn z8gG!>kHM;s78CZih?dC>{;w{qDlbbFnxDGVN1FOa=h0y(=r#;$0VeL0ia5=>-pO|t z%FMCSk~qcGjLUd9F3Z*kb;(vr2kKlV^NVp6-#|Awyhg~LK*jv&9p8Px8yNR$9mF~} z%|9d$u`|rM^@QE4u3MRY&+F3{7MYxgDksWDvINU}htM4B70yt!-0Fk&+OS#WMyT3Dn_aBiRDXDSDy6;jMRVM>DvQ4P0b zq;?kW$PimAx+g-qn^UDFBuU;G%XV_2{T5PU6yD|eG~(#JNK2lxS~umKhoW-aX*!X<~HpP=R^57Y+h&f#*8_bspS^d=5mvd|^&0|)FjcZtsv;@zS9y=|< zzcQ8WUmPs>WG{ZuMdTFz+PhRrZZ$RRb$W_{4l34PxG(&`9f?oC3GVML9ePKiW!HX3 z>icn9s<%0Dk@YU7=Z>2f@$szipX|%9u!>!8+61Q=KdGQWpn6`~F^hfYWMACFFlYde zu)S+FceZFm^+V3e2~6Z5U+q`HoZ~11_oSxNYZ3pgiU~2lD0X-|IYq}bUDNn|{gC@a zYFzmK`idrO0pCV=MKdm_?I*pATqCkHss3EM^wzh%jPJ+k=B#s%j2oB#RUbM29#+dq zbaZDtWV)iQT3p{9?+17&S#SBan~2Tyz_SL2JJPF@G?0K%5TAKq<~V!U$8UIk*NaVQ z3=6kH^o9KU4qOI$hG2``YFNb;_hT74k$|R2-z1_xapf4zrc776! z8`W3Tsva514n|E+Lr#^m$<-KsWJqVUVWuA-g+D-y9B&f~t|;~kRV9gUf?c*EeAytw zaX|@}wTF@1%OHC%T>0QaqLcIO;ncoJtcY8tKG_PqBLeF^B z6GNryFnV;Lqr8QN*1t;Dc;-8n!HzSxiKdeLxLIl>P8bsL${DlQwD$>Tn@!E8dU*%%nl> zre?ycpVdD>M~gSWlHaZ5fUllos@S30Ak%Kon+f_?x6 z$LoPmS&5jdnND7J;;l*f>MCt&hSjr@&oBxVbtGlQou)S0k*v9x1ZnMP3TOLe`(Y{> z@!f1yxe-8-VMD@1G`^$M*lg{Qo3P z^2-0uMfqEr8b1l#$>pYp*`>c!!JPLJd{vE+wLEfZt;FKb(*5rV;LlyT8as7ij7kbA zrgfrgf@RVN^H0#r?8u8=v$7qGp`bDr9Dc3&a<$nfp}X6>vX%&hMK?zj{Lxm>(N^O2 z(RHft2ieJFJ7{L*Rt&(%*As-n>r{cy;j+98a8XtaXl7*?L;nHkEA`@>#z9Eg_J2w1 z4f%TP5rswNmvAeIEU(`LK$)N|Dr1kxv4p_~*-0A*)r->&aQ`BW{)-e&AKdiSsBHVc zko=Jc^zSr45`;m1W%4&CM78Q)FhKvv&mX6bdY4;l*t+q90JesJxIZpP!!>OX2UkG< z4MTJZtxF}_S;+J>Fw`~~ z@oR9nzCc56xhHE>Me+4P5EwcK2bw!&w#+$zRbn4 zGS+dr)))tl+SS4urD1GPWeEp~rnDA)!ri{6xz5SOW$vrs#*W?!S2Cmb781)e-U^n~ z_phO%f$o9WiB7A#LeMlVr=5`BEr}!}fB+8~fe+2@6uGFM%}Fl&w-(|Q3}~I45L**L zmh;MF3UK9PLE~`KGORJMoUY3<=6Y6KVC}D|1g;WrUH~iBfPfXB?83a*Bsy??(px;2 znU`eUV;a4&{=B8mgwwZ-}=vV?a z-&iFlKP{w}m`I@_r8`%SB#ncnvaTZDY)1L@bPbHVD?L>q!fXTiZ6PJ&EMCH~dBzTKnEbEO(8&`Ixh`yn(lV{C3 z^vzA+TP_bK+{}A~tjy?ZirEdY0O~R6olBrLX3Q%#(mCu%vNlm*-IVI$q5-m!Tmi4h zL|{XKGSq7iH#z~e(WA!A=!^CBVtk5G#)8C55&?2{ZFfSgVO;_9MT=xY_rw*3dtby; zAs}A>F9KdPrP{ErMEjZWMS*Beo+zFmuR2u0&lUF`>AxYyK)x%@%q`5#PBhL+&9CRj zsq0r`;#}1!+#C5n?7d}J98H@BI)ns*I|B?50t9Dpmq2iLcb9=d2KPXa;O-DS!6CT2 zyA#~qNw7fPGw-{f?K$7K`|jC2=Q`K9_D4_+;-s zt2E*oiE~!(y6XeDjbyz9;NKq;g03>tyO{g2 zTC&TsIsh=$326Awnn86x@FfEYk{$q`!Ru3>@;^*v{ywSsV-GB0$V*>PY_gX-8IMT5 zAKKpigdwnCV8szo z0N)w2iMdYD3D~~!#pE0=@2RD!7tDBoDjO)fL@E-TDhx>OcGXr}$F?*MQ=TNA<*O>j>i)0P0v46KAA$SLaH^y(`tK@w>G@wJm`7bSJlkmG=q^ij5}^ak?=x3W=r2M}&y zu)I*fQUBu#GUy8N_eIf+p6&}(1hm{StBL!YPZ|dJ#W&S#ho*rspVVJ^_6hM(#NMwb z6F1|+NZZp0ask^GJua4s#2G_G za*KOyEgU#}jhBrxaBsG4TJ2dN57L!w>eDv2cBJVUl_msAYcM3y+}|8m4vW%%UA`tC zRki+|pvLwvQy-*;!wjSlv}SQgavY(F8Xp=W!is?FNB|oqQGOJ^DN0W2XYf;0mBR~w zMLL)v95Pcx88~7+&s()xP?gF*+JqL^UbZ@j8p!H{#&bvQO)~Y@owviKh(@Pa8?xayxxVwt zNpI}==^!%=Y@TO*+ny_pW9H-R!=B8D7T`uFA9punv5x|ekIVsNB&p6^ zD-=*B&4!0(IO-So0gX3xNn2sXwbQYDVhJH5f)8u`WeMgHtQkFOy%7ds`ooG zpr$wSgDYs69O7bwHWYeMCtNcc^=c_wuLIoAu|~U3&e$+x*&{4xl+WMIc3|`AuJ{EI z)*7ALQ#UWI8}uGe=DL8HhJMC;sM{Av%LW0Vvrt;qg7nN5MyWS8pEjOx@KcaDpRFE< zIQV9=H@xauISz7qxoR&_Ipnjfk>J|jV8c>^z)qL zH^6Rkk?md|^f$of{YTd|?PZHeG{~grc1bipj5^95epg~UkW52vs5Q*qSfO!g&7w?Y zh{_-2^kw2es{rv))t(=o8`sQm=Rx>ojUPyV#wCLRiCTE z#mj;l+RB8SY8_MGElHBSHhzWF=KpFs4S zSF+LmJy@*wnj~6%!74Z;`jR9(Xe+Xl8&B)BcO@z^VfK_`(VOSi?jg@j&jGkzF8r@V zwAfNVF`7agzpxSN@7V?C(;bcVR=_rrz5*qNWbG!bLLR5kRD4^nA9ZLw zEDX&))_$G*nl2)~b`p=6BDBxy6ZP`g74_u^2ZzFtHf`KA_J$Eo<4jM}cBNq$H%o6` zY}K}hcgWc7IGmYWD$s>LI-$wMabT3>MtwnTPI^15h$iG)GsXhX{6mH2*!9sb>26VL zFpG=sAw=&BfMAq~ug)T-iz=5Xv@0!5y4rQ*MFRw8@y2Ab_)+6o_UB7=G={&wzyGKA zuFuZfdmC@temRlcUHXRpBd}U3qKH~tV(LE_vj5pI{(sKx2{QUj_X=gT0T)BL^`#Jz6$(3=_l?D1DrIy|EP5p6#a$Y% z?-0mb*neKdt6i(FyTYqu8ia(eG=6lnl;Q_olkaM^&snQD{mWzPC`{Qj#0;ar6Dp&N z?q6F2<8QeydH!Ng$o*b~*pQ6I7|MhVF%UVLAt+@i?lq66@PK+>&g^Ksg`G3iR7a|@ z*=KID0tMY|uKs>+Hu62h;WSlk(}V$NS#7IU<#x4yX~P!;&CJ}F_oBZiI9u3XTNacz zU)|xc9-pX(aETiv^6N!MCA3EurflQKv9^mblJF#eYG-3E zGz;`c`G5XiPI*iRpBRRm+-St1=g5VqcBm`$QEix9udar~aLbHJ)NJ|7lq?|(v%MF7 z0s%+lR4wklEK>f3;z8R3e|UO!JxR_rj_05Vj|u2;Tf-V2z<)zyvanb(7OvWP4O*o! zc8;ZTT9_o9F=Z9mSU6=#d@DUv#nUjT8XVbESz8~RL!_9un|Ht=AkV$hPVi9{al@6^P`ICt(f4L;X z_q!+|xhqK{pTec8D9#7TjClq&1}_~l(jpPv$t`j72++kf{Ui0(Uh)n`@lz)Vi_ip{Kr0tG2p8MUW zj9<2=+ryN6mL}InEIA!s4%Z_;c^+q<4m&1TPS&qAZ`ov1Ccd->{xw7Gw&*v2U`LJr zn8N7)9{Jxk_`+-{1gnd2mw%W&gRV>VIa<|2GGX|E>OioBdzAGykVM*Z((64Gjj! zx{~lvtpajz zBq1OV%?*|#%?JaDQ8z9|iGI8=0TCZU42P7;eD01Zh9}PcJh~k=IUN73K_-q& z=QbAl*xK-R;Z=zK_b2kI`Urw}nXRzRq|xz{!ZYLH36QEoOV_KHu7!jLl=}j}xC(FY zWnJfZmPGAk?)*~t5&B}rRSk|US2Fq60hw3aV{Y|T_dY`s<$09Yvn0!~)Kg+Fx6_c2M3mM4d5HoXs_40krg<^B?oPMNM!ajBh zm!syG6jS0}v=-a@Z(HCo6Mur9?&>G1qGN3wxe-6bPJ{&fkGVap7vw&#kb5Sr*D*r5 zw@A6fM*NgQzY5;mkU#zb{R}f^a_LpAkvO*?=#VrW02v<#}Bsx z5h$+Y6S%NG&Z%(+`OZVqc_dySq9d8H{iH*OoK80%_6qoGe8HBpI*G2wpMdU|hb zIe8t{4@)me-h$$)&!VOz$aaf;7>~7}UO^L}2OJxFtagoj8P~h=yl7YXSjCn+md+D& zx4_NZ2KS%{5tDiA==C;9eAuM?Q8zWP+00IYHVD(p>I?~j@O1O6a2aKkpFxj?J&k#P zh&zqo<$72M2vQhv^qqO3_pg$_G!Rxb=JF`58l*^IB)JbZ5P=|mZAX?gNZvYo(-YN5 zHl$4O*wp=HRi-9UacGw*ZWJ;U6=aRpiScIMMbSR=liQPxCoFV?OU}xNwGXXeh{~Lu zSQqY2gowe>r0pqnZ43nl6CedO{O^su7xkGf83R>j9~58(t{>Z0M3d%)#1w9$Gn!iH zY>SWRE5B%)0ht=LkMMNfo^m_}dD%U||V_Kc}h7HQgp$eoB{ zqWn5AN+>&XAk$ZL@U?`LGm@MJDQfR<;4T}fc}92St@5l%_(UYOw)PAqnj-PD545vR z?#u2c4>3xl&#$ZCWi9c8y%JmVdLY$E%Bu2KNmIl%lGEBGh?o_t-qK?)9!1wGzBsx#UJC*^9OBNi>fYR+Dj7BrHr8@4X{ypQ>Ln0?YUCd}e-P zh~vFOWVFuu(r#udIr|&nNw7Vmkg+Txa%NbrbAbn=DlWt7*{P1Z)i6KCSG}3p&&B5x zya^dFgWyN>?e2Q9j;Ehqxbdsh`kq*H^>*J-Nq0!UJ!)nKxi&;Dd?#42w2PWB{)s-n z>X%q(f%9)GeSf-#wBU8!dt6u@nMVem9)5^EX83@?Gh;v^JCdR_ku~r{o*hkzX`RYl=EH)xH9G!x#?S#wXzLmMI zJh{gmPR4Qc$6^+Iar4hkW&X_S7#R8{B)mCn&%z}U21jY^38+=1AxWBihzgTx z^59LH@b}|*h5pSBjRHM40`;6+@A1A*& zQkK|#`gNr^-xOum^Ae;wzf0@)Aa&0a-Q1zq;tR}A*?Sc7R zc&n#q1LQ)^J!jRXq4E_T9Ose%AQG!gKDB9Te`4Z!m86%FKqTK+B&+INB`L^*#t8+@ zM(_M0*{|FCq$yENPJGD@cSj%%Sx|gJPtKE6z~ta$v3tjE_PR4l;Y4PBz+YLTWnK6+ zDNDgFQ#3@oUue|LK0lqsm#pv%GyLflZPki!ZW8_^Kc9{xS*_FL`Qf4V)3}MA+bm3_ z4kCwG16pjLKitgIkxg`Q#h?CaHq4=d@Fq9jV%Wi$Np#&;N=GLYy*Ro!Iwes}0R+BA zyE?)O1UpQ6c@$IagrI@0!`TfURC(9utAECIzu-)q>b%pTfEdJ!c_SMY9Xck42O%Yg za2?r+g5o_9fkcaP^CB^2_E5f% zZF-(6;EJaAl=5BW`r&AZ{z;-hPJLH>TXg!vT!^z3YNY(U>aN|`@CErXP6iJd*Bodl z^L1G=o8;s-qgoG4VXm;o1qBp2UDX7XN~`sZVV!zrk0rhx59ay}(KWBT^1Ys;!lb>7 zL}#|ky4=wV=}}@x%Vz@=O(h!EAjBL_`@t=gi!4}2(d{7v+Yl*1?)%!{7FOMrue{do zXF~Kg3TE9U3??DcmrEa=`OfUhcrc$Iz*U~hqzcZos+#E!=p!}YAiY6-eTxLY%_2DL zu9*IH?q_=;0e10`UHfxL23$`sO(rQ9=l5{Qe`bOIvpl5IYxIHAJc#W`uxLqnc6jy& zq<+NITL5e^3xqe+cAg4&k#e}e?WbV;gMEmz7KdMk)NtRRr<=PaIQqjbkh1riHYvg? z#yQUTD6X0eRe)Vl;rsa|DPlhReoJkm+~qPBbg~)IfY~|Y8a2_Hs8e@d$clU%3YC4p zAqn18(XW`vj`&on<)lRy9S5J>34n)!Ti}C-Je;|~g;{U#5h3oRABZGhZmFs-soX;Z zdLWXMQf;M5KGU18mm%^L;{BGwxnB&?*B|VSsgZ6AQs_H{6-C%q7@{(PGjL0~OJ09Y z*DpNxP46c}u3Ml|-8e?b0owpq{c4(6f`kHjHZO(pRD`nik6U@bX0Xbj+%29}tXGF{V5U_s=Okl>2$Vk&a^Mowpwop#s`%^|U#2U{B0;xfD3@-x2kMiMWi z_h1lEH|~j9qd(=H}bJ483|IBN+;h7*P2@#lG zLSyoSX>kbeMTFtjH?#m)z*POP43L}fu#xoh?K>Yf1?okPZ}I86^_=Q~Mxf`RdOYvs z6$uwS7JOUoq-ZXDP_4#7OeR$aZ$kJ++eXA90%p&eXs5qSJ5!-TiRhe2Je<%{_Pv+( z_Ay!Deb}XDh1naFh4=n`xLw~2TV!#SI9hW~!y+j+dbzttb!sCPk#q)+-}QTJ$GdTj z!AIN{!WfKnZHkZ6B73}e%AibKyzlQR9=ftNDk&xSiw{EOX;t&A0VyN^;q4y$Gs_qwF-N-@%AROJt{ z_xO3R5im{Gre9J7b(UT^w~(hrn>Q9*ac$IfZGL8@*#SlQ_v8&bzf~4U5?5@^4`3ZW za?7^-4S=ed9w1Sf?;rHmFe8dUY-NuqeW=9gj{b1h?C7<34%jD_U2yjsVr51?_*Bqh z;A#0PzSDip8wEYT%QA-V>>TL1G<31rC+=wwoq8jMn^;3{soIZCqD`c?b;bLt233_I_^^|CBj z&XyD1JA9A8FC8y*a)Glpxja1EGcLts;n00YC3FsQ71cg6IlVW0$!NCG{Kxu6(EW&Xo_l1D zeGEW?TYlCU=l~C4IbHs%h%;0#L!+yrh`V|o4Xh6XcL+h<*48$c?g9M>PuNKe1GM*S znCvJign_Baoh0*;htlyn==Nr(b_Lid>$%7VBj54KCg?y)VW^Kv^vD@Ktic0jbn&ss zgrOcH;icq+vi+%R#8Z5xfvfv2w z^jP+6?>iS^atd~MaCEx1*~ig%E$PSW9U#pZKtxo?_(*Hl-z_tDNru+fa*X*pGxDM` z{lVgJN%#>4Dvts4Njk3+riQ$=Mv}BXM>7KYufMv8Az)D7rKL6Lr09u&c#h7g@XG+K ztu4ZyEyatjk=i>of=SMz_u@~5zZaJI@pu$jK(ae!UD$`H4d1qNIuIta7y{ciB2_%^8K>j^npWAqFA>hRrV z-ZL-fh%fhDSID-opdHLvTq0BEVbjRy7kMMT!dR9}p#n=CWnM296ctOV+!7YfY{U2;UnsxnU@g2KiG-MEEqK?vsk@E>jeI;{iqmgzgaWRC!nzWa~1fANW;{lluyL`u#r z!i{cc+vT+<{z&ob8xl$us+_Pe)K<8#i?GQrhVII@n^>v-;TYf0&_sEfNHyKiH@r2c z?xL=lW2LIB5aEy+N1+mNQSz=#EI0zD^QIW*xi>ruj*vlIDiFsxfoH){B3QO@*#EpZ zA?Zec(-}8Jl==bz>G#V1I5W>)ztY;mZT z%5`|m&<~>vU-Nwq?~u=RpLCx8?d*JbR^abhe4}fB$g+yk{Pp&}M43meOYmMdebO=3 zY|Vi2{lfRxdA|JD>&7b5nm9sIb+;C{y88+oQ2+S@l*%y3S+GexuMq_7Bk6S^-KNhpV z6bZkd^82~!`bWlKYg+-GAIW^zPXjzXF~<}ce>>)p1@vguM!TY~cL(2WuIJ0?!O zEGAQZW~S|`p0-{}Q1Yt#*rKX&e(5_o+BH!MeG^BBoEm!8k9b`hZbh>4)Yfsr;KpMfRapc{ajpPd8O=ojnuGDq+pMUfass=$PLC%}-FHvI>}% zx6KJ0JK0klp{sA<8hY@hBx^hWH^5nkUdl18#{pd7x^jN^Vc0qn#y4gm>SQx~3~5(pYp7f4d?u1B6RIYEvu7_R3QK=kmi`N+?$LfASFgLs=gtLJdTT#9 zR^L4Xm*q&O0AF=1IlTnfiuQDZwsdoF(7bPqyCt|N`5?_#qwA)M@<@9JZR@K&c+hkn zZh??O50@key<)7b`hNpV*;>U#8z+;Ndj}z=KhD#-en%<6V9z3qpTGwYTbLW4jc$PR z&Vyey=iHfSYCu4UyJhheGQId!^>R{FX(m=FubxL_aQT@#kHk+CJ!kHJ!@(J6HO{^? z-w{0H`?7;}ae^R{vs~A}}0@Pfvjf!IzP> z)<_#(Oj24e3jCmkD$cgqvFhU|3PHm1fi{^xcWEUAY(tB`g7;O3CW+_bMn7p+6bT5iGADS-J@TAS^n3yU*frje`ARsQ%*_v zf>-HNpW3B`z?{(;!>0&3hP=8pc$B}B`lF8G53Qf!pSOllzm&U|bgXE+B~<%cP4v4x z$FEJ|b#)fI+QuUT@L$4L*s5G?1fPw~lWnz(D*G*?b{}0by_4rb`jXPhwMepFv{O|xkAJ#O5Cm!Y)T52t2Hv7qWau~+LlXed1O z0bh6U4v$tnoyf(v7hU4(p0;Ay`DkonjO7+b;zdTBa@wMz+r9n7GGlDvb1BfNSe9qyg?10r80eBRuYyq%+b zC|*bLEs6Od-Cpu>CM1Js`M`PMk1E9q-)(DO5_77wbtb2%_L8{PRi-E@hL34b9h$N? z%L|?2oC@D6p;eYj!Y8o7i>TZ6O{0X?Fe$)Qnb^cW)T6kBeA$Q<++dr?xK(C1%cbPw z_>q2{TxtN#jN6GKC=um2nt9Q!*e}{&yJZ(A`T!4a{mGj~8%Mu)DJZH@y4`u^cS%gDwZc4b zs8M#D?}(_F`lgctS4WPP7(#dH`o}Ity3a5QZ}YgWkWr{H*sJ2*mnZOx05jev^g0*( zMU!w~SXexrw%pgfsutJD=nmb3g)3T;9G6H~m5zRwBULz6s-CJK+7I2O^VO2aCqgnK zgAWr1FL+(a=xJ0fs%+5Pw_BG(n#lv29yjx!uunDP9&(2;m5H{Tf{;y;G9;@{gDdOa z&k`PP^Z2EoPZmp2I?V`=-o{mje&yiE590*t<1sz8Mp$30J|oh4~@I_*Xp&}%Z5=a1i269Mv3i$#QrO5&-XEy$L%x9 ztnFv=j!hD`w9R>wiA9y@JTb6iZ<^`}dFn%M36EsS)HRxt$!N4Iq#7D@O6hzkKH8?qd`A^nYDvnI z@xC=nDwQs8M}i6Nnq(?SPEol_HjUHajq z!R1!X4~9=dkjk24 z{d^>JhNaV1OW(TAWxU&wv%1^$Ty5-W&AK|*#PN`P0Snkj23`b{eU96fM!WMmG2ByIXetOr$bB`1Y8I*zD8&^j=73G@lF)lmtRc6KY^t8N)~|qW z2ix|5WNe=ay@2^UCgKTBH1uX0KmlpeJ~Dw6Zn#zIx1e>0;+r* zYS6#Rt>q{S7nF*NHG%ctnHUex<89RMVEi(zvuljMB2Uk^v;5LWewe+_dp*tbUE2m) z>N!7o#gI&Fn)G!`(FY7kHPGFLVB7Ca{?7ICQ2x6r^7O9yP+H4km;dxj?r|Wx4VfYu zZzAVJKz;FUwI5qsvy_r#y{MX;;^N|c0J{JqhqbGm zjbuvTOUMb=df^GsoRjw%X0Tdse$TJli9$Qm{nswRLHU)VWvDakno2TRdHq(n5)CIS z8T7JNG$EmX|jNH201yfM=uv%)V+4W>G7NWoIjWdCjmrZ+pT*z7L>*S0=cFM-O zFW1%7m{5wGR_^;C$0fLbo@6pW{cc>S0Wk!w0#U_FWXLn3rG)I`i0alYCSJs+ zlBsd|gv6a|LBct#gJ-c!+bQD?9VL5f$l+JvCDn0Ti_BaY0(oF|DV17gj}gn|inD9I zhVS}IuPEFS_a^TVYYU?|YKBp=vXwP3)F}(puH7w}N6D4&E9JeNYw?wiuun#bEvxC z4)0~cRV6~y$I#Y6tI7kcY#-i@aIUQFk6G9Nf6hD-iB6Qdc>2xQY(nlD>dy+BdSJK; z78+;MOc%@!QcAK3nPX@4zwm^=PV1DIe>@3~muwq*T>)D{lsV+4KHO6l6%rCC`NUYQ zL-nSspSeX$qC5xGIWw=WP*4C_IeU~B>%gDm?(sWYS2p0?2&Y>HnHfVw5WCQPBCm)S zafh|SJ!t#rGw`Pb!wRX{Hs{HapS$|KkPs5@FA5>92`lnlS^(OL>ANR%%-35(ocK*i zkk@usn0M$Hs?HRLRH&0!m5I~kD_OjuGt=7@88MX~B^-bZti+M_mTck%wBg)2crE$U z1R>i*W(QgNOAqduh zbO#&pQeq%8m;Q5ROZ|O=2iK%pZC55Pr4n-{yJ?Sez_U|_%7W)WZeLrzoDfNiv@#eJ zBO3wu9j+QL%Mi9vY;1m6eLDIQbJgzyj;dH_-)sE5w95KCib*>xEy>;f&Z_-B>BFWc zNbeaKr|Fa#4hXA3GC-C+QB_t^k$EJ^=FLjv=~_=YP`_~48GO6;>t~X9QMw#yoh!oX z^W-@Hz&yMDqVRYt02x)D6QUz^uoLXiKmI`Q;xX5XMH0rz!!(xl`@85R88@v;gx$3`8fM=0LTIJ_D9)fQmSAij!7N9C(0->k}?YA zZPgZ+tmA;@0=Ech557s)a#+o|D*-bmqU6CV1&rr!KG=dW>Hu8P=nE>62G5Sm#Fta%|K%ayJY+mBEj*BP`wqHI*AVVsvHUsV6_ld@M!?3QjuJMz5;1Rte_+2gU z>{W8{FOZy=vA3cg_J$8RHxC)fvL4pZR8%214%)sQPFpmjz-*eCyrpr z(69mel1xq-6~$Aeysjo!e#DLf%&fPs$KPB{7%MulBzr%r6COBT4s@oU0%ogjG5L1l zkjQ0c!E{%E`)mxhUOw-NNKixPRN3DxTEU#tK$FKV25S4b_f}Pm_zKBi-MVQYXi+u7 zUHN_m-!X70Kj^&bERwoluwC5COPg%gY#QT!^MUWPhzph954}ve-R#aUHM0FyNR~hj z0T}u`pO>9SMTX6Vd>rmW{7H}XGMYuzB zVTAv%sDRkn9C2{kVy&4s37n_FcGw|tpPr8D<@ND(1YY46Gfd6l{tm_g9Je!_q>z2W=i(SIfNT91 z-5fUdu5*;V)bU01ATb5Td`L#Dgj@R)HD=so>9uv+H>@uIIX&qcF~!#*rdRtZZDTL; zT>}=>rhOSOgV<2(rO8=!otf<_3Z0PkR@KT0T;&l{`6=eJr~)DmXFjWb&ibYIQ?@7j zvEpL2@q3cg5z&gw;+#kiNMk%z-#;jxe3IvEA#j9`CuRc32gTE)B1i1G!b=5ZT=G=U zS$~6U^zFNmy%Dn|m-D+qaY9GF~?))!nRk%va*hwouW`Pe|RR zGIy24(Ze$(&Njk9$m?BsAlW`pev4iig8`*^kO7I`B5^wl0(sXuo#2vU$@&nWkMqn} zmFFGytq#$B#)tX|6v!cfA`Lf6wDi4tLTX&yc zK}BhgEl7x|;&W2@>&nQ*0QX>BD}GNhs#SO1cqLpJ>YGFod#o3>sAWnAYa=04frw^b6c5s1g&lD^G)F@Ucr+3bdrKoxcRKtS);1k`AF8E-8fQQ(i#Xs z+yagw1#ukph^T%8%re5`auQ13mdEUP#eM2`Jm>VkMjgGGb!GV4G@f(@`}n3eUhzqz zjG))FHUJkPsR6iN0*CpK{RWtR%g_+y&j@!U>8~f*q?n-<^_LtJLCN40s{Ny>?+oJl z7it0~GcY@g<%eu`*v3Hl9t(`Y;Y}g)Ti+8aBe06gqmi46BsTzAan5u z77r<^s{{LKuF05Db*-%0x8&LoaAc!oUMT!N5uHPSlHJj8EiZ~E1lo}z#JwM&Up19D z?Na;pqqJ&nUQFqYpu-4$-h_Q$CO*Lp>@CNQmji8JSYvIhWUhWFZdp-?Hf7r70CR7o z4TZqF8K*sJhG?i25U*G?;M&QgQX*+!;$!2`r)*pj*xp#q{O!^Dv3d`a3xBCYFB=M# z3rp!27?Y?8&HO_C)Ao|GN^jJ`;oCx%;kj`GQfb}jga_5fa{b+;|E^7%hk@0*$b_l!U{ue*-XZe+D*L^eApAUgwnh#GHvK!T~- zZZ-dF)k-u;lKD9!D*B##qPIF%wBUGt_uD{!rGq4fkea(JsUJ$e4n=i4@b{SBe|}k7 z@pI76+7wd$z@PObYbSth?-CQXsli!q?489a!kKWF^F206&2$RYDRf#*2`8#4GTwq& zNZ41%b`SJMe>T$BS5W=O^USIK#|^l!uVS(~bTJ=tT~F6@?$ecbTbGzNywnq*Q?-Fl zIzKOR)PvM}3TQXQC{rR^3$~Aw0!5_u*9~|gdIcw_lhhCwS%-Iiy2cG)H6uXdL67wP`p8vcgou}qpCasEcY+du}? zj;+*Cc*vBr*6OyvxW>Q#s_As-eEwa-E`%ZcHq1aMFXCJQkaG8cc92svuy&t5Z_Jzd zPAY6PI=CEBPybG9m}gb-l_1O%tLS5m;-VQ_|GqZwohDFLHqw61>1!!gf%)@0XLj%8 z$c9NhBQ(V*u4@}I!Cj7|wopJa>9fFSDm8TMlnI=qEM^R_K<5fi`Ib3H|G-IxNvS9( zdG4zMzD~~j8bPQHcYCWBXOmvtG|Y6bcZT^RIxQV-@B_9TsR%%~ORKB|8woh0z)Sl? z>UrAY@f%=lm~d{(;tUxrxV)}wpCVxn!hGNVI^!-<#DexB=Xg@UzN9wnbB6t>A*GMV z=sCh^H96vKFn{=$!821!GaZ^mxMaFVwCb0<|Dq)+sCHNLc8TIQK>A!eZOlN(JgVW% z76A*}DMuGJQ{8w9HKgdQsv)?CN zXl#bEi>}=!InF>bsEyEaM9Fr1by-7AWDG16Y>{y4uQg5l`zE&CZ_c)Sj@wX&$rb1T9M2evX;6c*MMl$xGfmsi_ z2?jdxcSf6@D0TNW=f0eEmD2>pa@s}x6vc_+!(LT#UsHr}=cArz6{DjI6@%`LNZ@_< zo=Hu`IXS%TvL4gf?E{<@1Jjz;kSeeL5ueDjojD5LnIA)5V}?`GY6_JLyIp=v1S$Ij)&<;;XN-b63X#(5Av1#Md1bx8NF0iR#n~PbevMH>U%Cm zZ3p{UwGK&eF0)704FYlWL8#r$-aA^?|3dTGE{DKhX;9}M*&p!fs={^o(=3BGgx!&a z7cRoCvxLxc6Ut%Mbo6vbMd_$1LUWjy-sow;0|>qZ=|`yY;;ib`XW!y=b#FO?AP&zN zn0Ag)QA>1fzw~M##8^90@GgxXd@pfX$>{#FoQ&$J&4j#ZXb;g{;D@4GZhTije@4$t z{34%kx)%pdhKp>7(oN)s7rJ@w&K}OYLPB&>LA^*eprMB}gC6vBe%@sGIrno>+O_1u zenLN(r-@eWh%7uB<1r2S=lZ%c!`A-vZ-6(Go}2gY4#2)FR|d%0uM(MdpT5q&T17+u zrR@I$18$lH8+;nZ`jy+U?p#$$M-iMbw;)A_#M1}T$J~19!4OHBw9|__cvno*KmY*1q>d&A{L2 z29yb&l9CcbqbQ2>z-e%7YObyk)U3UfkbCaf*V2qzO@GNJ+(&LM5aT+H$ zS_-i6Y{sb-Ta+xk-!Ct>II50~p9dH5z0Ea_X&|})R$y=liF;(=KDgP)b2b}wO|ec3 zD>ni&!UAsx29_R`;Su;jTWq5jw0ReleH50xO=0a@0D~bkT5ABEU4u0%vGOWmd_88d zHJW#t{McUnoyrXeJ=!bfAtEgP-HqSZ!{bs7sHk!4z9NV0BJ)jZBOU=LDT?z7^Sf-n zNzQX~5Odo!wgub+G_!tx1>2VJd!Z9nkXRCOSSnO{drX6YH)PENq^#dfU8%Wx@Xk%#M9rT{3Mlt~7cB|=b9+CTnprg8+664zRdFxwV zXnnOn<;iDQ4%LXkpgLx{wrKKp%)aX}WGLGD2Nxl;b(r8R*9(*itXFjGV$;})P z*s&|040Htq_`Snd8F*tJ6=BU{D(S9m&GPFd!=9kV5)-%ALFV1(BB-jU-PaKEDA()9 zlAYG%iVzN}C>l|ilWI>($?buT19j;-`OF=;-22qo8U=gb+pj6lNZElirg=OvAb7aJ z_;J+=nqMhqzArf)RRRsvL7)|=uiZsk?x)dCcTLZTo=5qtr&Y@{eE5$~ zthug_ro2!#4PnB=G+sT!4w~*2QvY&kaU=%==j$(wRx+f# zHNU!v{W%XPi;x6q3!hws17t-Xq&NO7y(Nig%oTmn)j;pn^LVZ+wy9duu}KIdLU&#> zZoC-2GM%TJwqnFI!Qx$pWQFJKqGCmg-F+cK5om8LS@biRoxCtNb35?BM0?B-f18 z=}LgZnLIf=c*=_2$$HVuUR;D1;DClgfreo}ACyX}P&Vz*k zgS)#+(BSUDCAbsLo8;KNzpeA$|JI^wb(eMZuA!@X?{9y*P}L_A7C{!~T+rDb4>Mnu z*$ozn_WNAGf@QC*4o>;Z@^0yvu5`GAB8{HGKh4Oa-0`ia zFH%%ipfbfr{KC^_7TZ`rsJ~J&;4BKii*26H!U~9>DkO78f))Zm)B8?>n5G#w*TyMB z&v<}P5fbsrOrrkyqgFF$Mn14+?#nij~3E7Y2B4SXaN^i!5B`{C%eBXjUP>ThAIVhPIcwngA(5h+v^( zyFtJ^wpq=#xA-l&P~p=GcvqR_5+CW zm`s4)AfP98{}4Jz$DqPd7emm~H_2a0fH)zP>V8xd zSrw{t?!KN!GjBVvWtQ=QuXs0sAF~sFF|Hfy0IauGj6F6u7r|$P{br~3``~rUE~sLp z*We_d$xt56+*L+a%+5h}w!mrhofLXQD8G~klZxIb-nZKaFq>v-) z#7x;;IR|BpC46_p%>0b2(>K?5UC*xWp1xRDPMj@6U6)^*Jsws+-BP1ubSzS>22XjSg?C~FEhLvG;&7#~KCT&dy0il#+YQOw)! zN9pjQZz0UGf4Ih$7YM~pk-19e<{BLo7KAyPRceG*?TDOcX(vp&@*@4xg8;Ze*mdROBl;2GFo3_iV6j?LLWB-W#sV%j+e& zpVAa(gkU1p%-ae`oHbdLMw;?QsXvbW%O}Q&=sH7tx$74KMj@&8^050(1bm-fc1+&K zPvy;hu4zU8c2)9iVrzA`9N<}O{l<3ioK(ZX)|vt{2P!Ru|J{L2y^8JKFns2S+1#_{ ze)*BRDP|{dLHR-=Qj!TZuO{}oEg3_SHvw=hTzWp$5ox@)DcYoCuX$vu_E{6nXB>9! z>^im+1#^hkw@jTo-OwJcn^^O&%r=T)+{57fK`?lBq_5XfGEAix&w+!XuOihfhS!ak zcPb;o^*iba3q7J*R77cVK>du=5a!#iEx-#iMOt&sx?Kz$}~PS3VtpD zmcRP*a%!P}tG*Ty_5P^fLNq{h$uZhGSU55zq7)*%5Nqhc!Ef^+t6&9hkR)OqY3dKm zT2B50Meakt+{n4ZHPO74FbIv>)xbs+xgJR674o_{ zOunG!!8eFA{n?EX)~grAz)Ipa2GJ}Y_0MsC_H7DlX9sI1qa!g1)=!_1<~$#uDs=?{ zc+s=~0M+bYIMk<4X>p(x?JL{A0md3@-v{TG6ekp3x`k24s6L+`obfF^`@URw{#}42 z$0u&jr#KO|Q4h_ILdmG;Wd`B4d~OX1lb*Q`($>J12#e;5!|!TBO*v|Sq@itEFQ6a* zxx&y<#u1NR7ZLsI2YSjGq~Ek+*e7$ zB(LmSgU74`exnS;{_uH{12J_$%*eC*!{m^e&5W0to$ax(Pe{-E@A}ZbPM8AD@YjX7 zp5C3oW)r56D4jmySLmZ`=6Uy7Kw5j9PWOG5(cgRU>RS*@bH{uCT?5|~ol&;<0D!Eu zL5Q@Xvm(b{b^QJ}zz42t9P7A6-Q$tGODGRWTkoB{HIMSP0}nv^TD=zul~Zwa(eSFK zIql~8l_k7aJ$K%!Oht%g1<~GT+(lvQVLMi!^iX->*eS{PeKhnAe|@S{RUNbe-UWZ_ zRp)Cvo$+v-m;wRRxvP@!T`Nw&czocsX!iJyKEZ~XZKO1!8b8(Pa+-EibU8XmGg=Iz zgR0xqCR$PdxrKerG~(Lo*X}H*s`dflLPULGRS1a7F$~^?j|^jrA*SG0cKoCCkxI57 zQ~8;qm8nmRr&@vk=P+c~va%ylKUbOP70#9|_NdLK_WkrTsupwi!DoMaq5Kn+GRT8e z`*c!Lky%K!igA;L1u-)&YHzSV0eHGM029wJns;eKYoeS@7_y zJ?J#X%k=9TGK{k`;u-RkXfND;BmaOup#s&SKB zke$kI?wbHKLx>%3*JQ9CQ=j4zAhFD~_NA=+=!bM^9N3t;h0)c-r@*$vytRSq;U}S2 z-Jjlky%<`=_Wn&xgOWNy*v)GWiPTGFj!@`f{E^@5IlCH4w}e&ir<_bB(OaD}JIm0vd%(qv+{CTUAF@Y3 zY>o-2v6w%uNV^1rAc;1`i$LL%27Q$PdsJrclqMQd}ptSv&#!=~bi1zU4||t21Rh)uidA5PH3}Q?^(qQb41NE5~kNMOGm>J<-s zxu2f^YGXF8q&(+0S~^cHDOx`@^dc*9^*6B%65Y=mt$}7yY|3VKae}BJ1RsCRRr1dX z%YK8i{WJ6T5-f9E$_eGU)vm-XtL?JD=MM@$_1h(SmjVA<{r2yetGa)ql|(G5JTiX& zZc$Lyu4`lH9Y{tswAuIt^SQlb;FqaAQpBq&1aVWeO_e0Fe_EzEv8EIV{A^ILdh z=@Y|=#T(FJbM4-V0Ix+ZG!f5tlw+&F5`feu5$3$as}9ELYq_dlvVZXTQTWx`s~-~< z_9d8NIwB}ZW zZc4&6$l_vb_8lvpcwg9pc*dNHr83f^ETSinf(D+uqw}J-i{H62TmP{m0<8vf-A^ka zUD4oz(c|JVaX|1L5V5@A`K}%}5Q6i6xm_xmQsJ-)-sX^-#0`OqA*eZ+5P+#`OPYTG zWfk$R7P?6jmeYM_VEzKAVlWGg>Vv9x0KC1M7#e@CCDQ$lFry_~0W?-HuNY~B0GAKm z2)xRQpDQ~|FFc@lDu0KYq~aNqx{-RpOnUd_ z@dr>e(znsKzfQ*j4b%M?kpI!uy~I;d4q>waQOR}-WDb9_(u8zz9qW=ZZMWb zVMdpNReG+M&M9Ly?8}w~6QpyPb5-{qt3+x`%{UHhG4OFxjwiLQ5<`R_|2F_j9$!41 zP45)fR@c04P52S_Y`(1Bw86aO&&Y~A%J)B`EXp_<_3WktQ)w_|i5|>CjGy;)yJENK zl|?Ws;M@>X_2LUfSwOzAnl31u*r+wr{eVSuq!|^3#aKi!{y!4Jr$bstW7Cx!_7<#h8bVkH?(-?bo@YF=GxBYILC{26K{OW zB;WLY;7cfz@TWwg{0xqRCptQ;;MLIF?c-}xgKmn~$#`l)%a4b}HzvCZFv?~Z^#}F~ z`e=mzA`j7ZJVZyESzIn$aBh#wRk?zM@oDh?C6?jWJM7<*-&a~J?=%%P*^mKhyBGq| zZW~zGLMck@0@ZfR;vF0=W7Q@$L?~0t@vL*}d%{isv~jb>4rl!IoQL{{7YU+oA9!+( z`5i)**TPnay|0`me*?^STFZm9c3B=YJX}+M98-TpzyIpm}uH>!VjW|!#+3HCs z=9Hqe0XqA8^-GRVhou1}pGfoF*LczKUo6R04iD(YZ;TR?nPaqa>&gGRQR=Uzx@5K{ zn%{o~fKKZxU#g|RJI-=+`PCnoVyk@}uO?qNY5G1PXCwWBmc96zS+ZAfSMT?s{@w#q z{#&=){H|hz@ir=|>}Qykw#KB=wRefc?_!QNKl3+rh5j?8i}}AOUBJ)E^W$URY|Im_ zZ8tb!LG$x=oLQs5cyBqYWe!WnPF1fnSL_)rLITCeW1=vYnKv-;^He~CBnyUbo;>w! z?IwD~OCSIb?g^;>o{H7LpVI(9d%}b)@t9dO5@eGdqu?rcHl!cnHPBk`u)5DMoJ24J z?Z@p-Lu}E8*tKhFv^l{K%AA2{UPxqqa=OfMmwY>9%FeS`GQoVHEdMdsB>Lel;+90} znb%MW*eGA&HvmVb-?7)bYi^2OpJ~AZ+Qx!M#>b)<%H~yV;StGGgG+_Gf$vtLp)hxt z++ddL8AXWlgXRy_wkpq*sEzjh!WSs}*3?B`$f>Ngo?2@yW$G>6sr~U&{C{#xL&^E6 z7GeHfIr8_W_UGAz`C(R!tO1p5X;Spq-xajhzltUM*O$L|%wv!-M5i65_7N5;cFU%|Gxm?)rw;zPxY}>*YWEmOt^StzuM{39AkWc{d-_q-q{SRw>oTYluOYLnAwq7g6jEO4qP17@DjTP1sE3^AUUZ@ncX zws&FGc8Ou3vn4ABp;rQ%)oMtyyH6Ru6zrW^RSUH->WjzO()KY|jORlcWL=r6a<*0P z+YCa@$I=FUT!&8O?(o#Y2$b7mT-Zms&*sn`QAM+qV=BZLH)86b<%ZOewxf~FT2PFb z7*Twc`wN^dGC`& z20ZD&aaw3g0t*rM<<66Ds-h>4u6(-C(7wM18QDh06#h51q?LcQC50_Q|3>QN#oC`2 zeR*j_&L*EDlv$8;ir&0Ln?FwsXDy4~Ed=y)yIHslAdTM0T@gsph+siO*`4YCdR8n3 zt+9*4wfIWMj16iV&rp)j!Tg2@3q=gep@Ch(f-+x)!)UsRM2VQOk?tkjL8fIGOQ5O< z(+u7$gy7&m9SHxCz2$ES{^v8TOguA_ujzuugEmGmgkHkxp87bl1drh&zt~pE*Ypj} zIJiW)+z97Y`$`oy2f0TZtKs#L!M74B%dF7)<4YC~%0q%P2p_Wxwe|#tk`J)>PNY^R z)93~5xwq3ElcPB$z%EO`z9}&E&L6REgKmodblRn(iR!USwyFJ<{yB5M7JF2ZuN%%3 z)1voKxvY{$TIC=b)n)k9eJ?G?k}0 zwiJQAYCOc%BKAXqS#?!ovnFQYf-U1b1#NvI_Glz4{3YD`^-y`XnU>ZvfsiOm>x>=v z79jQ+(>eRkPMR^`nD`JTky=_C!4NVfqx&05_|#K{x>aj~LhWtv)qt=pP@BIybtF)U zg#x@2M4_m%kdSQ&jgFZlTA0-?<2mWa?jBZ^BRRVo8|ypz?r^@it9BK)=Pyh6rX3A75FCi*x+4Rx+s%u;3jJ#FQck&-iX{^RQu!qB+G zRSaY>7f`kbvM(DVZ(K4eW)#kM8|Bk_$Hx8!fKugVj6b2uXtSwmH^);Lz-mtawu>yS zVQB((CWQ!BOS}XRtHL=tnw zRUYyl1&MQklOs6!Orw)ABJ5k^=N=4X0!z;Z2Wdx;I=5Zji2X}AL>3~c)VaJ_b2I0~ zlw0WIxPe{%Rz96~ii5ezlfU~T{9m~47i)7%IVq{wys6se-$tm-s%!h;r;wA&psKc^ z1|$6GIpJIABH6gffS0BOc;9C=l4a?q3C&Jy+M2}Zi#*v-zZUH*-YF<3>fTJyNq!c? zH@dx)Xjbe0p+X=a)s846U|VfN#e5)S&354ZOvod8{pxWm$|$>VK~S3;`IO(%jBv`>A!*@37T)L+&hWU9IlQV}+kPF6@u-W&1`)mU*__zR{k->f~{?W?1Yhdg`RwwI9 zk>_!Bdy9IXnWs5j@SgjB@v(*v`&eUxq1FEar$b>&UP1DopKkQIOG5iqJJYgSd#0vb zHTE1x$OA8B_0~a9qd<_oxN#P@QrU0~f9kDbmt7Lt>!veQsYDV!#IxuWNx4@|`4+_G z6wYK$l+WLAoKKsMIsnM8TQK~M`$!K<%R7f^$3V{o>|lzqy6uLYrjyUp(0g$t;sGIE z5KXD5$JONNot~s)XpcZK8Z)N7lZyV7aW6^ zJi0X%TNTYxmB29zgHYAJyAUh3`RrgbPpUu(zR2vil7&twO!w~7a!KLO18gZrv2J<{}UzhziF?2H|x-JWIU}n#$GY@zfd-8u$K0dIu!_+V>yRU z0?rz0$p_(h;`re=x4)cH%}4%o<_eVIGOY zLGSG?Ukey>b&6DKEHU>YBI%NSl^+h*e&O-eQfsRzXr~V?kna;+<%C$64e3`RI|~2R zg2_@d8{B94o;fLDq#;KxlHA7;xdNM7E5g^v6=ln!tfzw-M0=++uluEIAlhgENV(U0 zGH0Dx$5q_k&4{^DH7$SR8NO|!XVy(*W~NgHvU^jXr)n|8ZiU5218LXi?%$DYy-eKQ zoxhA6%kl>LOT2nd)Qtl8uxCPu?C?NxT;GIAM>K=g@VUA(dc~%AL8zo@!tT$41E6?DjmDfuksfj zx>g((HzhOwYogV5HFvpnQTgfW52~}WK(vQqaUZbpBug(1vY1X^QzAyc6`aek056;0 z!P^B1=eoKkS--K@8w2)-?vaG!qvo#~e*;K%>UG@ehMajM$h_yo!aE&ar|KIiYc91- z$oPPNr?8te%~bAQ;%C;tN0j^VU9&H731Ak+JE+1Z`LtU{2OWvuRhMpbrsv*0!K@tV!tRGqaIWY+goPdmAKuUMD9#7&+83VH^u2 z&A|ud2;Bjz0tXHOlQ38&u6}1((yy|&%%9LY#RinZ2D+(@wD!H%_%(+KZMAdhHkY-k zAq))U@1kew%*nPpv_T21Hn-jZ7IjOr@K+_8-!|^Kwi_sFjoT>*=S!I}>o5(*5`q?y z%Xek`W`F_fineAG8(Z~HHrz@frR~VA7=!_E5ZN%__w7MpKA5;339uH)E%o6B}qQrwtUN+KjRhTGy5dkjTko zv3_uMpEbZo$BT1E@7=o9X~aBT-ci>2UjiKFt$)HC=KoFKiO2o9Xa5&`Ao*|j0BVZd zTd(NMGQX7P0D|}Y13nbo37=pl_$bRnJZOBWi}5&;$`8AQyE$EX?(@>hXFRB#ib4$$ z>dzx7XM%UWEFO>83eGBiR;ewear87vB5p9tc#h~^TKJn4jLQOcFG+-NM+mP ze0vu^obNYeX3}TI$LD~wZq9e0q%yAwPJ^Jw*N{=3p2H9U#$`5DBth)s+b8g@fs6V2 zipfTw7Al5D2P^?LB~0kor|lDEM^DflGf*@7aX8`Y^03VtEyA~%+74EIbTZ0lrULzy zxt{0km_6j)PV0Cebt}C*PPfUvleh)hX)PC3gbqWUrnxak2z^yHhR4mAd2H*O=8UqM z!{PH!D6Z*YdSVpyAD(Tm^0W&srcBv;WMV7E8B+tU9zh+@dF=^7*R@ePZ9Rqr)ZIT;tF42is8vKQ1J=KlezH!^ese;S+wC0$F$mF}z zQggFNRVsT=sVp{s?QQ4uYi<8}UnO)bJ&tD3Ez@SO5ZSDqP ze}1iIG&|x}^3~M4toiQ1JEwJLYQ9`!_8PFXtKtg91-*+&h}QgN9A1$FYQ2m+*Lw7- zQ=AIlqC8i3gDhLE9H@@C{e!IM#k^CUmnn})h{m|mlt{ruO$h1DCS>I(ENP6R z0sV(SfTJkkga(h7sSUuQLRnjB$_~{OUE<__v6uWCBs&rGWLvA$mTGk0jQbUOTx7Ee zj8JS1@53T4^s&s~2WsH+fs~XTwdlcTui=<{k8Erw*id-L%l)_nRyw|K3E@6pYZTrp zBJwO)44Yc+E#tTS?^JYEMc@1cH}?*~(sLTu-u2nEssBhUxd83yQ%^=7fb2aaRa6 zX_HnHvLlzgcB!ga`W@@NpggfoaaD!e9A-;qnvJ!6t`&jl@b1u1XjuZs3?F=13)hMt zDucA;9LaT)3LNpWP5;|exJKhQS)aig&&o)CT zRZ4Ob5}%gis7doXy<7eb5N76UH18vm=8bjdt&aZ=XL9Xw!zzD@e>?^)pej65%f(;< zO7T%7USjtzW=c$v@ArqYQJ$+i*yT}#b6%@nAr8l$4;$R48y9X(#&6!}WBq#j|A$1& zHT0NW`&SCO+h?+FaeJuEPC(6`(5+6>ZzZ|ytrp%ua=8~d;tcG!2GD6GJflJ zND0~Q-aD9s@S2K-mDa*oB!q#}gJtSs>Ota?_Zi*KJxO%yBm6}&mm-+BsV@$;2`VCy zTu$YVHk!D#YE;&-*DKa5#iQ4kHb0rVA@(2xy%Qx;&;>ME>DLNY1>K70Y+owA(KCYv z=3?8#taR&d^jI~{D!i$2p8&4x&TI^LS<8_%bdW>mNXp)Mi3+KR5S#V9XovQRJ=St%6_AoiKY(1 zmQ)xyvE2=et!k%1UMVz?vVUD^_yF*Bj|{SV2tt43r^k!!W?^gIb6C2>a-OLtzC4l= zgat7SKcXPe8aZS+H{@lA?A~7#H01N*iymgRnAPw%esB96GDO$sZbwQ>x2_|)xgT|4 za!a0TewrpYLh;a*ADU7LJqblstr@HB*nfqrh~|~X>!3RkTGW_XXiFh?#Z@)0Bc3wZ z@N8M!T+bD3F;wLE`CI#)QAJG29|GeoItnE@_OazDdF$>#hR(6xQp%`F>s& zZ~r1N=25Nvj*$CNu;qZE>lX$4KZ#NI2kBl#@z)!%ZHf&)i=X~%LqEORqK~Z+m$vIi zZT#OU^W@Qfni;~TwZ|l6kaxqFA{LK;rL!N7Kyg~I^uNo}`O-;k7cpDCpabp*V>;+? z$!kHj!Z6jqu$D6`5OL?j;Ch0Uc$UVM@FVvBT-%)bG&W&fy%%A8#YmM+A| zT}TK_eCNGpX9p}auEt1c>nn`InbR_hxNmS9e1wg|y2GW|B$*tua;Q4gw-GVbVm1Fk zM#_Gkl09ku%_NLE9rMH%BpT6!=<^o7mU~T5Wi!|5RDh=0;^ew@>pP{E-U%r$y#}m6 z6;}Q~%i({LRy=G^kq6scJmvWvg(yz;yP^JH$Q}RP*7TnXp4uq9l(qZG!u>i&1T9jY zTQ2(BnQHBsSxCf3K8eM2?iDbY*K*Ray#7`p@vhP5f+0r5F{;f`YFHvkIkAR=IjLDY zi4YfhZrVU{%)3v3Knv(ghkwrZkjd+rN{k_}+Shv5vJzm6`b{3Y>N&`MtRz?MD1F;c0K=Zog>gkXZ(Tv&z;W>-p@`}I@@AN z#+@)Q1Q$_|Wky$ueCvX6T23&Ptd=^aV(`r^$m^qJ2pLsTV&}j8foZ2w@iHs7=XoNx zzO@xFVP2O&-mcyKQ19?XhNjV2v?ilufFV)09s1JiT_d?Z61ZNP9Cs#ibit?911 z`0puhIWVu=+cw{%E!epXoe*EDrpkYx_l6gNZI>D74Ce{?Ck7bP!3JRF4)iB0^4+5_ zpb7*5kBreUqq6+{r=x5WllaQU4lGguq*Hs%m!CEwU|zf{g@?d6|JUEV?!K=U92#Ul zbH%ETe|TLdDuhA*j8lwUV2?sjX9e<7@EjCpXASQdM*MEJ>m4Q_f*IPf-!lj0iWZKZlE(c~{r0*0pxa!nG;A=i7XC?hMb*zC z?4M?=*GP~B^X1wq4*eT206VKV#$Pe6 z`jz@$#$DEMX^qG=1Ynhgj#_+drekTSY?nx!E!A_SV~hnXlBKHkk%F- z?8?>(CWZn*k;4yf6RcA7`a44AxRLpNj+`uRz#uIR<$j^?SHte#F z0psjeoh`}eE7LH{yD7VPo&b(p`gC+fY=fF#GmpJ`>3GV}z{r?ake_eLq)0{0T$==d z&l&NNftqwOsb|p`^)TM(D^Q@NS!X&OzUVA*Q9-|6SrQ=R=yj?vH;V9V-X72=tC>gI zZogk90M${b28pYY=>zlq=`r4!Q-$pERu!sJvnKa36GP(2eIZ8krg*n<`IN*S0e+Fa z2+2WM<*MrIl|2YknDJMDW;;W-Io;u66_JqWL58&q$yA$RJ9K!l_UXB@s<(a6D+8nOnZRT7Y9^nYI_qPm28?T zoY$6;ZcrGSpZ^u#OLas<#`PXHD?L!3L~E5mX~ZCa(Dp~)O0Apm98i9Kz=|hrzHEO+ zV1W!kGjkr<_MsgvIStj!{E7b+=TIQ$Q!czDYkd`ch=K5%*RNU7tAen2b=F|(og`Oc zxF{LLjGo@`nkpwBzOkfrifkW6WYhsmJSSZ$hzs(nU!BiuUt_9*I|coyt!cH^Tal9w zZ+H}uDIYu)LkRQ3E(2fhK2}xBd@(Tui<5F<$$u#_u`4(@zbYTuHh+?w+yRZ6!3|7i zVaudyZ1!ARyjXlY8W|Z-^3Xf-f|NfxW=LQ;NdYr0)}3+h;Ej9cdaZf%ak*QQS3lcx}frFSF8^n)Wgn6>R~ zrm@z6Lw;40Tr*9u_`|y~JUn;blj$|I11r|&?Cu07{SJ}19+>X`6HH|&}dOnM~ zaxuix@=&1k#d|hRYNq)bCoV1K+io9e6*~A*BXli3B&e3MuDT1GK z517VW4sfFnuS`Fp9jn7f2Ua8CV+aOCoC^UL`e;`p4;a;^m1f?&^u3*vCafg!H)%Cb zi<(fdU!4HG=#JEg?X(;Pb`BxAU>l=6rHaA|l-l})ycK%eg6oAin(-;qMKq`e$26e> z$NTKZa_FRKMBb4laxj{$BVQ|`Y6L8XIrQwwHzT*tJ&~j!&A9iQ-ZA}rc2E4&No%oR zzlxrr)$e%-f!$zW6nG~^Szg+K4zVrDuV<*#z3O)EGgdopcjlI@{|R|sOWK`foNbPDS{MP z;Ih4lLl9PTE_`>X{ti{xBut)~zB;Kyxy7H2uoFevxD+fVONxs`95Lg59|PWd*ie3+ z`n^#;4?J;%zz!5Vm>Fy_jn_ZU@e75u!5f@^#LV??I-eXqlpjDVm@<{RCa!*OX2Cg-0-N4BprVNoQ zO>jhh>=G2N>?G}l^AdBpB6%d4NBK}1A#P(Gv4QoThwBft^JZkWM-&;w-UkGpY ziqdF4mi-3Ea;kX$v~~12fg+?z(84(Hq#I$hyGM~IaEDJ%ou=U*W(t3j;h{sK%?fR{Uk`_v~0Qbz2FPet*u)Y z??h@`P&;}312?vXKDw#JJTZWnY}Y1!bE&$w`TQ*J_vU1WG6_~p92JU+!h8u*J+I9O z2mu>TZTIL0=Lam1^y0J~_mP?ZhQ$u{ze4yo!#UySe}PlbC#r}Ya=m#g3Btz0v->DK z+lcHKEsFqlb20LyEF5Wr~tk*uXN&JzkM!_wnuAi@GM$t)=x+4M69%J2Bi8|jknDC030pW%xN@3 z+XsIoZsC`RT*Y9QYzL!Mdfy=#}Dcc^dGnZKW-dx(@6MO`c{kt`U5?pOc$U`Vh zH`B2pCX0g9*Y5z5{HxrF2mAK<&jVTXf6UWP&WfrQ5AgeJL=l4pxrN=kXL~iz6aUKy zQ)bdCu;XQJ?QA6p_KvnIj}hFciS(5IO#7prOD6QM8G-#okrr&uB{Sx$wr7@Xs&wI{ zkSSSs0O>m(s6u~=IP~-#;Dh6nqptgzH_Buq$isd?e@)r04b|D}p9hA|f6ha-F*I?E z&=@lRFx!CMQTius@_%^gB2@`jRKGA%nnVKqL-SyYjUn+Y6K6f z@f@vcy$*dODF#5W*ZBPPOX#A+tf~NSOG3qfV#1E9q166M<<^&AVJF*|1Q(gUR6<_o zL(DI)Gx|eI$xIQvpE=`|G}ihrEW6rXFv>jBI+Z17r1K{bQt1zc>4;nr3*z&mjGxWH zvKa_9RoF+Z_cN_i4s!)wJ>_Yw-PgviDYJxF88VZ-kXYOTF-PH5Zq!8Pq39>@XS>%P z&iZ-DydkRGND$Ic`UFR74+}`iCtGD_DUNrKjQwB00XC{!UU+`Blg%^p*?&x+?YA@(AS8glE}K12nj!X7^Lj| z`KVPDdPrx;X_>#ICT$)_l+IMu_hqs5yFI`|Bcg|HNeZmbPiY{n<8%b#{@EZ4>;?2? zF3zXaOO=A{$e=)dsU4)cqO^uo05$k)>F>iUS<=LGfUB+9jJ8Mc+jO|Zj}B2L24WR| z`0~wg>_l2HCg7JCO|gvoL$yw|{}8Y;65>rs_MZxZf23R`D70T_>f829pFrnEK>v<@ ztA`9#IE2SFdFNU14n5e+z2QVWtoGuG#;38FB&ztBD!R?)Br+vpPl4Imn<$m;y~^i8 zpM0LiyqalTk78}s;}XEN2VG|7J9N(^k_ub97v|?tDn6?uL<>J;ZrE>%K(giYnD`b{ zYJ_D5OIi3lW_0@b^mG<$87=m<<8NO?ObF6DC$ZS@rej(D-iH+=NW&K*se()v+ZIr4 zQIxhcl9yI<5xi^{ji5;?{Igc1b<)NxSMA787FUhGI>!4nIiz%0$=2F;1+U`Nwn?IA ze+li!)cK?;x5opH7oY7i&wLPz1C4l`gUYOlTuWX^yFtK z=+@HI=nBDHe^eFqJmA>gj^}qfOt*_RNz!l=?PL&Q#XDSHxAfwgeS@|1`{0t4)MEh9 z0_w1+)@J3oz`zpIR;F*< zYsBA6OI|$tqqnY6$%R|8IVG5!e+pfZoJ^a^CPqLegy;v!cAu0mumcpNkv5ZC!0-BF zZ^7de=ns*@WYTn%Q^-S2(JJ_wH)4pn>tJPLW?U`t31XeuwP4LbCFt$%qMFXQoZTK8 z-siNd6Z3hPqAQ{|&y6)#e)g$tcJONMiZb$#S;qd)6aSMO8n&tYCy|F0euc41FO>I$S@pd9#vTsXe&Flj3UD!LF@0 zkk(B_XXnauZNDcF@x$BsF5T_pY_P_7N68kH`Dv7O;Kt^czAy0fXu%i=A8ecitUFR2 z)VII;OQHab_%=U&*Z{scLTYQ}wYyxrxI0BD$4X-;!w=~XQ$a0QEA)kqn#lwY+acyH zMkVWN%?8VRG~>ZEsvfa#bAKvUVRr(>Yp?eCtWdnDVx2Vo9<`214X^V^_|FQV*=(aD6FidJysMt+wp@%7j%cwC{Y*C9Rdr@IO9)Y? zwv$F>en*y*e!HP9a#CydGX&;_7`Rb*pPw!)!`Et>QAG-UvX`2lvGScA0S|mBTX}uv zUNfnR3SX5x0`ZOCTy87@(aM^;d}n0cafcXp67Z;%ePW;=!g0#H4HlOJ5c~Y)qCVRJ6ZVwv9BJo%`SyoL#Ku zO*kf^28+_cuupGg^&Cf5>YN(pwnM6;BXxm;lXKGMdj@@fsU*>_qKcZBh?GFMS@F#~ z*SD{5laRLPDo=(V9tz3Wn9mS;Aq}If%7uzjy7S6VV;f!Ju=O1bUhCmZxMnch88k$*0c%kyBW7HqbFL9asiFAjkSlo>4Q^Afjr2*{%^ibKG4CP z(Tm$Mo5cq77nAFaD+v*zZ4uUG&Np2c6!Md{H-4p&)tem?zO8A_i&@j#YcGl7I5gtp zq44dxVY_ocu=951!T~vdXlpa9+B-#KtBYZGl}sXLHMC3f;F{GvQQ~MOX0_!_a# z95vI1h4rTO$3o^A!zDri~Kq#KW(;sOr`|qWj$^T`rl_-EzYHcu= z>}|NhAgD@0*tv!lllEM@$XR-CDs`UmgeI79;e8UPCzhS-Kp_t>#fCHd077;k(0+r( z6G||==MSa|NIL-Najk&M)+$-Z#0As#3Mr#UTZiV*k6X3g-~&Gz4ZFCEsnmApvW3*w zqYs&_$1$hJ)bc{*&UO6z>?wY!!PA1qo7cX<(G z1B||7AO*&4+p4;y7OXeBgibIT7gsbP#~6sqZMen~@v49%<>ht+P~EawPQyqL@A1As z{a~(%+j)N3ix$QSi`5kZ%SCUb!?cnkjW9W&b4?gvK*;uYLql{C`%GJufXXs!`vsmL zT{f&5cGy(5$G_(dz)0c;l?-C!2cRohA6?yr{r$t&g3Oi5<0B zXJ(;k<_N}-mIWg|wUurZ()hWDzz;H3FS9f$wvv^qMAFoXoYu!n3OO=16VT1?JtdL) zs5X76)W`KKQj^Q&N%~Ds39@KW#S%~1r0(grqJq%u1BYRC=%_8N4qAFzv|yQjzxQQf zANvak$zApV(yGamd*kFl4QJv5R-5d@i7N>YF_9iKcL65v9TK+OZLdyyQnq`8?(TKuKJj{=d8Loa0fsSi$$r9ExeY5GA!I&&oxoP>N!xNFDHJKS3qoaqe9Awvhr@^&;l zm_Xgs6PW8qk}-8GkVT4jkT-zY@^)w1$Z;Cd_sto*-ZHMT?0J1f!;6*A((2z*(LS>0 z$Eh~P1P-!DkFMl&cM3R{PX(I*bIk5F z(OVJ9W=phq8#Czb9`6Qzh85z_6j)nVxX?29r61QUMxr?~^{`q|J81o@>HnGc$5%5K zTh87*VS2l))%vB!v);c^`nD}^dzZP|A>F!fXMO(!?*Grg6zP#ssO96?U#s$F=9;o_ zv3KlE)<4ewKKvw1>e`mb1$=Xv*1dmh|DJzhYS0xUPsNEFy*E{6GJe|^oXhoWQ@>=+ z+2V~JvJ3^PySXjT?t63n;gwy*PA4Ci6mf4otE=2$C3-$xJ>zj-#;lj$ik^PpX+4|T z`$wQe`f7`-ziXefPFhUZJdf7yTQ5pCY&~FG_4-xxw&@c56?NMF6PmMw8y@88l;7@m zy7DQS-*A)t{wIlg8MlP9Z!dYBYpy%<)>I%BP#&n=V7+1VfW^G{THvR7sEzU1H-?z^+K zvt*=9_clDdvSj+?Et8q&MeTkotD%(6bjY=L2d~hngiFckx*N3;(@dm;-_;J=A_N$lu3P$cnmGtvL+FF|zw`A%wJddvY6cbULn|ryo{C%|N z$*xExL8)0EF2v+$#a_;}IjpgrwV3;GWb1(!k+v>B=g!zyX*~M|zr*E%i#kiUxI~6# z^&k4heri?n`o@WFYDZNMzw@0dxh>CD{%2_(xMjDRFF8)hkL* z*-mDj^ZXx+HLzc`WACntH71v5<^NM$SFx%(x%1G?MwSZQ4SRn8&+9)d$j4?DdHY!4 zs@rMj*$?J7@Af?%Hs#NL%Y_rqS3Y%(W@apDm~cBwy4J1fiH>`)yWKhYyS{N3pPtRk zo#mHYzY;JxV=W0+i&SF+K}?2Fzi%~VTf=2e+0 z$q{XPyzBb^yo$A|xXYu{`$Jz5fgry)_kk<@9Du6cl&C+&c)n?h@KX#m^7wk5DZ<6mD-|tI@0qaR`byJRj`o)2lZ5B&KFP%k>i-FUrbyB)&inJ1d#`=L zMuF@}r?=)mMekMAL6TA=N;ap< zoKyL-Mtv^s0d~qFin#mez$>T7B#2pXwKnM2vpt_P7EIhGcFSUWZ2gNhi?|F=cL|hD zxzha0X!7yZXOTyX&4;XT4WR zOPZYNeSgNJdX3SSUm+`+x|bexkjz}^H(fc)6?pv8l9Z`WH%-5Mxt;Bvfr`5Ex)Q4l zb8U}lnpQpm!jtAr=<7b^y4O41vm>Qr+r0UP>=~C8KlpyxxNTQ#G_W%=@#{MKLyKCQ z?!UNOTLRo*zX`r%6I;)TBTF{u(z$#Qf2n8ZKHVv!a?C0AWa<X;Tp}FNBzi6MBX3}yZnJsPOrjj=4)?M)PS*cJ~pfunt zfhW$Wf4CR?(D&TfB zo8Jf#{~i3r^=HrD&a%5$#ihNfb}3FtwUyt3&+mI+d-gwrxqa@6-!8u!zMKEK^LN|g zx8e&HWzA0=)j1kMLm(x%UU>4Kp-9fH1bPe-@i;dGUNgNugBV d)ZZe(A-|&p1+i?;gRc?8ehA|T(&703CIAQywJ`ty literal 0 HcmV?d00001 diff --git a/.maintainer-policy.json b/.maintainer-policy.json new file mode 100644 index 0000000..56861dd --- /dev/null +++ b/.maintainer-policy.json @@ -0,0 +1,99 @@ +{ + "schema_version": 1, + "repository": "cathrynlavery/diagram-design", + "base_branch": "main", + "default_merge_method": "squash", + "versioning": { + "enabled": true, + "strategy": "semver", + "increment": "patch", + "manifests": [ + { + "path": ".claude-plugin/plugin.json", + "json_pointer": "/version" + }, + { + "path": ".codex-plugin/plugin.json", + "json_pointer": "/version" + } + ], + "require_synchronized": true, + "require_unique_across_open_prs": true, + "bump_command": "python3 scripts/bump-plugin-version.py" + }, + "gates": { + "local_commands": [ + "python3 scripts/test-plugin-package.py", + "python3 scripts/verify-plugin-package.py origin/main", + "npx --yes @anthropic-ai/claude-code@2.1.229 plugin validate . --strict", + "python3 scripts/test-lint-a11y.py", + "python3 scripts/verify-semantic-motion.py --markdown-only", + "python3 scripts/verify-semantic-motion.py --example-only", + "python3 scripts/verify-motion.py --shipped", + "python3 scripts/test-build-icons-quoted-attributes.py", + "python3 scripts/test-build-icons-devicon.py", + "python3 scripts/test-fix-mojibake.py", + "python3 scripts/lint-skin.py --all --baseline", + "python3 scripts/verify-sequence-oauth.py", + "python3 scripts/verify-drawio-import.py", + "python3 scripts/test-verify-drawio-import.py", + "python3 scripts/verify-mermaid-import.py", + "python3 scripts/test-verify-motion.py", + "python3 scripts/verify-docs-sync.py", + "python3 scripts/test-verify-docs-sync.py", + "python3 scripts/test-self-check.py", + "python3 scripts/verify-geometry.py --all", + "python3 scripts/test-verify-geometry.py", + "python3 scripts/verify-treemap.py --all", + "python3 scripts/test-verify-treemap.py", + "python3 scripts/verify-dumbbell.py", + "python3 scripts/test-verify-dumbbell.py", + "python3 scripts/verify-slopegraph.py --all", + "python3 scripts/test-verify-slopegraph.py", + "python3 scripts/build-icons.py && git diff --ignore-space-at-eol --exit-code -- skills/diagram-design/assets/icons.html skills/diagram-design/references/primitive-icons.md" + ], + "required_check_names": [], + "review": { + "provider": "none", + "minimum_score": "", + "require_same_head": true + }, + "require_current_base": true, + "require_conflict_free": true, + "require_resolved_threads": true, + "require_no_requested_changes": true, + "post_merge_workflows": [ + "CI", + "Deploy gallery to GitHub Pages" + ] + }, + "issue_policy": { + "read_complete_threads": true, + "search_competing_prs": true, + "reproduce_on_current_main": true, + "inspect_history_for_intent": true, + "max_maintainer_authored_prs_per_run": 1 + }, + "pr_policy": { + "process_versioned_prs_serially": true, + "inspect_first_time_fork_workflows": true, + "split_large_or_mixed_scope": true, + "run_complete_suite_on_exact_head": true, + "wait_for_post_merge_before_next": true + }, + "human_gates": [ + "product_priority", + "large_or_mixed_scope", + "first_time_workflow_approval", + "ambiguous_issue_closure", + "security_disclosure", + "merge_authorization" + ], + "report": { + "path": ".context/maintainer/{timestamp}/report.md", + "live_urls": [ + "https://cathrynlavery.github.io/diagram-design/" + ], + "require_worklog": true + } +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b921b64..82a2b46 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ Please read [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) first. All contributions ar ## What this project is -Diagram Design is an agent skill (Claude Code, Codex, Pi) that produces editorial-quality diagrams as self-contained HTML files. The repo is documentation-first: `skills/diagram-design/SKILL.md` is the index, each of the 28 visual types has its own reference file, and the extractor scripts in `skills/diagram-design/scripts/` turn draw.io and Mermaid sources into a structured IR. +Diagram Design is an agent skill (Claude Code, Codex, Pi) that produces editorial-quality diagrams as self-contained HTML files. The repo is documentation-first: `skills/diagram-design/SKILL.md` is the index, each of the 38 visual types has its own reference file, and the extractor scripts in `skills/diagram-design/scripts/` turn draw.io and Mermaid sources into a structured IR. See [README.md](README.md) for the full picture, including the design system and the import/export flows. diff --git a/README.md b/README.md index ab6987d..ba97ef4 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,9 @@ *New in 2.3: semantic system patterns and optional accessible motion, while static output stays the default.* -28 visual types. One agent skill for Claude Code, Codex, and Pi. Semantic patterns describe behavior separately from layout, so a queue, policy trace, or trust boundary can use the nearest existing type without expanding the type count. Static HTML remains the default; optional motion is available for ordered explanations. The skill also redraws draw.io or Mermaid sources at a chosen format, size, and detail level. +*New in 2.5.10: ten more layout grammars — Sankey, fishbone, Wardley map, kanban, user journey, deployment, dependency graph, UML class, story map, and database schema.* + +38 visual types. One agent skill for Claude Code, Codex, and Pi. Semantic patterns describe behavior separately from layout, so a queue, policy trace, or trust boundary can use the nearest existing type without expanding the type count. Static HTML remains the default; optional motion is available for ordered explanations. The skill also redraws draw.io or Mermaid sources at a chosen format, size, and detail level. No Figma. No generic rounded boxes. No 30-minute color-picking sessions. @@ -22,7 +24,7 @@ No Figma. No generic rounded boxes. No 30-minute color-picking sessions. I write at [littlemight.com](https://littlemight.com?utm_source=diagram-design&utm_medium=readme&utm_campaign=github&utm_content=intro) (and run [BestSelf.co](https://bestself.co?utm_source=diagram-design&utm_medium=readme&utm_campaign=github&utm_content=intro) on the side). Every time I needed a diagram — an architecture sketch, a flowchart, a pyramid of what matters most — I'd ask Claude and get back a generic rounded-box thing that looked nothing like the rest of the site. I'd either fight with Figma for 30 minutes or just skip the diagram. -So I built a Claude Code skill for it. Twenty-eight visual types, editorial quality, matches your brand in 60 seconds by reading your website. +So I built a Claude Code skill for it. Thirty-eight visual types, editorial quality, matches your brand in 60 seconds by reading your website. > *The highest-quality move is usually deletion.* Every node earns its place. The accent color is reserved for the 1–2 things the reader should look at first. Target density: 4/10. @@ -30,7 +32,7 @@ So I built a Claude Code skill for it. Twenty-eight visual types, editorial qual ## What it makes -All 28 visual types ship in three static variants: minimal light, minimal dark, and full-editorial. Open any of them directly in a browser. There is no build step, JavaScript, or external image dependency. +All 38 visual types ship in three static variants: minimal light, minimal dark, and full-editorial. Open any of them directly in a browser. There is no build step, JavaScript, or external image dependency. @@ -85,7 +87,22 @@ All 28 visual types ship in three static variants: minimal light, minimal dark,
-**Browse the live gallery:** [cathrynlavery.github.io/diagram-design](https://cathrynlavery.github.io/diagram-design/) — or open [`skills/diagram-design/assets/index.html`](skills/diagram-design/assets/index.html) locally to flip through all 28 diagrams with light / dark / full-editorial tabs. +**New in 2.5.10 — ten layout grammars nothing else covered.** Open the examples directly or compare every light, dark, and full-editorial render in the [30-variant contact sheet](.github/pr-previews/editorial-diagrams-2.5.10.jpg). + +| Type | Shows | Example | +|---|---|---| +| **Sankey** | A quantity splitting and merging across stages — band width is the amount | [`example-sankey.html`](skills/diagram-design/assets/example-sankey.html) | +| **Fishbone** | Causes of one observed effect, grouped by category — root-cause analysis | [`example-fishbone.html`](skills/diagram-design/assets/example-fishbone.html) | +| **Wardley map** | Value chain against evolution — what to build, what to buy, what is moving | [`example-wardley.html`](skills/diagram-design/assets/example-wardley.html) | +| **Kanban** | Work-in-progress by state, with WIP limits and blocked items | [`example-kanban.html`](skills/diagram-design/assets/example-kanban.html) | +| **User journey** | What a person does across stages of an experience, and how it feels | [`example-journey.html`](skills/diagram-design/assets/example-journey.html) | +| **Deployment** | Where software runs — zones, hosts, artifacts, replicas, ports | [`example-deployment.html`](skills/diagram-design/assets/example-deployment.html) | +| **Dependency graph** | What depends on what — fan-in and cycles a tree cannot express | [`example-dependency.html`](skills/diagram-design/assets/example-dependency.html) | +| **UML class** | Classes with operations, inheritance and composition (other UML routes to existing types) | [`example-uml-class.html`](skills/diagram-design/assets/example-uml-class.html) | +| **Story map** | Narrative backbone sliced into releases, with the release cut line | [`example-story-map.html`](skills/diagram-design/assets/example-story-map.html) | +| **Database schema** | Physical tables: SQL types, constraints, indexes, column-level foreign keys | [`example-db-schema.html`](skills/diagram-design/assets/example-db-schema.html) | + +**Browse the live gallery:** [cathrynlavery.github.io/diagram-design](https://cathrynlavery.github.io/diagram-design/) — or open [`skills/diagram-design/assets/index.html`](skills/diagram-design/assets/index.html) locally to flip through all 38 diagrams with light / dark / full-editorial tabs. --- @@ -185,7 +202,7 @@ Every diagram template gives the inline SVG an accessible name and description: ### Manual override -Prefer to set tokens by hand? Open [`skills/diagram-design/references/style-guide.md`](skills/diagram-design/references/style-guide.md) and edit the table. Everything downstream reads from there — all 28 diagrams, the annotation primitive, and the gallery all inherit semantic role names (`accent`, not `#eb6c36`). +Prefer to set tokens by hand? Open [`skills/diagram-design/references/style-guide.md`](skills/diagram-design/references/style-guide.md) and edit the table. Everything downstream reads from there — all 38 diagrams, the annotation primitive, and the gallery all inherit semantic role names (`accent`, not `#eb6c36`). ### First-run gate @@ -206,7 +223,7 @@ The profile library is shared across Claude Code, Codex, and Pi. Use `/diagram-d ## Quickstart ```bash -# From a cloned checkout, open the gallery to see all 28 diagrams +# From a cloned checkout, open the gallery to see all 38 diagrams open skills/diagram-design/assets/index.html # macOS xdg-open skills/diagram-design/assets/index.html # Linux @@ -360,6 +377,16 @@ diagram-design/ │ │ ├── type-layers.md │ │ ├── type-venn.md │ │ ├── type-pyramid.md +│ │ ├── type-sankey.md +│ │ ├── type-fishbone.md +│ │ ├── type-wardley.md +│ │ ├── type-kanban.md +│ │ ├── type-journey.md +│ │ ├── type-deployment.md +│ │ ├── type-dependency.md +│ │ ├── type-uml-class.md +│ │ ├── type-story-map.md +│ │ ├── type-db-schema.md │ │ ├── primitive-annotation.md │ │ ├── primitive-sketchy.md │ │ └── primitive-terminal.md @@ -370,7 +397,7 @@ diagram-design/ │ └── assets/ │ ├── index.html — live gallery, tabbed │ ├── template*.html — scaffolds for new diagrams -│ ├── example-.html — 3 variants × 28 types +│ ├── example-.html — 3 variants × 38 types │ ├── example-loop-terminal.html │ ├── example-quadrant-consultant.html │ ├── example-import-drawio.html @@ -429,7 +456,7 @@ At startup, the agent sees only the skill name and description. When a request m | "Give me a terminal / CLI-window version" | `SKILL.md` + `references/primitive-terminal.md` | | "Redraw this .drawio file for my deck" | `SKILL.md` + `references/import-drawio.md` + `references/output-spec.md` + the chosen type's reference | | "Redraw this Mermaid block for my deck" | `SKILL.md` + `references/import-mermaid.md` + `references/output-spec.md` + the chosen type's reference | -| Routine static diagram-making (any of the 28 visual types) | Only `SKILL.md` + that one type's reference | +| Routine static diagram-making (any of the 38 visual types) | Only `SKILL.md` + that one type's reference | No matter how many types exist, the agent only reads the one you need. Add a new type tomorrow and nothing else changes. diff --git a/commands/import-drawio.md b/commands/import-drawio.md index ffc6686..2725bd7 100644 --- a/commands/import-drawio.md +++ b/commands/import-drawio.md @@ -22,7 +22,7 @@ Accepts `.drawio`, `.drawio.xml`, `.xml`, `.drawio.png`, and `.drawio.svg`. - `--detail=balanced` · `--audience=mixed`. - `--variant=light` — the minimal light template. - A single-page file selects its only page; a multi-page file lists pages and asks which to use. -- Type is chosen from the extracted structure; `--type` forces one of the 27. +- Type is chosen from the extracted structure; `--type` forces one of the 37. ## Flags diff --git a/commands/import-mermaid.md b/commands/import-mermaid.md index 1e994a0..fef80ab 100644 --- a/commands/import-mermaid.md +++ b/commands/import-mermaid.md @@ -22,7 +22,7 @@ Accepts `.mmd`, `.mermaid`, and Markdown files containing fenced `mermaid` block - `--detail=balanced` · `--audience=mixed`. - `--variant=light` — the minimal light template. - A single diagram selects diagram 0; a multi-block Markdown file lists blocks and asks which to use. -- Type is chosen from the extracted grammar and structure; `--type` forces one of the 27. +- Type is chosen from the extracted grammar and structure; `--type` forces one of the 37. ## Flags diff --git a/docs/adr/0002-semantic-patterns-do-not-expand-the-taxonomy.md b/docs/adr/0002-semantic-patterns-do-not-expand-the-taxonomy.md index 389cc80..79e8a26 100644 --- a/docs/adr/0002-semantic-patterns-do-not-expand-the-taxonomy.md +++ b/docs/adr/0002-semantic-patterns-do-not-expand-the-taxonomy.md @@ -1,4 +1,4 @@ -# ADR 0002 — Semantic patterns never expand the 27-type taxonomy +# ADR 0002 — Semantic patterns never expand the visual-type taxonomy **Status:** accepted (v2.3) @@ -8,7 +8,7 @@ Auditing behavior-rich figures (queues, policy traces, trust boundaries) showed ## Decision -Behavior is a separate axis. The seven semantic patterns in `references/semantic-patterns.md` each route to the **nearest existing visual type** for layout; a pattern owns semantic primitives and a tighter budget, never a second layout grammar. The visual-type count stays at 27 unless a genuinely new *layout* grammar appears. +Behavior is a separate axis. The seven semantic patterns in `references/semantic-patterns.md` each route to the **nearest existing visual type** for layout; a pattern owns semantic primitives and a tighter budget, never a second layout grammar. The visual-type count only moves when a genuinely new *layout* grammar appears (it did in v2.5.10 — see [ADR 0007](0007-new-layout-grammars.md), 28 → 38). ## Consequences @@ -21,3 +21,5 @@ Behavior is a separate axis. The seven semantic patterns in `references/semantic **2026-08-18 — the count is 28.** Treemap was admitted under the escape clause above: recursive area subdivision is a layout grammar no existing type provides (bar encodes with length, nested with containment and no quantity, pyramid with rank). It shipped the full §10 set, and the counters named above moved 27 → 28 together with the prose. The decision itself is unchanged — semantic patterns still never add a type, and the count still moves only for a new *layout* grammar. What this amendment records is the procedure: the two counters are this ADR's enforcement, so a PR that edits them without amending this file has quietly made itself the authority. Amend here in the same PR, or the number in the test is just whatever the last contributor typed. + +**2026-08-19 — the count is 38.** Ten additional visual grammars were admitted under the same escape clause: Sankey, fishbone, Wardley map, kanban, user journey, deployment, dependency graph, UML class, story map, and database schema. The per-type argument is in [ADR 0007](0007-new-layout-grammars.md); each ships the full §10 set, and the two counters move 28 → 38 together with the prose. diff --git a/docs/adr/0007-new-layout-grammars.md b/docs/adr/0007-new-layout-grammars.md new file mode 100644 index 0000000..85766cd --- /dev/null +++ b/docs/adr/0007-new-layout-grammars.md @@ -0,0 +1,64 @@ +# ADR 0007 — Ten new layout grammars (28 → 38 visual types) + +**Status:** accepted (v2.5.10) + +## Context + +ADR 0002 fixed the taxonomy at 27 and set the bar for growth: a new type is justified only when a **genuinely new layout grammar** appears, not when a new *behavior* does — behavior is a semantic pattern routed onto an existing type. + +Three coverage audits ran against that bar. The first compared the skill to the Mermaid 2026 taxonomy (29 diagram types) plus current practitioner writing. The second worked through a 20-item request list covering architecture, flows, API/integration, database, and process figures. The third covered UML, story mapping, and physical database diagrams. Between them, ten figures turned out to be undrawable with any existing grammar. + +## Decision + +Add ten types, each with the full §10 shipping set (type reference + light/dark/full examples + gallery tab + routing row + budget row): + +| Type | The grammar that did not exist | Nearest existing type, and why it fails | +|---|---|---| +| **Sankey** | Band width encodes a quantity that splits and merges | Pyramid shows drop-off but not splits/merges; process shows steps, not amounts | +| **Fishbone** | Angled category bones converging on one effect | Tree is parent→children, not cause→effect at a fixed angle with sub-cause ticks | +| **Wardley map** | Two ordinal axes (value chain × evolution) with dependency links and movement | Quadrant positions items but has no dependency chain and no evolution bands | +| **Kanban** | State census in columns with WIP limits and **no connectors** | Swimlane is lanes plus a flow crossing them; a board deliberately has no flow | +| **User journey** | Stage grid plus a sentiment curve as the load-bearing element | Timeline places events on an axis; line charts plot data, neither carries per-stage rows | +| **Deployment** | Physical placement: zones containing hosts containing versioned artifacts, with replica counts and protocol:port paths | Architecture is logical components and relations; high-level is one fixed stack shape, not an arbitrary environment topology | +| **Dependency graph** | Ranked DAG where a node has **many parents** and a **cycle** is representable | Tree structurally forbids both — a single parent per node, and no back-edges | +| **UML class** | Three-compartment boxes with an operations list, plus the typed relationship vocabulary where the arrowhead carries the meaning (triangle, filled diamond, hollow diamond) | ER has no operations compartment and no inheritance or ownership semantics | +| **Story map** | Narrative-ordered backbone crossed by release slices, with a release cut line | Kanban's columns are state, not narrative order, and it does not slice; journey carries sentiment, not scope | +| **Database schema** | Foreign keys that anchor **column row to column row**, with SQL types, constraint chips, and index compartments | ER joins *boxes* and stops at cardinality — it cannot point at a column | + +## Rejected, with reason + +Kept out on purpose, so the next audit does not relitigate them. + +**Already covered by an existing type — the request names a use case, not a grammar:** + +| Requested | Covered by | +|---|---| +| System context, component, API interaction | **Architecture** (a boundary or a zoom level, not a new grammar) | +| UML sequence, request lifecycle, sequence/state combination | **Sequence** | +| UML state machine | **State** | +| UML activity, activity diagram | **Swimlane** + **flowchart** — the fork/join bar alone does not earn a type | +| UML component, UML deployment | **Architecture**, **deployment** | +| Data flow diagram (DFD) | **Data flow** | +| Event flow (producer → broker → consumers) | **Data flow** via the fan-in queue / bottleneck semantic pattern (ADR 0002) | +| Integration diagram | **DP integration** | +| Data model, conceptual ER | **ER** | +| Decision tree | **Flowchart** | + +**Rejected on the ADR 0002 bar or on editorial fit:** + +- **C4 (context / container / component)** — a zoom-level convention over the architecture grammar, not a new one. Semantic-pattern territory. +- **AI-agent / RAG architecture** — same: boxes and arrows with a decision loop. A pattern over architecture, not a layout. +- **Mindmap** — radial restatement of tree. Same information, same grammar, different projection. +- **UML use case** — stick-figure actors and ovals inside a system boundary. A real grammar, but the ovals carry no structure and the figure rarely survives an editorial cut. +- **Pie / donut** — the repository's own rule ("lists of anything → a table") already rejects it. +- **Git graph and packet / bit-field** — real grammars, but narrow audiences and weak editorial fit. Revisit only on demand. +- **Treemap** — originally rejected here, then overtaken by the implementation admitted in #87 under ADR 0002's escape clause. The 28 → 38 count includes it. + +## Consequences + +- The verifiable count moves to 38. `verify-docs-sync.py` and `verify-semantic-motion.py` both hardcode it, by design: adding a type must be a conscious edit, not a silent drift. +- Four of the ten carry a documented, narrow exemption from §6 rule 1 (orthogonal elbows): sankey ribbons, fishbone bones, wardley dependency links, journey sentiment curves. Each exemption is scoped in its own type reference and covers that element only. The other six obey §6 in full; kanban and story map simply have no connectors. +- **ER's scope was narrowed, not duplicated.** `type-er.md` now states that it is entity-level and points at `type-db-schema.md` for the physical schema. Without that edit the two types would have overlapping "Best for" claims and the router would be ambiguous. +- The ADR 0004 byte cap became binding. Adding these types required trimming SKILL.md body prose: the §11 import consequences were compressed, the terminal-variant and typography paragraphs were tightened, and §4's six connector anti-pattern rows collapsed into one row pointing at §6 — that table was the third statement of rules already given in full in §6 and checked one by one in §9. `SKILL.md` sits at ~39.2 KB against the 40 KB cap. The next type must be paid for the same way, never by trimming the frontmatter description. +- Per-type budget rows stayed in SKILL.md §7 rather than moving into the type references, because several older references (venn, pyramid, layers, ER, swimlane, timeline) do not state their own limits. Moving the rows out would have lost those numbers. +- `docs/screenshots/` has no PNGs for the new types yet; the README lists them in a text table instead of the image grid until the screenshots are generated. diff --git a/scripts/test-verify-motion.py b/scripts/test-verify-motion.py index c601af4..35bc02e 100644 --- a/scripts/test-verify-motion.py +++ b/scripts/test-verify-motion.py @@ -402,7 +402,7 @@ def main() -> int: missing_guide = directory / "missing-guide.md" missing_guide.write_text( original_skill.read_text(encoding="utf-8").replace( - "### Visual-type guide (28)", "### Visual guide" + "### Visual-type guide (38)", "### Visual guide" ), encoding="utf-8", ) @@ -410,7 +410,7 @@ def main() -> int: markdown_errors = semantic_module.verify_markdown() finally: semantic_module.SKILL = original_skill - if not any("must contain the 28-row visual-type guide" in error for error in markdown_errors): + if not any("must contain the 38-row visual-type guide" in error for error in markdown_errors): raise AssertionError(f"missing visual-guide anchor was accepted: {markdown_errors}") print("OK: missing visual-type guide anchor is rejected") diff --git a/scripts/verify-docs-sync.py b/scripts/verify-docs-sync.py index e72571c..ac145fd 100644 --- a/scripts/verify-docs-sync.py +++ b/scripts/verify-docs-sync.py @@ -72,8 +72,8 @@ def check_description(errors: list[str]) -> None: errors.append("SKILL.md frontmatter description is missing") return types = selection_table_types(markdown) - if len(types) != 28: - errors.append(f"expected 28 visual types in the selection table; found {len(types)}") + if len(types) != 38: + errors.append(f"expected 38 visual types in the selection table; found {len(types)}") for name in types: key = normalized(name) key = DESCRIPTION_ALIASES.get(key, key) diff --git a/scripts/verify-semantic-motion.py b/scripts/verify-semantic-motion.py index 28d70f6..5c6450c 100644 --- a/scripts/verify-semantic-motion.py +++ b/scripts/verify-semantic-motion.py @@ -191,18 +191,18 @@ def verify_markdown() -> list[str]: if "Selection: semantic pattern, then visual type" not in skill: errors.append("SKILL.md must choose semantic pattern before visual type") router_position = skill.find("semantic-patterns.md") - guide_position = skill.find("### Visual-type guide (28)") + guide_position = skill.find("### Visual-type guide (38)") if router_position < 0: errors.append("SKILL.md must link to semantic-patterns.md") if guide_position < 0: - errors.append("SKILL.md must contain the 28-row visual-type guide") + errors.append("SKILL.md must contain the 38-row visual-type guide") if router_position >= 0 and guide_position >= 0 and router_position > guide_position: errors.append("semantic-pattern router must precede the visual-type guide") - visual_guide = section(skill, "### Visual-type guide (28)", "Rules of thumb:") + visual_guide = section(skill, "### Visual-type guide (38)", "Rules of thumb:") visual_rows = re.findall(r"^\|.*\[type-[^)]+\.md\]", visual_guide, re.MULTILINE) - if len(visual_rows) != 28: - errors.append(f"visual-type guide must preserve 28 rows; found {len(visual_rows)}") + if len(visual_rows) != 38: + errors.append(f"visual-type guide must preserve 38 rows; found {len(visual_rows)}") for index, name in enumerate(PATTERN_NAMES, 1): if name not in skill: @@ -419,7 +419,7 @@ def main() -> int: print(f"- {error}") return 1 if not args.example_only: - print("OK: 7 semantic patterns route independently to the preserved 28 visual types") + print("OK: 7 semantic patterns route independently to the preserved 38 visual types") print("OK: animation modes, primitives, static fallback, and accessibility contract") if not args.markdown_only: print("OK: policy-trace example controls, structure, reduced motion, and unique IDs") diff --git a/skills/diagram-design/SKILL.md b/skills/diagram-design/SKILL.md index 8c50579..f37d2a0 100644 --- a/skills/diagram-design/SKILL.md +++ b/skills/diagram-design/SKILL.md @@ -1,16 +1,16 @@ --- name: diagram-design -description: Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, or DP security matrix diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling. +description: Create branded architecture, IT current-state, flowchart, sequence, state machine, ER/data model, timeline, swimlane, quadrant, radar/spider, loop/flywheel, nested, tree, org chart, layer stack, Venn, pyramid/funnel, treemap, bar, line, Gantt and scatter charts, high-level, process, medallion, data flow, DP integration, DP security matrix, Sankey, fishbone, Wardley map, kanban, user journey, deployment, dependency graph, UML class, story map, or database schema diagrams as standalone HTML/SVG/PNG. Redraw .drawio/.drawio.png/.drawio.svg or Mermaid .mmd sources at a chosen size/detail; onboard brand tokens from a website; add semantic patterns, callouts, accessible motion, or sketchy/hand-drawn styling. license: MIT metadata: - version: "2.4" + version: "2.5" --- # Diagram Design Create visual diagrams as self-contained HTML files with inline SVG and CSS, following an opinionated editorial design system. -Twenty-eight visual types. Semantic patterns describe behavior independently; type references describe layout. Details load from `references/` only when selected. +Thirty-eight visual types. Semantic patterns describe behavior independently; type references describe layout. Details load from `references/` only when selected. --- @@ -49,7 +49,7 @@ Applied to schematics: ## 2. When to Use -Use for any of the 28 visual types (§3) when a reader will learn more from a visual than from prose, a table, or a bulleted list. +Use for any of the 38 visual types (§3) when a reader will learn more from a visual than from prose, a table, or a bulleted list. **Don't use for:** @@ -78,7 +78,7 @@ When behavior, state, enforcement, or risk carries the meaning, first load [`ref The pattern owns semantic primitives and its tighter budget; the type owns layout grammar. Use [`references/animation.md`](references/animation.md) only when motion is requested or materially clarifies ordered change; static remains the default. -### Visual-type guide (28) +### Visual-type guide (38) | If you're showing… | Use | Reference | |---|---|---| @@ -110,6 +110,16 @@ The pattern owns semantic primitives and its tighter budget; the type owns layou | Role-scoped data flow: who does what at each pipeline step | **Data flow** | [type-data-flow.md](references/type-data-flow.md) | | Integration topology of a data platform — sources → core → consumers | **DP integration** | [type-dp-integration.md](references/type-dp-integration.md) | | Per-role / per-component access permissions matrix | **DP security matrix** | [type-dp-security-matrix.md](references/type-dp-security-matrix.md) | +| A quantity splitting and merging across stages, band width = amount | **Sankey** | [type-sankey.md](references/type-sankey.md) | +| Causes of one observed effect, grouped by category (root-cause analysis) | **Fishbone** | [type-fishbone.md](references/type-fishbone.md) | +| Value chain against evolution — what to build, buy, and what is moving | **Wardley map** | [type-wardley.md](references/type-wardley.md) | +| Work-in-progress by state, with WIP limits and blocked items | **Kanban** | [type-kanban.md](references/type-kanban.md) | +| What a person does across stages of an experience, and how it feels | **User journey** | [type-journey.md](references/type-journey.md) | +| Where software runs — zones, hosts, artifacts, replicas, ports | **Deployment** | [type-deployment.md](references/type-deployment.md) | +| What depends on what, with fan-in and cycles a tree cannot express | **Dependency graph** | [type-dependency.md](references/type-dependency.md) | +| Classes with operations, inheritance, composition (other UML routes elsewhere) | **UML class** | [type-uml-class.md](references/type-uml-class.md) | +| Narrative backbone sliced into releases, with the cut line | **Story map** | [type-story-map.md](references/type-story-map.md) | +| Physical tables: SQL types, constraints, indexes, column-level FKs | **Database schema** | [type-db-schema.md](references/type-db-schema.md) | Rules of thumb: @@ -142,12 +152,7 @@ These mark "AI slop" schematics of any type: | `rounded-2xl` on boxes | Max radius 6–10px or none | | Coral on every "important" node | Coral is 1–2 editorial accents, not a signaling system | | Reproducing Mermaid's renderer layout | Imports automatic spacing and routing instead of making an editorial layout | -| Diagonal / slanted connectors between off-axis nodes | Rounded right-angle (orthogonal) elbows are mandatory — see §6 Mandatory connector rules | -| Arrow label sitting on or touching its connector | Label must have a 6–10px gap above the line so the connector stays visible | -| Arrow label mask overlapping a node box | Nodes paint after labels — the fill clips the text into a fragment on the border. See §6 rule 6 | -| Two connectors overlapping or running on the same path | Each connection must be independently traceable — bridge crossings, offset parallels | -| Two connectors sharing a single attach point on a box | Fan attach points along the edge (≥12px apart) so every arrow is clearly distinct — see §6 rule 4 | -| Connector routed behind a non-endpoint box without need | Reroute around intervening boxes; the dashed-transit exception (§6 rule 5) only applies when an unavoidable intervening box sits on the direct path | +| Any breach of the six §6 connector rules | Diagonal slants, labels touching their stroke, masks clipped by a later node, overlapping paths, shared attach points, transit behind a non-endpoint box — each is an automatic fail; §6 states them in full | Type-specific anti-patterns live in each `references/type-*.md`. @@ -193,7 +198,7 @@ Type-specific anti-patterns live in each `references/type-*.md`. - **Arrow label** — Geist Mono, 8px — annotation on arrows - **Editorial aside** — Instrument Serif *italic*, 14px — callouts only -**Mono is for technical content.** Names are Geist sans. Page title is Instrument Serif. Italic Instrument Serif is reserved for annotation callouts. Never JetBrains Mono as a blanket "dev" font. +**Mono is for technical content only** — never as a blanket "dev" font, and never JetBrains Mono. ```html @@ -383,6 +388,16 @@ Quick check: if a coordinate ends in 1, 2, 3, 5, 6, 7, 9 — fix it. | Max series (line chart) | 5 | | Max tasks (Gantt) | 12 | | Max points (scatter plot) | 30 | +| Max stages / nodes / flows (sankey) | 3 / 8 / 12 | +| Max categories (fishbone) | 6 bones, 3 sub-causes each | +| Max components / links (wardley) | 9 / 12, 2 movement arrows | +| Max columns / cards (kanban) | 5 / 12 total, 4 per column | +| Max stages / rows (user journey) | 6 / 3, 2 pain markers | +| Max zones / nodes / paths (deployment) | 3 / 6 / 8, 9 artifacts | +| Max nodes / edges (dependency) | 9 / 14, 4 ranks, 1 cycle | +| Max classes / relationships (UML class) | 7 / 8, 5 members per compartment | +| Max activities / slices / cards (story map) | 5 / 3 / 12 | +| Max tables / columns / FKs (db schema) | 5 / 8 shown / 6 | | Max annotation callouts | 2 | | Max motion (optional) | 8 steps, 12 marked items, 2 simultaneous items — see [animation.md](references/animation.md) | @@ -493,7 +508,7 @@ Every diagram ships in three variants (see `assets/`): **Sketchy variant** (optional, applied to any of the above) — see [primitive-sketchy.md](references/primitive-sketchy.md). SVG turbulence filter wobbles strokes for a hand-drawn feel. Good for essays, not for technical docs. -**Terminal variant** (optional, replaces any of the above) — see [primitive-terminal.md](references/primitive-terminal.md). `template-terminal.html`, `example--terminal.html`. Charcoal-black CLI-window chrome, monospace type, one red-orange accent. Good for dev-tool / CLI-product posts and technical social cards; not brand-tokenized, so skip it for onboarded/brand-matched output. +**Terminal variant** (optional, replaces any of the above) — see [primitive-terminal.md](references/primitive-terminal.md). `template-terminal.html`, `example--terminal.html`. Charcoal CLI-window chrome, monospace, one red-orange accent. Good for dev-tool posts; not brand-tokenized, so skip it for onboarded output. **Animation** (optional presentation layer) — see [animation.md](references/animation.md). Modes are `none` (default), `reveal`, `step`, and `loop`; motion never changes the static meaning or raises the complexity budget. @@ -531,10 +546,7 @@ Every imported diagram is shaped by four decisions. Full spec in [`references/ou | **Detail** | `faithful` (≤24 nodes, zoned) · `balanced` (≤12) · `simplified` (≤7) | `balanced` | | **Audience** | `engineer` · `mixed` · `executive` — governs wording, not count | `mixed` | -Two consequences worth remembering here: - -- The size preset sets the `viewBox` **and** the type ramp. A slide gets 16px node names, not 12px — scaling the canvas without scaling the type is how projected diagrams end up unreadable. -- `faithful` is the one documented exemption from the §7 complexity budget, and it's conditional: above 9 nodes the layout must be zoned, above 24 it must split into overview + detail. The connector rules in §6 never relax. +Two consequences: the size preset sets the `viewBox` **and** the type ramp (a slide gets 16px node names, not 12px), and `faithful` is the only exemption from the §7 budget — conditional, zoned above 9 nodes, split above 24. The §6 connector rules never relax. --- diff --git a/skills/diagram-design/assets/example-db-schema-dark.html b/skills/diagram-design/assets/example-db-schema-dark.html new file mode 100644 index 0000000..b3d5a12 --- /dev/null +++ b/skills/diagram-design/assets/example-db-schema-dark.html @@ -0,0 +1,302 @@ + + + + + + Commerce schema · database schema + + + + +

+

Database schema · Diagram Design

+

Commerce schema · public + billing

+ + + Commerce schema · public + billing + Physical database schema diagram showing five commerce tables with column-level foreign keys, SQL types, and constraint chips, including a cascading delete from orders into order_items and a billing schema group. + + + + + + + + + + + BILLING + + + + + + + + + + + + + + ON DELETE RESTRICT + + + ON DELETE CASCADE + + + ON DELETE RESTRICT + + + ON DELETE RESTRICT + + + + + + + public.customers + + TABLE + + + id + + PK + uuid + + email + + UQ + + NN + text + + + created_at + + NN + timestamptz + + + + + + + public.orders + + TABLE + + + id + + PK + uuid + + customer_id + + FK + + NN + uuid + + + status + + NN + text + + total + + NN + numeric(12,2) + + + placed_at + + NN + timestamptz + + + INDEXES + idx_orders_customer_id + idx_orders_status + + + + + + + public.order_items + + TABLE + + + id + + PK + uuid + + order_id + + FK + + NN + uuid + + + product_id + + FK + + NN + uuid + + qty + + NN + integer + + + unit_price + + NN + numeric(12,2) + + + + + + + public.products + + TABLE + + + id + + PK + uuid + + sku + + UQ + + NN + text + + + name + + NN + text + + price + + NN + numeric(12,2) + + + + 3 more columns + + + INDEXES + uq_products_sku + + + + + + + billing.invoices + + TABLE + + + id + + PK + uuid + + order_id + + FK + + NN + uuid + + + issued_at + + NN + timestamptz + + + + LEGEND + + + Table + + + Schema group + + + PK + Constraint chip + + + Foreign key (column to column) + + + Destructive delete (CASCADE) + +
+ + diff --git a/skills/diagram-design/assets/example-db-schema-full.html b/skills/diagram-design/assets/example-db-schema-full.html new file mode 100644 index 0000000..3bb51b0 --- /dev/null +++ b/skills/diagram-design/assets/example-db-schema-full.html @@ -0,0 +1,305 @@ + + + + + + Commerce schema · database schema + + + + +
+
+

Database schema · Diagram Design

+

Commerce schema · public + billing

+

The physical schema behind checkout: five tables, real SQL types, and foreign keys that anchor column to column, not box to box. The dashed group marks the non-default `billing` schema.

+
+ +
+ + Commerce schema · public + billing + Physical database schema diagram showing five commerce tables with column-level foreign keys, SQL types, and constraint chips, including a cascading delete from orders into order_items and a billing schema group. + + + + + + + + + + + BILLING + + + + + + + + + + + + + + ON DELETE RESTRICT + + + ON DELETE CASCADE + + + ON DELETE RESTRICT + + + ON DELETE RESTRICT + + + + + + + public.customers + + TABLE + + + id + + PK + uuid + + email + + UQ + + NN + text + + + created_at + + NN + timestamptz + + + + + + + public.orders + + TABLE + + + id + + PK + uuid + + customer_id + + FK + + NN + uuid + + + status + + NN + text + + total + + NN + numeric(12,2) + + + placed_at + + NN + timestamptz + + + INDEXES + idx_orders_customer_id + idx_orders_status + + + + + + + public.order_items + + TABLE + + + id + + PK + uuid + + order_id + + FK + + NN + uuid + + + product_id + + FK + + NN + uuid + + qty + + NN + integer + + + unit_price + + NN + numeric(12,2) + + + + + + + public.products + + TABLE + + + id + + PK + uuid + + sku + + UQ + + NN + text + + + name + + NN + text + + price + + NN + numeric(12,2) + + + + 3 more columns + + + INDEXES + uq_products_sku + + + + + + + billing.invoices + + TABLE + + + id + + PK + uuid + + order_id + + FK + + NN + uuid + + + issued_at + + NN + timestamptz + + + + LEGEND + + + Table + + + Schema group + + + PK + Constraint chip + + + Foreign key (column to column) + + + Destructive delete (CASCADE) + +
+ +
+
+

THE DESTRUCTIVE EDGE

+

Deleting an order cascades

+

`order_items.order_id` is the one `ON DELETE CASCADE` in this schema — remove an order and its line items go with it. Every other foreign key is `RESTRICT`.

+
+
+

Column to column, not box to box

+
  • Every FK anchors to a specific row on both ends
  • Fixed 24px row height keeps anchors predictable
  • The `ON DELETE` label is the point of the edge
+
+
+

Scoped to the subsystem

+

`products` truncates to a `+ 3 more columns` row rather than dumping every column. This is checkout, not a `\d+` of the whole database.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-db-schema.html b/skills/diagram-design/assets/example-db-schema.html new file mode 100644 index 0000000..0b6e20b --- /dev/null +++ b/skills/diagram-design/assets/example-db-schema.html @@ -0,0 +1,302 @@ + + + + + + Commerce schema · database schema + + + + +
+

Database schema · Diagram Design

+

Commerce schema · public + billing

+ + + Commerce schema · public + billing + Physical database schema diagram showing five commerce tables with column-level foreign keys, SQL types, and constraint chips, including a cascading delete from orders into order_items and a billing schema group. + + + + + + + + + + + BILLING + + + + + + + + + + + + + + ON DELETE RESTRICT + + + ON DELETE CASCADE + + + ON DELETE RESTRICT + + + ON DELETE RESTRICT + + + + + + + public.customers + + TABLE + + + id + + PK + uuid + + email + + UQ + + NN + text + + + created_at + + NN + timestamptz + + + + + + + public.orders + + TABLE + + + id + + PK + uuid + + customer_id + + FK + + NN + uuid + + + status + + NN + text + + total + + NN + numeric(12,2) + + + placed_at + + NN + timestamptz + + + INDEXES + idx_orders_customer_id + idx_orders_status + + + + + + + public.order_items + + TABLE + + + id + + PK + uuid + + order_id + + FK + + NN + uuid + + + product_id + + FK + + NN + uuid + + qty + + NN + integer + + + unit_price + + NN + numeric(12,2) + + + + + + + public.products + + TABLE + + + id + + PK + uuid + + sku + + UQ + + NN + text + + + name + + NN + text + + price + + NN + numeric(12,2) + + + + 3 more columns + + + INDEXES + uq_products_sku + + + + + + + billing.invoices + + TABLE + + + id + + PK + uuid + + order_id + + FK + + NN + uuid + + + issued_at + + NN + timestamptz + + + + LEGEND + + + Table + + + Schema group + + + PK + Constraint chip + + + Foreign key (column to column) + + + Destructive delete (CASCADE) + +
+ + diff --git a/skills/diagram-design/assets/example-dependency-dark.html b/skills/diagram-design/assets/example-dependency-dark.html new file mode 100644 index 0000000..92a2d73 --- /dev/null +++ b/skills/diagram-design/assets/example-dependency-dark.html @@ -0,0 +1,224 @@ + + + + + + TypeScript monorepo dependency graph · Dependency + + + + +
+

Dependency · Diagram Design

+

TypeScript monorepo dependency graph

+ + + TypeScript monorepo dependency graph + Ranked dependency graph of a TypeScript monorepo showing shared-types as the highest fan-in package with four dependents, and one back-edge cycle from utils into shared-types. + + + + + + + + + + + + + + + + RANK 0 + RANK 1 + RANK 2 + RANK 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CYCLE + + + + + + APP + + 0 IN + web + apps/web + + + + + + APP + + 0 IN + admin + apps/admin + + + + + + SVC + + 2 IN + api + services/api + + + + + + PKG + + 2 IN + ui-kit + packages/ui-kit + + + + + + PKG + + 4 IN + shared-types + packages/shared-types + + + + + + SVC + + 1 IN + db + services/db + + + + + + PKG + + 1 IN + tokens + packages/tokens + + + + + + PKG + + 1 IN + utils + packages/utils + + + + + + EXT + + 1 IN + zod + v3.23 · npm + + + + LEGEND + + + Internal package + + + External / third-party + + + Leaf (no outgoing) + + + Cycle (back-edge) + + Badges show fan-in — a tree can't express convergence. + +
+ + diff --git a/skills/diagram-design/assets/example-dependency-full.html b/skills/diagram-design/assets/example-dependency-full.html new file mode 100644 index 0000000..03f200d --- /dev/null +++ b/skills/diagram-design/assets/example-dependency-full.html @@ -0,0 +1,227 @@ + + + + + + TypeScript monorepo dependency graph · Dependency + + + + +
+
+

Dependency · Diagram Design

+

TypeScript monorepo dependency graph

+

Nine packages, ranked by dependency depth. A tree can't show what matters here — that shared-types has four dependents, or that utils depends back on it. Coral is spent on exactly that cycle.

+
+ +
+ + TypeScript monorepo dependency graph + Ranked dependency graph of a TypeScript monorepo showing shared-types as the highest fan-in package with four dependents, and one back-edge cycle from utils into shared-types. + + + + + + + + + + + + + + + + RANK 0 + RANK 1 + RANK 2 + RANK 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CYCLE + + + + + + APP + + 0 IN + web + apps/web + + + + + + APP + + 0 IN + admin + apps/admin + + + + + + SVC + + 2 IN + api + services/api + + + + + + PKG + + 2 IN + ui-kit + packages/ui-kit + + + + + + PKG + + 4 IN + shared-types + packages/shared-types + + + + + + SVC + + 1 IN + db + services/db + + + + + + PKG + + 1 IN + tokens + packages/tokens + + + + + + PKG + + 1 IN + utils + packages/utils + + + + + + EXT + + 1 IN + zod + v3.23 · npm + + + + LEGEND + + + Internal package + + + External / third-party + + + Leaf (no outgoing) + + + Cycle (back-edge) + + Badges show fan-in — a tree can't express convergence. + +
+ +
+
+

THE HEADLINE

+

One cycle, spent deliberately

+

Coral appears exactly twice: the dashed back-edge from utils into shared-types, and its CYCLE label. Everything else — including the four-dependent fan-in on shared-types — stays ink and muted, because only the cycle is the editorial point.

+
+
+

Why not a tree

+
  • shared-types has four parents, not one
  • utils depends back on its own ancestor
  • a tree can render neither honestly
+
+
+

Read the badges

+

The small N IN chip on every node is the fan-in count. It's the fastest way to spot where a change ripples widest before reading a single arrow.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-dependency.html b/skills/diagram-design/assets/example-dependency.html new file mode 100644 index 0000000..a2c9ba0 --- /dev/null +++ b/skills/diagram-design/assets/example-dependency.html @@ -0,0 +1,224 @@ + + + + + + TypeScript monorepo dependency graph · Dependency + + + + +
+

Dependency · Diagram Design

+

TypeScript monorepo dependency graph

+ + + TypeScript monorepo dependency graph + Ranked dependency graph of a TypeScript monorepo showing shared-types as the highest fan-in package with four dependents, and one back-edge cycle from utils into shared-types. + + + + + + + + + + + + + + + + RANK 0 + RANK 1 + RANK 2 + RANK 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CYCLE + + + + + + APP + + 0 IN + web + apps/web + + + + + + APP + + 0 IN + admin + apps/admin + + + + + + SVC + + 2 IN + api + services/api + + + + + + PKG + + 2 IN + ui-kit + packages/ui-kit + + + + + + PKG + + 4 IN + shared-types + packages/shared-types + + + + + + SVC + + 1 IN + db + services/db + + + + + + PKG + + 1 IN + tokens + packages/tokens + + + + + + PKG + + 1 IN + utils + packages/utils + + + + + + EXT + + 1 IN + zod + v3.23 · npm + + + + LEGEND + + + Internal package + + + External / third-party + + + Leaf (no outgoing) + + + Cycle (back-edge) + + Badges show fan-in — a tree can't express convergence. + +
+ + diff --git a/skills/diagram-design/assets/example-deployment-dark.html b/skills/diagram-design/assets/example-deployment-dark.html new file mode 100644 index 0000000..b9a0f55 --- /dev/null +++ b/skills/diagram-design/assets/example-deployment-dark.html @@ -0,0 +1,190 @@ + + + + + + Checkout service · Deployment + + + + +
+

Deployment · Diagram Design

+

Checkout service, production

+ + + Checkout service, production + Deployment diagram placing the checkout service across an edge CDN zone, a production Kubernetes zone running ingress and API pods, and a data zone with a primary Postgres instance replicating to a standby. + + + + + + + + + + + + + + + + EDGE + + + + PROD / EU-WEST-1 + + + + DATA + + + + + + + + + + HTTPS:443 + + + HTTP:8080 + + + TLS:5432 + + + WAL STREAM + + + + + + CDN + Cloudflare + + edge-cache + v1.2 + + + + + + POD + ingress + + nginx-ingress + v1.11 + + + + + + POD + + x3 + app + + checkout-api + v2.4.1 + + sidecar-otel + v0.9 + + + + + + MANAGED + rds-primary + + postgres + 16.2 + + + + + + MANAGED + rds-standby + + postgres + 16.2 + + + + LEGEND + + + Focal / primary + + + Infra node + + + Store / standby + + + Managed / CDN + + + Cross-zone + + + Replication + + + In-zone call + +
+ + diff --git a/skills/diagram-design/assets/example-deployment-full.html b/skills/diagram-design/assets/example-deployment-full.html new file mode 100644 index 0000000..e57e188 --- /dev/null +++ b/skills/diagram-design/assets/example-deployment-full.html @@ -0,0 +1,202 @@ + + + + + + Checkout service · Deployment + + + + +
+
+

Deployment · Diagram Design

+

Checkout service, production

+

Edge caching absorbs the reads, three ingress-fronted API pods handle the writes, and a single Postgres primary streams WAL to a standby in the data zone.

+
+ +
+ + Checkout service, production + Deployment diagram placing the checkout service across an edge CDN zone, a production Kubernetes zone running ingress and API pods, and a data zone with a primary Postgres instance replicating to a standby. + + + + + + + + + + + + + + + + EDGE + + + + PROD / EU-WEST-1 + + + + DATA + + + + + + + + + + HTTPS:443 + + + HTTP:8080 + + + TLS:5432 + + + WAL STREAM + + + + + + CDN + Cloudflare + + edge-cache + v1.2 + + + + + + POD + ingress + + nginx-ingress + v1.11 + + + + + + POD + + x3 + app + + checkout-api + v2.4.1 + + sidecar-otel + v0.9 + + + + + + MANAGED + rds-primary + + postgres + 16.2 + + + + + + MANAGED + rds-standby + + postgres + 16.2 + + + + LEGEND + + + Focal / primary + + + Infra node + + + Store / standby + + + Managed / CDN + + + Cross-zone + + + Replication + + + In-zone call + +
+ +
+
+

THE HEADLINE

+

One primary, one point of failure

+

Every write lands on `rds-primary`. The standby streams WAL continuously but isn't hot — a primary failure is the one scenario this topology hasn't automated away yet.

+
+
+

Three replicas behind one ingress

+
  • `checkout-api` runs 3 pod replicas
  • `sidecar-otel` ships traces from the same pod
  • nginx-ingress fans requests across all three
+
+
+

Edge absorbs static reads

+

Cloudflare's edge cache serves cached responses directly; only cache misses and writes reach the ingress zone.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-deployment.html b/skills/diagram-design/assets/example-deployment.html new file mode 100644 index 0000000..d43c637 --- /dev/null +++ b/skills/diagram-design/assets/example-deployment.html @@ -0,0 +1,190 @@ + + + + + + Checkout service · Deployment + + + + +
+

Deployment · Diagram Design

+

Checkout service, production

+ + + Checkout service, production + Deployment diagram placing the checkout service across an edge CDN zone, a production Kubernetes zone running ingress and API pods, and a data zone with a primary Postgres instance replicating to a standby. + + + + + + + + + + + + + + + + EDGE + + + + PROD / EU-WEST-1 + + + + DATA + + + + + + + + + + HTTPS:443 + + + HTTP:8080 + + + TLS:5432 + + + WAL STREAM + + + + + + CDN + Cloudflare + + edge-cache + v1.2 + + + + + + POD + ingress + + nginx-ingress + v1.11 + + + + + + POD + + x3 + app + + checkout-api + v2.4.1 + + sidecar-otel + v0.9 + + + + + + MANAGED + rds-primary + + postgres + 16.2 + + + + + + MANAGED + rds-standby + + postgres + 16.2 + + + + LEGEND + + + Focal / primary + + + Infra node + + + Store / standby + + + Managed / CDN + + + Cross-zone + + + Replication + + + In-zone call + +
+ + diff --git a/skills/diagram-design/assets/example-fishbone-dark.html b/skills/diagram-design/assets/example-fishbone-dark.html new file mode 100644 index 0000000..46e6c2f --- /dev/null +++ b/skills/diagram-design/assets/example-fishbone-dark.html @@ -0,0 +1,152 @@ + + + + + + Checkout p99 latency · Root-cause fishbone + + + + +
+

Fishbone · Diagram Design

+

Checkout p99 latency · Root-cause fishbone

+ + + Checkout p99 latency · Root-cause fishbone + Fishbone diagram tracing a checkout latency incident to five candidate cause categories, with a missing database index under Data confirmed as the root cause. + + + + + + + + + + + + + + + + + + + + + canary skipped + + config drift + + + + index missing on orders.created_at + + table 3x forecast + + + + connection pool cap 20 + + GC pauses + + + + no p99 alert + + dashboard sampled at 5m + + + + on-call handover mid-incident + + + + DEPLOY + + + DATA + + + RUNTIME + + + OBSERVABILITY + + + PEOPLE + + + + + + EFFECT + Checkout p99 latency + 4x for 90 minutes + + + + LEGEND + + + Category (bone) + + + Confirmed root cause + + + Sub-cause + + + Observed effect + +
+ + diff --git a/skills/diagram-design/assets/example-fishbone-full.html b/skills/diagram-design/assets/example-fishbone-full.html new file mode 100644 index 0000000..4892975 --- /dev/null +++ b/skills/diagram-design/assets/example-fishbone-full.html @@ -0,0 +1,146 @@ + + + + + + Checkout p99 latency · Root-cause fishbone + + + + +
+
+

Fishbone · Diagram Design

+

Checkout p99 latency · Root-cause fishbone

+

Five candidate cause categories investigated after a 90-minute checkout latency incident. The confirmed root cause carries the diagram's only accent — everything else stays in the neutral ink/muted palette so the reader's eye lands on the answer, not the investigation.

+
+ +
+ + Checkout p99 latency · Root-cause fishbone + Fishbone diagram tracing a checkout latency incident to five candidate cause categories, with a missing database index under Data confirmed as the root cause. + + + + + + + + + + + + + + + + + + canary skipped + + config drift + + + index missing on orders.created_at + + table 3x forecast + + + connection pool cap 20 + + GC pauses + + + no p99 alert + + dashboard sampled at 5m + + + on-call handover mid-incident + + + DEPLOY + + + DATA + + + RUNTIME + + + OBSERVABILITY + + + PEOPLE + + + + + EFFECT + Checkout p99 latency + 4x for 90 minutes + + + LEGEND + + + Category (bone) + + + Confirmed root cause + + + Sub-cause + + + Observed effect + +
+ +
+
+

ROOT CAUSE

+

Data — missing index

+

No index on orders.created_at; the query planner fell back to a sequential scan once the table crossed 3x its forecast size. The single confirmed cause — every other category was ruled out.

+
+
+

Contributing categories

+

Deploy (canary skipped, config drift), Runtime (pool cap 20, GC pauses), and Observability (no p99 alert, 5-minute dashboard sampling) all slowed detection but didn't cause the regression themselves.

+
+
+

People

+

A mid-incident on-call handover cost roughly ten minutes of context — worth fixing, not the root cause.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-fishbone.html b/skills/diagram-design/assets/example-fishbone.html new file mode 100644 index 0000000..1f76212 --- /dev/null +++ b/skills/diagram-design/assets/example-fishbone.html @@ -0,0 +1,152 @@ + + + + + + Checkout p99 latency · Root-cause fishbone + + + + +
+

Fishbone · Diagram Design

+

Checkout p99 latency · Root-cause fishbone

+ + + Checkout p99 latency · Root-cause fishbone + Fishbone diagram tracing a checkout latency incident to five candidate cause categories, with a missing database index under Data confirmed as the root cause. + + + + + + + + + + + + + + + + + + + + + canary skipped + + config drift + + + + index missing on orders.created_at + + table 3x forecast + + + + connection pool cap 20 + + GC pauses + + + + no p99 alert + + dashboard sampled at 5m + + + + on-call handover mid-incident + + + + DEPLOY + + + DATA + + + RUNTIME + + + OBSERVABILITY + + + PEOPLE + + + + + + EFFECT + Checkout p99 latency + 4x for 90 minutes + + + + LEGEND + + + Category (bone) + + + Confirmed root cause + + + Sub-cause + + + Observed effect + +
+ + diff --git a/skills/diagram-design/assets/example-journey-dark.html b/skills/diagram-design/assets/example-journey-dark.html new file mode 100644 index 0000000..1111ff0 --- /dev/null +++ b/skills/diagram-design/assets/example-journey-dark.html @@ -0,0 +1,148 @@ + + + + + + Trial to paid: the first week · User journey map + + + + +
+

User journey · Diagram Design

+

Trial to paid: the first week

+ + + Trial to paid: the first week + User journey map of a new trial user across five stages, showing actions, touchpoints, and a sentiment curve that dips at the usage-limit stage before recovering at upgrade. + + + + + STAGE 1 + Sign up + + STAGE 2 + First run + + STAGE 3 + Invite team + + STAGE 4 + Hit the limit + + STAGE 5 + Upgrade + + + + + + HIGH + NEUTRAL + LOW + + + + + + + + + + + + + + + + + + ACTIONS + TOUCHPOINTS + + + Create workspace + Import first dataset + Add 3 teammates + Export blocked mid-report + Pick annual plan + + + + NO WARNING AT 80% + + + PRICING PAGE IS 3 CLICKS AWAY + + + signup form + onboarding wizard + email invite + in-app modal + billing page + + + + LEGEND + + + + Sentiment curve + + + + Trough stage + + + Pain marker + +
+ + diff --git a/skills/diagram-design/assets/example-journey-full.html b/skills/diagram-design/assets/example-journey-full.html new file mode 100644 index 0000000..58c6e2f --- /dev/null +++ b/skills/diagram-design/assets/example-journey-full.html @@ -0,0 +1,142 @@ + + + + + + Trial to paid: the first week · User journey map + + + + +
+
+

User journey · Diagram Design

+

Trial to paid: the first week

+

One persona, five stages from signup to upgrade. The sentiment curve is the point: a confident start, a dip when the free-tier export limit hits with no warning, and a recovery once the team upgrades.

+
+ +
+ + Trial to paid: the first week + User journey map of a new trial user across five stages, showing actions, touchpoints, and a sentiment curve that dips at the usage-limit stage before recovering at upgrade. + + + + STAGE 1 + Sign up + + STAGE 2 + First run + + STAGE 3 + Invite team + + STAGE 4 + Hit the limit + + STAGE 5 + Upgrade + + + + + HIGH + NEUTRAL + LOW + + + + + + + + + + + + + + + ACTIONS + TOUCHPOINTS + + Create workspace + Import first dataset + Add 3 teammates + Export blocked mid-report + Pick annual plan + + + NO WARNING AT 80% + + + PRICING PAGE IS 3 CLICKS AWAY + + signup form + onboarding wizard + email invite + in-app modal + billing page + + + LEGEND + + + + Sentiment curve + + + + Trough stage + + + Pain marker + +
+ +
+
+

TROUGH

+

Hit the limit

+

The export cap arrives with zero warning at 80% usage, and the only way out is a pricing page that's three clicks from the blocked screen. This is the one stage worth fixing before anything else.

+
+
+

Recovery, not just relief

+

Sentiment climbs back to neutral at upgrade rather than back to high — the friction is remembered. Track this cohort's 90-day retention separately from users who never hit the limit.

+
+
+

Early signal

+

Sign up and invite team both read high. The trial's first impression is working; the problem is entirely mid-funnel.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-journey.html b/skills/diagram-design/assets/example-journey.html new file mode 100644 index 0000000..c7aed44 --- /dev/null +++ b/skills/diagram-design/assets/example-journey.html @@ -0,0 +1,148 @@ + + + + + + Trial to paid: the first week · User journey map + + + + +
+

User journey · Diagram Design

+

Trial to paid: the first week

+ + + Trial to paid: the first week + User journey map of a new trial user across five stages, showing actions, touchpoints, and a sentiment curve that dips at the usage-limit stage before recovering at upgrade. + + + + + STAGE 1 + Sign up + + STAGE 2 + First run + + STAGE 3 + Invite team + + STAGE 4 + Hit the limit + + STAGE 5 + Upgrade + + + + + + HIGH + NEUTRAL + LOW + + + + + + + + + + + + + + + + + + ACTIONS + TOUCHPOINTS + + + Create workspace + Import first dataset + Add 3 teammates + Export blocked mid-report + Pick annual plan + + + + NO WARNING AT 80% + + + PRICING PAGE IS 3 CLICKS AWAY + + + signup form + onboarding wizard + email invite + in-app modal + billing page + + + + LEGEND + + + + Sentiment curve + + + + Trough stage + + + Pain marker + +
+ + diff --git a/skills/diagram-design/assets/example-kanban-dark.html b/skills/diagram-design/assets/example-kanban-dark.html new file mode 100644 index 0000000..bf6643c --- /dev/null +++ b/skills/diagram-design/assets/example-kanban-dark.html @@ -0,0 +1,174 @@ + + + + + + Platform team board · Kanban + + + + +
+

Kanban · Diagram Design

+

Platform team board

+ + + Platform team board · Kanban + Kanban board showing a platform team's work-in-progress across backlog, in-progress, review, and done columns, with the in-progress column over its WIP limit and one blocked card awaiting a vendor maintenance window. + + + + + + + + + + + + + + + + + Backlog + In progress + Review + Done + + + + 3 + + + 4/3 + + + 2/3 + + + 2 + + + + + + + + + + API rate limiting + AVA-201 · priya + + + Terraform module cleanup + AVA-205 · leo + + + Onboarding docs refresh + AVA-209 · maya + + + + + Postgres 16 upgrade + AVA-118 · sam + + + K8s node pool migration + AVA-142 · priya + + + Auth token rotation + AVA-150 · leo + + + Observability dashboards + AVA-161 · dara + + + + Feature flag cleanup + AVA-176 · nadia + + + Vendor SSO integration + AVA-183 · sam + + + + Log retention policy + AVA-090 · leo + + + CI cache warmup + AVA-097 · maya + + + + LEGEND + + + Default + + + Blocked + + + Waiting / external + + + Done + + + Over WIP limit + +
+ + diff --git a/skills/diagram-design/assets/example-kanban-full.html b/skills/diagram-design/assets/example-kanban-full.html new file mode 100644 index 0000000..11e75c6 --- /dev/null +++ b/skills/diagram-design/assets/example-kanban-full.html @@ -0,0 +1,178 @@ + + + + + + Platform team board · Kanban + + + + +
+
+

Kanban · Diagram Design

+

Platform team board

+

A state census of platform-team work, not a flow — no connectors, just where each ticket sits and whether a column is over its WIP limit. In progress is running one over budget, and one ticket is stuck on a vendor maintenance window.

+
+ +
+ + Platform team board · Kanban + Kanban board showing a platform team's work-in-progress across backlog, in-progress, review, and done columns, with the in-progress column over its WIP limit and one blocked card awaiting a vendor maintenance window. + + + + + + + + + + + + + + + + + Backlog + In progress + Review + Done + + + + 3 + + + 4/3 + + + 2/3 + + + 2 + + + + + + + + + + API rate limiting + AVA-201 · priya + + + Terraform module cleanup + AVA-205 · leo + + + Onboarding docs refresh + AVA-209 · maya + + + + + Postgres 16 upgrade + AVA-118 · sam + + + K8s node pool migration + AVA-142 · priya + + + Auth token rotation + AVA-150 · leo + + + Observability dashboards + AVA-161 · dara + + + + Feature flag cleanup + AVA-176 · nadia + + + Vendor SSO integration + AVA-183 · sam + + + + Log retention policy + AVA-090 · leo + + + CI cache warmup + AVA-097 · maya + + + + LEGEND + + + Default + + + Blocked + + + Waiting / external + + + Done + + + Over WIP limit + +
+ +
+
+

OVER LIMIT

+

In progress · 4/3

+

One ticket over the stated cap, and the reason isn't throughput — it's Postgres 16 upgrade, blocked on a vendor maintenance window. Pulling more work in won't help until that window opens.

+
+
+

Review · 2/3

+

Under limit, but one of the two cards is waiting on an external vendor SSO integration rather than internal review time — worth tracking separately from cards actually being reviewed.

+
+
+

Done

+

Capped at two visible entries; older completions roll off the board rather than accumulating indefinitely.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-kanban.html b/skills/diagram-design/assets/example-kanban.html new file mode 100644 index 0000000..fbd4a5c --- /dev/null +++ b/skills/diagram-design/assets/example-kanban.html @@ -0,0 +1,174 @@ + + + + + + Platform team board · Kanban + + + + +
+

Kanban · Diagram Design

+

Platform team board

+ + + Platform team board · Kanban + Kanban board showing a platform team's work-in-progress across backlog, in-progress, review, and done columns, with the in-progress column over its WIP limit and one blocked card awaiting a vendor maintenance window. + + + + + + + + + + + + + + + + + Backlog + In progress + Review + Done + + + + 3 + + + 4/3 + + + 2/3 + + + 2 + + + + + + + + + + API rate limiting + AVA-201 · priya + + + Terraform module cleanup + AVA-205 · leo + + + Onboarding docs refresh + AVA-209 · maya + + + + + Postgres 16 upgrade + AVA-118 · sam + + + K8s node pool migration + AVA-142 · priya + + + Auth token rotation + AVA-150 · leo + + + Observability dashboards + AVA-161 · dara + + + + Feature flag cleanup + AVA-176 · nadia + + + Vendor SSO integration + AVA-183 · sam + + + + Log retention policy + AVA-090 · leo + + + CI cache warmup + AVA-097 · maya + + + + LEGEND + + + Default + + + Blocked + + + Waiting / external + + + Done + + + Over WIP limit + +
+ + diff --git a/skills/diagram-design/assets/example-sankey-dark.html b/skills/diagram-design/assets/example-sankey-dark.html new file mode 100644 index 0000000..ee79097 --- /dev/null +++ b/skills/diagram-design/assets/example-sankey-dark.html @@ -0,0 +1,150 @@ + + + + + + CI compute budget · Sankey + + + + +
+

Sankey · Diagram Design

+

CI compute budget · a month of pipeline minutes

+ + + CI compute budget · a month of pipeline minutes + Sankey diagram showing 12,000 monthly CI minutes splitting into unit test, E2E, build, and lint stages, then merging into passed, failed, and flaked outcomes, with the flaky-rerun path highlighted as the one accent flow. + + + + + BUDGET + TEST STAGE + OUTCOME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CI minutes + 12,000 min + + + + Unit tests + 5,200 min + + E2E + 4,000 min + + Build + 2,000 min + + Lint + 800 min + + + + Flaked + 1,000 min + + Passed + 9,400 min + + Failed + 1,600 min + + + + LEGEND + + + Flow · stage routing + + + Flaked path · reruns + + + Node · stage total + + Two coral ribbons — flaky reruns burn ~8% of the monthly CI budget. + +
+ + diff --git a/skills/diagram-design/assets/example-sankey-full.html b/skills/diagram-design/assets/example-sankey-full.html new file mode 100644 index 0000000..5f10ba3 --- /dev/null +++ b/skills/diagram-design/assets/example-sankey-full.html @@ -0,0 +1,151 @@ + + + + + + CI compute budget · Sankey + + + + +
+
+

Sankey · Diagram Design

+

CI compute budget · a month of pipeline minutes

+

12,000 CI minutes split across four pipeline stages, then merge into three outcomes. Band thickness is the data — the flaky-rerun path is the only colored ribbon, because it's the line item worth cutting.

+
+ +
+ + CI compute budget · a month of pipeline minutes + Sankey diagram showing 12,000 monthly CI minutes splitting into unit test, E2E, build, and lint stages, then merging into passed, failed, and flaked outcomes, with the flaky-rerun path highlighted as the one accent flow. + + + + BUDGET + TEST STAGE + OUTCOME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CI minutes + 12,000 min + + + + Unit tests + 5,200 min + + E2E + 4,000 min + + Build + 2,000 min + + Lint + 800 min + + + + Flaked + 1,000 min + + Passed + 9,400 min + + Failed + 1,600 min + + + LEGEND + + + Flow · stage routing + + + Flaked path · reruns + + + Node · stage total + + Two coral ribbons — flaky reruns burn ~8% of the monthly CI budget. + +
+ +
+
+

EDITORIAL POINT

+

Flaky reruns

+

1,000 of the 12,000 monthly minutes — about 8% of the whole budget — go to tests that failed once and passed on rerun. That's the one line item this diagram argues for cutting.

+
+
+

Where the minutes go

+

Unit tests and E2E together are three-quarters of the budget (9,200 of 12,000 minutes). Build and lint are comparatively cheap at 1,900 and 900.

+
+
+

Net outcome

+

9,400 minutes pass clean, 1,600 fail for real. The remaining 1,000 are pure overhead — neither signal nor failure, just retries.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-sankey.html b/skills/diagram-design/assets/example-sankey.html new file mode 100644 index 0000000..1f986e2 --- /dev/null +++ b/skills/diagram-design/assets/example-sankey.html @@ -0,0 +1,150 @@ + + + + + + CI compute budget · Sankey + + + + +
+

Sankey · Diagram Design

+

CI compute budget · a month of pipeline minutes

+ + + CI compute budget · a month of pipeline minutes + Sankey diagram showing 12,000 monthly CI minutes splitting into unit test, E2E, build, and lint stages, then merging into passed, failed, and flaked outcomes, with the flaky-rerun path highlighted as the one accent flow. + + + + + BUDGET + TEST STAGE + OUTCOME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CI minutes + 12,000 min + + + + Unit tests + 5,200 min + + E2E + 4,000 min + + Build + 2,000 min + + Lint + 800 min + + + + Flaked + 1,000 min + + Passed + 9,400 min + + Failed + 1,600 min + + + + LEGEND + + + Flow · stage routing + + + Flaked path · reruns + + + Node · stage total + + Two coral ribbons — flaky reruns burn ~8% of the monthly CI budget. + +
+ + diff --git a/skills/diagram-design/assets/example-story-map-dark.html b/skills/diagram-design/assets/example-story-map-dark.html new file mode 100644 index 0000000..2815f1b --- /dev/null +++ b/skills/diagram-design/assets/example-story-map-dark.html @@ -0,0 +1,184 @@ + + + + + + Reporting, first release · User story map + + + + +
+

User story map · Diagram Design

+

Reporting, first release

+ + + Reporting, first release · User story map + User story map for a reporting tool's first release: four narrative activities from finding data to trusting it, walking-skeleton steps beneath each, and three release slices sliced by an MVP release-cut line, with the row-level-permissions story flagged as the riskiest bet in Release 2. + + + + + + + + + + + + + + MVP + RELEASE 2 + LATER + + + + + + + + + + + Find the data + ACTIVITY 1 + + + Build the report + ACTIVITY 2 + + + Share it + ACTIVITY 3 + + + Trust it + ACTIVITY 4 + + + + Search datasets + + Preview rows + + + Pick columns + + Add a chart + + + Send a link + + + Check freshness + + + + Keyword search + RPT-101 · 3pt + + + Table + one chart + RPT-102 · 5pt + + + Public link + RPT-103 · 2pt + + + Last-updated stamp + RPT-104 · 1pt + + + + + RELEASE CUT + + + + Saved filters + RPT-110 · 3pt + + + Scheduled email + RPT-112 · 5pt + + + + Row-level permissions + RPT-114 · 3pt + + RISK + + + + Natural-language query + RPT-120 · 8pt + + + Alerting on anomalies + RPT-121 · 5pt + + + + LEGEND + + + Story card + + + Highest risk + + + Release cut + +
+ + diff --git a/skills/diagram-design/assets/example-story-map-full.html b/skills/diagram-design/assets/example-story-map-full.html new file mode 100644 index 0000000..05c1854 --- /dev/null +++ b/skills/diagram-design/assets/example-story-map-full.html @@ -0,0 +1,188 @@ + + + + + + Reporting, first release · User story map + + + + +
+
+

User story map · Diagram Design

+

Reporting, first release

+

Narrative order runs left to right — find the data, build the report, share it, trust it — while priority runs top to bottom. The release-cut line under MVP is the editorial point: everything above it ships first, and the riskiest bet, row-level permissions, lands in Release 2.

+
+ +
+ + Reporting, first release · User story map + User story map for a reporting tool's first release: four narrative activities from finding data to trusting it, walking-skeleton steps beneath each, and three release slices sliced by an MVP release-cut line, with the row-level-permissions story flagged as the riskiest bet in Release 2. + + + + + + + + + + + + + + MVP + RELEASE 2 + LATER + + + + + + + + + + + Find the data + ACTIVITY 1 + + + Build the report + ACTIVITY 2 + + + Share it + ACTIVITY 3 + + + Trust it + ACTIVITY 4 + + + + Search datasets + + Preview rows + + + Pick columns + + Add a chart + + + Send a link + + + Check freshness + + + + Keyword search + RPT-101 · 3pt + + + Table + one chart + RPT-102 · 5pt + + + Public link + RPT-103 · 2pt + + + Last-updated stamp + RPT-104 · 1pt + + + + + RELEASE CUT + + + + Saved filters + RPT-110 · 3pt + + + Scheduled email + RPT-112 · 5pt + + + + Row-level permissions + RPT-114 · 3pt + + RISK + + + + Natural-language query + RPT-120 · 8pt + + + Alerting on anomalies + RPT-121 · 5pt + + + + LEGEND + + + Story card + + + Highest risk + + + Release cut + +
+ +
+
+

RELEASE CUT

+

MVP · 4 stories

+

Keyword search, a table with one chart, a public link, and a last-updated stamp — enough to answer "what is the whole story" without shipping every activity's full depth. Everything below the cut line waits.

+
+
+

Release 2 · 3 stories

+

Saved filters and scheduled email round out the workflow, but row-level permissions is the riskiest bet in the map — untested access-control logic sitting right after the cut, not buried in "Later".

+
+
+

Later · 2 stories

+

Natural-language query and anomaly alerting are named and ordered, not promised — three slices is the ceiling before nobody believes the sequencing anymore.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-story-map.html b/skills/diagram-design/assets/example-story-map.html new file mode 100644 index 0000000..cb8c810 --- /dev/null +++ b/skills/diagram-design/assets/example-story-map.html @@ -0,0 +1,184 @@ + + + + + + Reporting, first release · User story map + + + + +
+

User story map · Diagram Design

+

Reporting, first release

+ + + Reporting, first release · User story map + User story map for a reporting tool's first release: four narrative activities from finding data to trusting it, walking-skeleton steps beneath each, and three release slices sliced by an MVP release-cut line, with the row-level-permissions story flagged as the riskiest bet in Release 2. + + + + + + + + + + + + + + MVP + RELEASE 2 + LATER + + + + + + + + + + + Find the data + ACTIVITY 1 + + + Build the report + ACTIVITY 2 + + + Share it + ACTIVITY 3 + + + Trust it + ACTIVITY 4 + + + + Search datasets + + Preview rows + + + Pick columns + + Add a chart + + + Send a link + + + Check freshness + + + + Keyword search + RPT-101 · 3pt + + + Table + one chart + RPT-102 · 5pt + + + Public link + RPT-103 · 2pt + + + Last-updated stamp + RPT-104 · 1pt + + + + + RELEASE CUT + + + + Saved filters + RPT-110 · 3pt + + + Scheduled email + RPT-112 · 5pt + + + + Row-level permissions + RPT-114 · 3pt + + RISK + + + + Natural-language query + RPT-120 · 8pt + + + Alerting on anomalies + RPT-121 · 5pt + + + + LEGEND + + + Story card + + + Highest risk + + + Release cut + +
+ + diff --git a/skills/diagram-design/assets/example-uml-class-dark.html b/skills/diagram-design/assets/example-uml-class-dark.html new file mode 100644 index 0000000..481bae4 --- /dev/null +++ b/skills/diagram-design/assets/example-uml-class-dark.html @@ -0,0 +1,188 @@ + + + + + + Payments domain · UML class diagram + + + + +
+

UML class · Diagram Design

+

Payments domain · class diagram

+ + + Payments domain · UML class diagram + Class diagram showing Card and BankTransfer realizing a PaymentMethod interface, PaymentService depending on PaymentMethod, and Order composed of OrderLine while associated with Customer. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + USES + + + + 1 + + 1..* + + + + 0..* + + 1 + + + + + + + «interface» + PaymentMethod + + authorize(amount: Money): AuthResult + + capture(ref: String): void + + + + + Card + - number: String + - expiry: Date + - cvv: String + + + + + BankTransfer + - iban: String + - accountHolder: String + + + + + PaymentService + + charge(order: Order): Receipt + + + + + Order + - id: String + - placedAt: Date + - total: Money + + + + + OrderLine + - sku: String + - qty: Int + - price: Money + + + + + Customer + - id: String + - name: String + - email: String + + + + LEGEND · RELATIONSHIPS + + + Inheritance + + + Realization + + + Composition · owns + + + Aggregation · has + + + Association + + + Dependency · uses + +
+ + diff --git a/skills/diagram-design/assets/example-uml-class-full.html b/skills/diagram-design/assets/example-uml-class-full.html new file mode 100644 index 0000000..157669a --- /dev/null +++ b/skills/diagram-design/assets/example-uml-class-full.html @@ -0,0 +1,191 @@ + + + + + + Payments domain · UML class diagram + + + + +
+
+

UML class · Diagram Design

+

Payments domain · class diagram

+

PaymentMethod is the contract two payment methods realize. Order composes its line items and references a customer. PaymentService only depends on the interface, never the concrete methods.

+
+ +
+ + Payments domain · UML class diagram + Class diagram showing Card and BankTransfer realizing a PaymentMethod interface, PaymentService depending on PaymentMethod, and Order composed of OrderLine while associated with Customer. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + USES + + + + 1 + + 1..* + + + + 0..* + + 1 + + + + + + + «interface» + PaymentMethod + + authorize(amount: Money): AuthResult + + capture(ref: String): void + + + + + Card + - number: String + - expiry: Date + - cvv: String + + + + + BankTransfer + - iban: String + - accountHolder: String + + + + + PaymentService + + charge(order: Order): Receipt + + + + + Order + - id: String + - placedAt: Date + - total: Money + + + + + OrderLine + - sku: String + - qty: Int + - price: Money + + + + + Customer + - id: String + - name: String + - email: String + + + + LEGEND · RELATIONSHIPS + + + Inheritance + + + Realization + + + Composition · owns + + + Aggregation · has + + + Association + + + Dependency · uses + +
+ +
+
+

THE HEADLINE

+

PaymentMethod is the contract

+

Card and BankTransfer both realize the interface — the dashed line with the hollow triangle. PaymentService only ever talks to the interface, never to a concrete method.

+
+
+

Composition means it dies with the whole

+
  • OrderLine has no life outside an Order
  • Filled diamond sits at Order, the owner
  • Order also just references Customer — no shared lifecycle there
+
+
+

What's deliberately left out

+

No getters or setters, no full attribute lists. Every member shown earns its place in the argument this diagram is making.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-uml-class.html b/skills/diagram-design/assets/example-uml-class.html new file mode 100644 index 0000000..01bc2ea --- /dev/null +++ b/skills/diagram-design/assets/example-uml-class.html @@ -0,0 +1,188 @@ + + + + + + Payments domain · UML class diagram + + + + +
+

UML class · Diagram Design

+

Payments domain · class diagram

+ + + Payments domain · UML class diagram + Class diagram showing Card and BankTransfer realizing a PaymentMethod interface, PaymentService depending on PaymentMethod, and Order composed of OrderLine while associated with Customer. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + USES + + + + 1 + + 1..* + + + + 0..* + + 1 + + + + + + + «interface» + PaymentMethod + + authorize(amount: Money): AuthResult + + capture(ref: String): void + + + + + Card + - number: String + - expiry: Date + - cvv: String + + + + + BankTransfer + - iban: String + - accountHolder: String + + + + + PaymentService + + charge(order: Order): Receipt + + + + + Order + - id: String + - placedAt: Date + - total: Money + + + + + OrderLine + - sku: String + - qty: Int + - price: Money + + + + + Customer + - id: String + - name: String + - email: String + + + + LEGEND · RELATIONSHIPS + + + Inheritance + + + Realization + + + Composition · owns + + + Aggregation · has + + + Association + + + Dependency · uses + +
+ + diff --git a/skills/diagram-design/assets/example-wardley-dark.html b/skills/diagram-design/assets/example-wardley-dark.html new file mode 100644 index 0000000..c7c2cfb --- /dev/null +++ b/skills/diagram-design/assets/example-wardley-dark.html @@ -0,0 +1,153 @@ + + + + + + AI assistant product · Wardley map + + + + +
+

Wardley map · Diagram Design

+

AI assistant product · Wardley map

+ + + AI assistant product · Wardley map + Wardley map plotting an AI assistant product's value chain from the user-facing need down to raw infrastructure against genesis-to-commodity evolution, with agent orchestration commoditising toward the product band. + + + + + + + + + + + + + + + + + + + + + + + GENESIS + CUSTOM-BUILT + PRODUCT + COMMODITY + + + VISIBLE TO + THE USER + INVISIBLE + + + + + + + + + + + + + + + + + Answer in the flow of work + + + Chat UI + + + + Agent orchestration + + + Eval harness + + + Vector store + + + LLM API + + + GPU compute + + + Object storage + + + + LEGEND + + + Component + + + Dependency + + + + Evolving + + One coral. Position along evolution is the signal — the arrow marks what's about to commoditise. + +
+ + diff --git a/skills/diagram-design/assets/example-wardley-full.html b/skills/diagram-design/assets/example-wardley-full.html new file mode 100644 index 0000000..7e90917 --- /dev/null +++ b/skills/diagram-design/assets/example-wardley-full.html @@ -0,0 +1,146 @@ + + + + + + AI assistant product · Wardley map + + + + +
+
+

Wardley map · Diagram Design

+

AI assistant product · Wardley map

+

The value chain behind an AI assistant, from the user-facing need down to raw infrastructure, positioned against how evolved each component is. The one arrow is the map's point: agent orchestration is commoditising, so betting engineering time on a bespoke orchestrator is a shrinking advantage.

+
+ +
+ + AI assistant product · Wardley map + Wardley map plotting an AI assistant product's value chain from the user-facing need down to raw infrastructure against genesis-to-commodity evolution, with agent orchestration commoditising toward the product band. + + + + + + + + + + + + + + + + + + + + GENESIS + CUSTOM-BUILT + PRODUCT + COMMODITY + + VISIBLE TO + THE USER + INVISIBLE + + + + + + + + + + + + + + Answer in the flow of work + + + Chat UI + + + Agent orchestration + + + Eval harness + + + Vector store + + + LLM API + + + GPU compute + + + Object storage + + + LEGEND + + + Component + + + Dependency + + + + Evolving + +
+ +
+
+

MOVEMENT

+

Agent orchestration

+

Still custom-built today, but the open-source orchestration frameworks maturing this year push it toward product. Betting differentiation here has a shrinking half-life.

+
+
+

Eval harness

+

Genesis-stage and specific to this product's failure modes. No off-the-shelf harness captures what "good" means for this assistant yet — worth the custom build.

+
+
+

GPU compute · Object storage

+

Fully commoditised. Buy, don't build — any engineering time spent here is time not spent on the parts of the chain that are still genesis or custom-built.

+
+
+ + +
+ + diff --git a/skills/diagram-design/assets/example-wardley.html b/skills/diagram-design/assets/example-wardley.html new file mode 100644 index 0000000..c63d8f5 --- /dev/null +++ b/skills/diagram-design/assets/example-wardley.html @@ -0,0 +1,153 @@ + + + + + + AI assistant product · Wardley map + + + + +
+

Wardley map · Diagram Design

+

AI assistant product · Wardley map

+ + + AI assistant product · Wardley map + Wardley map plotting an AI assistant product's value chain from the user-facing need down to raw infrastructure against genesis-to-commodity evolution, with agent orchestration commoditising toward the product band. + + + + + + + + + + + + + + + + + + + + + + + GENESIS + CUSTOM-BUILT + PRODUCT + COMMODITY + + + VISIBLE TO + THE USER + INVISIBLE + + + + + + + + + + + + + + + + + Answer in the flow of work + + + Chat UI + + + + Agent orchestration + + + Eval harness + + + Vector store + + + LLM API + + + GPU compute + + + Object storage + + + + LEGEND + + + Component + + + Dependency + + + + Evolving + + One coral. Position along evolution is the signal — the arrow marks what's about to commoditise. + +
+ + diff --git a/skills/diagram-design/assets/index.html b/skills/diagram-design/assets/index.html index f1ec0b0..c3a0431 100644 --- a/skills/diagram-design/assets/index.html +++ b/skills/diagram-design/assets/index.html @@ -288,29 +288,59 @@ + + + + + + + + + + diff --git a/skills/diagram-design/references/onboarding.md b/skills/diagram-design/references/onboarding.md index f0c6ec8..4786cd3 100644 --- a/skills/diagram-design/references/onboarding.md +++ b/skills/diagram-design/references/onboarding.md @@ -159,7 +159,7 @@ Write the new tokens to `style-guide.md`. Suggest running the `/regenerate-examp After onboarding, the user should: -1. Open `assets/index.html` (gallery) and confirm the new palette feels coherent across all 28 types. +1. Open `assets/index.html` (gallery) and confirm the new palette feels coherent across all 38 types. 2. If any type looks off, they usually need to tune `muted` (often too dark or too light against the new `paper`). --- diff --git a/skills/diagram-design/references/semantic-patterns.md b/skills/diagram-design/references/semantic-patterns.md index 96b6274..d44598c 100644 --- a/skills/diagram-design/references/semantic-patterns.md +++ b/skills/diagram-design/references/semantic-patterns.md @@ -1,6 +1,6 @@ # Semantic patterns -Semantic patterns describe **what a system does**; the 28 visual types describe **how information is arranged**. Choose a pattern first when behavior, state, enforcement, or risk is load-bearing, then use its nearest visual type as the layout grammar. If no pattern matches, choose a visual type directly. +Semantic patterns describe **what a system does**; the 38 visual types describe **how information is arranged**. Choose a pattern first when behavior, state, enforcement, or risk is load-bearing, then use its nearest visual type as the layout grammar. If no pattern matches, choose a visual type directly. Use one primary pattern per figure. A second pattern may supply at most one supporting primitive; if both need full treatment, split overview and detail. Labels and outcomes must remain complete in a static frame. diff --git a/skills/diagram-design/references/type-db-schema.md b/skills/diagram-design/references/type-db-schema.md new file mode 100644 index 0000000..0f0a815 --- /dev/null +++ b/skills/diagram-design/references/type-db-schema.md @@ -0,0 +1,48 @@ +# Database Schema + +**Best for:** the *physical* schema — real tables, real SQL types, real constraints, real indexes, and foreign keys that connect one column to another column. It's the DDL made legible: migrations, review of a real database, and anything where the column type or the `ON DELETE` behavior is the point. + +**Not for domain modeling.** [ER / data model](type-er.md) is entity-level: relationship lines join *boxes* and carry cardinality, fields are a plain list, and it's the right tool for a conceptual or domain conversation. Database schema is column-level: the FK connector anchors to the specific column row on both ends — the one capability ER doesn't have, and the reason this type exists. If you're discussing what an Order *is*, use ER. If you're discussing what happens when a row is deleted, use this. + +## Layout conventions + +### Table box + +- **Header band** — `schema.table` (e.g. `public.orders`) in Geist sans 12px weight 600, with a rectangular type tag (`rx=2`, NOT a pill) reading `TABLE`. A hairline separates it from the body. +- **Column rows** — fixed 24px row height so connectors can anchor predictably. Each row: column name in Geist sans 12px anchored left, SQL type in Geist Mono 9px `muted` anchored right (`uuid`, `text`, `numeric(12,2)`, `timestamptz`), and constraint chips between them as small `rx=2` tags in Geist Mono 8px: `PK`, `FK`, `UQ`, `NN`. Alternate row background `ink @ 0.02` on even rows for scannability. +- **Overflow row** — when a table has more columns than the budget allows, the last row is a Geist Mono 9px `muted` line: `+ N more columns`. Never silently truncate a table without saying so. +- **Index compartment** — an optional final compartment separated by a hairline, labelled with a Geist Mono 8px uppercase `INDEXES` eyebrow, listing index names in Geist Mono 9px (`idx_orders_customer_id`, `uq_products_sku`). List only the indexes that matter to the story, not every index on the table. + +### Foreign-key connectors — the defining rule + +Each FK edge starts at the **vertical centre of its source column row** and ends at the **vertical centre of the referenced column row**, routed with orthogonal rounded elbows (see SKILL.md §6 and [type-architecture.md](type-architecture.md) for the elbow formula and bridge/hop primitive). Label each edge in Geist Mono 8px with its referential action — `ON DELETE CASCADE`, `ON DELETE RESTRICT`, `ON DELETE SET NULL` — masked with the standard 6–10px gap. Fixed 24px row height guarantees ≥12px separation only when two FKs attach to *different* rows on the same table edge — the row spacing itself is the fan. When two or more FKs attach to the *same* row on the same edge (e.g. two child tables both referencing the same parent's primary key), anchoring all of them at the exact row centre would collide at a single point, which SKILL.md §6 rule 4 forbids. Offset each attach point symmetrically around the row's vertical centre instead — ±8px for two edges, keeping every point inside the row's 24px band and ≥12px from its neighbor — so each connector still reads as attaching to that row while remaining independently traceable. + +### Schema grouping + +Tables in a non-default schema sit inside a containment rect (`rx=8`, `ink @ 0.02` fill, `ink @ 0.20` stroke dashed `4,4`) with a Geist Mono 8px uppercase tracked schema label in its top-left corner. Draw the group rect first so tables paint over it. + +### Focal rule + +The 2 accent elements are: (1) the one destructive FK (`ON DELETE CASCADE`) — the edge and its label count together, since a labelled edge is one thing; and (2) the table that FK cascades into, carrying `accent-tint` on its **header band only**, never on the whole box. Nothing else on the diagram is `accent`. + +If a schema has no destructive FK, it has no focal element. Leave it unaccented rather than promoting an arbitrary table. + +## Complexity budget + +Max 5 tables, max 8 column rows shown per table, max 6 FK edges, max 2 accent elements. Over budget → show the subsystem, not the database, and say so in a caption. + +## Anti-patterns + +- Drawing every column of every table — a schema diagram is an argument about a subsystem, not a `\d+` dump. +- FK lines that connect box to box instead of column to column — that's ER, use ER instead. +- Missing SQL types — the type is half the content. +- Unlabelled FK edges — the `ON DELETE` behavior is what a reviewer is looking for. +- Constraint chips on every row until the chips are the noise. +- Index compartments listing every index rather than the ones that matter to the story. +- Mixing conceptual entity names with physical table names in one diagram. + +## Examples + +- `assets/example-db-schema.html` — minimal light +- `assets/example-db-schema-dark.html` — minimal dark +- `assets/example-db-schema-full.html` — full editorial diff --git a/skills/diagram-design/references/type-dependency.md b/skills/diagram-design/references/type-dependency.md new file mode 100644 index 0000000..249ec8f --- /dev/null +++ b/skills/diagram-design/references/type-dependency.md @@ -0,0 +1,44 @@ +# Dependency Graph + +**Best for:** what depends on what, across packages, modules, or services — specifically to show two things a **tree** cannot structurally express: (a) a node with **more than one parent** (a shared dependency that several things converge on), and (b) a **cycle**. If neither appears in the data — every node has exactly one parent and nothing points backward — use [Tree](type-tree.md) instead; say so explicitly rather than forcing a graph layout on tree-shaped data. + +## Layout conventions + +- **Ranked layers.** Nodes sit in horizontal rank rows by dependency depth: rank 0 (entry points nothing depends on) at the top, deeper ranks below. Forward edges point downward across ranks, or run horizontal within a single rank row when a dependency compresses to the same depth as its dependent (e.g. a shallow sibling dependency) — never upward outside the one marked cycle. Rank rows are 120px apart. +- Nodes are the standard node-box pattern (§6): `rx=6`, 160px wide, 56px tall. +- **Fan-in badge.** Every node carries a Geist Mono 8px badge in its top-right corner, inside a small `rx=2` box, showing how many nodes depend on it (`4 in`). A mask fully inside a node is a badge chip, not a label — legitimate under §6 rule 6. The node with the highest fan-in is the diagram's structural story; size nothing else to compete with it. +- **Node treatments** (§5 Node type → treatment): + - Internal package/service → white fill + `ink` stroke. + - External / third-party → `ink @ 0.03` fill + `ink @ 0.30` stroke (the External/Cloud treatment). + - Leaf with no outgoing edges → `ink @ 0.05` fill + `muted` stroke. +- **The cycle.** At most one back-edge points upward against rank order. It is the editorial point of the diagram: `accent` stroke, dashed `5,4`, `marker-end="url(#arrow-accent)"`, routed **around the outside** of the node stack — never straight through the middle, and never behind a node it doesn't connect to — with a masked Geist Mono 8px `CYCLE` label at its visible end. The two nodes the cycle touches stay in their normal node treatment (§5) — no accent stroke or fill on the nodes themselves, or the 2-accent budget is blown on the wrong elements. +- **Focal rule:** the 2 accent elements permitted per diagram are the back-edge and its `CYCLE` label. Nothing else in a dependency graph is accent. +- All six §6 Mandatory connector rules apply in full, no exemptions: rounded right-angle elbows (`r=8`) between off-axis nodes, 6–10px label-margin, no overlapping connectors (bridge/hop at crossings), fanned attach points (≥12px apart) where multiple edges share a box edge, no connector passing behind a non-endpoint box, no label mask clipped by a later-painted node. + +## Complexity budget + +| Limit | Rule | +|---|---| +| Max nodes | 9 | +| Max edges | 14 | +| Max rank layers | 4 | +| Max highlighted cycles | 1 | +| Max accent elements | 2 | + +Over budget: collapse a leaf cluster into one aggregate node labelled with its count (e.g. `+6 leaves`), and say so in a caption — don't silently drop nodes. + +## Anti-patterns + +- Drawing a dependency graph when the data is actually a tree (single parent everywhere, no cycles) — use Tree instead. +- Forward edges that point upward without being the one marked cycle. +- A hairball layout with no rank ordering — rank first, always; ranking is what makes the graph readable, not an optional polish pass. +- One node per file instead of per package/module/service — the graph is about dependency structure, not the filesystem. +- Unlabelled external dependencies — version or registry belongs in the Geist Mono sublabel (`v3.23 · npm`), not left implicit. +- Highlighting more than one cycle in a single diagram — pick the one that matters editorially; a second cycle competes with the first and neither reads. +- Omitting the fan-in badges — without them the reader can't see at a glance where dependencies concentrate, which is the entire reason this type exists over a plain tree. + +## Examples + +- `assets/example-dependency.html` — minimal light +- `assets/example-dependency-dark.html` — minimal dark +- `assets/example-dependency-full.html` — full editorial diff --git a/skills/diagram-design/references/type-deployment.md b/skills/diagram-design/references/type-deployment.md new file mode 100644 index 0000000..8907ccb --- /dev/null +++ b/skills/diagram-design/references/type-deployment.md @@ -0,0 +1,45 @@ +# Deployment + +**Best for:** where the software actually *runs* — hosts, VMs, pods, and managed services placed inside environment or network-boundary zones, with replica counts and versioned artifacts called out. Architecture answers "what talks to what"; deployment answers "what is installed on which host, in which environment, behind which network boundary, at how many replicas." If the diagram has no physical-placement decision to show — no zone boundary, no replica count, no version that matters — use `type-architecture.md` instead; redrawing the logical architecture with hostnames bolted on is the most common deployment anti-pattern. + +## Layout conventions + +Three nesting levels, outermost to innermost — reuses the containment grammar from `type-nested.md`, specialized for infrastructure: + +1. **Zone** — an environment or network boundary (`edge`, `prod / eu-west-1`, `data`). A large rect, `rx=8`, fill `ink @ 0.02`, stroke `ink @ 0.20` dashed `4,4`. A Geist Mono 8px (or 7px for tight layouts) uppercase tracked eyebrow label sits inside the top-left corner, on a paper-colored mask over the border. Zones are drawn **first** — before arrows and nodes — so labels and boxes paint over them (z-order: bg → zones → arrows → labels → nodes). +2. **Infrastructure node** — a host, VM, pod, or managed service inside a zone. The §6 node-box pattern (SKILL.md) at `rx=6`, with a rectangular type tag (`rx=2`, **not** a pill) carrying `POD` / `VM` / `MANAGED` / `CDN` in the top-left corner. +3. **Artifact chip** — what is deployed onto that node. A small 24px-tall rect `rx=4`, fill `ink @ 0.05`, stroke `muted`, holding the image or service name in Geist sans 12px (left-aligned) plus a Geist Mono 9px version tag (right-aligned, e.g. `v2.4.1`). A node can carry more than one chip (stacked with an 8px gap) when more than one artifact is co-located (a sidecar, for example). + +**Replica badge.** A node running N copies carries a right-aligned Geist Mono 8px badge (`x3`) inside its own small `rx=2` box in the node's top-right corner. A mask fully inside a node is a badge chip and is a legitimate exception to the "mask must not overlap a later node" rule (SKILL.md §6 rule 6) — it's part of that same node. + +**Network paths.** Orthogonal elbows between nodes (SKILL.md §6, elbow formula and port-selection rules in `type-architecture.md`), labelled with protocol and port in Geist Mono 8px (`HTTPS:443`, `TLS:5432`). A path that crosses a zone boundary is `link`-blue; a path that stays inside one zone is `muted`. Async or replication paths are dashed `5,4`. + +**Focal rule.** The 2 accent elements are the single-point-of-failure or the newly-introduced piece — never more than 2. In the canonical example: the RDS primary (accent-tint fill, accent stroke) and the replication path to its standby (accent, dashed). + +## Complexity budget + +| Limit | Rule | +|---|---| +| Max zones | 3 | +| Max infrastructure nodes | 6 | +| Max artifact chips | 9 | +| Max network paths | 8 | +| Max accent elements | 2 | + +Over budget → split into one deployment diagram per environment. + +## Anti-patterns + +- Redrawing the logical architecture with hostnames bolted on. If no placement decision is visible (which host, which zone, how many replicas), use `type-architecture.md` instead. +- Zones that are just visual grouping with no boundary meaning — a zone must be a real environment or network boundary, not a layout convenience. +- Artifact chips without a version tag. The version is why the diagram exists; an unversioned chip is a wasted box. +- One node drawn per replica instead of a single node with a replica badge. +- Cloud-vendor icon soup standing in for named nodes — name the host or service, don't decorate it. +- Unlabelled network paths. Protocol and port are the content of a deployment diagram, not decoration. +- Mixing two environments in one diagram (e.g. staging and production nodes side by side without a zone boundary that actually separates them). + +## Examples + +- `assets/example-deployment.html` — minimal light +- `assets/example-deployment-dark.html` — minimal dark +- `assets/example-deployment-full.html` — full editorial diff --git a/skills/diagram-design/references/type-er.md b/skills/diagram-design/references/type-er.md index 7d91ffe..5def3a7 100644 --- a/skills/diagram-design/references/type-er.md +++ b/skills/diagram-design/references/type-er.md @@ -1,6 +1,8 @@ # ER / Data Model -**Best for:** database schemas, API resource relationships, domain models. +**Best for:** conceptual and logical data models, API resource relationships, domain models — anything where the story is *entities and cardinality*. + +**Not for the physical schema.** ER is entity-level: relationship lines join *boxes* and carry cardinality at each end. When the point is real tables with SQL types, constraint chips, indexes, and foreign keys that anchor **column to column**, use [`type-db-schema.md`](type-db-schema.md) instead. ## Layout conventions - Each entity is a two-section box: diff --git a/skills/diagram-design/references/type-fishbone.md b/skills/diagram-design/references/type-fishbone.md new file mode 100644 index 0000000..f4a0a4c --- /dev/null +++ b/skills/diagram-design/references/type-fishbone.md @@ -0,0 +1,75 @@ +# Fishbone / Ishikawa (root-cause) + +**Best for:** structured root-cause analysis. One observed effect, causes grouped by category, sub-causes hanging off each category. The standard artefact of an incident post-mortem — use it when a reader needs to see *what was investigated*, not just the conclusion. + +## Layout conventions + +- **Spine.** A horizontal line (`ink`, 1.2px) runs left→right at the vertical centre `CY`, terminating with an arrowhead into an **effect box** at the right head — the node-box pattern from SKILL.md §6, the observed-effect statement inside. +- **Bones.** Category lines are straight diagonals at a fixed **60°** to the spine, alternating above and below, evenly spaced along it. Each bone carries its category name at the outer end in a small tag-style box (`rx=4`, not a pill) — Geist sans 12px weight 600. +- **Sub-causes.** Short horizontal ticks (32px, `soft`) branch off each bone at fixed points along its length, each with a sub-cause label in Geist Mono 9px sitting past the open end of the tick. +- **Diagonal exemption.** SKILL.md §6 rule 1 (mandatory rounded right-angle elbows) does not apply to the 60° bones — they are this type's defining grammar. The exemption covers **bones and sub-cause ticks only**; any other connector in a fishbone diagram (e.g. a callout leader, a cross-reference arrow) still uses rounded right-angle elbows. +- **Focal rule.** Exactly one bone is the confirmed root cause: its line is `accent`, and its category tag uses `accent-tint` fill + `accent` stroke. The effect box is styled the same way (`accent-tint` fill, `accent` stroke) since it's the diagram's headline. That pair — root-cause bone and effect box — is the full 2-accent budget; every other bone, tag, and tick stays `ink` / `muted` / `soft`. +- **Drawing order:** background → spine → bones → sub-cause ticks → category tag boxes → effect box → legend. Lines before boxes, so box fills cap the line ends cleanly. + +## Math + +For a spine at `y = CY` with the effect box's left edge at `x = HEAD`, bone `k` (1-indexed, k = 1..6) attaches to the spine at: + +``` +attach_x(k) = HEAD - 160 - k * 160 +``` + +Bones alternate above (`k` odd) and below (`k` even) the spine. A bone's far endpoint — where the category tag sits — is the integer-rounded 60° offset from its attach point: + +``` +dx = -96 +dy = ∓168 (minus = above, plus = below) +far_x(k) = attach_x(k) + dx +far_y(k) = CY ∓ 168 +``` + +### Pre-computed reference (5-bone layout, HEAD=1200, CY=320) + +| Bone `k` | Category slot | Side | `attach_x` | `far_x, far_y` | +|---|---|---|---|---| +| 1 | first | above | 880 | 784, 152 | +| 2 | second | below | 720 | 624, 488 | +| 3 | third | above | 560 | 464, 152 | +| 4 | fourth | below | 400 | 304, 488 | +| 5 | fifth | above | 240 | 144, 152 | + +A 6th bone (below) would attach at `x=80`, far endpoint `(-16, 488)`, and its category tag would run from `x=-76` to `x=44` against a viewBox that starts at `x=-40`. It clips. **Five is the ceiling at `HEAD=1200`**: to draw a 6th, widen `HEAD` *and* the viewBox width by at least 160 each, keeping the viewBox origin at `-40`. Both have to move together — widening `HEAD` alone pushes the 200px effect box to `1360..1560` past the `1440` right edge, trading a clipped tag on the left for a clipped effect on the right. Or drop a category. + +**Sub-cause ticks** sit at fractions `m/6` along the bone (`m = 2, 4` for two ticks; `m = 3` for one), so their coordinates stay on the 4px grid: + +``` +tick_x(k, m) = attach_x(k) - 16 * m +tick_y(k, m) = CY ∓ 28 * m +``` + +The tick itself is a 32px horizontal line from `(tick_x, tick_y)` to `(tick_x - 32, tick_y)`; the label sits past its open end, `text-anchor="end"` at `x = tick_x - 36`, `y = tick_y - 4` (above-bones) or `tick_y + 12` (below-bones). + +## Complexity budget + +| Limit | Rule | +|---|---| +| Max categories (bones) | 5 at `HEAD=1200`. A 6th requires a widened canvas — see Geometry | +| Max sub-causes per bone | 3 | +| Max sub-causes total | 18 | +| Max accent elements | 2 (root-cause bone+tag, effect box) | + +## Anti-patterns + +- **More than 5 bones on the default canvas.** The 6th tag clips the viewBox. Widen `HEAD` and the viewBox width together and deliberately, or split by subsystem into two fishbones. +- **Sub-causes that restate the category.** A "Deploy" bone with a sub-cause labeled "deployment issue" adds a node without adding information. +- **A bone with zero sub-causes.** An empty category is a placeholder, not a finding — delete the bone or don't draw it until there's something under it. +- **Accenting more than one root cause.** If two categories are both confirmed, that's two diagrams (or a merged cause) — not two accent bones. The 2-accent budget is load-bearing for the "this is the answer" signal. +- **Using fishbone for a sequence of failures.** A chain of things that happened in order is a timeline or sequence diagram — fishbone is for causes of *one* effect, not a chronology. +- **Pasting in the classic 6M template (Man/Machine/Material/Method/Measurement/Environment) with empty categories.** Name categories from the actual investigation, not a generic checklist waiting to be filled in later. +- **Effect box phrased as a solution.** "Add a p99 alert" is a fix, not an observed effect. The box states what was seen — a symptom, a measurement, an incident — never the remedy. + +## Examples + +- `assets/example-fishbone.html` — minimal light. Checkout p99 latency incident, 5 categories, Data confirmed as root cause. +- `assets/example-fishbone-dark.html` — minimal dark, same data. +- `assets/example-fishbone-full.html` — full editorial: container framing + 3 summary cards of varied widths + footer. diff --git a/skills/diagram-design/references/type-journey.md b/skills/diagram-design/references/type-journey.md new file mode 100644 index 0000000..a53101b --- /dev/null +++ b/skills/diagram-design/references/type-journey.md @@ -0,0 +1,53 @@ +# User Journey Map + +**Best for:** what a person does across the stages of an experience and how it *feels* at each one. The sentiment curve is the load-bearing element — without it this is just a process diagram with extra rows, so if you can't name a sentiment for every stage, use **Process** or **Timeline** instead. + +## Layout conventions + +Vertical stack, top to bottom, for one persona: + +- **Stage headers** — 5 equal columns, 200px wide, 24px gutters (max 6 stages). Each column: a Geist Mono 8px uppercase tracked eyebrow (`STAGE 1` … `STAGE 5`) over the stage name in Geist sans 12px weight 600, both centered on the column. +- **Sentiment band (the differentiator)** — a 160px-tall plot area directly under the headers. 3 horizontal reference hairlines at `rule` 0.10 opacity mark the levels `HIGH` / `NEUTRAL` / `LOW` — Geist Mono 8px `muted`, anchored `end` in a 64px left margin. **Never emoji, never `writing-mode` vertical text for these labels.** A smooth `muted` 1.5px polyline runs through one `r=5` dot per stage, each value snapped to one of five ordinal levels (`HIGH`, `MED-HIGH`, `NEUTRAL`, `MED-LOW`, `LOW`) — only the three that are actually used need a labeled hairline. The trough stage's dot and its incoming segment are `accent`; everything else on the curve is `muted`. +- **Content rows** — up to 3 labelled bands below the sentiment band, each with a Geist Mono 8px uppercase row label sitting in the left margin (same column as the sentiment level labels, never rotated): + - `ACTIONS` — what the user does, Geist sans 12px, one short line per stage. + - `TOUCHPOINTS` — the surface the action happens on (email, app, docs…), Geist Mono 9px `muted`. + - An optional third row for a metric or owner, same treatment as touchpoints. + Rows are separated by hairlines that span the full plot width (from the left margin edge to the last stage's right edge). +- **Pain markers** — on stages where sentiment drops, a small dashed-stroke tag box (`rx=2`, `accent @ 0.50` stroke dashed `3,3`, no fill or a faint accent tint) sits under that stage's actions cell, with a Geist Mono 8px label naming the friction. Max 2 per diagram, and only on the trough — tagging every stage erases the signal. +- **Legend** — horizontal strip at the bottom per the global rule (hairline separator above, 160–180px between entries): three keys, in order — the sentiment line, the trough-stage highlight, and the pain-marker tag. The trough key is not optional: the dip is the finding, so the reader needs the highlight named. + +## Connector note + +The sentiment polyline is a **data curve**, not a connector between nodes — §6 rule 1 (mandatory orthogonal elbows) does not apply to it. This exemption covers the sentiment curve **only**; any other connector in a journey map (there normally are none) still follows the standard connector rules. + +## Geometry + +- Stage grid: left margin 64px, then 5 columns of 200px with 24px gutters (`col_left = 64 + i·224`). +- Sentiment band: 160px tall. Hairlines at the top (`HIGH`), middle (`NEUTRAL`), and bottom (`LOW`) of the band, 80px apart. +- Dot x = the horizontal center of its stage column. Dot y = the snapped level's hairline y (or the interpolated position for an unlabeled level). +- Row height: enough for one line of text plus, in the `ACTIONS` row only, up to two stacked 16px-tall pain-marker boxes. + +## Focal rule + +Exactly 2 accent elements: the trough dot + its incoming curve segment (counts as one), and its pain marker(s) (counts as the other). Nothing else on the map is `accent`. + +## Complexity budget + +Max 6 stages · max 3 content rows · 5 sentiment levels (ordinal, named — never numeric) · max 2 pain markers · max 2 accent elements. + +## Anti-patterns + +- **No sentiment curve.** If every stage feels the same, or you can't name a feeling, you're drawing a process — use **Process** or **Timeline**. +- **More than 6 stages.** Split into two journeys (e.g. acquisition and retention) rather than cramming a wide funnel into one map. +- **Numeric sentiment axis** (a 0–100 score). Sentiment here is ordinal — five named levels, not a chart of a continuous metric. +- **Emoji as sentiment markers.** Use the named levels and hairlines; emoji don't localize, print, or hold up at small sizes. +- **Multiple personas on one map.** Overlaying two sentiment curves erases both. One map per persona. +- **Pain markers on every stage.** If nothing is un-marked, nothing is focal. +- **`writing-mode` vertical row labels.** Horizontal only, in the left margin — same rule as every other type in this skill. +- **Using it for an internal system flow with no human in it.** No person, no sentiment, no journey map — that's an architecture or data-flow diagram. + +## Examples + +- `assets/example-journey.html` — minimal light. *Trial to paid: the first week*, 5 stages, trough at "Hit the limit". +- `assets/example-journey-dark.html` — minimal dark, same data. +- `assets/example-journey-full.html` — full editorial: container framing + 3 varied-width summary cards + footer. diff --git a/skills/diagram-design/references/type-kanban.md b/skills/diagram-design/references/type-kanban.md new file mode 100644 index 0000000..400dafc --- /dev/null +++ b/skills/diagram-design/references/type-kanban.md @@ -0,0 +1,49 @@ +# Kanban Board + +**Best for:** a snapshot of work-in-progress by state — what is queued, what is moving, what is stuck, and where the WIP limit is being breached. This is a *state census*, not a flow: a kanban board has **no connectors at all**. That is exactly what separates it from swimlane (lanes plus a flow crossing them, with handoffs as the load-bearing edges) and from process (ordered steps with directional handoffs). If the diagram needs an arrow anywhere, it isn't a kanban board anymore — reach for swimlane or process instead. + +## Layout conventions + +- **Up to 5 vertical columns of equal width (240px), 32px gutters.** Column background is `ink @ 0.02`; no column border. +- **Header band per column:** column name in Geist sans 12px weight 600, anchored left. A right-anchored **WIP chip** — a rectangular tag (`rx=2`, **never** a pill) holding `n/limit` in Geist Mono 8px — or bare `n` on a queue or terminal column, which carries no limit. Every in-process column states one. A hairline `rule` separator sits directly under the header band, full column width. +- **Cards:** the §6 node-box pattern at `rx=6`, column width minus 16px padding on each side, 56px tall, 12px vertical gap between cards. Content: title in Geist sans 12px weight 600, and a Geist Mono 9px `muted` sublabel line for `TICKET-ID · owner` (e.g. `AVA-214 · nadia`). +- **Drawing order:** background → column fills → header text + WIP chips → header rules → cards (each: box, then left accent bar if blocked, then title, then sublabel) → legend. + +## Card states — the type's semantic vocabulary + +Every card renders in exactly one of four states. Document and use all four when the board has enough cards to show them: + +| State | Fill | Stroke | Extra | +|---|---|---|---| +| `default` | white | `ink` | — | +| `blocked` | `accent @ 0.05` | `accent` (full opacity) dashed `4,4` | 4px `accent` bar on the card's left edge | +| `waiting / external` | `ink @ 0.02` | `ink @ 0.20` dashed `4,3` | — | +| `done` | `ink @ 0.05` | `muted` | — | + +These map directly onto the SKILL.md §5 node-treatment table (`security` → blocked, `optional` → waiting/external, `store` → done) — the board reuses the system's existing semantic fills rather than inventing new ones. + +## Over-limit column + +When a column's card count `n` exceeds its stated `limit`, the WIP chip's stroke and text go `accent`. That plus one blocked card is the full 2-accent budget for the diagram — don't spend the budget anywhere else. + +## Complexity budget + +- Max 5 columns, max 4 cards per column, max 12 cards total. +- Max 2 accent elements (the over-limit chip counts as one; a blocked card counts as one). +- Over budget on a single column → aggregate the backlog into one count card (`+14 more`) rather than listing every item. + +## Anti-patterns + +- **Drawing arrows between cards.** A board shows state, not flow — if the flow itself needs to be visible, use swimlane or process instead. +- **More than 4 cards in a column.** Aggregate into a count card; don't let a column scroll off the canvas. +- **One card per person.** That's an org chart wearing a kanban skin. +- **In-process columns without WIP limits.** The limit is half the point of the type — a column work flows *through* with no stated limit can't show that it's over budget. The entry queue and the terminal column are the exception: nothing is constrained by holding more done work, so they show a bare count. +- **Accenting every blocked card.** One or two blocked cards read as signal; a column full of accent reads as noise and erases the focal rule. +- **A "Done" column that grows without bound.** Cap it and note the archive point in the sublabel or a footnote — an unbounded Done column just becomes a second Backlog. +- **Pill-shaped WIP tags.** The chip is a rectangle at `rx=2`, matching the type-tag primitive in §6 — pills read as status badges from an unrelated design language. + +## Examples + +- `assets/example-kanban.html` — minimal light. Platform-team board: Backlog (3), In progress (4/3, over limit), Review (2/3), Done (2), one blocked card. +- `assets/example-kanban-dark.html` — minimal dark, same data. +- `assets/example-kanban-full.html` — full editorial: container framing + 3 summary cards of varied widths + footer. diff --git a/skills/diagram-design/references/type-sankey.md b/skills/diagram-design/references/type-sankey.md new file mode 100644 index 0000000..f76c0b9 --- /dev/null +++ b/skills/diagram-design/references/type-sankey.md @@ -0,0 +1,72 @@ +# Sankey / Flow-Quantity + +**Best for:** showing where a *quantity* goes as it splits and merges across a small number of stages — CI compute budgets, funnel-adjacent volume flows, cost or headcount allocation. This is the one type where band **thickness carries data**; if the reader doesn't need to compare magnitudes, use process or pyramid instead. + +## Layout conventions + +- **Exactly 3 stage columns**, left → right. No more, no less — above 3 stages, split into two linked diagrams. +- **Nodes are vertical bars**, `width=12`, solid `ink` fill, no stroke. Height is proportional to the quantity passing through, rounded to the nearest 4px so it stays on-grid — the rounding is a rendering step, not a data change; the true value still prints in the quantity sublabel. +- **Flows are filled ribbons**, not stroked lines: a single closed `` per flow. Top edge is a cubic Bézier from the source node's top-offset to the target node's top-offset; bottom edge is the same curve run in reverse from target-bottom back to source-bottom. **Both** control points sit at the horizontal midpoint between the two columns, each at the y of the end it belongs to: `C midX,y0 midX,y1 targetX,y1`. That is what makes the band leave and arrive **horizontally**, so it plugs into each bar square-on. Putting the second control on the target's x instead (`C midX,y0 targetX,y1 targetX,y1`) collapses it onto the endpoint, the arrival tangent degenerates, and every ribbon meets its bar at a visible slant — it looks like the band is not attached. +- **No arrowheads, ever.** Direction is implied by the left-to-right column order. This is a deliberate, explicit exemption from SKILL.md §6's orthogonal-elbow-and-arrowhead rule: ribbons are area encodings, not connectors, and a marker on a filled band reads as clutter, not information. +- **Ribbon fill:** `muted` at `0.18` opacity for ordinary flows. The one editorial focal path (see below) uses `accent` at `0.28` opacity. A focal path may span more than one ribbon segment (e.g. two flows that both feed the same downstream node as halves of one story) — accenting every ribbon that belongs to that single path still counts as **one** focal element, not one per ribbon. Never per-flow rainbow coloring — color is reserved for the one path that deserves attention. +- **Node ordering minimizes crossings.** Order nodes within each column so that flows converging on (or diverging from) the same node stay in a consistent top-to-bottom sequence across columns. If two ribbons still cross more than once, reorder the nodes — don't let them tangle. +- **Labels:** node name in Geist sans 12px 600, quantity directly under it in Geist Mono 9px `muted`. Placement is column-specific: column 1 sits outside the bar, `text-anchor="end"`; column 2 sits in the gutter above its bar, `text-anchor="middle"`, **vertically centred in that gutter** rather than flush to the top, or the cap line grazes the bar above; column 3 sits outside the bar, `text-anchor="start"`. + + Centring the column-2 label in its gutter is what makes it legible: the gutter is the gap the bands themselves leave between two nodes, so a centred label sits on clean paper and needs no backing at all. Don't reach for a mask rect here — over a filled band it reads as a hole punched in the diagram, and if the label already sits on paper it is solving nothing. If a label genuinely has nowhere clear to sit, the column is over budget: drop a node or split the diagram. +- **Column headers:** Geist Mono 8px, uppercase, tracked, centered above each column — "CI COMPUTE BUDGET / TEST STAGE / OUTCOME" style eyebrows, not full sentences. +- **Drawing order:** background → column headers → ordinary ribbons → the accent path's ribbon(s) (painted last among ribbons so they read on top) → node bars → node labels → legend. +- **Legend:** horizontal strip at the bottom per the global rule, viewBox extended ~60–100px to fit it (a Sankey's ribbons need more bottom clearance than a typical diagram because node stacks run tall). Swatches are 16×8 rectangles matching each ribbon treatment, plus an optional italic aside stating the editorial read. + +## Scale rule + +Pick **one px-per-unit constant `k`** for the whole diagram and apply it to every node and ribbon thickness — never a different scale per column. Round each resulting thickness to the nearest 4px (grid compliance) and reconcile the rounding at the node level, not the flow level, so a node's outgoing ribbons still sum exactly to its (rounded) height. + +**When you control the numbers, choose ones that land on the grid.** At `k`, a 4px step is `4/k` units; pick quantities that are whole multiples of it and the drawn area is then exactly the printed number. Rounding is the fallback for real data you cannot choose, and it is a real cost: at `k = 0.02` a 4px step is 200 minutes, so a rounded bar can misstate its own label by up to 100. In a chart whose entire premise is that area encodes quantity, a bar that disagrees with the number printed beside it spends credibility to buy grid compliance. Never let the rounding exceed one 4px step, and never round a flow so far that a node's ribbons no longer sum to its bar. + +**Minimum rendered ribbon thickness: 4px.** Anything that would round to less gets folded into an "other" band rather than drawn as an invisible hairline — a Sankey ribbon the reader can't see isn't communicating anything. + +### Worked reference (k = 0.02 px/unit, budget = 12,000 CI minutes) + +| Node | Quantity | Height (px) | +|---|---|---| +| CI minutes (col 1) | 12,000 | 240 | +| Unit tests | 5,200 | 104 | +| E2E | 4,000 | 80 | +| Build | 2,000 | 40 | +| Lint | 800 | 16 | +| Passed | 9,400 | 188 | +| Failed | 1,600 | 32 | +| Flaked | 1,000 | 20 | + +Each column's node heights sum to the same 240px total — that invariant (total-in equals total-out) is what makes the diagram trustworthy at a glance. If your columns don't sum to the same total, the data has a leak or the layout has a bug. + +## Complexity budget + +| Limit | Rule | +|---|---| +| Max stage columns | 3 | +| Max nodes | 8 | +| Max flows (ribbons) | 12 | +| Max accent elements | 2 (a focal path's ribbons count as one, regardless of how many segments it spans) | + +Over budget → split into two linked Sankeys (e.g. an overview stage-1→stage-2 diagram plus a detail stage-2→stage-3 diagram) rather than cramming a fourth column or a ninth node into one canvas. + +## Anti-patterns + +- **Ribbons that meet the bar at a slant.** The single most common way to get this type wrong, and it is a control-point mistake, not a layout one: both controls belong on the midpoint x. A band arriving at an angle reads as detached from its node, which undermines the one thing the diagram is asserting — that this quantity flows into that node. +- **An opaque mask rect behind a column-2 label.** Over a filled band it reads as a hole punched in the diagram, and it erases any bar it overlaps. Centre the label in the gutter instead, where it sits on clean paper and needs nothing behind it. +- **Column-2 labels flush to the top of their gutter.** Centre them, or the cap line touches the bar above and the label looks like it belongs to the wrong node. +- **A bar whose height disagrees with the number printed beside it.** See the scale rule: choose grid-friendly quantities when the data is yours to choose. +- **Ribbons crossing more than once.** Reorder the nodes in the offending column; a Sankey with a tangle in the middle is unreadable. +- **Ribbons thinner than 4px.** Merge them into an "other" band instead of drawing a sliver no one can see. +- **Per-flow rainbow coloring.** One `muted` treatment for ordinary flows, one `accent` treatment for the flow that carries the editorial point — never a distinct hue per ribbon. +- **Using Sankey for a simple funnel.** A single narrowing quantity with no splits or merges is a pyramid/funnel, not a Sankey. +- **Using Sankey for a plain step sequence.** If nothing splits, merges, or varies in thickness, it's a process diagram — the whole point of Sankey is quantity that branches. +- **Stacking two flows at the same node-edge offset.** Every flow gets its own offset range within the node's height, in a consistent top-to-bottom order — never two ribbons overlapping at the same attach point. +- **Percentages or quantities that don't sum to the source total.** Every node's outgoing (or incoming) flows must sum to that node's own height. A Sankey that doesn't balance reads as an error, not a design choice. + +## Examples + +- `assets/example-sankey.html` — minimal light. A month of CI compute (12,000 minutes) splitting into test/build/lint stages, merging into passed/failed/flaked outcomes; the flaky-rerun path is the one accent flow. +- `assets/example-sankey-dark.html` — minimal dark, same data. +- `assets/example-sankey-full.html` — full editorial: container framing + 3 summary cards of varied widths + footer. diff --git a/skills/diagram-design/references/type-story-map.md b/skills/diagram-design/references/type-story-map.md new file mode 100644 index 0000000..08fbccd --- /dev/null +++ b/skills/diagram-design/references/type-story-map.md @@ -0,0 +1,46 @@ +# User Story Map + +**Best for:** the Jeff Patton user story map — it answers "what is the whole story, and where do we cut the first release?" Narrative order runs left to right; priority runs top to bottom. The **release cut** is the editorial point of the diagram: a map without one is just a backlog in a grid. + +This is neither **Kanban** nor **User journey**, and the distinction is load-bearing: + +- **Kanban** shows *state* — columns are Todo/Doing/Done, there is no narrative order and nothing to slice. +- **User journey** shows *one persona's feelings* across stages via a sentiment curve. +- A **story map** has neither state nor sentiment. Its columns are **narrative order** and its rows are **release slices**. If you aren't slicing releases, use one of those two instead. + +## Layout conventions + +Vertical stack, top to bottom: + +1. **Backbone** — up to 5 activities in left-to-right narrative order, as wide header cards (200px, `rx=6`, `ink @ 0.05` fill, `muted` stroke). Each card: the activity name in Geist sans 12px weight 600, above a Geist Mono 8px uppercase tracked eyebrow (`ACTIVITY 1` … `ACTIVITY 5`). 24px gutters between cards. +2. **Walking skeleton row** — directly under each activity, its user *steps* as smaller cards (`rx=4`, 32px tall, white fill, `ink` stroke), Geist sans 12px. One or two per activity; reserve room for two so every activity's row bottom aligns even when it only has one step. +3. **Release slices** — horizontal bands below the skeleton row, each a full-width lane with a Geist Mono 8px uppercase tracked label (`MVP`, `RELEASE 2`, `LATER`) sitting in a 96px left margin. Band background alternates `ink @ 0.02` / none. Inside each band, story cards (`rx=4`, 48px tall) sit in their activity's column: story title in Geist sans 12px weight 600, plus a Geist Mono 9px estimate/ticket sublabel (e.g. `RPT-114 · 3pt`). Whenever any slice has a gap (an activity with no card in that row), add `rule` hairline column separators (0.8px, dashed `4,4`, 0.10 opacity) running from just under the backbone down to the bottom of the last slice, drawn before the cards — without them, a gappy grid reads as scattered rather than mapped to its activity. +4. **The release cut line** — a full-width horizontal `accent` rule (1.5px) immediately under the MVP band, with a masked Geist Mono 8px label `RELEASE CUT` at its right end. This is accent element one. +5. **Legend** — horizontal strip at the bottom per the global rule (hairline separator above): one swatch for the default story card, one for the highest-risk treatment, one for the release-cut line. + +## Focal rule + +Exactly 2 accent elements: the release cut line with its `RELEASE CUT` label (counts as one), and the single riskiest story card — drawn with `accent @ 0.05` fill, `accent` dashed `4,4` stroke, and a small rectangular `RISK` tag (`rx=2`, matching the type-tag primitive) — counts as the other. Nothing else on the map is `accent`. + +## Complexity budget + +- Max 5 activities, max 3 release slices, max 12 story cards total, max 4 cards per slice. +- Max 2 accent elements (the release cut counts as one; the riskiest card counts as the other). +- Over budget on a single activity or slice → split into one map per activity, or collapse a slice into a count card rather than listing every item. + +## Anti-patterns + +- **No release cut.** A map with no cut line is a backlog in a grid, not a map — the cut is the whole point. +- **Columns ordered by priority instead of narrative sequence.** The backbone is a story, left to right, in the order the user experiences it — not a ranked list. +- **Story cards that are features, not user-visible outcomes.** "Add a chart" is a story; "Refactor the charting service" is not — it belongs in a backlog ticket, not the map. +- **Slices named by date instead of by outcome.** `MVP` / `RELEASE 2` / `LATER` describe scope; `Q3` / `Q4` describe a calendar and drift the moment the schedule slips. +- **More than 3 slices.** Beyond MVP, next, and later, nobody believes the ordering — collapse the tail into "Later." +- **Mixing two personas in one map.** One map per persona, same as user journey. +- **Adding state columns.** That turns it into a kanban board — this type has no state. +- **Adding a sentiment curve.** That turns it into a user journey — this type has no feelings axis. + +## Examples + +- `assets/example-story-map.html` — minimal light. *Reporting, first release*: four activities (`Find the data`, `Build the report`, `Share it`, `Trust it`), MVP/Release 2/Later slices, release cut under MVP, `Row-level permissions` flagged as the riskiest story. +- `assets/example-story-map-dark.html` — minimal dark, same data. +- `assets/example-story-map-full.html` — full editorial: container framing + 3 summary cards of varied widths + footer. diff --git a/skills/diagram-design/references/type-uml-class.md b/skills/diagram-design/references/type-uml-class.md new file mode 100644 index 0000000..d9c3bdb --- /dev/null +++ b/skills/diagram-design/references/type-uml-class.md @@ -0,0 +1,65 @@ +# UML Class Diagram + +**Best for:** the static structure of an object model — classes, what they own, what they inherit, and what they merely depend on. The distinguishing content is the **operations compartment** and the **typed relationship vocabulary** (the arrowheads carry meaning). ER cannot express either — use this type only when operations or the inheritance/composition vocabulary are the point of the diagram, and `type-er.md` when the story is entities and cardinality. + +**Other UML diagrams — route elsewhere.** UML is a family; only the class diagram gets its own grammar here: + +| UML diagram | Use instead | +|---|---| +| Sequence | [type-sequence.md](type-sequence.md) | +| State machine | [type-state.md](type-state.md) | +| Component | [type-architecture.md](type-architecture.md) | +| Deployment | [type-architecture.md](type-architecture.md) | +| Activity | [type-swimlane.md](type-swimlane.md) or [type-flowchart.md](type-flowchart.md) | +| Conceptual / domain ER | [type-er.md](type-er.md) | + +## Layout conventions + +- Each class is a **single box** (`rx=6`), divided by full-width hairlines into up to three compartments. Compartment heights follow content — never pad to a uniform height. + 1. **Name** — class name in Geist sans, 12px, weight 600, **centered**. An interface carries a Geist Mono 8px `«interface»` stereotype line above the name. An abstract class sets the name in *italic*. + 2. **Attributes** — one line each, Geist Mono 9px, left-aligned: `+ name: Type`. Visibility markers: `+` public, `-` private, `#` protected. + 3. **Operations** — one line each, Geist Mono 9px, left-aligned: `+ method(arg): Return`. + Omit a compartment entirely when a class has no members in it (an interface with no attributes skips that compartment). +- Attribute/operation lines are a single combined string, not the two-column field/type layout ER uses — that visual distinction keeps the two types from reading the same. +- Coral (accent) is reserved for the class being implemented or extended (the focal type) — accent-tint fill, accent stroke. Its inbound inheritance/realization edges count as **one** additional accent element (treated as a group), for 2 accent elements total per diagram. + +## Relationship vocabulary + +Define every marker used in `` and show all six in the legend, even the ones not used in the diagram body — the legend is this type's complete grammar reference. + +| Relationship | Line | Ending (at the target/owner end) | +|---|---|---| +| Inheritance (`extends`) | solid | large **hollow triangle** — `paper` fill, `ink` stroke | +| Realization (`implements`) | dashed `5,4` | same hollow triangle | +| Composition (owns, cascades) | solid | **filled diamond** at the OWNER end, `ink` fill | +| Aggregation (has, independent) | solid | **hollow diamond** at the OWNER end | +| Association | solid | plain open arrowhead, multiplicity at BOTH ends | +| Dependency (uses) | dashed `4,3` | plain open arrowhead | + +Multiplicities (`1`, `0..*`, `1..*`) sit in Geist Mono 8px, 10–12px off the box edge, on an opaque mask over the line — same convention as ER cardinality labels. + +## Connector rules + +All six SKILL.md §6 connector rules apply in full — orthogonal rounded elbows (`r=8`), no diagonals, bridge/hop for unavoidable crossings, fanned attach points ≥12px apart when several relationships share an edge, masked labels with the 6–10px gap, connectors drawn before boxes. Prefer laying classes out so relationships resolve to straight lines or single-elbow routes; a class diagram with every edge bridging is over budget — split by package instead. + +## Complexity budget + +Max 7 classes, max 8 relationships, max 5 members per compartment (overflow becomes a Geist Mono `…` line), max 2 accent elements. Over budget → split by package. + +Seven is the ceiling rather than the target. Three compartments per box makes a class diagram dense fast, so treat 4–5 classes as the normal size; the shipped example uses all seven only because it doubles as the legend for the full relationship vocabulary. + +## Anti-patterns + +- Getters and setters listed as operations — they're noise; show behavior that matters. +- Every attribute and method dumped in — a class diagram is an argument, not a header file. +- Composition and aggregation used interchangeably — the filled diamond means the part dies with the whole. Say so, or use the hollow diamond. +- Association arrows with no multiplicity. +- Drawing a class diagram when there's no inheritance and no operations — that's ER. +- Stereotype guillemets on everything, not just the interfaces/abstracts that need them. +- Boxes padded to equal height. + +## Examples + +- `assets/example-uml-class.html` — minimal light +- `assets/example-uml-class-dark.html` — minimal dark +- `assets/example-uml-class-full.html` — full editorial diff --git a/skills/diagram-design/references/type-wardley.md b/skills/diagram-design/references/type-wardley.md new file mode 100644 index 0000000..c0a4423 --- /dev/null +++ b/skills/diagram-design/references/type-wardley.md @@ -0,0 +1,39 @@ +# Wardley Map + +**Best for:** positioning the components of a value chain against how evolved (commoditised) each one is, so a reader can see what to build, what to buy, and what is about to move. A strategy artefact, not an architecture diagram — it says nothing about how components connect at runtime, only where each one sits on the genesis-to-commodity curve. + +## Layout conventions + +- **Y axis — value chain.** `Visible to the user` at the top, down to `Invisible` at the bottom. Label the axis as stacked separate `` lines flanking the axis endpoints — **never `writing-mode`** to rotate a label vertically. Axis line `rule-solid` at `0.20` opacity. +- **X axis — evolution.** Four bands separated by three vertical hairlines: `Genesis | Custom-built | Product | Commodity`. Band separators are `rule` at `0.10` opacity, dashed `4,4`. Band labels sit along the bottom axis: Geist Mono 8px, uppercase, tracked, `muted`. Axis line `rule-solid` at `0.20` opacity. +- **Components** are a small circle `r=6`, filled `paper` with an `ink` 1px stroke. Label in Geist sans 12px weight 600, placed 12px above the dot, `text-anchor="middle"`. An optional Geist Mono 9px `muted` sublabel can sit under the dot for a technical qualifier — use sparingly. +- **Dependency links** are thin `muted` 0.8px straight lines from a component down to the component it depends on. **These are the one documented exemption from §6 rule 1 (mandatory orthogonal elbows) — dependency links only.** A component's y/x position on this map *is* the data; forcing it onto an axis to make an elbow route work would misplace it. No arrowhead — the line itself states the dependency. +- **Movement** — a component that is evolving carries a short right-pointing arrow: `accent`, dashed `5,4`, `marker-end="url(#arrow-accent)"`, running from the dot's edge toward the next band. The arrow needs no on-arrow text label: the legend's "Evolving" swatch (accent dot + dashed accent arrow) already names what accent + dashes mean, and since arrows on this map can only ever point right (see Anti-patterns — a left-pointing movement arrow is a contradiction, not a design choice), the direction itself already says "toward commodity." A bare word like `COMMODITISING` restates what shape and color already signal — apply §1's remove test: can I remove this label, does color or shape already carry it? Here it does, so the label is the thing that goes, not its position. + An on-arrow label is legitimate only when it qualifies something the arrow *can't* express on its own — a timeframe (`BY Q3`), a driver (`VENDOR LOCK-IN`) — never a restatement of direction. If you add one, mask it Geist Mono 8px, 6–10px clear of the stroke, same masking rule as any arrow label (§6 rule 2), and confirm there's runway for the mask first: the space directly around a component's dot is usually the most congested spot on the map, because that's also where its own dependency links fan out. Worked example — the moving component in `example-wardley.html` sits at `(420,156)` with links fanning to `(620,220)` and `(680,252)`; at the mandatory 6–10px gap band below the arrow (`y=164–176`), those two lines cross at `x=441.7–482.5` and `x=445–482.5` respectively — almost the full width of the arrow's own span (`x=428–504`), leaving no clear pocket wide enough for a label. Above the dot is no better: the component's own name label already occupies that band per the 12px-above-dot convention. Check both bands for interference before adding a movement label; if neither is clear, don't add one — the legend already covers it. +- **Focal rule:** the 2 accent elements on this type are the moving component's dot (`accent-tint` fill, `accent` stroke) and its movement arrow — or two moving components sharing those 2 accent slots with no other accent anywhere else on the map. +- **Legend:** horizontal strip at the bottom, hairline separator above it, viewBox extended ~60px — same as every other type. + +## Complexity budget + +| Limit | Rule | +|---|---| +| Max components | 9 | +| Max dependency links | 12 | +| Max movement arrows | 2 | +| Max accent elements | 2 | + +## Anti-patterns + +- **Treating the x axis as a maturity score.** Evolution is four qualitative bands (genesis / custom-built / product / commodity), not a 0–10 slider. Don't plot a component at "6.5" — place it in a band. +- **A component with no dependency link.** If nothing in the value chain depends on it and it depends on nothing, it isn't part of the chain — delete it or wire it in. +- **Arrows drawn right-to-left.** Evolution only moves toward commodity. A left-pointing movement arrow is a contradiction, not a design choice. +- **Using the map as an architecture diagram.** No request/response direction, no protocols, no runtime topology — that's the architecture type. This type answers "what's worth building vs. buying," not "how does traffic flow." +- **Numbering the y axis.** Value-chain visibility is ordinal (more visible to the user, less visible), not a quantity. Numeric ticks imply a measurement that doesn't exist. +- **More than 2 movement arrows.** Beyond that the map stops making a single point and turns into a forecast nobody can act on. +- **`writing-mode` vertical axis text.** Stack the words as separate horizontal `` lines instead — see Layout conventions above. + +## Examples + +- `assets/example-wardley.html` — minimal light. AI assistant product, agent orchestration commoditising toward Product. +- `assets/example-wardley-dark.html` — minimal dark, same map. +- `assets/example-wardley-full.html` — full editorial: framed container + 3 varied-width cards (the moving component, a genesis-stage build, and the commodity base).