scrum-skills 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/diagram-design/LICENSE +4 -0
- package/.agents/skills/diagram-design/SKILL.md +413 -0
- package/.agents/skills/diagram-design/UPSTREAM.json +76 -0
- package/.agents/skills/diagram-design/UPSTREAM.md +23 -0
- package/.agents/skills/diagram-design/assets/example-architecture-containment.html +205 -0
- package/.agents/skills/diagram-design/assets/example-architecture-delta.html +193 -0
- package/.agents/skills/diagram-design/assets/example-architecture.html +183 -0
- package/.agents/skills/diagram-design/assets/example-axonometric-plan-campus.html +108 -0
- package/.agents/skills/diagram-design/assets/example-axonometric-plan-coffee-shop.html +121 -0
- package/.agents/skills/diagram-design/assets/example-axonometric-plan-warehouse.html +127 -0
- package/.agents/skills/diagram-design/assets/example-axonometric-plan.html +114 -0
- package/.agents/skills/diagram-design/assets/example-bar.html +129 -0
- package/.agents/skills/diagram-design/assets/example-beeswarm.html +384 -0
- package/.agents/skills/diagram-design/assets/example-box-plot.html +127 -0
- package/.agents/skills/diagram-design/assets/example-bubble.html +147 -0
- package/.agents/skills/diagram-design/assets/example-bump.html +142 -0
- package/.agents/skills/diagram-design/assets/example-data-flow.html +143 -0
- package/.agents/skills/diagram-design/assets/example-datalake.html +269 -0
- package/.agents/skills/diagram-design/assets/example-db-schema.html +302 -0
- package/.agents/skills/diagram-design/assets/example-dependency.html +224 -0
- package/.agents/skills/diagram-design/assets/example-deployment.html +190 -0
- package/.agents/skills/diagram-design/assets/example-dp-integration.html +81 -0
- package/.agents/skills/diagram-design/assets/example-dp-security-matrix.html +88 -0
- package/.agents/skills/diagram-design/assets/example-er.html +202 -0
- package/.agents/skills/diagram-design/assets/example-exploded-ai-stack.html +85 -0
- package/.agents/skills/diagram-design/assets/example-exploded-keyboard.html +84 -0
- package/.agents/skills/diagram-design/assets/example-exploded-phone.html +83 -0
- package/.agents/skills/diagram-design/assets/example-exploded-unboxing.html +84 -0
- package/.agents/skills/diagram-design/assets/example-exploded.html +83 -0
- package/.agents/skills/diagram-design/assets/example-fishbone.html +152 -0
- package/.agents/skills/diagram-design/assets/example-flowchart.html +163 -0
- package/.agents/skills/diagram-design/assets/example-gantt.html +137 -0
- package/.agents/skills/diagram-design/assets/example-heatmap.html +224 -0
- package/.agents/skills/diagram-design/assets/example-high-level-vertical.html +325 -0
- package/.agents/skills/diagram-design/assets/example-high-level.html +301 -0
- package/.agents/skills/diagram-design/assets/example-import-drawio.html +185 -0
- package/.agents/skills/diagram-design/assets/example-import-excalidraw.html +70 -0
- package/.agents/skills/diagram-design/assets/example-import-mermaid.html +70 -0
- package/.agents/skills/diagram-design/assets/example-it-state.html +128 -0
- package/.agents/skills/diagram-design/assets/example-journey.html +148 -0
- package/.agents/skills/diagram-design/assets/example-kanban.html +174 -0
- package/.agents/skills/diagram-design/assets/example-layers.html +123 -0
- package/.agents/skills/diagram-design/assets/example-line.html +111 -0
- package/.agents/skills/diagram-design/assets/example-loop.html +100 -0
- package/.agents/skills/diagram-design/assets/example-marimekko.html +148 -0
- package/.agents/skills/diagram-design/assets/example-medallion.html +159 -0
- package/.agents/skills/diagram-design/assets/example-nested.html +136 -0
- package/.agents/skills/diagram-design/assets/example-org-chart.html +45 -0
- package/.agents/skills/diagram-design/assets/example-polar.html +116 -0
- package/.agents/skills/diagram-design/assets/example-process.html +64 -0
- package/.agents/skills/diagram-design/assets/example-pyramid.html +119 -0
- package/.agents/skills/diagram-design/assets/example-quadrant-consultant.html +166 -0
- package/.agents/skills/diagram-design/assets/example-quadrant.html +135 -0
- package/.agents/skills/diagram-design/assets/example-radar.html +139 -0
- package/.agents/skills/diagram-design/assets/example-ridgeline.html +104 -0
- package/.agents/skills/diagram-design/assets/example-sankey.html +150 -0
- package/.agents/skills/diagram-design/assets/example-scatter.html +141 -0
- package/.agents/skills/diagram-design/assets/example-sequence-oauth.html +227 -0
- package/.agents/skills/diagram-design/assets/example-sequence.html +222 -0
- package/.agents/skills/diagram-design/assets/example-service-blueprint.html +185 -0
- package/.agents/skills/diagram-design/assets/example-slopegraph.html +119 -0
- package/.agents/skills/diagram-design/assets/example-state-lifecycle.html +92 -0
- package/.agents/skills/diagram-design/assets/example-state.html +147 -0
- package/.agents/skills/diagram-design/assets/example-story-map.html +184 -0
- package/.agents/skills/diagram-design/assets/example-streamgraph.html +99 -0
- package/.agents/skills/diagram-design/assets/example-swimlane.html +172 -0
- package/.agents/skills/diagram-design/assets/example-timeline.html +135 -0
- package/.agents/skills/diagram-design/assets/example-tree-block-decomposition.html +151 -0
- package/.agents/skills/diagram-design/assets/example-tree.html +173 -0
- package/.agents/skills/diagram-design/assets/example-treemap.html +107 -0
- package/.agents/skills/diagram-design/assets/example-uml-class.html +188 -0
- package/.agents/skills/diagram-design/assets/example-venn.html +110 -0
- package/.agents/skills/diagram-design/assets/example-wardley.html +153 -0
- package/.agents/skills/diagram-design/assets/example-waterfall.html +129 -0
- package/.agents/skills/diagram-design/assets/template-dark.html +99 -0
- package/.agents/skills/diagram-design/assets/template-full.html +421 -0
- package/.agents/skills/diagram-design/assets/template-motion.html +448 -0
- package/.agents/skills/diagram-design/assets/template-terminal.html +188 -0
- package/.agents/skills/diagram-design/assets/template.html +100 -0
- package/.agents/skills/diagram-design/references/animation.md +143 -0
- package/.agents/skills/diagram-design/references/export-registry.md +78 -0
- package/.agents/skills/diagram-design/references/export.md +376 -0
- package/.agents/skills/diagram-design/references/import-drawio.md +181 -0
- package/.agents/skills/diagram-design/references/import-excalidraw.md +130 -0
- package/.agents/skills/diagram-design/references/import-mermaid.md +137 -0
- package/.agents/skills/diagram-design/references/layout-budget.md +97 -0
- package/.agents/skills/diagram-design/references/onboarding.md +368 -0
- package/.agents/skills/diagram-design/references/output-spec.md +277 -0
- package/.agents/skills/diagram-design/references/primitive-annotation.md +36 -0
- package/.agents/skills/diagram-design/references/primitive-icons.md +827 -0
- package/.agents/skills/diagram-design/references/primitive-sketchy.md +43 -0
- package/.agents/skills/diagram-design/references/primitive-terminal.md +76 -0
- package/.agents/skills/diagram-design/references/primitives-core.md +146 -0
- package/.agents/skills/diagram-design/references/profiles.md +183 -0
- package/.agents/skills/diagram-design/references/semantic-patterns.md +154 -0
- package/.agents/skills/diagram-design/references/style-guide.md +236 -0
- package/.agents/skills/diagram-design/references/style-vivid.md +148 -0
- package/.agents/skills/diagram-design/references/type-architecture-delta.md +143 -0
- package/.agents/skills/diagram-design/references/type-architecture.md +117 -0
- package/.agents/skills/diagram-design/references/type-axonometric-plan.md +83 -0
- package/.agents/skills/diagram-design/references/type-bar.md +108 -0
- package/.agents/skills/diagram-design/references/type-data-flow.md +371 -0
- package/.agents/skills/diagram-design/references/type-db-schema.md +48 -0
- package/.agents/skills/diagram-design/references/type-dependency.md +44 -0
- package/.agents/skills/diagram-design/references/type-deployment.md +45 -0
- package/.agents/skills/diagram-design/references/type-dp-integration.md +407 -0
- package/.agents/skills/diagram-design/references/type-dp-security-matrix.md +379 -0
- package/.agents/skills/diagram-design/references/type-er.md +25 -0
- package/.agents/skills/diagram-design/references/type-exploded.md +115 -0
- package/.agents/skills/diagram-design/references/type-fishbone.md +75 -0
- package/.agents/skills/diagram-design/references/type-flowchart.md +23 -0
- package/.agents/skills/diagram-design/references/type-gantt.md +45 -0
- package/.agents/skills/diagram-design/references/type-heatmap.md +80 -0
- package/.agents/skills/diagram-design/references/type-high-level.md +470 -0
- package/.agents/skills/diagram-design/references/type-it-state.md +468 -0
- package/.agents/skills/diagram-design/references/type-journey.md +55 -0
- package/.agents/skills/diagram-design/references/type-kanban.md +49 -0
- package/.agents/skills/diagram-design/references/type-layers.md +26 -0
- package/.agents/skills/diagram-design/references/type-line.md +337 -0
- package/.agents/skills/diagram-design/references/type-loop.md +223 -0
- package/.agents/skills/diagram-design/references/type-medallion.md +356 -0
- package/.agents/skills/diagram-design/references/type-nested.md +22 -0
- package/.agents/skills/diagram-design/references/type-org-chart.md +44 -0
- package/.agents/skills/diagram-design/references/type-polar.md +136 -0
- package/.agents/skills/diagram-design/references/type-process.md +490 -0
- package/.agents/skills/diagram-design/references/type-pyramid.md +33 -0
- package/.agents/skills/diagram-design/references/type-quadrant.md +81 -0
- package/.agents/skills/diagram-design/references/type-radar.md +82 -0
- package/.agents/skills/diagram-design/references/type-sankey.md +75 -0
- package/.agents/skills/diagram-design/references/type-scatter.md +276 -0
- package/.agents/skills/diagram-design/references/type-sequence.md +130 -0
- package/.agents/skills/diagram-design/references/type-service-blueprint.md +103 -0
- package/.agents/skills/diagram-design/references/type-state.md +30 -0
- package/.agents/skills/diagram-design/references/type-story-map.md +46 -0
- package/.agents/skills/diagram-design/references/type-swimlane.md +22 -0
- package/.agents/skills/diagram-design/references/type-timeline.md +20 -0
- package/.agents/skills/diagram-design/references/type-tree.md +24 -0
- package/.agents/skills/diagram-design/references/type-treemap.md +137 -0
- package/.agents/skills/diagram-design/references/type-uml-class.md +65 -0
- package/.agents/skills/diagram-design/references/type-venn.md +26 -0
- package/.agents/skills/diagram-design/references/type-wardley.md +39 -0
- package/.agents/skills/diagram-design/references/type-waterfall.md +75 -0
- package/.agents/skills/scrum-meta/SKILL.md +36 -36
- package/.agents/skills/scrum-planning/SKILL.md +61 -61
- package/.agents/skills/scrum-planning/references/schema.md +384 -336
- package/.agents/skills/scrum-report/SKILL.md +42 -42
- package/.agents/skills/scrum-sprint/SKILL.md +49 -49
- package/.agents/skills/scrum-tdd/SKILL.md +140 -127
- package/README.md +224 -201
- package/assets/board/200.html +1 -1
- package/assets/board/404.html +1 -1
- package/assets/board/_nuxt/1XlYaCp9.js +1 -0
- package/assets/board/_nuxt/4gQF_HS3.js +1 -0
- package/assets/board/_nuxt/5okfNy5D.js +1 -0
- package/assets/board/_nuxt/{Bb3Limos.js → B0C2jsdk.js} +1 -1
- package/assets/board/_nuxt/B1j6UC4U.js +1 -0
- package/assets/board/_nuxt/B3LKy6o2.js +1 -0
- package/assets/board/_nuxt/BAQQngAq.js +13 -0
- package/assets/board/_nuxt/BE6t7Q2m.js +1 -0
- package/assets/board/_nuxt/BLvbupFS.js +1 -0
- package/assets/board/_nuxt/BQgzP7ur.js +1 -0
- package/assets/board/_nuxt/BRZIF_wo.js +1 -0
- package/assets/board/_nuxt/BW3xJdEx.js +1 -0
- package/assets/board/_nuxt/{Cm9lkUvP.js → BY36DFyj.js} +1 -1
- package/assets/board/_nuxt/BZlZD94i.js +1 -0
- package/assets/board/_nuxt/BZvXNwev.js +3 -0
- package/assets/board/_nuxt/BbxmvdIF.js +1 -0
- package/assets/board/_nuxt/BiWrMOsL.js +1 -0
- package/assets/board/_nuxt/BizDeOK5.js +1 -0
- package/assets/board/_nuxt/BkcaOYQ_.js +95 -0
- package/assets/board/_nuxt/BkoKCNUY.js +1 -0
- package/assets/board/_nuxt/BlKmZhhF.js +1 -0
- package/assets/board/_nuxt/BmBpmU73.js +1 -0
- package/assets/board/_nuxt/BrWE0up6.js +1 -0
- package/assets/board/_nuxt/Bs52qkgk.js +1 -0
- package/assets/board/_nuxt/BtzUbHO_.js +1 -0
- package/assets/board/_nuxt/BuBzMkFZ.js +1 -0
- package/assets/board/_nuxt/Bubk0xn-.js +1 -0
- package/assets/board/_nuxt/BxuBMtk_.js +3 -0
- package/assets/board/_nuxt/By1KXXLR.js +1 -0
- package/assets/board/_nuxt/BygIGL69.js +2 -0
- package/assets/board/_nuxt/C1iO5KH3.js +1 -0
- package/assets/board/_nuxt/C2YPmTzt.js +1 -0
- package/assets/board/_nuxt/C3SpAhCW.js +1 -0
- package/assets/board/_nuxt/C3ZRWz5L.js +1 -0
- package/assets/board/_nuxt/C4WdPP6K.js +1 -0
- package/assets/board/_nuxt/C6o03JHe.js +1 -0
- package/assets/board/_nuxt/C8qB5llI.js +1 -0
- package/assets/board/_nuxt/C9MgRdhu.js +1 -0
- package/assets/board/_nuxt/CCA81-4P.js +1 -0
- package/assets/board/_nuxt/{D2O8Q8x9.js → CFCM18fF.js} +1 -1
- package/assets/board/_nuxt/CGXljzd_.js +1 -0
- package/assets/board/_nuxt/CI0scS-N.js +1 -0
- package/assets/board/_nuxt/CJs9B42o.js +1 -0
- package/assets/board/_nuxt/COecDWbb.js +1 -0
- package/assets/board/_nuxt/COmtTtfB.js +1 -0
- package/assets/board/_nuxt/CPYm4J_K.js +1 -0
- package/assets/board/_nuxt/CReA4TEB.js +3 -0
- package/assets/board/_nuxt/CXG7GZes.js +1 -0
- package/assets/board/_nuxt/CYGiZn-X.js +1 -0
- package/assets/board/_nuxt/CaE8VlUp.js +1 -0
- package/assets/board/_nuxt/CcGiNUgA.js +1 -0
- package/assets/board/_nuxt/Ccgv3lDj.js +1 -0
- package/assets/board/_nuxt/CdPGFZyy.js +1 -0
- package/assets/board/_nuxt/{DfR3IZN_.js → Cdf_T8Xa.js} +1 -1
- package/assets/board/_nuxt/CgQ30j_6.js +1 -0
- package/assets/board/_nuxt/ChUHb39z.js +1 -0
- package/assets/board/_nuxt/Ck0-FqVI.js +1 -0
- package/assets/board/_nuxt/CkWKLtjO.js +1 -0
- package/assets/board/_nuxt/Cq7hsCKB.js +1 -0
- package/assets/board/_nuxt/CtFknnHZ.js +1 -0
- package/assets/board/_nuxt/D166WVUG.js +1 -0
- package/assets/board/_nuxt/D4Dpzo9e.js +1 -0
- package/assets/board/_nuxt/D5i92OZO.js +1 -0
- package/assets/board/_nuxt/D6dUp4Nm.js +9 -0
- package/assets/board/_nuxt/DFQDFspC.js +1 -0
- package/assets/board/_nuxt/DHX2tw9J.js +1 -0
- package/assets/board/_nuxt/DJM7u8P3.js +1 -0
- package/assets/board/_nuxt/{BPTrRhcw.js → DLr85ebo.js} +1 -1
- package/assets/board/_nuxt/DOMM1wfl.js +1 -0
- package/assets/board/_nuxt/DU6ArlUN.js +1 -0
- package/assets/board/_nuxt/{B_SlFcWp.js → DUgGsde6.js} +1 -1
- package/assets/board/_nuxt/DV4ti-Pq.js +1 -0
- package/assets/board/_nuxt/DZ--fXuU.js +1 -0
- package/assets/board/_nuxt/D_ct-Stz.js +2 -0
- package/assets/board/_nuxt/DbWAComO.js +1 -0
- package/assets/board/_nuxt/DbwlcHAt.js +1 -0
- package/assets/board/_nuxt/DjzLR9Bl.js +1 -0
- package/assets/board/_nuxt/Dki9VkAL.js +3 -0
- package/assets/board/_nuxt/DlNJhOoc.js +1 -0
- package/assets/board/_nuxt/DqG7CtD4.js +1 -0
- package/assets/board/_nuxt/DqUSsCJ2.js +1 -0
- package/assets/board/_nuxt/Du2F4WXh.js +1 -0
- package/assets/board/_nuxt/DuRiEXn4.js +1 -0
- package/assets/board/_nuxt/DxBwVNyP.js +2 -0
- package/assets/board/_nuxt/DzmVW5-D.js +1 -0
- package/assets/board/_nuxt/I-sGtDIB.js +6 -0
- package/assets/board/_nuxt/JU9-x68N.js +1 -0
- package/assets/board/_nuxt/Lozm7hhE.js +1 -0
- package/assets/board/_nuxt/MMsTMkcB.js +1 -0
- package/assets/board/_nuxt/MS7CGmCB.js +1 -0
- package/assets/board/_nuxt/OKKaKILz.js +1 -0
- package/assets/board/_nuxt/{Csqgy925.js → P6qlvBHA.js} +1 -1
- package/assets/board/_nuxt/SrNUvNwO.js +1 -0
- package/assets/board/_nuxt/{DSaWoFHS.js → SywdkA98.js} +1 -1
- package/assets/board/_nuxt/TBIRpVLG.js +1 -0
- package/assets/board/_nuxt/TlTrMIMm.js +1 -0
- package/assets/board/_nuxt/Zv9-SOQF.js +1 -0
- package/assets/board/_nuxt/_id_.ItzoSaBL.css +1 -0
- package/assets/board/_nuxt/builds/latest.json +1 -1
- package/assets/board/_nuxt/builds/meta/2218461a-f45b-41d6-ae44-b0d2332a9511.json +1 -0
- package/assets/board/_nuxt/burndown.CT8fx1Ge.css +1 -0
- package/assets/board/_nuxt/diagrams.D1ybqBem.css +1 -0
- package/assets/board/_nuxt/{entry.CKHePurH.css → entry.BCuHiFgF.css} +1 -1
- package/assets/board/_nuxt/epics.CUeDIEa0.css +1 -0
- package/assets/board/_nuxt/error-404.Y9imKiDC.css +1 -0
- package/assets/board/_nuxt/error-500.DufSBGVC.css +1 -0
- package/assets/board/_nuxt/gantt.CiC2Ts1t.css +1 -0
- package/assets/board/_nuxt/jbri6q1p.js +1 -0
- package/assets/board/_nuxt/last-change.C05Vc3BF.css +1 -0
- package/assets/board/_nuxt/milestones.Civ3sMiQ.css +1 -0
- package/assets/board/_nuxt/oSJF4yHw.js +1 -0
- package/assets/board/_nuxt/pages.BshWbOyo.css +1 -0
- package/assets/board/_nuxt/q_8bxRMt.js +1 -0
- package/assets/board/_nuxt/tests.Ci9fBCka.css +1 -0
- package/assets/board/burndown/index.html +1 -1
- package/assets/board/diagrams/index.html +1 -0
- package/assets/board/epics/index.html +1 -1
- package/assets/board/favicon.svg +16 -16
- package/assets/board/gantt/index.html +1 -1
- package/assets/board/index.html +1 -1
- package/assets/board/last-change/index.html +1 -1
- package/assets/board/milestones/index.html +1 -1
- package/assets/board/tests/index.html +1 -1
- package/bin/scrum-skills.mjs +204 -191
- package/docs/ai-assistant-guide.md +1008 -1008
- package/package.json +42 -41
- package/templates/AGENTS.md +84 -74
- package/tools/agile-tools.mjs +510 -510
- package/tools/ai.mjs +464 -464
- package/tools/diagram-import.mjs +238 -0
- package/tools/diagram-lint.mjs +518 -0
- package/tools/diagram.mjs +299 -0
- package/tools/git-commit.mjs +216 -216
- package/tools/last-change.mjs +326 -326
- package/tools/projects.mjs +240 -215
- package/tools/serve.mjs +180 -154
- package/tools/validate.mjs +781 -664
- package/assets/board/_nuxt/1eqboJxR.js +0 -1
- package/assets/board/_nuxt/2K7ag6ES.js +0 -1
- package/assets/board/_nuxt/51OWHj8c.js +0 -2
- package/assets/board/_nuxt/6gFtTBwm.js +0 -1
- package/assets/board/_nuxt/B3jkABw9.js +0 -1
- package/assets/board/_nuxt/B5n2_jZN.js +0 -1
- package/assets/board/_nuxt/BDK2Hj7B.js +0 -1
- package/assets/board/_nuxt/BDcnzXHq.js +0 -1
- package/assets/board/_nuxt/BaG8y0Wt.js +0 -1
- package/assets/board/_nuxt/BbwJq5pb.js +0 -1
- package/assets/board/_nuxt/BgLeKwx0.js +0 -1
- package/assets/board/_nuxt/Bi9Axj3V.js +0 -1
- package/assets/board/_nuxt/BmxvtaMq.js +0 -1
- package/assets/board/_nuxt/BodFvto3.js +0 -1
- package/assets/board/_nuxt/BpWeHLuN.js +0 -1
- package/assets/board/_nuxt/BuOKDFiJ.js +0 -1
- package/assets/board/_nuxt/C40iTe-x.js +0 -1
- package/assets/board/_nuxt/C7K0R7F-.js +0 -2
- package/assets/board/_nuxt/C8vL692X.js +0 -1
- package/assets/board/_nuxt/C9StZL3D.js +0 -3
- package/assets/board/_nuxt/CGI_ZV79.js +0 -1
- package/assets/board/_nuxt/CJ2mz0WY.js +0 -1
- package/assets/board/_nuxt/CJMBJQuf.js +0 -1
- package/assets/board/_nuxt/CK-lOYG9.js +0 -1
- package/assets/board/_nuxt/CK9_veoz.js +0 -1
- package/assets/board/_nuxt/CLBcBrYf.js +0 -1
- package/assets/board/_nuxt/CMUi2-Lj.js +0 -1
- package/assets/board/_nuxt/COf6E6h4.js +0 -1
- package/assets/board/_nuxt/CPCUMJnF.js +0 -1
- package/assets/board/_nuxt/CPcKlmSm.js +0 -1
- package/assets/board/_nuxt/CQTvWh4i.js +0 -1
- package/assets/board/_nuxt/CSEEUF8S.js +0 -1
- package/assets/board/_nuxt/CSSb154I.js +0 -13
- package/assets/board/_nuxt/CgDTd7jS.js +0 -1
- package/assets/board/_nuxt/ChG76uh9.js +0 -1
- package/assets/board/_nuxt/Ci0qbkgh.js +0 -1
- package/assets/board/_nuxt/CqoQ__I_.js +0 -1
- package/assets/board/_nuxt/CuJUHLl8.js +0 -1
- package/assets/board/_nuxt/CvLiA4_O.js +0 -1
- package/assets/board/_nuxt/Cvs12oA0.js +0 -3
- package/assets/board/_nuxt/CyEXFe3V.js +0 -1
- package/assets/board/_nuxt/Cz6rZcLK.js +0 -1
- package/assets/board/_nuxt/D2FhHl1o.js +0 -1
- package/assets/board/_nuxt/D3YCAmfu.js +0 -1
- package/assets/board/_nuxt/D5CE81jK.js +0 -1
- package/assets/board/_nuxt/D75vbfSb.js +0 -1
- package/assets/board/_nuxt/D99LbGfb.js +0 -9
- package/assets/board/_nuxt/DEfLc7p3.js +0 -6
- package/assets/board/_nuxt/DF-nsa1Z.js +0 -1
- package/assets/board/_nuxt/DIc8yx98.js +0 -1
- package/assets/board/_nuxt/DLkAKotw.js +0 -1
- package/assets/board/_nuxt/DRPlYvb3.js +0 -1
- package/assets/board/_nuxt/DRlQgul3.js +0 -1
- package/assets/board/_nuxt/DSLbmoWa.js +0 -1
- package/assets/board/_nuxt/DWO9c9yp.js +0 -1
- package/assets/board/_nuxt/DZo3dYLJ.js +0 -3
- package/assets/board/_nuxt/D_S6N7_b.js +0 -1
- package/assets/board/_nuxt/DajA-Tkt.js +0 -1
- package/assets/board/_nuxt/DbHiyab-.js +0 -1
- package/assets/board/_nuxt/Dc7Ql6eE.js +0 -1
- package/assets/board/_nuxt/Dd9ZukPU.js +0 -1
- package/assets/board/_nuxt/Dg2LiqmN.js +0 -1
- package/assets/board/_nuxt/DhuleNnm.js +0 -1
- package/assets/board/_nuxt/DkI1Qxpp.js +0 -95
- package/assets/board/_nuxt/DnDHGSYI.js +0 -1
- package/assets/board/_nuxt/DpXJ_tCU.js +0 -1
- package/assets/board/_nuxt/DqZgF3hU.js +0 -1
- package/assets/board/_nuxt/DqcxvfbD.js +0 -1
- package/assets/board/_nuxt/DsA2lVci.js +0 -1
- package/assets/board/_nuxt/Dtsa-1NS.js +0 -1
- package/assets/board/_nuxt/Du91iq0p.js +0 -1
- package/assets/board/_nuxt/Dx1wcYFo.js +0 -1
- package/assets/board/_nuxt/EYTShbt4.js +0 -1
- package/assets/board/_nuxt/MaXJprwN.js +0 -1
- package/assets/board/_nuxt/P9x67aq2.js +0 -1
- package/assets/board/_nuxt/S08nFESZ.js +0 -3
- package/assets/board/_nuxt/V0uynWE2.js +0 -1
- package/assets/board/_nuxt/Vo4wMbnS.js +0 -1
- package/assets/board/_nuxt/ZVTqot-_.js +0 -1
- package/assets/board/_nuxt/ZngEd3HB.js +0 -1
- package/assets/board/_nuxt/_id_.B2NDKSlX.css +0 -1
- package/assets/board/_nuxt/assMu_Wn.js +0 -1
- package/assets/board/_nuxt/builds/meta/8e23aec9-5b67-4569-b8bf-d4f07e50ffdf.json +0 -1
- package/assets/board/_nuxt/burndown.Do6IbM6o.css +0 -1
- package/assets/board/_nuxt/epics.Dmessplu.css +0 -1
- package/assets/board/_nuxt/error-404.BFmXOnCT.css +0 -1
- package/assets/board/_nuxt/error-500.BZ-DdjQ6.css +0 -1
- package/assets/board/_nuxt/gantt.Dmp00GUo.css +0 -1
- package/assets/board/_nuxt/last-change.1Su4GrCN.css +0 -1
- package/assets/board/_nuxt/milestones.U0xKCsEo.css +0 -1
- package/assets/board/_nuxt/pages.Dbj2IVk8.css +0 -1
- package/assets/board/_nuxt/rlePnzpc.js +0 -1
- package/assets/board/_nuxt/tests.dXlUX16A.css +0 -1
- package/assets/board/_nuxt/uKzCKCTq.js +0 -1
- package/assets/board/_nuxt/vwxaNGfc.js +0 -1
- package/assets/board/_nuxt/yh6sf_D5.js +0 -1
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
# Data Flow
|
|
2
|
+
|
|
3
|
+
**Best for:** visualising how data moves through a pipeline *across organisational roles* — who initiates, who processes, who publishes, and who consumes. The canonical use case is a multi-role data platform (Admin → Engineers → Scientists → Consumers) with 4–6 process steps. Use when the reader needs to understand **who does what at each stage**, not just the technical components.
|
|
4
|
+
|
|
5
|
+
Prefer standard **Swimlane** for cross-functional business processes (HR approvals, support tickets). Use **Data flow** when the subject is a data pipeline with typed payloads (raw files, tables, reports) and role-scoped access boundaries.
|
|
6
|
+
|
|
7
|
+
This type is **parametric** — the inputs schema in §1 drives every coordinate via the formulas in §2. Two generations from the same inputs must produce visually identical SVG.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Inputs — the parameter contract
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
lanes: # 1..4 horizontal swimlanes (top to bottom)
|
|
15
|
+
- { name: ["DATA", "ADMINS"], key: "ADM" }
|
|
16
|
+
- { name: ["DATA", "ENGINEERS"], key: "ENG" }
|
|
17
|
+
- { name: ["DATA", "SCIENTISTS"], key: "SCI" }
|
|
18
|
+
- { name: ["DATA", "CONSUMERS"], key: "CON" }
|
|
19
|
+
|
|
20
|
+
steps: # 1..6 columns (left to right)
|
|
21
|
+
- { number: "01", label: "COLLECT" }
|
|
22
|
+
- { number: "02", label: "STORE" }
|
|
23
|
+
- { number: "03", label: "TRANSFORM" }
|
|
24
|
+
- { number: "04", label: "ANALYZE", focal: true } # focal step header chip — accent fill
|
|
25
|
+
- { number: "05", label: "PUBLISH" }
|
|
26
|
+
|
|
27
|
+
nodes: # explicit per-cell entries; empty cells render nothing
|
|
28
|
+
- { lane: "ADM", step: 0, title: "Project Setup", sub: "create · assign roles", tool: "Platform console" }
|
|
29
|
+
- { lane: "ADM", step: 1, title: "Access Control", sub: "bucket policies · LDAP", tool: "MinIO · LDAP console",
|
|
30
|
+
color: "#b85450" } # tinted rust-red to flag governance/identity concern
|
|
31
|
+
- { lane: "ENG", step: 0, title: "Source Ingest", sub: "ext. sources → raw", tool: "NiFi · API · SFTP",
|
|
32
|
+
chips: {in: "WB", out: "DB"} } # web payload in, dataset out
|
|
33
|
+
- { lane: "ENG", step: 1, title: "Raw Store", sub: "raw landing zones", tool: "MinIO raw",
|
|
34
|
+
chips: {in: "DB", out: "DB"} } # raw stays raw inside the landing zone
|
|
35
|
+
- { lane: "ENG", step: 2, title: "Clean & Stage", sub: "raw → staging → anon", tool: "NiFi · Trino",
|
|
36
|
+
chips: {in: "DB", out: "TB"} } # raw dataset → analysis-ready table
|
|
37
|
+
- { lane: "SCI", step: 3, title: "Explore & Model", sub: "anon data → insights", tool: "JupyterHub · Trino",
|
|
38
|
+
chips: {in: "TB", out: "FL"}, focal: true } # focal — table in, file/report out
|
|
39
|
+
- { lane: "SCI", step: 4, title: "Publish Findings", sub: "models → dashboards", tool: "Superset · Reports",
|
|
40
|
+
chips: {in: "FL", out: "FL"} } # report in, report out (pass-through to publish)
|
|
41
|
+
- { lane: "CON", step: 4, title: "Query Insights", sub: "aggregated views", tool: "Trino (read-only)",
|
|
42
|
+
chips: {in: "TB", out: "TB"} } # consumers read tables, hand off tables
|
|
43
|
+
|
|
44
|
+
arrows: # explicit edges; styles bind to topology (see §3)
|
|
45
|
+
- { from: {lane: "ADM", step: 0}, to: {lane: "ADM", step: 1}, style: "muted" }
|
|
46
|
+
- { from: {lane: "ADM", step: 0}, to: {lane: "ENG", step: 0}, style: "trigger" } # dashed governance
|
|
47
|
+
- { from: {lane: "ADM", step: 1}, to: {lane: "ENG", step: 1}, style: "trigger" }
|
|
48
|
+
- { from: {lane: "ENG", step: 0}, to: {lane: "ENG", step: 1}, style: "muted" }
|
|
49
|
+
- { from: {lane: "ENG", step: 1}, to: {lane: "ENG", step: 2}, style: "muted" }
|
|
50
|
+
- { from: {lane: "ENG", step: 2}, to: {lane: "SCI", step: 3}, style: "accent", # focal cross-role
|
|
51
|
+
label: "anon data" }
|
|
52
|
+
- { from: {lane: "SCI", step: 3}, to: {lane: "SCI", step: 4}, style: "muted" }
|
|
53
|
+
- { from: {lane: "SCI", step: 4}, to: {lane: "CON", step: 4}, style: "link" } # teal: published
|
|
54
|
+
|
|
55
|
+
dark: false
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Reserved field semantics:**
|
|
59
|
+
- `lanes[k].key` — the 3-letter role chip text (e.g., `ADM`, `ENG`, `SCI`, `CON`). Used inside every node in that lane.
|
|
60
|
+
- `lanes[k].name` — two-line lane label; both lines use the uppercase `eyebrow` role.
|
|
61
|
+
- `steps[j].focal: true` — exactly **one** step may declare this. Header chip renders in accent.
|
|
62
|
+
- `nodes[i].focal: true` — exactly **one** node may declare this. Renders with accent border (§5).
|
|
63
|
+
- `nodes[i].chips` — data-type chips for the node. Either form accepted:
|
|
64
|
+
- **Object form (preferred):** `{in: "<CODE>", out: "<CODE>"}` — explicit input/output semantic. Either side optional.
|
|
65
|
+
- **Array form:** `["<INPUT_CODE>", "<OUTPUT_CODE>"]` — first item is input, second is output.
|
|
66
|
+
- Codes from §8 (`WB`, `DB`, `TB`, `FL`, `LS`). Position is **fixed**: input chip on the node's bottom-**left**, output chip on the bottom-**right**.
|
|
67
|
+
- `nodes[i].color` — optional **per-node color override**. Any valid `"#hex"` string is accepted; the §4 palette is recommended for cross-diagram consistency but not required. Every node can carry its own color independently of others.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 2. Layout formulas — deterministic geometry
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
label_col_w = 140
|
|
75
|
+
step_slot_w = 112
|
|
76
|
+
right_pad = 28
|
|
77
|
+
n_steps = len(steps)
|
|
78
|
+
n_lanes = len(lanes)
|
|
79
|
+
|
|
80
|
+
# Canvas
|
|
81
|
+
viewBox_w = label_col_w + n_steps * step_slot_w + right_pad # 5 steps → 728
|
|
82
|
+
header_h = 36
|
|
83
|
+
lane_h = 80
|
|
84
|
+
has_color_row = any(node.color or step.color or lane.color in inputs)
|
|
85
|
+
legend_h = 100 if has_color_row else 80 # 4 rows when colors are present
|
|
86
|
+
viewBox_h = header_h + n_lanes * lane_h + legend_h # 4 lanes, no colors → 436; with colors → 456
|
|
87
|
+
|
|
88
|
+
# Header strip (top)
|
|
89
|
+
header_y = 0 # ends at header_h = 36
|
|
90
|
+
step_chip_y = 6 # 16-px chip at y=6..22
|
|
91
|
+
step_label_y = 29 # text line below chip
|
|
92
|
+
|
|
93
|
+
# Lane positions
|
|
94
|
+
lane_y_top(k) = header_h + k * lane_h # 36, 116, 196, 276
|
|
95
|
+
lane_y_mid(k) = lane_y_top(k) + lane_h/2 # 76, 156, 236, 316
|
|
96
|
+
lane_label_x = label_col_w / 2 # 70
|
|
97
|
+
|
|
98
|
+
# Step / node center x
|
|
99
|
+
step_cx(j) = label_col_w + j * step_slot_w + step_slot_w/2 # 196, 308, 420, 532, 644
|
|
100
|
+
|
|
101
|
+
# Nodes
|
|
102
|
+
node_w = 100
|
|
103
|
+
node_h = 64
|
|
104
|
+
node_x(j) = step_cx(j) - node_w/2 # 146, 258, 370, 482, 594
|
|
105
|
+
node_y(k) = lane_y_top(k) + 8 # 44, 124, 204, 284
|
|
106
|
+
|
|
107
|
+
# Legend strip (bottom)
|
|
108
|
+
legend_y_top = header_h + n_lanes * lane_h # 356
|
|
109
|
+
legend_row_y = [legend_y_top + 16, legend_y_top + 37, legend_y_top + 59]
|
|
110
|
+
# 372, 393, 415
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 2.1 Background structure
|
|
114
|
+
|
|
115
|
+
- Paper fill across full viewBox.
|
|
116
|
+
- Dot pattern: 22×22 grid, `circle r=0.8`, `fill ink @ 0.10`.
|
|
117
|
+
- Alternating lane tints: odd-indexed lanes (0, 2, …) receive `ink @ 0.018` fill.
|
|
118
|
+
- Lane dividers: horizontal hairlines at every `lane_y_top(k)` and at `legend_y_top`, stroke `ink @ 0.12` width 0.8.
|
|
119
|
+
- Label column right border: vertical hairline at `x = label_col_w`, from `y = header_h` to `y = legend_y_top`.
|
|
120
|
+
|
|
121
|
+
### 2.2 Step header chip
|
|
122
|
+
|
|
123
|
+
Per step `j`:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
chip_x(j) = step_cx(j) - 16 # 16×16 chip
|
|
127
|
+
chip_y = 6
|
|
128
|
+
chip_w = 32
|
|
129
|
+
chip_h = 16
|
|
130
|
+
chip_rx = 8 # pill-shaped
|
|
131
|
+
number_anchor = (step_cx(j), 14)
|
|
132
|
+
label_anchor = (step_cx(j), 29)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Default fill: `ink @ 0.12`, number text ink, label text muted.
|
|
136
|
+
Focal fill: `accent @ 0.20`, number + label text accent.
|
|
137
|
+
Per-step `color` override (§4): replaces the fill with `rgba(C, 0.20)` and the text fill with `C`.
|
|
138
|
+
|
|
139
|
+
### 2.3 Lane labels
|
|
140
|
+
|
|
141
|
+
Two-line `eyebrow` role label, both lines uppercase, fill muted:
|
|
142
|
+
- Line 1 at `(lane_label_x, lane_y_mid(k) - 4)`
|
|
143
|
+
- Line 2 at `(lane_label_x, lane_y_mid(k) + 8)`
|
|
144
|
+
|
|
145
|
+
Per-lane `color` override (§4): replaces the label fill with `C` and the lane tint with `rgba(C, 0.04)` (instead of the default `ink @ 0.018`).
|
|
146
|
+
|
|
147
|
+
### 2.4 Node content layout (inside the 100×64 rect)
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
role_chip rect 18×10 at (node_x+4, node_y+4), rx=3
|
|
151
|
+
role_chip_text centered at (node_x+13, node_y+9), eyebrow role, font-size=6, weight=600
|
|
152
|
+
title centered at (step_cx(j), node_y+23), node-name role, font-size=9
|
|
153
|
+
sub centered at (step_cx(j), node_y+35), sublabel role, font-size=6.5, muted
|
|
154
|
+
tool centered at (step_cx(j), node_y+47), sublabel role, font-size=6.5, soft
|
|
155
|
+
data chip IN rect 16×8 at (node_x+4, node_y+54), rx=3 # payload type entering the node
|
|
156
|
+
data chip OUT rect 16×8 at (node_x+80, node_y+54), rx=3 # payload type leaving the node
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Empty cells (no node entry) render **nothing**. No placeholder rect, no role chip, no label — the cell is invisible.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 3. Arrow rules (mandatory)
|
|
164
|
+
|
|
165
|
+
Four styles, bound to topology. Connectors are drawn **before** all node rects (z-order rule).
|
|
166
|
+
|
|
167
|
+
| `style` | Stroke | Width | Dash | Marker | When required |
|
|
168
|
+
|---|---|---|---|---|---|
|
|
169
|
+
| `muted` | `muted` | 1.0 | — | `arr-muted` | Standard data hand-off between steps or within a lane. |
|
|
170
|
+
| `trigger` | `muted` | 1.0 | `4,3` | `arr-muted` | Governance trigger — an admin action enables downstream work. Unlabelled. |
|
|
171
|
+
| `accent` | `accent` | 1.2 | — | `arr-accent` | Focal cross-role handoff. **Exactly one per diagram**, labeled. |
|
|
172
|
+
| `link` | `link` | 1.0 | — | `arr-link` | Published / externally-consumed output. |
|
|
173
|
+
|
|
174
|
+
**Defs block** (required, three markers):
|
|
175
|
+
|
|
176
|
+
```svg
|
|
177
|
+
<defs>
|
|
178
|
+
<pattern id="dots" width="22" height="22" patternUnits="userSpaceOnUse">
|
|
179
|
+
<circle cx="11" cy="11" r="0.8" fill="{ink @ 0.10}"/>
|
|
180
|
+
</pattern>
|
|
181
|
+
<marker id="arr-muted" markerWidth="6" markerHeight="6" refX="5" refY="3" orient="auto"><path d="M0,0 L6,3 L0,6 Z" fill="{muted}"/></marker>
|
|
182
|
+
<marker id="arr-accent" markerWidth="6" markerHeight="6" refX="5" refY="3" orient="auto"><path d="M0,0 L6,3 L0,6 Z" fill="{accent}"/></marker>
|
|
183
|
+
<marker id="arr-link" markerWidth="6" markerHeight="6" refX="5" refY="3" orient="auto"><path d="M0,0 L6,3 L0,6 Z" fill="{link}"/></marker>
|
|
184
|
+
</defs>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 3.1 Routing rules (non-negotiable)
|
|
188
|
+
|
|
189
|
+
- **Single-bend routing:** horizontal-first, then vertical. Exit a node from the **right edge**; enter from the **left** (same-lane horizontal) or **top/bottom** (cross-lane vertical).
|
|
190
|
+
- **No diagonals.** Bends use an 8-px Q-bezier corner.
|
|
191
|
+
- **Same-step cross-lane (vertical)**: line directly between `(step_cx(j), lane_y_top(k_to)−12)` and `(step_cx(j), lane_y_top(k_to))`. Used for admin → engineers triggers under the same step.
|
|
192
|
+
- **Cross-lane cross-step (focal)**: exit right, run horizontal past the source node's right edge to a corridor x just before the target's step, then drop vertically.
|
|
193
|
+
- **Labels:** only the `accent` arrow gets a label. Use a paper-filled rect mask (opaque) 6 px behind the text. Other arrows are unlabelled.
|
|
194
|
+
- **Z-order:** all arrows emitted before any node rect (the rect fills mask the line ends inside the node).
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 4. Component color override
|
|
199
|
+
|
|
200
|
+
Any node, lane, or step may declare an optional `color: "#hex"`. Mirrors high-level §3.4 and dp-integration §4 so the rule reads identically across types.
|
|
201
|
+
|
|
202
|
+
### 4.1 Per-node `color`
|
|
203
|
+
|
|
204
|
+
Applied to:
|
|
205
|
+
|
|
206
|
+
| Element | Light | Dark |
|
|
207
|
+
|---|---|---|
|
|
208
|
+
| Container fill (`rect`) | `rgba(C, 0.06)` | `rgba(C_light, 0.10)` |
|
|
209
|
+
| Container stroke | `rgba(C, 0.35)` (stroke-width 1) | `rgba(C_light, 0.45)` |
|
|
210
|
+
| Role chip fill | `rgba(C, 0.18)` | `rgba(C_light, 0.22)` |
|
|
211
|
+
| Role chip text | `C` | `C_light` |
|
|
212
|
+
| Title text | `C` | `C_light` |
|
|
213
|
+
| Sub-label | **unchanged** (muted) | **unchanged** (muted) |
|
|
214
|
+
| Tool label | **unchanged** (soft) | **unchanged** (soft) |
|
|
215
|
+
| Data-type chips | **unchanged** | **unchanged** |
|
|
216
|
+
| Arrows touching this node | **unchanged** — topology-driven | **unchanged** |
|
|
217
|
+
|
|
218
|
+
`C_light` = the same hex lightened ~15% for dark-mode contrast (e.g., `#b85450` → `#d97a78`).
|
|
219
|
+
|
|
220
|
+
### 4.2 Per-step `color`
|
|
221
|
+
|
|
222
|
+
Replaces the step header chip's fill with `rgba(C, 0.20)` and the chip's number + label text fill with `C`. The legend's matching step entry uses the same colors.
|
|
223
|
+
|
|
224
|
+
### 4.3 Per-lane `color`
|
|
225
|
+
|
|
226
|
+
Replaces the lane stripe tint with `rgba(C, 0.04)` (only for odd-indexed lanes that receive a tint by default — or extend to all lanes if explicitly chosen) and the lane label text fill with `C`. Use sparingly; lane tints are easy to over-apply.
|
|
227
|
+
|
|
228
|
+
### 4.4 Rules
|
|
229
|
+
|
|
230
|
+
- **Never on focal nodes / focal steps.** The accent already carries that signal. A `color` on a focal element is ignored.
|
|
231
|
+
- **Never on arrows.** Arrows are topology-driven. If you want a colored edge, pick a different `style` from §3, not a color override.
|
|
232
|
+
- **Cap at 3 custom-colored elements** per diagram (nodes + lanes + steps combined), in addition to the focal pair (focal node + focal step header). Above 3 the visual signal starts to fragment — if you need more, split the diagram or rethink whether each color carries distinct meaning.
|
|
233
|
+
- **Subtitles and tool labels stay muted.** Only the primary identity (border + role chip + title + icon) carries the color signal.
|
|
234
|
+
|
|
235
|
+
### 4.5 Semantic palette (recommended)
|
|
236
|
+
|
|
237
|
+
Same palette as high-level / dp-integration so a reader scanning multiple diagrams sees the same colors meaning the same thing:
|
|
238
|
+
|
|
239
|
+
- `#b85450` rust-red — Security / Identity / Governance (admin nodes, LDAP, access control)
|
|
240
|
+
- `#5a7d9a` slate-blue — Observability / Quality (monitoring, data-quality gates, lineage)
|
|
241
|
+
- `#7a8c47` olive-green — Governance / Lineage (catalog, metadata)
|
|
242
|
+
- `#8c6d3f` warm-brown — Backup / DR / Archive
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 5. Focal rule
|
|
247
|
+
|
|
248
|
+
The data-flow diagram is built around **one cross-role handoff** that defines its central claim. Three focal slots, exactly one entry each:
|
|
249
|
+
|
|
250
|
+
- **One focal step** (`steps[j].focal: true`) — typically the analytical pivot (Analyze, Model, …). Header chip and legend chip both render in accent.
|
|
251
|
+
- **One focal node** (`nodes[i].focal: true`) — the node that *receives* the focal handoff. Accent border + accent role chip + ink title.
|
|
252
|
+
- **One focal arrow** (`arrows[i].style: "accent"`) — the cross-role handoff into the focal node. Solid accent stroke + labeled with a short payload descriptor (e.g., `anon data`).
|
|
253
|
+
|
|
254
|
+
If zero or >1 of any focal slot are declared, halt and ask the user.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## 6. Dark mode
|
|
259
|
+
|
|
260
|
+
| Token | Light | Dark |
|
|
261
|
+
|---|---|---|
|
|
262
|
+
| Paper | `paper` | `ink` |
|
|
263
|
+
| Ink | `ink` | `paper` |
|
|
264
|
+
| Muted | `muted` | `soft` |
|
|
265
|
+
| Soft | `soft` | `rule-solid` |
|
|
266
|
+
| Accent | `accent` | `accent` |
|
|
267
|
+
| Link | `link` | `link` |
|
|
268
|
+
| Dot pattern | `ink @ 0.10` | `paper @ 0.10` |
|
|
269
|
+
| Lane tint | `ink @ 0.018` | `paper @ 0.025` |
|
|
270
|
+
| Dividers | `ink @ 0.12` | `paper @ 0.12` |
|
|
271
|
+
| Default chip fill | `ink @ 0.12` | `paper @ 0.12` |
|
|
272
|
+
| Focal chip fill | `accent @ 0.20` | `accent @ 0.22` |
|
|
273
|
+
| Default node fill | `paper` | `paper @ 0.04` |
|
|
274
|
+
| Default node stroke | `ink @ 0.25` | `paper @ 0.20` |
|
|
275
|
+
| Focal node fill | `accent @ 0.07` | `accent @ 0.12` |
|
|
276
|
+
| Focal node stroke | `accent` | `accent` |
|
|
277
|
+
| Custom component colors | `C` | `C_light` (lighten ~15%) |
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 7. Reproducibility checklist (taste gate)
|
|
282
|
+
|
|
283
|
+
Before emitting SVG, verify **every** item:
|
|
284
|
+
|
|
285
|
+
1. `viewBox = "0 0 {viewBox_w} {viewBox_h}"` derived from `n_steps` and `n_lanes` via §2.
|
|
286
|
+
2. Header strip at `y=0..36`; legend strip at `y=legend_y_top..viewBox_h` (`legend_y_top = 36 + n_lanes * 80`).
|
|
287
|
+
3. Every node at `(step_cx(j) - 50, lane_y_top(k) + 8)` size `100×64`.
|
|
288
|
+
4. Empty cells render nothing — no placeholder rect, no text.
|
|
289
|
+
5. Exactly **one** focal step (`steps[j].focal: true`).
|
|
290
|
+
6. Exactly **one** focal node (`nodes[i].focal: true`).
|
|
291
|
+
7. Exactly **one** focal arrow (`style: accent`). Labeled, with a paper-masked rect behind the label.
|
|
292
|
+
8. All other arrows unlabelled.
|
|
293
|
+
9. All arrows emitted before any node rect (z-order rule).
|
|
294
|
+
10. Single-bend routing only — no diagonals. Q-bezier `r=8` at each bend.
|
|
295
|
+
11. Custom component colors ≤ 3 (in addition to the focal pair). Arrows never recolored by component `color`.
|
|
296
|
+
12. Subtitle and tool labels stay muted regardless of any component `color`.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 8. Data-type chips reference (input + output)
|
|
301
|
+
|
|
302
|
+
Small `16×8 rx=3` badges at the bottom of each node, one for input and one for output. Position is **non-negotiable**:
|
|
303
|
+
|
|
304
|
+
- **Input chip** at `(node_x+4, node_y+54)` — bottom-**left** of the node. Represents the payload format *entering* the node from upstream.
|
|
305
|
+
- **Output chip** at `(node_x+80, node_y+54)` — bottom-**right** of the node. Represents the payload format *leaving* the node toward downstream.
|
|
306
|
+
|
|
307
|
+
Either chip may be omitted (e.g., a sink node has only an input chip; a source-only node has only an output chip). Reading the diagram becomes a payload-transformation trace: scan a row, read each node's input → output, and you see exactly what shape the data takes at each hand-off.
|
|
308
|
+
|
|
309
|
+
### Chip codes
|
|
310
|
+
|
|
311
|
+
| Code | Color | Meaning |
|
|
312
|
+
|------|-------|---------|
|
|
313
|
+
| `WB` | `#6e6479` (mauve) | Web / Public data |
|
|
314
|
+
| `DB` | `#5e7a9b` (steel-blue) | Dataset / Raw file |
|
|
315
|
+
| `TB` | `#b8915a` (amber) | Table / Analysis-ready |
|
|
316
|
+
| `FL` | `#9c6b50` (sienna) | File / Report / Export |
|
|
317
|
+
| `LS` | `#4a7c59` (forest) | Live stream / Event |
|
|
318
|
+
|
|
319
|
+
Text inside chip: white, `eyebrow` role at 5px, weight 700.
|
|
320
|
+
|
|
321
|
+
Data-type chip colors are a **separate semantic axis** from the per-node color override (§4). The chip colors describe *payload format*; the node color override describes *concern type* (governance, observability, …). Don't conflate them — a node can have both an `out: TB` amber chip and a rust-red border color simultaneously.
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## 9. Legend (3- or 4-row strip)
|
|
326
|
+
|
|
327
|
+
Each row introduced by a category label at `x=144`. The default legend has **3 rows** (`STEPS` / `DATA TYPE` / `FLOW`); when one or more nodes carry a `color` override (§4), add a 4th `CONCERN` row and grow `legend_h` to 100 (so `viewBox_h = header_h + n_lanes·80 + 100`).
|
|
328
|
+
|
|
329
|
+
- **Row 1 — `STEPS`** at `y = legend_y_top + 16`: repeat the header chips with their labels. Focal step keeps accent fill.
|
|
330
|
+
- **Row 2 — `DATA TYPE`** at `y = legend_y_top + 37`: one swatch per chip type actually used in the diagram. **Append a small sub-hint** in the muted `sublabel` role after the chips: `left chip = input · right chip = output`. This makes the position-based input/output convention explicit for first-time readers.
|
|
331
|
+
- **Row 3 — `CONCERN`** (only when color overrides are present) at `y = legend_y_top + 58`: one mini-rect per custom color used, with its semantic label (e.g., `Identity · Governance`, `Data Quality · Observability`). The focal accent swatch is also shown here so the reader sees all three colored axes side-by-side.
|
|
332
|
+
- **Row 4 — `FLOW`** (last row, position depends on whether `CONCERN` row exists): short line segments with their marker + text label, one per arrow style actually used.
|
|
333
|
+
|
|
334
|
+
All legend items align on a single horizontal strip per row. Do not stack vertically inside a box.
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 10. Complexity budget
|
|
339
|
+
|
|
340
|
+
| Dimension | Max |
|
|
341
|
+
|---|---|
|
|
342
|
+
| Lanes (roles) | 4 |
|
|
343
|
+
| Steps | 6 |
|
|
344
|
+
| Nodes per lane | Nodes = active steps only — empty cells are invisible (no placeholder box) |
|
|
345
|
+
| Labelled arrows | 1 (focal accent only) |
|
|
346
|
+
| Data-type chips per node | 2 |
|
|
347
|
+
| Custom-colored elements (§4) | 3 (in addition to focal node + focal step) |
|
|
348
|
+
|
|
349
|
+
Above 4 lanes or 6 steps: split into two diagrams (e.g., ingestion pipeline / analytics pipeline).
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## 11. Anti-patterns
|
|
354
|
+
|
|
355
|
+
- **Placeholder empty cells** — if a role doesn't participate in a step, leave the cell empty (no box, no text).
|
|
356
|
+
- **More than one labelled arrow** — only the focal cross-role handoff gets a label.
|
|
357
|
+
- **Diagonal arrows** — always horizontal-first, then vertical; single right-angle bend.
|
|
358
|
+
- **`title` role for node titles** — node titles use the `node-name` role (technical context). Only the page `<h1>` uses `title`.
|
|
359
|
+
- **Accent on more than one node, one step, one arrow** — focal = one node + one step + one arrow, max.
|
|
360
|
+
- **`node-name` role for role labels** — lane labels always use the uppercase `eyebrow` role (they are identifiers, not prose).
|
|
361
|
+
- **`color` override on a focal element** — ignored. Accent always wins.
|
|
362
|
+
- **Custom-colored arrows** — arrows are topology-driven. Color on a node never spreads to its edges.
|
|
363
|
+
- **Lane tints over-applied** — a tint on every lane reads as decoration, not signal. Apply to ≤1 lane.
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## 12. Examples
|
|
368
|
+
|
|
369
|
+
- `assets/example-data-flow.html` — minimal light (the platform, 4-role × 5-step: Admin, Engineers, Scientists, Consumers). Gallery default.
|
|
370
|
+
- `assets/example-data-flow-dark.html` — same, dark skin.
|
|
371
|
+
- `assets/example-data-flow-full.html` — same, editorial-card frame.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Database Schema
|
|
2
|
+
|
|
3
|
+
**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.
|
|
4
|
+
|
|
5
|
+
**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.
|
|
6
|
+
|
|
7
|
+
## Layout conventions
|
|
8
|
+
|
|
9
|
+
### Table box
|
|
10
|
+
|
|
11
|
+
- **Header band** — `schema.table` (e.g. `public.orders`) in the `node-name` role, 12px, weight 600, with a rectangular type tag (`rx=2`, NOT a pill) reading `TABLE`. A hairline separates it from the body.
|
|
12
|
+
- **Column rows** — fixed 24px row height so connectors can anchor predictably. Each row: column name in the `node-name` family at 12px anchored left, SQL type in the `sublabel` role 9px `muted` anchored right (`uuid`, `text`, `numeric(12,2)`, `timestamptz`), and constraint chips between them as small `rx=2` tags in the `eyebrow` role at 8px: `PK`, `FK`, `UQ`, `NN`. Alternate row background `ink @ 0.02` on even rows for scannability.
|
|
13
|
+
- **Overflow row** — when a table has more columns than the budget allows, the last row is a `sublabel`-role 9px `muted` line: `+ N more columns`. Never silently truncate a table without saying so.
|
|
14
|
+
- **Index compartment** — an optional final compartment separated by a hairline, labelled with an `eyebrow`-role 8px uppercase `INDEXES` eyebrow, listing index names in the `sublabel` role at 9px (`idx_orders_customer_id`, `uq_products_sku`). List only the indexes that matter to the story, not every index on the table.
|
|
15
|
+
|
|
16
|
+
### Foreign-key connectors — the defining rule
|
|
17
|
+
|
|
18
|
+
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 the `arrow-label` role at 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.
|
|
19
|
+
|
|
20
|
+
### Schema grouping
|
|
21
|
+
|
|
22
|
+
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 an `eyebrow`-role 8px uppercase tracked schema label in its top-left corner. Draw the group rect first so tables paint over it.
|
|
23
|
+
|
|
24
|
+
### Focal rule
|
|
25
|
+
|
|
26
|
+
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`.
|
|
27
|
+
|
|
28
|
+
If a schema has no destructive FK, it has no focal element. Leave it unaccented rather than promoting an arbitrary table.
|
|
29
|
+
|
|
30
|
+
## Complexity budget
|
|
31
|
+
|
|
32
|
+
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.
|
|
33
|
+
|
|
34
|
+
## Anti-patterns
|
|
35
|
+
|
|
36
|
+
- Drawing every column of every table — a schema diagram is an argument about a subsystem, not a `\d+` dump.
|
|
37
|
+
- FK lines that connect box to box instead of column to column — that's ER, use ER instead.
|
|
38
|
+
- Missing SQL types — the type is half the content.
|
|
39
|
+
- Unlabelled FK edges — the `ON DELETE` behavior is what a reviewer is looking for.
|
|
40
|
+
- Constraint chips on every row until the chips are the noise.
|
|
41
|
+
- Index compartments listing every index rather than the ones that matter to the story.
|
|
42
|
+
- Mixing conceptual entity names with physical table names in one diagram.
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
- `assets/example-db-schema.html` — minimal light
|
|
47
|
+
- `assets/example-db-schema-dark.html` — minimal dark
|
|
48
|
+
- `assets/example-db-schema-full.html` — full editorial
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Dependency Graph
|
|
2
|
+
|
|
3
|
+
**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.
|
|
4
|
+
|
|
5
|
+
## Layout conventions
|
|
6
|
+
|
|
7
|
+
- **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.
|
|
8
|
+
- Nodes are the standard node-box pattern (§6, [primitives-core.md](primitives-core.md#node-box--full-pattern)): `rx=6`, 160px wide, 56px tall.
|
|
9
|
+
- **Fan-in badge.** Every node carries an `eyebrow`-role 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.
|
|
10
|
+
- **Node treatments** ([style-guide.md § Node type → treatment](style-guide.md#node-type--treatment)):
|
|
11
|
+
- Internal package/service → white fill + `ink` stroke.
|
|
12
|
+
- External / third-party → `ink @ 0.03` fill + `ink @ 0.30` stroke (the External/Cloud treatment).
|
|
13
|
+
- Leaf with no outgoing edges → `ink @ 0.05` fill + `muted` stroke.
|
|
14
|
+
- **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 `arrow-label`-role 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.
|
|
15
|
+
- **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.
|
|
16
|
+
- 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.
|
|
17
|
+
|
|
18
|
+
## Complexity budget
|
|
19
|
+
|
|
20
|
+
| Limit | Rule |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Max nodes | 9 |
|
|
23
|
+
| Max edges | 14 |
|
|
24
|
+
| Max rank layers | 4 |
|
|
25
|
+
| Max highlighted cycles | 1 |
|
|
26
|
+
| Max accent elements | 2 |
|
|
27
|
+
|
|
28
|
+
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.
|
|
29
|
+
|
|
30
|
+
## Anti-patterns
|
|
31
|
+
|
|
32
|
+
- Drawing a dependency graph when the data is actually a tree (single parent everywhere, no cycles) — use Tree instead.
|
|
33
|
+
- Forward edges that point upward without being the one marked cycle.
|
|
34
|
+
- A hairball layout with no rank ordering — rank first, always; ranking is what makes the graph readable, not an optional polish pass.
|
|
35
|
+
- One node per file instead of per package/module/service — the graph is about dependency structure, not the filesystem.
|
|
36
|
+
- Unlabelled external dependencies — version or registry belongs in the `sublabel` (`v3.23 · npm`), not left implicit.
|
|
37
|
+
- 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.
|
|
38
|
+
- 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.
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
- `assets/example-dependency.html` — minimal light
|
|
43
|
+
- `assets/example-dependency-dark.html` — minimal dark
|
|
44
|
+
- `assets/example-dependency-full.html` — full editorial
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Deployment
|
|
2
|
+
|
|
3
|
+
**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.
|
|
4
|
+
|
|
5
|
+
## Layout conventions
|
|
6
|
+
|
|
7
|
+
Three nesting levels, outermost to innermost — reuses the containment grammar from `type-nested.md`, specialized for infrastructure:
|
|
8
|
+
|
|
9
|
+
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`. An `eyebrow`-role 8px (or 7px for tight layouts) uppercase tracked 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).
|
|
10
|
+
2. **Infrastructure node** — a host, VM, pod, or managed service inside a zone. The §6 node-box pattern (SKILL.md; markup in [primitives-core.md](primitives-core.md#node-box--full-pattern)) at `rx=6`, with a rectangular type tag (`rx=2`, **not** a pill) carrying `POD` / `VM` / `MANAGED` / `CDN` in the top-left corner.
|
|
11
|
+
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 the `node-name` family at 12px (left-aligned) plus a `sublabel`-role 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).
|
|
12
|
+
|
|
13
|
+
**Replica badge.** A node running N copies carries a right-aligned `eyebrow`-role 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.
|
|
14
|
+
|
|
15
|
+
**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 the `arrow-label` role at 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`.
|
|
16
|
+
|
|
17
|
+
**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).
|
|
18
|
+
|
|
19
|
+
## Complexity budget
|
|
20
|
+
|
|
21
|
+
| Limit | Rule |
|
|
22
|
+
|---|---|
|
|
23
|
+
| Max zones | 3 |
|
|
24
|
+
| Max infrastructure nodes | 6 |
|
|
25
|
+
| Max artifact chips | 9 |
|
|
26
|
+
| Max network paths | 8 |
|
|
27
|
+
| Max accent elements | 2 |
|
|
28
|
+
|
|
29
|
+
Over budget → split into one deployment diagram per environment.
|
|
30
|
+
|
|
31
|
+
## Anti-patterns
|
|
32
|
+
|
|
33
|
+
- 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.
|
|
34
|
+
- Zones that are just visual grouping with no boundary meaning — a zone must be a real environment or network boundary, not a layout convenience.
|
|
35
|
+
- Artifact chips without a version tag. The version is why the diagram exists; an unversioned chip is a wasted box.
|
|
36
|
+
- One node drawn per replica instead of a single node with a replica badge.
|
|
37
|
+
- Cloud-vendor icon soup standing in for named nodes — name the host or service, don't decorate it.
|
|
38
|
+
- Unlabelled network paths. Protocol and port are the content of a deployment diagram, not decoration.
|
|
39
|
+
- Mixing two environments in one diagram (e.g. staging and production nodes side by side without a zone boundary that actually separates them).
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
|
|
43
|
+
- `assets/example-deployment.html` — minimal light
|
|
44
|
+
- `assets/example-deployment-dark.html` — minimal dark
|
|
45
|
+
- `assets/example-deployment-full.html` — full editorial
|