@polymorphism-tech/morph-spec 9.0.0 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +8 -9
- package/README.md +38 -36
- package/bin/morph-spec.js +11 -63
- package/bin/validate.js +1 -39
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +2 -1
- package/framework/MORPH.md +3 -3
- package/framework/agents.json +19 -11
- package/framework/commands/morph-apply.md +1 -1
- package/framework/commands/morph-status.md +1 -1
- package/framework/docs/CLI.md +22 -31
- package/framework/evals/review-checklist.md +12 -2
- package/framework/hooks/README.md +8 -44
- package/framework/hooks/claude-code/core/block-destructive-worktree-removal.js +6 -49
- package/framework/hooks/claude-code/core/block-raw-worktree-add.js +2 -35
- package/framework/hooks/claude-code/core/chain.js +4 -65
- package/framework/hooks/claude-code/core/comment-guard.js +2 -16
- package/framework/hooks/claude-code/core/enforce-phase-writes.js +6 -50
- package/framework/hooks/claude-code/core/gate-guard.js +7 -67
- package/framework/hooks/claude-code/core/graph-refresh-kick.js +3 -24
- package/framework/hooks/claude-code/core/heavy-gate.js +3 -21
- package/framework/hooks/claude-code/core/heavy-release.js +2 -13
- package/framework/hooks/claude-code/core/loop-detect.js +2 -31
- package/framework/hooks/claude-code/core/pre-bash-denylist.js +0 -4
- package/framework/hooks/claude-code/core/protect-spec-files.js +7 -67
- package/framework/hooks/claude-code/core/state-sync.js +12 -68
- package/framework/hooks/claude-code/core/telemetry-log.js +12 -93
- package/framework/hooks/claude-code/core/validate-completion.js +11 -57
- package/framework/hooks/claude-code/core/warn-bash-source-write.js +1 -9
- package/framework/hooks/claude-code/core/worktree-context.js +10 -110
- package/framework/hooks/claude-code/core/worktree-create.js +6 -70
- package/framework/hooks/claude-code/core/worktree-env-inject.js +5 -56
- package/framework/hooks/claude-code/core/worktree-remove.js +5 -31
- package/framework/hooks/claude-code/statusline.sh +11 -11
- package/framework/hooks/shared/activity-logger.js +9 -89
- package/framework/hooks/shared/agent-reap.js +2 -17
- package/framework/hooks/shared/build-check.js +6 -75
- package/framework/hooks/shared/claim-registry.js +9 -119
- package/framework/hooks/shared/command-tokens.js +6 -51
- package/framework/hooks/shared/comment-rules.js +5 -20
- package/framework/hooks/shared/comment-scanner.js +6 -25
- package/framework/hooks/shared/comment-stripper.js +11 -85
- package/framework/hooks/shared/e2e-check.js +0 -0
- package/framework/hooks/shared/errata.js +2 -15
- package/framework/hooks/shared/feature-locator.js +11 -95
- package/framework/hooks/shared/frontend-locations.js +1 -3
- package/framework/hooks/shared/gate-question.js +1 -7
- package/framework/hooks/shared/git-exclude.js +3 -20
- package/framework/hooks/shared/git-paths.js +8 -104
- package/framework/hooks/shared/graph-freshness.js +22 -166
- package/framework/hooks/shared/graph-refresh.js +21 -149
- package/framework/hooks/shared/heavy-command.js +4 -12
- package/framework/hooks/shared/hook-response.js +8 -83
- package/framework/hooks/shared/morph-cli.js +8 -52
- package/framework/hooks/shared/payload-utils.js +10 -132
- package/framework/hooks/shared/phase-utils.js +1 -42
- package/framework/hooks/shared/redact-secrets.js +4 -15
- package/framework/hooks/shared/reparse-scan.js +6 -66
- package/framework/hooks/shared/slice-progress.js +4 -23
- package/framework/hooks/shared/source-files.js +4 -17
- package/framework/hooks/shared/state-reader.js +13 -183
- package/framework/hooks/shared/state-writer.js +8 -52
- package/framework/hooks/shared/stdin-reader.js +1 -11
- package/framework/hooks/shared/telemetry-logger.js +7 -67
- package/framework/hooks/shared/transcript-usage.js +7 -29
- package/framework/hooks/shared/worktree-root.js +7 -29
- package/framework/rules/csharp-standards.md +1 -1
- package/framework/rules/frontend-standards.md +1 -0
- package/framework/rules/hangfire-standards.md +1 -1
- package/framework/rules/neon-standards.md +1 -1
- package/framework/rules/nextjs-standards.md +1 -1
- package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
- package/framework/skills/core/morph-apply/SKILL.md +4 -4
- package/framework/skills/core/morph-hotfix/SKILL.md +3 -3
- package/framework/skills/core/morph-machine/SKILL.md +1 -1
- package/framework/skills/core/morph-media/SKILL.md +1 -1
- package/framework/skills/core/morph-plan/SKILL.md +9 -7
- package/framework/skills/core/morph-review/SKILL.md +9 -6
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/framework/skills/core/morph-uiux/SKILL.md +29 -12
- package/framework/standards/STANDARDS.json +36 -14
- package/framework/standards/STANDARDS.meta.json +16 -2
- package/framework/standards/ai-agents/agent-archetypes.md +2 -2
- package/framework/standards/ai-agents/agent-session.md +1 -1
- package/framework/standards/ai-agents/conversational-agent-with-phases.md +4 -4
- package/framework/standards/ai-agents/durable-workflows-hitl.md +3 -3
- package/framework/standards/ai-agents/guardrails.md +1 -1
- package/framework/standards/ai-agents/multi-agent-patterns.md +2 -2
- package/framework/standards/ai-agents/observability-patterns.md +1 -1
- package/framework/standards/ai-agents/production.md +1 -1
- package/framework/standards/ai-agents/prompt-sources.md +2 -2
- package/framework/standards/ai-agents/providers/model-registry.md +1 -1
- package/framework/standards/ai-agents/rag-custom-pgvector.md +2 -2
- package/framework/standards/ai-agents/setup.md +2 -2
- package/framework/standards/ai-agents/sweet-spot.md +2 -2
- package/framework/standards/ai-agents/tool-adapters.md +0 -2
- package/framework/standards/ai-agents/vector-data-extensions.md +4 -4
- package/framework/standards/ai-agents/workflows.md +1 -1
- package/framework/standards/architecture/code-comments.md +1 -1
- package/framework/standards/architecture/vertical-slice/vertical-slice.md +1 -1
- package/framework/standards/backend/api/validation.md +1 -1
- package/framework/standards/backend/dotnet/testing.md +10 -4
- package/framework/standards/backend/dotnet/vsa-handler-patterns.md +5 -5
- package/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +1 -1
- package/framework/standards/backend/integrations/neon-auth/neon-auth.md +2 -2
- package/framework/standards/data/nosql/cache/redis.md +1 -1
- package/framework/standards/data/nosql/cosmos-db.md +3 -3
- package/framework/standards/frontend/admin-app/forms.md +1 -1
- package/framework/standards/frontend/design-system/art-direction.md +88 -0
- package/framework/standards/frontend/design-system/premium-finish.md +77 -2
- package/framework/standards/frontend/nextjs/testing.md +10 -6
- package/framework/standards/infrastructure/neon/neon-pgvector.md +5 -5
- package/framework/templates/.idea/morph-templates.xml +92 -0
- package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
- package/framework/templates/CLAUDE.md.core.template +3 -3
- package/framework/templates/IDE-SNIPPETS.md +262 -262
- package/framework/templates/REGISTRY.json +9 -9
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
- package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
- package/framework/templates/docs/plan.md +3 -1
- package/framework/templates/docs/ui-mockups.md +4 -0
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
- package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
- package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
- package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
- package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
- package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
- package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
- package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
- package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
- package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
- package/framework/templates/state.template.json +17 -17
- package/framework/templates/ui/design-system.css +226 -226
- package/package.json +1 -1
- package/src/commands/context/context-refresh.js +0 -16
- package/src/commands/dashboard/dashboard.js +2 -8
- package/src/commands/e2e/e2e.js +17 -104
- package/src/commands/graph/affected.js +0 -14
- package/src/commands/graph/build.js +11 -50
- package/src/commands/graph/explain.js +0 -16
- package/src/commands/graph/status.js +1 -12
- package/src/commands/mcp/mcp-setup.js +4 -62
- package/src/commands/observability/cost.js +5 -57
- package/src/commands/observability/telemetry.js +1 -14
- package/src/commands/project/branch.js +4 -45
- package/src/commands/project/claim.js +4 -48
- package/src/commands/project/doctor.js +48 -302
- package/src/commands/project/env.js +1 -27
- package/src/commands/project/fleet.js +3 -32
- package/src/commands/project/init.js +4 -68
- package/src/commands/project/install-plugin-cmd.js +0 -1
- package/src/commands/project/standards.js +1 -62
- package/src/commands/project/status.js +0 -53
- package/src/commands/project/update.js +31 -239
- package/src/commands/project/worktree.js +108 -882
- package/src/commands/scaffold/scaffold.js +0 -25
- package/src/commands/state/advance.js +14 -85
- package/src/commands/state/approve.js +15 -97
- package/src/commands/state/archive.js +12 -64
- package/src/commands/state/auto-approval.js +2 -5
- package/src/commands/state/create.js +22 -109
- package/src/commands/state/delete.js +11 -63
- package/src/commands/state/finish.js +98 -475
- package/src/commands/state/gate-check.js +22 -132
- package/src/commands/state/gate-decision.js +3 -39
- package/src/commands/state/handoff.js +3 -30
- package/src/commands/state/list.js +14 -84
- package/src/commands/state/report-check.js +8 -58
- package/src/commands/state/retype.js +4 -26
- package/src/commands/validation/index.js +0 -3
- package/src/commands/validation/mutate.js +11 -11
- package/src/commands/validation/plan-check.js +4 -2
- package/src/commands/validation/tests-audit.js +7 -0
- package/src/commands/validation/validate-feature.js +10 -97
- package/src/commands/validation/verify.js +30 -113
- package/src/core/paths/output-schema.js +2 -101
- package/src/core/state/feature-identity.js +1 -25
- package/src/core/state/gate-order.js +0 -27
- package/src/core/state/lifecycle-audit.js +8 -100
- package/src/core/state/state-manager.js +22 -304
- package/src/core/templates/template-registry.js +2 -97
- package/src/core/templates/template-renderer.js +13 -93
- package/src/core/templates/template-seed.js +0 -1
- package/src/core/work-types.js +1 -36
- package/src/dashboard/app/App.jsx +1 -8
- package/src/dashboard/app/components/ActivityFeed.jsx +0 -5
- package/src/dashboard/app/components/CommandPalette.jsx +0 -7
- package/src/dashboard/app/components/DetailPanel.jsx +1 -5
- package/src/dashboard/app/components/EntityLink.jsx +0 -12
- package/src/dashboard/app/components/ErrorBoundary.jsx +1 -8
- package/src/dashboard/app/components/KnowledgeMarkdown.jsx +0 -11
- package/src/dashboard/app/components/Markdown.jsx +0 -9
- package/src/dashboard/app/components/PhaseRail.jsx +0 -11
- package/src/dashboard/app/components/SearchFilter.jsx +0 -4
- package/src/dashboard/app/components/Sidebar.jsx +0 -5
- package/src/dashboard/app/hooks/useMorphQuery.js +1 -11
- package/src/dashboard/app/hooks/usePref.js +1 -5
- package/src/dashboard/app/lib/format.js +0 -2
- package/src/dashboard/app/lib/phases.js +1 -5
- package/src/dashboard/app/lib/project.js +0 -12
- package/src/dashboard/app/main.jsx +13 -13
- package/src/dashboard/app/pages/AgentMap.jsx +1 -8
- package/src/dashboard/app/pages/FeatureDetail.jsx +1 -5
- package/src/dashboard/app/pages/Features.jsx +1 -8
- package/src/dashboard/app/pages/Guide.jsx +0 -1
- package/src/dashboard/app/pages/HookInspector.jsx +2 -23
- package/src/dashboard/app/pages/PhasePipeline.jsx +0 -3
- package/src/dashboard/app/pages/Portfolio.jsx +0 -1
- package/src/dashboard/app/pages/RulesMap.jsx +1 -16
- package/src/dashboard/app/pages/SkillsLibrary.jsx +1 -16
- package/src/dashboard/app/pages/Standards.jsx +2 -17
- package/src/dashboard/scanner/activity-scanner.js +10 -69
- package/src/dashboard/scanner/agents-scanner.js +1 -23
- package/src/dashboard/scanner/docs-scanner.js +0 -6
- package/src/dashboard/scanner/feature-status.js +2 -5
- package/src/dashboard/scanner/features-scanner.js +10 -66
- package/src/dashboard/scanner/hooks-scanner.js +5 -28
- package/src/dashboard/scanner/index.js +0 -4
- package/src/dashboard/scanner/portfolio.js +5 -29
- package/src/dashboard/scanner/project-api.js +8 -54
- package/src/dashboard/scanner/rules-scanner.js +1 -2
- package/src/dashboard/scanner/skills-scanner.js +2 -12
- package/src/dashboard/scanner/standards-scanner.js +2 -6
- package/src/dashboard/vite-plugin-morph-data.js +5 -19
- package/src/dashboard/vite.config.js +24 -24
- package/src/lib/ai/ai-checks.js +7 -52
- package/src/lib/ai/ai-project-scan.js +14 -108
- package/src/lib/ai/code-audit.js +7 -63
- package/src/lib/ai/pin-drift.js +8 -51
- package/src/lib/ai/registry-audit.js +11 -90
- package/src/lib/ci/ci-verify.js +4 -19
- package/src/lib/ci/github-ci.js +9 -37
- package/src/lib/ci/workflow-scaffold.js +14 -10
- package/src/lib/detectors/claude-config-detector.js +13 -74
- package/src/lib/detectors/index.js +4 -50
- package/src/lib/e2e/applicability.js +37 -0
- package/src/lib/e2e/compose-env.js +5 -66
- package/src/lib/e2e/stack-teardown.js +6 -40
- package/src/lib/generators/architecture-scanner.js +18 -156
- package/src/lib/generators/handoff-generator.js +9 -53
- package/src/lib/generators/scaffold-generator.js +5 -101
- package/src/lib/generators/settings-generator.js +4 -37
- package/src/lib/git/branch-classifier.js +11 -84
- package/src/lib/git/default-branch.js +14 -169
- package/src/lib/git/evidence-staleness.js +1 -0
- package/src/lib/git/gh.js +2 -17
- package/src/lib/git/pending-prs.js +6 -37
- package/src/lib/git/pr-files.js +3 -28
- package/src/lib/git/pr-index.js +3 -34
- package/src/lib/git/tree-fingerprint.js +3 -15
- package/src/lib/git/tree-state.js +6 -33
- package/src/lib/graph/god-nodes.js +2 -22
- package/src/lib/graph/graph-health.js +3 -24
- package/src/lib/graph/graph-loader.js +5 -56
- package/src/lib/graph/graphify-runtime.js +7 -37
- package/src/lib/graph/graphifyignore.js +8 -74
- package/src/lib/graph/sanitize.js +16 -136
- package/src/lib/heavy/cleanup.js +1 -1
- package/src/lib/installers/effects.js +8 -93
- package/src/lib/installers/mcp-installer.js +9 -169
- package/src/lib/installers/memory-installer.js +4 -27
- package/src/lib/installers/templates-reconcile.js +5 -60
- package/src/lib/mutation/adapters.js +6 -17
- package/src/lib/mutation/dotnet-introspection.js +20 -106
- package/src/lib/mutation/runner.js +23 -75
- package/src/lib/mutation/subset.js +1 -4
- package/src/lib/mutation/trx.js +0 -1
- package/src/lib/plan/artifact-vocabulary.js +5 -25
- package/src/lib/plan/checks.js +34 -33
- package/src/lib/plan/plan-parser.js +7 -8
- package/src/lib/projects/registry.js +7 -44
- package/src/lib/review-reports.js +11 -26
- package/src/lib/risk-detector.js +41 -173
- package/src/lib/specs/adr-index.js +6 -34
- package/src/lib/specs/frontmatter.js +2 -15
- package/src/lib/specs/gfm-table.js +1 -7
- package/src/lib/specs/revocations.js +1 -14
- package/src/lib/specs/screen-checklist.js +47 -124
- package/src/lib/stack/dotnet-build-ignores.js +2 -6
- package/src/lib/stack/stack-profile.js +1 -28
- package/src/lib/stack/stack-scan.js +1 -8
- package/src/lib/stack-filter.js +4 -27
- package/src/lib/standards/registry.js +1 -7
- package/src/lib/standards/sections.js +2 -13
- package/src/lib/standards/verified-against.js +19 -191
- package/src/lib/tasks/eval-node.js +21 -169
- package/src/lib/tasks/linux-runner.js +18 -142
- package/src/lib/tasks/test-nodes.js +43 -240
- package/src/lib/tasks/test-runner.js +43 -341
- package/src/lib/telemetry/metrics.js +7 -36
- package/src/lib/telemetry/telemetry-reader.js +13 -125
- package/src/lib/telemetry/verify-event.js +2 -30
- package/src/lib/tests-audit/audit.js +96 -0
- package/src/lib/validators/code-budget/code-budget-validator.js +4 -44
- package/src/lib/validators/code-budget/index.js +0 -7
- package/src/lib/validators/contracts/contract-compliance-validator.js +2 -24
- package/src/lib/validators/contracts/index.js +0 -6
- package/src/lib/validators/nextjs/index.js +0 -5
- package/src/lib/validators/nextjs/next-component-validator.js +4 -81
- package/src/lib/validators/packages/index.js +0 -6
- package/src/lib/validators/packages/package-validator.js +6 -56
- package/src/lib/validators/reuse/index.js +0 -8
- package/src/lib/validators/reuse/reuse-validator.js +11 -101
- package/src/lib/validators/reuse/symbol-scanner.js +6 -62
- package/src/lib/validators/traceability-check.js +5 -63
- package/src/lib/validators/validation-runner.js +21 -158
- package/src/lib/validators/verify-runner.js +85 -376
- package/src/lib/work-type-detector.js +5 -67
- package/src/lib/worktree/docker-audit.js +17 -136
- package/src/lib/worktree/env-allocator.js +10 -98
- package/src/lib/worktree/feature-truth.js +12 -115
- package/src/lib/worktree/finish-backup.js +32 -242
- package/src/lib/worktree/fleet-scanner.js +13 -95
- package/src/lib/worktree/ignored-triage.js +15 -91
- package/src/lib/worktree/vscode-settings.js +2 -3
- package/src/lib/worktree/worktree-audit.js +21 -213
- package/src/lib/worktree/worktree-include.js +3 -5
- package/src/scripts/global-install.js +3 -9
- package/src/scripts/install-plugin.js +1 -13
- package/src/scripts/setup-infra.js +17 -147
- package/src/utils/agents-installer.js +29 -276
- package/src/utils/banner.js +4 -25
- package/src/utils/claude-md-injector.js +1 -37
- package/src/utils/claude-settings-manager.js +1 -52
- package/src/utils/file-copier.js +11 -95
- package/src/utils/hooks-installer.js +21 -298
- package/src/utils/skills-installer.js +4 -101
- package/src/utils/version-checker.js +4 -83
- package/framework/commands/morph-proposal.md +0 -9
- package/framework/hooks/git/commit-msg/conventional-commits.sh +0 -33
- package/framework/hooks/git/pre-commit/agents.sh +0 -25
- package/framework/hooks/git/pre-commit/orchestrator.sh +0 -64
- package/framework/hooks/git/pre-push/run-tests.sh +0 -44
- package/src/commands/utils/index.js +0 -3
- package/src/lib/detectors/design-system-detector.js +0 -188
- package/src/lib/generators/design-system-generator.js +0 -508
- package/src/lib/specs/old-format.js +0 -68
- package/src/utils/agent-id-mapper.js +0 -11
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
# ============================================================
|
|
2
|
-
# Dockerfile: Next.js Frontend ({{titleCase FEATURE_NAME}})
|
|
3
|
-
# Stack: Next.js + Neon
|
|
4
|
-
# Generated by MORPH Framework
|
|
5
|
-
# Requires: output: "standalone" in next.config.ts
|
|
6
|
-
# ============================================================
|
|
7
|
-
|
|
8
|
-
# Stage 1: Install dependencies
|
|
9
|
-
FROM node:22-alpine AS deps
|
|
10
|
-
WORKDIR /app
|
|
11
|
-
COPY package.json package-lock.json ./
|
|
12
|
-
RUN npm ci --omit=dev
|
|
13
|
-
|
|
14
|
-
# Stage 2: Build application
|
|
15
|
-
FROM node:22-alpine AS builder
|
|
16
|
-
WORKDIR /app
|
|
17
|
-
COPY --from=deps /app/node_modules ./node_modules
|
|
18
|
-
COPY . .
|
|
19
|
-
ENV NEXT_TELEMETRY_DISABLED=1
|
|
20
|
-
RUN npm run build
|
|
21
|
-
|
|
22
|
-
# Stage 3: Production runtime
|
|
23
|
-
FROM node:22-alpine AS runner
|
|
24
|
-
WORKDIR /app
|
|
25
|
-
|
|
26
|
-
ENV NODE_ENV=production
|
|
27
|
-
ENV NEXT_TELEMETRY_DISABLED=1
|
|
28
|
-
|
|
29
|
-
# Create non-root user
|
|
30
|
-
RUN addgroup --system --gid 1001 nodejs && \
|
|
31
|
-
adduser --system --uid 1001 nextjs
|
|
32
|
-
|
|
33
|
-
# Copy build output
|
|
34
|
-
COPY --from=builder /app/public ./public
|
|
35
|
-
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
|
36
|
-
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|
37
|
-
|
|
38
|
-
# Switch to non-root user
|
|
39
|
-
USER nextjs
|
|
40
|
-
|
|
41
|
-
# Expose port
|
|
42
|
-
EXPOSE 3000
|
|
43
|
-
|
|
44
|
-
ENV PORT=3000
|
|
45
|
-
ENV HOSTNAME="0.0.0.0"
|
|
46
|
-
|
|
47
|
-
# Start server
|
|
48
|
-
CMD ["node", "server.js"]
|
|
1
|
+
# ============================================================
|
|
2
|
+
# Dockerfile: Next.js Frontend ({{titleCase FEATURE_NAME}})
|
|
3
|
+
# Stack: Next.js + Neon
|
|
4
|
+
# Generated by MORPH Framework
|
|
5
|
+
# Requires: output: "standalone" in next.config.ts
|
|
6
|
+
# ============================================================
|
|
7
|
+
|
|
8
|
+
# Stage 1: Install dependencies
|
|
9
|
+
FROM node:22-alpine AS deps
|
|
10
|
+
WORKDIR /app
|
|
11
|
+
COPY package.json package-lock.json ./
|
|
12
|
+
RUN npm ci --omit=dev
|
|
13
|
+
|
|
14
|
+
# Stage 2: Build application
|
|
15
|
+
FROM node:22-alpine AS builder
|
|
16
|
+
WORKDIR /app
|
|
17
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
18
|
+
COPY . .
|
|
19
|
+
ENV NEXT_TELEMETRY_DISABLED=1
|
|
20
|
+
RUN npm run build
|
|
21
|
+
|
|
22
|
+
# Stage 3: Production runtime
|
|
23
|
+
FROM node:22-alpine AS runner
|
|
24
|
+
WORKDIR /app
|
|
25
|
+
|
|
26
|
+
ENV NODE_ENV=production
|
|
27
|
+
ENV NEXT_TELEMETRY_DISABLED=1
|
|
28
|
+
|
|
29
|
+
# Create non-root user
|
|
30
|
+
RUN addgroup --system --gid 1001 nodejs && \
|
|
31
|
+
adduser --system --uid 1001 nextjs
|
|
32
|
+
|
|
33
|
+
# Copy build output
|
|
34
|
+
COPY --from=builder /app/public ./public
|
|
35
|
+
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
|
36
|
+
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|
37
|
+
|
|
38
|
+
# Switch to non-root user
|
|
39
|
+
USER nextjs
|
|
40
|
+
|
|
41
|
+
# Expose port
|
|
42
|
+
EXPOSE 3000
|
|
43
|
+
|
|
44
|
+
ENV PORT=3000
|
|
45
|
+
ENV HOSTNAME="0.0.0.0"
|
|
46
|
+
|
|
47
|
+
# Start server
|
|
48
|
+
CMD ["node", "server.js"]
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
name: 'Build & Push Docker Image'
|
|
2
|
-
description: 'Build multi-stage Docker image and push to registry'
|
|
3
|
-
inputs:
|
|
4
|
-
registry:
|
|
5
|
-
description: 'Docker registry URL'
|
|
6
|
-
required: true
|
|
7
|
-
image-name:
|
|
8
|
-
description: 'Docker image name'
|
|
9
|
-
required: true
|
|
10
|
-
dockerfile-path:
|
|
11
|
-
description: 'Path to Dockerfile'
|
|
12
|
-
required: false
|
|
13
|
-
default: 'Dockerfile'
|
|
14
|
-
build-context:
|
|
15
|
-
description: 'Docker build context'
|
|
16
|
-
required: false
|
|
17
|
-
default: '.'
|
|
18
|
-
outputs:
|
|
19
|
-
image-tag:
|
|
20
|
-
description: 'Full image tag with registry'
|
|
21
|
-
value: ${{{{ steps.build.outputs.tags }}}}
|
|
22
|
-
|
|
23
|
-
runs:
|
|
24
|
-
using: 'composite'
|
|
25
|
-
steps:
|
|
26
|
-
- name: Set up Docker Buildx
|
|
27
|
-
uses: docker/setup-buildx-action@v3
|
|
28
|
-
|
|
29
|
-
- name: Login to Registry
|
|
30
|
-
uses: docker/login-action@v3
|
|
31
|
-
with:
|
|
32
|
-
registry: ${{{{ inputs.registry }}}}
|
|
33
|
-
username: ${{{{ secrets.REGISTRY_USERNAME }}}}
|
|
34
|
-
password: ${{{{ secrets.REGISTRY_PASSWORD }}}}
|
|
35
|
-
|
|
36
|
-
- name: Build and push
|
|
37
|
-
id: build
|
|
38
|
-
uses: docker/build-push-action@v5
|
|
39
|
-
with:
|
|
40
|
-
context: ${{{{ inputs.build-context }}}}
|
|
41
|
-
file: ${{{{ inputs.dockerfile-path }}}}
|
|
42
|
-
push: true
|
|
43
|
-
tags: ${{{{ inputs.registry }}}}/${{{{ inputs.image-name }}}}:${{{{ github.sha }}}}
|
|
44
|
-
cache-from: type=gha
|
|
45
|
-
cache-to: type=gha,mode=max
|
|
1
|
+
name: 'Build & Push Docker Image'
|
|
2
|
+
description: 'Build multi-stage Docker image and push to registry'
|
|
3
|
+
inputs:
|
|
4
|
+
registry:
|
|
5
|
+
description: 'Docker registry URL'
|
|
6
|
+
required: true
|
|
7
|
+
image-name:
|
|
8
|
+
description: 'Docker image name'
|
|
9
|
+
required: true
|
|
10
|
+
dockerfile-path:
|
|
11
|
+
description: 'Path to Dockerfile'
|
|
12
|
+
required: false
|
|
13
|
+
default: 'Dockerfile'
|
|
14
|
+
build-context:
|
|
15
|
+
description: 'Docker build context'
|
|
16
|
+
required: false
|
|
17
|
+
default: '.'
|
|
18
|
+
outputs:
|
|
19
|
+
image-tag:
|
|
20
|
+
description: 'Full image tag with registry'
|
|
21
|
+
value: ${{{{ steps.build.outputs.tags }}}}
|
|
22
|
+
|
|
23
|
+
runs:
|
|
24
|
+
using: 'composite'
|
|
25
|
+
steps:
|
|
26
|
+
- name: Set up Docker Buildx
|
|
27
|
+
uses: docker/setup-buildx-action@v3
|
|
28
|
+
|
|
29
|
+
- name: Login to Registry
|
|
30
|
+
uses: docker/login-action@v3
|
|
31
|
+
with:
|
|
32
|
+
registry: ${{{{ inputs.registry }}}}
|
|
33
|
+
username: ${{{{ secrets.REGISTRY_USERNAME }}}}
|
|
34
|
+
password: ${{{{ secrets.REGISTRY_PASSWORD }}}}
|
|
35
|
+
|
|
36
|
+
- name: Build and push
|
|
37
|
+
id: build
|
|
38
|
+
uses: docker/build-push-action@v5
|
|
39
|
+
with:
|
|
40
|
+
context: ${{{{ inputs.build-context }}}}
|
|
41
|
+
file: ${{{{ inputs.dockerfile-path }}}}
|
|
42
|
+
push: true
|
|
43
|
+
tags: ${{{{ inputs.registry }}}}/${{{{ inputs.image-name }}}}:${{{{ github.sha }}}}
|
|
44
|
+
cache-from: type=gha
|
|
45
|
+
cache-to: type=gha,mode=max
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
name: 'Health Check'
|
|
2
|
-
description: 'Poll health endpoint until ready'
|
|
3
|
-
inputs:
|
|
4
|
-
url:
|
|
5
|
-
description: 'Health check URL'
|
|
6
|
-
required: true
|
|
7
|
-
timeout:
|
|
8
|
-
description: 'Timeout in seconds'
|
|
9
|
-
required: false
|
|
10
|
-
default: '300'
|
|
11
|
-
interval:
|
|
12
|
-
description: 'Polling interval in seconds'
|
|
13
|
-
required: false
|
|
14
|
-
default: '5'
|
|
15
|
-
|
|
16
|
-
runs:
|
|
17
|
-
using: 'composite'
|
|
18
|
-
steps:
|
|
19
|
-
- name: Wait for health
|
|
20
|
-
shell: bash
|
|
21
|
-
run: |
|
|
22
|
-
RETRIES=$(($${{{{ inputs.timeout }}}} / ${{{{ inputs.interval }}}}))
|
|
23
|
-
curl --retry $RETRIES \
|
|
24
|
-
--retry-delay ${{{{ inputs.interval }}}} \
|
|
25
|
-
--retry-connrefused \
|
|
26
|
-
--fail \
|
|
27
|
-
${{{{ inputs.url }}}}
|
|
1
|
+
name: 'Health Check'
|
|
2
|
+
description: 'Poll health endpoint until ready'
|
|
3
|
+
inputs:
|
|
4
|
+
url:
|
|
5
|
+
description: 'Health check URL'
|
|
6
|
+
required: true
|
|
7
|
+
timeout:
|
|
8
|
+
description: 'Timeout in seconds'
|
|
9
|
+
required: false
|
|
10
|
+
default: '300'
|
|
11
|
+
interval:
|
|
12
|
+
description: 'Polling interval in seconds'
|
|
13
|
+
required: false
|
|
14
|
+
default: '5'
|
|
15
|
+
|
|
16
|
+
runs:
|
|
17
|
+
using: 'composite'
|
|
18
|
+
steps:
|
|
19
|
+
- name: Wait for health
|
|
20
|
+
shell: bash
|
|
21
|
+
run: |
|
|
22
|
+
RETRIES=$(($${{{{ inputs.timeout }}}} / ${{{{ inputs.interval }}}}))
|
|
23
|
+
curl --retry $RETRIES \
|
|
24
|
+
--retry-delay ${{{{ inputs.interval }}}} \
|
|
25
|
+
--retry-connrefused \
|
|
26
|
+
--fail \
|
|
27
|
+
${{{{ inputs.url }}}}
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
name: Build & Push Docker Image
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_call:
|
|
5
|
-
inputs:
|
|
6
|
-
registry:
|
|
7
|
-
required: true
|
|
8
|
-
type: string
|
|
9
|
-
image-name:
|
|
10
|
-
required: true
|
|
11
|
-
type: string
|
|
12
|
-
dockerfile-path:
|
|
13
|
-
required: false
|
|
14
|
-
type: string
|
|
15
|
-
default: 'Dockerfile'
|
|
16
|
-
build-context:
|
|
17
|
-
required: false
|
|
18
|
-
type: string
|
|
19
|
-
default: '.'
|
|
20
|
-
outputs:
|
|
21
|
-
image-tag:
|
|
22
|
-
value: ${{{{ jobs.docker.outputs.tag }}}}
|
|
23
|
-
|
|
24
|
-
jobs:
|
|
25
|
-
docker:
|
|
26
|
-
runs-on: ubuntu-latest
|
|
27
|
-
outputs:
|
|
28
|
-
tag: ${{{{ steps.meta.outputs.tags }}}}
|
|
29
|
-
steps:
|
|
30
|
-
- uses: actions/checkout@v4
|
|
31
|
-
|
|
32
|
-
- name: Set up Docker Buildx
|
|
33
|
-
uses: docker/setup-buildx-action@v3
|
|
34
|
-
|
|
35
|
-
- name: Login to Registry
|
|
36
|
-
uses: docker/login-action@v3
|
|
37
|
-
with:
|
|
38
|
-
registry: ${{{{ inputs.registry }}}}
|
|
39
|
-
username: ${{{{ secrets.REGISTRY_USERNAME }}}}
|
|
40
|
-
password: ${{{{ secrets.REGISTRY_PASSWORD }}}}
|
|
41
|
-
|
|
42
|
-
- name: Docker metadata
|
|
43
|
-
id: meta
|
|
44
|
-
uses: docker/metadata-action@v5
|
|
45
|
-
with:
|
|
46
|
-
images: ${{{{ inputs.registry }}}}/${{{{ inputs.image-name }}}}
|
|
47
|
-
tags: |
|
|
48
|
-
type=ref,event=branch
|
|
49
|
-
type=sha,prefix=${{{{ inputs.image-name }}}}-
|
|
50
|
-
|
|
51
|
-
- name: Build and push
|
|
52
|
-
uses: docker/build-push-action@v5
|
|
53
|
-
with:
|
|
54
|
-
context: ${{{{ inputs.build-context }}}}
|
|
55
|
-
file: ${{{{ inputs.dockerfile-path }}}}
|
|
56
|
-
push: true
|
|
57
|
-
tags: ${{{{ steps.meta.outputs.tags }}}}
|
|
58
|
-
cache-from: type=gha
|
|
59
|
-
cache-to: type=gha,mode=max
|
|
1
|
+
name: Build & Push Docker Image
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
registry:
|
|
7
|
+
required: true
|
|
8
|
+
type: string
|
|
9
|
+
image-name:
|
|
10
|
+
required: true
|
|
11
|
+
type: string
|
|
12
|
+
dockerfile-path:
|
|
13
|
+
required: false
|
|
14
|
+
type: string
|
|
15
|
+
default: 'Dockerfile'
|
|
16
|
+
build-context:
|
|
17
|
+
required: false
|
|
18
|
+
type: string
|
|
19
|
+
default: '.'
|
|
20
|
+
outputs:
|
|
21
|
+
image-tag:
|
|
22
|
+
value: ${{{{ jobs.docker.outputs.tag }}}}
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
docker:
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
outputs:
|
|
28
|
+
tag: ${{{{ steps.meta.outputs.tags }}}}
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
|
|
32
|
+
- name: Set up Docker Buildx
|
|
33
|
+
uses: docker/setup-buildx-action@v3
|
|
34
|
+
|
|
35
|
+
- name: Login to Registry
|
|
36
|
+
uses: docker/login-action@v3
|
|
37
|
+
with:
|
|
38
|
+
registry: ${{{{ inputs.registry }}}}
|
|
39
|
+
username: ${{{{ secrets.REGISTRY_USERNAME }}}}
|
|
40
|
+
password: ${{{{ secrets.REGISTRY_PASSWORD }}}}
|
|
41
|
+
|
|
42
|
+
- name: Docker metadata
|
|
43
|
+
id: meta
|
|
44
|
+
uses: docker/metadata-action@v5
|
|
45
|
+
with:
|
|
46
|
+
images: ${{{{ inputs.registry }}}}/${{{{ inputs.image-name }}}}
|
|
47
|
+
tags: |
|
|
48
|
+
type=ref,event=branch
|
|
49
|
+
type=sha,prefix=${{{{ inputs.image-name }}}}-
|
|
50
|
+
|
|
51
|
+
- name: Build and push
|
|
52
|
+
uses: docker/build-push-action@v5
|
|
53
|
+
with:
|
|
54
|
+
context: ${{{{ inputs.build-context }}}}
|
|
55
|
+
file: ${{{{ inputs.dockerfile-path }}}}
|
|
56
|
+
push: true
|
|
57
|
+
tags: ${{{{ steps.meta.outputs.tags }}}}
|
|
58
|
+
cache-from: type=gha
|
|
59
|
+
cache-to: type=gha,mode=max
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
name: Build .NET Application
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_call:
|
|
5
|
-
inputs:
|
|
6
|
-
dotnet-version:
|
|
7
|
-
required: false
|
|
8
|
-
type: string
|
|
9
|
-
default: '{{DOTNET_VERSION}}'
|
|
10
|
-
build-configuration:
|
|
11
|
-
required: false
|
|
12
|
-
type: string
|
|
13
|
-
default: 'Release'
|
|
14
|
-
run-tests:
|
|
15
|
-
required: false
|
|
16
|
-
type: boolean
|
|
17
|
-
default: true
|
|
18
|
-
|
|
19
|
-
jobs:
|
|
20
|
-
build:
|
|
21
|
-
runs-on: ubuntu-latest
|
|
22
|
-
steps:
|
|
23
|
-
- uses: actions/checkout@v4
|
|
24
|
-
|
|
25
|
-
- name: Setup .NET
|
|
26
|
-
uses: actions/setup-dotnet@v4
|
|
27
|
-
with:
|
|
28
|
-
dotnet-version: ${{{{ inputs.dotnet-version }}}}
|
|
29
|
-
|
|
30
|
-
- name: Restore dependencies
|
|
31
|
-
run: dotnet restore
|
|
32
|
-
|
|
33
|
-
- name: Build
|
|
34
|
-
run: dotnet build --configuration ${{{{ inputs.build-configuration }}}} --no-restore
|
|
35
|
-
|
|
36
|
-
{{#if run-tests}}
|
|
37
|
-
- name: Test
|
|
38
|
-
run: dotnet test --configuration ${{{{ inputs.build-configuration }}}} --no-build --verbosity normal
|
|
39
|
-
{{/if}}
|
|
1
|
+
name: Build .NET Application
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
dotnet-version:
|
|
7
|
+
required: false
|
|
8
|
+
type: string
|
|
9
|
+
default: '{{DOTNET_VERSION}}'
|
|
10
|
+
build-configuration:
|
|
11
|
+
required: false
|
|
12
|
+
type: string
|
|
13
|
+
default: 'Release'
|
|
14
|
+
run-tests:
|
|
15
|
+
required: false
|
|
16
|
+
type: boolean
|
|
17
|
+
default: true
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
build:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- name: Setup .NET
|
|
26
|
+
uses: actions/setup-dotnet@v4
|
|
27
|
+
with:
|
|
28
|
+
dotnet-version: ${{{{ inputs.dotnet-version }}}}
|
|
29
|
+
|
|
30
|
+
- name: Restore dependencies
|
|
31
|
+
run: dotnet restore
|
|
32
|
+
|
|
33
|
+
- name: Build
|
|
34
|
+
run: dotnet build --configuration ${{{{ inputs.build-configuration }}}} --no-restore
|
|
35
|
+
|
|
36
|
+
{{#if run-tests}}
|
|
37
|
+
- name: Test
|
|
38
|
+
run: dotnet test --configuration ${{{{ inputs.build-configuration }}}} --no-build --verbosity normal
|
|
39
|
+
{{/if}}
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
# Fusion Agent — {{AGENT_ID}} (F-Thread {{THREAD_INDEX}}/{{THREAD_COUNT}})
|
|
2
|
-
|
|
3
|
-
You are **Fusion Agent {{THREAD_INDEX}}** in a best-of-N execution session.
|
|
4
|
-
|
|
5
|
-
## Your Identity
|
|
6
|
-
- Agent: {{AGENT_ID}}
|
|
7
|
-
- Role: Fusion Participant (F-Thread)
|
|
8
|
-
- Thread: {{THREAD_ID}}
|
|
9
|
-
- Instance: {{THREAD_INDEX}} of {{THREAD_COUNT}}
|
|
10
|
-
- Strategy: {{FUSION_STRATEGY}}
|
|
11
|
-
|
|
12
|
-
## Mission
|
|
13
|
-
Produce an **independent, high-quality implementation** of the task below. You are competing with {{THREAD_COUNT_MINUS_ONE}} other agents — the best result wins.
|
|
14
|
-
|
|
15
|
-
## The Task
|
|
16
|
-
{{TASK_DESCRIPTION}}
|
|
17
|
-
|
|
18
|
-
## Spec Context
|
|
19
|
-
{{SPEC_SUMMARY}}
|
|
20
|
-
|
|
21
|
-
## Your Approach Hint
|
|
22
|
-
{{#if THREAD_INDEX == 1}}
|
|
23
|
-
**Approach: Standard/Recommended**
|
|
24
|
-
Follow the most conventional, well-tested approach. Prioritize clarity and maintainability over cleverness.
|
|
25
|
-
{{/if}}
|
|
26
|
-
{{#if THREAD_INDEX == 2}}
|
|
27
|
-
**Approach: Alternative/Creative**
|
|
28
|
-
Consider an alternative implementation. What would a different architectural style look like? Explore a different pattern while still meeting all requirements.
|
|
29
|
-
{{/if}}
|
|
30
|
-
{{#if THREAD_INDEX == 3}}
|
|
31
|
-
**Approach: Optimized**
|
|
32
|
-
Focus on performance, token efficiency, and minimal complexity. What is the leanest implementation that fully satisfies requirements?
|
|
33
|
-
{{/if}}
|
|
34
|
-
|
|
35
|
-
## Standards to Follow
|
|
36
|
-
{{STANDARDS}}
|
|
37
|
-
|
|
38
|
-
## Deliverables
|
|
39
|
-
{{DELIVERABLES}}
|
|
40
|
-
|
|
41
|
-
## Scoring Criteria
|
|
42
|
-
|
|
43
|
-
Your output will be scored on:
|
|
44
|
-
1. **Completeness (40%)** — Did you implement everything in the requirements?
|
|
45
|
-
2. **Standards compliance (30%)** — Do you pass architecture and security validators?
|
|
46
|
-
3. **Code quality (30%)** — Is the code clean, readable, and maintainable?
|
|
47
|
-
|
|
48
|
-
## Output Format
|
|
49
|
-
|
|
50
|
-
Structure your output as:
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
FUSION AGENT REPORT
|
|
54
|
-
Agent: {{AGENT_ID}}
|
|
55
|
-
Thread: {{THREAD_ID}}
|
|
56
|
-
Approach: [brief description of your approach]
|
|
57
|
-
|
|
58
|
-
IMPLEMENTATION:
|
|
59
|
-
[your actual implementation]
|
|
60
|
-
|
|
61
|
-
SELF-ASSESSMENT:
|
|
62
|
-
Completeness: [X/10] — [brief justification]
|
|
63
|
-
Standards: [X/10] — [validators passed/failed]
|
|
64
|
-
Quality: [X/10] — [brief justification]
|
|
65
|
-
|
|
66
|
-
FILES CREATED/MODIFIED:
|
|
67
|
-
- [list each file]
|
|
68
|
-
|
|
69
|
-
APPROACH RATIONALE:
|
|
70
|
-
[explain your key design decisions in 2-3 sentences]
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Important
|
|
74
|
-
- Work independently — do NOT coordinate with other fusion threads
|
|
75
|
-
- Be decisive — don't hedge or produce "option A / option B" — commit to one implementation
|
|
76
|
-
- Self-assess honestly — the aggregator uses your self-assessment in scoring
|
|
1
|
+
# Fusion Agent — {{AGENT_ID}} (F-Thread {{THREAD_INDEX}}/{{THREAD_COUNT}})
|
|
2
|
+
|
|
3
|
+
You are **Fusion Agent {{THREAD_INDEX}}** in a best-of-N execution session.
|
|
4
|
+
|
|
5
|
+
## Your Identity
|
|
6
|
+
- Agent: {{AGENT_ID}}
|
|
7
|
+
- Role: Fusion Participant (F-Thread)
|
|
8
|
+
- Thread: {{THREAD_ID}}
|
|
9
|
+
- Instance: {{THREAD_INDEX}} of {{THREAD_COUNT}}
|
|
10
|
+
- Strategy: {{FUSION_STRATEGY}}
|
|
11
|
+
|
|
12
|
+
## Mission
|
|
13
|
+
Produce an **independent, high-quality implementation** of the task below. You are competing with {{THREAD_COUNT_MINUS_ONE}} other agents — the best result wins.
|
|
14
|
+
|
|
15
|
+
## The Task
|
|
16
|
+
{{TASK_DESCRIPTION}}
|
|
17
|
+
|
|
18
|
+
## Spec Context
|
|
19
|
+
{{SPEC_SUMMARY}}
|
|
20
|
+
|
|
21
|
+
## Your Approach Hint
|
|
22
|
+
{{#if THREAD_INDEX == 1}}
|
|
23
|
+
**Approach: Standard/Recommended**
|
|
24
|
+
Follow the most conventional, well-tested approach. Prioritize clarity and maintainability over cleverness.
|
|
25
|
+
{{/if}}
|
|
26
|
+
{{#if THREAD_INDEX == 2}}
|
|
27
|
+
**Approach: Alternative/Creative**
|
|
28
|
+
Consider an alternative implementation. What would a different architectural style look like? Explore a different pattern while still meeting all requirements.
|
|
29
|
+
{{/if}}
|
|
30
|
+
{{#if THREAD_INDEX == 3}}
|
|
31
|
+
**Approach: Optimized**
|
|
32
|
+
Focus on performance, token efficiency, and minimal complexity. What is the leanest implementation that fully satisfies requirements?
|
|
33
|
+
{{/if}}
|
|
34
|
+
|
|
35
|
+
## Standards to Follow
|
|
36
|
+
{{STANDARDS}}
|
|
37
|
+
|
|
38
|
+
## Deliverables
|
|
39
|
+
{{DELIVERABLES}}
|
|
40
|
+
|
|
41
|
+
## Scoring Criteria
|
|
42
|
+
|
|
43
|
+
Your output will be scored on:
|
|
44
|
+
1. **Completeness (40%)** — Did you implement everything in the requirements?
|
|
45
|
+
2. **Standards compliance (30%)** — Do you pass architecture and security validators?
|
|
46
|
+
3. **Code quality (30%)** — Is the code clean, readable, and maintainable?
|
|
47
|
+
|
|
48
|
+
## Output Format
|
|
49
|
+
|
|
50
|
+
Structure your output as:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
FUSION AGENT REPORT
|
|
54
|
+
Agent: {{AGENT_ID}}
|
|
55
|
+
Thread: {{THREAD_ID}}
|
|
56
|
+
Approach: [brief description of your approach]
|
|
57
|
+
|
|
58
|
+
IMPLEMENTATION:
|
|
59
|
+
[your actual implementation]
|
|
60
|
+
|
|
61
|
+
SELF-ASSESSMENT:
|
|
62
|
+
Completeness: [X/10] — [brief justification]
|
|
63
|
+
Standards: [X/10] — [validators passed/failed]
|
|
64
|
+
Quality: [X/10] — [brief justification]
|
|
65
|
+
|
|
66
|
+
FILES CREATED/MODIFIED:
|
|
67
|
+
- [list each file]
|
|
68
|
+
|
|
69
|
+
APPROACH RATIONALE:
|
|
70
|
+
[explain your key design decisions in 2-3 sentences]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Important
|
|
74
|
+
- Work independently — do NOT coordinate with other fusion threads
|
|
75
|
+
- Be decisive — don't hedge or produce "option A / option B" — commit to one implementation
|
|
76
|
+
- Self-assess honestly — the aggregator uses your self-assessment in scoring
|