@opengroundplan/core 0.1.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 +26 -0
- package/adapters/README.md +155 -0
- package/adapters/_shared/README.md +16 -0
- package/adapters/aider/adapter.yaml +30 -0
- package/adapters/aider/templates/.aider.conf.yml.tmpl +5 -0
- package/adapters/amp/adapter.yaml +32 -0
- package/adapters/amp/templates/SKILL.md.tmpl +8 -0
- package/adapters/antigravity-cli/adapter.yaml +36 -0
- package/adapters/antigravity-cli/templates/ANTIGRAVITY.md.tmpl +11 -0
- package/adapters/claude-code/adapter.yaml +65 -0
- package/adapters/claude-code/templates/CLAUDE.md.tmpl +24 -0
- package/adapters/claude-code/templates/SKILL.md.tmpl +8 -0
- package/adapters/claude-code/templates/agent.md.tmpl +9 -0
- package/adapters/claude-code/templates/command.md.tmpl +6 -0
- package/adapters/claude-code/templates/rule.md.tmpl +8 -0
- package/adapters/claude-code/templates/settings.json.tmpl +11 -0
- package/adapters/cline/adapter.yaml +31 -0
- package/adapters/cline/templates/rule.md.tmpl +8 -0
- package/adapters/codex/adapter.yaml +29 -0
- package/adapters/continue/adapter.yaml +36 -0
- package/adapters/continue/templates/00-agents-md.md.tmpl +9 -0
- package/adapters/continue/templates/rule.md.tmpl +8 -0
- package/adapters/cursor/adapter.yaml +34 -0
- package/adapters/cursor/templates/rule.mdc.tmpl +9 -0
- package/adapters/gemini-cli/adapter.yaml +51 -0
- package/adapters/gemini-cli/templates/GEMINI.md.tmpl +9 -0
- package/adapters/gemini-cli/templates/command.toml.tmpl +4 -0
- package/adapters/github-copilot/adapter.yaml +44 -0
- package/adapters/github-copilot/templates/instructions.md.tmpl +8 -0
- package/adapters/github-copilot/templates/prompt.prompt.md.tmpl +6 -0
- package/adapters/opencode/adapter.yaml +18 -0
- package/adapters/opencode/templates/opencode.json.tmpl +4 -0
- package/adapters/roo-code/adapter.yaml +21 -0
- package/adapters/roo-code/templates/rule.md.tmpl +5 -0
- package/adapters/windsurf/adapter.yaml +34 -0
- package/adapters/windsurf/templates/agents-md.md.tmpl +12 -0
- package/adapters/windsurf/templates/rule.md.tmpl +9 -0
- package/adapters/windsurf/templates/workflow.md.tmpl +7 -0
- package/adapters/zed/adapter.yaml +14 -0
- package/catalog/README.md +62 -0
- package/catalog/architectures/agentic-tool-loop.yaml +62 -0
- package/catalog/architectures/bff.yaml +58 -0
- package/catalog/architectures/clean.yaml +61 -0
- package/catalog/architectures/cqrs.yaml +58 -0
- package/catalog/architectures/ddd-tactical.yaml +68 -0
- package/catalog/architectures/event-driven.yaml +59 -0
- package/catalog/architectures/feature-sliced-design.yaml +61 -0
- package/catalog/architectures/hexagonal.yaml +60 -0
- package/catalog/architectures/lakehouse.yaml +63 -0
- package/catalog/architectures/layered.yaml +60 -0
- package/catalog/architectures/llm-workflow.yaml +59 -0
- package/catalog/architectures/medallion.yaml +60 -0
- package/catalog/architectures/micro-frontends.yaml +60 -0
- package/catalog/architectures/microservices.yaml +62 -0
- package/catalog/architectures/modular-monolith.yaml +62 -0
- package/catalog/architectures/monolith.yaml +61 -0
- package/catalog/architectures/multi-agent.yaml +61 -0
- package/catalog/architectures/mvc-mvvm.yaml +62 -0
- package/catalog/architectures/nextjs-colocation.yaml +67 -0
- package/catalog/architectures/onion.yaml +60 -0
- package/catalog/architectures/pipes-and-filters.yaml +59 -0
- package/catalog/architectures/rag-hybrid.yaml +62 -0
- package/catalog/architectures/serverless.yaml +58 -0
- package/catalog/architectures/vertical-slice.yaml +61 -0
- package/catalog/characteristics.yaml +165 -0
- package/catalog/decision.yaml +309 -0
- package/catalog/sources/README.md +697 -0
- package/catalog/sources/agent-tooling.yaml +1180 -0
- package/catalog/sources/ai-llm.yaml +508 -0
- package/catalog/sources/auth.yaml +618 -0
- package/catalog/sources/backend-api.yaml +720 -0
- package/catalog/sources/cms-ecommerce.yaml +558 -0
- package/catalog/sources/data-engineering.yaml +618 -0
- package/catalog/sources/database-orm.yaml +507 -0
- package/catalog/sources/devops-cicd.yaml +422 -0
- package/catalog/sources/frontend-ui.yaml +654 -0
- package/catalog/sources/fullstack-saas.yaml +629 -0
- package/catalog/sources/game-3d.yaml +834 -0
- package/catalog/sources/gaps.md +268 -0
- package/catalog/sources/layer-plan.yaml +3919 -0
- package/catalog/sources/mobile-desktop.yaml +638 -0
- package/catalog/sources/observability.yaml +1364 -0
- package/catalog/sources/payments-billing.yaml +553 -0
- package/catalog/sources/realtime-messaging.yaml +787 -0
- package/catalog/sources/security-compliance.yaml +613 -0
- package/catalog/sources/testing.yaml +652 -0
- package/dist/adapters.d.ts +43 -0
- package/dist/adapters.js +181 -0
- package/dist/adapters.js.map +1 -0
- package/dist/agentkit.d.ts +65 -0
- package/dist/agentkit.js +183 -0
- package/dist/agentkit.js.map +1 -0
- package/dist/apply.d.ts +21 -0
- package/dist/apply.js +135 -0
- package/dist/apply.js.map +1 -0
- package/dist/condition.d.ts +14 -0
- package/dist/condition.js +121 -0
- package/dist/condition.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.js +131 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/intent.d.ts +52 -0
- package/dist/intent.js +220 -0
- package/dist/intent.js.map +1 -0
- package/dist/license.d.ts +11 -0
- package/dist/license.js +68 -0
- package/dist/license.js.map +1 -0
- package/dist/loader.d.ts +12 -0
- package/dist/loader.js +118 -0
- package/dist/loader.js.map +1 -0
- package/dist/merge.d.ts +28 -0
- package/dist/merge.js +412 -0
- package/dist/merge.js.map +1 -0
- package/dist/plan.d.ts +12 -0
- package/dist/plan.js +206 -0
- package/dist/plan.js.map +1 -0
- package/dist/python-data.json +575 -0
- package/dist/python-requirements.d.ts +7 -0
- package/dist/python-requirements.js +79 -0
- package/dist/python-requirements.js.map +1 -0
- package/dist/recommend.d.ts +27 -0
- package/dist/recommend.js +68 -0
- package/dist/recommend.js.map +1 -0
- package/dist/resolve.d.ts +22 -0
- package/dist/resolve.js +132 -0
- package/dist/resolve.js.map +1 -0
- package/dist/schema.d.ts +878 -0
- package/dist/schema.js +307 -0
- package/dist/schema.js.map +1 -0
- package/dist/tokens.d.ts +42 -0
- package/dist/tokens.js +90 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +61 -0
- package/registry/README.md +194 -0
- package/registry/agents/architecture-reviewer/agent.md +59 -0
- package/registry/agents/architecture-reviewer/agent.yaml +7 -0
- package/registry/agents/breaking-change-detector/agent.md +83 -0
- package/registry/agents/breaking-change-detector/agent.yaml +7 -0
- package/registry/agents/security-reviewer/agent.md +63 -0
- package/registry/agents/security-reviewer/agent.yaml +7 -0
- package/registry/agents/solid-reviewer/agent.md +61 -0
- package/registry/agents/solid-reviewer/agent.yaml +7 -0
- package/registry/agents/spec-consistency-checker/agent.md +70 -0
- package/registry/agents/spec-consistency-checker/agent.yaml +7 -0
- package/registry/agents/test-coverage-reviewer/agent.md +67 -0
- package/registry/agents/test-coverage-reviewer/agent.yaml +7 -0
- package/registry/commands/adr/command.md +80 -0
- package/registry/commands/adr/command.yaml +7 -0
- package/registry/commands/breaking/command.md +72 -0
- package/registry/commands/breaking/command.yaml +7 -0
- package/registry/commands/done/command.md +50 -0
- package/registry/commands/done/command.yaml +7 -0
- package/registry/commands/handoff/command.md +65 -0
- package/registry/commands/handoff/command.yaml +7 -0
- package/registry/commands/plan/command.md +81 -0
- package/registry/commands/plan/command.yaml +7 -0
- package/registry/commands/review/command.md +54 -0
- package/registry/commands/review/command.yaml +8 -0
- package/registry/commands/scope/command.md +45 -0
- package/registry/commands/scope/command.yaml +7 -0
- package/registry/commands/spec/command.md +81 -0
- package/registry/commands/spec/command.yaml +7 -0
- package/registry/commands/tasks/command.md +70 -0
- package/registry/commands/tasks/command.yaml +7 -0
- package/registry/commands/verify/command.md +43 -0
- package/registry/commands/verify/command.yaml +7 -0
- package/registry/hooks/_lib/config.ps1 +116 -0
- package/registry/hooks/_lib/config.sh +143 -0
- package/registry/hooks/_lib/defaults.json +76 -0
- package/registry/hooks/_lib/json_get.mjs +59 -0
- package/registry/hooks/_lib/json_get.py +60 -0
- package/registry/hooks/architecture-boundary-check/hook.ps1 +46 -0
- package/registry/hooks/architecture-boundary-check/hook.sh +49 -0
- package/registry/hooks/architecture-boundary-check/hook.yaml +18 -0
- package/registry/hooks/conventional-commit-check/hook.ps1 +68 -0
- package/registry/hooks/conventional-commit-check/hook.sh +68 -0
- package/registry/hooks/conventional-commit-check/hook.yaml +16 -0
- package/registry/hooks/format-on-write/hook.ps1 +36 -0
- package/registry/hooks/format-on-write/hook.sh +33 -0
- package/registry/hooks/format-on-write/hook.yaml +14 -0
- package/registry/hooks/guard-protected-paths/hook.ps1 +34 -0
- package/registry/hooks/guard-protected-paths/hook.sh +35 -0
- package/registry/hooks/guard-protected-paths/hook.yaml +14 -0
- package/registry/hooks/no-secrets/hook.ps1 +67 -0
- package/registry/hooks/no-secrets/hook.sh +56 -0
- package/registry/hooks/no-secrets/hook.yaml +16 -0
- package/registry/skills/adr-write/SKILL.md +127 -0
- package/registry/skills/adr-write/references/adr-template.md +143 -0
- package/registry/skills/adr-write/references/when-to-write-an-adr.md +74 -0
- package/registry/skills/adr-write/skill.yaml +7 -0
- package/registry/skills/architecture-guard/SKILL.md +150 -0
- package/registry/skills/architecture-guard/references/boundary-patterns.md +142 -0
- package/registry/skills/architecture-guard/references/violation-catalog.md +149 -0
- package/registry/skills/architecture-guard/skill.yaml +7 -0
- package/registry/skills/handoff/SKILL.md +125 -0
- package/registry/skills/handoff/references/agent-protocol.md +128 -0
- package/registry/skills/handoff/references/handoff-template.md +116 -0
- package/registry/skills/handoff/skill.yaml +7 -0
- package/registry/skills/onboard/SKILL.md +120 -0
- package/registry/skills/onboard/references/discovery-checklist.md +129 -0
- package/registry/skills/onboard/references/repo-map-template.md +120 -0
- package/registry/skills/onboard/skill.yaml +7 -0
- package/registry/skills/perf-budget/SKILL.md +152 -0
- package/registry/skills/perf-budget/references/budget-catalog.md +165 -0
- package/registry/skills/perf-budget/references/measurement-sources.md +163 -0
- package/registry/skills/perf-budget/skill.yaml +7 -0
- package/registry/skills/security-review/SKILL.md +145 -0
- package/registry/skills/security-review/references/owasp-checklist.md +190 -0
- package/registry/skills/security-review/references/secret-patterns.md +110 -0
- package/registry/skills/security-review/skill.yaml +7 -0
- package/registry/skills/spec-driven/SKILL.md +124 -0
- package/registry/skills/spec-driven/references/phase-gates.md +115 -0
- package/registry/skills/spec-driven/references/plan-template.md +98 -0
- package/registry/skills/spec-driven/references/spec-template.md +101 -0
- package/registry/skills/spec-driven/references/tasks-template.md +96 -0
- package/registry/skills/spec-driven/skill.yaml +7 -0
- package/registry/skills/test-first/SKILL.md +125 -0
- package/registry/skills/test-first/references/anti-patterns.md +178 -0
- package/registry/skills/test-first/references/test-design.md +156 -0
- package/registry/skills/test-first/skill.yaml +7 -0
- package/templates/README.md +104 -0
- package/templates/agent-kits/core/blueprint.yaml +39 -0
- package/templates/agent-kits/core/files/.agent/ACTIVE.md +25 -0
- package/templates/agent-kits/core/files/.agent/DECISIONS.md +27 -0
- package/templates/agent-kits/core/files/.agent/DELEGATION.md +30 -0
- package/templates/agent-kits/core/files/.agent/DONE.md +9 -0
- package/templates/agent-kits/core/files/.agent/HANDOFF.md +38 -0
- package/templates/agent-kits/core/files/.agent/delegate.mjs +352 -0
- package/templates/agent-kits/core/files/.agent/delegation-tools.json +1 -0
- package/templates/agent-kits/core/files/.agent/delegation.yaml +33 -0
- package/templates/agent-kits/core/files/AGENTS.md +107 -0
- package/templates/agent-kits/core/files/docs/ARCHITECTURE.md +26 -0
- package/templates/agent-kits/core/files/docs/adr/0001-record-architecture-decisions.md +27 -0
- package/templates/agent-kits/core/files/specs/000-template/plan.md +48 -0
- package/templates/agent-kits/core/files/specs/000-template/spec.md +45 -0
- package/templates/agent-kits/core/files/specs/000-template/tasks.md +21 -0
- package/templates/agent-kits/core/files/specs/README.md +32 -0
- package/templates/architectures/agentic-tool-loop/blueprint.yaml +137 -0
- package/templates/architectures/agentic-tool-loop/files/.importlinter +47 -0
- package/templates/architectures/agentic-tool-loop/files/docs/architecture/agentic-tool-loop.node.md +83 -0
- package/templates/architectures/agentic-tool-loop/files/docs/architecture/agentic-tool-loop.python.md +93 -0
- package/templates/architectures/agentic-tool-loop/files/package.json +6 -0
- package/templates/architectures/agentic-tool-loop/files/pyproject.toml +5 -0
- package/templates/architectures/agentic-tool-loop/files/scripts/check-agent-loop.mjs +227 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/__init__.py +20 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/loop.py +112 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/model.py +50 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/sandbox.py +62 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/settings.py +69 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/__init__.py +6 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/current_time.py +27 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/registry.py +44 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/spec.py +29 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/tools/write_note.py +36 -0
- package/templates/architectures/agentic-tool-loop/files/src/__solutionName.snake__/agent/trace.py +33 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/config.ts +65 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/index.ts +8 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/loop.ts +117 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/model.ts +35 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/sandbox.ts +52 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/tools/current-time.ts +13 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/tools/registry.ts +49 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/tools/types.ts +26 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/tools/write-note.ts +23 -0
- package/templates/architectures/agentic-tool-loop/files/src/agent/trace.ts +26 -0
- package/templates/architectures/agentic-tool-loop/files/tests/architecture/test_agent_loop.py +167 -0
- package/templates/architectures/bff/blueprint.yaml +83 -0
- package/templates/architectures/bff/files/docs/architecture/bff.node.md +115 -0
- package/templates/architectures/bff/files/docs/architecture/bff.typescript.md +113 -0
- package/templates/architectures/bff/files/scripts/check-bff-boundaries.mjs +223 -0
- package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/aggregate.ts +38 -0
- package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/config.ts +30 -0
- package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/dto.ts +21 -0
- package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/index.ts +6 -0
- package/templates/architectures/bff/files/src/bff/__primaryClient.kebab__/routes.ts +21 -0
- package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/aggregate.ts +23 -0
- package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/config.ts +26 -0
- package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/dto.ts +16 -0
- package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/index.ts +6 -0
- package/templates/architectures/bff/files/src/bff/__secondaryClient.kebab__/routes.ts +21 -0
- package/templates/architectures/bff/files/src/downstream/config.ts +35 -0
- package/templates/architectures/bff/files/src/downstream/http-client.ts +41 -0
- package/templates/architectures/bff/files/src/downstream/index.ts +9 -0
- package/templates/architectures/bff/files/src/downstream/orders-client.ts +23 -0
- package/templates/architectures/bff/files/src/downstream/profile-client.ts +18 -0
- package/templates/architectures/clean/blueprint.yaml +147 -0
- package/templates/architectures/clean/files/.importlinter +35 -0
- package/templates/architectures/clean/files/Directory.Packages.props +7 -0
- package/templates/architectures/clean/files/__solutionName.dot__.slnx +10 -0
- package/templates/architectures/clean/files/docs/architecture/clean.md +87 -0
- package/templates/architectures/clean/files/eslint.config.architecture.mjs +27 -0
- package/templates/architectures/clean/files/internal/application/doc.go +2 -0
- package/templates/architectures/clean/files/internal/application/ports/doc.go +2 -0
- package/templates/architectures/clean/files/internal/architecture/architecture_test.go +166 -0
- package/templates/architectures/clean/files/internal/architecture/doc.go +3 -0
- package/templates/architectures/clean/files/internal/domain/doc.go +2 -0
- package/templates/architectures/clean/files/internal/infrastructure/doc.go +2 -0
- package/templates/architectures/clean/files/pyproject.toml +2 -0
- package/templates/architectures/clean/files/scripts/check-architecture.mjs +68 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Application/Abstractions/.gitkeep +1 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Application/AssemblyMarker.cs +10 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Application/UseCases/.gitkeep +1 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Application/__solutionName.dot__.Application.csproj +14 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/AssemblyMarker.cs +10 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/Entities/.gitkeep +1 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/Events/.gitkeep +1 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/ValueObjects/.gitkeep +1 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Domain/__solutionName.dot__.Domain.csproj +11 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Infrastructure/AssemblyMarker.cs +10 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Infrastructure/External/.gitkeep +1 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Infrastructure/Persistence/.gitkeep +1 -0
- package/templates/architectures/clean/files/src/__solutionName.dot__.Infrastructure/__solutionName.dot__.Infrastructure.csproj +14 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/application/__init__.py +1 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/application/ports/__init__.py +1 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/application/use_cases/__init__.py +1 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/domain/__init__.py +1 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/domain/entities/__init__.py +1 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/domain/events/__init__.py +1 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/infrastructure/__init__.py +1 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/infrastructure/external/__init__.py +1 -0
- package/templates/architectures/clean/files/src/__solutionName.snake__/infrastructure/persistence/__init__.py +1 -0
- package/templates/architectures/clean/files/src/application/ports/README.md +1 -0
- package/templates/architectures/clean/files/src/application/use-cases/README.md +1 -0
- package/templates/architectures/clean/files/src/domain/README.md +1 -0
- package/templates/architectures/clean/files/src/infrastructure/README.md +1 -0
- package/templates/architectures/clean/files/tests/__solutionName.dot__.ArchitectureTests/DependencyRuleTests.cs +118 -0
- package/templates/architectures/clean/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +27 -0
- package/templates/architectures/cqrs/blueprint.yaml +134 -0
- package/templates/architectures/cqrs/files/.importlinter +26 -0
- package/templates/architectures/cqrs/files/Directory.Packages.props +7 -0
- package/templates/architectures/cqrs/files/__solutionName.dot__.slnx +11 -0
- package/templates/architectures/cqrs/files/docs/architecture/cqrs.dotnet.md +116 -0
- package/templates/architectures/cqrs/files/docs/architecture/cqrs.node.md +117 -0
- package/templates/architectures/cqrs/files/docs/architecture/cqrs.python.md +107 -0
- package/templates/architectures/cqrs/files/eslint.config.cqrs.mjs +29 -0
- package/templates/architectures/cqrs/files/pyproject.toml +2 -0
- package/templates/architectures/cqrs/files/scripts/check-cqrs-boundaries.mjs +132 -0
- package/templates/architectures/cqrs/files/src/__contextName.kebab__/commands/index.ts +15 -0
- package/templates/architectures/cqrs/files/src/__contextName.kebab__/domain/index.ts +10 -0
- package/templates/architectures/cqrs/files/src/__contextName.kebab__/queries/index.ts +13 -0
- package/templates/architectures/cqrs/files/src/__contextName.kebab__/read-models/index.ts +7 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.Abstractions/AssemblyMarker.cs +9 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.Abstractions/ICommandHandler.cs +12 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.Abstractions/IQueryHandler.cs +10 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.Abstractions/__solutionName.dot__.Abstractions.csproj +11 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Commands/AssemblyMarker.cs +9 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Commands/Handlers/.gitkeep +2 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Commands/__solutionName.dot__.__contextName.pascal__.Commands.csproj +15 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Domain/Aggregates/.gitkeep +2 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Domain/AssemblyMarker.cs +9 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Domain/__solutionName.dot__.__contextName.pascal__.Domain.csproj +11 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Queries/AssemblyMarker.cs +9 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Queries/Handlers/.gitkeep +2 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Queries/ReadModels/.gitkeep +2 -0
- package/templates/architectures/cqrs/files/src/__solutionName.dot__.__contextName.pascal__.Queries/__solutionName.dot__.__contextName.pascal__.Queries.csproj +14 -0
- package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/__init__.py +6 -0
- package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/commands/__init__.py +15 -0
- package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/domain/__init__.py +9 -0
- package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/queries/__init__.py +14 -0
- package/templates/architectures/cqrs/files/src/__solutionName.snake__/__contextName.snake__/read_models/__init__.py +14 -0
- package/templates/architectures/cqrs/files/tests/ArchitectureTests/ArchitectureTests.csproj +33 -0
- package/templates/architectures/cqrs/files/tests/ArchitectureTests/CqrsBoundaryTests.cs +104 -0
- package/templates/architectures/event-driven/blueprint.yaml +163 -0
- package/templates/architectures/event-driven/files/.importlinter +43 -0
- package/templates/architectures/event-driven/files/Directory.Packages.props +11 -0
- package/templates/architectures/event-driven/files/__solutionName.dot__.slnx +11 -0
- package/templates/architectures/event-driven/files/docs/architecture/event-driven.dotnet.md +117 -0
- package/templates/architectures/event-driven/files/docs/architecture/event-driven.node.md +98 -0
- package/templates/architectures/event-driven/files/docs/architecture/event-driven.python.md +100 -0
- package/templates/architectures/event-driven/files/scripts/check-event-boundaries.mjs +181 -0
- package/templates/architectures/event-driven/files/src/EventCatalog/EventCatalog.csproj +11 -0
- package/templates/architectures/event-driven/files/src/EventCatalog/EventContract.cs +36 -0
- package/templates/architectures/event-driven/files/src/EventCatalog/EventEnvelope.cs +10 -0
- package/templates/architectures/event-driven/files/src/EventCatalog/EventRegistry.cs +16 -0
- package/templates/architectures/event-driven/files/src/EventCatalog/EventSchemaException.cs +19 -0
- package/templates/architectures/event-driven/files/src/EventCatalog/__eventDomain.pascal__/__firstEvent.pascal__V1.cs +20 -0
- package/templates/architectures/event-driven/files/src/EventHandlers/EventHandlers.csproj +14 -0
- package/templates/architectures/event-driven/files/src/EventHandlers/__firstHandler.pascal__/__firstHandler.pascal__Handler.cs +32 -0
- package/templates/architectures/event-driven/files/src/EventHandlers/__secondHandler.pascal__/__secondHandler.pascal__Handler.cs +30 -0
- package/templates/architectures/event-driven/files/src/EventPublishers/EventPublishers.csproj +14 -0
- package/templates/architectures/event-driven/files/src/EventPublishers/__eventDomain.pascal__/__eventDomain.pascal__Publisher.cs +27 -0
- package/templates/architectures/event-driven/files/src/Messaging/Adapters/InMemoryEventBroker.cs +107 -0
- package/templates/architectures/event-driven/files/src/Messaging/BrokerOptions.cs +19 -0
- package/templates/architectures/event-driven/files/src/Messaging/IEventBroker.cs +6 -0
- package/templates/architectures/event-driven/files/src/Messaging/IEventPublisher.cs +9 -0
- package/templates/architectures/event-driven/files/src/Messaging/IEventSubscriber.cs +11 -0
- package/templates/architectures/event-driven/files/src/Messaging/Messaging.csproj +18 -0
- package/templates/architectures/event-driven/files/src/Messaging/MessagingRegistration.cs +36 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/__init__.py +17 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/adapters/__init__.py +1 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/adapters/in_memory.py +61 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/config.py +42 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/factory.py +13 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/broker/port.py +25 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/eventing.py +26 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/__eventDomain.snake__/__firstEvent.snake__/__init__.py +5 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/__eventDomain.snake__/__firstEvent.snake__/v1.py +34 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/__eventDomain.snake__/__init__.py +1 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/__init__.py +27 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/contract.py +35 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/events/envelope.py +24 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/handlers/__firstHandler.snake__/__init__.py +30 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/handlers/__init__.py +1 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/handlers/__secondHandler.snake__/__init__.py +25 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/publishers/__eventDomain.snake__.py +17 -0
- package/templates/architectures/event-driven/files/src/__solutionName.snake__/publishers/__init__.py +5 -0
- package/templates/architectures/event-driven/files/src/bootstrap/events.ts +24 -0
- package/templates/architectures/event-driven/files/src/broker/adapters/in-memory-broker.ts +63 -0
- package/templates/architectures/event-driven/files/src/broker/config.ts +39 -0
- package/templates/architectures/event-driven/files/src/broker/factory.ts +13 -0
- package/templates/architectures/event-driven/files/src/broker/index.ts +6 -0
- package/templates/architectures/event-driven/files/src/broker/port.ts +15 -0
- package/templates/architectures/event-driven/files/src/events/__eventDomain.kebab__/__firstEvent.kebab__/v1.ts +20 -0
- package/templates/architectures/event-driven/files/src/events/contract.ts +36 -0
- package/templates/architectures/event-driven/files/src/events/envelope.ts +20 -0
- package/templates/architectures/event-driven/files/src/events/index.ts +17 -0
- package/templates/architectures/event-driven/files/src/handlers/__firstHandler.kebab__/index.ts +21 -0
- package/templates/architectures/event-driven/files/src/handlers/__secondHandler.kebab__/index.ts +17 -0
- package/templates/architectures/event-driven/files/src/publishers/__eventDomain.kebab__.publisher.ts +20 -0
- package/templates/architectures/event-driven/files/tests/EventArchitectureTests/EventArchitectureTests.csproj +31 -0
- package/templates/architectures/event-driven/files/tests/EventArchitectureTests/EventBoundaryTests.cs +121 -0
- package/templates/architectures/event-driven/files/tests/architecture/test_event_boundaries.py +161 -0
- package/templates/architectures/feature-sliced-design/blueprint.yaml +121 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/app/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/entities/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/features/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/pages/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/shared/api/index.ts +3 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/shared/config/index.ts +3 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/shared/lib/index.ts +3 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/shared/ui/index.ts +3 -0
- package/templates/architectures/feature-sliced-design/files/apps/__appName.kebab__/src/widgets/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/docs/architecture.md +148 -0
- package/templates/architectures/feature-sliced-design/files/package.json +6 -0
- package/templates/architectures/feature-sliced-design/files/scripts/check-fsd-boundaries.mjs +210 -0
- package/templates/architectures/feature-sliced-design/files/src/_app/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/src/_pages/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/src/app/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/src/entities/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/src/features/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/src/pages/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/src/shared/api/index.ts +3 -0
- package/templates/architectures/feature-sliced-design/files/src/shared/config/index.ts +3 -0
- package/templates/architectures/feature-sliced-design/files/src/shared/lib/index.ts +3 -0
- package/templates/architectures/feature-sliced-design/files/src/shared/ui/index.ts +3 -0
- package/templates/architectures/feature-sliced-design/files/src/widgets/.gitkeep +1 -0
- package/templates/architectures/feature-sliced-design/files/steiger.config.js +21 -0
- package/templates/architectures/hexagonal/blueprint.yaml +146 -0
- package/templates/architectures/hexagonal/files/.importlinter +33 -0
- package/templates/architectures/hexagonal/files/Directory.Packages.props +8 -0
- package/templates/architectures/hexagonal/files/__solutionName.dot__.slnx +13 -0
- package/templates/architectures/hexagonal/files/docs/architecture/hexagonal.md +102 -0
- package/templates/architectures/hexagonal/files/internal/adapters/inbound/rest/doc.go +2 -0
- package/templates/architectures/hexagonal/files/internal/adapters/outbound/memory/doc.go +2 -0
- package/templates/architectures/hexagonal/files/internal/adapters/outbound/postgres/doc.go +2 -0
- package/templates/architectures/hexagonal/files/internal/application/doc.go +2 -0
- package/templates/architectures/hexagonal/files/internal/architecture/architecture_test.go +150 -0
- package/templates/architectures/hexagonal/files/internal/architecture/doc.go +2 -0
- package/templates/architectures/hexagonal/files/internal/bootstrap/doc.go +2 -0
- package/templates/architectures/hexagonal/files/internal/domain/doc.go +2 -0
- package/templates/architectures/hexagonal/files/internal/ports/inbound/doc.go +2 -0
- package/templates/architectures/hexagonal/files/internal/ports/outbound/doc.go +2 -0
- package/templates/architectures/hexagonal/files/pyproject.toml +2 -0
- package/templates/architectures/hexagonal/files/scripts/check-architecture.mjs +104 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Inbound.Http/HttpAdapterMarker.cs +4 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Inbound.Http/__solutionName.dot__.Adapters.Inbound.Http.csproj +15 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Outbound.InMemory/InMemoryAdapterMarker.cs +4 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Outbound.InMemory/__solutionName.dot__.Adapters.Outbound.InMemory.csproj +15 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Outbound.Persistence/PersistenceAdapterMarker.cs +4 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Adapters.Outbound.Persistence/__solutionName.dot__.Adapters.Outbound.Persistence.csproj +15 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/ApplicationMarker.cs +4 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/Ports/Inbound/.gitkeep +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/Ports/Outbound/.gitkeep +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/UseCases/.gitkeep +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Application/__solutionName.dot__.Application.csproj +15 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Bootstrap/CompositionRoot.cs +8 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Bootstrap/__solutionName.dot__.Bootstrap.csproj +18 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Domain/DomainMarker.cs +4 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.dot__.Domain/__solutionName.dot__.Domain.csproj +12 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/inbound/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/inbound/http/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/outbound/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/outbound/in_memory/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/adapters/outbound/persistence/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/application/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/bootstrap/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/domain/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/ports/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/ports/inbound/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/__solutionName.snake__/ports/outbound/__init__.py +1 -0
- package/templates/architectures/hexagonal/files/src/adapters/inbound/http/index.ts +2 -0
- package/templates/architectures/hexagonal/files/src/adapters/outbound/in-memory/index.ts +2 -0
- package/templates/architectures/hexagonal/files/src/adapters/outbound/persistence/index.ts +2 -0
- package/templates/architectures/hexagonal/files/src/application/index.ts +2 -0
- package/templates/architectures/hexagonal/files/src/bootstrap/index.ts +2 -0
- package/templates/architectures/hexagonal/files/src/domain/index.ts +2 -0
- package/templates/architectures/hexagonal/files/src/ports/inbound/index.ts +2 -0
- package/templates/architectures/hexagonal/files/src/ports/outbound/index.ts +2 -0
- package/templates/architectures/hexagonal/files/tests/ArchitectureTests/ArchitectureTests.csproj +34 -0
- package/templates/architectures/hexagonal/files/tests/ArchitectureTests/HexagonBoundaryTests.cs +135 -0
- package/templates/architectures/lakehouse/blueprint.yaml +103 -0
- package/templates/architectures/lakehouse/files/.importlinter +51 -0
- package/templates/architectures/lakehouse/files/docs/architecture/lakehouse.python.md +134 -0
- package/templates/architectures/lakehouse/files/pyproject.toml +5 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/__init__.py +20 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/catalog/__init__.py +21 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/catalog/_delta.py +155 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/catalog/_iceberg.py +214 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/maintenance/__init__.py +9 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/maintenance/__main__.py +31 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/maintenance/jobs.py +38 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/ports.py +58 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/queries/__init__.py +13 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/queries/reads.py +30 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/schema.py +66 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/settings.py +61 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/tables/__firstTable.snake__.py +22 -0
- package/templates/architectures/lakehouse/files/src/__solutionName.snake__/lakehouse/tables/__init__.py +28 -0
- package/templates/architectures/lakehouse/files/tests/architecture/test_lakehouse_boundaries.py +155 -0
- package/templates/architectures/layered/blueprint.yaml +159 -0
- package/templates/architectures/layered/files/.importlinter +18 -0
- package/templates/architectures/layered/files/Directory.Build.targets +10 -0
- package/templates/architectures/layered/files/Directory.Packages.props +7 -0
- package/templates/architectures/layered/files/__solutionName.dot__.slnx +9 -0
- package/templates/architectures/layered/files/architecture.layers.json +19 -0
- package/templates/architectures/layered/files/docs/architecture/layered.md +94 -0
- package/templates/architectures/layered/files/internal/architecture/doc.go +3 -0
- package/templates/architectures/layered/files/internal/architecture/layers_test.go +138 -0
- package/templates/architectures/layered/files/internal/business/doc.go +3 -0
- package/templates/architectures/layered/files/internal/data/doc.go +3 -0
- package/templates/architectures/layered/files/internal/presentation/doc.go +4 -0
- package/templates/architectures/layered/files/pyproject.toml +2 -0
- package/templates/architectures/layered/files/scripts/check-layers.mjs +125 -0
- package/templates/architectures/layered/files/src/__solutionName.dot__.Business/AssemblyMarker.cs +7 -0
- package/templates/architectures/layered/files/src/__solutionName.dot__.Business/__solutionName.dot__.Business.csproj +15 -0
- package/templates/architectures/layered/files/src/__solutionName.dot__.Data/AssemblyMarker.cs +7 -0
- package/templates/architectures/layered/files/src/__solutionName.dot__.Data/__solutionName.dot__.Data.csproj +10 -0
- package/templates/architectures/layered/files/src/__solutionName.snake__/business/__init__.py +1 -0
- package/templates/architectures/layered/files/src/__solutionName.snake__/data/__init__.py +1 -0
- package/templates/architectures/layered/files/src/__solutionName.snake__/presentation/__init__.py +1 -0
- package/templates/architectures/layered/files/src/business/README.md +1 -0
- package/templates/architectures/layered/files/src/data/README.md +1 -0
- package/templates/architectures/layered/files/src/presentation/README.md +1 -0
- package/templates/architectures/layered/files/src/shared/README.md +1 -0
- package/templates/architectures/layered/files/tests/__solutionName.dot__.ArchitectureTests/LayerBoundaryTests.cs +151 -0
- package/templates/architectures/layered/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +27 -0
- package/templates/architectures/llm-workflow/blueprint.yaml +129 -0
- package/templates/architectures/llm-workflow/files/.importlinter +34 -0
- package/templates/architectures/llm-workflow/files/__promptsDir__/README.md +26 -0
- package/templates/architectures/llm-workflow/files/__promptsDir__/__firstStep.kebab__/__promptVersion__.md +7 -0
- package/templates/architectures/llm-workflow/files/docs/architecture/llm-workflow.python.md +133 -0
- package/templates/architectures/llm-workflow/files/docs/architecture/llm-workflow.typescript.md +124 -0
- package/templates/architectures/llm-workflow/files/package.json +9 -0
- package/templates/architectures/llm-workflow/files/scripts/check-llm-workflow.mjs +200 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/__init__.py +5 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/chains/__init__.py +5 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/chains/__workflowName.snake__.py +19 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/evals/__init__.py +1 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/evals/assertions.py +82 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/evals/goldens.jsonl +4 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/evals/runner.py +64 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/parallel/__init__.py +5 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/parallel/gather.py +28 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/ports/__init__.py +38 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/ports/llm.py +41 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/ports/stub.py +27 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/prompts.py +22 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/routing/__init__.py +5 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/routing/route.py +47 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/settings.py +60 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/steps/__firstStep.snake__.py +24 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/steps/__init__.py +6 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/steps/normalize.py +11 -0
- package/templates/architectures/llm-workflow/files/src/__solutionName.snake__/workflow/types.py +40 -0
- package/templates/architectures/llm-workflow/files/src/workflow/chains/__workflowName.kebab__.ts +14 -0
- package/templates/architectures/llm-workflow/files/src/workflow/evals/assert.ts +59 -0
- package/templates/architectures/llm-workflow/files/src/workflow/evals/goldens.jsonl +4 -0
- package/templates/architectures/llm-workflow/files/src/workflow/evals/run.ts +60 -0
- package/templates/architectures/llm-workflow/files/src/workflow/parallel/gather.ts +25 -0
- package/templates/architectures/llm-workflow/files/src/workflow/ports/index.ts +34 -0
- package/templates/architectures/llm-workflow/files/src/workflow/ports/llm.ts +33 -0
- package/templates/architectures/llm-workflow/files/src/workflow/ports/stub.ts +23 -0
- package/templates/architectures/llm-workflow/files/src/workflow/prompts.ts +27 -0
- package/templates/architectures/llm-workflow/files/src/workflow/routing/route.ts +38 -0
- package/templates/architectures/llm-workflow/files/src/workflow/settings.ts +44 -0
- package/templates/architectures/llm-workflow/files/src/workflow/steps/__firstStep.kebab__.ts +19 -0
- package/templates/architectures/llm-workflow/files/src/workflow/steps/index.ts +3 -0
- package/templates/architectures/llm-workflow/files/src/workflow/steps/normalize.ts +8 -0
- package/templates/architectures/llm-workflow/files/src/workflow/types.ts +29 -0
- package/templates/architectures/llm-workflow/files/tests/test_workflow_boundaries.py +171 -0
- package/templates/architectures/llm-workflow/files/tests/test_workflow_goldens.py +30 -0
- package/templates/architectures/medallion/blueprint.yaml +91 -0
- package/templates/architectures/medallion/files/.importlinter +31 -0
- package/templates/architectures/medallion/files/contracts/bronze.contract.toml +16 -0
- package/templates/architectures/medallion/files/contracts/gold.contract.toml +21 -0
- package/templates/architectures/medallion/files/contracts/silver.contract.toml +31 -0
- package/templates/architectures/medallion/files/docs/architecture/medallion.python.md +104 -0
- package/templates/architectures/medallion/files/pyproject.toml +2 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/__init__.py +5 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/bronze/__init__.py +5 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/bronze/ingest.py +41 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/config.py +48 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/contracts.py +166 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/gold/__init__.py +5 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/gold/aggregate.py +40 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/io.py +28 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/run.py +40 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/silver/__init__.py +6 -0
- package/templates/architectures/medallion/files/src/__solutionName.snake__/pipelines/silver/conform.py +53 -0
- package/templates/architectures/medallion/files/tests/architecture/test_layer_contracts.py +72 -0
- package/templates/architectures/medallion/files/tests/architecture/test_medallion_boundaries.py +166 -0
- package/templates/architectures/micro-frontends/blueprint.yaml +124 -0
- package/templates/architectures/micro-frontends/files/apps/host/package.json +10 -0
- package/templates/architectures/micro-frontends/files/apps/host/remotes.example.json +9 -0
- package/templates/architectures/micro-frontends/files/apps/host/src/config.ts +34 -0
- package/templates/architectures/micro-frontends/files/apps/host/src/loaders/import-map.ts +34 -0
- package/templates/architectures/micro-frontends/files/apps/host/src/loaders/module-federation.ts +29 -0
- package/templates/architectures/micro-frontends/files/apps/host/src/remote-loader.ts +45 -0
- package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/module-federation.config.mjs +19 -0
- package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/package.json +15 -0
- package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/src/config.ts +28 -0
- package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/src/index.ts +5 -0
- package/templates/architectures/micro-frontends/files/apps/remotes/__remoteName.kebab__/src/mount.ts +32 -0
- package/templates/architectures/micro-frontends/files/docs/architecture/micro-frontends.md +161 -0
- package/templates/architectures/micro-frontends/files/package.json +14 -0
- package/templates/architectures/micro-frontends/files/packages/design-system/README.md +27 -0
- package/templates/architectures/micro-frontends/files/packages/design-system/package.json +11 -0
- package/templates/architectures/micro-frontends/files/packages/design-system/src/index.ts +10 -0
- package/templates/architectures/micro-frontends/files/packages/design-system/src/tokens.ts +20 -0
- package/templates/architectures/micro-frontends/files/packages/host-contract/package.json +11 -0
- package/templates/architectures/micro-frontends/files/packages/host-contract/src/index.ts +18 -0
- package/templates/architectures/micro-frontends/files/scripts/check-mfe-boundaries.mjs +199 -0
- package/templates/architectures/microservices/blueprint.yaml +160 -0
- package/templates/architectures/microservices/files/.importlinter +22 -0
- package/templates/architectures/microservices/files/Directory.Packages.props +8 -0
- package/templates/architectures/microservices/files/__solutionName.dot__.slnx +9 -0
- package/templates/architectures/microservices/files/contracts/__firstService.kebab__/package.json +8 -0
- package/templates/architectures/microservices/files/contracts/__firstService.kebab__/src/index.ts +32 -0
- package/templates/architectures/microservices/files/contracts/__firstService.lower__/contract.go +35 -0
- package/templates/architectures/microservices/files/contracts/__solutionName.pascal__.Contracts.__firstService.pascal__/__firstService.pascal__Contract.cs +26 -0
- package/templates/architectures/microservices/files/contracts/__solutionName.pascal__.Contracts.__firstService.pascal__/__solutionName.pascal__.Contracts.__firstService.pascal__.csproj +11 -0
- package/templates/architectures/microservices/files/deploy/__firstService.kebab__/Dockerfile +16 -0
- package/templates/architectures/microservices/files/docs/architecture/microservices.dotnet.md +91 -0
- package/templates/architectures/microservices/files/docs/architecture/microservices.go.md +77 -0
- package/templates/architectures/microservices/files/docs/architecture/microservices.node.md +88 -0
- package/templates/architectures/microservices/files/docs/architecture/microservices.python.md +92 -0
- package/templates/architectures/microservices/files/internal/architecture/boundary_test.go +139 -0
- package/templates/architectures/microservices/files/package.json +9 -0
- package/templates/architectures/microservices/files/pyproject.toml +2 -0
- package/templates/architectures/microservices/files/scripts/check-service-boundaries.mjs +200 -0
- package/templates/architectures/microservices/files/services/__firstService.kebab__/Dockerfile +19 -0
- package/templates/architectures/microservices/files/services/__firstService.kebab__/package.json +9 -0
- package/templates/architectures/microservices/files/services/__firstService.kebab__/src/config.ts +50 -0
- package/templates/architectures/microservices/files/services/__firstService.kebab__/src/index.ts +26 -0
- package/templates/architectures/microservices/files/services/__firstService.lower__/Dockerfile +18 -0
- package/templates/architectures/microservices/files/services/__firstService.lower__/internal/config/config.go +45 -0
- package/templates/architectures/microservices/files/services/__firstService.lower__/main.go +23 -0
- package/templates/architectures/microservices/files/services/__solutionName.pascal__.Services.__firstService.pascal__/Dockerfile +17 -0
- package/templates/architectures/microservices/files/services/__solutionName.pascal__.Services.__firstService.pascal__/ServiceAssemblyMarker.cs +10 -0
- package/templates/architectures/microservices/files/services/__solutionName.pascal__.Services.__firstService.pascal__/ServiceOptions.cs +28 -0
- package/templates/architectures/microservices/files/services/__solutionName.pascal__.Services.__firstService.pascal__/__solutionName.pascal__.Services.__firstService.pascal__.csproj +14 -0
- package/templates/architectures/microservices/files/src/__solutionName.snake__/contracts/__firstService.snake__/__init__.py +42 -0
- package/templates/architectures/microservices/files/src/__solutionName.snake__/contracts/__init__.py +5 -0
- package/templates/architectures/microservices/files/src/__solutionName.snake__/services/__firstService.snake__/__init__.py +5 -0
- package/templates/architectures/microservices/files/src/__solutionName.snake__/services/__firstService.snake__/config.py +54 -0
- package/templates/architectures/microservices/files/src/__solutionName.snake__/services/__firstService.snake__/service.py +21 -0
- package/templates/architectures/microservices/files/src/__solutionName.snake__/services/__init__.py +5 -0
- package/templates/architectures/microservices/files/tests/ArchitectureTests/ArchitectureTests.csproj +29 -0
- package/templates/architectures/microservices/files/tests/ArchitectureTests/ServiceBoundaryTests.cs +102 -0
- package/templates/architectures/microservices/files/tests/architecture/test_service_boundaries.py +120 -0
- package/templates/architectures/modular-monolith/blueprint.yaml +111 -0
- package/templates/architectures/modular-monolith/files/.importlinter +22 -0
- package/templates/architectures/modular-monolith/files/Directory.Packages.props +9 -0
- package/templates/architectures/modular-monolith/files/__solutionName.dot__.slnx +9 -0
- package/templates/architectures/modular-monolith/files/docs/architecture/modular-monolith.dotnet.md +54 -0
- package/templates/architectures/modular-monolith/files/docs/architecture/modular-monolith.go.md +50 -0
- package/templates/architectures/modular-monolith/files/docs/architecture/modular-monolith.node.md +56 -0
- package/templates/architectures/modular-monolith/files/docs/architecture/modular-monolith.python.md +54 -0
- package/templates/architectures/modular-monolith/files/internal/architecture/boundary_test.go +151 -0
- package/templates/architectures/modular-monolith/files/internal/modules/__moduleName.lower__/__moduleName.lower__.go +56 -0
- package/templates/architectures/modular-monolith/files/internal/modules/__moduleName.lower__/internal/store/store.go +12 -0
- package/templates/architectures/modular-monolith/files/internal/shared/events/bus.go +60 -0
- package/templates/architectures/modular-monolith/files/scripts/check-module-boundaries.mjs +185 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/Api/I__moduleName.pascal__Module.cs +14 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/Api/__moduleName.pascal__Events.cs +6 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/Api/__moduleName.pascal__ModuleRegistration.cs +18 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/Internal/__moduleName.pascal__Service.cs +19 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.Modules.__moduleName.pascal__/__solutionName.dot__.Modules.__moduleName.pascal__.csproj +16 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/Events/EventBusRegistration.cs +14 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/Events/IEventBus.cs +15 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/Events/IIntegrationEvent.cs +8 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/Events/InProcessEventBus.cs +23 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.dot__.SharedKernel/__solutionName.dot__.SharedKernel.csproj +12 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__init__.py +1 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/__init__.py +1 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/api/__init__.py +15 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/api/contracts.py +27 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/api/factory.py +11 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/internal/__init__.py +1 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/modules/__moduleName.snake__/internal/service.py +20 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/shared/__init__.py +1 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/shared/events/__init__.py +3 -0
- package/templates/architectures/modular-monolith/files/src/__solutionName.snake__/shared/events/bus.py +43 -0
- package/templates/architectures/modular-monolith/files/src/modules/__moduleName.kebab__/api/contracts.ts +19 -0
- package/templates/architectures/modular-monolith/files/src/modules/__moduleName.kebab__/api/index.ts +18 -0
- package/templates/architectures/modular-monolith/files/src/modules/__moduleName.kebab__/internal/__moduleName.kebab__.service.ts +24 -0
- package/templates/architectures/modular-monolith/files/src/shared/events/event-bus.ts +34 -0
- package/templates/architectures/modular-monolith/files/src/shared/events/index.ts +2 -0
- package/templates/architectures/modular-monolith/files/tests/__solutionName.dot__.ArchitectureTests/ModuleBoundaryTests.cs +102 -0
- package/templates/architectures/modular-monolith/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +30 -0
- package/templates/architectures/modular-monolith/files/tests/architecture/test_module_boundaries.py +114 -0
- package/templates/architectures/monolith/blueprint.yaml +141 -0
- package/templates/architectures/monolith/files/.importlinter +14 -0
- package/templates/architectures/monolith/files/Directory.Packages.props +8 -0
- package/templates/architectures/monolith/files/__solutionName.dot__.slnx +5 -0
- package/templates/architectures/monolith/files/docs/architecture/monolith.dotnet.md +78 -0
- package/templates/architectures/monolith/files/docs/architecture/monolith.go.md +69 -0
- package/templates/architectures/monolith/files/docs/architecture/monolith.node.md +70 -0
- package/templates/architectures/monolith/files/docs/architecture/monolith.python.md +71 -0
- package/templates/architectures/monolith/files/internal/architecture/boundary_test.go +141 -0
- package/templates/architectures/monolith/files/internal/features/__featureName.lower__/__featureName.lower__.go +37 -0
- package/templates/architectures/monolith/files/internal/features/__featureName.lower__/internal/store/store.go +14 -0
- package/templates/architectures/monolith/files/internal/features/features.go +18 -0
- package/templates/architectures/monolith/files/internal/shared/apperr/apperr.go +17 -0
- package/templates/architectures/monolith/files/pyproject.toml +2 -0
- package/templates/architectures/monolith/files/scripts/check-monolith-boundaries.mjs +187 -0
- package/templates/architectures/monolith/files/src/__solutionName.dot__.Api/Features/__featureName.pascal__/Internal/__featureName.pascal__Service.cs +12 -0
- package/templates/architectures/monolith/files/src/__solutionName.dot__.Api/Features/__featureName.pascal__/__featureName.pascal__Feature.cs +13 -0
- package/templates/architectures/monolith/files/src/__solutionName.dot__.Api/Features/__featureName.pascal__/__featureName.pascal__Registration.cs +13 -0
- package/templates/architectures/monolith/files/src/__solutionName.dot__.Api/Kernel/AppException.cs +30 -0
- package/templates/architectures/monolith/files/src/__solutionName.pascal__.Api/Features/__featureName.pascal__/Internal/__featureName.pascal__Service.cs +12 -0
- package/templates/architectures/monolith/files/src/__solutionName.pascal__.Api/Features/__featureName.pascal__/__featureName.pascal__Feature.cs +13 -0
- package/templates/architectures/monolith/files/src/__solutionName.pascal__.Api/Features/__featureName.pascal__/__featureName.pascal__Registration.cs +13 -0
- package/templates/architectures/monolith/files/src/__solutionName.pascal__.Api/Kernel/AppException.cs +30 -0
- package/templates/architectures/monolith/files/src/__solutionName.snake__/features/__featureName.snake__/__init__.py +31 -0
- package/templates/architectures/monolith/files/src/__solutionName.snake__/features/__featureName.snake__/service.py +22 -0
- package/templates/architectures/monolith/files/src/__solutionName.snake__/features/__init__.py +14 -0
- package/templates/architectures/monolith/files/src/__solutionName.snake__/shared/__init__.py +11 -0
- package/templates/architectures/monolith/files/src/__solutionName.snake__/shared/errors.py +13 -0
- package/templates/architectures/monolith/files/src/features/__featureName.kebab__/__featureName.kebab__.service.ts +15 -0
- package/templates/architectures/monolith/files/src/features/__featureName.kebab__/index.ts +20 -0
- package/templates/architectures/monolith/files/src/features/index.ts +11 -0
- package/templates/architectures/monolith/files/src/shared/errors.ts +13 -0
- package/templates/architectures/monolith/files/src/shared/index.ts +7 -0
- package/templates/architectures/monolith/files/tests/ArchitectureTests/ArchitectureTests.csproj +32 -0
- package/templates/architectures/monolith/files/tests/ArchitectureTests/FeatureBoundaryTests.cs +129 -0
- package/templates/architectures/monolith/files/tests/architecture/test_monolith_boundaries.py +136 -0
- package/templates/architectures/multi-agent/blueprint.yaml +97 -0
- package/templates/architectures/multi-agent/files/.importlinter +36 -0
- package/templates/architectures/multi-agent/files/docs/architecture/multi-agent.node.md +110 -0
- package/templates/architectures/multi-agent/files/docs/architecture/multi-agent.python.md +94 -0
- package/templates/architectures/multi-agent/files/docs/architecture/multi-agent.typescript.md +102 -0
- package/templates/architectures/multi-agent/files/pyproject.toml +2 -0
- package/templates/architectures/multi-agent/files/scripts/check-agent-boundaries.mjs +207 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/__init__.py +5 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/config.py +52 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/contracts.py +62 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/orchestrator/__init__.py +9 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/orchestrator/budget.py +45 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/orchestrator/fanout.py +63 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/orchestrator/lead.py +92 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/runtime/__init__.py +5 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/runtime/runner.py +48 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/workers/__init__.py +27 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/workers/__workerName.snake__/__init__.py +9 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/workers/__workerName.snake__/prompt.py +31 -0
- package/templates/architectures/multi-agent/files/src/__solutionName.snake__/agents/workers/__workerName.snake__/worker.py +28 -0
- package/templates/architectures/multi-agent/files/src/agents/config.ts +46 -0
- package/templates/architectures/multi-agent/files/src/agents/contracts/index.ts +4 -0
- package/templates/architectures/multi-agent/files/src/agents/contracts/result.ts +50 -0
- package/templates/architectures/multi-agent/files/src/agents/contracts/task.ts +19 -0
- package/templates/architectures/multi-agent/files/src/agents/orchestrator/budget.ts +51 -0
- package/templates/architectures/multi-agent/files/src/agents/orchestrator/fanout.ts +67 -0
- package/templates/architectures/multi-agent/files/src/agents/orchestrator/index.ts +4 -0
- package/templates/architectures/multi-agent/files/src/agents/orchestrator/lead.ts +77 -0
- package/templates/architectures/multi-agent/files/src/agents/runtime/index.ts +3 -0
- package/templates/architectures/multi-agent/files/src/agents/runtime/runner.ts +36 -0
- package/templates/architectures/multi-agent/files/src/agents/workers/README.md +13 -0
- package/templates/architectures/multi-agent/files/src/agents/workers/__workerName.kebab__/prompt.ts +22 -0
- package/templates/architectures/multi-agent/files/src/agents/workers/__workerName.kebab__/worker.ts +25 -0
- package/templates/architectures/multi-agent/files/src/agents/workers/index.ts +15 -0
- package/templates/architectures/multi-agent/files/tests/architecture/test_agent_boundaries.py +184 -0
- package/templates/architectures/mvc-mvvm/blueprint.yaml +156 -0
- package/templates/architectures/mvc-mvvm/files/.importlinter +25 -0
- package/templates/architectures/mvc-mvvm/files/Directory.Packages.props +8 -0
- package/templates/architectures/mvc-mvvm/files/__solutionName.dot__.slnx +8 -0
- package/templates/architectures/mvc-mvvm/files/docs/architecture/mvc-mvvm.dotnet.md +84 -0
- package/templates/architectures/mvc-mvvm/files/docs/architecture/mvc-mvvm.python.md +69 -0
- package/templates/architectures/mvc-mvvm/files/docs/architecture/mvc-mvvm.typescript.md +85 -0
- package/templates/architectures/mvc-mvvm/files/scripts/check-mvvm-boundaries.mjs +234 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/Models/__firstScreen.pascal__.cs +8 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/ViewModels/RelayCommand.cs +18 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/ViewModels/ViewModelBase.cs +27 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/ViewModels/__firstScreen.pascal__ViewModel.cs +55 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/Views/README.md +12 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.dot__.Presentation/__solutionName.dot__.Presentation.csproj +11 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/controllers/__firstScreen.snake___controller.py +17 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/controllers/__init__.py +5 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/models/__firstScreen.snake__.py +13 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/models/__init__.py +5 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/models/repository.py +17 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/views/__firstScreen.snake___view.py +17 -0
- package/templates/architectures/mvc-mvvm/files/src/__solutionName.snake__/views/__init__.py +6 -0
- package/templates/architectures/mvc-mvvm/files/src/models/index.ts +4 -0
- package/templates/architectures/mvc-mvvm/files/src/viewmodels/index.ts +12 -0
- package/templates/architectures/mvc-mvvm/files/src/views/index.ts +10 -0
- package/templates/architectures/mvc-mvvm/files/tests/__solutionName.dot__.ArchitectureTests/PresentationBoundaryTests.cs +124 -0
- package/templates/architectures/mvc-mvvm/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +28 -0
- package/templates/architectures/mvc-mvvm/files/tests/test_presentation_boundaries.py +33 -0
- package/templates/architectures/onion/blueprint.yaml +146 -0
- package/templates/architectures/onion/files/.dependency-cruiser.cjs +50 -0
- package/templates/architectures/onion/files/.importlinter +33 -0
- package/templates/architectures/onion/files/Directory.Packages.props +8 -0
- package/templates/architectures/onion/files/__solutionName.dot__.slnx +11 -0
- package/templates/architectures/onion/files/docs/architecture/onion-dotnet.md +39 -0
- package/templates/architectures/onion/files/docs/architecture/onion-go.md +33 -0
- package/templates/architectures/onion/files/docs/architecture/onion-python.md +35 -0
- package/templates/architectures/onion/files/docs/architecture/onion-typescript.md +34 -0
- package/templates/architectures/onion/files/internal/applicationservices/doc.go +4 -0
- package/templates/architectures/onion/files/internal/arch/rings.go +11 -0
- package/templates/architectures/onion/files/internal/arch/rings_test.go +112 -0
- package/templates/architectures/onion/files/internal/domain/doc.go +4 -0
- package/templates/architectures/onion/files/internal/domainservices/doc.go +5 -0
- package/templates/architectures/onion/files/internal/infrastructure/doc.go +5 -0
- package/templates/architectures/onion/files/pyproject.toml +2 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.ApplicationServices/ApplicationServicesAssemblyMarker.cs +4 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.ApplicationServices/__solutionName.dot__.ApplicationServices.csproj +13 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.Domain/DomainAssemblyMarker.cs +4 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.Domain/__solutionName.dot__.Domain.csproj +11 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.DomainServices/DomainServicesAssemblyMarker.cs +4 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.DomainServices/Repositories/.gitkeep +2 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.DomainServices/__solutionName.dot__.DomainServices.csproj +14 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.Infrastructure/InfrastructureAssemblyMarker.cs +4 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.Infrastructure/Repositories/.gitkeep +2 -0
- package/templates/architectures/onion/files/src/__solutionName.dot__.Infrastructure/__solutionName.dot__.Infrastructure.csproj +14 -0
- package/templates/architectures/onion/files/src/__solutionName.snake__/application_services/__init__.py +4 -0
- package/templates/architectures/onion/files/src/__solutionName.snake__/domain/__init__.py +5 -0
- package/templates/architectures/onion/files/src/__solutionName.snake__/domain_services/__init__.py +6 -0
- package/templates/architectures/onion/files/src/__solutionName.snake__/infrastructure/__init__.py +5 -0
- package/templates/architectures/onion/files/src/application-services/index.ts +3 -0
- package/templates/architectures/onion/files/src/domain/index.ts +3 -0
- package/templates/architectures/onion/files/src/domain-services/index.ts +3 -0
- package/templates/architectures/onion/files/src/infrastructure/index.ts +3 -0
- package/templates/architectures/onion/files/tests/__solutionName.dot__.ArchitectureTests/RingDependencyTests.cs +104 -0
- package/templates/architectures/onion/files/tests/__solutionName.dot__.ArchitectureTests/__solutionName.dot__.ArchitectureTests.csproj +31 -0
- package/templates/architectures/pipes-and-filters/blueprint.yaml +104 -0
- package/templates/architectures/pipes-and-filters/files/.importlinter +25 -0
- package/templates/architectures/pipes-and-filters/files/docs/architecture/pipes-and-filters.go.md +72 -0
- package/templates/architectures/pipes-and-filters/files/docs/architecture/pipes-and-filters.node.md +73 -0
- package/templates/architectures/pipes-and-filters/files/docs/architecture/pipes-and-filters.python.md +76 -0
- package/templates/architectures/pipes-and-filters/files/internal/pipeline/boundary_test.go +107 -0
- package/templates/architectures/pipes-and-filters/files/internal/pipeline/config.go +53 -0
- package/templates/architectures/pipes-and-filters/files/internal/pipeline/contract/contract.go +35 -0
- package/templates/architectures/pipes-and-filters/files/internal/pipeline/pipeline.go +39 -0
- package/templates/architectures/pipes-and-filters/files/internal/pipeline/stages/__firstStage.lower__/__firstStage.lower__.go +42 -0
- package/templates/architectures/pipes-and-filters/files/internal/pipeline/stages/__firstStage.lower__/__firstStage.lower___test.go +59 -0
- package/templates/architectures/pipes-and-filters/files/package.json +8 -0
- package/templates/architectures/pipes-and-filters/files/pyproject.toml +2 -0
- package/templates/architectures/pipes-and-filters/files/scripts/check-stage-boundaries.mjs +172 -0
- package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/__init__.py +16 -0
- package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/config.py +26 -0
- package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/contract.py +34 -0
- package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/pipeline.py +33 -0
- package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/stages/__firstStage.snake__/__init__.py +3 -0
- package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/stages/__firstStage.snake__/stage.py +31 -0
- package/templates/architectures/pipes-and-filters/files/src/__solutionName.snake__/pipeline/stages/__init__.py +1 -0
- package/templates/architectures/pipes-and-filters/files/src/pipeline/config.ts +24 -0
- package/templates/architectures/pipes-and-filters/files/src/pipeline/contract.ts +41 -0
- package/templates/architectures/pipes-and-filters/files/src/pipeline/pipeline.ts +37 -0
- package/templates/architectures/pipes-and-filters/files/src/pipeline/stages/__firstStage.kebab__/__firstStage.kebab__.test.ts +32 -0
- package/templates/architectures/pipes-and-filters/files/src/pipeline/stages/__firstStage.kebab__/index.ts +29 -0
- package/templates/architectures/pipes-and-filters/files/tests/architecture/test_stage_boundaries.py +127 -0
- package/templates/architectures/pipes-and-filters/files/tests/pipeline/test___firstStage.snake__.py +32 -0
- package/templates/architectures/rag-hybrid/blueprint.yaml +121 -0
- package/templates/architectures/rag-hybrid/files/.importlinter +42 -0
- package/templates/architectures/rag-hybrid/files/docs/architecture/rag-hybrid.node.md +159 -0
- package/templates/architectures/rag-hybrid/files/docs/architecture/rag-hybrid.python.md +157 -0
- package/templates/architectures/rag-hybrid/files/evals/corpus/chunking.md +20 -0
- package/templates/architectures/rag-hybrid/files/evals/corpus/fusion.md +17 -0
- package/templates/architectures/rag-hybrid/files/evals/corpus/hybrid-retrieval.md +21 -0
- package/templates/architectures/rag-hybrid/files/evals/corpus/reranking.md +17 -0
- package/templates/architectures/rag-hybrid/files/evals/golden/queries.jsonl +5 -0
- package/templates/architectures/rag-hybrid/files/package.json +9 -0
- package/templates/architectures/rag-hybrid/files/pyproject.toml +2 -0
- package/templates/architectures/rag-hybrid/files/scripts/check-retrieval-seam.mjs +156 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/__init__.py +23 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/chunk/__init__.py +57 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/config.py +101 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/contracts.py +58 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/embed/__init__.py +90 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/evaluation/__init__.py +11 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/evaluation/cli.py +47 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/evaluation/harness.py +115 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/evaluation/metrics.py +51 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/generate/__init__.py +85 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/indexing.py +23 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/ingest/__init__.py +45 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/pipeline.py +27 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/rerank/__init__.py +85 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/retrieve/__init__.py +37 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/retrieve/dense.py +25 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/retrieve/fusion.py +30 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/retrieve/keyword.py +45 -0
- package/templates/architectures/rag-hybrid/files/src/__solutionName.snake__/rag/store/__init__.py +87 -0
- package/templates/architectures/rag-hybrid/files/src/rag/chunk/index.ts +56 -0
- package/templates/architectures/rag-hybrid/files/src/rag/config.ts +96 -0
- package/templates/architectures/rag-hybrid/files/src/rag/contracts.ts +50 -0
- package/templates/architectures/rag-hybrid/files/src/rag/embed/index.ts +98 -0
- package/templates/architectures/rag-hybrid/files/src/rag/evaluation/cli.ts +47 -0
- package/templates/architectures/rag-hybrid/files/src/rag/evaluation/harness.ts +101 -0
- package/templates/architectures/rag-hybrid/files/src/rag/evaluation/metrics.ts +40 -0
- package/templates/architectures/rag-hybrid/files/src/rag/generate/index.ts +86 -0
- package/templates/architectures/rag-hybrid/files/src/rag/indexing.ts +21 -0
- package/templates/architectures/rag-hybrid/files/src/rag/ingest/index.ts +58 -0
- package/templates/architectures/rag-hybrid/files/src/rag/pipeline.ts +32 -0
- package/templates/architectures/rag-hybrid/files/src/rag/rerank/index.ts +90 -0
- package/templates/architectures/rag-hybrid/files/src/rag/retrieve/dense.ts +26 -0
- package/templates/architectures/rag-hybrid/files/src/rag/retrieve/fusion.ts +32 -0
- package/templates/architectures/rag-hybrid/files/src/rag/retrieve/index.ts +38 -0
- package/templates/architectures/rag-hybrid/files/src/rag/retrieve/keyword.ts +42 -0
- package/templates/architectures/rag-hybrid/files/src/rag/store/index.ts +108 -0
- package/templates/architectures/rag-hybrid/files/tests/architecture/test_retrieval_seam.py +108 -0
- package/templates/architectures/serverless/blueprint.yaml +139 -0
- package/templates/architectures/serverless/files/.gitignore.serverless +3 -0
- package/templates/architectures/serverless/files/.importlinter +18 -0
- package/templates/architectures/serverless/files/cdk.json +7 -0
- package/templates/architectures/serverless/files/docs/architecture/serverless.node.md +97 -0
- package/templates/architectures/serverless/files/docs/architecture/serverless.python.md +108 -0
- package/templates/architectures/serverless/files/events/__firstHandler.kebab__.json +21 -0
- package/templates/architectures/serverless/files/infra/app.ts +15 -0
- package/templates/architectures/serverless/files/infra/config.ts +22 -0
- package/templates/architectures/serverless/files/infra/stack.ts +45 -0
- package/templates/architectures/serverless/files/package.json +9 -0
- package/templates/architectures/serverless/files/pyproject.toml +2 -0
- package/templates/architectures/serverless/files/scripts/check-handler-boundaries.mjs +144 -0
- package/templates/architectures/serverless/files/scripts/invoke-local.ts +57 -0
- package/templates/architectures/serverless/files/scripts/invoke_local.py +61 -0
- package/templates/architectures/serverless/files/src/__solutionName.snake__/functions/__firstHandler.snake__/__init__.py +1 -0
- package/templates/architectures/serverless/files/src/__solutionName.snake__/functions/__firstHandler.snake__/handler.py +27 -0
- package/templates/architectures/serverless/files/src/__solutionName.snake__/functions/__init__.py +4 -0
- package/templates/architectures/serverless/files/src/__solutionName.snake__/layers/__init__.py +5 -0
- package/templates/architectures/serverless/files/src/__solutionName.snake__/layers/config.py +45 -0
- package/templates/architectures/serverless/files/src/__solutionName.snake__/layers/observability.py +35 -0
- package/templates/architectures/serverless/files/src/functions/__firstHandler.kebab__/handler.ts +26 -0
- package/templates/architectures/serverless/files/src/layers/config/index.ts +31 -0
- package/templates/architectures/serverless/files/src/layers/observability/index.ts +38 -0
- package/templates/architectures/serverless/files/src/requirements.txt +3 -0
- package/templates/architectures/serverless/files/template.yaml +48 -0
- package/templates/architectures/serverless/files/tests/architecture/test_handler_boundaries.py +32 -0
- package/templates/architectures/vertical-slice/blueprint.yaml +124 -0
- package/templates/architectures/vertical-slice/files/.importlinter +18 -0
- package/templates/architectures/vertical-slice/files/Directory.Packages.props +8 -0
- package/templates/architectures/vertical-slice/files/__solutionName.dot__.slnx +5 -0
- package/templates/architectures/vertical-slice/files/docs/architecture/vertical-slice.md +75 -0
- package/templates/architectures/vertical-slice/files/internal/features/__firstSlice.lower__/__firstSlice.lower__.go +2 -0
- package/templates/architectures/vertical-slice/files/internal/features/boundary_test.go +92 -0
- package/templates/architectures/vertical-slice/files/internal/features/doc.go +3 -0
- package/templates/architectures/vertical-slice/files/internal/shared/doc.go +2 -0
- package/templates/architectures/vertical-slice/files/pyproject.toml +2 -0
- package/templates/architectures/vertical-slice/files/scripts/check-slice-boundaries.mjs +118 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.dot__.Api/Common/.gitkeep +0 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.dot__.Api/Features/.gitkeep +0 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.dot__.Api/Features/__firstSlice.pascal__/Slice.cs +15 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.pascal__.Api/Common/.gitkeep +0 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.pascal__.Api/Features/.gitkeep +0 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.pascal__.Api/Features/__firstSlice.pascal__/Slice.cs +15 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.snake__/features/__firstSlice.snake__/__init__.py +1 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.snake__/features/__init__.py +1 -0
- package/templates/architectures/vertical-slice/files/src/__solutionName.snake__/shared/__init__.py +1 -0
- package/templates/architectures/vertical-slice/files/src/features/__firstSlice.kebab__/index.ts +3 -0
- package/templates/architectures/vertical-slice/files/src/shared/.gitkeep +0 -0
- package/templates/architectures/vertical-slice/files/tests/ArchitectureTests/ArchitectureTests.csproj +33 -0
- package/templates/architectures/vertical-slice/files/tests/ArchitectureTests/SliceBoundaryTests.cs +110 -0
- package/templates/architectures/vertical-slice/files/tests/test_architecture.py +32 -0
- package/templates/bases/dotnet-aspire/blueprint.yaml +120 -0
- package/templates/bases/dotnet-aspire/files/Directory.Build.props +11 -0
- package/templates/bases/dotnet-aspire/files/Directory.Packages.props +17 -0
- package/templates/bases/dotnet-aspire/files/README.md +60 -0
- package/templates/bases/dotnet-aspire/files/__solutionName.dot__.slnx +7 -0
- package/templates/bases/dotnet-aspire/files/aspire.config.json +5 -0
- package/templates/bases/dotnet-aspire/files/gitignore +44 -0
- package/templates/bases/dotnet-aspire/files/global.json +6 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/Configuration/ApiOptions.cs +20 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/Program.cs +37 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/Properties/launchSettings.json +23 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/__solutionName.pascal__.Api.csproj +11 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/appsettings.Development.json +8 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.Api/appsettings.json +14 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/AppHost.cs +8 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/Properties/launchSettings.json +29 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/__solutionName.pascal__.AppHost.csproj +11 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/appsettings.Development.json +8 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.AppHost/appsettings.json +9 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.ServiceDefaults/Extensions.cs +101 -0
- package/templates/bases/dotnet-aspire/files/src/__solutionName.pascal__.ServiceDefaults/__solutionName.pascal__.ServiceDefaults.csproj +19 -0
- package/templates/bases/dotnet-webapi/blueprint.yaml +112 -0
- package/templates/bases/dotnet-webapi/files/.editorconfig +78 -0
- package/templates/bases/dotnet-webapi/files/Directory.Build.props +28 -0
- package/templates/bases/dotnet-webapi/files/Directory.Packages.props +18 -0
- package/templates/bases/dotnet-webapi/files/README.md +71 -0
- package/templates/bases/dotnet-webapi/files/__solutionName.dot__.slnx +11 -0
- package/templates/bases/dotnet-webapi/files/gitignore +49 -0
- package/templates/bases/dotnet-webapi/files/global.json +7 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Configuration/ApiOptions.cs +23 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Configuration/ServiceCollectionExtensions.cs +35 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Endpoints/GreetingEndpoints.cs +24 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Endpoints/HealthEndpoints.cs +11 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Program.cs +23 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/Properties/launchSettings.json +21 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/__solutionName.dot__.Api.csproj +19 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/appsettings.Development.json +8 -0
- package/templates/bases/dotnet-webapi/files/src/__solutionName.dot__.Api/appsettings.json +9 -0
- package/templates/bases/fastapi-service/blueprint.yaml +87 -0
- package/templates/bases/fastapi-service/files/.env.example +10 -0
- package/templates/bases/fastapi-service/files/README.md +42 -0
- package/templates/bases/fastapi-service/files/gitignore +27 -0
- package/templates/bases/fastapi-service/files/pyproject.toml +35 -0
- package/templates/bases/fastapi-service/files/src/__solutionName.snake__/__init__.py +1 -0
- package/templates/bases/fastapi-service/files/src/__solutionName.snake__/api/__init__.py +1 -0
- package/templates/bases/fastapi-service/files/src/__solutionName.snake__/api/routes.py +38 -0
- package/templates/bases/fastapi-service/files/src/__solutionName.snake__/main.py +34 -0
- package/templates/bases/fastapi-service/files/src/__solutionName.snake__/settings.py +30 -0
- package/templates/bases/go-api/blueprint.yaml +58 -0
- package/templates/bases/go-api/files/.env.example +16 -0
- package/templates/bases/go-api/files/README.md +76 -0
- package/templates/bases/go-api/files/cmd/__solutionName.kebab__/main.go +65 -0
- package/templates/bases/go-api/files/gitignore +27 -0
- package/templates/bases/go-api/files/go.mod +5 -0
- package/templates/bases/go-api/files/internal/config/config.go +127 -0
- package/templates/bases/go-api/files/internal/httpapi/greeting.go +25 -0
- package/templates/bases/go-api/files/internal/httpapi/health.go +25 -0
- package/templates/bases/go-api/files/internal/httpapi/respond.go +25 -0
- package/templates/bases/go-api/files/internal/httpapi/router.go +63 -0
- package/templates/bases/hono-api/blueprint.yaml +94 -0
- package/templates/bases/hono-api/files/.env.example +7 -0
- package/templates/bases/hono-api/files/README.md +77 -0
- package/templates/bases/hono-api/files/biome.json +24 -0
- package/templates/bases/hono-api/files/gitignore +16 -0
- package/templates/bases/hono-api/files/package.json +29 -0
- package/templates/bases/hono-api/files/src/app.ts +27 -0
- package/templates/bases/hono-api/files/src/config.ts +27 -0
- package/templates/bases/hono-api/files/src/index.ts +17 -0
- package/templates/bases/hono-api/files/src/routes/greetings.ts +17 -0
- package/templates/bases/hono-api/files/src/routes/health.ts +13 -0
- package/templates/bases/hono-api/files/tsconfig.json +18 -0
- package/templates/bases/nestjs-api/blueprint.yaml +94 -0
- package/templates/bases/nestjs-api/files/.env.example +8 -0
- package/templates/bases/nestjs-api/files/.prettierrc +5 -0
- package/templates/bases/nestjs-api/files/README.md +69 -0
- package/templates/bases/nestjs-api/files/eslint.config.mjs +23 -0
- package/templates/bases/nestjs-api/files/gitignore +11 -0
- package/templates/bases/nestjs-api/files/nest-cli.json +9 -0
- package/templates/bases/nestjs-api/files/package.json +41 -0
- package/templates/bases/nestjs-api/files/src/app.module.ts +16 -0
- package/templates/bases/nestjs-api/files/src/config/app.config.ts +30 -0
- package/templates/bases/nestjs-api/files/src/config/env.validation.ts +15 -0
- package/templates/bases/nestjs-api/files/src/health/health.controller.ts +19 -0
- package/templates/bases/nestjs-api/files/src/health/health.module.ts +6 -0
- package/templates/bases/nestjs-api/files/src/main.ts +25 -0
- package/templates/bases/nestjs-api/files/src/modules/__solutionName.kebab__/__solutionName.kebab__.controller.ts +14 -0
- package/templates/bases/nestjs-api/files/src/modules/__solutionName.kebab__/__solutionName.kebab__.module.ts +11 -0
- package/templates/bases/nestjs-api/files/src/modules/__solutionName.kebab__/__solutionName.kebab__.service.ts +12 -0
- package/templates/bases/nestjs-api/files/src/modules/__solutionName.kebab__/dto/greet-query.dto.ts +10 -0
- package/templates/bases/nestjs-api/files/tsconfig.build.json +4 -0
- package/templates/bases/nestjs-api/files/tsconfig.json +26 -0
- package/templates/bases/nextjs-app/blueprint.yaml +80 -0
- package/templates/bases/nextjs-app/files/.env.example +10 -0
- package/templates/bases/nextjs-app/files/README.md +48 -0
- package/templates/bases/nextjs-app/files/eslint.config.mjs +12 -0
- package/templates/bases/nextjs-app/files/gitignore +32 -0
- package/templates/bases/nextjs-app/files/next.config.ts +8 -0
- package/templates/bases/nextjs-app/files/package.json +30 -0
- package/templates/bases/nextjs-app/files/postcss.config.mjs +7 -0
- package/templates/bases/nextjs-app/files/src/app/api/health/route.ts +21 -0
- package/templates/bases/nextjs-app/files/src/app/globals.css +45 -0
- package/templates/bases/nextjs-app/files/src/app/layout.tsx +28 -0
- package/templates/bases/nextjs-app/files/src/app/page.tsx +39 -0
- package/templates/bases/nextjs-app/files/src/config/env.ts +64 -0
- package/templates/bases/nextjs-app/files/tsconfig.json +35 -0
- package/templates/bases/python-ai-agent/blueprint.yaml +84 -0
- package/templates/bases/python-ai-agent/files/.env.example +29 -0
- package/templates/bases/python-ai-agent/files/README.md +80 -0
- package/templates/bases/python-ai-agent/files/gitignore +21 -0
- package/templates/bases/python-ai-agent/files/pyproject.toml +34 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/__init__.py +1 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/api/__init__.py +1 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/api/routes.py +69 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/config.py +70 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/__init__.py +1 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/anthropic_provider.py +69 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/openai_provider.py +75 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/provider.py +45 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/llm/registry.py +35 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/main.py +33 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/observability/__init__.py +1 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/observability/evals.py +28 -0
- package/templates/bases/python-ai-agent/files/src/__solutionName.snake__/observability/tracing.py +49 -0
- package/templates/bases/react-vite-spa/blueprint.yaml +92 -0
- package/templates/bases/react-vite-spa/files/.env.example +13 -0
- package/templates/bases/react-vite-spa/files/README.md +49 -0
- package/templates/bases/react-vite-spa/files/eslint.config.mjs +26 -0
- package/templates/bases/react-vite-spa/files/gitignore +25 -0
- package/templates/bases/react-vite-spa/files/index.html +13 -0
- package/templates/bases/react-vite-spa/files/package.json +37 -0
- package/templates/bases/react-vite-spa/files/src/api/client.ts +28 -0
- package/templates/bases/react-vite-spa/files/src/api/health.ts +12 -0
- package/templates/bases/react-vite-spa/files/src/app/query-client.ts +12 -0
- package/templates/bases/react-vite-spa/files/src/app/root-layout.tsx +24 -0
- package/templates/bases/react-vite-spa/files/src/app/router.tsx +44 -0
- package/templates/bases/react-vite-spa/files/src/config/env.ts +37 -0
- package/templates/bases/react-vite-spa/files/src/main.tsx +18 -0
- package/templates/bases/react-vite-spa/files/src/pages/home-page.tsx +31 -0
- package/templates/bases/react-vite-spa/files/src/pages/not-found-page.tsx +13 -0
- package/templates/bases/react-vite-spa/files/src/pages/status-page.tsx +37 -0
- package/templates/bases/react-vite-spa/files/src/styles/global.css +169 -0
- package/templates/bases/react-vite-spa/files/src/vite-env.d.ts +15 -0
- package/templates/bases/react-vite-spa/files/tsconfig.app.json +29 -0
- package/templates/bases/react-vite-spa/files/tsconfig.json +4 -0
- package/templates/bases/react-vite-spa/files/tsconfig.node.json +24 -0
- package/templates/bases/react-vite-spa/files/vite.config.ts +25 -0
- package/templates/bases/turborepo-monorepo/blueprint.yaml +84 -0
- package/templates/bases/turborepo-monorepo/files/.env.example +7 -0
- package/templates/bases/turborepo-monorepo/files/.prettierignore +9 -0
- package/templates/bases/turborepo-monorepo/files/.prettierrc.json +5 -0
- package/templates/bases/turborepo-monorepo/files/README.md +55 -0
- package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/eslint.config.js +3 -0
- package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/package.json +25 -0
- package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/src/config.ts +46 -0
- package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/src/index.ts +20 -0
- package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/src/router.ts +24 -0
- package/templates/bases/turborepo-monorepo/files/apps/__appName.kebab__/tsconfig.json +8 -0
- package/templates/bases/turborepo-monorepo/files/gitignore +17 -0
- package/templates/bases/turborepo-monorepo/files/package.json +25 -0
- package/templates/bases/turborepo-monorepo/files/packages/eslint-config/index.js +21 -0
- package/templates/bases/turborepo-monorepo/files/packages/eslint-config/package.json +21 -0
- package/templates/bases/turborepo-monorepo/files/packages/shared/eslint.config.js +3 -0
- package/templates/bases/turborepo-monorepo/files/packages/shared/package.json +26 -0
- package/templates/bases/turborepo-monorepo/files/packages/shared/src/health.ts +23 -0
- package/templates/bases/turborepo-monorepo/files/packages/shared/src/index.ts +2 -0
- package/templates/bases/turborepo-monorepo/files/packages/shared/tsconfig.json +10 -0
- package/templates/bases/turborepo-monorepo/files/packages/tsconfig/base.json +19 -0
- package/templates/bases/turborepo-monorepo/files/packages/tsconfig/node.json +7 -0
- package/templates/bases/turborepo-monorepo/files/packages/tsconfig/package.json +9 -0
- package/templates/bases/turborepo-monorepo/files/pnpm-workspace.yaml +7 -0
- package/templates/bases/turborepo-monorepo/files/turbo.json +22 -0
- package/templates/layers/api-versioning/blueprint.yaml +264 -0
- package/templates/layers/api-versioning/files/.env.apiversion.example +53 -0
- package/templates/layers/api-versioning/files/__apiVersionContractDir__/README.md +48 -0
- package/templates/layers/api-versioning/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/api-versioning/files/docs/api-versioning.md +100 -0
- package/templates/layers/api-versioning/files/internal/apiversion/apiversion_test.go +202 -0
- package/templates/layers/api-versioning/files/internal/apiversion/config.go +242 -0
- package/templates/layers/api-versioning/files/internal/apiversion/contract.go +280 -0
- package/templates/layers/api-versioning/files/internal/apiversion/headers.go +55 -0
- package/templates/layers/api-versioning/files/internal/apiversion/middleware.go +53 -0
- package/templates/layers/api-versioning/files/internal/apiversion/negotiate.go +107 -0
- package/templates/layers/api-versioning/files/internal/apiversion/snapshot.go +72 -0
- package/templates/layers/api-versioning/files/internal/apiversion/versions.go +72 -0
- package/templates/layers/api-versioning/files/package.json +5 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersionHeaders.cs +62 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersionNegotiator.cs +129 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersionOptions.cs +58 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersionPolicy.cs +99 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersioningMiddleware.cs +58 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ApiVersioningServiceCollectionExtensions.cs +18 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ContractDiff.cs +152 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ContractShape.cs +142 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/ContractStore.cs +64 -0
- package/templates/layers/api-versioning/files/src/__solutionName.dot__.ApiVersioning/__solutionName.dot__.ApiVersioning.csproj +17 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/__init__.py +67 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/contract.py +191 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/errors.py +28 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/headers.py +56 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/middleware.py +76 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/negotiate.py +94 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/settings.py +189 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/snapshot.py +74 -0
- package/templates/layers/api-versioning/files/src/__solutionName.snake__/apiversion/versions.py +70 -0
- package/templates/layers/api-versioning/files/src/apiversion/client/pinned-fetch.ts +89 -0
- package/templates/layers/api-versioning/files/src/apiversion/contract/diff.ts +153 -0
- package/templates/layers/api-versioning/files/src/apiversion/contract/node/snapshot.ts +76 -0
- package/templates/layers/api-versioning/files/src/apiversion/contract/shape.ts +94 -0
- package/templates/layers/api-versioning/files/src/apiversion/errors.ts +36 -0
- package/templates/layers/api-versioning/files/src/apiversion/headers.ts +52 -0
- package/templates/layers/api-versioning/files/src/apiversion/index.ts +23 -0
- package/templates/layers/api-versioning/files/src/apiversion/middleware.ts +59 -0
- package/templates/layers/api-versioning/files/src/apiversion/negotiate.ts +113 -0
- package/templates/layers/api-versioning/files/src/apiversion/node/http.ts +50 -0
- package/templates/layers/api-versioning/files/src/apiversion/settings.ts +214 -0
- package/templates/layers/api-versioning/files/src/apiversion/tests/apiversion.spec.ts +162 -0
- package/templates/layers/api-versioning/files/src/apiversion/tests/apiversion.test.ts +167 -0
- package/templates/layers/api-versioning/files/src/apiversion/versions.ts +66 -0
- package/templates/layers/api-versioning/files/tests/test_api_versioning.py +162 -0
- package/templates/layers/audit-log/blueprint.yaml +186 -0
- package/templates/layers/audit-log/files/.env.audit.example +41 -0
- package/templates/layers/audit-log/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/audit-log/files/docs/audit-log.md +195 -0
- package/templates/layers/audit-log/files/internal/audit/audit_test.go +141 -0
- package/templates/layers/audit-log/files/internal/audit/chain.go +91 -0
- package/templates/layers/audit-log/files/internal/audit/config.go +143 -0
- package/templates/layers/audit-log/files/internal/audit/event.go +87 -0
- package/templates/layers/audit-log/files/internal/audit/recorder.go +133 -0
- package/templates/layers/audit-log/files/internal/audit/redact.go +83 -0
- package/templates/layers/audit-log/files/internal/audit/sink.go +196 -0
- package/templates/layers/audit-log/files/internal/audit/verify.go +17 -0
- package/templates/layers/audit-log/files/package.json +5 -0
- package/templates/layers/audit-log/files/pyproject.toml +2 -0
- package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditChain.cs +74 -0
- package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditEvent.cs +90 -0
- package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditOptions.cs +104 -0
- package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditRecorder.cs +106 -0
- package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditSerialization.cs +116 -0
- package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/AuditSinks.cs +165 -0
- package/templates/layers/audit-log/files/src/__solutionName.dot__.Auditing/__solutionName.dot__.Auditing.csproj +17 -0
- package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/chain.py +56 -0
- package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/event.py +118 -0
- package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/recorder.py +118 -0
- package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/redact.py +41 -0
- package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/settings.py +102 -0
- package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/sinks.py +121 -0
- package/templates/layers/audit-log/files/src/__solutionName.snake__/audit/verify.py +14 -0
- package/templates/layers/audit-log/files/src/audit/chain.ts +59 -0
- package/templates/layers/audit-log/files/src/audit/event.ts +73 -0
- package/templates/layers/audit-log/files/src/audit/index.ts +32 -0
- package/templates/layers/audit-log/files/src/audit/recorder.ts +108 -0
- package/templates/layers/audit-log/files/src/audit/redact.ts +54 -0
- package/templates/layers/audit-log/files/src/audit/settings.ts +113 -0
- package/templates/layers/audit-log/files/src/audit/sinks.ts +131 -0
- package/templates/layers/audit-log/files/src/audit/tests/audit.spec.ts +97 -0
- package/templates/layers/audit-log/files/src/audit/tests/audit.test.ts +103 -0
- package/templates/layers/audit-log/files/tests/test_audit_log.py +91 -0
- package/templates/layers/auth-jwt/blueprint.yaml +124 -0
- package/templates/layers/auth-jwt/files/.env.auth.example +17 -0
- package/templates/layers/auth-jwt/files/Directory.Packages.props +5 -0
- package/templates/layers/auth-jwt/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/auth-jwt/files/docs/auth-jwt.md +198 -0
- package/templates/layers/auth-jwt/files/go.mod +2 -0
- package/templates/layers/auth-jwt/files/internal/auth/auth_test.go +167 -0
- package/templates/layers/auth-jwt/files/internal/auth/config.go +108 -0
- package/templates/layers/auth-jwt/files/internal/auth/errors.go +21 -0
- package/templates/layers/auth-jwt/files/internal/auth/http.go +65 -0
- package/templates/layers/auth-jwt/files/internal/auth/password.go +76 -0
- package/templates/layers/auth-jwt/files/internal/auth/service.go +213 -0
- package/templates/layers/auth-jwt/files/internal/auth/store.go +138 -0
- package/templates/layers/auth-jwt/files/internal/auth/token.go +83 -0
- package/templates/layers/auth-jwt/files/package.json +9 -0
- package/templates/layers/auth-jwt/files/pyproject.toml +2 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/AuthException.cs +39 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/AuthOptions.cs +35 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/AuthService.cs +132 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/AuthServiceCollectionExtensions.cs +48 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/JwtTokenService.cs +84 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/PasswordHasher.cs +52 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/Stores.cs +100 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/__solutionName.dot__.Auth.csproj +21 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.dot__.Auth/appsettings.Auth.sample.json +10 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/__init__.py +42 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/config.py +49 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/errors.py +21 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/http.py +36 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/passwords.py +37 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/service.py +139 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/store.py +90 -0
- package/templates/layers/auth-jwt/files/src/__solutionName.snake__/auth/tokens.py +72 -0
- package/templates/layers/auth-jwt/files/src/auth/config.ts +77 -0
- package/templates/layers/auth-jwt/files/src/auth/errors.ts +32 -0
- package/templates/layers/auth-jwt/files/src/auth/http.ts +35 -0
- package/templates/layers/auth-jwt/files/src/auth/index.ts +20 -0
- package/templates/layers/auth-jwt/files/src/auth/password.ts +23 -0
- package/templates/layers/auth-jwt/files/src/auth/random.ts +28 -0
- package/templates/layers/auth-jwt/files/src/auth/service.ts +125 -0
- package/templates/layers/auth-jwt/files/src/auth/store.memory.ts +50 -0
- package/templates/layers/auth-jwt/files/src/auth/store.ts +37 -0
- package/templates/layers/auth-jwt/files/src/auth/tests/auth.spec.ts +98 -0
- package/templates/layers/auth-jwt/files/src/auth/tests/auth.test.ts +102 -0
- package/templates/layers/auth-jwt/files/src/auth/tokens.ts +56 -0
- package/templates/layers/auth-jwt/files/tests/auth/test_auth.py +106 -0
- package/templates/layers/auth-oidc/blueprint.yaml +89 -0
- package/templates/layers/auth-oidc/files/dotnet/.env.oidc.example +14 -0
- package/templates/layers/auth-oidc/files/dotnet/docs/auth-oidc.md +73 -0
- package/templates/layers/auth-oidc/files/dotnet/src/__solutionName.pascal__.Api/Auth/OidcAuthenticationExtensions.cs +65 -0
- package/templates/layers/auth-oidc/files/dotnet/src/__solutionName.pascal__.Api/Auth/OidcOptions.cs +25 -0
- package/templates/layers/auth-oidc/files/dotnet/src/__solutionName.pascal__.Api/Auth/ScopeRequirement.cs +29 -0
- package/templates/layers/auth-oidc/files/node/.env.oidc.example +14 -0
- package/templates/layers/auth-oidc/files/node/docs/auth-oidc.md +66 -0
- package/templates/layers/auth-oidc/files/node/src/auth/auth.config.ts +64 -0
- package/templates/layers/auth-oidc/files/node/src/auth/auth.decorators.ts +19 -0
- package/templates/layers/auth-oidc/files/node/src/auth/auth.guard.ts +61 -0
- package/templates/layers/auth-oidc/files/node/src/auth/auth.module.ts +12 -0
- package/templates/layers/auth-oidc/files/node/src/auth/jwt-verifier.ts +97 -0
- package/templates/layers/auth-oidc/files/package.json +6 -0
- package/templates/layers/auth-oidc/files/pyproject.toml +2 -0
- package/templates/layers/auth-oidc/files/python/.env.oidc.example +14 -0
- package/templates/layers/auth-oidc/files/python/app/auth/dependencies.py +69 -0
- package/templates/layers/auth-oidc/files/python/app/auth/settings.py +32 -0
- package/templates/layers/auth-oidc/files/python/app/auth/verifier.py +57 -0
- package/templates/layers/auth-oidc/files/python/docs/auth-oidc.md +57 -0
- package/templates/layers/auth-oidc/files/python/requirements-auth-oidc.txt +4 -0
- package/templates/layers/auth-oidc/files/typescript/.env.oidc.example +21 -0
- package/templates/layers/auth-oidc/files/typescript/docs/auth-oidc.md +69 -0
- package/templates/layers/auth-oidc/files/typescript/src/app/api/auth/callback/route.ts +43 -0
- package/templates/layers/auth-oidc/files/typescript/src/app/api/auth/login/route.ts +40 -0
- package/templates/layers/auth-oidc/files/typescript/src/app/api/auth/logout/route.ts +27 -0
- package/templates/layers/auth-oidc/files/typescript/src/app/api/auth/me/route.ts +12 -0
- package/templates/layers/auth-oidc/files/typescript/src/lib/auth/config.ts +98 -0
- package/templates/layers/auth-oidc/files/typescript/src/lib/auth/guard.ts +23 -0
- package/templates/layers/auth-oidc/files/typescript/src/lib/auth/oidc.ts +19 -0
- package/templates/layers/auth-oidc/files/typescript/src/lib/auth/session.ts +81 -0
- package/templates/layers/cache-redis/blueprint.yaml +186 -0
- package/templates/layers/cache-redis/files/.env.cache.example +29 -0
- package/templates/layers/cache-redis/files/Directory.Packages.props +5 -0
- package/templates/layers/cache-redis/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/cache-redis/files/docker-compose.redis.yml +33 -0
- package/templates/layers/cache-redis/files/docs/cache/redis.md +113 -0
- package/templates/layers/cache-redis/files/go.mod +1 -0
- package/templates/layers/cache-redis/files/internal/cache/cache.go +127 -0
- package/templates/layers/cache-redis/files/internal/cache/cache_test.go +113 -0
- package/templates/layers/cache-redis/files/internal/cache/config.go +110 -0
- package/templates/layers/cache-redis/files/internal/cache/memory.go +124 -0
- package/templates/layers/cache-redis/files/internal/cache/redis.go +108 -0
- package/templates/layers/cache-redis/files/package.json +5 -0
- package/templates/layers/cache-redis/files/pyproject.toml +2 -0
- package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/CacheKey.cs +44 -0
- package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/CacheOptions.cs +119 -0
- package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/CacheStoreFactory.cs +16 -0
- package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/ICacheStore.cs +37 -0
- package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/MemoryCacheStore.cs +129 -0
- package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/RedisCacheStore.cs +139 -0
- package/templates/layers/cache-redis/files/src/__solutionName.dot__.Cache.Redis/__solutionName.dot__.Cache.Redis.csproj +18 -0
- package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/api.py +67 -0
- package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/keys.py +39 -0
- package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/redis_store.py +85 -0
- package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/settings.py +82 -0
- package/templates/layers/cache-redis/files/src/__solutionName.snake__/cache/store.py +113 -0
- package/templates/layers/cache-redis/files/src/cache/index.ts +54 -0
- package/templates/layers/cache-redis/files/src/cache/keys.ts +28 -0
- package/templates/layers/cache-redis/files/src/cache/redis.ts +131 -0
- package/templates/layers/cache-redis/files/src/cache/settings.ts +86 -0
- package/templates/layers/cache-redis/files/src/cache/store.ts +98 -0
- package/templates/layers/cache-redis/files/tests/test_cache_redis.py +105 -0
- package/templates/layers/ci-github-actions/blueprint.yaml +174 -0
- package/templates/layers/ci-github-actions/files/.github/actions/dotnet-setup/action.yml +25 -0
- package/templates/layers/ci-github-actions/files/.github/actions/go-setup/action.yml +30 -0
- package/templates/layers/ci-github-actions/files/.github/actions/node-setup/action.yml +58 -0
- package/templates/layers/ci-github-actions/files/.github/actions/python-setup/action.yml +23 -0
- package/templates/layers/ci-github-actions/files/.github/dependabot.yml +13 -0
- package/templates/layers/ci-github-actions/files/.github/scripts/run-package-script.sh +13 -0
- package/templates/layers/ci-github-actions/files/.github/workflows/ci-dotnet.yml +85 -0
- package/templates/layers/ci-github-actions/files/.github/workflows/ci-go.yml +91 -0
- package/templates/layers/ci-github-actions/files/.github/workflows/ci-node.yml +111 -0
- package/templates/layers/ci-github-actions/files/.github/workflows/ci-python.yml +125 -0
- package/templates/layers/ci-github-actions/files/docs/ci-github-actions.md +106 -0
- package/templates/layers/db-core/blueprint.yaml +98 -0
- package/templates/layers/db-core/files/.env.example +18 -0
- package/templates/layers/db-core/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/db-core/files/docs/persistence.md +91 -0
- package/templates/layers/db-core/files/internal/db/config.go +108 -0
- package/templates/layers/db-core/files/internal/db/errors.go +61 -0
- package/templates/layers/db-core/files/internal/db/memory.go +141 -0
- package/templates/layers/db-core/files/internal/db/memory_test.go +195 -0
- package/templates/layers/db-core/files/internal/db/ports.go +76 -0
- package/templates/layers/db-core/files/internal/db/repository.go +134 -0
- package/templates/layers/db-core/files/internal/db/retry.go +30 -0
- package/templates/layers/db-core/files/package.json +5 -0
- package/templates/layers/db-core/files/src/__solutionName.dot__.Data/DatabaseException.cs +39 -0
- package/templates/layers/db-core/files/src/__solutionName.dot__.Data/DatabaseOptions.cs +65 -0
- package/templates/layers/db-core/files/src/__solutionName.dot__.Data/DatabaseRetry.cs +24 -0
- package/templates/layers/db-core/files/src/__solutionName.dot__.Data/IRepository.cs +30 -0
- package/templates/layers/db-core/files/src/__solutionName.dot__.Data/IUnitOfWork.cs +23 -0
- package/templates/layers/db-core/files/src/__solutionName.dot__.Data/InMemory/InMemoryDatabase.cs +188 -0
- package/templates/layers/db-core/files/src/__solutionName.dot__.Data/Query.cs +29 -0
- package/templates/layers/db-core/files/src/__solutionName.dot__.Data/__solutionName.dot__.Data.csproj +16 -0
- package/templates/layers/db-core/files/src/__solutionName.snake__/db/api.py +63 -0
- package/templates/layers/db-core/files/src/__solutionName.snake__/db/config.py +79 -0
- package/templates/layers/db-core/files/src/__solutionName.snake__/db/errors.py +47 -0
- package/templates/layers/db-core/files/src/__solutionName.snake__/db/memory.py +143 -0
- package/templates/layers/db-core/files/src/__solutionName.snake__/db/ports.py +80 -0
- package/templates/layers/db-core/files/src/__solutionName.snake__/db/retry.py +25 -0
- package/templates/layers/db-core/files/src/db/config.ts +65 -0
- package/templates/layers/db-core/files/src/db/errors.ts +52 -0
- package/templates/layers/db-core/files/src/db/index.ts +41 -0
- package/templates/layers/db-core/files/src/db/memory.test.ts +107 -0
- package/templates/layers/db-core/files/src/db/memory.ts +182 -0
- package/templates/layers/db-core/files/src/db/ports.ts +58 -0
- package/templates/layers/db-core/files/src/db/retry.ts +20 -0
- package/templates/layers/db-core/files/tests/test_db_core.py +95 -0
- package/templates/layers/db-mongo/blueprint.yaml +157 -0
- package/templates/layers/db-mongo/files/.env.mongo.example +17 -0
- package/templates/layers/db-mongo/files/Directory.Packages.props +7 -0
- package/templates/layers/db-mongo/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/db-mongo/files/docker-compose.mongo.yml +27 -0
- package/templates/layers/db-mongo/files/docs/db-mongo.md +138 -0
- package/templates/layers/db-mongo/files/go.mod +1 -0
- package/templates/layers/db-mongo/files/internal/db/mongodb/client.go +57 -0
- package/templates/layers/db-mongo/files/internal/db/mongodb/config.go +105 -0
- package/templates/layers/db-mongo/files/internal/db/mongodb/indexes.go +42 -0
- package/templates/layers/db-mongo/files/package.json +5 -0
- package/templates/layers/db-mongo/files/pyproject.toml +2 -0
- package/templates/layers/db-mongo/files/requirements-mongo.txt +2 -0
- package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoContext.cs +21 -0
- package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoHealthCheck.cs +28 -0
- package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoIndexes.cs +25 -0
- package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoOptions.cs +23 -0
- package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/MongoServiceCollectionExtensions.cs +31 -0
- package/templates/layers/db-mongo/files/src/__solutionName.dot__.Infrastructure.Mongo/__solutionName.dot__.Infrastructure.Mongo.csproj +18 -0
- package/templates/layers/db-mongo/files/src/__solutionName.snake__/db/mongo/client.py +48 -0
- package/templates/layers/db-mongo/files/src/__solutionName.snake__/db/mongo/config.py +66 -0
- package/templates/layers/db-mongo/files/src/__solutionName.snake__/db/mongo/indexes.py +29 -0
- package/templates/layers/db-mongo/files/src/db/mongo/client.rs +37 -0
- package/templates/layers/db-mongo/files/src/db/mongo/client.ts +51 -0
- package/templates/layers/db-mongo/files/src/db/mongo/config.rs +68 -0
- package/templates/layers/db-mongo/files/src/db/mongo/config.ts +58 -0
- package/templates/layers/db-mongo/files/src/db/mongo/index.ts +3 -0
- package/templates/layers/db-mongo/files/src/db/mongo/indexes.rs +26 -0
- package/templates/layers/db-mongo/files/src/db/mongo/indexes.ts +21 -0
- package/templates/layers/db-mongo/files/src/db/mongo/mod.rs +7 -0
- package/templates/layers/db-mongo/files/src/main/java/__solutionName.lower__/db/mongo/MongoClientProvider.java +66 -0
- package/templates/layers/db-mongo/files/src/main/java/__solutionName.lower__/db/mongo/MongoConfig.java +56 -0
- package/templates/layers/db-mongo/files/src/main/java/__solutionName.lower__/db/mongo/MongoIndexes.java +26 -0
- package/templates/layers/db-postgres/blueprint.yaml +130 -0
- package/templates/layers/db-postgres/files/.env.postgres.example +31 -0
- package/templates/layers/db-postgres/files/Directory.Packages.props +5 -0
- package/templates/layers/db-postgres/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/db-postgres/files/docker-compose.postgres.yml +28 -0
- package/templates/layers/db-postgres/files/docs/postgres.md +152 -0
- package/templates/layers/db-postgres/files/go.mod +1 -0
- package/templates/layers/db-postgres/files/internal/db/postgres.go +48 -0
- package/templates/layers/db-postgres/files/internal/db/postgres_config.go +79 -0
- package/templates/layers/db-postgres/files/internal/db/postgres_errors.go +59 -0
- package/templates/layers/db-postgres/files/internal/db/postgres_migrate.go +155 -0
- package/templates/layers/db-postgres/files/migrations/0001_init.sql +9 -0
- package/templates/layers/db-postgres/files/package.json +11 -0
- package/templates/layers/db-postgres/files/pyproject.toml +2 -0
- package/templates/layers/db-postgres/files/src/__solutionName.dot__.Data.Postgres/PostgresErrors.cs +57 -0
- package/templates/layers/db-postgres/files/src/__solutionName.dot__.Data.Postgres/PostgresMigrator.cs +171 -0
- package/templates/layers/db-postgres/files/src/__solutionName.dot__.Data.Postgres/PostgresOptions.cs +92 -0
- package/templates/layers/db-postgres/files/src/__solutionName.dot__.Data.Postgres/__solutionName.dot__.Data.Postgres.csproj +25 -0
- package/templates/layers/db-postgres/files/src/__solutionName.snake__/db/postgres.py +256 -0
- package/templates/layers/db-postgres/files/src/__solutionName.snake__/db/postgres_config.py +81 -0
- package/templates/layers/db-postgres/files/src/__solutionName.snake__/db/postgres_errors.py +48 -0
- package/templates/layers/db-postgres/files/src/__solutionName.snake__/db/postgres_migrate.py +132 -0
- package/templates/layers/db-postgres/files/src/db/postgres/config.ts +86 -0
- package/templates/layers/db-postgres/files/src/db/postgres/database.ts +109 -0
- package/templates/layers/db-postgres/files/src/db/postgres/errors.ts +48 -0
- package/templates/layers/db-postgres/files/src/db/postgres/index.ts +16 -0
- package/templates/layers/db-postgres/files/src/db/postgres/migrate.cli.ts +11 -0
- package/templates/layers/db-postgres/files/src/db/postgres/migrate.ts +134 -0
- package/templates/layers/db-postgres/files/src/db/postgres/repository.ts +159 -0
- package/templates/layers/db-sqlite/blueprint.yaml +147 -0
- package/templates/layers/db-sqlite/files/.env.sqlite.example +20 -0
- package/templates/layers/db-sqlite/files/.gitignore.sqlite +5 -0
- package/templates/layers/db-sqlite/files/Directory.Packages.props +6 -0
- package/templates/layers/db-sqlite/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/db-sqlite/files/docs/db/sqlite.md +91 -0
- package/templates/layers/db-sqlite/files/go.mod +1 -0
- package/templates/layers/db-sqlite/files/internal/db/sqlite/health.go +39 -0
- package/templates/layers/db-sqlite/files/internal/db/sqlite/migrate.go +106 -0
- package/templates/layers/db-sqlite/files/internal/db/sqlite/settings.go +103 -0
- package/templates/layers/db-sqlite/files/internal/db/sqlite/sqlite.go +78 -0
- package/templates/layers/db-sqlite/files/internal/db/sqlite/sqlite_test.go +94 -0
- package/templates/layers/db-sqlite/files/migrations/0001_init.sql +11 -0
- package/templates/layers/db-sqlite/files/package.json +8 -0
- package/templates/layers/db-sqlite/files/pyproject.toml +2 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/SqliteConnectionFactory.cs +67 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/SqliteHealth.cs +37 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/SqliteMigrator.cs +99 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/SqliteOptions.cs +81 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.dot__.Persistence.Sqlite/__solutionName.dot__.Persistence.Sqlite.csproj +18 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.snake__/db/sqlite/connection.py +49 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.snake__/db/sqlite/health.py +36 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.snake__/db/sqlite/migrate.py +58 -0
- package/templates/layers/db-sqlite/files/src/__solutionName.snake__/db/sqlite/settings.py +68 -0
- package/templates/layers/db-sqlite/files/src/db/sqlite/cli.ts +38 -0
- package/templates/layers/db-sqlite/files/src/db/sqlite/client.ts +45 -0
- package/templates/layers/db-sqlite/files/src/db/sqlite/health.ts +30 -0
- package/templates/layers/db-sqlite/files/src/db/sqlite/index.ts +8 -0
- package/templates/layers/db-sqlite/files/src/db/sqlite/migrate.ts +51 -0
- package/templates/layers/db-sqlite/files/src/db/sqlite/settings.ts +75 -0
- package/templates/layers/db-sqlite/files/tests/test_db_sqlite.py +50 -0
- package/templates/layers/devcontainer/blueprint.yaml +130 -0
- package/templates/layers/devcontainer/files/.devcontainer/devcontainer.json +61 -0
- package/templates/layers/devcontainer/files/.devcontainer/post-create.sh +29 -0
- package/templates/layers/devcontainer/files/.devcontainer/setup-dotnet.sh +19 -0
- package/templates/layers/devcontainer/files/.devcontainer/setup-go.sh +13 -0
- package/templates/layers/devcontainer/files/.devcontainer/setup-node.sh +29 -0
- package/templates/layers/devcontainer/files/.devcontainer/setup-python.sh +32 -0
- package/templates/layers/devcontainer/files/docs/devcontainer.md +75 -0
- package/templates/layers/docker/blueprint.yaml +168 -0
- package/templates/layers/docker/files/.dockerignore +80 -0
- package/templates/layers/docker/files/.env.docker.example +17 -0
- package/templates/layers/docker/files/Dockerfile.dotnet +38 -0
- package/templates/layers/docker/files/Dockerfile.go +40 -0
- package/templates/layers/docker/files/Dockerfile.nextjs +42 -0
- package/templates/layers/docker/files/Dockerfile.nodejs +46 -0
- package/templates/layers/docker/files/Dockerfile.python +52 -0
- package/templates/layers/docker/files/Dockerfile.spa +30 -0
- package/templates/layers/docker/files/compose.yaml +35 -0
- package/templates/layers/docker/files/docker/nginx.conf +44 -0
- package/templates/layers/docker/files/docs/docker.md +115 -0
- package/templates/layers/docker/files/next.config.ts +11 -0
- package/templates/layers/docker-compose/blueprint.yaml +118 -0
- package/templates/layers/docker-compose/files/.env.compose.example +66 -0
- package/templates/layers/docker-compose/files/compose/cache-none.yml +3 -0
- package/templates/layers/docker-compose/files/compose/cache-redis.yml +28 -0
- package/templates/layers/docker-compose/files/compose/cache-valkey.yml +27 -0
- package/templates/layers/docker-compose/files/compose/db-mongo.yml +27 -0
- package/templates/layers/docker-compose/files/compose/db-mysql.yml +31 -0
- package/templates/layers/docker-compose/files/compose/db-none.yml +4 -0
- package/templates/layers/docker-compose/files/compose/db-postgres.yml +28 -0
- package/templates/layers/docker-compose/files/compose/queue-kafka.yml +35 -0
- package/templates/layers/docker-compose/files/compose/queue-nats.yml +26 -0
- package/templates/layers/docker-compose/files/compose/queue-none.yml +3 -0
- package/templates/layers/docker-compose/files/compose/queue-rabbitmq.yml +27 -0
- package/templates/layers/docker-compose/files/docker-compose.yml +20 -0
- package/templates/layers/docker-compose/files/docs/local-stack.md +135 -0
- package/templates/layers/evals/blueprint.yaml +211 -0
- package/templates/layers/evals/files/.github/workflows/evals-node.yml +55 -0
- package/templates/layers/evals/files/.github/workflows/evals-python.yml +54 -0
- package/templates/layers/evals/files/docs/evals.md +68 -0
- package/templates/layers/evals/files/evals/README.md +73 -0
- package/templates/layers/evals/files/evals/assertions.py +56 -0
- package/templates/layers/evals/files/evals/assertions.ts +66 -0
- package/templates/layers/evals/files/evals/budget.py +55 -0
- package/templates/layers/evals/files/evals/budget.ts +61 -0
- package/templates/layers/evals/files/evals/cli.ts +76 -0
- package/templates/layers/evals/files/evals/config.py +83 -0
- package/templates/layers/evals/files/evals/config.ts +77 -0
- package/templates/layers/evals/files/evals/dataset.py +90 -0
- package/templates/layers/evals/files/evals/dataset.ts +101 -0
- package/templates/layers/evals/files/evals/datasets/case.schema.json +67 -0
- package/templates/layers/evals/files/evals/datasets/golden.jsonl +4 -0
- package/templates/layers/evals/files/evals/run.py +85 -0
- package/templates/layers/evals/files/evals/runner.py +114 -0
- package/templates/layers/evals/files/evals/runner.ts +125 -0
- package/templates/layers/evals/files/evals/target.ts +95 -0
- package/templates/layers/evals/files/evals/targets.py +103 -0
- package/templates/layers/evals/files/evals/tracing.py +49 -0
- package/templates/layers/evals/files/evals/tracing.ts +31 -0
- package/templates/layers/evals/files/evals/tsconfig.json +15 -0
- package/templates/layers/health-checks/blueprint.yaml +170 -0
- package/templates/layers/health-checks/files/.env.health.example +23 -0
- package/templates/layers/health-checks/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/health-checks/files/docs/health-checks.md +200 -0
- package/templates/layers/health-checks/files/internal/health/config.go +96 -0
- package/templates/layers/health-checks/files/internal/health/health.go +113 -0
- package/templates/layers/health-checks/files/internal/health/health_test.go +102 -0
- package/templates/layers/health-checks/files/internal/health/http.go +56 -0
- package/templates/layers/health-checks/files/internal/health/probes.go +88 -0
- package/templates/layers/health-checks/files/internal/health/runner.go +100 -0
- package/templates/layers/health-checks/files/package.json +5 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/DependencyProbeOptions.cs +26 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthEndpointExtensions.cs +34 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthOptions.cs +25 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthProbeResponder.cs +121 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthServiceCollectionExtensions.cs +51 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HealthTags.cs +10 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/HttpDependencyHealthCheck.cs +44 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/TcpDependencyHealthCheck.cs +36 -0
- package/templates/layers/health-checks/files/src/__solutionName.dot__.Health/__solutionName.dot__.Health.csproj +15 -0
- package/templates/layers/health-checks/files/src/__solutionName.snake__/health/__init__.py +28 -0
- package/templates/layers/health-checks/files/src/__solutionName.snake__/health/models.py +48 -0
- package/templates/layers/health-checks/files/src/__solutionName.snake__/health/probes.py +82 -0
- package/templates/layers/health-checks/files/src/__solutionName.snake__/health/register.py +15 -0
- package/templates/layers/health-checks/files/src/__solutionName.snake__/health/registry.py +24 -0
- package/templates/layers/health-checks/files/src/__solutionName.snake__/health/router.py +52 -0
- package/templates/layers/health-checks/files/src/__solutionName.snake__/health/runner.py +94 -0
- package/templates/layers/health-checks/files/src/__solutionName.snake__/health/settings.py +33 -0
- package/templates/layers/health-checks/files/src/app/health/live/route.ts +11 -0
- package/templates/layers/health-checks/files/src/app/health/ready/route.ts +10 -0
- package/templates/layers/health-checks/files/src/app/health/startup/route.ts +10 -0
- package/templates/layers/health-checks/files/src/health/__tests__/health.test.ts +66 -0
- package/templates/layers/health-checks/files/src/health/config.ts +62 -0
- package/templates/layers/health-checks/files/src/health/handler.ts +50 -0
- package/templates/layers/health-checks/files/src/health/index.ts +20 -0
- package/templates/layers/health-checks/files/src/health/node/http.ts +26 -0
- package/templates/layers/health-checks/files/src/health/node/tcp.ts +36 -0
- package/templates/layers/health-checks/files/src/health/probes.ts +61 -0
- package/templates/layers/health-checks/files/src/health/register.ts +15 -0
- package/templates/layers/health-checks/files/src/health/registry.ts +27 -0
- package/templates/layers/health-checks/files/src/health/runner.ts +76 -0
- package/templates/layers/health-checks/files/src/health/types.ts +39 -0
- package/templates/layers/health-checks/files/tests/__init__.py +1 -0
- package/templates/layers/health-checks/files/tests/test_health.py +51 -0
- package/templates/layers/lint-format/blueprint.yaml +178 -0
- package/templates/layers/lint-format/files/.editorconfig +87 -0
- package/templates/layers/lint-format/files/.golangci.yml +34 -0
- package/templates/layers/lint-format/files/.prettierignore +20 -0
- package/templates/layers/lint-format/files/.prettierrc.json +11 -0
- package/templates/layers/lint-format/files/docs/lint-format.md +111 -0
- package/templates/layers/lint-format/files/eslint.config.mjs +43 -0
- package/templates/layers/lint-format/files/package.json +9 -0
- package/templates/layers/lint-format/files/ruff.toml +25 -0
- package/templates/layers/observability-otel/blueprint.yaml +212 -0
- package/templates/layers/observability-otel/files/.env.otel.example +30 -0
- package/templates/layers/observability-otel/files/Directory.Packages.props +8 -0
- package/templates/layers/observability-otel/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/observability-otel/files/docker-compose.otel.yml +16 -0
- package/templates/layers/observability-otel/files/docs/observability.md +224 -0
- package/templates/layers/observability-otel/files/go.mod +7 -0
- package/templates/layers/observability-otel/files/internal/telemetry/config.go +122 -0
- package/templates/layers/observability-otel/files/internal/telemetry/http.go +33 -0
- package/templates/layers/observability-otel/files/internal/telemetry/logging.go +84 -0
- package/templates/layers/observability-otel/files/internal/telemetry/provider.go +77 -0
- package/templates/layers/observability-otel/files/otel-collector-config.yaml +47 -0
- package/templates/layers/observability-otel/files/package.json +15 -0
- package/templates/layers/observability-otel/files/pyproject.toml +2 -0
- package/templates/layers/observability-otel/files/src/__solutionName.dot__.Observability/ObservabilityExtensions.cs +81 -0
- package/templates/layers/observability-otel/files/src/__solutionName.dot__.Observability/ObservabilityOptions.cs +37 -0
- package/templates/layers/observability-otel/files/src/__solutionName.dot__.Observability/__solutionName.dot__.Observability.csproj +25 -0
- package/templates/layers/observability-otel/files/src/__solutionName.snake__/otel/__init__.py +15 -0
- package/templates/layers/observability-otel/files/src/__solutionName.snake__/otel/config.py +99 -0
- package/templates/layers/observability-otel/files/src/__solutionName.snake__/otel/log.py +86 -0
- package/templates/layers/observability-otel/files/src/__solutionName.snake__/otel/setup.py +124 -0
- package/templates/layers/observability-otel/files/src/instrumentation.ts +9 -0
- package/templates/layers/observability-otel/files/src/otel/config.ts +83 -0
- package/templates/layers/observability-otel/files/src/otel/logger.ts +46 -0
- package/templates/layers/observability-otel/files/src/otel/register.ts +5 -0
- package/templates/layers/observability-otel/files/src/otel/sdk.ts +73 -0
- package/templates/layers/queue-broker/blueprint.yaml +194 -0
- package/templates/layers/queue-broker/files/.env.queue.example +35 -0
- package/templates/layers/queue-broker/files/Directory.Packages.props +7 -0
- package/templates/layers/queue-broker/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/queue-broker/files/cmd/worker/main.go +34 -0
- package/templates/layers/queue-broker/files/docker-compose.queue-rabbitmq.yml +26 -0
- package/templates/layers/queue-broker/files/docker-compose.queue-redis.yml +23 -0
- package/templates/layers/queue-broker/files/docs/queue-asynq.md +71 -0
- package/templates/layers/queue-broker/files/docs/queue-bullmq.md +62 -0
- package/templates/layers/queue-broker/files/docs/queue-celery.md +58 -0
- package/templates/layers/queue-broker/files/docs/queue-masstransit.md +84 -0
- package/templates/layers/queue-broker/files/go.mod +2 -0
- package/templates/layers/queue-broker/files/internal/queue/client.go +57 -0
- package/templates/layers/queue-broker/files/internal/queue/config.go +109 -0
- package/templates/layers/queue-broker/files/internal/queue/config_test.go +38 -0
- package/templates/layers/queue-broker/files/internal/queue/handlers.go +33 -0
- package/templates/layers/queue-broker/files/internal/queue/server.go +29 -0
- package/templates/layers/queue-broker/files/internal/queue/tasks.go +11 -0
- package/templates/layers/queue-broker/files/package.json +6 -0
- package/templates/layers/queue-broker/files/pyproject.toml +2 -0
- package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/Consumers/WelcomeEmailRequestedConsumer.cs +24 -0
- package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/Contracts/WelcomeEmailRequested.cs +7 -0
- package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/IJobPublisher.cs +11 -0
- package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/JobPublisher.cs +10 -0
- package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/QueueOptions.cs +32 -0
- package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/QueueServiceCollectionExtensions.cs +60 -0
- package/templates/layers/queue-broker/files/src/__solutionName.dot__.Queue/__solutionName.dot__.Queue.csproj +21 -0
- package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/__init__.py +12 -0
- package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/app.py +35 -0
- package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/config.py +90 -0
- package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/producer.py +10 -0
- package/templates/layers/queue-broker/files/src/__solutionName.snake__/queue/tasks.py +31 -0
- package/templates/layers/queue-broker/files/src/queue/config.ts +60 -0
- package/templates/layers/queue-broker/files/src/queue/connection.ts +19 -0
- package/templates/layers/queue-broker/files/src/queue/handlers.ts +22 -0
- package/templates/layers/queue-broker/files/src/queue/index.ts +8 -0
- package/templates/layers/queue-broker/files/src/queue/jobs.ts +15 -0
- package/templates/layers/queue-broker/files/src/queue/producer.ts +39 -0
- package/templates/layers/queue-broker/files/src/queue/worker.cli.ts +32 -0
- package/templates/layers/queue-broker/files/src/queue/worker.ts +28 -0
- package/templates/layers/queue-broker/files/tests/test_queue_config.py +37 -0
- package/templates/layers/release-automation/blueprint.yaml +205 -0
- package/templates/layers/release-automation/files/.changeset/README.md +31 -0
- package/templates/layers/release-automation/files/.changeset/config.json +12 -0
- package/templates/layers/release-automation/files/.githooks/commit-msg +32 -0
- package/templates/layers/release-automation/files/.github/workflows/commit-conventions.yml +45 -0
- package/templates/layers/release-automation/files/.github/workflows/release-changesets.yml +68 -0
- package/templates/layers/release-automation/files/.github/workflows/release-dotnet.yml +90 -0
- package/templates/layers/release-automation/files/.github/workflows/release-go.yml +89 -0
- package/templates/layers/release-automation/files/.github/workflows/release-monorepo.yml +40 -0
- package/templates/layers/release-automation/files/.github/workflows/release-node.yml +85 -0
- package/templates/layers/release-automation/files/.github/workflows/release-python.yml +68 -0
- package/templates/layers/release-automation/files/.release-please-manifest.json +3 -0
- package/templates/layers/release-automation/files/docs/release-automation.md +154 -0
- package/templates/layers/release-automation/files/release-please-config.json +22 -0
- package/templates/layers/security-supply-chain/blueprint.yaml +208 -0
- package/templates/layers/security-supply-chain/files/.githooks/pre-commit +17 -0
- package/templates/layers/security-supply-chain/files/.github/dependabot.yml +30 -0
- package/templates/layers/security-supply-chain/files/.github/workflows/codeql.yml +54 -0
- package/templates/layers/security-supply-chain/files/.github/workflows/dependency-review.yml +35 -0
- package/templates/layers/security-supply-chain/files/.github/workflows/sbom.yml +56 -0
- package/templates/layers/security-supply-chain/files/.github/workflows/scorecard.yml +51 -0
- package/templates/layers/security-supply-chain/files/.github/workflows/secret-scan.yml +62 -0
- package/templates/layers/security-supply-chain/files/.gitleaks.toml +42 -0
- package/templates/layers/security-supply-chain/files/SECURITY.md +36 -0
- package/templates/layers/security-supply-chain/files/docs/security-supply-chain.md +124 -0
- package/templates/layers/security-supply-chain/files/npmrc +13 -0
- package/templates/layers/security-supply-chain/files/renovate.json +26 -0
- package/templates/layers/testing-e2e/blueprint.yaml +199 -0
- package/templates/layers/testing-e2e/files/.env.e2e.example +32 -0
- package/templates/layers/testing-e2e/files/Directory.Packages.props +7 -0
- package/templates/layers/testing-e2e/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/testing-e2e/files/docs/testing-e2e.md +106 -0
- package/templates/layers/testing-e2e/files/e2e/api/contract.spec.ts +37 -0
- package/templates/layers/testing-e2e/files/e2e/api/health.spec.ts +29 -0
- package/templates/layers/testing-e2e/files/e2e/browser/app.spec.ts +27 -0
- package/templates/layers/testing-e2e/files/e2e/browser/navigation.spec.ts +26 -0
- package/templates/layers/testing-e2e/files/e2e/config.ts +85 -0
- package/templates/layers/testing-e2e/files/e2e/support.ts +20 -0
- package/templates/layers/testing-e2e/files/package.json +8 -0
- package/templates/layers/testing-e2e/files/playwright.config.ts +44 -0
- package/templates/layers/testing-e2e/files/test/e2e/config.go +71 -0
- package/templates/layers/testing-e2e/files/test/e2e/contract_test.go +65 -0
- package/templates/layers/testing-e2e/files/test/e2e/health_test.go +71 -0
- package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/ApiContractTests.cs +51 -0
- package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/DeploymentFixture.cs +44 -0
- package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/E2eSettings.cs +26 -0
- package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/HealthContractTests.cs +42 -0
- package/templates/layers/testing-e2e/files/tests/__solutionName.dot__.E2E/__solutionName.dot__.E2E.csproj +23 -0
- package/templates/layers/testing-e2e/files/tests/e2e/conftest.py +52 -0
- package/templates/layers/testing-e2e/files/tests/e2e/e2e_config.py +47 -0
- package/templates/layers/testing-e2e/files/tests/e2e/test_api_contract.py +35 -0
- package/templates/layers/testing-e2e/files/tests/e2e/test_health_contract.py +28 -0
- package/templates/layers/testing-unit/blueprint.yaml +161 -0
- package/templates/layers/testing-unit/files/.coveragerc +12 -0
- package/templates/layers/testing-unit/files/Directory.Packages.props +9 -0
- package/templates/layers/testing-unit/files/__solutionName.dot__.slnx +5 -0
- package/templates/layers/testing-unit/files/docs/testing.md +90 -0
- package/templates/layers/testing-unit/files/internal/testsupport/clock.go +89 -0
- package/templates/layers/testing-unit/files/internal/testsupport/clock_test.go +132 -0
- package/templates/layers/testing-unit/files/internal/testsupport/recorder.go +41 -0
- package/templates/layers/testing-unit/files/package.json +10 -0
- package/templates/layers/testing-unit/files/pyproject.toml +2 -0
- package/templates/layers/testing-unit/files/pytest.ini +16 -0
- package/templates/layers/testing-unit/files/tests/__solutionName.dot__.Tests/Recorder.cs +66 -0
- package/templates/layers/testing-unit/files/tests/__solutionName.dot__.Tests/RecorderTests.cs +90 -0
- package/templates/layers/testing-unit/files/tests/__solutionName.dot__.Tests/__solutionName.dot__.Tests.csproj +32 -0
- package/templates/layers/testing-unit/files/tests/__solutionName.dot__.Tests/coverlet.runsettings +17 -0
- package/templates/layers/testing-unit/files/tests/conftest.py +17 -0
- package/templates/layers/testing-unit/files/tests/support/clock.ts +81 -0
- package/templates/layers/testing-unit/files/tests/support/index.ts +2 -0
- package/templates/layers/testing-unit/files/tests/support/recorder.ts +21 -0
- package/templates/layers/testing-unit/files/tests/support.py +78 -0
- package/templates/layers/testing-unit/files/tests/support.test.ts +87 -0
- package/templates/layers/testing-unit/files/tests/test_support.py +85 -0
- package/templates/layers/testing-unit/files/vitest.config.ts +52 -0
|
@@ -0,0 +1,1364 @@
|
|
|
1
|
+
# Groundplan template catalog - source research
|
|
2
|
+
# category: observability
|
|
3
|
+
# researched: 2026-07-18
|
|
4
|
+
# adversarially verified: 2026-07-18
|
|
5
|
+
# gap-fill pass + full re-verification: 2026-07-19
|
|
6
|
+
# adversarial re-verification (3rd pass): 2026-07-19
|
|
7
|
+
#
|
|
8
|
+
# VERIFICATION STATUS - READ THIS FIRST
|
|
9
|
+
# The 2026-07-19 adversarial pass independently re-verified all 38 pre-existing entries
|
|
10
|
+
# (33 sources + 1 reference-only + 4 excluded) against primary sources, and added 4 new
|
|
11
|
+
# source entries, giving 42 total: 37 sources + 1 reference-only + 4 excluded.
|
|
12
|
+
#
|
|
13
|
+
# License: read from each repository's actual LICENSE file via raw.githubusercontent.com,
|
|
14
|
+
# AND cross-checked against the GitHub API's license.spdx_id for all 42 entries once the
|
|
15
|
+
# rate-limit window allowed. The two agreed everywhere the API committed to an answer.
|
|
16
|
+
# Every recorded `spdx` matched the licence text actually served. NO license mismatches
|
|
17
|
+
# were found - the gate held on all 42 entries, and on all 38 pre-existing ones across
|
|
18
|
+
# three consecutive passes. Nothing was dropped for licence this pass.
|
|
19
|
+
# Three repos return spdx_id NOASSERTION, i.e. the API declines to classify them, and these
|
|
20
|
+
# are exactly the ones where reading the raw text is load-bearing:
|
|
21
|
+
# - hynek/structlog -> dual "Apache-2.0 OR MIT" (LICENSE-MIT + LICENSE-APACHE + NOTICE,
|
|
22
|
+
# no root LICENSE). Vendorable; reproduce one licence's notice.
|
|
23
|
+
# - SigNoz/signoz -> MIT Expat core with a proprietary ee/ carve-out. Vendorable only
|
|
24
|
+
# outside ee/ and cmd/enterprise/.
|
|
25
|
+
# - getsentry/sentry -> FSL-1.1-Apache-2.0, source-available. EXCLUDED, and it is the
|
|
26
|
+
# NOASSERTION case that would have been most damaging to guess.
|
|
27
|
+
# Anything trusting spdx_id alone would have mis-shelved all three. The three carve-out claims
|
|
28
|
+
# (SigNoz ee/, coroot absent ee/, structlog dual-licence file layout) were each re-read
|
|
29
|
+
# from source and confirmed verbatim; see the licenseNote on those entries.
|
|
30
|
+
# Stars / archived / lastCommit: star counts read from the github.com repo star counter and
|
|
31
|
+
# lastCommit from the DEFAULT-BRANCH commits.atom feed. Default branch matters: two repos
|
|
32
|
+
# here do not use main/master (getsentry/sentry-javascript is `develop`,
|
|
33
|
+
# getsentry/sentry-python is `master` with a stale `main` still present), and reading the
|
|
34
|
+
# wrong branch understates lastCommit by months. Both were resolved against the default
|
|
35
|
+
# branch and both recorded dates are correct. All 42 URLs return HTTP 200, and the API
|
|
36
|
+
# confirms archived=false and disabled=false on every one. Every star count is within 0.1%
|
|
37
|
+
# of the recorded figure - no entry came close to the 20% drift threshold. Oldest pushed_at
|
|
38
|
+
# is OpenSLO at 2025-11-25, ~8 months, so no entry is anywhere near the 18-month gate.
|
|
39
|
+
# ONE REPO WAS RENAMED: dotnet/aspire is now microsoft/aspire. The old path still resolves
|
|
40
|
+
# over HTML and raw.githubusercontent because GitHub keeps rename redirects, so only the API
|
|
41
|
+
# exposes it - and it does so as a bare HTTP 301, which silently yields no repo object to
|
|
42
|
+
# tooling that does not follow redirects. Name and url updated to canonical. Worth repeating
|
|
43
|
+
# on future passes: a 301 from api.github.com/repos/{owner}/{repo} means renamed, not missing.
|
|
44
|
+
# Note on pushed_at vs lastCommit: these legitimately differ. pushed_at advances on a push to
|
|
45
|
+
# ANY branch or tag; lastCommit here is the DEFAULT-branch commit date. Several entries show
|
|
46
|
+
# a later pushed_at for that reason (see google/slo-generator, where the gap is ~4 months).
|
|
47
|
+
# Neither figure is wrong; do not reconcile them by editing one.
|
|
48
|
+
# Path claims: every file and directory named in a whatToBorrow was fetched. Negative
|
|
49
|
+
# controls (known-bad paths) were run to confirm the checker distinguishes 200 from 404.
|
|
50
|
+
#
|
|
51
|
+
# SYSTEMATIC DEFECT FOUND AND FIXED THIS PASS - CORE vs CONTRIB.
|
|
52
|
+
# The 2026-07-19 pass found the same error repeated across FOUR languages: artifacts that
|
|
53
|
+
# live in an OTel *-contrib repo were attributed to the corresponding core repo, so the
|
|
54
|
+
# cited paths 404 and a scaffolder following them would generate nothing.
|
|
55
|
+
# - opentelemetry-go: cited example/otel-collector and example/dice; core has no
|
|
56
|
+
# example/ directory at all. They are in opentelemetry-go-contrib/examples/.
|
|
57
|
+
# - opentelemetry-python: cited the opentelemetry-instrument zero-code CLI; that console
|
|
58
|
+
# script is declared in opentelemetry-python-contrib, not core.
|
|
59
|
+
# - opentelemetry-js: cited getNodeAutoInstrumentations() alongside NodeSDK as if both
|
|
60
|
+
# were core; NodeSDK is core, the auto-instrumentations are in opentelemetry-js-contrib.
|
|
61
|
+
# - opentelemetry-dotnet: its `stack` line advertised "ASP.NET Core and HttpClient
|
|
62
|
+
# instrumentation"; src/OpenTelemetry.Instrumentation.AspNetCore and .Http both 404 in
|
|
63
|
+
# core and live in opentelemetry-dotnet-contrib.
|
|
64
|
+
# Each core entry now states the split explicitly, and the four contrib repos were added as
|
|
65
|
+
# first-class gated entries (all Apache-2.0, all verified) rather than left as bare prose
|
|
66
|
+
# references - code we point at must clear the same licence gate as code we list.
|
|
67
|
+
# Two further stale-path defects were corrected outside that family:
|
|
68
|
+
# - opentelemetry-java-instrumentation cited docs/suppressing-instrumentation.md, which
|
|
69
|
+
# does not exist; the surviving docs are agent-features.md, supported-libraries.md and
|
|
70
|
+
# advanced-configuration-options.md.
|
|
71
|
+
# - SigNoz was told to borrow "the deploy/ compose files". Upstream has deprecated and
|
|
72
|
+
# DELETED them - deploy/ now holds only README.md, MIGRATION.md and a dead install.sh,
|
|
73
|
+
# and deploy/README.md says so in as many words. That entry was rewritten around what
|
|
74
|
+
# still exists (conf/example.yaml, pkg/telemetrystore/) and demoted in practice to
|
|
75
|
+
# reference reading.
|
|
76
|
+
# A licence nuance was also made explicit on grafana/docker-otel-lgtm: the repo is honestly
|
|
77
|
+
# Apache-2.0 and its own files are safe to copy, but its Dockerfile DOWNLOADS pinned Grafana
|
|
78
|
+
# and Loki binaries, so the built image is an AGPL-containing aggregate. Copying the repo is
|
|
79
|
+
# clean; redistributing the image as your own artifact is not.
|
|
80
|
+
# One stale API convention was corrected: getsentry/sentry-javascript's Next.js layout.
|
|
81
|
+
# The recorded three-file convention put client init in sentry.client.config.ts; the SDK
|
|
82
|
+
# source now logs a deprecation warning for that filename and states it stops working under
|
|
83
|
+
# Turbopack, having moved client init to instrumentation-client.ts. Read from
|
|
84
|
+
# packages/nextjs/src/config/webpack.ts, not from docs. Everything else resolved.
|
|
85
|
+
# Staleness: the oldest entry is OpenSLO at 2025-10-09 (~9 months), comfortably inside the
|
|
86
|
+
# 18-month gate. No entry marked maintained:true is stale.
|
|
87
|
+
#
|
|
88
|
+
# licenseClass: vendorable = MIT/Apache-2.0/BSD/ISC/Unlicense/CC0/0BSD (copy and adapt,
|
|
89
|
+
# with attribution where the license requires it - Apache-2.0 and BSD need the notice);
|
|
90
|
+
# reference-only = MPL-2.0/LGPL/EPL (read for ideas, do not copy files);
|
|
91
|
+
# excluded = GPL/AGPL/SSPL/BUSL/source-available/unlicensed.
|
|
92
|
+
# maintained = not archived AND pushed_at within 18 months of the research date.
|
|
93
|
+
|
|
94
|
+
category: observability
|
|
95
|
+
|
|
96
|
+
sources:
|
|
97
|
+
- name: "grafana/docker-otel-lgtm"
|
|
98
|
+
url: "https://github.com/grafana/docker-otel-lgtm"
|
|
99
|
+
stars: 1939
|
|
100
|
+
spdx: "Apache-2.0"
|
|
101
|
+
licenseClass: vendorable
|
|
102
|
+
maintained: true
|
|
103
|
+
lastCommit: "2026-07-17"
|
|
104
|
+
archived: false
|
|
105
|
+
stack: "Docker image bundling OpenTelemetry Collector + Loki, Grafana, Tempo, Prometheus/Mimir, Pyroscope"
|
|
106
|
+
complexity: simple
|
|
107
|
+
proposedLayerIds:
|
|
108
|
+
- obs-stack-lgtm-single-container
|
|
109
|
+
- otel-collector-config
|
|
110
|
+
- obs-grafana-provisioning
|
|
111
|
+
- obs-local-dev-backend
|
|
112
|
+
whatToBorrow: >-
|
|
113
|
+
The single best "observability backend in one container" layer. Borrow docker/Dockerfile
|
|
114
|
+
plus docker/run-all.sh, the supervisor-style entrypoint that boots all five backends from
|
|
115
|
+
one image via the per-component run-*.sh scripts. Take docker/otelcol-config.yaml as a
|
|
116
|
+
minimal working collector config that fans OTLP out to Loki for logs, Tempo for traces and
|
|
117
|
+
Prometheus for metrics. For zero-click Grafana, the provisioning artifacts are FLAT FILES
|
|
118
|
+
in docker/, not a directory tree: docker/grafana-datasources.yaml,
|
|
119
|
+
docker/grafana-dashboards.yaml and docker/grafana-dashboard-*.json (red-metrics-classic,
|
|
120
|
+
red-metrics-native, jvm-metrics). The Dockerfile COPYs them to
|
|
121
|
+
/otel-lgtm/grafana/conf/provisioning/{datasources,dashboards}/ - that path is the
|
|
122
|
+
destination inside the image, so replicate the copy step, do not look for it in the repo.
|
|
123
|
+
The examples/ directory holds small per-language senders that convert directly into
|
|
124
|
+
template smoke tests.
|
|
125
|
+
whatToAvoid: >-
|
|
126
|
+
Explicitly not a production target - no persistence by default, admin/admin credentials
|
|
127
|
+
baked into the image, and all five components share one container so they cannot be
|
|
128
|
+
scaled, upgraded or restarted independently. Note the repo ships an IMAGE, not a compose
|
|
129
|
+
file, so the generated repo must supply its own compose service. Use it strictly as the
|
|
130
|
+
local/CI backend and keep a separate production backend layer; a generated repo that ships
|
|
131
|
+
this as its only observability story will lose all telemetry on container restart.
|
|
132
|
+
licenseNote: >-
|
|
133
|
+
Apache-2.0 confirmed from the LICENSE file, and every artifact this entry tells you to
|
|
134
|
+
copy (Dockerfile, run-*.sh, otelcol-config.yaml, the grafana-* provisioning files and
|
|
135
|
+
dashboards) is original work in THIS repo and therefore genuinely Apache-2.0.
|
|
136
|
+
But do not over-read that: the repo vendors no AGPL source, it DOWNLOADS AGPL binaries
|
|
137
|
+
at build time. docker/Dockerfile pins GRAFANA_VERSION and LOKI_VERSION as build args
|
|
138
|
+
(v13.1.0 and v3.7.3 at the time of checking) and fetches the released binaries, and
|
|
139
|
+
there is no NOTICE or third-party-license file in the repo to inherit. The practical
|
|
140
|
+
boundary: copying this repo's own files into a generated repo is clean, and running or
|
|
141
|
+
referencing the resulting image is clean, but the image itself is an aggregate
|
|
142
|
+
containing AGPL components - so a generated repo must never present that image as its
|
|
143
|
+
own redistributable artifact, and must never lift Grafana or Loki source out of it.
|
|
144
|
+
See the grafana/loki and grafana/grafana entries in `excluded` for the same boundary.
|
|
145
|
+
|
|
146
|
+
- name: "open-telemetry/opentelemetry-collector-contrib"
|
|
147
|
+
url: "https://github.com/open-telemetry/opentelemetry-collector-contrib"
|
|
148
|
+
stars: 4796
|
|
149
|
+
spdx: "Apache-2.0"
|
|
150
|
+
licenseClass: vendorable
|
|
151
|
+
maintained: true
|
|
152
|
+
lastCommit: "2026-07-17"
|
|
153
|
+
archived: false
|
|
154
|
+
stack: "Go - OpenTelemetry Collector components (receivers, processors, exporters, connectors)"
|
|
155
|
+
complexity: enterprise
|
|
156
|
+
proposedLayerIds:
|
|
157
|
+
- otel-collector-config
|
|
158
|
+
- obs-pipeline-processors
|
|
159
|
+
- obs-tail-sampling
|
|
160
|
+
whatToBorrow: >-
|
|
161
|
+
This is where real collector COMPONENT configuration lives. Borrow the processor
|
|
162
|
+
configuration patterns that every production pipeline needs - memory_limiter and batch
|
|
163
|
+
ordering, resourcedetection for cloud/host attributes, transform/filter with OTTL
|
|
164
|
+
statements, and tailsamplingprocessor policy blocks for keeping errors and slow traces
|
|
165
|
+
while dropping the rest. Each component directory carries its own README with a worked
|
|
166
|
+
config example; those examples are the copyable unit.
|
|
167
|
+
whatToAvoid: >-
|
|
168
|
+
Enormous surface - hundreds of components at differing stability levels, and alpha
|
|
169
|
+
components change their config schema between minor releases, so copied YAML silently
|
|
170
|
+
breaks on upgrade. Check each component's stability badge before a template depends on
|
|
171
|
+
it. Never vendor Go source from this repo; take YAML config only. The full contrib
|
|
172
|
+
distribution is far too heavy to be a sensible default runtime.
|
|
173
|
+
CORRECTION: the OCB builder does NOT live here. A previous revision of this file
|
|
174
|
+
attributed it to contrib and called it the highest-leverage artifact in this repo - that
|
|
175
|
+
was wrong and would have sent the scaffolder to a path that 404s. cmd/builder is in
|
|
176
|
+
open-telemetry/opentelemetry-collector; ready-made distribution manifests are in
|
|
177
|
+
open-telemetry/opentelemetry-collector-releases (distributions/). See the dedicated
|
|
178
|
+
entry below.
|
|
179
|
+
|
|
180
|
+
- name: "open-telemetry/opentelemetry-collector-releases"
|
|
181
|
+
url: "https://github.com/open-telemetry/opentelemetry-collector-releases"
|
|
182
|
+
stars: 488
|
|
183
|
+
spdx: "Apache-2.0"
|
|
184
|
+
licenseClass: vendorable
|
|
185
|
+
maintained: true
|
|
186
|
+
lastCommit: "2026-07-15"
|
|
187
|
+
archived: false
|
|
188
|
+
stack: "OCB (OpenTelemetry Collector Builder) distribution manifests and release tooling"
|
|
189
|
+
complexity: standard
|
|
190
|
+
proposedLayerIds:
|
|
191
|
+
- otel-collector-custom-distro
|
|
192
|
+
whatToBorrow: >-
|
|
193
|
+
The correct home for the custom-distribution pattern that the contrib entry previously
|
|
194
|
+
misattributed. distributions/ holds real manifest.yaml files (otelcol, otelcol-contrib,
|
|
195
|
+
otelcol-k8s) showing the exact schema - dist: name/description/output_path, then explicit
|
|
196
|
+
receivers/processors/exporters/connectors lists pinned by gomod line. Generating one of
|
|
197
|
+
these plus an `ocb --config manifest.yaml` build step produces a slim purpose-built
|
|
198
|
+
collector binary instead of shipping the multi-hundred-megabyte contrib image. This is
|
|
199
|
+
the single highest-leverage collector artifact a scaffolder can generate.
|
|
200
|
+
whatToAvoid: >-
|
|
201
|
+
Every component gomod line carries a version that must match the collector core version
|
|
202
|
+
or the build fails with confusing Go module errors - generate the manifest with one
|
|
203
|
+
pinned version variable rather than per-line literals. The builder is a build-time
|
|
204
|
+
dependency, so the generated repo needs a Go toolchain in CI even if the app is not Go.
|
|
205
|
+
verificationNote: >-
|
|
206
|
+
Added during adversarial verification to carry the OCB layer that was wrongly attributed
|
|
207
|
+
to collector-contrib. Apache-2.0 confirmed from the LICENSE file; distributions/ path
|
|
208
|
+
confirmed to resolve.
|
|
209
|
+
|
|
210
|
+
- name: "open-telemetry/opentelemetry-dotnet"
|
|
211
|
+
url: "https://github.com/open-telemetry/opentelemetry-dotnet"
|
|
212
|
+
stars: 3731
|
|
213
|
+
spdx: "Apache-2.0"
|
|
214
|
+
licenseClass: vendorable
|
|
215
|
+
maintained: true
|
|
216
|
+
lastCommit: "2026-07-17"
|
|
217
|
+
archived: false
|
|
218
|
+
stack: ".NET / C# - OpenTelemetry SDK, OTLP/Prometheus/Console exporters, hosting extensions (instrumentation packages are in dotnet-contrib)"
|
|
219
|
+
complexity: standard
|
|
220
|
+
proposedLayerIds:
|
|
221
|
+
- otel-instrumentation-dotnet
|
|
222
|
+
- otel-exporter-otlp
|
|
223
|
+
- obs-metrics-prometheus
|
|
224
|
+
whatToBorrow: >-
|
|
225
|
+
The builder-extension wiring is the copyable artifact: a single
|
|
226
|
+
services.AddOpenTelemetry().ConfigureResource(...).WithTracing(...).WithMetrics(...)
|
|
227
|
+
block plus .UseOtlpExporter(), which collapses the whole setup into one file that drops
|
|
228
|
+
cleanly into a ServiceDefaults-style project. Borrow the ResourceBuilder construction
|
|
229
|
+
(service.name, service.version, deployment.environment from config rather than
|
|
230
|
+
literals), the ActivitySource/Meter singleton-per-assembly convention for custom spans
|
|
231
|
+
and metrics, and the docs/ plus examples/ trees which carry compiling reference setups
|
|
232
|
+
for console, ASP.NET Core and worker hosts.
|
|
233
|
+
Scope correction: this repo's src/ holds OpenTelemetry, OpenTelemetry.Api, the exporters
|
|
234
|
+
(OpenTelemetryProtocol, Prometheus.AspNetCore, Prometheus.HttpListener, Console, Zipkin),
|
|
235
|
+
Extensions.Hosting and Extensions.Propagators. It does NOT hold the AspNetCore or Http
|
|
236
|
+
instrumentation packages - those moved to opentelemetry-dotnet-contrib, and a previous
|
|
237
|
+
revision listed them here. AddAspNetCoreInstrumentation()/AddHttpClientInstrumentation()
|
|
238
|
+
therefore need a package reference resolved against contrib; see the entry below.
|
|
239
|
+
Note the LICENSE file here is LICENSE.TXT, not LICENSE - the attribution step in a
|
|
240
|
+
generated repo must copy the right filename.
|
|
241
|
+
whatToAvoid: >-
|
|
242
|
+
Instrumentation packages version independently from the core SDK and several remain
|
|
243
|
+
pre-release, so a template must pin a coherent set or restore resolves a mismatched pair
|
|
244
|
+
that fails at runtime. The logging story changed across major versions (ILogger bridge
|
|
245
|
+
vs OpenTelemetryLoggerProvider), so older snippets do not compile. Metrics exported
|
|
246
|
+
without an explicit view can produce very high cardinality from ASP.NET Core route
|
|
247
|
+
templates - constrain this in the generated config.
|
|
248
|
+
|
|
249
|
+
- name: "open-telemetry/opentelemetry-dotnet-contrib"
|
|
250
|
+
url: "https://github.com/open-telemetry/opentelemetry-dotnet-contrib"
|
|
251
|
+
stars: 646
|
|
252
|
+
spdx: "Apache-2.0"
|
|
253
|
+
licenseClass: vendorable
|
|
254
|
+
maintained: true
|
|
255
|
+
lastCommit: "2026-07-17"
|
|
256
|
+
archived: false
|
|
257
|
+
stack: ".NET - OTel instrumentation packages (ASP.NET Core, HttpClient, SQL, StackExchange.Redis) and resource detectors"
|
|
258
|
+
complexity: standard
|
|
259
|
+
proposedLayerIds:
|
|
260
|
+
- otel-instrumentation-dotnet
|
|
261
|
+
- obs-http-server-instrumentation
|
|
262
|
+
whatToBorrow: >-
|
|
263
|
+
Where the .NET instrumentation packages actually live, added during verification because
|
|
264
|
+
the core opentelemetry-dotnet entry claimed them.
|
|
265
|
+
src/OpenTelemetry.Instrumentation.AspNetCore and src/OpenTelemetry.Instrumentation.Http
|
|
266
|
+
are the two that matter for any web service - they are what make
|
|
267
|
+
AddAspNetCoreInstrumentation() and AddHttpClientInstrumentation() resolve, and without
|
|
268
|
+
them the ServiceDefaults-style block from the core entry compiles to a tracer that emits
|
|
269
|
+
no server spans. Each package README documents its options object, which is where request
|
|
270
|
+
filtering and route-template enrichment are configured. The resource-detector packages
|
|
271
|
+
are the clean way to populate cloud/host resource attributes without hand-rolling them.
|
|
272
|
+
whatToAvoid: >-
|
|
273
|
+
Independently versioned from the core SDK and several packages sit at -beta/-rc even
|
|
274
|
+
while core is stable, so a template must pin core and each instrumentation package as one
|
|
275
|
+
coherent set - this is the concrete cause of the version-mismatch failure the core entry
|
|
276
|
+
warns about. Its LICENSE file is LICENSE.TXT (same filename caveat as core). Prefer
|
|
277
|
+
individual packages over broad meta-references so the dependency surface stays small.
|
|
278
|
+
verificationNote: >-
|
|
279
|
+
Added 2026-07-19. Apache-2.0 read from LICENSE.TXT (there is no plain LICENSE - both
|
|
280
|
+
LICENSE and LICENSE.md 404); 646 stars, not archived, last commit 2026-07-17.
|
|
281
|
+
|
|
282
|
+
- name: "open-telemetry/opentelemetry-python"
|
|
283
|
+
url: "https://github.com/open-telemetry/opentelemetry-python"
|
|
284
|
+
stars: 2550
|
|
285
|
+
spdx: "Apache-2.0"
|
|
286
|
+
licenseClass: vendorable
|
|
287
|
+
maintained: true
|
|
288
|
+
lastCommit: "2026-07-16"
|
|
289
|
+
archived: false
|
|
290
|
+
stack: "Python - OpenTelemetry API/SDK, OTLP exporters (auto-instrumentation is NOT here - see python-contrib)"
|
|
291
|
+
complexity: standard
|
|
292
|
+
proposedLayerIds:
|
|
293
|
+
- otel-instrumentation-python
|
|
294
|
+
- otel-exporter-otlp
|
|
295
|
+
- obs-tracing-python
|
|
296
|
+
- logging-trace-correlation-python
|
|
297
|
+
whatToBorrow: >-
|
|
298
|
+
Two distinct layers worth generating separately, but they come from TWO DIFFERENT REPOS
|
|
299
|
+
and a previous revision wrongly attributed both to this one. First, the zero-code path:
|
|
300
|
+
the opentelemetry-instrument CLI plus OTEL_* environment variables
|
|
301
|
+
(OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_TRACES_SAMPLER), which gives a
|
|
302
|
+
Django/Flask/FastAPI app traces with no source changes and belongs in the Dockerfile
|
|
303
|
+
entrypoint - that CLI is NOT in this repo. This repo ships only opentelemetry-api,
|
|
304
|
+
opentelemetry-sdk, opentelemetry-proto, opentelemetry-semantic-conventions, exporter/
|
|
305
|
+
and propagator/; the console script is declared in
|
|
306
|
+
opentelemetry-python-contrib/opentelemetry-instrumentation/pyproject.toml. See the
|
|
307
|
+
dedicated python-contrib entry below.
|
|
308
|
+
Second - and this IS this repo - the explicit path in docs/examples/ - TracerProvider with a Resource
|
|
309
|
+
carrying service.name, BatchSpanProcessor wrapping an OTLPSpanExporter, and the
|
|
310
|
+
LoggingHandler bridge that attaches trace_id/span_id to stdlib log records so logs
|
|
311
|
+
correlate with traces.
|
|
312
|
+
whatToAvoid: >-
|
|
313
|
+
The auto-instrumentation agent monkey-patches at import time and interacts badly with
|
|
314
|
+
gunicorn/uvicorn pre-fork workers - the provider must be initialised post-fork or spans
|
|
315
|
+
vanish silently, which is the most common failure mode and must be handled in any
|
|
316
|
+
generated Dockerfile. API/SDK packages and the separately versioned contrib
|
|
317
|
+
instrumentation packages must be pinned together. Logs and some metrics APIs stabilised
|
|
318
|
+
later than tracing, so pin versions rather than tracking latest.
|
|
319
|
+
|
|
320
|
+
- name: "open-telemetry/opentelemetry-python-contrib"
|
|
321
|
+
url: "https://github.com/open-telemetry/opentelemetry-python-contrib"
|
|
322
|
+
stars: 1073
|
|
323
|
+
spdx: "Apache-2.0"
|
|
324
|
+
licenseClass: vendorable
|
|
325
|
+
maintained: true
|
|
326
|
+
lastCommit: "2026-07-17"
|
|
327
|
+
archived: false
|
|
328
|
+
stack: "Python - opentelemetry-instrument zero-code agent plus per-framework instrumentation packages"
|
|
329
|
+
complexity: standard
|
|
330
|
+
proposedLayerIds:
|
|
331
|
+
- otel-instrumentation-python
|
|
332
|
+
- otel-agent-python
|
|
333
|
+
- logging-trace-correlation-python
|
|
334
|
+
whatToBorrow: >-
|
|
335
|
+
This is where Python's zero-code story actually lives, added during verification because
|
|
336
|
+
the core opentelemetry-python entry claimed it. opentelemetry-instrumentation/ declares
|
|
337
|
+
both console scripts in its pyproject.toml - opentelemetry-instrument (wraps the app
|
|
338
|
+
process and patches libraries at startup) and opentelemetry-bootstrap (scans installed
|
|
339
|
+
packages and prints the matching instrumentation deps, which is the piece to run at
|
|
340
|
+
image-build time so the generated Dockerfile pins an explicit list rather than guessing).
|
|
341
|
+
The generated layer is therefore Dockerfile plus env, not source: install the framework
|
|
342
|
+
package, set OTEL_SERVICE_NAME / OTEL_EXPORTER_OTLP_ENDPOINT / OTEL_TRACES_SAMPLER, and
|
|
343
|
+
change the entrypoint to `opentelemetry-instrument python -m app`.
|
|
344
|
+
instrumentation/opentelemetry-instrumentation-{django,fastapi,flask,logging} are the
|
|
345
|
+
four to read first; the -logging one is what injects trace_id/span_id into log records
|
|
346
|
+
for correlation.
|
|
347
|
+
whatToAvoid: >-
|
|
348
|
+
Versioned separately from opentelemetry-python core with its own release cadence, and the
|
|
349
|
+
packages carry pre-1.0 version numbers even when the core API is stable - pin core and
|
|
350
|
+
contrib as a matched set or resolution produces a combination that fails at import. Do
|
|
351
|
+
not let opentelemetry-bootstrap auto-install at container start; run it at build time and
|
|
352
|
+
commit the resulting pins. The same post-fork initialisation caveat as the core entry
|
|
353
|
+
applies and is the most common silent failure under gunicorn/uvicorn.
|
|
354
|
+
portability: "Config-only - Dockerfile entrypoint plus env vars, transfers across Python web frameworks."
|
|
355
|
+
verificationNote: >-
|
|
356
|
+
Added 2026-07-19. Apache-2.0 read from the LICENSE file; 1073 stars, not archived, last
|
|
357
|
+
commit 2026-07-17. Promoted to a first-class gated entry rather than a bare cross-
|
|
358
|
+
reference because the zero-code layer is generated from this repo's tooling.
|
|
359
|
+
|
|
360
|
+
- name: "open-telemetry/opentelemetry-demo"
|
|
361
|
+
url: "https://github.com/open-telemetry/opentelemetry-demo"
|
|
362
|
+
stars: 3217
|
|
363
|
+
spdx: "Apache-2.0"
|
|
364
|
+
licenseClass: vendorable
|
|
365
|
+
maintained: true
|
|
366
|
+
lastCommit: "2026-07-17"
|
|
367
|
+
archived: false
|
|
368
|
+
stack: "Polyglot microservice demo - OTel across ~15 languages with a full backend stack"
|
|
369
|
+
complexity: professional
|
|
370
|
+
proposedLayerIds:
|
|
371
|
+
- otel-instrumentation-polyglot
|
|
372
|
+
- obs-stack-compose
|
|
373
|
+
whatToBorrow: >-
|
|
374
|
+
Canonical polyglot OTel reference. Borrow otel-config.yml and the split compose layering
|
|
375
|
+
(compose.yaml for services, compose.observability.yaml for backends, compose.full.yaml
|
|
376
|
+
for everything, plus compose.extras.yaml / compose.profiling.yaml / compose.tests.yaml),
|
|
377
|
+
which is exactly the composable pattern a scaffolder wants - the generated repo picks the
|
|
378
|
+
overlays it needs. Per-language bootstrap files under src/ show idiomatic SDK init for
|
|
379
|
+
each runtime. All file paths in this entry were confirmed to exist at main.
|
|
380
|
+
whatToAvoid: >-
|
|
381
|
+
It is a demo carrying an astronomy-shop domain, a load generator and a feature-flag
|
|
382
|
+
service, and it needs roughly 6GB of RAM. Take the wiring patterns, never the domain
|
|
383
|
+
code. Do not use it as a starting repo - strip to the compose overlay shape and the
|
|
384
|
+
collector config.
|
|
385
|
+
|
|
386
|
+
- name: "pinojs/pino"
|
|
387
|
+
url: "https://github.com/pinojs/pino"
|
|
388
|
+
stars: 18044
|
|
389
|
+
spdx: "MIT"
|
|
390
|
+
licenseClass: vendorable
|
|
391
|
+
maintained: true
|
|
392
|
+
lastCommit: "2026-07-18"
|
|
393
|
+
archived: false
|
|
394
|
+
stack: "Node.js structured JSON logging"
|
|
395
|
+
complexity: simple
|
|
396
|
+
proposedLayerIds:
|
|
397
|
+
- logging-structured-node-pino
|
|
398
|
+
- logging-http-middleware
|
|
399
|
+
- logging-redaction
|
|
400
|
+
whatToBorrow: >-
|
|
401
|
+
The logger factory with redact paths for auth headers and cookies, custom serializers,
|
|
402
|
+
the pino-pretty-in-dev / raw-JSON-in-prod transport split, and pino-http for per-request
|
|
403
|
+
child loggers carrying a request id.
|
|
404
|
+
whatToAvoid: >-
|
|
405
|
+
Transports run in worker threads and can lose buffered logs on abrupt exit without an
|
|
406
|
+
explicit flush - wire a shutdown handler. Keep pino-pretty a devDependency; shipping it
|
|
407
|
+
to production costs throughput for no benefit.
|
|
408
|
+
|
|
409
|
+
- name: "hynek/structlog"
|
|
410
|
+
url: "https://github.com/hynek/structlog"
|
|
411
|
+
stars: 4878
|
|
412
|
+
spdx: "Apache-2.0 OR MIT"
|
|
413
|
+
licenseClass: vendorable
|
|
414
|
+
maintained: true
|
|
415
|
+
lastCommit: "2026-07-18"
|
|
416
|
+
archived: false
|
|
417
|
+
stack: "Python structured logging"
|
|
418
|
+
complexity: simple
|
|
419
|
+
proposedLayerIds:
|
|
420
|
+
- logging-structured-python-structlog
|
|
421
|
+
- logging-context-vars
|
|
422
|
+
- logging-json-renderer
|
|
423
|
+
whatToBorrow: >-
|
|
424
|
+
The configure() processor chain (merge_contextvars, add_log_level, TimeStamper(iso),
|
|
425
|
+
format_exc_info, then JSONRenderer in prod and ConsoleRenderer in dev) and the
|
|
426
|
+
ProcessorFormatter bridge that routes stdlib logging from third-party libraries through
|
|
427
|
+
the same chain so output stays uniform.
|
|
428
|
+
whatToAvoid: >-
|
|
429
|
+
Configuration is global and import-order sensitive - configure() must run before any
|
|
430
|
+
module grabs a logger, so it belongs at the top of the app entrypoint, not in a package
|
|
431
|
+
__init__.
|
|
432
|
+
licenseNote: >-
|
|
433
|
+
Dual-licensed. There is no top-level LICENSE file; the repo carries LICENSE-MIT and
|
|
434
|
+
LICENSE-APACHE plus a NOTICE, all confirmed present. Pick one license and reproduce its
|
|
435
|
+
notice - do not omit attribution on the assumption that dual-licensing waives it.
|
|
436
|
+
|
|
437
|
+
- name: "getsentry/sentry-javascript"
|
|
438
|
+
url: "https://github.com/getsentry/sentry-javascript"
|
|
439
|
+
stars: 8710
|
|
440
|
+
spdx: "MIT"
|
|
441
|
+
licenseClass: vendorable
|
|
442
|
+
maintained: true
|
|
443
|
+
lastCommit: "2026-07-17"
|
|
444
|
+
archived: false
|
|
445
|
+
stack: "JavaScript/TypeScript error and performance monitoring SDKs"
|
|
446
|
+
complexity: standard
|
|
447
|
+
proposedLayerIds:
|
|
448
|
+
- observability-sentry-nextjs
|
|
449
|
+
- observability-sentry-node
|
|
450
|
+
- observability-sentry-react
|
|
451
|
+
- obs-sourcemaps-upload
|
|
452
|
+
whatToBorrow: >-
|
|
453
|
+
The Next.js file convention, withSentryConfig for source-map upload at build time, and
|
|
454
|
+
global-error.tsx for the React error boundary.
|
|
455
|
+
CONVENTION UPDATED - verify before generating. A previous revision described a three-file
|
|
456
|
+
layout of instrumentation.ts + sentry.client.config.ts + sentry.server.config.ts. The
|
|
457
|
+
client half of that is now deprecated: client init belongs in instrumentation-client.ts
|
|
458
|
+
(or src/instrumentation-client.ts). This was read from the SDK source, not from docs -
|
|
459
|
+
packages/nextjs/src/config/webpack.ts still resolves sentry.client.config.ts via
|
|
460
|
+
getClientSentryConfigFile() but logs "DEPRECATION WARNING: It is recommended renaming
|
|
461
|
+
your sentry.client.config.ts file, or moving its content to instrumentation-client.ts.
|
|
462
|
+
When using Turbopack sentry.client.config.ts will no longer work", while
|
|
463
|
+
getInstrumentationClientFile() resolves the replacement. Server-side registration through
|
|
464
|
+
instrumentation.ts / register() is unchanged. Generate instrumentation-client.ts, not
|
|
465
|
+
sentry.client.config.ts, or the output is born deprecated and breaks under Turbopack.
|
|
466
|
+
whatToAvoid: >-
|
|
467
|
+
The docs default tracesSampleRate to 1.0, which destroys a quota on any real traffic -
|
|
468
|
+
generate a low sampled default driven by an env var. Session Replay captures user input
|
|
469
|
+
and must default to off for privacy. Source-map upload needs an auth token that must come
|
|
470
|
+
from CI secrets, never a committed config file.
|
|
471
|
+
licenseNote: >-
|
|
472
|
+
MIT confirmed from the LICENSE file, read on BOTH `develop` and `master`. Note the
|
|
473
|
+
default branch here is `develop`, not master/main - a previous revision cited master
|
|
474
|
+
only, and any tooling that reads this repo must target develop or it will report a
|
|
475
|
+
months-stale commit date. This is the SDK repo and is genuinely MIT - distinct from
|
|
476
|
+
getsentry/sentry (the server), which is FSL source-available and excluded below.
|
|
477
|
+
Do not conflate the two.
|
|
478
|
+
|
|
479
|
+
- name: "Xabaril/AspNetCore.Diagnostics.HealthChecks"
|
|
480
|
+
url: "https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks"
|
|
481
|
+
stars: 4369
|
|
482
|
+
spdx: "Apache-2.0"
|
|
483
|
+
licenseClass: vendorable
|
|
484
|
+
maintained: true
|
|
485
|
+
lastCommit: "2026-04-16"
|
|
486
|
+
archived: false
|
|
487
|
+
stack: ".NET health-check packages, publishers and UI"
|
|
488
|
+
complexity: standard
|
|
489
|
+
proposedLayerIds:
|
|
490
|
+
- health-checks-dotnet
|
|
491
|
+
- health-checks-ui
|
|
492
|
+
- obs-readiness-liveness-probes
|
|
493
|
+
whatToBorrow: >-
|
|
494
|
+
Reference implementation of health-check patterns usable in any stack. Borrow the
|
|
495
|
+
tag-based split (register checks with ready/live tags, map /health/ready and /health/live
|
|
496
|
+
to tag-filtered predicates - exactly what Kubernetes probes need), the Degraded vs
|
|
497
|
+
Unhealthy distinction, and the publisher push model for reporting status outward.
|
|
498
|
+
whatToAvoid: >-
|
|
499
|
+
One NuGet package per backend and several are deprecated or lag their driver - pin and
|
|
500
|
+
check each one rather than adding the meta-package. The UI needs storage and is a
|
|
501
|
+
separate deployment concern; do not make it a default.
|
|
502
|
+
|
|
503
|
+
- name: "nestjs/terminus"
|
|
504
|
+
url: "https://github.com/nestjs/terminus"
|
|
505
|
+
stars: 741
|
|
506
|
+
spdx: "MIT"
|
|
507
|
+
licenseClass: vendorable
|
|
508
|
+
maintained: true
|
|
509
|
+
lastCommit: "2026-03-08"
|
|
510
|
+
archived: false
|
|
511
|
+
stack: "NestJS health-check module"
|
|
512
|
+
complexity: simple
|
|
513
|
+
proposedLayerIds:
|
|
514
|
+
- health-checks-nestjs
|
|
515
|
+
- obs-readiness-liveness-probes
|
|
516
|
+
whatToBorrow: >-
|
|
517
|
+
The HealthController shape (@Get('health') @HealthCheck() returning
|
|
518
|
+
health.check([...indicators])) and the custom-indicator contract for app-specific checks.
|
|
519
|
+
whatToAvoid: >-
|
|
520
|
+
Tightly coupled to Nest DI, so it does not transfer to other Node frameworks. Optional
|
|
521
|
+
peer dependencies fail at boot with opaque errors when an indicator is registered without
|
|
522
|
+
its driver installed - generate the peer deps alongside each indicator.
|
|
523
|
+
|
|
524
|
+
- name: "slok/sloth"
|
|
525
|
+
url: "https://github.com/slok/sloth"
|
|
526
|
+
stars: 2515
|
|
527
|
+
spdx: "Apache-2.0"
|
|
528
|
+
licenseClass: vendorable
|
|
529
|
+
maintained: true
|
|
530
|
+
lastCommit: "2026-05-26"
|
|
531
|
+
archived: false
|
|
532
|
+
stack: "Go - Prometheus SLO generator producing multi-window multi-burn-rate alert rules"
|
|
533
|
+
complexity: standard
|
|
534
|
+
proposedLayerIds:
|
|
535
|
+
- slo-prometheus-sloth
|
|
536
|
+
- obs-alerting-rules
|
|
537
|
+
- obs-slo-definitions
|
|
538
|
+
whatToBorrow: >-
|
|
539
|
+
The cleanest path from a short SLO spec to correct multi-window multi-burn-rate alerts,
|
|
540
|
+
which almost nobody writes correctly by hand. Borrow the spec format and the examples/
|
|
541
|
+
tree (confirmed present) including the generated output shape, plus the
|
|
542
|
+
PrometheusServiceLevel CRD for a GitOps flow.
|
|
543
|
+
whatToAvoid: >-
|
|
544
|
+
Prometheus-only. Generated rule sets are large and materially raise evaluation cost on a
|
|
545
|
+
small Prometheus - do not generate SLOs for every endpoint by default.
|
|
546
|
+
|
|
547
|
+
- name: "OpenSLO/OpenSLO"
|
|
548
|
+
url: "https://github.com/OpenSLO/OpenSLO"
|
|
549
|
+
stars: 1509
|
|
550
|
+
spdx: "Apache-2.0"
|
|
551
|
+
licenseClass: vendorable
|
|
552
|
+
maintained: true
|
|
553
|
+
lastCommit: "2025-10-09"
|
|
554
|
+
archived: false
|
|
555
|
+
stack: "Vendor-neutral SLO specification (YAML schema)"
|
|
556
|
+
complexity: simple
|
|
557
|
+
proposedLayerIds:
|
|
558
|
+
- slo-definitions-openslo
|
|
559
|
+
- obs-slo-definitions
|
|
560
|
+
whatToBorrow: >-
|
|
561
|
+
Use as the schema layer, not a runtime. Borrow the Kubernetes-style kinds - SLO, SLI,
|
|
562
|
+
AlertPolicy, AlertCondition, AlertNotificationTarget, Service and DataSource, all seven
|
|
563
|
+
confirmed present in the spec README - as the shape for an slo/ directory so definitions
|
|
564
|
+
stay portable across backends. The current apiVersion is `openslo/v1`; generate that
|
|
565
|
+
literal rather than an unpinned reference.
|
|
566
|
+
whatToAvoid: >-
|
|
567
|
+
A specification only - nothing in this repo evaluates SLOs, so it must be paired with
|
|
568
|
+
sloth or slo-generator to produce anything that alerts. Pin apiVersion; the spec still
|
|
569
|
+
moves. Note this is the slowest-moving entry in the list at ~9 months since the last
|
|
570
|
+
commit - still inside the 18-month gate, but re-check before relying on it.
|
|
571
|
+
|
|
572
|
+
- name: "stefanprodan/dockprom"
|
|
573
|
+
url: "https://github.com/stefanprodan/dockprom"
|
|
574
|
+
stars: 6571
|
|
575
|
+
spdx: "MIT"
|
|
576
|
+
licenseClass: vendorable
|
|
577
|
+
maintained: true
|
|
578
|
+
lastCommit: "2026-03-06"
|
|
579
|
+
archived: false
|
|
580
|
+
stack: "Docker Compose host/container monitoring stack - Prometheus, Grafana, Alertmanager, cAdvisor, node-exporter"
|
|
581
|
+
complexity: simple
|
|
582
|
+
proposedLayerIds:
|
|
583
|
+
- obs-stack-prometheus-compose
|
|
584
|
+
- obs-alertmanager-rules
|
|
585
|
+
- obs-host-container-metrics
|
|
586
|
+
whatToBorrow: >-
|
|
587
|
+
Classic host and container monitoring compose stack, small enough to read end to end.
|
|
588
|
+
Borrow docker-compose.yml, prometheus/prometheus.yml scrape configs for cAdvisor and
|
|
589
|
+
node-exporter, prometheus/alert.rules, alertmanager/config.yml routing, and
|
|
590
|
+
grafana/provisioning/. Paths confirmed at master.
|
|
591
|
+
whatToAvoid: >-
|
|
592
|
+
Infrastructure metrics only - no tracing, no logging, no OTel path, so it does not serve
|
|
593
|
+
an app-telemetry story on its own. The Caddy basic-auth front is not a real security
|
|
594
|
+
boundary. Bundled dashboards drift against newer exporter label schemas and often need
|
|
595
|
+
fixing after an exporter bump.
|
|
596
|
+
|
|
597
|
+
- name: "prometheus/client_golang"
|
|
598
|
+
url: "https://github.com/prometheus/client_golang"
|
|
599
|
+
stars: 6010
|
|
600
|
+
spdx: "Apache-2.0"
|
|
601
|
+
licenseClass: vendorable
|
|
602
|
+
maintained: true
|
|
603
|
+
lastCommit: "2026-07-17"
|
|
604
|
+
archived: false
|
|
605
|
+
stack: "Go Prometheus instrumentation client"
|
|
606
|
+
complexity: simple
|
|
607
|
+
proposedLayerIds:
|
|
608
|
+
- obs-metrics-prometheus
|
|
609
|
+
- obs-metrics-go-client
|
|
610
|
+
whatToBorrow: >-
|
|
611
|
+
The custom-registry pattern (prometheus.NewRegistry() with explicit MustRegister rather
|
|
612
|
+
than the global default, so tests stay isolated), promauto.With(reg) for declaration,
|
|
613
|
+
promhttp.HandlerFor mounted on a separate admin port rather than the public router, and
|
|
614
|
+
InstrumentHandlerDuration/InstrumentHandlerCounter for RED metrics. promauto path
|
|
615
|
+
confirmed present.
|
|
616
|
+
whatToAvoid: >-
|
|
617
|
+
Unbounded label values (user ids, URLs, request ids) cause cardinality explosions that
|
|
618
|
+
take down Prometheus - the generated code must use bounded label sets and route patterns
|
|
619
|
+
rather than raw paths.
|
|
620
|
+
|
|
621
|
+
- name: "microsoft/aspire"
|
|
622
|
+
url: "https://github.com/microsoft/aspire"
|
|
623
|
+
stars: 6172
|
|
624
|
+
spdx: "MIT"
|
|
625
|
+
licenseClass: vendorable
|
|
626
|
+
maintained: true
|
|
627
|
+
lastCommit: "2026-07-18"
|
|
628
|
+
archived: false
|
|
629
|
+
formerName: "dotnet/aspire"
|
|
630
|
+
stack: ".NET cloud-native orchestration, ServiceDefaults, OTLP dashboard"
|
|
631
|
+
complexity: enterprise
|
|
632
|
+
proposedLayerIds:
|
|
633
|
+
- obs-dotnet-servicedefaults
|
|
634
|
+
- obs-dashboard-otlp
|
|
635
|
+
whatToBorrow: >-
|
|
636
|
+
The ServiceDefaults project is a ready-made observability layer - one AddServiceDefaults()
|
|
637
|
+
wiring OTel tracing/metrics/logging with OTLP export, AddDefaultHealthChecks() with
|
|
638
|
+
tag-filtered /health and /alive, resilience handlers and service discovery, plus
|
|
639
|
+
MapDefaultEndpoints() guarded to development. The exact artifact to lift is the
|
|
640
|
+
src/Aspire.ProjectTemplates/templates/aspire-servicedefaults template directory
|
|
641
|
+
(confirmed present) - that is the ServiceDefaults project in template form, so it can be
|
|
642
|
+
adapted wholesale rather than reconstructed from docs. The standalone Aspire Dashboard container
|
|
643
|
+
is a useful generic OTLP viewer for ANY language, not just .NET - worth a language-neutral
|
|
644
|
+
layer.
|
|
645
|
+
whatToAvoid: >-
|
|
646
|
+
AppHost orchestration is heavy and is over-engineering if all you want is observability -
|
|
647
|
+
take ServiceDefaults and the dashboard without adopting AppHost. LICENSE file is
|
|
648
|
+
LICENSE.TXT.
|
|
649
|
+
verificationNote: >-
|
|
650
|
+
RENAMED - recorded as dotnet/aspire in previous revisions; the repository has moved to
|
|
651
|
+
microsoft/aspire (canonical full_name confirmed via the GitHub API, repo id 696529789,
|
|
652
|
+
MIT, 6172 stars, not archived). github.com/dotnet/aspire still resolves because GitHub
|
|
653
|
+
keeps rename redirects, so an HTML or raw.githubusercontent check does NOT reveal this -
|
|
654
|
+
only the API does, and it answers HTTP 301 "Moved Permanently" rather than a repo object,
|
|
655
|
+
which is silently fatal to any tooling that does not follow the redirect. Both name and
|
|
656
|
+
url updated to the canonical form; use microsoft/aspire in generated references so the
|
|
657
|
+
catalog does not depend on a redirect that would break if the old path were ever reused.
|
|
658
|
+
|
|
659
|
+
- name: "SigNoz/signoz"
|
|
660
|
+
url: "https://github.com/SigNoz/signoz"
|
|
661
|
+
stars: 30828
|
|
662
|
+
spdx: "MIT"
|
|
663
|
+
licenseClass: vendorable
|
|
664
|
+
maintained: true
|
|
665
|
+
lastCommit: "2026-07-18"
|
|
666
|
+
archived: false
|
|
667
|
+
stack: "Self-hosted OTel-native APM on ClickHouse"
|
|
668
|
+
complexity: enterprise
|
|
669
|
+
proposedLayerIds:
|
|
670
|
+
- obs-stack-signoz
|
|
671
|
+
- obs-dashboard-unified
|
|
672
|
+
whatToBorrow: >-
|
|
673
|
+
Self-hosted OTel-native alternative to Datadog, useful mainly as a READING reference for
|
|
674
|
+
how OTLP data is modelled on ClickHouse. conf/example.yaml is the annotated server
|
|
675
|
+
config. pkg/telemetrystore/ is the store abstraction - telemetrystore.go plus
|
|
676
|
+
clickhousetelemetrystore/ show the column layout and query construction for spans and
|
|
677
|
+
metrics, which is the genuinely instructive part and the reason to look at this repo at
|
|
678
|
+
all. All of the above sit outside the enterprise carve-out and are MIT.
|
|
679
|
+
IMPORTANT - the compose artifact this entry previously pointed at is GONE. deploy/ now
|
|
680
|
+
contains only README.md, MIGRATION.md and a deprecated install.sh; deploy/README.md
|
|
681
|
+
states plainly that "the `install.sh` script and the `docker-compose` manifests have
|
|
682
|
+
been deprecated" and that SigNoz now installs via its "Foundry" tooling documented
|
|
683
|
+
off-repo. Do not generate a SigNoz compose service from this repository - there is no
|
|
684
|
+
longer one to copy.
|
|
685
|
+
whatToAvoid: >-
|
|
686
|
+
Operationally heavy - ClickHouse plus several services, not a reasonable default for a
|
|
687
|
+
small generated repo. With the compose manifests removed, standing it up now means
|
|
688
|
+
following vendor-hosted Foundry docs rather than anything version-pinned in-repo, which
|
|
689
|
+
is a poor fit for a reproducible scaffolder; treat this entry as reference reading and
|
|
690
|
+
prefer docker-otel-lgtm or dockprom for an actual runnable local backend.
|
|
691
|
+
See the license carve-out below; it is a hard boundary and the ee/ directory does exist
|
|
692
|
+
at main, so the path filter is not hypothetical.
|
|
693
|
+
licenseNote: >-
|
|
694
|
+
MIXED LICENSE - verified by reading the root LICENSE and ee/LICENSE directly.
|
|
695
|
+
Root LICENSE states: content under "ee/" and "cmd/enterprise/" is governed by ee/LICENSE;
|
|
696
|
+
everything else is "MIT Expat". ee/LICENSE was fetched and confirmed to be the proprietary
|
|
697
|
+
"SigNoz Enterprise license", which restricts use to licensed customers.
|
|
698
|
+
Therefore: the core is vendorable under MIT, but ee/ and cmd/enterprise/ are EXCLUDED and
|
|
699
|
+
must never be copied. Any automated vendoring from this repo must apply a path filter that
|
|
700
|
+
rejects those two directories.
|
|
701
|
+
|
|
702
|
+
- name: "coroot/coroot"
|
|
703
|
+
url: "https://github.com/coroot/coroot"
|
|
704
|
+
stars: 7838
|
|
705
|
+
spdx: "Apache-2.0"
|
|
706
|
+
licenseClass: vendorable
|
|
707
|
+
maintained: true
|
|
708
|
+
lastCommit: "2026-07-02"
|
|
709
|
+
archived: false
|
|
710
|
+
stack: "eBPF-based zero-instrumentation observability, service map, SLO tracking"
|
|
711
|
+
complexity: professional
|
|
712
|
+
proposedLayerIds:
|
|
713
|
+
- obs-ebpf-zero-instrumentation
|
|
714
|
+
- obs-slo-tracking
|
|
715
|
+
- obs-service-map
|
|
716
|
+
whatToBorrow: >-
|
|
717
|
+
The strongest zero-instrumentation option - eBPF captures service-to-service traffic with
|
|
718
|
+
no code changes, which makes it viable as a default-on layer that cannot break the user's
|
|
719
|
+
application. The deployment artifact is a single file - manifests/coroot.yaml (not a tree
|
|
720
|
+
of manifests) - which is small enough to read end to end and adapt. Borrow it plus the SLO
|
|
721
|
+
model derived from observed traffic rather than hand-written SLIs.
|
|
722
|
+
whatToAvoid: >-
|
|
723
|
+
Needs a recent Linux kernel and privileged or CAP_BPF containers, so it cannot be the only
|
|
724
|
+
local path on macOS or Windows hosts - always pair it with a portable fallback layer.
|
|
725
|
+
licenseNote: >-
|
|
726
|
+
The previous revision flagged an open question about an enterprise directory. Resolved:
|
|
727
|
+
there is NO ee/ directory in coroot/coroot at main (checked, 404). The root LICENSE is
|
|
728
|
+
plain Apache-2.0 with no carve-out clause. Clean to vendor with the Apache notice.
|
|
729
|
+
|
|
730
|
+
- name: "grafana/alloy"
|
|
731
|
+
url: "https://github.com/grafana/alloy"
|
|
732
|
+
stars: 3346
|
|
733
|
+
spdx: "Apache-2.0"
|
|
734
|
+
licenseClass: vendorable
|
|
735
|
+
maintained: true
|
|
736
|
+
lastCommit: "2026-07-17"
|
|
737
|
+
archived: false
|
|
738
|
+
stack: "Grafana's OpenTelemetry Collector distribution with a programmable config language"
|
|
739
|
+
complexity: professional
|
|
740
|
+
proposedLayerIds:
|
|
741
|
+
- otel-collector-alloy
|
|
742
|
+
- obs-pipeline-processors
|
|
743
|
+
whatToBorrow: >-
|
|
744
|
+
An official OTel Collector distribution with a programmable configuration language.
|
|
745
|
+
Borrow example-config.alloy and the example/ directory (both confirmed present) - the
|
|
746
|
+
component-and-forward_to syntax is far more readable in a generated repo than deeply
|
|
747
|
+
nested YAML, and the dataflow is explicit.
|
|
748
|
+
whatToAvoid: >-
|
|
749
|
+
The Alloy configuration language does NOT port to a vanilla OTel Collector. For a
|
|
750
|
+
vendor-neutral scaffolder that is genuine lock-in, so this must be an opt-in alternative
|
|
751
|
+
to the plain collector layer, never the default.
|
|
752
|
+
|
|
753
|
+
- name: "jaegertracing/jaeger"
|
|
754
|
+
url: "https://github.com/jaegertracing/jaeger"
|
|
755
|
+
stars: 23012
|
|
756
|
+
spdx: "Apache-2.0"
|
|
757
|
+
licenseClass: vendorable
|
|
758
|
+
maintained: true
|
|
759
|
+
lastCommit: "2026-07-15"
|
|
760
|
+
archived: false
|
|
761
|
+
stack: "Distributed tracing backend; v2 is built on the OTel Collector"
|
|
762
|
+
complexity: professional
|
|
763
|
+
proposedLayerIds:
|
|
764
|
+
- obs-trace-jaeger
|
|
765
|
+
- obs-stack-compose
|
|
766
|
+
whatToBorrow: >-
|
|
767
|
+
The all-in-one compose service (OTLP ingest on 4317/4318, UI on 16686) as the dev default
|
|
768
|
+
when only tracing is needed. Jaeger v2 is built on the OTel Collector, so its config IS a
|
|
769
|
+
collector config - that keeps dev and prod in a single format and is the main reason to
|
|
770
|
+
prefer it over a bespoke tracing backend.
|
|
771
|
+
whatToAvoid: >-
|
|
772
|
+
Traces only - no metrics or logs, so it cannot be the whole observability layer. The
|
|
773
|
+
all-in-one image is in-memory and loses everything on restart. The v1-to-v2 transition
|
|
774
|
+
changed flags and config format, so most compose files found online are dead; generate
|
|
775
|
+
against v2 only.
|
|
776
|
+
|
|
777
|
+
- name: "micrometer-metrics/micrometer"
|
|
778
|
+
url: "https://github.com/micrometer-metrics/micrometer"
|
|
779
|
+
stars: 4871
|
|
780
|
+
spdx: "Apache-2.0"
|
|
781
|
+
licenseClass: vendorable
|
|
782
|
+
maintained: true
|
|
783
|
+
lastCommit: "2026-07-17"
|
|
784
|
+
archived: false
|
|
785
|
+
stack: "JVM metrics and observation facade, Spring Boot Actuator integration"
|
|
786
|
+
complexity: professional
|
|
787
|
+
proposedLayerIds:
|
|
788
|
+
- obs-metrics-jvm-micrometer
|
|
789
|
+
- obs-tracing-jvm
|
|
790
|
+
whatToBorrow: >-
|
|
791
|
+
The JVM observability layer. Borrow MeterRegistry injection, micrometer-registry-prometheus
|
|
792
|
+
wiring that exposes /actuator/prometheus, common tags applied through a
|
|
793
|
+
MeterRegistryCustomizer, and the micrometer-observation API where a single Observation
|
|
794
|
+
emits metrics, spans and logs together. The micrometer-observation module is in THIS repo
|
|
795
|
+
(confirmed alongside micrometer-core, micrometer-commons and the jetty/jakarta modules),
|
|
796
|
+
but the span half of that promise is not: turning an Observation into a trace needs
|
|
797
|
+
micrometer-tracing from the separate micrometer-metrics/tracing repo (also Apache-2.0).
|
|
798
|
+
A generated JVM layer that adds micrometer-observation alone gets metrics and no spans,
|
|
799
|
+
which looks like a broken tracing setup rather than a missing dependency.
|
|
800
|
+
whatToAvoid: >-
|
|
801
|
+
Naming translation (dots to underscores between Micrometer and Prometheus) reliably trips
|
|
802
|
+
up query authors - document the mapping in the generated repo. Do not layer the
|
|
803
|
+
Observation API and raw OTel instrumentation together; pick one or spans get duplicated.
|
|
804
|
+
|
|
805
|
+
- name: "google/slo-generator"
|
|
806
|
+
url: "https://github.com/google/slo-generator"
|
|
807
|
+
stars: 564
|
|
808
|
+
spdx: "Apache-2.0"
|
|
809
|
+
licenseClass: vendorable
|
|
810
|
+
maintained: true
|
|
811
|
+
lastCommit: "2026-02-25"
|
|
812
|
+
archived: false
|
|
813
|
+
stack: "Python - multi-backend SLO and error-budget computation (Cloud Monitoring, Prometheus, Elasticsearch, Datadog, Dynatrace)"
|
|
814
|
+
complexity: standard
|
|
815
|
+
proposedLayerIds:
|
|
816
|
+
- slo-multi-backend-generator
|
|
817
|
+
whatToBorrow: >-
|
|
818
|
+
The multi-backend SLO layer for stacks that are not Prometheus-only, which is where sloth
|
|
819
|
+
stops being an option. The copyable artifacts are concrete: samples/config.yaml is the
|
|
820
|
+
shared config, and its four top-level keys (default_exporters, backends, exporters,
|
|
821
|
+
error_budget_policies) are the schema to generate; note every backend credential in it is
|
|
822
|
+
written as a ${ENV_VAR} interpolation rather than a literal, which is exactly the pattern
|
|
823
|
+
a generated repo should preserve. samples/<backend>/ holds
|
|
824
|
+
per-backend SLO specs - samples/prometheus/ alone gives four spec shapes worth adapting
|
|
825
|
+
(slo_prom_metrics_availability_ratio.yaml, ..._availability_query_sli.yaml,
|
|
826
|
+
..._latency_distribution_cut.yaml, ..._latency_query_sli.yaml), which between them cover
|
|
827
|
+
good-events/total-events ratio, raw-query SLI, and latency-bucket-threshold indicators.
|
|
828
|
+
Sibling directories (datadog, dynatrace, elasticsearch, opensearch, cloud_monitoring,
|
|
829
|
+
custom) show the same SLO restated against each backend, which is exactly the evidence a
|
|
830
|
+
generator needs to keep one spec portable. slo_generator/backends/ and
|
|
831
|
+
slo_generator/exporters/ are the plugin interfaces to read if a custom source is needed.
|
|
832
|
+
whatToAvoid: >-
|
|
833
|
+
Heavier and less focused than sloth - if the target stack is Prometheus-only, sloth is the
|
|
834
|
+
better generated default. Backend plugins pull cloud-vendor SDKs, so only install the one
|
|
835
|
+
backend actually in use.
|
|
836
|
+
verificationNote: >-
|
|
837
|
+
STALENESS CLAIM CORRECTED, then re-confirmed 2026-07-19. An older revision marked this
|
|
838
|
+
"LIKELY STALE - most recent release v2.6.0 from February 2024" and told readers not to use
|
|
839
|
+
it; that read the last RELEASE date as the last COMMIT date and was wrong. An infrequent
|
|
840
|
+
release cadence is not staleness.
|
|
841
|
+
The two dates recorded here differ and BOTH are correct - do not "fix" one to match the
|
|
842
|
+
other. lastCommit 2026-02-25 is the last commit on the default branch (master), read from
|
|
843
|
+
the commits atom feed. The GitHub API reports pushed_at 2026-07-06, which is later because
|
|
844
|
+
pushed_at reflects a push to ANY branch or tag, not just the default one. Either way the
|
|
845
|
+
repo is not archived and clears the 18-month gate comfortably. The `maintained` flag here
|
|
846
|
+
is judged on pushed_at per this file's own definition at the top.
|
|
847
|
+
|
|
848
|
+
# -------------------------------------------------------------------------
|
|
849
|
+
# ADDED 2026-07-19 - gap-fill pass. Every figure below was read from
|
|
850
|
+
# github.com repo HTML (star counter), the default-branch commits.atom feed
|
|
851
|
+
# (lastCommit) and the LICENSE file fetched from raw.githubusercontent.com.
|
|
852
|
+
# The GitHub REST API was rate-limited during this pass; the HTML/atom/raw
|
|
853
|
+
# method is the same one cross-checked against the API in the 2026-07-18 pass.
|
|
854
|
+
# -------------------------------------------------------------------------
|
|
855
|
+
|
|
856
|
+
- name: "open-telemetry/opentelemetry-go"
|
|
857
|
+
url: "https://github.com/open-telemetry/opentelemetry-go"
|
|
858
|
+
stars: 6480
|
|
859
|
+
spdx: "Apache-2.0"
|
|
860
|
+
licenseClass: vendorable
|
|
861
|
+
maintained: true
|
|
862
|
+
lastCommit: "2026-07-17"
|
|
863
|
+
archived: false
|
|
864
|
+
stack: "Go - OpenTelemetry API/SDK, OTLP trace/metric/log exporters"
|
|
865
|
+
complexity: standard
|
|
866
|
+
proposedLayerIds:
|
|
867
|
+
- otel-instrumentation-go
|
|
868
|
+
- otel-exporter-otlp
|
|
869
|
+
- obs-graceful-shutdown
|
|
870
|
+
whatToBorrow: >-
|
|
871
|
+
Go has no auto-instrumentation agent, so the explicit bootstrap IS the layer. The core
|
|
872
|
+
repo ships the API/SDK and the exporters (exporters/otlp/otlptrace/otlptracegrpc,
|
|
873
|
+
confirmed present) but has NO example/ or examples/ directory - a previous revision
|
|
874
|
+
cited example/otel-collector and example/dice here and both 404. The runnable examples
|
|
875
|
+
live in the SEPARATE open-telemetry/opentelemetry-go-contrib repo (also Apache-2.0, so
|
|
876
|
+
still vendorable): examples/dice/instrumented/otel.go is the exact file to copy, and
|
|
877
|
+
examples/dice/uninstrumented/ beside it gives the before/after diff showing precisely
|
|
878
|
+
what instrumentation adds. examples/otel-collector/ adds main.go plus a working
|
|
879
|
+
docker-compose.yaml, otel-collector.yaml and prometheus.yaml for the backend side.
|
|
880
|
+
The copyable unit is a single setupOTelSDK(ctx) function
|
|
881
|
+
that builds a resource.New with semconv service.name/version, registers a
|
|
882
|
+
TracerProvider with sdktrace.NewBatchSpanProcessor over an otlptracegrpc exporter, a
|
|
883
|
+
MeterProvider with a PeriodicReader, sets otel.SetTextMapPropagator with a composite
|
|
884
|
+
TraceContext+Baggage propagator, and returns a single shutdown(ctx) func that joins
|
|
885
|
+
every provider's Shutdown error. That returned-shutdown-closure idiom is the piece
|
|
886
|
+
worth standardising - it is what makes spans actually flush on SIGTERM.
|
|
887
|
+
whatToAvoid: >-
|
|
888
|
+
The propagator default is a no-op: forget otel.SetTextMapPropagator and traces silently
|
|
889
|
+
break at every service boundary while each service still looks correctly instrumented
|
|
890
|
+
on its own. This is the single most common Go OTel bug. HTTP/gRPC instrumentation lives
|
|
891
|
+
in the separate opentelemetry-go-contrib module (otelhttp, otelgrpc) versioned apart
|
|
892
|
+
from core - pin them as a set. Metrics and logs stabilised later than tracing.
|
|
893
|
+
portability: "High - stdlib-only wiring, no framework assumptions; drops into any Go service."
|
|
894
|
+
|
|
895
|
+
- name: "open-telemetry/opentelemetry-go-contrib"
|
|
896
|
+
url: "https://github.com/open-telemetry/opentelemetry-go-contrib"
|
|
897
|
+
stars: 1652
|
|
898
|
+
spdx: "Apache-2.0"
|
|
899
|
+
licenseClass: vendorable
|
|
900
|
+
maintained: true
|
|
901
|
+
lastCommit: "2026-07-17"
|
|
902
|
+
archived: false
|
|
903
|
+
stack: "Go - OTel HTTP/gRPC instrumentation libraries, propagators, detectors, runnable examples"
|
|
904
|
+
complexity: standard
|
|
905
|
+
proposedLayerIds:
|
|
906
|
+
- otel-instrumentation-go
|
|
907
|
+
- obs-http-server-instrumentation
|
|
908
|
+
whatToBorrow: >-
|
|
909
|
+
The companion the core Go SDK entry depends on, added during verification because the
|
|
910
|
+
core repo's examples were cited there but actually live here. Two things to take.
|
|
911
|
+
First, the examples: examples/dice/instrumented/otel.go is a complete, compiling
|
|
912
|
+
setupOTelSDK bootstrap, and the instrumented/ vs uninstrumented/ pair is the clearest
|
|
913
|
+
before/after in the whole OTel ecosystem for showing what a template's instrumentation
|
|
914
|
+
layer actually changes. examples/otel-collector/ pairs main.go with a working
|
|
915
|
+
docker-compose.yaml, otel-collector.yaml and prometheus.yaml.
|
|
916
|
+
Second, the middleware: instrumentation/net/http/otelhttp wraps a handler
|
|
917
|
+
(otelhttp.NewHandler) and a client transport in one line each, and
|
|
918
|
+
instrumentation/google.golang.org/grpc/otelgrpc supplies the stats-handler equivalent.
|
|
919
|
+
Those two lines are what actually produce server spans, so a Go observability layer that
|
|
920
|
+
omits them emits an empty trace tree.
|
|
921
|
+
whatToAvoid: >-
|
|
922
|
+
Versioned as a SEPARATE Go module from opentelemetry-go core and released on its own
|
|
923
|
+
cadence, so otelhttp/otelgrpc and the core SDK must be pinned as a compatible set - this
|
|
924
|
+
mismatch is the usual cause of confusing Go module resolution errors. Each example
|
|
925
|
+
directory is its own module with its own go.mod, so copying one wholesale drags a module
|
|
926
|
+
boundary into the generated repo; lift the source file and re-declare the dependency
|
|
927
|
+
against the parent module instead. otelgrpc's older interceptor API is deprecated in
|
|
928
|
+
favour of the stats handler - do not copy interceptor snippets found in older docs.
|
|
929
|
+
portability: "High - otelhttp is a stdlib net/http wrapper and mounts on any Go router."
|
|
930
|
+
verificationNote: >-
|
|
931
|
+
Added 2026-07-19. Promoted to a first-class entry rather than left as a bare cross-
|
|
932
|
+
reference, so the code it points at passes the same license gate as everything else.
|
|
933
|
+
Apache-2.0 read from the LICENSE file; 1652 stars, not archived, last commit 2026-07-17.
|
|
934
|
+
|
|
935
|
+
- name: "open-telemetry/opentelemetry-js"
|
|
936
|
+
url: "https://github.com/open-telemetry/opentelemetry-js"
|
|
937
|
+
stars: 3419
|
|
938
|
+
spdx: "Apache-2.0"
|
|
939
|
+
licenseClass: vendorable
|
|
940
|
+
maintained: true
|
|
941
|
+
lastCommit: "2026-07-17"
|
|
942
|
+
archived: false
|
|
943
|
+
stack: "TypeScript/JavaScript - OpenTelemetry API/SDK for Node and browser"
|
|
944
|
+
complexity: standard
|
|
945
|
+
proposedLayerIds:
|
|
946
|
+
- otel-instrumentation-node
|
|
947
|
+
- otel-exporter-otlp
|
|
948
|
+
- logging-trace-correlation-node
|
|
949
|
+
whatToBorrow: >-
|
|
950
|
+
The NodeSDK quickstart plus the packages/opentelemetry-sdk-trace-node README give the
|
|
951
|
+
copyable unit: an instrumentation.ts that constructs new NodeSDK({ resource,
|
|
952
|
+
traceExporter: new OTLPTraceExporter(), instrumentations:
|
|
953
|
+
[getNodeAutoInstrumentations()] }) and calls sdk.start(). Note the split: NodeSDK is in
|
|
954
|
+
THIS repo at experimental/packages/opentelemetry-sdk-node, but getNodeAutoInstrumentations
|
|
955
|
+
comes from @opentelemetry/auto-instrumentations-node which lives in the separate
|
|
956
|
+
opentelemetry-js-contrib repo - the one-line snippet spans two repos and two release
|
|
957
|
+
trains. The load-order rule is the
|
|
958
|
+
real content - that file must be imported before any instrumented library, which in
|
|
959
|
+
practice means `node --import ./instrumentation.mjs app.js` or --require for CJS. Pair
|
|
960
|
+
it with pino's mixin reading trace.getActiveSpan() to stamp trace_id onto every log line.
|
|
961
|
+
whatToAvoid: >-
|
|
962
|
+
getNodeAutoInstrumentations() enables everything including fs, which floods the backend
|
|
963
|
+
with useless spans - disable @opentelemetry/instrumentation-fs explicitly in any
|
|
964
|
+
generated config. Auto-instrumentation relies on module patching and does not work under
|
|
965
|
+
bundlers or ESM without the --import hook, so serverless/bundled targets need the manual
|
|
966
|
+
path. API and SDK packages version separately; a mismatched @opentelemetry/api produces
|
|
967
|
+
silent no-op tracers rather than an error.
|
|
968
|
+
|
|
969
|
+
- name: "open-telemetry/opentelemetry-js-contrib"
|
|
970
|
+
url: "https://github.com/open-telemetry/opentelemetry-js-contrib"
|
|
971
|
+
stars: 917
|
|
972
|
+
spdx: "Apache-2.0"
|
|
973
|
+
licenseClass: vendorable
|
|
974
|
+
maintained: true
|
|
975
|
+
lastCommit: "2026-07-17"
|
|
976
|
+
archived: false
|
|
977
|
+
stack: "TypeScript - Node auto-instrumentation meta-package and per-library instrumentations"
|
|
978
|
+
complexity: standard
|
|
979
|
+
proposedLayerIds:
|
|
980
|
+
- otel-instrumentation-node
|
|
981
|
+
- obs-http-server-instrumentation
|
|
982
|
+
whatToBorrow: >-
|
|
983
|
+
The half of the Node OTel story that is not in core, added during verification because
|
|
984
|
+
the opentelemetry-js entry's snippet silently depended on it.
|
|
985
|
+
packages/auto-instrumentations-node is the meta-package exporting
|
|
986
|
+
getNodeAutoInstrumentations(), and its README documents the per-instrumentation config
|
|
987
|
+
object - that config object is the artifact worth generating, because it is where you
|
|
988
|
+
disable the noisy instrumentations by name rather than accepting the default set.
|
|
989
|
+
packages/instrumentation-fs is the specific one to switch off. The individual
|
|
990
|
+
packages/instrumentation-* directories each carry a README with a minimal manual-
|
|
991
|
+
registration example, which is the path to use when bundling or serverless rules out the
|
|
992
|
+
auto-instrumentation hook.
|
|
993
|
+
whatToAvoid: >-
|
|
994
|
+
Released independently of opentelemetry-js core, so the auto-instrumentations version and
|
|
995
|
+
the SDK version must be pinned as a compatible pair; a mismatch typically surfaces as
|
|
996
|
+
instrumentations that load but never emit spans rather than as an install error. The
|
|
997
|
+
meta-package pulls a large dependency tree for libraries the app may not use - for a lean
|
|
998
|
+
image, depend on the specific instrumentation-* packages instead of the meta-package.
|
|
999
|
+
verificationNote: >-
|
|
1000
|
+
Added 2026-07-19. Apache-2.0 read from the LICENSE file; 917 stars, not archived, last
|
|
1001
|
+
commit 2026-07-17.
|
|
1002
|
+
|
|
1003
|
+
- name: "open-telemetry/opentelemetry-java-instrumentation"
|
|
1004
|
+
url: "https://github.com/open-telemetry/opentelemetry-java-instrumentation"
|
|
1005
|
+
stars: 2581
|
|
1006
|
+
spdx: "Apache-2.0"
|
|
1007
|
+
licenseClass: vendorable
|
|
1008
|
+
maintained: true
|
|
1009
|
+
lastCommit: "2026-07-17"
|
|
1010
|
+
archived: false
|
|
1011
|
+
stack: "Java - bytecode-agent auto-instrumentation for JVM frameworks"
|
|
1012
|
+
complexity: professional
|
|
1013
|
+
proposedLayerIds:
|
|
1014
|
+
- otel-instrumentation-java
|
|
1015
|
+
- otel-agent-jvm
|
|
1016
|
+
- obs-metrics-jvm
|
|
1017
|
+
whatToBorrow: >-
|
|
1018
|
+
The zero-code JVM layer. What a scaffolder generates is not source but Dockerfile and
|
|
1019
|
+
env: download opentelemetry-javaagent.jar from the release assets, add
|
|
1020
|
+
-javaagent:/otel/opentelemetry-javaagent.jar to JAVA_TOOL_OPTIONS, then configure
|
|
1021
|
+
entirely through OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_TRACES_SAMPLER
|
|
1022
|
+
and OTEL_INSTRUMENTATION_<name>_ENABLED. docs/agent-features.md,
|
|
1023
|
+
docs/supported-libraries.md and docs/advanced-configuration-options.md (all three
|
|
1024
|
+
confirmed present at main) are the reference for trimming the agent down; there is no
|
|
1025
|
+
docs/suppressing-instrumentation.md, which a previous revision cited and which 404s.
|
|
1026
|
+
Borrow the
|
|
1027
|
+
multi-stage Dockerfile pattern that pins the agent by version and checksum rather than
|
|
1028
|
+
fetching latest at build time.
|
|
1029
|
+
whatToAvoid: >-
|
|
1030
|
+
The agent adds meaningful JVM startup time and patches hundreds of libraries by default -
|
|
1031
|
+
for short-lived or serverless JVMs the cost is real, and for anything latency-sensitive
|
|
1032
|
+
the instrumentation list should be narrowed. Never fetch the jar unpinned at container
|
|
1033
|
+
build. Agent and SDK versions must be compatible if the app also uses the manual API.
|
|
1034
|
+
portability: "Config-only - the layer is Dockerfile plus env vars, so it transfers across any JVM framework."
|
|
1035
|
+
|
|
1036
|
+
- name: "serilog/serilog"
|
|
1037
|
+
url: "https://github.com/serilog/serilog"
|
|
1038
|
+
stars: 8013
|
|
1039
|
+
spdx: "Apache-2.0"
|
|
1040
|
+
licenseClass: vendorable
|
|
1041
|
+
maintained: true
|
|
1042
|
+
lastCommit: "2026-07-10"
|
|
1043
|
+
archived: false
|
|
1044
|
+
stack: ".NET structured logging with message templates and sinks"
|
|
1045
|
+
complexity: simple
|
|
1046
|
+
proposedLayerIds:
|
|
1047
|
+
- logging-structured-dotnet-serilog
|
|
1048
|
+
- logging-enrichers
|
|
1049
|
+
- logging-trace-correlation-dotnet
|
|
1050
|
+
whatToBorrow: >-
|
|
1051
|
+
The message-template model is the point: log.Information("Order {OrderId} shipped to
|
|
1052
|
+
{Customer}", id, customer) preserves OrderId and Customer as queryable fields instead of
|
|
1053
|
+
flattening to a string. Borrow the two-stage bootstrap the repo documents - a minimal
|
|
1054
|
+
Serilog.Log.Logger created before the host builds so startup crashes are still captured,
|
|
1055
|
+
then ReadFrom.Configuration(context.Configuration) once the host exists so sinks and
|
|
1056
|
+
levels come from appsettings.json rather than code. Take the enrichment chain
|
|
1057
|
+
(FromLogContext, WithMachineName, WithEnvironmentName) and LogContext.PushProperty for
|
|
1058
|
+
scoped correlation ids, plus CompactJsonFormatter for production output.
|
|
1059
|
+
Scope note: this repo contains only src/Serilog - the core. Three of the pieces named
|
|
1060
|
+
above ship from separate (also Apache-2.0) repos and need their own package references:
|
|
1061
|
+
CompactJsonFormatter from serilog/serilog-formatting-compact, ReadFrom.Configuration
|
|
1062
|
+
from serilog/serilog-settings-configuration, and UseSerilogRequestLogging from
|
|
1063
|
+
serilog/serilog-aspnetcore. A generated repo that references only Serilog core will not
|
|
1064
|
+
compile any of them.
|
|
1065
|
+
whatToAvoid: >-
|
|
1066
|
+
String interpolation in a log call defeats the entire structured model and produces
|
|
1067
|
+
unqueryable text plus a cardinality explosion - forbid it with a Serilog analyzer in any
|
|
1068
|
+
generated repo. Sinks are separate independently versioned packages. The file sink needs
|
|
1069
|
+
an explicit rolling and retention policy or it will fill a disk. Serilog.AspNetCore's
|
|
1070
|
+
UseSerilogRequestLogging replaces the noisy default request logging and should be enabled
|
|
1071
|
+
rather than layered on top of it. The analyzer that catches interpolated log messages is
|
|
1072
|
+
Suchiman/SerilogAnalyzer, a THIRD-PARTY repo outside the Serilog org (Apache-2.0) - vet
|
|
1073
|
+
it as such rather than assuming it is an official Serilog component.
|
|
1074
|
+
|
|
1075
|
+
- name: "rs/zerolog"
|
|
1076
|
+
url: "https://github.com/rs/zerolog"
|
|
1077
|
+
stars: 12476
|
|
1078
|
+
spdx: "MIT"
|
|
1079
|
+
licenseClass: vendorable
|
|
1080
|
+
maintained: true
|
|
1081
|
+
lastCommit: "2026-04-20"
|
|
1082
|
+
archived: false
|
|
1083
|
+
stack: "Go zero-allocation JSON structured logging"
|
|
1084
|
+
complexity: simple
|
|
1085
|
+
proposedLayerIds:
|
|
1086
|
+
- logging-structured-go-zerolog
|
|
1087
|
+
- logging-http-middleware
|
|
1088
|
+
- logging-trace-correlation-go
|
|
1089
|
+
whatToBorrow: >-
|
|
1090
|
+
The chained-field API (log.Info().Str("k",v).Int("n",1).Msg("done")) and, more usefully
|
|
1091
|
+
for a template, hlog - the bundled net/http middleware in the hlog subpackage that
|
|
1092
|
+
attaches a request-scoped logger to the context, generates a request id, and emits one
|
|
1093
|
+
access-log line per request with method, status, size and duration. Borrow the
|
|
1094
|
+
zerolog.New(os.Stderr).With().Timestamp().Caller().Logger() constructor plus the
|
|
1095
|
+
ConsoleWriter-in-dev / raw-JSON-in-prod switch, and the hook interface for stamping
|
|
1096
|
+
trace_id from an OTel span onto every event.
|
|
1097
|
+
whatToAvoid: >-
|
|
1098
|
+
The zero-allocation guarantee is lost the moment you use the reflection-based
|
|
1099
|
+
.Interface() or .Fields() helpers - keep to typed field methods on hot paths. An Event
|
|
1100
|
+
is single-use and must be terminated by exactly one Msg/Send; forgetting it drops the
|
|
1101
|
+
log with no error, and reusing an Event after Msg is a data race. Global log.Logger is
|
|
1102
|
+
convenient but makes tests order-dependent - prefer injecting a logger.
|
|
1103
|
+
portability: "High - stdlib io.Writer sink, no framework coupling."
|
|
1104
|
+
|
|
1105
|
+
- name: "uber-go/zap"
|
|
1106
|
+
url: "https://github.com/uber-go/zap"
|
|
1107
|
+
stars: 24576
|
|
1108
|
+
spdx: "MIT"
|
|
1109
|
+
licenseClass: vendorable
|
|
1110
|
+
maintained: true
|
|
1111
|
+
lastCommit: "2026-04-28"
|
|
1112
|
+
archived: false
|
|
1113
|
+
stack: "Go high-performance structured logging"
|
|
1114
|
+
complexity: standard
|
|
1115
|
+
proposedLayerIds:
|
|
1116
|
+
- logging-structured-go-zap
|
|
1117
|
+
- logging-sampling
|
|
1118
|
+
- logging-testable
|
|
1119
|
+
whatToBorrow: >-
|
|
1120
|
+
The config-driven constructor is what to adapt: zap.Config as a struct populated from
|
|
1121
|
+
environment (level, encoding json|console, outputPaths, initialFields) then .Build(),
|
|
1122
|
+
which gives dev and prod presets from one code path via NewDevelopmentConfig /
|
|
1123
|
+
NewProductionConfig. Borrow the production sampling policy (SamplingConfig Initial/
|
|
1124
|
+
Thereafter) - it is the built-in answer to a hot loop flooding the log pipeline, which
|
|
1125
|
+
zerolog leaves to you. zaptest/observer is the other high-value piece: an in-memory core
|
|
1126
|
+
that makes "assert this log line was emitted with these fields" a normal unit test.
|
|
1127
|
+
whatToAvoid: >-
|
|
1128
|
+
Two APIs coexist and mixing them confuses generated code - the typed zap.Logger is fast,
|
|
1129
|
+
SugaredLogger is ergonomic but allocates; pick one per template and stay with it. Missing
|
|
1130
|
+
defer logger.Sync() loses buffered entries on exit, and Sync on stderr returns a
|
|
1131
|
+
spurious error on some platforms that naive code will log or panic on. The Config struct
|
|
1132
|
+
is verbose enough that it belongs in one config module, never inline at call sites.
|
|
1133
|
+
|
|
1134
|
+
- name: "getsentry/sentry-python"
|
|
1135
|
+
url: "https://github.com/getsentry/sentry-python"
|
|
1136
|
+
stars: 2197
|
|
1137
|
+
spdx: "MIT"
|
|
1138
|
+
licenseClass: vendorable
|
|
1139
|
+
maintained: true
|
|
1140
|
+
lastCommit: "2026-07-17"
|
|
1141
|
+
archived: false
|
|
1142
|
+
stack: "Python error and performance monitoring SDK with framework integrations"
|
|
1143
|
+
complexity: standard
|
|
1144
|
+
proposedLayerIds:
|
|
1145
|
+
- observability-sentry-python
|
|
1146
|
+
- observability-pii-scrubbing
|
|
1147
|
+
- obs-release-tracking
|
|
1148
|
+
whatToBorrow: >-
|
|
1149
|
+
The single sentry_sdk.init() block belongs in one config module: dsn and environment from
|
|
1150
|
+
env vars, traces_sample_rate as a float setting, release stamped from the CI commit sha,
|
|
1151
|
+
and an explicit integrations list (DjangoIntegration, FastApiIntegration,
|
|
1152
|
+
CeleryIntegration) rather than relying on auto-discovery. Borrow the before_send hook for
|
|
1153
|
+
scrubbing PII before transmission and the ignore_errors list for expected exceptions,
|
|
1154
|
+
plus sentry_sdk.set_user / set_tag for request-scoped context. The integrations/
|
|
1155
|
+
directory is a readable catalogue of how each framework hooks its error path.
|
|
1156
|
+
whatToAvoid: >-
|
|
1157
|
+
send_default_pii=True ships request bodies, headers and user data to a third party - it
|
|
1158
|
+
must default to False in any generated repo and be an explicit opt-in. traces_sample_rate
|
|
1159
|
+
of 1.0 will exhaust a quota under real traffic. The DSN is not secret but the auth token
|
|
1160
|
+
used for release/sourcemap upload is, and belongs in CI secrets. Celery and ASGI
|
|
1161
|
+
integrations need init() to run in each worker process, not only in the parent.
|
|
1162
|
+
|
|
1163
|
+
- name: "hellofresh/health-go"
|
|
1164
|
+
url: "https://github.com/hellofresh/health-go"
|
|
1165
|
+
stars: 589
|
|
1166
|
+
spdx: "Apache-2.0"
|
|
1167
|
+
licenseClass: vendorable
|
|
1168
|
+
maintained: true
|
|
1169
|
+
lastCommit: "2026-04-17"
|
|
1170
|
+
archived: false
|
|
1171
|
+
stack: "Go library for HTTP health/readiness endpoints with pluggable dependency checks"
|
|
1172
|
+
complexity: simple
|
|
1173
|
+
proposedLayerIds:
|
|
1174
|
+
- health-checks
|
|
1175
|
+
- health-readiness-go
|
|
1176
|
+
- obs-dependency-probes
|
|
1177
|
+
whatToBorrow: >-
|
|
1178
|
+
The smallest complete readiness pattern in Go, and a direct fit for the existing
|
|
1179
|
+
health-checks layer. Borrow health.New() with health.WithChecks(health.Config{Name,
|
|
1180
|
+
Timeout, SkipOnErr, Check: func(ctx) error}) - the per-check Timeout and the SkipOnErr
|
|
1181
|
+
flag are the two fields that matter, because they encode the distinction between a
|
|
1182
|
+
degraded dependency (report but stay serving) and a fatal one (fail readiness). The
|
|
1183
|
+
checks/ subpackages give ready-made probes for postgres, mysql, redis, mongo, rabbitmq
|
|
1184
|
+
and http, each a tiny file that is easy to read and adapt. The handler returns aggregate
|
|
1185
|
+
status plus per-check detail as JSON, which is exactly the response shape a Kubernetes
|
|
1186
|
+
readinessProbe and a status page both want.
|
|
1187
|
+
whatToAvoid: >-
|
|
1188
|
+
Do not point a liveness probe at an endpoint that checks dependencies - a slow database
|
|
1189
|
+
then causes Kubernetes to kill otherwise healthy pods and cascade the outage. Generate
|
|
1190
|
+
two endpoints: a trivial /livez returning 200 unconditionally, and /readyz running these
|
|
1191
|
+
checks. Keep check timeouts well below the probe timeout, and do not expose the detailed
|
|
1192
|
+
JSON publicly since it enumerates your internal dependencies.
|
|
1193
|
+
licenseNote: >-
|
|
1194
|
+
Apache-2.0, but the file is LICENSE.txt (lowercase extension), not LICENSE - the
|
|
1195
|
+
attribution step in a generated repo must copy that exact filename, same caveat as
|
|
1196
|
+
opentelemetry-dotnet and dotnet/aspire which both use LICENSE.TXT.
|
|
1197
|
+
portability: "High - plain net/http handler, mounts on any Go router."
|
|
1198
|
+
|
|
1199
|
+
- name: "pyrra-dev/pyrra"
|
|
1200
|
+
url: "https://github.com/pyrra-dev/pyrra"
|
|
1201
|
+
stars: 1529
|
|
1202
|
+
spdx: "Apache-2.0"
|
|
1203
|
+
licenseClass: vendorable
|
|
1204
|
+
maintained: true
|
|
1205
|
+
lastCommit: "2026-06-22"
|
|
1206
|
+
archived: false
|
|
1207
|
+
stack: "Go + React - SLO definitions compiled to Prometheus recording/alerting rules, error-budget UI"
|
|
1208
|
+
complexity: standard
|
|
1209
|
+
proposedLayerIds:
|
|
1210
|
+
- slo-error-budget
|
|
1211
|
+
- slo-prometheus-rules
|
|
1212
|
+
- obs-alerting-burnrate
|
|
1213
|
+
whatToBorrow: >-
|
|
1214
|
+
The error-budget calculator the brief asks for, and the natural complement to sloth.
|
|
1215
|
+
Borrow the ServiceLevelObjective spec shape from examples/ - target as a percentage,
|
|
1216
|
+
window as a duration, and an indicator that is either a ratio (errors query over total
|
|
1217
|
+
query) or a latency block with a bucket threshold. Pyrra compiles that into multi-window
|
|
1218
|
+
multi-burn-rate recording and alerting rules, so the copyable artifact is the generated
|
|
1219
|
+
rule YAML plus the filesystem/kubernetes operating modes: filesystem mode reads a
|
|
1220
|
+
directory of SLO YAML and writes Prometheus rule files, which is exactly what a
|
|
1221
|
+
generated repo can commit and diff in CI without running an operator. The UI showing
|
|
1222
|
+
remaining budget and burn rate is the reference for what an error-budget dashboard needs.
|
|
1223
|
+
whatToAvoid: >-
|
|
1224
|
+
It expects Prometheus-compatible metrics that already exist and are correctly labelled -
|
|
1225
|
+
an SLO layer is worthless without a working RED-metrics layer beneath it, so order the
|
|
1226
|
+
layer dependencies accordingly. The Kubernetes operator mode pulls in CRDs and a
|
|
1227
|
+
controller that a small repo does not need; prefer filesystem mode as the default. The
|
|
1228
|
+
generated recording rules add real cardinality and evaluation cost at scale.
|
|
1229
|
+
|
|
1230
|
+
- name: "prometheus-operator/kube-prometheus"
|
|
1231
|
+
url: "https://github.com/prometheus-operator/kube-prometheus"
|
|
1232
|
+
stars: 7695
|
|
1233
|
+
spdx: "Apache-2.0"
|
|
1234
|
+
licenseClass: vendorable
|
|
1235
|
+
maintained: true
|
|
1236
|
+
lastCommit: "2026-07-18"
|
|
1237
|
+
archived: false
|
|
1238
|
+
stack: "Jsonnet + generated Kubernetes manifests - Prometheus Operator, Alertmanager, Grafana, node-exporter, kube-state-metrics"
|
|
1239
|
+
complexity: enterprise
|
|
1240
|
+
proposedLayerIds:
|
|
1241
|
+
- obs-stack-kubernetes
|
|
1242
|
+
- obs-alerting-rules
|
|
1243
|
+
- slo-prometheus-rules
|
|
1244
|
+
whatToBorrow: >-
|
|
1245
|
+
The production Kubernetes counterpart to dockprom's compose stack. The manifests/
|
|
1246
|
+
directory is fully generated, committed YAML - it can be applied directly or read as the
|
|
1247
|
+
reference for what a complete cluster monitoring install contains: ServiceMonitor and
|
|
1248
|
+
PodMonitor custom resources, PrometheusRule objects carrying the battle-tested
|
|
1249
|
+
kubernetes-apps / kubernetes-resources alert families, Alertmanager routing config, and
|
|
1250
|
+
RBAC. Borrow the ServiceMonitor shape as the standard way an application declares its own
|
|
1251
|
+
scrape target, and the PrometheusRule alert definitions (KubePodCrashLooping,
|
|
1252
|
+
KubeDeploymentReplicasMismatch and friends) as a starting alert set rather than authoring
|
|
1253
|
+
one from scratch. jsonnet/ shows the customisation path if a repo wants to regenerate.
|
|
1254
|
+
whatToAvoid: >-
|
|
1255
|
+
Enterprise weight - this is a whole cluster monitoring platform with a substantial
|
|
1256
|
+
resource footprint, wholly inappropriate as a default for a small generated repo. Version
|
|
1257
|
+
compatibility with the Kubernetes minor release is strict and documented in the README
|
|
1258
|
+
matrix; applying a mismatched release breaks on CRD schema. The bundled Grafana is AGPL
|
|
1259
|
+
as a deployed binary - configuring it is fine, vendoring Grafana source is not. Editing
|
|
1260
|
+
manifests/ by hand is a dead end since it is regenerated from jsonnet.
|
|
1261
|
+
|
|
1262
|
+
- name: "prometheus/prometheus"
|
|
1263
|
+
url: "https://github.com/prometheus/prometheus"
|
|
1264
|
+
stars: 65222
|
|
1265
|
+
spdx: "Apache-2.0"
|
|
1266
|
+
licenseClass: vendorable
|
|
1267
|
+
maintained: true
|
|
1268
|
+
lastCommit: "2026-07-18"
|
|
1269
|
+
archived: false
|
|
1270
|
+
stack: "Go - metrics TSDB, scrape engine, PromQL, alerting rules"
|
|
1271
|
+
complexity: professional
|
|
1272
|
+
proposedLayerIds:
|
|
1273
|
+
- obs-metrics-prometheus
|
|
1274
|
+
- obs-alerting-rules
|
|
1275
|
+
- obs-recording-rules
|
|
1276
|
+
whatToBorrow: >-
|
|
1277
|
+
The upstream source of the config schemas every other layer here references. Borrow
|
|
1278
|
+
documentation/examples/prometheus.yml as the canonical scrape_config skeleton - global
|
|
1279
|
+
scrape_interval and evaluation_interval, rule_files, alerting.alertmanagers, and
|
|
1280
|
+
relabel_configs, which is the part most templates get wrong. The config/testdata tree is
|
|
1281
|
+
an unusually good reference for valid and invalid config shapes, and the unit-test format
|
|
1282
|
+
consumed by `promtool test rules` lets a generated repo assert its alerts actually fire
|
|
1283
|
+
against synthetic series - that promtool rule test is a genuinely underused CI gate worth
|
|
1284
|
+
generating.
|
|
1285
|
+
whatToAvoid: >-
|
|
1286
|
+
Do not vendor Go source; take config, rules and promtool usage. Default retention is
|
|
1287
|
+
local-disk only with no built-in HA or long-term storage - a template that implies
|
|
1288
|
+
durability without adding remote_write is misleading. High-cardinality labels (user ids,
|
|
1289
|
+
request ids, full URLs) are the standard way people destroy a Prometheus instance, so any
|
|
1290
|
+
generated instrumentation guidance must call that out explicitly.
|
|
1291
|
+
|
|
1292
|
+
# ---------------------------------------------------------------------------
|
|
1293
|
+
# REFERENCE-ONLY - weak copyleft. Read for design ideas, never copy files.
|
|
1294
|
+
# ---------------------------------------------------------------------------
|
|
1295
|
+
referenceOnly:
|
|
1296
|
+
- name: "vectordotdev/vector"
|
|
1297
|
+
url: "https://github.com/vectordotdev/vector"
|
|
1298
|
+
spdx: "MPL-2.0"
|
|
1299
|
+
licenseClass: reference-only
|
|
1300
|
+
reason: >-
|
|
1301
|
+
LICENSE fetched from raw.githubusercontent.com confirms Mozilla Public License 2.0.
|
|
1302
|
+
File-level copyleft: modifying an MPL file obliges you to publish that file's source under
|
|
1303
|
+
MPL, which does not infect the rest of a generated repo but is still a condition we do not
|
|
1304
|
+
want to impose silently. Read its log-pipeline and transform design for ideas; do not copy
|
|
1305
|
+
files into generated repos.
|
|
1306
|
+
verificationNote: >-
|
|
1307
|
+
Moved out of the `excluded:` block during verification. The previous revision filed it
|
|
1308
|
+
under `excluded` while labelling it licenseClass reference-only, contradicting the file's
|
|
1309
|
+
own taxonomy. The classification was right; the placement was wrong. MPL-2.0 is
|
|
1310
|
+
reference-only, not excluded.
|
|
1311
|
+
|
|
1312
|
+
# ---------------------------------------------------------------------------
|
|
1313
|
+
# EXCLUDED - license gate failed. Each verified from the LICENSE file itself.
|
|
1314
|
+
# ---------------------------------------------------------------------------
|
|
1315
|
+
excluded:
|
|
1316
|
+
- name: "grafana/loki"
|
|
1317
|
+
url: "https://github.com/grafana/loki"
|
|
1318
|
+
stars: 28581
|
|
1319
|
+
spdx: "AGPL-3.0"
|
|
1320
|
+
licenseClass: excluded
|
|
1321
|
+
lastCommit: "2026-07-18"
|
|
1322
|
+
archived: false
|
|
1323
|
+
reason: >-
|
|
1324
|
+
Added 2026-07-19. AGPL-3.0 confirmed by fetching the LICENSE file from
|
|
1325
|
+
raw.githubusercontent.com, which opens "GNU AFFERO GENERAL PUBLIC LICENSE Version 3,
|
|
1326
|
+
19 November 2007". Same boundary as grafana/grafana: Loki may be RUN as a container and
|
|
1327
|
+
pointed at by a collector exporter or a Grafana datasource we author ourselves, but no
|
|
1328
|
+
source, no client library code and no bundled config from this repo may be vendored into
|
|
1329
|
+
a generated repo. Worth stating explicitly because grafana/docker-otel-lgtm - which IS
|
|
1330
|
+
promoted above as Apache-2.0 - bundles a Loki binary in its image. Running that image is
|
|
1331
|
+
fine; copying Loki source out of it is not.
|
|
1332
|
+
- name: "grafana/grafana"
|
|
1333
|
+
url: "https://github.com/grafana/grafana"
|
|
1334
|
+
stars: 75619
|
|
1335
|
+
spdx: "AGPL-3.0"
|
|
1336
|
+
licenseClass: excluded
|
|
1337
|
+
lastCommit: "2026-07-18"
|
|
1338
|
+
archived: false
|
|
1339
|
+
reason: >-
|
|
1340
|
+
AGPL-3.0 confirmed by reading the LICENSE file ("GNU AFFERO GENERAL PUBLIC LICENSE
|
|
1341
|
+
Version 3"). Copying Grafana source would force AGPL terms onto every repo Groundplan
|
|
1342
|
+
generates. Grafana may still be RUN as a container and configured via provisioning YAML
|
|
1343
|
+
that we author ourselves - that config is our own work and carries no AGPL obligation -
|
|
1344
|
+
but no source, plugin code or bundled dashboard JSON from this repo may be vendored.
|
|
1345
|
+
|
|
1346
|
+
- name: "openobserve/openobserve"
|
|
1347
|
+
url: "https://github.com/openobserve/openobserve"
|
|
1348
|
+
spdx: "AGPL-3.0"
|
|
1349
|
+
licenseClass: excluded
|
|
1350
|
+
reason: >-
|
|
1351
|
+
AGPL-3.0 confirmed by fetching the LICENSE file directly ("GNU AFFERO GENERAL PUBLIC
|
|
1352
|
+
LICENSE Version 3"), upgrading the previous revision's README-based claim to a primary
|
|
1353
|
+
source. A separate commercial Enterprise Edition exists. The license gate excludes it
|
|
1354
|
+
regardless of stars or activity.
|
|
1355
|
+
|
|
1356
|
+
- name: "getsentry/sentry"
|
|
1357
|
+
url: "https://github.com/getsentry/sentry"
|
|
1358
|
+
spdx: "FSL-1.1-Apache-2.0"
|
|
1359
|
+
licenseClass: excluded
|
|
1360
|
+
reason: >-
|
|
1361
|
+
LICENSE.md fetched from raw.githubusercontent.com confirms "Functional Source License,
|
|
1362
|
+
Version 1.1, Apache 2.0 Future License". Source-available with a competitive-use
|
|
1363
|
+
restriction, not open source - excluded. This applies to the Sentry SERVER only; the
|
|
1364
|
+
getsentry/sentry-javascript SDK is separately MIT and is promoted in sources above.
|