mindforge-cc 11.8.2 → 11.9.0
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/.agent/mindforge/wf-orchestrate-review.md +35 -0
- package/.agent/mindforge/wf-verification-loop.md +45 -0
- package/.agent/mindforge/wf-workflow-optimizer.md +51 -0
- package/.agent/skills/article-illustrator/SKILL.md +7 -7
- package/.agent/skills/arxiv/SKILL.md +6 -6
- package/.agent/skills/code-wiki/SKILL.md +11 -11
- package/.agent/skills/concept-diagrams/SKILL.md +6 -6
- package/.agent/skills/concept-diagrams/examples/apartment-floor-plan-conversion.md +244 -0
- package/.agent/skills/concept-diagrams/examples/automated-password-reset-flow.md +276 -0
- package/.agent/skills/concept-diagrams/examples/autonomous-llm-research-agent-flow.md +240 -0
- package/.agent/skills/concept-diagrams/examples/banana-journey-tree-to-smoothie.md +161 -0
- package/.agent/skills/concept-diagrams/examples/commercial-aircraft-structure.md +209 -0
- package/.agent/skills/concept-diagrams/examples/cpu-ooo-microarchitecture.md +236 -0
- package/.agent/skills/concept-diagrams/examples/electricity-grid-flow.md +182 -0
- package/.agent/skills/concept-diagrams/examples/feature-film-production-pipeline.md +172 -0
- package/.agent/skills/concept-diagrams/examples/hospital-emergency-department-flow.md +165 -0
- package/.agent/skills/concept-diagrams/examples/ml-benchmark-grouped-bar-chart.md +114 -0
- package/.agent/skills/concept-diagrams/examples/place-order-uml-sequence.md +325 -0
- package/.agent/skills/concept-diagrams/examples/smart-city-infrastructure.md +173 -0
- package/.agent/skills/concept-diagrams/examples/smartphone-layer-anatomy.md +154 -0
- package/.agent/skills/concept-diagrams/examples/sn2-reaction-mechanism.md +247 -0
- package/.agent/skills/concept-diagrams/examples/wind-turbine-structure.md +338 -0
- package/.agent/skills/concept-diagrams/templates/template.html +174 -0
- package/.agent/skills/domain-intel/SKILL.md +7 -7
- package/.agent/skills/duckduckgo-search/SKILL.md +17 -17
- package/.agent/skills/github-auth/scripts/gh-env.sh +66 -0
- package/.agent/skills/github-code-review/SKILL.md +9 -9
- package/.agent/skills/github-pr-workflow/SKILL.md +3 -3
- package/.agent/skills/godmode/SKILL.md +8 -8
- package/.agent/skills/jupyter-live-kernel/SKILL.md +3 -3
- package/.agent/skills/kanban-orchestrator/SKILL.md +10 -10
- package/.agent/skills/kanban-worker/SKILL.md +6 -6
- package/.agent/skills/llm-wiki/SKILL.md +7 -7
- package/.agent/skills/mindforge-autonomous/SKILL.md +1 -1
- package/.agent/skills/mindforge-complete-milestone/SKILL.md +1 -1
- package/.agent/skills/mindforge-discuss-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-do/SKILL.md +1 -1
- package/.agent/skills/mindforge-execute-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-list-workspaces/SKILL.md +1 -1
- package/.agent/skills/mindforge-manager/SKILL.md +1 -1
- package/.agent/skills/mindforge-neural-orchestrator/SKILL.md +1 -1
- package/.agent/skills/mindforge-new-milestone/SKILL.md +4 -4
- package/.agent/skills/mindforge-new-project/SKILL.md +4 -4
- package/.agent/skills/mindforge-new-workspace/SKILL.md +1 -1
- package/.agent/skills/mindforge-note/SKILL.md +1 -1
- package/.agent/skills/mindforge-plan-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-profile-user/SKILL.md +1 -1
- package/.agent/skills/mindforge-remove-workspace/SKILL.md +1 -1
- package/.agent/skills/mindforge-research-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-ui-phase/SKILL.md +1 -1
- package/.agent/skills/mindforge-ui-review/SKILL.md +1 -1
- package/.agent/skills/mindforge-verify-work/SKILL.md +1 -1
- package/.agent/skills/mindforge-workspace-isolated/SKILL.md +1 -1
- package/.agent/skills/node-inspect-debugger/SKILL.md +1 -1
- package/.agent/skills/obsidian/SKILL.md +15 -15
- package/.agent/skills/osint-investigation/SKILL.md +3 -2
- package/.agent/skills/osint-investigation/references/sources/courtlistener.md +98 -0
- package/.agent/skills/osint-investigation/references/sources/gdelt.md +104 -0
- package/.agent/skills/osint-investigation/references/sources/icij-offshore.md +104 -0
- package/.agent/skills/osint-investigation/references/sources/nyc-acris.md +90 -0
- package/.agent/skills/osint-investigation/references/sources/ofac-sdn.md +92 -0
- package/.agent/skills/osint-investigation/references/sources/opencorporates.md +103 -0
- package/.agent/skills/osint-investigation/references/sources/sec-edgar.md +83 -0
- package/.agent/skills/osint-investigation/references/sources/senate-ld.md +89 -0
- package/.agent/skills/osint-investigation/references/sources/usaspending.md +97 -0
- package/.agent/skills/osint-investigation/references/sources/wayback.md +93 -0
- package/.agent/skills/osint-investigation/references/sources/wikipedia.md +107 -0
- package/.agent/skills/osint-investigation/scripts/_http.py +82 -0
- package/.agent/skills/osint-investigation/scripts/_normalize.py +67 -0
- package/.agent/skills/osint-investigation/scripts/build_findings.py +221 -0
- package/.agent/skills/osint-investigation/scripts/entity_resolution.py +228 -0
- package/.agent/skills/osint-investigation/scripts/fetch_courtlistener.py +149 -0
- package/.agent/skills/osint-investigation/scripts/fetch_gdelt.py +161 -0
- package/.agent/skills/osint-investigation/scripts/fetch_icij_offshore.py +234 -0
- package/.agent/skills/osint-investigation/scripts/fetch_nyc_acris.py +203 -0
- package/.agent/skills/osint-investigation/scripts/fetch_ofac_sdn.py +175 -0
- package/.agent/skills/osint-investigation/scripts/fetch_opencorporates.py +191 -0
- package/.agent/skills/osint-investigation/scripts/fetch_sec_edgar.py +184 -0
- package/.agent/skills/osint-investigation/scripts/fetch_senate_ld.py +146 -0
- package/.agent/skills/osint-investigation/scripts/fetch_usaspending.py +170 -0
- package/.agent/skills/osint-investigation/scripts/fetch_wayback.py +142 -0
- package/.agent/skills/osint-investigation/scripts/fetch_wikipedia.py +266 -0
- package/.agent/skills/osint-investigation/scripts/timing_analysis.py +252 -0
- package/.agent/skills/oss-forensics/SKILL.md +10 -9
- package/.agent/skills/oss-forensics/scripts/evidence-store.py +313 -0
- package/.agent/skills/parallel-cli/SKILL.md +2 -2
- package/.agent/skills/pinggy-tunnel/SKILL.md +3 -3
- package/.agent/skills/pixel-art/SKILL.md +2 -2
- package/.agent/skills/plan/SKILL.md +10 -10
- package/.agent/skills/requesting-code-review/SKILL.md +4 -6
- package/.agent/skills/research-paper-writing/SKILL.md +32 -32
- package/.agent/skills/rest-graphql-debug/SKILL.md +31 -32
- package/.agent/skills/s6-container-supervision/SKILL.md +1 -1
- package/.agent/skills/scrapling/SKILL.md +1 -1
- package/.agent/skills/sherlock/SKILL.md +1 -1
- package/.agent/skills/simplify-code/SKILL.md +5 -7
- package/.agent/skills/skill-authoring/SKILL.md +4 -4
- package/.agent/skills/spike/SKILL.md +11 -13
- package/.agent/skills/subagent-driven-development/SKILL.md +7 -11
- package/.agent/skills/systematic-debugging/SKILL.md +13 -14
- package/.agent/skills/test-driven-development/SKILL.md +6 -7
- package/.agent/skills/video-orchestrator/SKILL.md +1 -1
- package/.agent/skills/web-pentest/SKILL.md +7 -7
- package/.mindforge/config.json +3 -2
- package/.mindforge/dynamic-workflows/REGISTRY.md +4 -1
- package/.mindforge/dynamic-workflows/index.json +910 -840
- package/.mindforge/dynamic-workflows/scripts/accessibility-audit.js +88 -90
- package/.mindforge/dynamic-workflows/scripts/ai-model-eval.js +59 -61
- package/.mindforge/dynamic-workflows/scripts/api-contract-test.js +87 -85
- package/.mindforge/dynamic-workflows/scripts/api-migration.js +120 -122
- package/.mindforge/dynamic-workflows/scripts/architecture-modernization.js +84 -86
- package/.mindforge/dynamic-workflows/scripts/code-audit.js +75 -77
- package/.mindforge/dynamic-workflows/scripts/code-explainer.js +99 -101
- package/.mindforge/dynamic-workflows/scripts/competitive-analysis.js +62 -64
- package/.mindforge/dynamic-workflows/scripts/competitive-teardown.js +106 -108
- package/.mindforge/dynamic-workflows/scripts/cost-analysis.js +78 -80
- package/.mindforge/dynamic-workflows/scripts/data-pipeline-validate.js +47 -49
- package/.mindforge/dynamic-workflows/scripts/database-migration.js +85 -87
- package/.mindforge/dynamic-workflows/scripts/debug-detective.js +97 -99
- package/.mindforge/dynamic-workflows/scripts/dependency-health.js +81 -83
- package/.mindforge/dynamic-workflows/scripts/design-system-audit.js +84 -86
- package/.mindforge/dynamic-workflows/scripts/documentation-gen.js +65 -67
- package/.mindforge/dynamic-workflows/scripts/feature-planner.js +78 -80
- package/.mindforge/dynamic-workflows/scripts/incident-response.js +81 -83
- package/.mindforge/dynamic-workflows/scripts/multi-repo-sync.js +49 -51
- package/.mindforge/dynamic-workflows/scripts/mutation-testing.js +113 -115
- package/.mindforge/dynamic-workflows/scripts/onboard-codebase.js +79 -81
- package/.mindforge/dynamic-workflows/scripts/orchestrate-review.js +115 -0
- package/.mindforge/dynamic-workflows/scripts/perf-optimize.js +97 -99
- package/.mindforge/dynamic-workflows/scripts/pr-review.js +61 -63
- package/.mindforge/dynamic-workflows/scripts/refactor-plan.js +88 -90
- package/.mindforge/dynamic-workflows/scripts/release-prep.js +79 -81
- package/.mindforge/dynamic-workflows/scripts/security-hardening.js +117 -119
- package/.mindforge/dynamic-workflows/scripts/security-threat-model.js +119 -121
- package/.mindforge/dynamic-workflows/scripts/tdd-sprint.js +80 -82
- package/.mindforge/dynamic-workflows/scripts/tech-evaluation.js +50 -52
- package/.mindforge/dynamic-workflows/scripts/test-coverage-gap.js +68 -70
- package/.mindforge/dynamic-workflows/scripts/ux-heuristic-audit.js +89 -91
- package/.mindforge/dynamic-workflows/scripts/verification-loop.js +138 -0
- package/.mindforge/dynamic-workflows/scripts/workflow-optimizer.js +136 -0
- package/.mindforge/dynamic-workflows/scripts/writer-reviewer.js +63 -65
- package/.mindforge/memory/sync-manifest.json +1 -1
- package/.mindforge/personas/advisor-researcher.md +2 -2
- package/.mindforge/personas/api-load-tester.md +1 -1
- package/.mindforge/personas/authentication-architect.md +1 -1
- package/.mindforge/personas/backup-recovery-specialist.md +1 -1
- package/.mindforge/personas/build-optimizer.md +1 -1
- package/.mindforge/personas/caching-strategist.md +1 -1
- package/.mindforge/personas/chaos-engineer.md +1 -1
- package/.mindforge/personas/compliance-auditor.md +1 -1
- package/.mindforge/personas/config-management-expert.md +1 -1
- package/.mindforge/personas/coverage-specialist.md +1 -1
- package/.mindforge/personas/debug-specialist.md +2 -2
- package/.mindforge/personas/debugger.md +2 -2
- package/.mindforge/personas/dependency-auditor.md +1 -1
- package/.mindforge/personas/developer.md +1 -1
- package/.mindforge/personas/devops-engineer.md +1 -1
- package/.mindforge/personas/executor.md +1 -1
- package/.mindforge/personas/go-specialist.md +1 -1
- package/.mindforge/personas/incident-commander.md +1 -1
- package/.mindforge/personas/java-specialist.md +1 -1
- package/.mindforge/personas/kubernetes-debugger.md +1 -1
- package/.mindforge/personas/logging-architect.md +1 -1
- package/.mindforge/personas/mf-planner.md +1 -1
- package/.mindforge/personas/mf-researcher.md +1 -1
- package/.mindforge/personas/mf-reviewer.md +1 -1
- package/.mindforge/personas/nyquist-auditor.md +1 -1
- package/.mindforge/personas/observability-engineer.md +1 -1
- package/.mindforge/personas/performance-optimizer.md +1 -1
- package/.mindforge/personas/phase-researcher.md +5 -5
- package/.mindforge/personas/planner.md +1 -1
- package/.mindforge/personas/project-researcher.md +2 -2
- package/.mindforge/personas/python-specialist.md +1 -1
- package/.mindforge/personas/qa-engineer.md +1 -1
- package/.mindforge/personas/release-manager.md +1 -1
- package/.mindforge/personas/research-agent.md +4 -4
- package/.mindforge/personas/roadmapper-extend.md +1 -1
- package/.mindforge/personas/rust-specialist.md +1 -1
- package/.mindforge/personas/security-reviewer.md +1 -1
- package/.mindforge/personas/tech-writer.md +1 -1
- package/.mindforge/personas/typescript-wizard.md +1 -1
- package/.mindforge/personas/ui-researcher.md +1 -1
- package/.mindforge/skills/accessibility/SKILL.md +3 -3
- package/.mindforge/skills/agent-architecture-audit/SKILL.md +11 -0
- package/.mindforge/skills/agent-loops/SKILL.md +1 -1
- package/.mindforge/skills/arxiv/SKILL.md +6 -6
- package/.mindforge/skills/arxiv/scripts/search_arxiv.py +114 -0
- package/.mindforge/skills/code-tour/SKILL.md +2 -2
- package/.mindforge/skills/code-wiki/SKILL.md +11 -11
- package/.mindforge/skills/code-wiki/templates/README.md +31 -0
- package/.mindforge/skills/code-wiki/templates/architecture.md +30 -0
- package/.mindforge/skills/code-wiki/templates/getting-started.md +47 -0
- package/.mindforge/skills/code-wiki/templates/module.md +38 -0
- package/.mindforge/skills/concept-diagrams/SKILL.md +6 -6
- package/.mindforge/skills/concept-diagrams/examples/apartment-floor-plan-conversion.md +244 -0
- package/.mindforge/skills/concept-diagrams/examples/automated-password-reset-flow.md +276 -0
- package/.mindforge/skills/concept-diagrams/examples/autonomous-llm-research-agent-flow.md +240 -0
- package/.mindforge/skills/concept-diagrams/examples/banana-journey-tree-to-smoothie.md +161 -0
- package/.mindforge/skills/concept-diagrams/examples/commercial-aircraft-structure.md +209 -0
- package/.mindforge/skills/concept-diagrams/examples/cpu-ooo-microarchitecture.md +236 -0
- package/.mindforge/skills/concept-diagrams/examples/electricity-grid-flow.md +182 -0
- package/.mindforge/skills/concept-diagrams/examples/feature-film-production-pipeline.md +172 -0
- package/.mindforge/skills/concept-diagrams/examples/hospital-emergency-department-flow.md +165 -0
- package/.mindforge/skills/concept-diagrams/examples/ml-benchmark-grouped-bar-chart.md +114 -0
- package/.mindforge/skills/concept-diagrams/examples/place-order-uml-sequence.md +325 -0
- package/.mindforge/skills/concept-diagrams/examples/smart-city-infrastructure.md +173 -0
- package/.mindforge/skills/concept-diagrams/examples/smartphone-layer-anatomy.md +154 -0
- package/.mindforge/skills/concept-diagrams/examples/sn2-reaction-mechanism.md +247 -0
- package/.mindforge/skills/concept-diagrams/examples/wind-turbine-structure.md +338 -0
- package/.mindforge/skills/concept-diagrams/references/dashboard-patterns.md +43 -0
- package/.mindforge/skills/concept-diagrams/references/infrastructure-patterns.md +144 -0
- package/.mindforge/skills/concept-diagrams/references/physical-shape-cookbook.md +42 -0
- package/.mindforge/skills/concept-diagrams/templates/template.html +174 -0
- package/.mindforge/skills/creative-ideation/references/full-prompt-library.md +110 -0
- package/.mindforge/skills/documentation/SKILL.md +1 -1
- package/.mindforge/skills/domain-intel/SKILL.md +7 -7
- package/.mindforge/skills/domain-intel/scripts/domain_intel.py +397 -0
- package/.mindforge/skills/duckduckgo-search/SKILL.md +17 -17
- package/.mindforge/skills/duckduckgo-search/scripts/duckduckgo.sh +28 -0
- package/.mindforge/skills/environment-management/SKILL.md +1 -1
- package/.mindforge/skills/github-code-review/SKILL.md +9 -9
- package/.mindforge/skills/github-code-review/references/review-output-template.md +74 -0
- package/.mindforge/skills/github-issues/templates/bug-report.md +35 -0
- package/.mindforge/skills/github-issues/templates/feature-request.md +31 -0
- package/.mindforge/skills/github-pr-workflow/SKILL.md +3 -3
- package/.mindforge/skills/github-pr-workflow/references/ci-troubleshooting.md +183 -0
- package/.mindforge/skills/github-pr-workflow/references/conventional-commits.md +71 -0
- package/.mindforge/skills/github-pr-workflow/templates/pr-body-bugfix.md +35 -0
- package/.mindforge/skills/github-pr-workflow/templates/pr-body-feature.md +33 -0
- package/.mindforge/skills/incident-response/SKILL.md +1 -1
- package/.mindforge/skills/jupyter-live-kernel/SKILL.md +3 -3
- package/.mindforge/skills/kanban-orchestrator/SKILL.md +10 -10
- package/.mindforge/skills/kanban-worker/SKILL.md +6 -6
- package/.mindforge/skills/meme-generation/SKILL.md +1 -1
- package/.mindforge/skills/meme-generation/scripts/generate_meme.py +470 -0
- package/.mindforge/skills/meme-generation/scripts/templates.json +97 -0
- package/.mindforge/skills/obsidian/SKILL.md +15 -15
- package/.mindforge/skills/orch-pipeline/SKILL.md +2 -2
- package/.mindforge/skills/osint-investigation/SKILL.md +3 -2
- package/.mindforge/skills/osint-investigation/references/sources/courtlistener.md +98 -0
- package/.mindforge/skills/osint-investigation/references/sources/gdelt.md +104 -0
- package/.mindforge/skills/osint-investigation/references/sources/icij-offshore.md +104 -0
- package/.mindforge/skills/osint-investigation/references/sources/nyc-acris.md +90 -0
- package/.mindforge/skills/osint-investigation/references/sources/ofac-sdn.md +92 -0
- package/.mindforge/skills/osint-investigation/references/sources/opencorporates.md +103 -0
- package/.mindforge/skills/osint-investigation/references/sources/sec-edgar.md +83 -0
- package/.mindforge/skills/osint-investigation/references/sources/senate-ld.md +89 -0
- package/.mindforge/skills/osint-investigation/references/sources/usaspending.md +97 -0
- package/.mindforge/skills/osint-investigation/references/sources/wayback.md +93 -0
- package/.mindforge/skills/osint-investigation/references/sources/wikipedia.md +107 -0
- package/.mindforge/skills/osint-investigation/scripts/_http.py +82 -0
- package/.mindforge/skills/osint-investigation/scripts/_normalize.py +67 -0
- package/.mindforge/skills/osint-investigation/scripts/build_findings.py +221 -0
- package/.mindforge/skills/osint-investigation/scripts/entity_resolution.py +228 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_courtlistener.py +149 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_gdelt.py +161 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_icij_offshore.py +234 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_nyc_acris.py +203 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_ofac_sdn.py +175 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_opencorporates.py +191 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_sec_edgar.py +184 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_senate_ld.py +146 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_usaspending.py +170 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_wayback.py +142 -0
- package/.mindforge/skills/osint-investigation/scripts/fetch_wikipedia.py +266 -0
- package/.mindforge/skills/osint-investigation/scripts/timing_analysis.py +252 -0
- package/.mindforge/skills/osint-investigation/templates/source-template.md +59 -0
- package/.mindforge/skills/oss-forensics/SKILL.md +6 -6
- package/.mindforge/skills/oss-forensics/references/evidence-types.md +89 -0
- package/.mindforge/skills/oss-forensics/references/github-archive-guide.md +184 -0
- package/.mindforge/skills/oss-forensics/references/investigation-templates.md +131 -0
- package/.mindforge/skills/oss-forensics/references/recovery-techniques.md +164 -0
- package/.mindforge/skills/oss-forensics/scripts/evidence-store.py +313 -0
- package/.mindforge/skills/oss-forensics/templates/forensic-report.md +151 -0
- package/.mindforge/skills/oss-forensics/templates/malicious-package-report.md +43 -0
- package/.mindforge/skills/pixel-art/SKILL.md +2 -2
- package/.mindforge/skills/pixel-art/references/palettes.md +49 -0
- package/.mindforge/skills/plan/SKILL.md +10 -10
- package/.mindforge/skills/requesting-code-review/SKILL.md +4 -6
- package/.mindforge/skills/research-paper-writing/SKILL.md +32 -32
- package/.mindforge/skills/research-paper-writing/references/autoreason-methodology.md +394 -0
- package/.mindforge/skills/research-paper-writing/references/checklists.md +434 -0
- package/.mindforge/skills/research-paper-writing/references/citation-workflow.md +563 -0
- package/.mindforge/skills/research-paper-writing/references/experiment-patterns.md +728 -0
- package/.mindforge/skills/research-paper-writing/references/human-evaluation.md +476 -0
- package/.mindforge/skills/research-paper-writing/references/paper-types.md +481 -0
- package/.mindforge/skills/research-paper-writing/references/reviewer-guidelines.md +433 -0
- package/.mindforge/skills/research-paper-writing/references/sources.md +191 -0
- package/.mindforge/skills/research-paper-writing/references/writing-guide.md +474 -0
- package/.mindforge/skills/research-paper-writing/templates/README.md +251 -0
- package/.mindforge/skills/scrapling/SKILL.md +1 -1
- package/.mindforge/skills/security-review/SKILL.md +1 -1
- package/.mindforge/skills/sherlock/SKILL.md +1 -1
- package/.mindforge/skills/simplify-code/SKILL.md +5 -7
- package/.mindforge/skills/spike/SKILL.md +11 -13
- package/.mindforge/skills/subagent-driven-development/SKILL.md +7 -11
- package/.mindforge/skills/subagent-driven-development/references/context-budget-discipline.md +53 -0
- package/.mindforge/skills/subagent-driven-development/references/gates-taxonomy.md +93 -0
- package/.mindforge/skills/systematic-debugging/SKILL.md +13 -14
- package/.mindforge/skills/test-driven-development/SKILL.md +7 -8
- package/.mindforge/skills/testing-standards/SKILL.md +1 -1
- package/.mindforge/skills/web-pentest/SKILL.md +2 -2
- package/.mindforge/skills/web-pentest/references/bypass-techniques.md +133 -0
- package/.mindforge/skills/web-pentest/references/exploitation-techniques.md +204 -0
- package/.mindforge/skills/web-pentest/references/scope-enforcement.md +110 -0
- package/.mindforge/skills/web-pentest/references/vuln-taxonomy.md +81 -0
- package/.mindforge/skills/web-pentest/templates/authorization.md +69 -0
- package/.mindforge/skills/web-pentest/templates/pentest-report.md +178 -0
- package/.mindforge/skills/writing-skills/SKILL.md +4 -3
- package/CHANGELOG.md +35 -0
- package/MINDFORGE.md +3 -3
- package/README.md +9 -7
- package/RELEASENOTES.md +65 -2
- package/SECURITY.md +5 -3
- package/bin/autonomous/auto-runner.js +5 -2
- package/bin/engine/skill-loader.js +4 -0
- package/bin/governance/rbac.js +4 -0
- package/bin/memory/eis-client.js +1 -0
- package/bin/mindforge-cli.js +5 -0
- package/bin/models/bedrock-provider.js +192 -0
- package/bin/models/model-client.js +19 -0
- package/bin/spawn-agent.js +9 -2
- package/docs/commands-reference.md +68 -6
- package/docs/faq.md +38 -1
- package/docs/getting-started.md +27 -12
- package/docs/sdk-reference.md +36 -3
- package/docs/troubleshooting.md +59 -1
- package/docs/user-guide.md +7 -4
- package/package.json +3 -3
- package/.claude/commands/mindforge/skill-tdd.md +0 -53
- package/.claude/commands/mindforge/skills-index.md +0 -118
- package/.claude/commands/mindforge/systematic-debug.md +0 -60
- package/.claude/commands/mindforge/wf-accessibility-audit.md +0 -31
- package/.claude/commands/mindforge/wf-ai-model-eval.md +0 -31
- package/.claude/commands/mindforge/wf-api-migration.md +0 -31
- package/.claude/commands/mindforge/wf-architecture-modernization.md +0 -32
- package/.claude/commands/mindforge/wf-catalog.md +0 -59
- package/.claude/commands/mindforge/wf-code-audit.md +0 -31
- package/.claude/commands/mindforge/wf-code-explainer.md +0 -31
- package/.claude/commands/mindforge/wf-competitive-analysis.md +0 -31
- package/.claude/commands/mindforge/wf-competitive-teardown.md +0 -31
- package/.claude/commands/mindforge/wf-cost-analysis.md +0 -31
- package/.claude/commands/mindforge/wf-data-pipeline-validate.md +0 -31
- package/.claude/commands/mindforge/wf-database-migration.md +0 -31
- package/.claude/commands/mindforge/wf-debug-detective.md +0 -32
- package/.claude/commands/mindforge/wf-design-system-audit.md +0 -31
- package/.claude/commands/mindforge/wf-documentation-gen.md +0 -31
- package/.claude/commands/mindforge/wf-feature-planner.md +0 -31
- package/.claude/commands/mindforge/wf-incident-response.md +0 -31
- package/.claude/commands/mindforge/wf-multi-repo-sync.md +0 -31
- package/.claude/commands/mindforge/wf-mutation-testing.md +0 -31
- package/.claude/commands/mindforge/wf-onboard-codebase.md +0 -31
- package/.claude/commands/mindforge/wf-perf-optimize.md +0 -31
- package/.claude/commands/mindforge/wf-pr-review.md +0 -31
- package/.claude/commands/mindforge/wf-refactor-plan.md +0 -31
- package/.claude/commands/mindforge/wf-release-prep.md +0 -31
- package/.claude/commands/mindforge/wf-security-threat-model.md +0 -31
- package/.claude/commands/mindforge/wf-tdd-sprint.md +0 -31
- package/.claude/commands/mindforge/wf-tech-evaluation.md +0 -31
- package/.claude/commands/mindforge/wf-ux-heuristic-audit.md +0 -31
- package/.claude/commands/mindforge/wf-writer-reviewer.md +0 -30
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
# Place Order — UML Sequence Diagram
|
|
2
|
+
|
|
3
|
+
A UML sequence diagram for the 'Place Order' use case in an e-commerce system. Six lifelines (:Customer, :ShoppingCart, :OrderController, :PaymentGateway, :InventorySystem, :EmailService) interact across 14 numbered messages. An **alt** combined fragment (amber) covers the three conditional outcomes — payment authorized, payment failed, and item unavailable. A **par** combined fragment (teal) nested inside the success branch shows concurrent email confirmation and stock-level update. Demonstrates activation bars, two distinct arrowhead types, UML pentagon fragment tags, and guard conditions.
|
|
4
|
+
|
|
5
|
+
## Key Patterns Used
|
|
6
|
+
|
|
7
|
+
- **6 lifelines at equal spacing**: Lifeline centers placed at x=90, 190, 290, 390, 490, 590 (100px apart) so the first box left-edge lands at x=40 and the last right-edge lands at x=640 — exactly filling the safe area
|
|
8
|
+
- **Two-row actor headers**: Each lifeline box shows `":"` (small, tertiary color) on one line and the class name (slightly larger, bold) on a second line, matching the UML anonymous-instance notation `:ClassName`
|
|
9
|
+
- **Two separate arrowhead markers**: `#arr-call` is a filled triangle (`<polygon>`) for synchronous calls; `#arr-ret` is an open chevron (`fill="none"`) for dashed return messages — both use `context-stroke` to inherit line color
|
|
10
|
+
- **Activation bars**: Narrow 8px-wide rectangles (`class="activation"`) layered on top of lifeline stems to show object execution periods; OrderController's bar spans the entire interaction; shorter bars mark PaymentGateway, InventorySystem, and EmailService during their active windows
|
|
11
|
+
- **Combined fragment pentagon tag**: Each `alt` / `par` frame uses a `<polygon>` dog-eared label shape in the top-left corner — points follow the pattern `(x,y) (x+w,y) (x+w+6,y+6) (x+w+6,y+18) (x,y+18)` creating the characteristic UML notch
|
|
12
|
+
- **Nested par inside alt**: The `par` rect (teal) sits inside branch 1 of the `alt` rect (amber); inner rect uses inset x/y (+15/+2) so both borders remain visible and distinguishable
|
|
13
|
+
- **Guard conditions**: Italic text in `[square brackets]` placed immediately after each alt frame divider line, or just inside the top frame for branch 1 — rendered with a dedicated `guard-lbl` class (italic, amber color)
|
|
14
|
+
- **Alt branch dividers**: Solid horizontal lines (`.frag-alt-div`) span the full alt rect width to separate the three branches; par branch separator uses a dashed line (`.frag-par-div`) per UML spec
|
|
15
|
+
- **Lifeline end caps**: Short 14px horizontal tick marks at y=590 (bottom of all lifeline stems) to formally terminate each lifeline
|
|
16
|
+
- **Message sequence annotation**: A faint counter row below the legend (①–③ / ④–⑩ / ⑪–⑫ / ⑬–⑭) explains the four message groups without adding noise to the diagram body
|
|
17
|
+
|
|
18
|
+
## Diagram
|
|
19
|
+
|
|
20
|
+
```xml
|
|
21
|
+
<svg width="100%" viewBox="0 0 680 648" xmlns="http://www.w3.org/2000/svg">
|
|
22
|
+
<defs>
|
|
23
|
+
<!-- Open chevron arrowhead — return messages -->
|
|
24
|
+
<marker id="arr-ret" viewBox="0 0 10 10" refX="8" refY="5"
|
|
25
|
+
markerWidth="6" markerHeight="6" orient="auto-start-reverse">
|
|
26
|
+
<path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke"
|
|
27
|
+
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
28
|
+
</marker>
|
|
29
|
+
|
|
30
|
+
<!-- Filled triangle arrowhead — synchronous calls -->
|
|
31
|
+
<marker id="arr-call" viewBox="0 0 10 10" refX="9" refY="5"
|
|
32
|
+
markerWidth="7" markerHeight="7" orient="auto">
|
|
33
|
+
<polygon points="0,1 10,5 0,9" fill="context-stroke"/>
|
|
34
|
+
</marker>
|
|
35
|
+
</defs>
|
|
36
|
+
|
|
37
|
+
<!--
|
|
38
|
+
Lifeline centres (x):
|
|
39
|
+
L1 :Customer → 90
|
|
40
|
+
L2 :ShoppingCart → 190
|
|
41
|
+
L3 :OrderController → 290
|
|
42
|
+
L4 :PaymentGateway → 390
|
|
43
|
+
L5 :InventorySystem → 490
|
|
44
|
+
L6 :EmailService → 590
|
|
45
|
+
Actor boxes: x = cx−50, y=20, w=100, h=56, rx=6
|
|
46
|
+
Lifelines: x = cx, y1=76, y2=590
|
|
47
|
+
-->
|
|
48
|
+
|
|
49
|
+
<!-- ── 1. LIFELINE DASHED STEMS (drawn first, behind everything) ── -->
|
|
50
|
+
<line x1="90" y1="76" x2="90" y2="590" class="lifeline"/>
|
|
51
|
+
<line x1="190" y1="76" x2="190" y2="590" class="lifeline"/>
|
|
52
|
+
<line x1="290" y1="76" x2="290" y2="590" class="lifeline"/>
|
|
53
|
+
<line x1="390" y1="76" x2="390" y2="590" class="lifeline"/>
|
|
54
|
+
<line x1="490" y1="76" x2="490" y2="590" class="lifeline"/>
|
|
55
|
+
<line x1="590" y1="76" x2="590" y2="590" class="lifeline"/>
|
|
56
|
+
|
|
57
|
+
<!-- ── 2. ACTOR HEADER BOXES ── -->
|
|
58
|
+
|
|
59
|
+
<!-- :Customer -->
|
|
60
|
+
<rect x="40" y="20" width="100" height="56" rx="6" class="actor"/>
|
|
61
|
+
<text class="actor-colon" x="90" y="40" text-anchor="middle" dominant-baseline="central">:</text>
|
|
62
|
+
<text class="actor-name" x="90" y="58" text-anchor="middle" dominant-baseline="central">Customer</text>
|
|
63
|
+
|
|
64
|
+
<!-- :ShoppingCart -->
|
|
65
|
+
<rect x="140" y="20" width="100" height="56" rx="6" class="actor"/>
|
|
66
|
+
<text class="actor-colon" x="190" y="37" text-anchor="middle" dominant-baseline="central">:</text>
|
|
67
|
+
<text class="actor-name" x="190" y="55" text-anchor="middle" dominant-baseline="central">ShoppingCart</text>
|
|
68
|
+
|
|
69
|
+
<!-- :OrderController -->
|
|
70
|
+
<rect x="240" y="20" width="100" height="56" rx="6" class="actor"/>
|
|
71
|
+
<text class="actor-colon" x="290" y="37" text-anchor="middle" dominant-baseline="central">:</text>
|
|
72
|
+
<text class="actor-name" x="290" y="55" text-anchor="middle" dominant-baseline="central">OrderController</text>
|
|
73
|
+
|
|
74
|
+
<!-- :PaymentGateway -->
|
|
75
|
+
<rect x="340" y="20" width="100" height="56" rx="6" class="actor"/>
|
|
76
|
+
<text class="actor-colon" x="390" y="37" text-anchor="middle" dominant-baseline="central">:</text>
|
|
77
|
+
<text class="actor-name" x="390" y="55" text-anchor="middle" dominant-baseline="central">PaymentGateway</text>
|
|
78
|
+
|
|
79
|
+
<!-- :InventorySystem -->
|
|
80
|
+
<rect x="440" y="20" width="100" height="56" rx="6" class="actor"/>
|
|
81
|
+
<text class="actor-colon" x="490" y="37" text-anchor="middle" dominant-baseline="central">:</text>
|
|
82
|
+
<text class="actor-name" x="490" y="55" text-anchor="middle" dominant-baseline="central">InventorySystem</text>
|
|
83
|
+
|
|
84
|
+
<!-- :EmailService -->
|
|
85
|
+
<rect x="540" y="20" width="100" height="56" rx="6" class="actor"/>
|
|
86
|
+
<text class="actor-colon" x="590" y="37" text-anchor="middle" dominant-baseline="central">:</text>
|
|
87
|
+
<text class="actor-name" x="590" y="55" text-anchor="middle" dominant-baseline="central">EmailService</text>
|
|
88
|
+
|
|
89
|
+
<!-- ── 3. ACTIVATION BARS ── -->
|
|
90
|
+
<!-- ShoppingCart: active while forwarding checkout → placeOrder -->
|
|
91
|
+
<rect x="186" y="102" width="8" height="26" rx="1" class="activation"/>
|
|
92
|
+
<!-- OrderController: active throughout full sequence -->
|
|
93
|
+
<rect x="286" y="128" width="8" height="415" rx="1" class="activation"/>
|
|
94
|
+
<!-- PaymentGateway: active during auth check (happy-path branch only) -->
|
|
95
|
+
<rect x="386" y="154" width="8" height="46" rx="1" class="activation"/>
|
|
96
|
+
<!-- InventorySystem: active from reserveItems → updateStockLevels end -->
|
|
97
|
+
<rect x="486" y="225" width="8" height="128" rx="1" class="activation"/>
|
|
98
|
+
<!-- EmailService: active during confirmation send -->
|
|
99
|
+
<rect x="586" y="290" width="8" height="25" rx="1" class="activation"/>
|
|
100
|
+
|
|
101
|
+
<!-- ── 4. PRE-ALT MESSAGES ── -->
|
|
102
|
+
|
|
103
|
+
<!-- ① checkout() :Customer → :ShoppingCart -->
|
|
104
|
+
<line x1="90" y1="102" x2="186" y2="102" class="msg-call" marker-end="url(#arr-call)"/>
|
|
105
|
+
<text class="mlbl" x="140" y="97" text-anchor="middle">checkout()</text>
|
|
106
|
+
|
|
107
|
+
<!-- ② placeOrder(cartItems) :ShoppingCart → :OrderController -->
|
|
108
|
+
<line x1="194" y1="128" x2="286" y2="128" class="msg-call" marker-end="url(#arr-call)"/>
|
|
109
|
+
<text class="mlbl" x="242" y="123" text-anchor="middle">placeOrder(cartItems)</text>
|
|
110
|
+
|
|
111
|
+
<!-- ③ authorizePayment(amount) :OrderController → :PaymentGateway -->
|
|
112
|
+
<line x1="294" y1="154" x2="386" y2="154" class="msg-call" marker-end="url(#arr-call)"/>
|
|
113
|
+
<text class="mlbl" x="342" y="149" text-anchor="middle">authorizePayment(amount)</text>
|
|
114
|
+
|
|
115
|
+
<!-- ── 5. ALT COMBINED FRAGMENT y=166 → y=563 ── -->
|
|
116
|
+
|
|
117
|
+
<!-- Outer alt rectangle -->
|
|
118
|
+
<rect x="45" y="166" width="590" height="397" rx="3" class="frag-alt-bg"/>
|
|
119
|
+
|
|
120
|
+
<!-- Pentagon "alt" tag: TL corner notch shape -->
|
|
121
|
+
<polygon points="45,166 84,166 90,173 90,185 45,185" class="frag-alt-tag"/>
|
|
122
|
+
<text class="frag-alt-kw" x="67" y="178" text-anchor="middle" dominant-baseline="central">alt</text>
|
|
123
|
+
|
|
124
|
+
<!-- Guard: branch 1 -->
|
|
125
|
+
<text class="guard-lbl" x="96" y="179" dominant-baseline="central">[payment authorized]</text>
|
|
126
|
+
|
|
127
|
+
<!-- ─── Branch 1: payment authorized ─── -->
|
|
128
|
+
|
|
129
|
+
<!-- ④ « authorized » :PaymentGateway → :OrderController (dashed return) -->
|
|
130
|
+
<line x1="386" y1="200" x2="294" y2="200" class="msg-ret" marker-end="url(#arr-ret)"/>
|
|
131
|
+
<text class="rlbl" x="342" y="195" text-anchor="middle">« authorized »</text>
|
|
132
|
+
|
|
133
|
+
<!-- ⑤ reserveItems(cartItems) :OrderController → :InventorySystem -->
|
|
134
|
+
<line x1="294" y1="225" x2="486" y2="225" class="msg-call" marker-end="url(#arr-call)"/>
|
|
135
|
+
<text class="mlbl" x="392" y="220" text-anchor="middle">reserveItems(cartItems)</text>
|
|
136
|
+
|
|
137
|
+
<!-- ⑥ « itemsReserved » :InventorySystem → :OrderController (dashed return) -->
|
|
138
|
+
<line x1="486" y1="250" x2="294" y2="250" class="msg-ret" marker-end="url(#arr-ret)"/>
|
|
139
|
+
<text class="rlbl" x="392" y="245" text-anchor="middle">« itemsReserved »</text>
|
|
140
|
+
|
|
141
|
+
<!-- ── 6. PAR COMBINED FRAGMENT (nested inside alt branch 1) y=266 → y=373 ── -->
|
|
142
|
+
|
|
143
|
+
<!-- Inner par rectangle -->
|
|
144
|
+
<rect x="60" y="266" width="560" height="107" rx="3" class="frag-par-bg"/>
|
|
145
|
+
|
|
146
|
+
<!-- Pentagon "par" tag -->
|
|
147
|
+
<polygon points="60,266 97,266 102,272 102,284 60,284" class="frag-par-tag"/>
|
|
148
|
+
<text class="frag-par-kw" x="81" y="275" text-anchor="middle" dominant-baseline="central">par</text>
|
|
149
|
+
|
|
150
|
+
<!-- Par branch 1: email confirmation -->
|
|
151
|
+
|
|
152
|
+
<!-- ⑦ sendConfirmationEmail() :OrderController → :EmailService -->
|
|
153
|
+
<line x1="294" y1="295" x2="586" y2="295" class="msg-call" marker-end="url(#arr-call)"/>
|
|
154
|
+
<text class="mlbl" x="442" y="290" text-anchor="middle">sendConfirmationEmail()</text>
|
|
155
|
+
|
|
156
|
+
<!-- ⑧ « emailQueued » :EmailService → :OrderController (dashed return) -->
|
|
157
|
+
<line x1="586" y1="318" x2="294" y2="318" class="msg-ret" marker-end="url(#arr-ret)"/>
|
|
158
|
+
<text class="rlbl" x="442" y="313" text-anchor="middle">« emailQueued »</text>
|
|
159
|
+
|
|
160
|
+
<!-- Par branch divider (dashed, per UML spec) -->
|
|
161
|
+
<line x1="60" y1="336" x2="620" y2="336" class="frag-par-div"/>
|
|
162
|
+
|
|
163
|
+
<!-- Par branch 2: stock level update -->
|
|
164
|
+
|
|
165
|
+
<!-- ⑨ updateStockLevels() :OrderController → :InventorySystem -->
|
|
166
|
+
<line x1="294" y1="355" x2="486" y2="355" class="msg-call" marker-end="url(#arr-call)"/>
|
|
167
|
+
<text class="mlbl" x="392" y="350" text-anchor="middle">updateStockLevels()</text>
|
|
168
|
+
|
|
169
|
+
<!-- PAR fragment ends at y=373 -->
|
|
170
|
+
|
|
171
|
+
<!-- ⑩ « orderPlaced » :OrderController → :Customer (dashed return, after par) -->
|
|
172
|
+
<line x1="286" y1="395" x2="90" y2="395" class="msg-ret" marker-end="url(#arr-ret)"/>
|
|
173
|
+
<text class="rlbl" x="190" y="390" text-anchor="middle">« orderPlaced »</text>
|
|
174
|
+
|
|
175
|
+
<!-- ─── Alt else: [payment failed] ─── -->
|
|
176
|
+
|
|
177
|
+
<!-- Alt branch divider 1 (solid line) -->
|
|
178
|
+
<line x1="45" y1="415" x2="635" y2="415" class="frag-alt-div"/>
|
|
179
|
+
<text class="guard-lbl" x="50" y="429" dominant-baseline="central">[payment failed]</text>
|
|
180
|
+
|
|
181
|
+
<!-- ⑪ « authFailed » :PaymentGateway → :OrderController (dashed return) -->
|
|
182
|
+
<line x1="390" y1="448" x2="294" y2="448" class="msg-ret" marker-end="url(#arr-ret)"/>
|
|
183
|
+
<text class="rlbl" x="344" y="443" text-anchor="middle">« authFailed »</text>
|
|
184
|
+
|
|
185
|
+
<!-- ⑫ error(PAYMENT_FAILED) :OrderController → :Customer -->
|
|
186
|
+
<line x1="286" y1="470" x2="90" y2="470" class="msg-call" marker-end="url(#arr-call)"/>
|
|
187
|
+
<text class="mlbl" x="190" y="465" text-anchor="middle">error(PAYMENT_FAILED)</text>
|
|
188
|
+
|
|
189
|
+
<!-- ─── Alt else: [item unavailable] ─── -->
|
|
190
|
+
|
|
191
|
+
<!-- Alt branch divider 2 (solid line) -->
|
|
192
|
+
<line x1="45" y1="490" x2="635" y2="490" class="frag-alt-div"/>
|
|
193
|
+
<text class="guard-lbl" x="50" y="504" dominant-baseline="central">[item unavailable]</text>
|
|
194
|
+
|
|
195
|
+
<!-- ⑬ « unavailable » :InventorySystem → :OrderController (dashed return) -->
|
|
196
|
+
<line x1="486" y1="523" x2="294" y2="523" class="msg-ret" marker-end="url(#arr-ret)"/>
|
|
197
|
+
<text class="rlbl" x="392" y="518" text-anchor="middle">« unavailable »</text>
|
|
198
|
+
|
|
199
|
+
<!-- ⑭ error(ITEM_UNAVAILABLE) :OrderController → :Customer -->
|
|
200
|
+
<line x1="286" y1="545" x2="90" y2="545" class="msg-call" marker-end="url(#arr-call)"/>
|
|
201
|
+
<text class="mlbl" x="190" y="540" text-anchor="middle">error(ITEM_UNAVAILABLE)</text>
|
|
202
|
+
|
|
203
|
+
<!-- ALT fragment ends at y=563 -->
|
|
204
|
+
|
|
205
|
+
<!-- ── 7. LIFELINE END CAPS (short horizontal tick at y=590) ── -->
|
|
206
|
+
<line x1="83" y1="590" x2="97" y2="590" stroke="var(--text-tertiary)" stroke-width="1.5"/>
|
|
207
|
+
<line x1="183" y1="590" x2="197" y2="590" stroke="var(--text-tertiary)" stroke-width="1.5"/>
|
|
208
|
+
<line x1="283" y1="590" x2="297" y2="590" stroke="var(--text-tertiary)" stroke-width="1.5"/>
|
|
209
|
+
<line x1="383" y1="590" x2="397" y2="590" stroke="var(--text-tertiary)" stroke-width="1.5"/>
|
|
210
|
+
<line x1="483" y1="590" x2="497" y2="590" stroke="var(--text-tertiary)" stroke-width="1.5"/>
|
|
211
|
+
<line x1="583" y1="590" x2="597" y2="590" stroke="var(--text-tertiary)" stroke-width="1.5"/>
|
|
212
|
+
|
|
213
|
+
<!-- ── 8. LEGEND ── -->
|
|
214
|
+
<text class="ts" x="45" y="612" opacity=".45">Legend —</text>
|
|
215
|
+
|
|
216
|
+
<line x1="110" y1="609" x2="148" y2="609"
|
|
217
|
+
stroke="var(--text-primary)" stroke-width="1.5" marker-end="url(#arr-call)"/>
|
|
218
|
+
<text class="ts" x="154" y="613" opacity=".75">Synchronous call</text>
|
|
219
|
+
|
|
220
|
+
<line x1="288" y1="609" x2="326" y2="609"
|
|
221
|
+
stroke="var(--text-secondary)" stroke-width="1.5"
|
|
222
|
+
stroke-dasharray="5 3" marker-end="url(#arr-ret)"/>
|
|
223
|
+
<text class="ts" x="332" y="613" opacity=".75">Return message</text>
|
|
224
|
+
|
|
225
|
+
<rect x="458" y="603" width="22" height="13" rx="2"
|
|
226
|
+
fill="#FAEEDA" fill-opacity="0.5" stroke="#854F0B" stroke-width="0.75"/>
|
|
227
|
+
<text class="ts" x="484" y="613" opacity=".75">alt fragment</text>
|
|
228
|
+
|
|
229
|
+
<rect x="558" y="603" width="22" height="13" rx="2"
|
|
230
|
+
fill="#E1F5EE" fill-opacity="0.6" stroke="#0F6E56" stroke-width="0.75"/>
|
|
231
|
+
<text class="ts" x="584" y="613" opacity=".75">par fragment</text>
|
|
232
|
+
|
|
233
|
+
<!-- Message group annotation -->
|
|
234
|
+
<text class="ts" x="45" y="632" opacity=".35">
|
|
235
|
+
①–③ pre-condition · ④–⑩ happy path · ⑪–⑫ payment failure · ⑬–⑭ item unavailable
|
|
236
|
+
</text>
|
|
237
|
+
|
|
238
|
+
</svg>
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Custom CSS
|
|
242
|
+
|
|
243
|
+
Add these classes to the hosting page `<style>` block (in addition to the standard skill CSS):
|
|
244
|
+
|
|
245
|
+
```css
|
|
246
|
+
/* ── Actor lifeline header boxes ── */
|
|
247
|
+
.actor { fill: var(--bg-secondary); stroke: var(--text-secondary); stroke-width: 0.5; }
|
|
248
|
+
.actor-name { font-family: system-ui, sans-serif; font-size: 11.5px; font-weight: 600;
|
|
249
|
+
fill: var(--text-primary); }
|
|
250
|
+
.actor-colon { font-family: system-ui, sans-serif; font-size: 10px; fill: var(--text-tertiary); }
|
|
251
|
+
|
|
252
|
+
/* ── Lifeline dashed stems ── */
|
|
253
|
+
.lifeline { stroke: var(--text-tertiary); stroke-width: 1; stroke-dasharray: 6 4; fill: none; }
|
|
254
|
+
|
|
255
|
+
/* ── Activation bars ── */
|
|
256
|
+
.activation { fill: var(--bg-secondary); stroke: var(--text-secondary); stroke-width: 0.75; }
|
|
257
|
+
|
|
258
|
+
/* ── Message arrows ── */
|
|
259
|
+
.msg-call { stroke: var(--text-primary); stroke-width: 1.5; fill: none; }
|
|
260
|
+
.msg-ret { stroke: var(--text-secondary); stroke-width: 1.5; fill: none; stroke-dasharray: 6 3; }
|
|
261
|
+
|
|
262
|
+
/* ── Message labels ── */
|
|
263
|
+
.mlbl { font-family: system-ui, sans-serif; font-size: 11px; fill: var(--text-primary); }
|
|
264
|
+
.rlbl { font-family: system-ui, sans-serif; font-size: 11px; fill: var(--text-secondary);
|
|
265
|
+
font-style: italic; }
|
|
266
|
+
|
|
267
|
+
/* ── Combined fragment: alt (amber) ── */
|
|
268
|
+
.frag-alt-bg { fill: #FAEEDA; fill-opacity: 0.18; stroke: #854F0B; stroke-width: 1; }
|
|
269
|
+
.frag-alt-tag { fill: #FAEEDA; stroke: #854F0B; stroke-width: 0.75; }
|
|
270
|
+
.frag-alt-kw { font-family: system-ui, sans-serif; font-size: 11px; font-weight: 700;
|
|
271
|
+
fill: #633806; }
|
|
272
|
+
.frag-alt-div { stroke: #854F0B; stroke-width: 0.75; fill: none; }
|
|
273
|
+
.guard-lbl { font-family: system-ui, sans-serif; font-size: 10.5px; font-style: italic;
|
|
274
|
+
fill: #854F0B; }
|
|
275
|
+
|
|
276
|
+
/* ── Combined fragment: par (teal) ── */
|
|
277
|
+
.frag-par-bg { fill: #E1F5EE; fill-opacity: 0.35; stroke: #0F6E56; stroke-width: 1; }
|
|
278
|
+
.frag-par-tag { fill: #E1F5EE; stroke: #0F6E56; stroke-width: 0.75; }
|
|
279
|
+
.frag-par-kw { font-family: system-ui, sans-serif; font-size: 11px; font-weight: 700;
|
|
280
|
+
fill: #085041; }
|
|
281
|
+
.frag-par-div { stroke: #0F6E56; stroke-width: 0.75; stroke-dasharray: 5 3; fill: none; }
|
|
282
|
+
|
|
283
|
+
/* ── Dark mode overrides ── */
|
|
284
|
+
@media (prefers-color-scheme: dark) {
|
|
285
|
+
.actor { fill: #2c2c2a; stroke: #b4b2a9; }
|
|
286
|
+
.actor-name { fill: #e8e6de; }
|
|
287
|
+
.actor-colon { fill: #888780; }
|
|
288
|
+
.frag-alt-bg { fill: #633806; fill-opacity: 0.25; stroke: #EF9F27; }
|
|
289
|
+
.frag-alt-tag { fill: #633806; stroke: #EF9F27; }
|
|
290
|
+
.frag-alt-kw { fill: #FAC775; }
|
|
291
|
+
.frag-alt-div { stroke: #EF9F27; }
|
|
292
|
+
.guard-lbl { fill: #EF9F27; }
|
|
293
|
+
.frag-par-bg { fill: #085041; fill-opacity: 0.35; stroke: #5DCAA5; }
|
|
294
|
+
.frag-par-tag { fill: #085041; stroke: #5DCAA5; }
|
|
295
|
+
.frag-par-kw { fill: #9FE1CB; }
|
|
296
|
+
.frag-par-div { stroke: #5DCAA5; }
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## Color Assignments
|
|
301
|
+
|
|
302
|
+
| Element | Color | Reason |
|
|
303
|
+
|---------|-------|--------|
|
|
304
|
+
| Actor header boxes | Neutral (`var(--bg-secondary)`) | Structural / non-semantic — all lifelines share one style |
|
|
305
|
+
| Activation bars | Neutral (`var(--bg-secondary)`) | Show execution periods without adding semantic color |
|
|
306
|
+
| Synchronous call arrows | `var(--text-primary)` + filled triangle | High contrast for calls — the primary interaction direction |
|
|
307
|
+
| Return / dashed arrows | `var(--text-secondary)` + open chevron | Lower contrast for returns — secondary flow direction |
|
|
308
|
+
| `alt` fragment | Amber (`#FAEEDA` / `#854F0B`) | Warning / conditional — matches `c-amber` semantic meaning |
|
|
309
|
+
| Guard condition text | Amber italic | Belongs visually to the alt fragment |
|
|
310
|
+
| `par` fragment | Teal (`#E1F5EE` / `#0F6E56`) | Concurrent success path — matches `c-teal` semantic meaning |
|
|
311
|
+
| Alt branch dividers | Amber solid line | Continuity with the alt frame color |
|
|
312
|
+
| Par branch divider | Teal dashed line | UML spec: par branches separated by dashed lines |
|
|
313
|
+
|
|
314
|
+
## Layout Notes
|
|
315
|
+
|
|
316
|
+
- **ViewBox**: 680×648 (standard width; height = lifeline bottom y=590 + legend + annotation + 16px buffer)
|
|
317
|
+
- **Lifeline spacing formula**: `(safe_area_width) / (n_lifelines − 1) = 600 / 5 = 120px` — but use `spacing = 100px` starting at `x=90` so that first box left = 40 and last box right = 640 exactly
|
|
318
|
+
- **Actor box split-label trick**: Two separate `<text>` elements per box — one for `":"` (10px, tertiary color) and one for the class name (11.5px bold, primary color) — avoids the 14px font needing ~150px+ per box for long names like "OrderController"
|
|
319
|
+
- **Pentagon tag formula**: For a fragment starting at `(fx, fy)`, the tag polygon points are `(fx,fy) (fx+w,fy) (fx+w+6,fy+6) (fx+w+6,fy+18) (fx,fy+18)` where `w` = approximate text width of the keyword + 8px padding each side
|
|
320
|
+
- **Nested fragment inset**: The `par` rect uses `x = alt_x + 15` and `y = alt_y_current + 2` so both borders remain simultaneously visible — inset enough to separate visually, not so much that it wastes vertical space
|
|
321
|
+
- **Activation bar placement**: `x = lifeline_cx − 4`, `width = 8` — centered on the lifeline and narrow enough not to obscure the dashed stem behind it
|
|
322
|
+
- **Message label y-offset**: All labels are placed at `y = arrow_y − 5` to sit just above the arrow line; this applies to both left-going and right-going arrows since `text-anchor="middle"` handles horizontal centering automatically
|
|
323
|
+
- **Return arrows entering activation bars**: End `x1/x2` at lifeline center (e.g. x=294 for OrderController) rather than the bar edge (x=286) — the small overlap is intentional and clarifies the target object
|
|
324
|
+
- **Alt guard label placement**: Branch 1 guard goes at `y = frame_top + 13` to the right of the pentagon tag; subsequent branch guards go at `divider_y + 14` so they sit just inside the new branch
|
|
325
|
+
- **Lifeline end cap pattern**: `<line x1="cx−7" y1="590" x2="cx+7" y2="590" stroke-width="1.5"/>` — a simple symmetric tick, no special marker needed
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Smart City Infrastructure
|
|
2
|
+
|
|
3
|
+
A multi-system integration diagram showing interconnected city infrastructure (power, water, transport) connected through a central IoT platform with a citizen dashboard on top. Demonstrates hub-spoke layout, diverse physical shapes, and UI mockups.
|
|
4
|
+
|
|
5
|
+
## Key Patterns Used
|
|
6
|
+
|
|
7
|
+
- **Hub-spoke layout**: Central IoT platform with radiating data connections to subsystems
|
|
8
|
+
- **Connection dots**: Visual indicators where data lines attach to the central hub
|
|
9
|
+
- **Dashboard/UI mockup**: Screen with mini-charts, gauges, and status indicators
|
|
10
|
+
- **Multi-system integration**: Three independent systems unified by central platform
|
|
11
|
+
- **Semantic line styles**: Different stroke styles for data (dashed), power, water, roads
|
|
12
|
+
- **Physical infrastructure shapes**: Solar panels, wind turbines, dams, pipes, roads, vehicles
|
|
13
|
+
|
|
14
|
+
## New Shape Techniques
|
|
15
|
+
|
|
16
|
+
### Solar Panels (angled polygons with grid lines)
|
|
17
|
+
```xml
|
|
18
|
+
<polygon class="solar-panel" points="0,25 35,8 38,12 3,29"/>
|
|
19
|
+
<line class="solar-frame" x1="12" y1="22" x2="24" y2="13"/>
|
|
20
|
+
<line x1="19" y1="29" x2="19" y2="40" stroke="#5F5E5A" stroke-width="2"/>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Wind Turbine (tower + nacelle + blades)
|
|
24
|
+
```xml
|
|
25
|
+
<!-- Tapered tower -->
|
|
26
|
+
<polygon class="wind-tower" points="20,70 30,70 28,25 22,25"/>
|
|
27
|
+
<!-- Nacelle -->
|
|
28
|
+
<rect class="wind-hub" x="18" y="20" width="14" height="8" rx="2"/>
|
|
29
|
+
<!-- Hub -->
|
|
30
|
+
<circle class="wind-hub" cx="25" cy="18" r="5"/>
|
|
31
|
+
<!-- Blades (rotated ellipses) -->
|
|
32
|
+
<ellipse class="wind-blade" cx="25" cy="5" rx="3" ry="13"/>
|
|
33
|
+
<ellipse class="wind-blade" cx="14" cy="26" rx="3" ry="13" transform="rotate(-120, 25, 18)"/>
|
|
34
|
+
<ellipse class="wind-blade" cx="36" cy="26" rx="3" ry="13" transform="rotate(120, 25, 18)"/>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Battery with Charge Level
|
|
38
|
+
```xml
|
|
39
|
+
<rect class="battery" x="0" y="0" width="45" height="65" rx="5"/>
|
|
40
|
+
<!-- Terminals -->
|
|
41
|
+
<rect x="10" y="-6" width="10" height="8" rx="2" fill="#27500A"/>
|
|
42
|
+
<rect x="25" y="-6" width="10" height="8" rx="2" fill="#27500A"/>
|
|
43
|
+
<!-- Charge level fill -->
|
|
44
|
+
<rect class="battery-level" x="5" y="12" width="35" height="48" rx="3"/>
|
|
45
|
+
<text x="22" y="42" text-anchor="middle" fill="#173404" style="font-size:10px">85%</text>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Dam/Reservoir with Water Waves
|
|
49
|
+
```xml
|
|
50
|
+
<!-- Dam wall -->
|
|
51
|
+
<polygon class="reservoir-wall" points="0,60 10,0 70,0 80,60"/>
|
|
52
|
+
<!-- Water behind dam -->
|
|
53
|
+
<polygon class="water" points="12,10 68,10 68,55 75,55 75,58 5,58 5,55 12,55"/>
|
|
54
|
+
<!-- Wave effect -->
|
|
55
|
+
<path d="M 15 25 Q 25 22 35 25 Q 45 28 55 25" fill="none" stroke="#378ADD" stroke-width="1" opacity="0.5"/>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Pipe Network with Joints and Valves
|
|
59
|
+
```xml
|
|
60
|
+
<path class="pipe" d="M 80 85 L 110 85"/>
|
|
61
|
+
<circle class="pipe-joint" cx="10" cy="30" r="8"/>
|
|
62
|
+
<circle class="valve" cx="190" cy="85" r="6"/>
|
|
63
|
+
<!-- Distribution branches -->
|
|
64
|
+
<path class="pipe-thin" d="M 18 30 L 50 30"/>
|
|
65
|
+
<path class="pipe-thin" d="M 10 22 L 10 5 L 50 5"/>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Road Intersection with Lane Markings
|
|
69
|
+
```xml
|
|
70
|
+
<!-- Road surface -->
|
|
71
|
+
<line class="road" x1="0" y1="50" x2="170" y2="50"/>
|
|
72
|
+
<line class="road-mark" x1="10" y1="50" x2="160" y2="50"/>
|
|
73
|
+
<!-- Cross road -->
|
|
74
|
+
<line class="road" x1="85" y1="0" x2="85" y2="100"/>
|
|
75
|
+
<line class="road-mark" x1="85" y1="10" x2="85" y2="90"/>
|
|
76
|
+
<!-- Embedded sensors -->
|
|
77
|
+
<circle class="sensor" cx="40" cy="50" r="5"/>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Traffic Light with Signal States
|
|
81
|
+
```xml
|
|
82
|
+
<rect class="traffic-light" x="0" y="0" width="14" height="32" rx="3"/>
|
|
83
|
+
<circle class="light-red" cx="7" cy="8" r="4"/>
|
|
84
|
+
<circle class="light-off" cx="7" cy="16" r="4"/>
|
|
85
|
+
<circle class="light-off" cx="7" cy="24" r="4"/>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Bus with Windows and Wheels
|
|
89
|
+
```xml
|
|
90
|
+
<rect class="bus" x="0" y="0" width="55" height="28" rx="6"/>
|
|
91
|
+
<!-- Windows -->
|
|
92
|
+
<rect class="bus-window" x="5" y="5" width="12" height="12" rx="2"/>
|
|
93
|
+
<rect class="bus-window" x="20" y="5" width="12" height="12" rx="2"/>
|
|
94
|
+
<!-- Wheels with hubcaps -->
|
|
95
|
+
<circle cx="14" cy="30" r="6" fill="#2C2C2A"/>
|
|
96
|
+
<circle cx="14" cy="30" r="3" fill="#5F5E5A"/>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Dashboard UI Mockup
|
|
100
|
+
```xml
|
|
101
|
+
<!-- Monitor frame -->
|
|
102
|
+
<rect class="dashboard" x="0" y="0" width="200" height="120" rx="8"/>
|
|
103
|
+
<!-- Screen -->
|
|
104
|
+
<rect class="screen" x="10" y="10" width="180" height="85" rx="4"/>
|
|
105
|
+
<!-- Mini bar chart -->
|
|
106
|
+
<rect class="screen-content" x="18" y="18" width="50" height="35" rx="2"/>
|
|
107
|
+
<rect class="screen-chart" x="22" y="38" width="8" height="12"/>
|
|
108
|
+
<rect class="screen-chart" x="33" y="32" width="8" height="18"/>
|
|
109
|
+
<!-- Gauge -->
|
|
110
|
+
<circle class="screen-bar" cx="100" cy="35" r="12"/>
|
|
111
|
+
<text x="100" y="39" text-anchor="middle" fill="#E8E6DE" style="font-size:8px">78%</text>
|
|
112
|
+
<!-- Status indicators -->
|
|
113
|
+
<circle cx="35" cy="74" r="6" fill="#97C459"/>
|
|
114
|
+
<circle cx="75" cy="74" r="6" fill="#97C459"/>
|
|
115
|
+
<circle cx="115" cy="74" r="6" fill="#EF9F27"/>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Hexagonal IoT Hub with Connection Points
|
|
119
|
+
```xml
|
|
120
|
+
<!-- Outer hexagon -->
|
|
121
|
+
<polygon class="iot-hex" points="0,-45 39,-22 39,22 0,45 -39,22 -39,-22"/>
|
|
122
|
+
<!-- Inner hexagon -->
|
|
123
|
+
<polygon class="iot-inner" points="0,-20 17,-10 17,10 0,20 -17,10 -17,-10"/>
|
|
124
|
+
<!-- Connection dots on data lines -->
|
|
125
|
+
<circle cx="321" cy="248" r="4" fill="#7F77DD"/>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## CSS Classes for Infrastructure
|
|
129
|
+
|
|
130
|
+
```css
|
|
131
|
+
/* Power system */
|
|
132
|
+
.solar-panel { fill: #3C3489; stroke: #534AB7; stroke-width: 0.5; }
|
|
133
|
+
.solar-frame { fill: none; stroke: #EEEDFE; stroke-width: 0.5; }
|
|
134
|
+
.wind-tower { fill: #B4B2A9; stroke: #5F5E5A; stroke-width: 1; }
|
|
135
|
+
.wind-blade { fill: #F1EFE8; stroke: #888780; stroke-width: 0.5; }
|
|
136
|
+
.battery { fill: #27500A; stroke: #3B6D11; stroke-width: 1.5; }
|
|
137
|
+
.battery-level { fill: #97C459; }
|
|
138
|
+
.power-line { stroke: #EF9F27; stroke-width: 2; fill: none; }
|
|
139
|
+
|
|
140
|
+
/* Water system */
|
|
141
|
+
.reservoir-wall { fill: #B4B2A9; stroke: #5F5E5A; stroke-width: 1; }
|
|
142
|
+
.water { fill: #85B7EB; stroke: #378ADD; stroke-width: 0.5; }
|
|
143
|
+
.pipe { fill: none; stroke: #378ADD; stroke-width: 4; stroke-linecap: round; }
|
|
144
|
+
.pipe-joint { fill: #185FA5; stroke: #0C447C; stroke-width: 1; }
|
|
145
|
+
.valve { fill: #0C447C; stroke: #185FA5; stroke-width: 1; }
|
|
146
|
+
|
|
147
|
+
/* Transport */
|
|
148
|
+
.road { stroke: #888780; stroke-width: 8; fill: none; stroke-linecap: round; }
|
|
149
|
+
.road-mark { stroke: #F1EFE8; stroke-width: 1; fill: none; stroke-dasharray: 6 4; }
|
|
150
|
+
.traffic-light { fill: #444441; stroke: #2C2C2A; stroke-width: 0.5; }
|
|
151
|
+
.light-red { fill: #E24B4A; }
|
|
152
|
+
.light-green { fill: #97C459; }
|
|
153
|
+
.light-off { fill: #2C2C2A; }
|
|
154
|
+
.bus { fill: #E1F5EE; stroke: #0F6E56; stroke-width: 1.5; }
|
|
155
|
+
|
|
156
|
+
/* Data/IoT */
|
|
157
|
+
.data-line { stroke: #7F77DD; stroke-width: 2; fill: none; stroke-dasharray: 4 3; }
|
|
158
|
+
.iot-hex { fill: #EEEDFE; stroke: #534AB7; stroke-width: 2; }
|
|
159
|
+
|
|
160
|
+
/* Dashboard */
|
|
161
|
+
.dashboard { fill: #F1EFE8; stroke: #5F5E5A; stroke-width: 1.5; }
|
|
162
|
+
.screen { fill: #1a1a18; }
|
|
163
|
+
.screen-chart { fill: #5DCAA5; }
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Layout Notes
|
|
167
|
+
|
|
168
|
+
- **ViewBox**: 720×620 (wider for three-column system layout)
|
|
169
|
+
- **Hub position**: Central IoT at (360, 270) - geometric center
|
|
170
|
+
- **Data lines**: Use quadratic curves or L-shaped paths, add connection dots at hub attachment points
|
|
171
|
+
- **System spacing**: ~200px width per system section
|
|
172
|
+
- **Vertical layers**: Dashboard (top) → IoT Hub (middle) → Systems (bottom)
|
|
173
|
+
- **Component grouping**: Use `<g transform="translate(x,y)">` for each major component for easy positioning
|