@mohammadhprp/system-prompt 0.10.1
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/LICENSE +21 -0
- package/README.md +35 -0
- package/bin/system-prompt.js +8 -0
- package/framework/README.md +163 -0
- package/framework/agents/README.md +49 -0
- package/framework/agents/backend-architect.md +146 -0
- package/framework/agents/researcher.md +79 -0
- package/framework/agents/reviewer.md +183 -0
- package/framework/agents/security-auditor.md +131 -0
- package/framework/commands/README.md +43 -0
- package/framework/commands/changelog.md +44 -0
- package/framework/commands/commit.md +31 -0
- package/framework/commands/learn.md +24 -0
- package/framework/commands/mr.md +46 -0
- package/framework/commands/pr.md +39 -0
- package/framework/commands/release.md +34 -0
- package/framework/commands/review.md +24 -0
- package/framework/commands/summarize-changes.md +49 -0
- package/framework/mcps/README.md +78 -0
- package/framework/mcps/excalidraw/README.md +37 -0
- package/framework/mcps/excalidraw/capabilities.md +54 -0
- package/framework/mcps/excalidraw/configs/opencode.json +8 -0
- package/framework/mcps/excalidraw/install.md +92 -0
- package/framework/mcps/excalidraw/troubleshooting.md +67 -0
- package/framework/mcps/figma-mcp-go/README.md +51 -0
- package/framework/mcps/figma-mcp-go/capabilities.md +190 -0
- package/framework/mcps/figma-mcp-go/configs/opencode.json +9 -0
- package/framework/mcps/figma-mcp-go/install.md +74 -0
- package/framework/mcps/figma-mcp-go/troubleshooting.md +99 -0
- package/framework/mcps/github-mcp/README.md +51 -0
- package/framework/mcps/github-mcp/capabilities.md +83 -0
- package/framework/mcps/github-mcp/configs/.env.example +1 -0
- package/framework/mcps/github-mcp/configs/opencode.json +13 -0
- package/framework/mcps/github-mcp/install.md +60 -0
- package/framework/mcps/github-mcp/troubleshooting.md +79 -0
- package/framework/mcps/gitlab-mcp/README.md +54 -0
- package/framework/mcps/gitlab-mcp/capabilities.md +216 -0
- package/framework/mcps/gitlab-mcp/configs/.env.example +2 -0
- package/framework/mcps/gitlab-mcp/configs/opencode.json +13 -0
- package/framework/mcps/gitlab-mcp/install.md +99 -0
- package/framework/mcps/gitlab-mcp/troubleshooting.md +116 -0
- package/framework/mcps/jira-mcp/README.md +53 -0
- package/framework/mcps/jira-mcp/capabilities.md +79 -0
- package/framework/mcps/jira-mcp/configs/.env.example +2 -0
- package/framework/mcps/jira-mcp/configs/opencode.json +13 -0
- package/framework/mcps/jira-mcp/install.md +94 -0
- package/framework/mcps/jira-mcp/troubleshooting.md +113 -0
- package/framework/mcps/laravel-boost/README.md +53 -0
- package/framework/mcps/laravel-boost/capabilities.md +92 -0
- package/framework/mcps/laravel-boost/configs/opencode.json +9 -0
- package/framework/mcps/laravel-boost/install.md +106 -0
- package/framework/mcps/laravel-boost/troubleshooting.md +119 -0
- package/framework/mcps/notion-mcp/README.md +58 -0
- package/framework/mcps/notion-mcp/capabilities.md +118 -0
- package/framework/mcps/notion-mcp/configs/opencode.json +9 -0
- package/framework/mcps/notion-mcp/install.md +70 -0
- package/framework/mcps/notion-mcp/troubleshooting.md +95 -0
- package/framework/mcps/playwright-mcp/README.md +50 -0
- package/framework/mcps/playwright-mcp/capabilities.md +149 -0
- package/framework/mcps/playwright-mcp/configs/opencode.json +9 -0
- package/framework/mcps/playwright-mcp/install.md +136 -0
- package/framework/mcps/playwright-mcp/troubleshooting.md +154 -0
- package/framework/mcps/supabase-mcp/README.md +66 -0
- package/framework/mcps/supabase-mcp/capabilities.md +127 -0
- package/framework/mcps/supabase-mcp/configs/opencode.json +9 -0
- package/framework/mcps/supabase-mcp/install.md +85 -0
- package/framework/mcps/supabase-mcp/troubleshooting.md +113 -0
- package/framework/memory/README.md +17 -0
- package/framework/memory/codebase-insights.md +6 -0
- package/framework/memory/user-preferences.md +5 -0
- package/framework/modes/README.md +52 -0
- package/framework/modes/audit.md +88 -0
- package/framework/plugins/README.md +65 -0
- package/framework/plugins/opencode-goal-plugin/README.md +45 -0
- package/framework/plugins/opencode-goal-plugin/capabilities.md +127 -0
- package/framework/plugins/opencode-goal-plugin/install.md +71 -0
- package/framework/plugins/opencode-goal-plugin/troubleshooting.md +112 -0
- package/framework/plugins/ponytail/README.md +44 -0
- package/framework/plugins/ponytail/capabilities.md +112 -0
- package/framework/plugins/ponytail/install.md +77 -0
- package/framework/plugins/ponytail/troubleshooting.md +116 -0
- package/framework/references/standards/api.md +44 -0
- package/framework/references/standards/architecture.md +43 -0
- package/framework/references/standards/database.md +43 -0
- package/framework/references/standards/debugging.md +44 -0
- package/framework/references/standards/documentation.md +43 -0
- package/framework/references/standards/logging.md +43 -0
- package/framework/references/standards/naming.md +43 -0
- package/framework/references/standards/observability.md +43 -0
- package/framework/references/standards/performance.md +43 -0
- package/framework/references/standards/pull-requests.md +43 -0
- package/framework/references/standards/security.md +43 -0
- package/framework/references/standards/testing.md +43 -0
- package/framework/references/templates/adr.md +28 -0
- package/framework/references/templates/api-spec.md +56 -0
- package/framework/references/templates/design-document.md +39 -0
- package/framework/references/templates/incident-report.md +38 -0
- package/framework/references/templates/postmortem.md +41 -0
- package/framework/references/templates/pull-request.md +34 -0
- package/framework/references/templates/runbook.md +48 -0
- package/framework/references/templates/task.md +27 -0
- package/framework/skills/README.md +68 -0
- package/framework/skills/agent-browser/SKILL.md +51 -0
- package/framework/skills/backend-best-practices/SKILL.md +136 -0
- package/framework/skills/backend-best-practices/examples.md +31 -0
- package/framework/skills/backend-best-practices/references/api-design.md +79 -0
- package/framework/skills/backend-best-practices/references/architecture-review.md +77 -0
- package/framework/skills/backend-best-practices/references/database-design.md +78 -0
- package/framework/skills/backend-best-practices/references/debugging.md +76 -0
- package/framework/skills/backend-best-practices/references/observability.md +78 -0
- package/framework/skills/backend-best-practices/references/performance.md +78 -0
- package/framework/skills/backend-best-practices/references/refactoring.md +77 -0
- package/framework/skills/backend-best-practices/references/security.md +80 -0
- package/framework/skills/backend-best-practices/references/testing.md +77 -0
- package/framework/skills/backend-engineer/SKILL.md +76 -0
- package/framework/skills/backend-engineer/examples.md +31 -0
- package/framework/skills/brainstorming/SKILL.md +159 -0
- package/framework/skills/brainstorming/examples.md +49 -0
- package/framework/skills/brainstorming/scripts/frame-template.html +213 -0
- package/framework/skills/brainstorming/scripts/helper.js +167 -0
- package/framework/skills/brainstorming/scripts/server.cjs +723 -0
- package/framework/skills/brainstorming/scripts/start-server.sh +209 -0
- package/framework/skills/brainstorming/scripts/stop-server.sh +120 -0
- package/framework/skills/brainstorming/visual-companion.md +291 -0
- package/framework/skills/brand-guidelines/LICENSE.txt +202 -0
- package/framework/skills/brand-guidelines/SKILL.md +73 -0
- package/framework/skills/code-review/SKILL.md +72 -0
- package/framework/skills/code-review/examples.md +31 -0
- package/framework/skills/design/SKILL.md +399 -0
- package/framework/skills/design/examples.md +34 -0
- package/framework/skills/diagram-design/SKILL.md +485 -0
- package/framework/skills/diagram-design/assets/example-architecture-dark.html +180 -0
- package/framework/skills/diagram-design/assets/example-architecture-full.html +192 -0
- package/framework/skills/diagram-design/assets/example-architecture.html +181 -0
- package/framework/skills/diagram-design/assets/example-bar-dark.html +127 -0
- package/framework/skills/diagram-design/assets/example-bar-full.html +103 -0
- package/framework/skills/diagram-design/assets/example-bar.html +127 -0
- package/framework/skills/diagram-design/assets/example-data-flow-dark.html +143 -0
- package/framework/skills/diagram-design/assets/example-data-flow-full.html +185 -0
- package/framework/skills/diagram-design/assets/example-data-flow.html +143 -0
- package/framework/skills/diagram-design/assets/example-datalake-dark.html +241 -0
- package/framework/skills/diagram-design/assets/example-datalake-full.html +246 -0
- package/framework/skills/diagram-design/assets/example-datalake.html +267 -0
- package/framework/skills/diagram-design/assets/example-dp-integration-dark.html +78 -0
- package/framework/skills/diagram-design/assets/example-dp-integration-full.html +88 -0
- package/framework/skills/diagram-design/assets/example-dp-integration.html +78 -0
- package/framework/skills/diagram-design/assets/example-dp-security-matrix-dark.html +31 -0
- package/framework/skills/diagram-design/assets/example-dp-security-matrix-full.html +32 -0
- package/framework/skills/diagram-design/assets/example-dp-security-matrix.html +88 -0
- package/framework/skills/diagram-design/assets/example-er-dark.html +200 -0
- package/framework/skills/diagram-design/assets/example-er-full.html +203 -0
- package/framework/skills/diagram-design/assets/example-er.html +200 -0
- package/framework/skills/diagram-design/assets/example-flowchart-dark.html +154 -0
- package/framework/skills/diagram-design/assets/example-flowchart-full.html +157 -0
- package/framework/skills/diagram-design/assets/example-flowchart.html +154 -0
- package/framework/skills/diagram-design/assets/example-gantt-dark.html +135 -0
- package/framework/skills/diagram-design/assets/example-gantt-full.html +125 -0
- package/framework/skills/diagram-design/assets/example-gantt.html +135 -0
- package/framework/skills/diagram-design/assets/example-high-level-dark.html +249 -0
- package/framework/skills/diagram-design/assets/example-high-level-full.html +245 -0
- package/framework/skills/diagram-design/assets/example-high-level-vertical-dark.html +272 -0
- package/framework/skills/diagram-design/assets/example-high-level-vertical-full.html +250 -0
- package/framework/skills/diagram-design/assets/example-high-level-vertical.html +323 -0
- package/framework/skills/diagram-design/assets/example-high-level.html +299 -0
- package/framework/skills/diagram-design/assets/example-it-state-dark.html +90 -0
- package/framework/skills/diagram-design/assets/example-it-state-full.html +69 -0
- package/framework/skills/diagram-design/assets/example-it-state.html +128 -0
- package/framework/skills/diagram-design/assets/example-layers-dark.html +121 -0
- package/framework/skills/diagram-design/assets/example-layers-full.html +124 -0
- package/framework/skills/diagram-design/assets/example-layers.html +121 -0
- package/framework/skills/diagram-design/assets/example-line-dark.html +109 -0
- package/framework/skills/diagram-design/assets/example-line-full.html +103 -0
- package/framework/skills/diagram-design/assets/example-line.html +109 -0
- package/framework/skills/diagram-design/assets/example-loop-dark.html +100 -0
- package/framework/skills/diagram-design/assets/example-loop-full.html +137 -0
- package/framework/skills/diagram-design/assets/example-loop-terminal.html +347 -0
- package/framework/skills/diagram-design/assets/example-loop.html +100 -0
- package/framework/skills/diagram-design/assets/example-medallion-dark.html +159 -0
- package/framework/skills/diagram-design/assets/example-medallion-full.html +201 -0
- package/framework/skills/diagram-design/assets/example-medallion.html +159 -0
- package/framework/skills/diagram-design/assets/example-nested-dark.html +130 -0
- package/framework/skills/diagram-design/assets/example-nested-full.html +133 -0
- package/framework/skills/diagram-design/assets/example-nested.html +134 -0
- package/framework/skills/diagram-design/assets/example-org-chart-dark.html +45 -0
- package/framework/skills/diagram-design/assets/example-org-chart-full.html +45 -0
- package/framework/skills/diagram-design/assets/example-org-chart.html +45 -0
- package/framework/skills/diagram-design/assets/example-process-dark.html +62 -0
- package/framework/skills/diagram-design/assets/example-process-full.html +72 -0
- package/framework/skills/diagram-design/assets/example-process.html +62 -0
- package/framework/skills/diagram-design/assets/example-pyramid-dark.html +117 -0
- package/framework/skills/diagram-design/assets/example-pyramid-full.html +120 -0
- package/framework/skills/diagram-design/assets/example-pyramid.html +117 -0
- package/framework/skills/diagram-design/assets/example-quadrant-consultant.html +164 -0
- package/framework/skills/diagram-design/assets/example-quadrant-dark.html +133 -0
- package/framework/skills/diagram-design/assets/example-quadrant-full.html +136 -0
- package/framework/skills/diagram-design/assets/example-quadrant.html +133 -0
- package/framework/skills/diagram-design/assets/example-radar-dark.html +137 -0
- package/framework/skills/diagram-design/assets/example-radar-full.html +133 -0
- package/framework/skills/diagram-design/assets/example-radar.html +137 -0
- package/framework/skills/diagram-design/assets/example-scatter-dark.html +139 -0
- package/framework/skills/diagram-design/assets/example-scatter-full.html +114 -0
- package/framework/skills/diagram-design/assets/example-scatter.html +139 -0
- package/framework/skills/diagram-design/assets/example-sequence-dark.html +220 -0
- package/framework/skills/diagram-design/assets/example-sequence-full.html +386 -0
- package/framework/skills/diagram-design/assets/example-sequence.html +220 -0
- package/framework/skills/diagram-design/assets/example-state-dark.html +145 -0
- package/framework/skills/diagram-design/assets/example-state-full.html +148 -0
- package/framework/skills/diagram-design/assets/example-state.html +145 -0
- package/framework/skills/diagram-design/assets/example-swimlane-dark.html +170 -0
- package/framework/skills/diagram-design/assets/example-swimlane-full.html +173 -0
- package/framework/skills/diagram-design/assets/example-swimlane.html +170 -0
- package/framework/skills/diagram-design/assets/example-timeline-dark.html +133 -0
- package/framework/skills/diagram-design/assets/example-timeline-full.html +136 -0
- package/framework/skills/diagram-design/assets/example-timeline.html +133 -0
- package/framework/skills/diagram-design/assets/example-tree-dark.html +171 -0
- package/framework/skills/diagram-design/assets/example-tree-full.html +174 -0
- package/framework/skills/diagram-design/assets/example-tree.html +171 -0
- package/framework/skills/diagram-design/assets/example-venn-dark.html +130 -0
- package/framework/skills/diagram-design/assets/example-venn-full.html +133 -0
- package/framework/skills/diagram-design/assets/example-venn.html +108 -0
- package/framework/skills/diagram-design/assets/icons.html +230 -0
- package/framework/skills/diagram-design/assets/index.html +333 -0
- package/framework/skills/diagram-design/assets/template-dark.html +82 -0
- package/framework/skills/diagram-design/assets/template-full.html +410 -0
- package/framework/skills/diagram-design/assets/template-terminal.html +170 -0
- package/framework/skills/diagram-design/assets/template.html +83 -0
- package/framework/skills/diagram-design/references/export.md +107 -0
- package/framework/skills/diagram-design/references/onboarding.md +268 -0
- package/framework/skills/diagram-design/references/primitive-annotation.md +36 -0
- package/framework/skills/diagram-design/references/primitive-icons.md +821 -0
- package/framework/skills/diagram-design/references/primitive-sketchy.md +43 -0
- package/framework/skills/diagram-design/references/primitive-terminal.md +76 -0
- package/framework/skills/diagram-design/references/style-guide.md +139 -0
- package/framework/skills/diagram-design/references/type-architecture.md +78 -0
- package/framework/skills/diagram-design/references/type-bar.md +48 -0
- package/framework/skills/diagram-design/references/type-data-flow.md +374 -0
- package/framework/skills/diagram-design/references/type-dp-integration.md +410 -0
- package/framework/skills/diagram-design/references/type-dp-security-matrix.md +379 -0
- package/framework/skills/diagram-design/references/type-er.md +23 -0
- package/framework/skills/diagram-design/references/type-flowchart.md +23 -0
- package/framework/skills/diagram-design/references/type-gantt.md +45 -0
- package/framework/skills/diagram-design/references/type-high-level.md +458 -0
- package/framework/skills/diagram-design/references/type-it-state.md +470 -0
- package/framework/skills/diagram-design/references/type-layers.md +26 -0
- package/framework/skills/diagram-design/references/type-line.md +44 -0
- package/framework/skills/diagram-design/references/type-loop.md +223 -0
- package/framework/skills/diagram-design/references/type-medallion.md +356 -0
- package/framework/skills/diagram-design/references/type-nested.md +22 -0
- package/framework/skills/diagram-design/references/type-org-chart.md +44 -0
- package/framework/skills/diagram-design/references/type-process.md +495 -0
- package/framework/skills/diagram-design/references/type-pyramid.md +33 -0
- package/framework/skills/diagram-design/references/type-quadrant.md +81 -0
- package/framework/skills/diagram-design/references/type-radar.md +80 -0
- package/framework/skills/diagram-design/references/type-scatter.md +39 -0
- package/framework/skills/diagram-design/references/type-sequence.md +35 -0
- package/framework/skills/diagram-design/references/type-state.md +21 -0
- package/framework/skills/diagram-design/references/type-swimlane.md +20 -0
- package/framework/skills/diagram-design/references/type-timeline.md +20 -0
- package/framework/skills/diagram-design/references/type-tree.md +24 -0
- package/framework/skills/diagram-design/references/type-venn.md +26 -0
- package/framework/skills/documentation/SKILL.md +74 -0
- package/framework/skills/documentation/examples.md +31 -0
- package/framework/skills/find-skills/SKILL.md +141 -0
- package/framework/skills/find-skills/examples.md +35 -0
- package/framework/skills/gitlab-mcp/SKILL.md +83 -0
- package/framework/skills/gitlab-mcp/examples.md +31 -0
- package/framework/skills/gitlab-mcp/references/code-review.md +110 -0
- package/framework/skills/gitlab-mcp/references/issues.md +141 -0
- package/framework/skills/gitlab-mcp/references/merge-requests.md +120 -0
- package/framework/skills/gitlab-mcp/references/pipelines.md +67 -0
- package/framework/skills/gitlab-mcp/references/search.md +17 -0
- package/framework/skills/gitlab-mcp/references/webhooks.md +32 -0
- package/framework/skills/gitlab-mcp/references/work-items.md +50 -0
- package/framework/skills/jira-mcp/SKILL.md +57 -0
- package/framework/skills/jira-mcp/examples.md +31 -0
- package/framework/skills/jira-mcp/references/comments.md +27 -0
- package/framework/skills/jira-mcp/references/issues.md +97 -0
- package/framework/skills/jira-mcp/references/projects.md +39 -0
- package/framework/skills/laravel-best-practices/SKILL.md +229 -0
- package/framework/skills/laravel-best-practices/examples.md +31 -0
- package/framework/skills/laravel-best-practices/references/advanced-queries.md +106 -0
- package/framework/skills/laravel-best-practices/references/architecture.md +202 -0
- package/framework/skills/laravel-best-practices/references/blade-views.md +36 -0
- package/framework/skills/laravel-best-practices/references/caching.md +70 -0
- package/framework/skills/laravel-best-practices/references/collections.md +44 -0
- package/framework/skills/laravel-best-practices/references/config.md +73 -0
- package/framework/skills/laravel-best-practices/references/db-performance.md +192 -0
- package/framework/skills/laravel-best-practices/references/eloquent.md +148 -0
- package/framework/skills/laravel-best-practices/references/error-handling.md +72 -0
- package/framework/skills/laravel-best-practices/references/events-notifications.md +52 -0
- package/framework/skills/laravel-best-practices/references/http-client.md +160 -0
- package/framework/skills/laravel-best-practices/references/mail.md +27 -0
- package/framework/skills/laravel-best-practices/references/migrations.md +121 -0
- package/framework/skills/laravel-best-practices/references/passport.md +197 -0
- package/framework/skills/laravel-best-practices/references/pennant.md +61 -0
- package/framework/skills/laravel-best-practices/references/pest-testing.md +166 -0
- package/framework/skills/laravel-best-practices/references/pulse.md +196 -0
- package/framework/skills/laravel-best-practices/references/queue-jobs.md +144 -0
- package/framework/skills/laravel-best-practices/references/routing.md +99 -0
- package/framework/skills/laravel-best-practices/references/scheduling.md +39 -0
- package/framework/skills/laravel-best-practices/references/scout.md +176 -0
- package/framework/skills/laravel-best-practices/references/security.md +198 -0
- package/framework/skills/laravel-best-practices/references/spatie-laravel-backup.md +222 -0
- package/framework/skills/laravel-best-practices/references/spatie-laravel-permission.md +272 -0
- package/framework/skills/laravel-best-practices/references/spatie-medialibrary.md +672 -0
- package/framework/skills/laravel-best-practices/references/style.md +125 -0
- package/framework/skills/laravel-best-practices/references/tailwindcss.md +112 -0
- package/framework/skills/laravel-best-practices/references/testing.md +43 -0
- package/framework/skills/laravel-best-practices/references/validation.md +75 -0
- package/framework/skills/lavish/SKILL.md +67 -0
- package/framework/skills/lavish/examples.md +31 -0
- package/framework/skills/notion-mcp/SKILL.md +57 -0
- package/framework/skills/notion-mcp/examples.md +31 -0
- package/framework/skills/notion-mcp/references/comments.md +112 -0
- package/framework/skills/notion-mcp/references/databases.md +193 -0
- package/framework/skills/notion-mcp/references/pages.md +235 -0
- package/framework/skills/skill-creator/LICENSE.txt +202 -0
- package/framework/skills/skill-creator/SKILL.md +485 -0
- package/framework/skills/skill-creator/agents/analyzer.md +274 -0
- package/framework/skills/skill-creator/agents/comparator.md +202 -0
- package/framework/skills/skill-creator/agents/grader.md +223 -0
- package/framework/skills/skill-creator/assets/eval_review.html +146 -0
- package/framework/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/framework/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/framework/skills/skill-creator/examples.md +31 -0
- package/framework/skills/skill-creator/references/schemas.md +430 -0
- package/framework/skills/skill-creator/scripts/__init__.py +0 -0
- package/framework/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/framework/skills/skill-creator/scripts/generate_report.py +326 -0
- package/framework/skills/skill-creator/scripts/improve_description.py +247 -0
- package/framework/skills/skill-creator/scripts/package_skill.py +136 -0
- package/framework/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/framework/skills/skill-creator/scripts/run_eval.py +310 -0
- package/framework/skills/skill-creator/scripts/run_loop.py +328 -0
- package/framework/skills/skill-creator/scripts/utils.py +47 -0
- package/framework/styles/README.md +35 -0
- package/framework/styles/linear/DESIGN.md +478 -0
- package/framework/styles/linear/README.md +36 -0
- package/framework/styles/linear/assets/preview.jpg +0 -0
- package/framework/styles/raycast/DESIGN.md +495 -0
- package/framework/styles/raycast/README.md +35 -0
- package/framework/styles/raycast/assets/preview.jpg +0 -0
- package/package.json +33 -0
- package/src/agent-configs.js +96 -0
- package/src/catalog.js +145 -0
- package/src/cli.js +254 -0
- package/src/installer.js +303 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
# DP security matrix
|
|
2
|
+
|
|
3
|
+
**Best for:** documenting per-role / per-component access permissions for a data platform — a grid where each row is a platform component (Keycloak, MinIO bucket, Trino catalog, JupyterHub, NiFi, …) and each column is a role / AD group (Data Administrators, Data Engineers, Data Scientists, Data Consumers, …). Each intersection cell holds a permission value (Admin / Full / R/W / Read / SELECT / Login / No access) with a visual category that matches the permission level. One cell may be marked focal to flag a critical access rule (e.g., "Data Consumers can ONLY `SELECT` from the aggregated catalog — sole consumer access").
|
|
4
|
+
|
|
5
|
+
Use when stakeholders need to audit *who can do what* across the platform. Prefer **DP integration** when the question is *who can talk to what* (topology/protocol) rather than *who can write/read what* (permissions).
|
|
6
|
+
|
|
7
|
+
This type is **parametric** — the inputs schema in §1 drives every coordinate via the formulas in §2. The rule shape mirrors `type-medallion.md` / `type-process.md` / `type-data-flow.md` so the focal rule, color override, dark mode, and reproducibility checklist read identically across types.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Inputs — the parameter contract
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
title: "Platform Access Matrix"
|
|
15
|
+
subtitle: "Four canonical groups × platform components"
|
|
16
|
+
|
|
17
|
+
roles: # 2..6 columns, ordered left → right
|
|
18
|
+
- { name: "Data Administrators", code: "DL-DataAdmins" }
|
|
19
|
+
- { name: "Data Engineers", code: "DL-DataEngineers" }
|
|
20
|
+
- { name: "Data Scientists", code: "DL-DataScientists" }
|
|
21
|
+
- { name: "Data Consumers", code: "DL-DataConsumers" }
|
|
22
|
+
|
|
23
|
+
components: # 2..14 rows, ordered top → bottom
|
|
24
|
+
- { name: "Keycloak", hint: "SSO" } # `hint` = right-aligned aside in label cell
|
|
25
|
+
- { name: "MinIO · raw bucket" }
|
|
26
|
+
- { name: "MinIO · anon · staging · agg" }
|
|
27
|
+
- { name: "Trino · raw catalog" }
|
|
28
|
+
- { name: "Trino · anon-staging" }
|
|
29
|
+
- { name: "Trino · aggregated" }
|
|
30
|
+
- { name: "JupyterHub" }
|
|
31
|
+
- { name: "NiFi" }
|
|
32
|
+
|
|
33
|
+
cells: # explicit (row, col) entries; omitted → defaults to "none"
|
|
34
|
+
# value = displayed text (free-form)
|
|
35
|
+
# level = visual category: full | rw | read | none (closed vocabulary, drives styling)
|
|
36
|
+
# focal: true (max 1) — overrides level to focal styling
|
|
37
|
+
# sub: "second-line text" — used inside focal cell
|
|
38
|
+
# color: "#hex" — optional per-cell color override (§4)
|
|
39
|
+
- { row: 0, col: 0, value: "Admin", level: "full" }
|
|
40
|
+
- { row: 0, col: 1, value: "Login", level: "read" }
|
|
41
|
+
- { row: 0, col: 2, value: "Login", level: "read" }
|
|
42
|
+
- { row: 0, col: 3, value: "Login", level: "read" }
|
|
43
|
+
|
|
44
|
+
- { row: 1, col: 0, value: "Full", level: "full" }
|
|
45
|
+
- { row: 1, col: 1, value: "R/W", level: "rw" }
|
|
46
|
+
- { row: 1, col: 2, value: "No access", level: "none" }
|
|
47
|
+
- { row: 1, col: 3, value: "No access", level: "none" }
|
|
48
|
+
|
|
49
|
+
# ... rows 2..4 follow the same pattern ...
|
|
50
|
+
|
|
51
|
+
- { row: 5, col: 0, value: "Full", level: "full" }
|
|
52
|
+
- { row: 5, col: 1, value: "R/W", level: "rw" }
|
|
53
|
+
- { row: 5, col: 2, value: "SELECT", level: "read" }
|
|
54
|
+
- { row: 5, col: 3, value: "SELECT only", sub: "sole consumer access", focal: true }
|
|
55
|
+
|
|
56
|
+
# ... rows 6..7 ...
|
|
57
|
+
|
|
58
|
+
none_label: "No access" # default text rendered when a cell is omitted
|
|
59
|
+
dark: false
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Reserved field semantics:**
|
|
63
|
+
- `roles[j].name` — primary role label (`node-name` role at 11px, white text on the ink banner)
|
|
64
|
+
- `roles[j].code` — secondary AD-group identifier (`sublabel` role, white text at 0.85 opacity)
|
|
65
|
+
- `components[i].hint` — optional right-aligned `sublabel` text in the label cell (e.g., `"SSO"`, `"S3 API"`)
|
|
66
|
+
- `cells[k].level` — closed vocabulary `full | rw | read | none`. Drives fill/stroke/text-color per §2.4.
|
|
67
|
+
- `cells[k].value` — free-form display text. Domain-specific labels (`"R/W"`, `"SELECT"`, `"Login"`) work without inventing new levels.
|
|
68
|
+
- `cells[k].focal: true` — exactly **one** cell may declare this. Overrides `level` to focal styling.
|
|
69
|
+
- `cells[k].sub` — optional 2nd-line text (used with focal). Renders in the `sublabel` role at 8px below the primary value.
|
|
70
|
+
- `cells[k].color: "#hex"` — optional per-cell color override (§4).
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 2. Layout formulas — deterministic geometry
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
# Constants
|
|
78
|
+
left_pad = 12
|
|
79
|
+
right_pad = 48
|
|
80
|
+
comp_col_w = 208
|
|
81
|
+
comp_role_gap = 12
|
|
82
|
+
role_col_w = 148
|
|
83
|
+
role_col_gap = 16
|
|
84
|
+
header_h = 52
|
|
85
|
+
row_h = 36
|
|
86
|
+
row_stride = 40
|
|
87
|
+
|
|
88
|
+
# Counts
|
|
89
|
+
n_roles = len(roles) # 2..6
|
|
90
|
+
n_components = len(components) # 2..14
|
|
91
|
+
|
|
92
|
+
# Canvas
|
|
93
|
+
viewBox_w = left_pad + comp_col_w + comp_role_gap
|
|
94
|
+
+ n_roles * role_col_w + (n_roles - 1) * role_col_gap
|
|
95
|
+
+ right_pad
|
|
96
|
+
# 4 roles → 12 + 208 + 12 + 592 + 48 + 48 = 920
|
|
97
|
+
|
|
98
|
+
header_y = 72
|
|
99
|
+
row_y(k) = 140 + k * row_stride # 140, 180, 220, ...
|
|
100
|
+
rows_bottom = row_y(n_components - 1) + row_h # 8 rows → 456
|
|
101
|
+
legend_y_top = rows_bottom + 20 # 476 for 8-row canonical
|
|
102
|
+
viewBox_h = legend_y_top + 44 # 520 for 8-row canonical
|
|
103
|
+
|
|
104
|
+
# Column positions
|
|
105
|
+
comp_col_x = left_pad # 12
|
|
106
|
+
role_col_x(j) = left_pad + comp_col_w + comp_role_gap
|
|
107
|
+
+ j * (role_col_w + role_col_gap)
|
|
108
|
+
# 232, 396, 560, 724
|
|
109
|
+
role_col_cx(j) = role_col_x(j) + role_col_w / 2 # 306, 470, 634, 798
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 2.1 Background
|
|
113
|
+
|
|
114
|
+
Solid paper fill across the full viewBox. No dot pattern.
|
|
115
|
+
|
|
116
|
+
### 2.2 Header row (`y = 72, h = 52`)
|
|
117
|
+
|
|
118
|
+
**Component-column header cell:**
|
|
119
|
+
- Rect: `(comp_col_x, header_y, comp_col_w, header_h)`, fill white, stroke `ink @ 0.12` 0.8, `rx=6`
|
|
120
|
+
- Two-line label centered at `(comp_col_x + comp_col_w/2, header_y+24)` and `(…, header_y+40)`:
|
|
121
|
+
- Line 1: `"Component"` — `node-name` role at 11px, ink
|
|
122
|
+
- Line 2: `"vs. AD group"` — `sublabel` role, muted
|
|
123
|
+
|
|
124
|
+
**Role banners (one per role):**
|
|
125
|
+
- Rect: `(role_col_x(j), header_y, role_col_w, header_h)`, fill `ink`, `rx=6`
|
|
126
|
+
- Two-line label centered:
|
|
127
|
+
- Line 1 at `y=92`: `roles[j].name` — `node-name` role at 11px, white
|
|
128
|
+
- Line 2 at `y=108`: `roles[j].code` — `sublabel` role, white at opacity 0.85
|
|
129
|
+
|
|
130
|
+
### 2.3 Data row (`y = row_y(k), h = 36`)
|
|
131
|
+
|
|
132
|
+
**Component label cell:**
|
|
133
|
+
- Rect: `(comp_col_x, row_y(k), comp_col_w, row_h)`, fill white, stroke `ink @ 0.12` 0.8, `rx=4`
|
|
134
|
+
- Name at `(comp_col_x + 12, row_y(k) + 22)`: `node-name` role at 11px, ink, left-aligned
|
|
135
|
+
- Hint (if present) at `(comp_col_x + comp_col_w − 12, row_y(k) + 22)`: `sublabel` role, muted, right-aligned
|
|
136
|
+
|
|
137
|
+
**Value cells (one per role × component):**
|
|
138
|
+
- Rect: `(role_col_x(j), row_y(k), role_col_w, row_h)`, `rx=4`, stroke `ink @ 0.12` 0.6
|
|
139
|
+
- Fill and text-color depend on `level` (or focal flag) — see §2.4
|
|
140
|
+
- Value text centered at `(role_col_cx(j), row_y(k) + 22)`: `node-name` role at 10px
|
|
141
|
+
- Focal cell uses a slightly raised primary text at `y=18` and a sub-line at `y=30` (`sublabel` role at 8px)
|
|
142
|
+
|
|
143
|
+
### 2.4 Cell style table
|
|
144
|
+
|
|
145
|
+
| `level` | Fill | Stroke | Text color | Text weight |
|
|
146
|
+
|---|---|---|---|---|
|
|
147
|
+
| `full` | `ink @ 0.08` | `ink @ 0.12` | `ink` | 600 |
|
|
148
|
+
| `rw` | `#FFFFFF` | `ink @ 0.12` | `ink` | 400 |
|
|
149
|
+
| `read` | `muted @ 0.08` | `ink @ 0.12` | `muted` | 400 |
|
|
150
|
+
| `none` | `paper` | `ink @ 0.12` | `soft` | 400 |
|
|
151
|
+
| **focal** | `accent @ 0.07` | `accent` (1.4) | `accent` | 600 |
|
|
152
|
+
|
|
153
|
+
The focal cell can carry a 2nd line (`sub:`) rendered in `accent` with the `sublabel` role at 8px and 0.85 opacity.
|
|
154
|
+
|
|
155
|
+
### 2.5 Legend (`y_top = legend_y_top, h ≈ 30`)
|
|
156
|
+
|
|
157
|
+
Hairline separator at `legend_y_top`. Below the separator, one row of style swatches with their labels — only the styles actually used in the diagram appear in the legend.
|
|
158
|
+
|
|
159
|
+
- "LEGEND" eyebrow at `(left_pad, legend_y_top + 20)`: `eyebrow` role, muted, letter-spacing 0.14em
|
|
160
|
+
- Each style: swatch rect (14×12 `rx=2`) followed by a `sublabel` role label
|
|
161
|
+
- Item x-positions are tabulated left-to-right with ~120-px stride; legend wraps onto a second visual row only if `n_roles ≥ 6` (otherwise fits in one line)
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 3. Cells, not connectors
|
|
166
|
+
|
|
167
|
+
A matrix diagram has **no connectors** — there are no arrows between cells, no flow lines. The diagram's information is entirely in the cell content + cell styling. The only "connector-like" element is the focal cell's accent border, which visually "calls out" a specific intersection.
|
|
168
|
+
|
|
169
|
+
Cells emit **no edges**. Don't add arrows pointing into cells or between cells — they belong in a different diagram type.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 4. Color overrides
|
|
174
|
+
|
|
175
|
+
Three independent override axes — per-cell, per-component (row), per-role (column). All optional, all use the same `color: "#hex"` field, all draw from the same recommended palette. Mirrors §3.4 of `type-high-level.md`, §4 of `type-process.md`, §4 of `type-medallion.md`.
|
|
176
|
+
|
|
177
|
+
### 4.1 Per-cell `color`
|
|
178
|
+
|
|
179
|
+
Tints a specific intersection cell. Applied to:
|
|
180
|
+
|
|
181
|
+
| Element | Light | Dark |
|
|
182
|
+
|---|---|---|
|
|
183
|
+
| Cell fill | `rgba(C, 0.08)` | `rgba(C_light, 0.12)` |
|
|
184
|
+
| Cell stroke | `rgba(C, 0.45)` width 1.0 | `rgba(C_light, 0.55)` width 1.0 |
|
|
185
|
+
| Value text | `C` | `C_light` |
|
|
186
|
+
| Sub text (if present) | `rgba(C, 0.85)` | `rgba(C_light, 0.95)` |
|
|
187
|
+
|
|
188
|
+
`C_light` = the same hex lightened ~15% for dark-mode contrast.
|
|
189
|
+
|
|
190
|
+
### 4.2 Per-component `color` (`components[i].color`)
|
|
191
|
+
|
|
192
|
+
Tints the row's **label cell only** (left column). The data cells in that row keep their per-cell `level` styling — the row color flags *what* this component is, not *what permissions live in it*.
|
|
193
|
+
|
|
194
|
+
| Element | Light | Dark |
|
|
195
|
+
|---|---|---|
|
|
196
|
+
| Label cell fill | `rgba(C, 0.06)` | `rgba(C_light, 0.10)` |
|
|
197
|
+
| Label cell stroke | `rgba(C, 0.45)` width 0.8 | `rgba(C_light, 0.55)` width 0.8 |
|
|
198
|
+
| Component name | `C` | `C_light` |
|
|
199
|
+
| Hint text | unchanged (muted) | unchanged (muted) |
|
|
200
|
+
|
|
201
|
+
### 4.3 Per-role `color` (`roles[j].color`)
|
|
202
|
+
|
|
203
|
+
Tints the **column banner only** (top row). Cells underneath keep their `level` styling. Replaces the default navy banner fill with the chosen hex.
|
|
204
|
+
|
|
205
|
+
| Element | Light & Dark (banner is the same in both modes) |
|
|
206
|
+
|---|---|
|
|
207
|
+
| Banner fill | `C` |
|
|
208
|
+
| Role name + code text | `#FFFFFF` if `C` is dark (luminance ≤ 0.5), else `ink` |
|
|
209
|
+
|
|
210
|
+
If you pick a mid-luminance hex (e.g., yellow `#c9a23a`), the text auto-flips to ink for contrast. Pair `roles[j].text_color: "#hex"` to override this auto-pick.
|
|
211
|
+
|
|
212
|
+
### 4.4 Rules
|
|
213
|
+
|
|
214
|
+
- **Focal cell wins.** A focal cell ignores `color` overrides — accent always.
|
|
215
|
+
- **Per-cell `color` overrides `level` styling** for that one cell.
|
|
216
|
+
- **Per-component / per-role overrides are scoped:** component → row label only; role → banner only. They do **not** spread into the matrix body. To flag a specific intersection, use per-cell.
|
|
217
|
+
- **Cap:** keep total custom-colored entities ≤ 5 per diagram (combining cells + components + roles). Above 5, the matrix reads as colored noise — split into multiple diagrams or rethink which color carries which concern.
|
|
218
|
+
|
|
219
|
+
### 4.5 Recommended palette (same as the other parametric types)
|
|
220
|
+
|
|
221
|
+
- `#b85450` rust-red — Security elevation / break-glass / SoX-flagged
|
|
222
|
+
- `#5a7d9a` slate-blue — Quality / monitoring / observability gate
|
|
223
|
+
- `#7a8c47` olive-green — Approved / governance-cleared / publication-ready
|
|
224
|
+
- `#c9a23a` warm yellow — Working / sandbox / data-scientist zone
|
|
225
|
+
- `#8c6d3f` warm-brown — Archive / cold / DR
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 5. Focal rule
|
|
230
|
+
|
|
231
|
+
Exactly **one** focal cell per diagram (or zero). The focal cell:
|
|
232
|
+
- Uses focal styling (accent fill + accent stroke 1.4 + accent text bold)
|
|
233
|
+
- May carry a 2-line content: primary `value` at `y = row_y(k) + 18`, `sub` at `y = row_y(k) + 30`
|
|
234
|
+
- Calls out the diagram's central security claim — the *one* access rule that distinguishes this platform's posture from a generic permissions table
|
|
235
|
+
|
|
236
|
+
If zero or >1 `focal: true` cells are declared, halt and ask the user.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 6. Dark mode
|
|
241
|
+
|
|
242
|
+
| Token | Light | Dark |
|
|
243
|
+
|---|---|---|
|
|
244
|
+
| Paper | `paper` | `ink` |
|
|
245
|
+
| Ink | `ink` | `paper` |
|
|
246
|
+
| Muted | `muted` | `soft` |
|
|
247
|
+
| Soft (no-access text) | `soft` | `muted` |
|
|
248
|
+
| Accent | `accent` | `accent` |
|
|
249
|
+
| Role-banner fill | `ink` | `ink` |
|
|
250
|
+
| Header / row stroke | `ink @ 0.12` | `paper @ 0.18` |
|
|
251
|
+
| Full / Admin fill | `ink @ 0.08` | `paper @ 0.10` |
|
|
252
|
+
| R/W fill | `#FFFFFF` | `paper @ 0.06` |
|
|
253
|
+
| Read fill | `muted @ 0.08` | `soft @ 0.12` |
|
|
254
|
+
| No-access fill | `paper` | `paper @ 0.02` |
|
|
255
|
+
| Focal fill | `accent @ 0.07` | `accent @ 0.12` |
|
|
256
|
+
| Focal stroke | `accent` | `accent` |
|
|
257
|
+
| Custom component colors | `C` | `C_light` (lighten ~15%) |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 7. Reproducibility checklist (taste gate)
|
|
262
|
+
|
|
263
|
+
Before emitting SVG, verify **every** item:
|
|
264
|
+
|
|
265
|
+
1. `viewBox = "0 0 {viewBox_w} {viewBox_h}"` derived via §2 (4 roles × 8 components → 920 × 520).
|
|
266
|
+
2. Header row at `y=72 h=52`. Component header cell white-filled with two-line `Component / vs. AD group` label. Role banners filled `ink` with name + AD-group code in white.
|
|
267
|
+
3. Data rows start at `y=140`, stride 40, height 36. `rows_bottom = 140 + (n_components−1)·40 + 36`.
|
|
268
|
+
4. Component label cell `rx=4`, name left-aligned at `x=24`, optional `hint` right-aligned at `x = comp_col_x + comp_col_w − 12`.
|
|
269
|
+
5. Every value cell `rx=4`, stroke `ink @ 0.12` 0.6, fill + text matching §2.4 for its `level`.
|
|
270
|
+
6. Exactly **one** focal cell (or zero). Focal cell stroke `accent` width 1.4. Primary value at `y = row_y(k) + 18`; `sub` (if present) at `y = row_y(k) + 30`.
|
|
271
|
+
7. Cells omitted from `cells:` render as `level: "none"` with `none_label` text (default `"No access"`).
|
|
272
|
+
8. Custom-colored cells ≤ 2 (in addition to the focal cell).
|
|
273
|
+
9. No connector elements anywhere in the SVG.
|
|
274
|
+
10. Legend strip at `legend_y_top`, one swatch per `level` actually used, hairline separator above.
|
|
275
|
+
11. `viewBox_h` grows with `n_components`; `viewBox_w` grows with `n_roles`.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 8. Anti-patterns
|
|
280
|
+
|
|
281
|
+
- **More than one focal cell** — focal exists to mark *the* critical access rule; >1 erases the signal.
|
|
282
|
+
- **Connectors anywhere** — matrix is value-driven; arrows belong in DP integration / process diagrams.
|
|
283
|
+
- **Freeform `level` values** — closed vocabulary is `full | rw | read | none`. Use `value` for free-form displayed text + `color` override for arbitrary tinting.
|
|
284
|
+
- **Per-row or per-column color tints** — apply `color` per cell only. Whole-row or whole-column highlighting tends to over-emphasize and collapses the matrix into a list.
|
|
285
|
+
- **Using `none_label` as a placeholder for "TBD"** — `none` means *no access*. If the permission is unknown, leave the cell empty in inputs but document it elsewhere; don't render an ambiguous state.
|
|
286
|
+
- **More than 6 roles** — split into two matrices (e.g., human roles vs service accounts) before exceeding 6 columns.
|
|
287
|
+
- **More than 14 components** — split by domain (storage / compute / observability / governance) before exceeding 14 rows.
|
|
288
|
+
- **Using the matrix to document *how* permissions are granted** — that belongs in a process or sequence diagram. The matrix shows *what* each role can do, not the grant flow.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 9. Examples
|
|
293
|
+
|
|
294
|
+
- `assets/example-dp-security-matrix.html` — minimal light (NatStat canonical: 4 roles × 8 components, focal at Data Consumers × Trino aggregated). Gallery default.
|
|
295
|
+
- `assets/example-dp-security-matrix-dark.html` — same, dark skin.
|
|
296
|
+
- `assets/example-dp-security-matrix-full.html` — same, editorial-card frame with subtitle + summary cards.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 10. Worked YAML — full inputs for `example-dp-security-matrix.html`
|
|
301
|
+
|
|
302
|
+
The complete inputs that map to the shipped canonical example. Every coordinate in that SVG is derivable from §2 applied to these inputs.
|
|
303
|
+
|
|
304
|
+
```yaml
|
|
305
|
+
title: "Platform Access Matrix"
|
|
306
|
+
subtitle: "Four canonical groups × platform components"
|
|
307
|
+
|
|
308
|
+
roles:
|
|
309
|
+
- { name: "Data Administrators", code: "DL-DataAdmins" }
|
|
310
|
+
- { name: "Data Engineers", code: "DL-DataEngineers" }
|
|
311
|
+
- { name: "Data Scientists", code: "DL-DataScientists" }
|
|
312
|
+
- { name: "Data Consumers", code: "DL-DataConsumers" }
|
|
313
|
+
|
|
314
|
+
components:
|
|
315
|
+
- { name: "Keycloak", hint: "SSO" }
|
|
316
|
+
- { name: "MinIO · raw bucket" }
|
|
317
|
+
- { name: "MinIO · anon · staging · agg" }
|
|
318
|
+
- { name: "Trino · raw catalog" }
|
|
319
|
+
- { name: "Trino · anon-staging" }
|
|
320
|
+
- { name: "Trino · aggregated" }
|
|
321
|
+
- { name: "JupyterHub" }
|
|
322
|
+
- { name: "NiFi" }
|
|
323
|
+
|
|
324
|
+
cells:
|
|
325
|
+
# Row 0 — Keycloak
|
|
326
|
+
- { row: 0, col: 0, value: "Admin", level: "full" }
|
|
327
|
+
- { row: 0, col: 1, value: "Login", level: "read" }
|
|
328
|
+
- { row: 0, col: 2, value: "Login", level: "read" }
|
|
329
|
+
- { row: 0, col: 3, value: "Login", level: "read" }
|
|
330
|
+
# Row 1 — MinIO raw
|
|
331
|
+
- { row: 1, col: 0, value: "Full", level: "full" }
|
|
332
|
+
- { row: 1, col: 1, value: "R/W", level: "rw" }
|
|
333
|
+
- { row: 1, col: 2, value: "No access", level: "none" }
|
|
334
|
+
- { row: 1, col: 3, value: "No access", level: "none" }
|
|
335
|
+
# Row 2 — MinIO anon/staging/agg
|
|
336
|
+
- { row: 2, col: 0, value: "Full", level: "full" }
|
|
337
|
+
- { row: 2, col: 1, value: "R/W", level: "rw" }
|
|
338
|
+
- { row: 2, col: 2, value: "Read", level: "read" }
|
|
339
|
+
- { row: 2, col: 3, value: "No access", level: "none" }
|
|
340
|
+
# Row 3 — Trino raw catalog
|
|
341
|
+
- { row: 3, col: 0, value: "Full", level: "full" }
|
|
342
|
+
- { row: 3, col: 1, value: "R/W", level: "rw" }
|
|
343
|
+
- { row: 3, col: 2, value: "No access", level: "none" }
|
|
344
|
+
- { row: 3, col: 3, value: "No access", level: "none" }
|
|
345
|
+
# Row 4 — Trino anon-staging
|
|
346
|
+
- { row: 4, col: 0, value: "Full", level: "full" }
|
|
347
|
+
- { row: 4, col: 1, value: "R/W", level: "rw" }
|
|
348
|
+
- { row: 4, col: 2, value: "SELECT", level: "read" }
|
|
349
|
+
- { row: 4, col: 3, value: "No access", level: "none" }
|
|
350
|
+
# Row 5 — Trino aggregated (focal cell at col 3)
|
|
351
|
+
- { row: 5, col: 0, value: "Full", level: "full" }
|
|
352
|
+
- { row: 5, col: 1, value: "R/W", level: "rw" }
|
|
353
|
+
- { row: 5, col: 2, value: "SELECT", level: "read" }
|
|
354
|
+
- { row: 5, col: 3, value: "SELECT only", sub: "sole consumer access", focal: true }
|
|
355
|
+
# Row 6 — JupyterHub
|
|
356
|
+
- { row: 6, col: 0, value: "Admin", level: "full" }
|
|
357
|
+
- { row: 6, col: 1, value: "R/W", level: "rw" }
|
|
358
|
+
- { row: 6, col: 2, value: "R/W", level: "rw" }
|
|
359
|
+
- { row: 6, col: 3, value: "No access", level: "none" }
|
|
360
|
+
# Row 7 — NiFi
|
|
361
|
+
- { row: 7, col: 0, value: "Admin", level: "full" }
|
|
362
|
+
- { row: 7, col: 1, value: "R/W", level: "rw" }
|
|
363
|
+
- { row: 7, col: 2, value: "Read", level: "read" }
|
|
364
|
+
- { row: 7, col: 3, value: "No access", level: "none" }
|
|
365
|
+
|
|
366
|
+
dark: false
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### 10.1 What this YAML proves
|
|
370
|
+
|
|
371
|
+
Run §2 with these inputs:
|
|
372
|
+
- `n_roles = 4`, `n_components = 8`, no color overrides, one focal cell.
|
|
373
|
+
- `viewBox_w = 12 + 208 + 12 + 4·148 + 3·16 + 48 = 920` ✓
|
|
374
|
+
- `row_y(k)` produces `140, 180, 220, 260, 300, 340, 380, 420` ✓
|
|
375
|
+
- `rows_bottom = 420 + 36 = 456`; `legend_y_top = 476`; `viewBox_h = 520` ✓
|
|
376
|
+
- `role_col_x(j) = [232, 396, 560, 724]` ✓
|
|
377
|
+
- Focal cell at `(row=5, col=3)` → rect `(724, 340, 148, 36)` with accent stroke 1.4 ✓
|
|
378
|
+
|
|
379
|
+
A fresh generation from this YAML produces a diagram visually indistinguishable from the shipped `example-dp-security-matrix.html`.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ER / Data Model
|
|
2
|
+
|
|
3
|
+
**Best for:** database schemas, API resource relationships, domain models.
|
|
4
|
+
|
|
5
|
+
## Layout conventions
|
|
6
|
+
- Each entity is a two-section box:
|
|
7
|
+
- **Header**: type tag (`ENTITY`) + entity name in Geist.
|
|
8
|
+
- **Body**: field list in Geist Mono, one per line. PK prefixed with `#`, FK prefixed with `→`.
|
|
9
|
+
- Relationships: lines between entities with cardinality at each end:
|
|
10
|
+
- `1`, `N`, `0..1`, `1..*` in Geist Mono, 8px, placed 10–12px from the entity edge.
|
|
11
|
+
- Optional relationship label ("has", "belongs to") centered on the line.
|
|
12
|
+
- Group related entities close; lay out so most relationships are straight lines, not tangles.
|
|
13
|
+
- Coral on the aggregate root or central entity of the model.
|
|
14
|
+
|
|
15
|
+
## Anti-patterns
|
|
16
|
+
- Drawing an arrow for every FK on a model with dozens — lay out by cluster instead.
|
|
17
|
+
- Inconsistent cardinality notation between ends of the same relationship.
|
|
18
|
+
- Fields padded to equal-height boxes — natural height by content is fine.
|
|
19
|
+
|
|
20
|
+
## Examples
|
|
21
|
+
- `assets/example-er.html` — minimal light
|
|
22
|
+
- `assets/example-er-dark.html` — minimal dark
|
|
23
|
+
- `assets/example-er-full.html` — full editorial
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Flowchart
|
|
2
|
+
|
|
3
|
+
**Best for:** decision logic, algorithms, user-facing branching flows ("Should I…?"), onboarding routing, support-triage trees.
|
|
4
|
+
|
|
5
|
+
## Layout conventions
|
|
6
|
+
- Shape carries type, not color:
|
|
7
|
+
- **Oval** (`rx=20`) — start / end
|
|
8
|
+
- **Rectangle** (`rx=6`) — step / action
|
|
9
|
+
- **Diamond** — decision (≤3 exits)
|
|
10
|
+
- **Small filled ink dot** (`r=4`) — merge point where branches rejoin
|
|
11
|
+
- Flow runs top→down. From a diamond, conventional exits: Yes to the right, No below — but label every outgoing arrow regardless.
|
|
12
|
+
- Use coral on the happy path *or* on the single most consequential decision — never on every decision.
|
|
13
|
+
- If two arrows must cross, use a small arc jump on one so the crossing is readable.
|
|
14
|
+
|
|
15
|
+
## Anti-patterns
|
|
16
|
+
- Using fill color to signal node type (shape does that).
|
|
17
|
+
- Decision diamond with 4+ exits — refactor into nested diamonds.
|
|
18
|
+
- Unlabeled decision branches.
|
|
19
|
+
|
|
20
|
+
## Examples
|
|
21
|
+
- `assets/example-flowchart.html` — minimal light
|
|
22
|
+
- `assets/example-flowchart-dark.html` — minimal dark
|
|
23
|
+
- `assets/example-flowchart-full.html` — full editorial
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Gantt Chart
|
|
2
|
+
|
|
3
|
+
**Best for:** project plans and roadmaps — tasks with explicit start and end dates, grouped into phases. Use when the reader needs to see temporal overlap, parallel tracks, and milestone sequencing at a glance.
|
|
4
|
+
|
|
5
|
+
## Layout conventions
|
|
6
|
+
|
|
7
|
+
- **Left label column:** x=20–200 (180px). Task names in Geist sans 11px 600. Phase labels as Geist Mono 7px eyebrows above each group.
|
|
8
|
+
- **Timeline area:** x=200–960 (760px). Time axis runs left→right.
|
|
9
|
+
- **Row height:** 40px per task. Each bar occupies h=24px centered in the row (8px top padding).
|
|
10
|
+
- **Time axis:** Geist Mono 8px week/month labels at x=200+i×pitch, y=56 (just above first task row). A hairline separator at y=64.
|
|
11
|
+
- **Phase grouping:** a subtle zone rect (same pattern as architecture zone) behind each phase's rows, with an eyebrow label in the top-left margin. Use `rgba(45,49,66,0.02)` fill, `rgba(45,49,66,0.10)` stroke.
|
|
12
|
+
- **Focal task bar:** 1 bar in accent fill/stroke (the key deliverable or critical path task). All others: muted fill @ 0.15, muted stroke.
|
|
13
|
+
- **Today / milestone marker:** optional vertical dashed line in `muted` at the current week x-position.
|
|
14
|
+
|
|
15
|
+
### Task bar pattern
|
|
16
|
+
|
|
17
|
+
```svg
|
|
18
|
+
<!-- Non-focal task -->
|
|
19
|
+
<rect x="X_start" y="ROW_Y+8" width="DURATION_PX" height="24" rx="4"
|
|
20
|
+
fill="rgba(79,93,117,0.15)" stroke="#4f5d75" stroke-width="1"/>
|
|
21
|
+
<text x="X_start+8" y="ROW_Y+25" fill="#2d3142" font-size="10" font-weight="600"
|
|
22
|
+
font-family="'Geist', sans-serif">Task name</text>
|
|
23
|
+
|
|
24
|
+
<!-- Focal task -->
|
|
25
|
+
<rect x="X_start" y="ROW_Y+8" width="DURATION_PX" height="24" rx="4"
|
|
26
|
+
fill="rgba(235,108,54,0.12)" stroke="#eb6c36" stroke-width="1"/>
|
|
27
|
+
<text x="X_start+8" y="ROW_Y+25" fill="#eb6c36" font-size="10" font-weight="600"
|
|
28
|
+
font-family="'Geist', sans-serif">Key task</text>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Duration in pixels: `(end_week - start_week) × pitch`. Pitch = timeline_width / total_weeks.
|
|
32
|
+
|
|
33
|
+
## Anti-patterns
|
|
34
|
+
|
|
35
|
+
- More than 12 tasks (splits into sub-plans or collapses into phase-level view).
|
|
36
|
+
- More than 5 parallel tracks per phase (illegible overlap).
|
|
37
|
+
- Dependency arrows between tasks in v1 (add only when essential; use the annotation primitive for labels).
|
|
38
|
+
- Start/end dates in the bar label (put them in the x-axis or tooltip comment instead).
|
|
39
|
+
- Equal visual weight for all bars (the focal task must stand out).
|
|
40
|
+
|
|
41
|
+
## Examples
|
|
42
|
+
|
|
43
|
+
- `assets/example-gantt.html` — minimal light
|
|
44
|
+
- `assets/example-gantt-dark.html` — minimal dark
|
|
45
|
+
- `assets/example-gantt-full.html` — full editorial
|