@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,495 @@
|
|
|
1
|
+
# Process
|
|
2
|
+
|
|
3
|
+
**Best for:** sequential business processes with multiple actors/divisions where the reader needs to see *who* does *what*, *what data* enters and leaves each step, and *which tools* are used — not just the step order. Covers responsibility audits, data-quality gate reviews, cross-divisional handoff maps, and end-to-end workflow documentation.
|
|
4
|
+
|
|
5
|
+
Prefer swimlane (simpler) when the data types and tools don't matter. Prefer process when each step's input/output payload and responsible team must be legible at a glance.
|
|
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. The rule shapes mirror `type-data-flow.md` so color override, IN/OUT chip semantic, and reproducibility checklist read identically across types.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Inputs — the parameter contract
|
|
12
|
+
|
|
13
|
+
```yaml
|
|
14
|
+
lanes: # 1..6 horizontal swimlanes (top to bottom)
|
|
15
|
+
- { name: ["RD&E"], key: "RDE" }
|
|
16
|
+
- { name: ["IT"], key: "IT" }
|
|
17
|
+
- { name: ["FIELD", "SERVICES"], key: "FLD" }
|
|
18
|
+
- { name: ["SURVEY", "SERVICES"], key: "SVY" }
|
|
19
|
+
- { name: ["HOUSEHOLD", "UNIT"], key: "HHU" }
|
|
20
|
+
- { name: ["COMMS &", "MARKETING"], key: "CMM" }
|
|
21
|
+
|
|
22
|
+
steps: # 1..12 vertical step columns (left to right)
|
|
23
|
+
- { number: "1", label: "Design" }
|
|
24
|
+
- { number: "2", label: "Build" }
|
|
25
|
+
- { number: "3", label: "Test", focal: true } # focal step header chip — accent fill
|
|
26
|
+
- { number: "4", label: "Train" }
|
|
27
|
+
# ... up to 12
|
|
28
|
+
|
|
29
|
+
nodes: # explicit per-cell entries; empty cells render nothing
|
|
30
|
+
- { lane: "RDE", step: 0, title: "Survey design", sub: "questionnaire · sampling", tool: "Excel · CSPro",
|
|
31
|
+
chips: {in: null, out: "FL"} } # first step has no input chip
|
|
32
|
+
- { lane: "IT", step: 1, title: "Build app", sub: "form + validation", tool: "CSPro · scripts",
|
|
33
|
+
chips: {in: "FL", out: "TB"}, color: "#5a7d9a" } # slate-blue — data quality concern
|
|
34
|
+
- { lane: "RDE", step: 2, title: "Pilot test", sub: "field debug", tool: "tablet · script",
|
|
35
|
+
chips: {in: "TB", out: "TB"}, focal: true } # focal node — accent border
|
|
36
|
+
- { lane: "FLD", step: 3, title: "Train enumerators", sub: "protocols · safety", tool: "manual",
|
|
37
|
+
chips: {in: "TB", out: "LS"}, color: "#b85450" } # rust-red — governance / training
|
|
38
|
+
# ... etc
|
|
39
|
+
|
|
40
|
+
arrows: # explicit edges; styles bind to topology (see §3)
|
|
41
|
+
- { from: {lane: "RDE", step: 0}, to: {lane: "IT", step: 1}, style: "normal" }
|
|
42
|
+
- { from: {lane: "IT", step: 1}, to: {lane: "RDE", step: 2}, style: "focal-in" } # accent — into focal
|
|
43
|
+
- { from: {lane: "RDE", step: 2}, to: {lane: "FLD", step: 3}, style: "focal-out" } # accent — out of focal
|
|
44
|
+
- { from: {lane: "RDE", step: 2}, to: {lane: "IT", step: 1}, style: "trigger" } # dashed trigger
|
|
45
|
+
# ... etc
|
|
46
|
+
|
|
47
|
+
dark: false
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Reserved field semantics:**
|
|
51
|
+
- `lanes[k].key` — the 3-letter role badge text shown inside every node in that lane.
|
|
52
|
+
- `lanes[k].name` — 1 or 2 line lane label; uppercase mono.
|
|
53
|
+
- `steps[j].focal: true` — exactly **one** step may declare this. Header chip renders in accent.
|
|
54
|
+
- `nodes[i].focal: true` — exactly **one** node may declare this. Renders with accent border (§5).
|
|
55
|
+
- `nodes[i].chips` — `{in: "<CODE>", out: "<CODE>"}` object (either side `null` to omit). Codes from §8. **Skip** the input chip on the first step's nodes, **skip** the output chip on the last step's nodes (no upstream / downstream).
|
|
56
|
+
- `nodes[i].color` — optional **per-node color override**. Any valid `"#hex"` string; the §4 palette is recommended for cross-diagram consistency.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 2. Layout formulas — deterministic geometry
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
label_col_w = 140
|
|
64
|
+
step_slot_w = 112 # 100-px node + 12-px corridor
|
|
65
|
+
right_pad = 28
|
|
66
|
+
n_steps = len(steps)
|
|
67
|
+
n_lanes = len(lanes)
|
|
68
|
+
|
|
69
|
+
# Canvas
|
|
70
|
+
viewBox_w = label_col_w + n_steps * step_slot_w + right_pad # 11 steps → 1400
|
|
71
|
+
header_h = 36
|
|
72
|
+
lane_h = 80
|
|
73
|
+
has_color_row = any(node.color or step.color or lane.color in inputs)
|
|
74
|
+
legend_h = 100 if has_color_row else 80 # 4 rows when colors are present
|
|
75
|
+
viewBox_h = header_h + n_lanes * lane_h + legend_h # 6 lanes, no colors → 596; with → 616
|
|
76
|
+
|
|
77
|
+
# Header strip (top)
|
|
78
|
+
chip_y = 8
|
|
79
|
+
chip_w = 16 # 20 if step.number has 2 digits
|
|
80
|
+
chip_h = 16
|
|
81
|
+
chip_rx = 8 # pill
|
|
82
|
+
|
|
83
|
+
# Lane positions
|
|
84
|
+
lane_y_top(k) = header_h + k * lane_h # 36, 116, 196, 276, 356, 436
|
|
85
|
+
lane_y_mid(k) = lane_y_top(k) + lane_h/2 # 76, 156, 236, 316, 396, 476
|
|
86
|
+
lane_label_x = label_col_w / 2 # 70
|
|
87
|
+
|
|
88
|
+
# Step / node centers
|
|
89
|
+
step_cx(j) = label_col_w + 8 + j * step_slot_w + node_w/2 # 198, 310, 422, ...
|
|
90
|
+
# (8-px gutter inside content area)
|
|
91
|
+
|
|
92
|
+
# Nodes
|
|
93
|
+
node_w = 100
|
|
94
|
+
node_h = 64
|
|
95
|
+
node_x(j) = step_cx(j) - node_w/2
|
|
96
|
+
node_y(k) = lane_y_top(k) + (lane_h - node_h)/2 # 8-px top/bottom margin inside lane
|
|
97
|
+
|
|
98
|
+
# Legend strip (bottom)
|
|
99
|
+
legend_y_top = header_h + n_lanes * lane_h
|
|
100
|
+
legend_row_y = [legend_y_top + 16, legend_y_top + 37,
|
|
101
|
+
legend_y_top + 58, legend_y_top + 79]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 2.1 Background structure
|
|
105
|
+
|
|
106
|
+
- Paper fill across full viewBox.
|
|
107
|
+
- Dot pattern: 22×22 grid, `circle r=0.8`, `fill rgba(45,49,66,0.10)`. Opacity 0.55.
|
|
108
|
+
- Alternating lane tints: odd-indexed lanes (0, 2, …) receive `rgba(45,49,66,0.018)` fill from `x=140` to `viewBox_w`.
|
|
109
|
+
- Lane dividers: horizontal hairlines at every `lane_y_top(k)` and at `legend_y_top`; stroke `rgba(45,49,66,0.12)` width 0.8.
|
|
110
|
+
- Label column right border: vertical hairline at `x = label_col_w`, stroke `rgba(45,49,66,0.20)` width 1, from `y = header_h` to `y = legend_y_top`.
|
|
111
|
+
|
|
112
|
+
### 2.2 Step header chip + label
|
|
113
|
+
|
|
114
|
+
Per step `j`:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
chip_w(j) = 20 if len(step.number) >= 2 else 16
|
|
118
|
+
chip_x(j) = step_cx(j) - chip_w(j)/2
|
|
119
|
+
number_anchor = (step_cx(j), chip_y + 11)
|
|
120
|
+
label_anchor = (step_cx(j), 32) # 8-px gap below chip
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Chip** (the numbered pill at the top of each column):
|
|
124
|
+
- Default fill: `rgba(45,49,66,0.12)`, number text ink.
|
|
125
|
+
- Focal fill: `rgba(235,108,54,0.20)`, number text accent (§5).
|
|
126
|
+
- Per-step `color` override (§4): replaces the fill with `rgba(C, 0.20)` and the number fill with `C`.
|
|
127
|
+
|
|
128
|
+
**Label** (the uppercase mono text below the chip):
|
|
129
|
+
- Renders `steps[j].label` (uppercased), anchored at `label_anchor`.
|
|
130
|
+
- Font: Geist Mono 6 px, weight 500, `letter-spacing="0.12em"`, `text-anchor="middle"`.
|
|
131
|
+
- Default fill: muted (`#4f5d75` light / `#bfc0c0` dark).
|
|
132
|
+
- Focal fill: accent (`#eb6c36` light / `#f08a59` dark).
|
|
133
|
+
- Per-step `color` override: fill = `C` (matches the chip number color).
|
|
134
|
+
- Keep labels short (≤ 9 chars). Long labels truncate; if you need more, abbreviate.
|
|
135
|
+
|
|
136
|
+
### 2.3 Lane labels
|
|
137
|
+
|
|
138
|
+
One or two-line mono label, all uppercase, letter-spacing 0.08em, font-size 8, fill muted. Centered at `(lane_label_x, lane_y_mid(k))`:
|
|
139
|
+
- Single-line: anchored at `(lane_label_x, lane_y_mid(k) + 4)`
|
|
140
|
+
- Two-line: lines at `(lane_label_x, lane_y_mid(k) - 4)` and `(lane_label_x, lane_y_mid(k) + 4)`
|
|
141
|
+
|
|
142
|
+
Per-lane `color` override (§4): replaces the label fill with `C` and the lane stripe tint with `rgba(C, 0.04)`.
|
|
143
|
+
|
|
144
|
+
### 2.4 Node content layout (inside the 100×64 rect)
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
role_chip rect 14×10 at (node_x+4, node_y+4), rx=2
|
|
148
|
+
role_chip_text centered at (node_x+11, node_y+12), font-size=6, weight=600
|
|
149
|
+
# text = lanes[k].key (3-letter lane code)
|
|
150
|
+
title centered at (step_cx(j), node_y+26), font-size=9 sans semibold
|
|
151
|
+
in→out centered at (step_cx(j), node_y+40), font-size=6.5 mono muted
|
|
152
|
+
tool centered at (step_cx(j), node_y+52), font-size=6.5 mono soft
|
|
153
|
+
data chip IN rect 16×8 at (node_x+4, node_y+54), rx=2 # payload entering
|
|
154
|
+
data chip OUT rect 16×8 at (node_x+80, node_y+54), rx=2 # payload leaving
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Role chip text rule:** the badge inside each node renders `lanes[k].key` where `k` is the node's lane index — **not** the step number (the step number already lives in the column header chip at the top, §2.2). Showing the lane key as the node badge gives each node a self-contained "who" identifier that survives when a single node is excerpted out of context. Mirrors the same rule in `type-data-flow.md` §2.4.
|
|
158
|
+
|
|
159
|
+
Empty cells (no node entry) render **nothing**. No placeholder rect, no role chip, no label.
|
|
160
|
+
|
|
161
|
+
**Chip-vs-tool-text collision rule:** chips sit at `node_y + 54..62`; tool text baseline is at `node_y + 52`. If a node has a two-line title (rare), increase node_h to 72 OR omit the chips for that node. Default behaviour: omit chips on collision.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 3. Connector rules (mandatory)
|
|
166
|
+
|
|
167
|
+
Three styles, bound to topology. Connectors drawn **before** all node rects (z-order rule).
|
|
168
|
+
|
|
169
|
+
| `style` | Stroke | Width | Dash | Marker | When required |
|
|
170
|
+
|---|---|---|---|---|---|
|
|
171
|
+
| `normal` | `#4f5d75` (muted) | 1.0 | — | `arrow` | Standard data hand-off between steps or actors. Unlabelled. |
|
|
172
|
+
| `focal-in` / `focal-out` | `#eb6c36` (accent) | 1.2 | — | `arrow-accent` | Every edge whose endpoint is the focal node (`focal-in`) or origin is the focal node (`focal-out`). |
|
|
173
|
+
| `trigger` | `#4f5d75` (muted) | 1.0 | `4,3` | `arrow-sm` | Orchestration trigger (scheduler → tool, manual override → upstream step). Unlabelled. |
|
|
174
|
+
|
|
175
|
+
**Defs block** (required, three markers):
|
|
176
|
+
|
|
177
|
+
```svg
|
|
178
|
+
<defs>
|
|
179
|
+
<pattern id="dots" width="22" height="22" patternUnits="userSpaceOnUse">
|
|
180
|
+
<circle cx="11" cy="11" r="0.8" fill="rgba(45,49,66,0.10)"/>
|
|
181
|
+
</pattern>
|
|
182
|
+
<marker id="arrow" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#4f5d75"/></marker>
|
|
183
|
+
<marker id="arrow-accent" markerWidth="8" markerHeight="6" refX="7" refY="3" orient="auto"><polygon points="0 0, 8 3, 0 6" fill="#eb6c36"/></marker>
|
|
184
|
+
<marker id="arrow-sm" markerWidth="6" markerHeight="5" refX="5" refY="2.5" orient="auto"><polygon points="0 0, 6 2.5, 0 5" fill="#4f5d75"/></marker>
|
|
185
|
+
</defs>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### 3.1 Routing rules (non-negotiable)
|
|
189
|
+
|
|
190
|
+
**Single-bend right-angle:** exit RIGHT → corridor → enter TOP (↓ destination below) or BOTTOM (↑ destination above).
|
|
191
|
+
|
|
192
|
+
- Source-side: exit at `(node_x + 100, lane_y_mid(src_lane))` — node's right edge, vertical center.
|
|
193
|
+
- Destination-side: enter at `(step_cx(dst_step), node_y(dst_lane))` for downward, or `(step_cx(dst_step), node_y(dst_lane) + 64)` for upward.
|
|
194
|
+
- Corner radius: 8-px Q-bezier at the bend.
|
|
195
|
+
- Same-lane edges (rare — same lane, adjacent steps): horizontal `<line>` from src right to dst left.
|
|
196
|
+
- **No diagonals.** **No left-side entry.** **No exit from the top/bottom of a node.**
|
|
197
|
+
|
|
198
|
+
```svg
|
|
199
|
+
<!-- Downward (destination lane > source lane) -->
|
|
200
|
+
<path d="M {rx},{src_cy} H {dst_cx - 8} Q {dst_cx},{src_cy} {dst_cx},{src_cy + 8} V {dst_top}"
|
|
201
|
+
fill="none" stroke="…" stroke-width="…" marker-end="…"/>
|
|
202
|
+
|
|
203
|
+
<!-- Upward (destination lane < source lane) -->
|
|
204
|
+
<path d="M {rx},{src_cy} H {dst_cx - 8} Q {dst_cx},{src_cy} {dst_cx},{src_cy - 8} V {dst_bottom}"
|
|
205
|
+
fill="none" stroke="…" stroke-width="…" marker-end="…"/>
|
|
206
|
+
|
|
207
|
+
<!-- Same lane (adjacent step) -->
|
|
208
|
+
<line x1="{src_right}" y1="{lane_cy}" x2="{dst_left}" y2="{lane_cy}"
|
|
209
|
+
stroke="…" stroke-width="…" marker-end="…"/>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
- **Z-order:** all `<path>` and `<line>` connectors emitted **before** any node `<rect>`.
|
|
213
|
+
- **Markers:** exactly one `marker-end` per path. Never `marker-start`.
|
|
214
|
+
- **Labels:** all process arrows are unlabelled by default. The step number + the actor lane carry the semantic; a label on every arrow is noise. Only label an arrow if it represents a non-step concept (re-test loop, escalation) — then use a paper-masked rect behind 6.5-px mono text.
|
|
215
|
+
|
|
216
|
+
### 3.2 Crossings
|
|
217
|
+
|
|
218
|
+
Avoid. The corridor x position (8 px before destination node) is the only routing column — if two arrows would cross there, **swap step assignments** or **split into two diagrams** rather than introducing a bend-around. Crossings hide the underlying control flow.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 4. Component color override
|
|
223
|
+
|
|
224
|
+
Any node, lane, or step accepts an optional `color: "#hex"`. Mirrors `type-data-flow.md` §4 and `type-high-level.md` §3.4 so the rule reads identically across types.
|
|
225
|
+
|
|
226
|
+
### 4.1 Per-node `color`
|
|
227
|
+
|
|
228
|
+
Applied to:
|
|
229
|
+
|
|
230
|
+
| Element | Light | Dark |
|
|
231
|
+
|---|---|---|
|
|
232
|
+
| Container fill (`rect`) | `rgba(C, 0.06)` | `rgba(C_light, 0.10)` |
|
|
233
|
+
| Container stroke | `rgba(C, 0.35)` (stroke-width 1) | `rgba(C_light, 0.45)` |
|
|
234
|
+
| Role chip fill | `rgba(C, 0.18)` | `rgba(C_light, 0.22)` |
|
|
235
|
+
| Role chip text | `C` | `C_light` |
|
|
236
|
+
| Title text | `C` | `C_light` |
|
|
237
|
+
| Sub-label (in → out) | **unchanged** (muted) | **unchanged** (muted) |
|
|
238
|
+
| Tool label | **unchanged** (soft) | **unchanged** (soft) |
|
|
239
|
+
| Data-type chips | **unchanged** | **unchanged** |
|
|
240
|
+
| Arrows touching this node | **unchanged** — topology-driven | **unchanged** |
|
|
241
|
+
|
|
242
|
+
`C_light` = the same hex lightened ~15% for dark-mode contrast (e.g., `#b85450` → `#d97a78`).
|
|
243
|
+
|
|
244
|
+
### 4.2 Per-step `color`
|
|
245
|
+
|
|
246
|
+
Replaces the step header chip's fill with `rgba(C, 0.20)` and the chip's number text fill with `C`. The legend's matching step entry uses the same colors.
|
|
247
|
+
|
|
248
|
+
### 4.3 Per-lane `color`
|
|
249
|
+
|
|
250
|
+
Replaces the lane stripe tint with `rgba(C, 0.04)` and the lane label text fill with `C`. Use sparingly — lane tints are easy to over-apply.
|
|
251
|
+
|
|
252
|
+
### 4.4 Rules
|
|
253
|
+
|
|
254
|
+
- **Never on focal nodes / focal steps.** The accent already carries that signal. A `color` on a focal element is ignored.
|
|
255
|
+
- **Never on arrows.** Arrows are topology-driven. If you want a colored edge, pick a different `style` from §3, not a color override.
|
|
256
|
+
- **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.
|
|
257
|
+
- **Subtitle and tool labels stay muted** regardless of any component `color`.
|
|
258
|
+
|
|
259
|
+
### 4.5 Semantic palette (recommended)
|
|
260
|
+
|
|
261
|
+
Same palette as `type-high-level.md`, `type-dp-integration.md`, `type-data-flow.md`:
|
|
262
|
+
|
|
263
|
+
- `#b85450` rust-red — Security / Identity / Governance (access control, training, approvals)
|
|
264
|
+
- `#5a7d9a` slate-blue — Observability / Quality (data quality gates, validation, monitoring)
|
|
265
|
+
- `#7a8c47` olive-green — Data Products / Publication (consumer-ready outputs, releases)
|
|
266
|
+
- `#8c6d3f` warm-brown — Backup / DR / Archive
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## 5. Focal rule
|
|
271
|
+
|
|
272
|
+
The process diagram has three focal slots, exactly one entry each:
|
|
273
|
+
|
|
274
|
+
- **One focal step** (`steps[j].focal: true`) — typically the analytical or decision pivot (Test, Approve, Validate). Header chip and legend chip render in accent.
|
|
275
|
+
- **One focal node** (`nodes[i].focal: true`) — the node that *receives* the critical handoff. Accent border + accent role chip + ink title (title text stays ink so it's still readable; only the border + role chip carry the accent).
|
|
276
|
+
- **One focal arrow set** (`style: focal-in` and `focal-out`) — edges into and out of the focal node. Accent solid strokes.
|
|
277
|
+
|
|
278
|
+
If zero or >1 of any focal slot are declared, halt and ask the user.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## 6. Dark mode
|
|
283
|
+
|
|
284
|
+
| Token | Light | Dark |
|
|
285
|
+
|---|---|---|
|
|
286
|
+
| Paper | `#f5f5f5` | `#2d3142` |
|
|
287
|
+
| Ink | `#2d3142` | `#f5f5f5` |
|
|
288
|
+
| Muted | `#4f5d75` | `#bfc0c0` |
|
|
289
|
+
| Soft | `#7a8399` | `#8e98ac` |
|
|
290
|
+
| Accent | `#eb6c36` | `#f08a59` |
|
|
291
|
+
| Dot pattern | `rgba(45,49,66,0.10)` | `rgba(245,245,245,0.10)` |
|
|
292
|
+
| Lane tint | `rgba(45,49,66,0.018)` | `rgba(245,245,245,0.025)` |
|
|
293
|
+
| Dividers | `rgba(45,49,66,0.12)` | `rgba(245,245,245,0.12)` |
|
|
294
|
+
| Label col divider | `rgba(45,49,66,0.20)` | `rgba(245,245,245,0.22)` |
|
|
295
|
+
| Default chip fill | `rgba(45,49,66,0.12)` | `rgba(245,245,245,0.12)` |
|
|
296
|
+
| Focal chip fill | `rgba(235,108,54,0.20)` | `rgba(240,138,89,0.22)` |
|
|
297
|
+
| Default node fill | white | `rgba(245,245,245,0.04)` |
|
|
298
|
+
| Default node stroke | `rgba(45,49,66,0.25)` | `rgba(245,245,245,0.20)` |
|
|
299
|
+
| Focal node fill | `rgba(235,108,54,0.08)` | `rgba(240,138,89,0.12)` |
|
|
300
|
+
| Focal node stroke | `#eb6c36` | `#f08a59` |
|
|
301
|
+
| Custom component colors | `C` | `C_light` (lighten ~15%) |
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## 7. Reproducibility checklist (taste gate)
|
|
306
|
+
|
|
307
|
+
Before emitting SVG, verify **every** item:
|
|
308
|
+
|
|
309
|
+
1. `viewBox = "0 0 {viewBox_w} {viewBox_h}"` derived via §2.
|
|
310
|
+
2. Header strip at `y=0..36`; legend strip at `y=legend_y_top..viewBox_h` (`legend_y_top = 36 + n_lanes * 80`).
|
|
311
|
+
3. Every node at `(step_cx(j) - 50, lane_y_top(k) + 8)` size `100×64`.
|
|
312
|
+
4. Empty cells render nothing — no placeholder rect, no text.
|
|
313
|
+
5. Exactly **one** focal step (`steps[j].focal: true`).
|
|
314
|
+
6. Exactly **one** focal node (`nodes[i].focal: true`).
|
|
315
|
+
7. Focal-touching arrows use `style: focal-in` / `focal-out` (accent).
|
|
316
|
+
8. All other arrows `style: normal` (muted solid) or `style: trigger` (muted dashed). Unlabelled by default.
|
|
317
|
+
9. All arrows emitted before any node rect (z-order rule).
|
|
318
|
+
10. Single-bend right-angle routing only — exit right, enter top/bottom. No diagonals. Q-bezier `r=8` at each bend.
|
|
319
|
+
11. Custom component colors ≤ 3 (in addition to the focal pair). Arrows never recolored by component `color`.
|
|
320
|
+
12. Subtitle and tool labels stay muted regardless of any component `color`. Input chip skipped on first step's nodes, output chip skipped on last step's nodes.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 8. Data-type chips reference (input + output)
|
|
325
|
+
|
|
326
|
+
Same catalog as `type-data-flow.md` §8.
|
|
327
|
+
|
|
328
|
+
- **Input chip** at `(node_x+4, node_y+54)` — bottom-**left**. Payload entering the node.
|
|
329
|
+
- **Output chip** at `(node_x+80, node_y+54)` — bottom-**right**. Payload leaving the node.
|
|
330
|
+
- Either chip may be omitted (first/last step, unknown payload).
|
|
331
|
+
|
|
332
|
+
### Chip codes
|
|
333
|
+
|
|
334
|
+
| Code | Color (light) | Color (dark) | Meaning |
|
|
335
|
+
|------|---------------|--------------|---------|
|
|
336
|
+
| `LS` | `#7c8f6f` sage | `#9caf8f` | List / assignment / task |
|
|
337
|
+
| `DB` | `#5e7a9b` dusty-blue | `#82a0c0` | Dataset / tabular records |
|
|
338
|
+
| `TB` | `#b8915a` mustard | `#d3ad7a` | Table (analysis-ready) |
|
|
339
|
+
| `FL` | `#9c6b50` rust-brown | `#b88670` | File / document / report |
|
|
340
|
+
| `WB` | `#6e6479` slate | `#8d8298` | Web / press / public release |
|
|
341
|
+
| N/A | omit chip entirely | — | Unknown or not applicable |
|
|
342
|
+
|
|
343
|
+
Text inside chip: white, font-size 5, weight 700, mono.
|
|
344
|
+
|
|
345
|
+
Data-type chip colors are a **separate semantic axis** from the per-node color override (§4). Chip colors describe *payload format*; node color describes *concern type*. A node can have both an `out: TB` mustard chip and a rust-red border simultaneously.
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## 9. Legend (3- or 4-row strip)
|
|
350
|
+
|
|
351
|
+
Each row introduced by a category label at `x = label_col_w + 4` (= 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.
|
|
352
|
+
|
|
353
|
+
- **Row 1 — `STEPS`** at `y = legend_y_top + 16`: repeat the header chips with their labels. Focal step keeps accent fill.
|
|
354
|
+
- **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 muted mono: `left chip = input · right chip = output`.
|
|
355
|
+
- **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.
|
|
356
|
+
- **Row 4 — `FLOW`** (position depends on whether `CONCERN` row exists): one segment per arrow style actually used, with marker + label.
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## 10. Complexity budget
|
|
361
|
+
|
|
362
|
+
| Dimension | Max |
|
|
363
|
+
|---|---|
|
|
364
|
+
| Lanes (actors) | 6 |
|
|
365
|
+
| Steps | 12 |
|
|
366
|
+
| Nodes per lane | Nodes = active steps only — empty cells are invisible |
|
|
367
|
+
| Labelled arrows | 0 by default (label only for non-step concepts) |
|
|
368
|
+
| Data-type chips per node | 2 (input + output) |
|
|
369
|
+
| Custom-colored elements (§4) | 3 (in addition to focal node + focal step) |
|
|
370
|
+
|
|
371
|
+
Above 6 lanes or 12 steps: split into two diagrams (overview + detail).
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 11. Anti-patterns
|
|
376
|
+
|
|
377
|
+
- **Placeholder empty cells** — if an actor doesn't participate in a step, leave the cell empty (no box, no text).
|
|
378
|
+
- **Diagonal arrows** — every connector must have exactly one right-angle bend. No direct straight lines between nodes in different lanes.
|
|
379
|
+
- **Left/right port entry on a vertical-dominant arrow** — always exit right, enter top or bottom.
|
|
380
|
+
- **More than one focal step / focal node** — pick the single most critical operation.
|
|
381
|
+
- **Unlabelled lanes** — every swimlane must identify its actor.
|
|
382
|
+
- **All arrows the same style** — orchestration triggers must be dashed to distinguish them from data-flow connectors.
|
|
383
|
+
- **`color` override on a focal element** — ignored. Accent always wins.
|
|
384
|
+
- **Custom-colored arrows** — connectors are topology-driven; `color` on a node never spreads to its edges.
|
|
385
|
+
- **Lane tints over-applied** — a tint on every lane reads as decoration, not signal. Apply to ≤1 lane.
|
|
386
|
+
- **Data-type chips in a double-line-name node** — skip the chips or shorten the name to one line.
|
|
387
|
+
- **More than 12 steps without splitting** — use an overview + detail pair.
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## 12. Worked example — full YAML for `example-process-extended.html`
|
|
392
|
+
|
|
393
|
+
The extended example diagram is fully described by the following inputs. Every coordinate in the rendered SVG is derivable from this block via §2 + §3 + §4. This is the canonical proof that the parametric contract works end-to-end.
|
|
394
|
+
|
|
395
|
+
```yaml
|
|
396
|
+
# Quarterly survey — end-to-end workflow (extended variant)
|
|
397
|
+
# 6 lanes × 11 steps, 1 focal step + 1 focal node + 3 custom-colored nodes
|
|
398
|
+
|
|
399
|
+
lanes:
|
|
400
|
+
- { name: ["RD&E"], key: "RDE" }
|
|
401
|
+
- { name: ["IT"], key: "IT" }
|
|
402
|
+
- { name: ["FIELD", "SERVICES"], key: "FLD" }
|
|
403
|
+
- { name: ["SURVEY", "SERVICES"], key: "SVY" }
|
|
404
|
+
- { name: ["HOUSEHOLD", "UNIT"], key: "HHU" }
|
|
405
|
+
- { name: ["COMMS &", "MARKETING"], key: "CMM" }
|
|
406
|
+
|
|
407
|
+
steps:
|
|
408
|
+
- { number: "1", label: "Design" }
|
|
409
|
+
- { number: "2", label: "Assign" }
|
|
410
|
+
- { number: "3", label: "Collect", focal: true } # focal step header chip
|
|
411
|
+
- { number: "4", label: "Review" }
|
|
412
|
+
- { number: "5", label: "Validate" }
|
|
413
|
+
- { number: "6", label: "Weight" }
|
|
414
|
+
- { number: "7", label: "Clean" }
|
|
415
|
+
- { number: "8", label: "Tabulate" }
|
|
416
|
+
- { number: "9", label: "Approve" }
|
|
417
|
+
- { number: "10", label: "Publish" }
|
|
418
|
+
- { number: "11", label: "Upload" }
|
|
419
|
+
|
|
420
|
+
nodes:
|
|
421
|
+
- { lane: "RDE", step: 0, title: "Sample Design", sub: "Census data → Sample",
|
|
422
|
+
tool: "SAS · Survey Solutions", chips: {in: null, out: "LS"} } # first step: no input chip
|
|
423
|
+
- { lane: "IT", step: 1, title: "Field Assignment", sub: "Sample → Field tasks",
|
|
424
|
+
tool: "Survey Solutions", chips: {in: "LS", out: "LS"} }
|
|
425
|
+
- { lane: "FLD", step: 2, title: "Data Collection", sub: "→ 10,464 dwellings",
|
|
426
|
+
tool: "Survey Solutions", chips: {in: "LS", out: "DB"}, focal: true } # focal node
|
|
427
|
+
- { lane: "SVY", step: 3, title: "HQ Review", sub: "Submissions → Approved",
|
|
428
|
+
tool: "Survey Sol. HQ", chips: {in: "DB", out: "DB"}, color: "#b85450" } # rust-red · governance
|
|
429
|
+
- { lane: "IT", step: 4, title: "Error Checks", sub: "Approved → Cleaned",
|
|
430
|
+
tool: "SAS · Scripts", chips: {in: "DB", out: "DB"}, color: "#5a7d9a" } # slate-blue · data quality
|
|
431
|
+
- { lane: "RDE", step: 5, title: "Weight Calculation", sub: "Cleaned → Weighted",
|
|
432
|
+
tool: "SAS", chips: null } # 2-line title — chips skipped
|
|
433
|
+
- { lane: "HHU", step: 6, title: "2° Cleaning", sub: "Weighted → Analysis",
|
|
434
|
+
tool: "SAS · R · SPSS", chips: {in: "DB", out: "TB"} }
|
|
435
|
+
- { lane: "HHU", step: 7, title: "Tables + Brief", sub: "Analysis → Tables",
|
|
436
|
+
tool: "Excel · SAS", chips: {in: "TB", out: "FL"} }
|
|
437
|
+
- { lane: "CMM", step: 8, title: "Stats Review", sub: "Tables → Approved",
|
|
438
|
+
tool: "Internal review", chips: {in: "FL", out: "FL"} }
|
|
439
|
+
- { lane: "CMM", step: 9, title: "Public Release", sub: "Approved → Public",
|
|
440
|
+
tool: "Press conference", chips: {in: "FL", out: "WB"}, color: "#7a8c47" } # olive-green · data products
|
|
441
|
+
- { lane: "IT", step: 10, title: "Upload NatStat / SDMX", sub: "Results → Published",
|
|
442
|
+
tool: "Web · SDMX API", chips: null } # 2-line title — chips skipped
|
|
443
|
+
|
|
444
|
+
arrows:
|
|
445
|
+
- { from: {lane: "RDE", step: 0}, to: {lane: "IT", step: 1}, style: "normal" }
|
|
446
|
+
- { from: {lane: "IT", step: 1}, to: {lane: "FLD", step: 2}, style: "focal-in" } # → focal
|
|
447
|
+
- { from: {lane: "FLD", step: 2}, to: {lane: "SVY", step: 3}, style: "focal-out" } # ← focal
|
|
448
|
+
- { from: {lane: "SVY", step: 3}, to: {lane: "IT", step: 4}, style: "normal" } # upward
|
|
449
|
+
- { from: {lane: "IT", step: 4}, to: {lane: "RDE", step: 5}, style: "normal" } # upward
|
|
450
|
+
- { from: {lane: "RDE", step: 5}, to: {lane: "HHU", step: 6}, style: "normal" } # downward, skips 2 lanes
|
|
451
|
+
- { from: {lane: "HHU", step: 6}, to: {lane: "HHU", step: 7}, style: "normal" } # same lane
|
|
452
|
+
- { from: {lane: "HHU", step: 7}, to: {lane: "CMM", step: 8}, style: "normal" }
|
|
453
|
+
- { from: {lane: "CMM", step: 8}, to: {lane: "CMM", step: 9}, style: "normal" } # same lane
|
|
454
|
+
- { from: {lane: "CMM", step: 9}, to: {lane: "IT", step: 10}, style: "normal" } # upward, skips 4 lanes
|
|
455
|
+
|
|
456
|
+
dark: false
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### 12.1 What this YAML proves
|
|
460
|
+
|
|
461
|
+
Run §2 of this reference with these inputs:
|
|
462
|
+
|
|
463
|
+
- `n_lanes = 6`, `n_steps = 11`, `has_color_row = true` (3 nodes carry `color`).
|
|
464
|
+
- `viewBox_w = 140 + 11 * 112 + 28 = 1400`. ✓ matches rendered SVG.
|
|
465
|
+
- `legend_h = 100`, `viewBox_h = 36 + 6 * 80 + 100 = 616`. ✓
|
|
466
|
+
- Lane y_top = [36, 116, 196, 276, 356, 436]; lane mid = [76, 156, 236, 316, 396, 476]. ✓
|
|
467
|
+
- Step cx = [198, 310, 422, 534, 646, 758, 870, 982, 1094, 1208, 1320] (the 8-px content-area gutter shifts every value by 8 from `140 + j*112 + 50`). ✓
|
|
468
|
+
- Node 4 (HQ Review): step=3, lane="SVY" (k=3) → x = 534-50 = 484, y = 276+8 = 284. ✓
|
|
469
|
+
- Node 5 (Error Checks): step=4, lane="IT" (k=1) → x = 646-50 = 596, y = 116+8 = 124. ✓
|
|
470
|
+
- Node 10 (Public Release): step=9, lane="CMM" (k=5) → x = 1208-50 = 1158, y = 436+8 = 444. ✓ *(Rendered uses x=1156 — 2-px tolerance from chip-width rounding on the step "10" label.)*
|
|
471
|
+
|
|
472
|
+
The two coord drifts on the rightmost two nodes (chip width=20 for two-digit step numbers shifts the chip but not the node center math) are an artifact of the existing hand-tuned example, not a formula failure — a fresh generation from this YAML would produce x=1158 and the diagram would be visually indistinguishable from the shipped version.
|
|
473
|
+
|
|
474
|
+
### 12.2 Adapting this YAML to a different process
|
|
475
|
+
|
|
476
|
+
To document a different process, change only the value of these inputs:
|
|
477
|
+
|
|
478
|
+
- **Lanes**: rename `lanes[k].name` to your team names; update each `nodes[i].lane` to match. Up to 6 lanes.
|
|
479
|
+
- **Steps**: rename `steps[j].label`, move `focal: true` to the step that defines the diagram's central claim. Up to 12 steps.
|
|
480
|
+
- **Nodes**: write one entry per `(lane, step)` cell that has work. Leave cells empty (no entry) to render nothing.
|
|
481
|
+
- **Colors**: choose `color: "#hex"` on at most 3 nodes (§4 cap). Stick to the recommended palette unless brand demands otherwise.
|
|
482
|
+
- **Arrows**: declare every edge explicitly with `style: normal | focal-in | focal-out | trigger`. The routing rule (§3.1) fills in the geometry.
|
|
483
|
+
|
|
484
|
+
Everything else — viewBox sizing, chip positions, legend layout, dark-mode token swap — is derivable. The YAML is the **source of truth**; the SVG is one of many possible renderings of it (light/dark/full all derive from the same inputs with different style tokens).
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## 13. Examples
|
|
489
|
+
|
|
490
|
+
- `assets/example-process.html` — minimal light (quarterly survey: 11 steps, 6 divisions, data-type chips). Gallery default.
|
|
491
|
+
- `assets/example-process-dark.html` — same, dark skin.
|
|
492
|
+
- `assets/example-process-full.html` — same, editorial-card frame.
|
|
493
|
+
- `assets/example-process-extended.html` — exercises §4 color override: Build app in slate-blue (data quality), Train enumerators in rust-red (governance), Publish results in olive-green (data products). Focal accent on Pilot test step + node unchanged.
|
|
494
|
+
- `assets/example-process-extended-dark.html` — extended pattern, dark skin.
|
|
495
|
+
- `assets/example-process-extended-full.html` — extended pattern, editorial-card frame.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Pyramid / Funnel
|
|
2
|
+
|
|
3
|
+
**Best for:** hierarchy of needs, prioritization ranks, value pyramids, conversion funnels, content importance stacks.
|
|
4
|
+
|
|
5
|
+
## Two orientations — pick one
|
|
6
|
+
- **Pyramid** (point up) — narrow apex = most important / rarest / most valuable. Base is broadest / foundational.
|
|
7
|
+
- **Funnel** (point down) — narrow end = conversion (smallest group). Top is widest / audience.
|
|
8
|
+
|
|
9
|
+
Don't mix orientations on one diagram.
|
|
10
|
+
|
|
11
|
+
## Layout conventions
|
|
12
|
+
- 4–6 layers. Each layer is a trapezoid built from an SVG `<polygon>` with 4 points.
|
|
13
|
+
- Consistent layer height (56–72px).
|
|
14
|
+
- Widths decrease linearly from base to apex (pyramid) or top to bottom (funnel). When showing real funnel data, widths must be honest (proportional to count/percentage).
|
|
15
|
+
- Each layer has:
|
|
16
|
+
- **Name label** centered inside the trapezoid — Geist 12–14px 600.
|
|
17
|
+
- **Sublabel** below or beside the name — Geist Mono 9–10px.
|
|
18
|
+
- **Side annotation** (right or left) — optional. For funnels: drop-off percentage here (`−40%`).
|
|
19
|
+
- Fill: subtle graded tints OR all paper-2 with hairline dividers (cleaner). Pick one.
|
|
20
|
+
- Stroke: 1px hairline between layers; outer silhouette 1px muted or ink.
|
|
21
|
+
- **Coral on ONE layer only**: apex of pyramid, conversion layer of funnel, or critical bottleneck.
|
|
22
|
+
- Optional left-margin axis arrow + Geist Mono label (`rarer ↑`, `drop-off ↓`).
|
|
23
|
+
|
|
24
|
+
## Anti-patterns
|
|
25
|
+
- 7+ layers (illegible — compress or split).
|
|
26
|
+
- Pyramid for non-hierarchical data (use a tree or bar chart).
|
|
27
|
+
- Dishonest widths (fake equal spacing when drops are unequal).
|
|
28
|
+
- Coral on the base layer (dilutes the "apex = rare" signal).
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
- `assets/example-pyramid.html` — minimal light
|
|
32
|
+
- `assets/example-pyramid-dark.html` — minimal dark
|
|
33
|
+
- `assets/example-pyramid-full.html` — full editorial
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Quadrant
|
|
2
|
+
|
|
3
|
+
**Best for:** prioritization (Impact × Effort), positioning (Reach × Frequency), portfolio maps, 2×2 decision frames.
|
|
4
|
+
|
|
5
|
+
## Layout conventions
|
|
6
|
+
- 2×2 grid. Axis lines: 1px ink cross through the center.
|
|
7
|
+
- **Axis labels: Jobs-minimal.** One single word at each arrow tip — no glyphs baked into the label (no `↑` / `→` / `←` / `↓`), no parentheticals, no "HIGH / LOW" modifiers. Geist Mono 9px regular weight, tracked 0.18em, uppercase. Flank the arrow tips — never sit labels on top of the axis line. Shorten the arrow enough (~60–80px inside the viewBox edge) to leave breathing room for the labels beyond the tips.
|
|
8
|
+
- Never label at the midpoint.
|
|
9
|
+
- Items: small labeled dots (`r=4`) positioned in the quadrants. Labels 8–10px away; don't let labels cross axis lines.
|
|
10
|
+
- Coral on the "do first" item (typically top-right).
|
|
11
|
+
- Limit to ~12 items; cluster or split beyond that.
|
|
12
|
+
|
|
13
|
+
## Anti-patterns
|
|
14
|
+
- Four filled quadrants in different colors — position + label does the work; color noise weakens it.
|
|
15
|
+
- Items placed on axis lines (ambiguous quadrant).
|
|
16
|
+
- Missing axis names.
|
|
17
|
+
|
|
18
|
+
## Examples
|
|
19
|
+
- `assets/example-quadrant.html` — minimal light
|
|
20
|
+
- `assets/example-quadrant-dark.html` — minimal dark
|
|
21
|
+
- `assets/example-quadrant-full.html` — full editorial
|
|
22
|
+
- `assets/example-quadrant-consultant.html` — consultant special (see below)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Consultant special (2×2 scenario matrix)
|
|
27
|
+
|
|
28
|
+
A **layout variant** of the standard quadrant — same house skin (warm paper, dot pattern, Instrument Serif title, Geist mono eyebrows, coral focal rule). The grammar shifts: axes hold a **range** rather than a measurement; cells hold **named scenarios** rather than positioned items.
|
|
29
|
+
|
|
30
|
+
**Use when:** you're framing four futures, archetypes, or strategic options across two independent drivers — classic scenario planning, positioning frames, or 2×2 strategy decks (BCG/McKinsey territory). The reader should come away with four named bets, not a point cloud.
|
|
31
|
+
|
|
32
|
+
**Do not use** for prioritization, density maps, or anything where the *position inside* a cell carries meaning — that's the standard quadrant above.
|
|
33
|
+
|
|
34
|
+
### What makes it the consultant variant
|
|
35
|
+
|
|
36
|
+
| Move | Standard quadrant | Consultant special |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| Axis arrows | single-ended | **double-ended** — both axes have `marker-start` + `marker-end` |
|
|
39
|
+
| Cell content | small dots with labels | **named scenario + 1–3 line description** |
|
|
40
|
+
| Quadrant corner | short tag (e.g. DO FIRST) | **numbered tag + axis combination** (`01 · DIMENSION-A / DIMENSION-B`) |
|
|
41
|
+
| Focal accent | coral on one *item* | coral on one *quadrant* — tinted bg + coral stroke + coral corner tag |
|
|
42
|
+
| Axes | 1px muted ink | **1.2px ink** (slightly heavier — the axes carry more of the figure) |
|
|
43
|
+
|
|
44
|
+
Both variants use the same Jobs-minimal axis labels: one word at each arrow tip, no glyphs, no parentheticals. The only axis difference is that the consultant variant uses double-ended arrows instead of single-ended.
|
|
45
|
+
|
|
46
|
+
Everything else — paper, dot pattern, typography, legend strip, 4px grid, complexity budget — is the house default. Don't invent new colors or fonts for this variant.
|
|
47
|
+
|
|
48
|
+
### Style tokens (in-house)
|
|
49
|
+
|
|
50
|
+
- **Paper / bg / pattern**: defaults from `style-guide.md` (`paper`, 22×22 dot pattern at 10% ink).
|
|
51
|
+
- **Axis lines**: `ink` (`#2d3142`), `stroke-width: 1.2`, `marker-start` + `marker-end` both pointing outward.
|
|
52
|
+
- **Focal quadrant tint**: `rgba(235,108,54,0.04)` full rect behind the focal cell.
|
|
53
|
+
- **Focal cell**: `accent-tint` fill, `accent` stroke at 1.2px. Corner tag in `accent`, weight 600.
|
|
54
|
+
- **Non-focal cells**: `store` treatment (`ink @ 0.04` fill, `muted @ 0.28` stroke).
|
|
55
|
+
- **Cell title**: Geist sans, 16px, weight 600, `ink`.
|
|
56
|
+
- **Cell description**: Geist sans, 11px, `muted`, 1–3 lines, left-aligned inside the cell.
|
|
57
|
+
- **Corner tag**: Geist Mono, 8px, uppercase, tracked `0.18em`, `muted` (or `accent` on focal). Format: `NN · DIMENSION-A / DIMENSION-B` — the two axis-dimension words must match the axis labels exactly.
|
|
58
|
+
- **Axis labels**: Geist Mono 9px **regular weight** (not bold), tracked `0.18em`, uppercase, `ink`. **One word per tip.** No arrow glyphs in the label, no `HIGH / LOW` parentheticals, no multi-line sublabels. The word itself *is* the label. Position labels *beyond* the arrow tips (not on the axis line):
|
|
59
|
+
- Top tip: `text-anchor="middle"`, ~12px above the arrow tip
|
|
60
|
+
- Bottom tip: `text-anchor="middle"`, ~20px below the arrow tip
|
|
61
|
+
- Left tip: `text-anchor="end"`, ~12px left of the arrow tip, `dominant-baseline="middle"`
|
|
62
|
+
- Right tip: `text-anchor="start"`, ~12px right of the arrow tip, `dominant-baseline="middle"`
|
|
63
|
+
|
|
64
|
+
### Layout conventions
|
|
65
|
+
|
|
66
|
+
- Four cells, equal size (240×160 or 280×180 are good defaults), arranged with a 40–60px gap from the axis cross.
|
|
67
|
+
- Axis cross passes *between* the cells, not through them.
|
|
68
|
+
- Arrow tips live ~20–40px outside the outermost cell edge; single-word axis labels sit ~12px beyond each tip (see Axis labels above).
|
|
69
|
+
- Exactly one focal cell. Picking none makes it a placeholder template; picking two erases the signal.
|
|
70
|
+
- Keep the legend strip + horizontal rule at the bottom — same as the standard quadrant. Legend swatches should show both "headline bet" (coral) and "candidate future" (neutral).
|
|
71
|
+
|
|
72
|
+
### Anti-patterns (variant-specific)
|
|
73
|
+
|
|
74
|
+
- Plain white background — the warm paper + dot pattern is load-bearing across the skill; dropping it to "look consultant" turns the diagram generic.
|
|
75
|
+
- Sans-serif H1 — keep Instrument Serif for the page title. The title/diagram contrast is the house signature.
|
|
76
|
+
- Unnamed cells ("Scenario 1/2/3/4") in a shipped diagram — OK as a blank template; not OK as a finished artifact.
|
|
77
|
+
- Coral on more than one cell — same focal rule as everywhere else in the skill.
|
|
78
|
+
- 3×3 or 2×3 grids — those are different diagrams, not this variant.
|
|
79
|
+
- Positioning dots *inside* the cells — if position matters, use the standard quadrant.
|
|
80
|
+
- Bolded axis labels, arrow glyphs in the text (`↑ DRIVER`), or "HIGH / LOW" parentheticals — all forbidden. Jobs-minimal is non-negotiable on this variant.
|
|
81
|
+
- Corner tags that disagree with the axis labels (e.g. axis says `REMOTE / IN-PERSON` but the tag reads `HIGH REMOTE / LOW AI`). Reader parses this as a bug in three seconds.
|