@howlil/ez-agents 3.4.2 → 4.0.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/README.md +735 -462
- package/agents/ez-architect-agent.md +267 -0
- package/agents/ez-backend-agent.md +303 -0
- package/agents/ez-chief-strategist.md +271 -0
- package/agents/ez-codebase-mapper.md +770 -770
- package/agents/ez-context-manager.md +319 -0
- package/agents/ez-debugger.md +1255 -1255
- package/agents/ez-design-expert.md +347 -0
- package/agents/ez-devops-agent.md +331 -0
- package/agents/ez-executor.md +487 -487
- package/agents/ez-frontend-agent.md +322 -0
- package/agents/ez-phase-researcher.md +553 -553
- package/agents/ez-planner.md +1307 -1307
- package/agents/ez-product-engineer.md +435 -0
- package/agents/ez-project-researcher.md +629 -629
- package/agents/ez-qa-agent.md +320 -0
- package/agents/ez-release-agent.md +333 -0
- package/agents/ez-requirements-agent.md +377 -0
- package/agents/ez-roadmapper.md +650 -650
- package/agents/ez-technical-writer.md +551 -0
- package/agents/ez-ux-expert.md +393 -0
- package/agents/ez-verifier.md +579 -579
- package/bin/guards/autonomy-guard.cjs +346 -0
- package/bin/guards/context-budget-guard.cjs +278 -0
- package/bin/guards/hallucination-guard.cjs +380 -0
- package/bin/guards/hidden-state-guard.cjs +182 -0
- package/bin/guards/team-overhead-guard.cjs +266 -0
- package/bin/guards/tool-sprawl-guard.cjs +271 -0
- package/bin/install.js +3221 -3272
- package/bin/lib/analytics/analytics-collector.cjs +86 -0
- package/bin/lib/analytics/analytics-reporter.cjs +130 -0
- package/bin/lib/analytics/cohort-analyzer.cjs +138 -0
- package/bin/lib/analytics/funnel-analyzer.cjs +147 -0
- package/bin/lib/analytics/nps-tracker.cjs +147 -0
- package/bin/lib/archetype-detector.cjs +289 -0
- package/bin/lib/assistant-adapter.cjs +361 -0
- package/bin/lib/audit-exec.cjs +175 -0
- package/bin/lib/auth.cjs +176 -0
- package/bin/lib/backup-service.cjs +422 -0
- package/bin/lib/bdd-validator.cjs +622 -0
- package/bin/lib/business-flow-mapper.cjs +429 -0
- package/bin/lib/circuit-breaker.cjs +276 -0
- package/bin/lib/code-complexity-analyzer.cjs +360 -0
- package/bin/lib/codebase-analyzer.cjs +241 -0
- package/bin/lib/commands.cjs +691 -0
- package/bin/lib/config.cjs +236 -0
- package/bin/lib/constraint-extractor.cjs +526 -0
- package/bin/lib/content-scanner.cjs +238 -0
- package/bin/lib/context-cache.cjs +154 -0
- package/bin/lib/context-compressor.cjs +102 -0
- package/bin/lib/context-deduplicator.cjs +105 -0
- package/bin/lib/context-errors.cjs +78 -0
- package/bin/lib/context-manager.cjs +338 -0
- package/bin/lib/context-metadata-tracker.cjs +140 -0
- package/bin/lib/context-relevance-scorer.cjs +99 -0
- package/bin/lib/core.cjs +507 -0
- package/bin/lib/cost-alerts.cjs +174 -0
- package/bin/lib/cost-tracker.cjs +275 -0
- package/bin/lib/crash-recovery.cjs +220 -0
- package/bin/lib/dependency-graph.cjs +319 -0
- package/bin/lib/deploy/deploy-audit-log.cjs +76 -0
- package/bin/lib/deploy/deploy-detector.cjs +69 -0
- package/bin/lib/deploy/deploy-env-manager.cjs +109 -0
- package/bin/lib/deploy/deploy-health-check.cjs +88 -0
- package/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
- package/bin/lib/deploy/deploy-rollback.cjs +72 -0
- package/bin/lib/deploy/deploy-runner.cjs +97 -0
- package/bin/lib/deploy/deploy-status.cjs +74 -0
- package/bin/lib/discussion-synthesizer.cjs +439 -0
- package/bin/lib/error-cache.cjs +114 -0
- package/bin/lib/error-registry.cjs +177 -0
- package/bin/lib/file-access.cjs +207 -0
- package/bin/lib/file-lock.cjs +236 -0
- package/bin/lib/finops/budget-enforcer.cjs +126 -0
- package/bin/lib/finops/cost-reporter.cjs +132 -0
- package/bin/lib/finops/finops-analyzer.cjs +112 -0
- package/bin/lib/finops/spot-manager.cjs +118 -0
- package/bin/lib/framework-detector.cjs +396 -0
- package/bin/lib/frontmatter.cjs +313 -0
- package/bin/lib/fs-utils.cjs +153 -0
- package/bin/lib/gate-executor.cjs +272 -0
- package/bin/lib/gates/README.md +374 -0
- package/bin/lib/gates/gate-01-requirement.cjs +303 -0
- package/bin/lib/gates/gate-02-architecture.cjs +555 -0
- package/bin/lib/gates/gate-03-code.cjs +635 -0
- package/bin/lib/gates/gate-04-security.cjs +829 -0
- package/bin/lib/git-errors.cjs +83 -0
- package/bin/lib/git-utils.cjs +321 -0
- package/bin/lib/git-workflow-engine.cjs +1157 -0
- package/bin/lib/health-check.cjs +227 -0
- package/bin/lib/index.cjs +279 -0
- package/bin/lib/init.cjs +725 -0
- package/bin/lib/lock-logger.cjs +194 -0
- package/bin/lib/lock-state.cjs +263 -0
- package/bin/lib/lockfile-validator.cjs +227 -0
- package/bin/lib/log-rotation.cjs +71 -0
- package/bin/lib/logger.cjs +125 -0
- package/bin/lib/memory-compression.cjs +256 -0
- package/bin/lib/milestone.cjs +247 -0
- package/bin/lib/model-provider.cjs +241 -0
- package/bin/lib/package-manager-detector.cjs +203 -0
- package/bin/lib/package-manager-executor.cjs +385 -0
- package/bin/lib/package-manager-service.cjs +216 -0
- package/bin/lib/perf/api-monitor.cjs +88 -0
- package/bin/lib/perf/db-optimizer.cjs +78 -0
- package/bin/lib/perf/frontend-performance.cjs +56 -0
- package/bin/lib/perf/perf-analyzer.cjs +77 -0
- package/bin/lib/perf/perf-baseline.cjs +102 -0
- package/bin/lib/perf/perf-reporter.cjs +117 -0
- package/bin/lib/perf/regression-detector.cjs +92 -0
- package/bin/lib/phase.cjs +963 -0
- package/bin/lib/planning-write.cjs +123 -0
- package/bin/lib/project-reporter.cjs +565 -0
- package/bin/lib/quality-gate.cjs +332 -0
- package/bin/lib/quality-metrics.cjs +324 -0
- package/bin/lib/recovery-manager.cjs +98 -0
- package/bin/lib/release-validator.cjs +617 -0
- package/bin/lib/retry.cjs +119 -0
- package/bin/lib/roadmap.cjs +309 -0
- package/bin/lib/safe-exec.cjs +173 -0
- package/bin/lib/safe-path.cjs +130 -0
- package/bin/lib/security-errors.cjs +62 -0
- package/bin/lib/session-chain.cjs +304 -0
- package/bin/lib/session-errors.cjs +81 -0
- package/bin/lib/session-export.cjs +251 -0
- package/bin/lib/session-import.cjs +262 -0
- package/bin/lib/session-manager.cjs +280 -0
- package/bin/lib/skill-context.cjs +148 -0
- package/bin/lib/skill-matcher.cjs +236 -0
- package/bin/lib/skill-registry.cjs +360 -0
- package/bin/lib/skill-resolver.cjs +449 -0
- package/bin/lib/skill-triggers.cjs +90 -0
- package/bin/lib/skill-validator.cjs +270 -0
- package/bin/lib/skill-versioning.cjs +355 -0
- package/bin/lib/stack-detector.cjs +399 -0
- package/bin/lib/state.cjs +736 -0
- package/bin/lib/tech-debt-analyzer.cjs +309 -0
- package/bin/lib/temp-file.cjs +239 -0
- package/bin/lib/template.cjs +223 -0
- package/bin/lib/test-file-lock.cjs +112 -0
- package/bin/lib/test-graceful.cjs +93 -0
- package/bin/lib/test-logger.cjs +60 -0
- package/bin/lib/test-safe-exec.cjs +38 -0
- package/bin/lib/test-safe-path.cjs +33 -0
- package/bin/lib/test-temp-file.cjs +125 -0
- package/bin/lib/tier-manager.cjs +428 -0
- package/bin/lib/timeout-exec.cjs +63 -0
- package/bin/lib/tradeoff-analyzer.cjs +284 -0
- package/bin/lib/url-fetch.cjs +170 -0
- package/bin/lib/verify.cjs +863 -0
- package/bin/update.js +217 -214
- package/commands/deploy.cjs +53 -0
- package/commands/ez/add-tests.md +41 -41
- package/commands/ez/audit-milestone.md +36 -36
- package/commands/ez/complete-milestone.md +136 -136
- package/commands/ez/discuss-phase.md +90 -90
- package/commands/ez/execute-phase.md +52 -41
- package/commands/ez/help.md +22 -22
- package/commands/ez/map-codebase.md +71 -71
- package/commands/ez/new-milestone.md +44 -44
- package/commands/ez/new-project.md +51 -42
- package/commands/ez/plan-phase.md +53 -45
- package/commands/ez/progress.md +36 -24
- package/commands/ez/quick.md +45 -45
- package/commands/ez/resume-work.md +40 -40
- package/commands/ez/run-phase.md +580 -0
- package/commands/ez/settings.md +36 -36
- package/commands/ez/update.md +37 -37
- package/commands/ez/verify-work.md +402 -38
- package/commands/health-check.cjs +44 -0
- package/commands/rollback.cjs +47 -0
- package/ez-agents/bin/ez-tools.cjs +1692 -716
- package/ez-agents/bin/guards/autonomy-guard.cjs +346 -0
- package/ez-agents/bin/guards/context-budget-guard.cjs +247 -0
- package/ez-agents/bin/guards/hallucination-guard.cjs +271 -0
- package/ez-agents/bin/guards/hidden-state-guard.cjs +182 -0
- package/ez-agents/bin/guards/team-overhead-guard.cjs +266 -0
- package/ez-agents/bin/guards/tool-sprawl-guard.cjs +271 -0
- package/ez-agents/bin/lib/analytics/analytics-collector.cjs +86 -0
- package/ez-agents/bin/lib/analytics/analytics-reporter.cjs +130 -0
- package/ez-agents/bin/lib/analytics/cohort-analyzer.cjs +138 -0
- package/ez-agents/bin/lib/analytics/funnel-analyzer.cjs +147 -0
- package/ez-agents/bin/lib/analytics/nps-tracker.cjs +147 -0
- package/ez-agents/bin/lib/archetype-detector.cjs +289 -0
- package/ez-agents/bin/lib/audit-exec.cjs +166 -167
- package/ez-agents/bin/lib/auth.cjs +176 -176
- package/ez-agents/bin/lib/backup-service.cjs +422 -0
- package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
- package/ez-agents/bin/lib/business-flow-mapper.cjs +429 -0
- package/ez-agents/bin/lib/code-complexity-analyzer.cjs +360 -0
- package/ez-agents/bin/lib/codebase-analyzer.cjs +241 -0
- package/ez-agents/bin/lib/commands.cjs +685 -685
- package/ez-agents/bin/lib/config.cjs +41 -1
- package/ez-agents/bin/lib/constraint-extractor.cjs +526 -0
- package/ez-agents/bin/lib/content-scanner.cjs +238 -0
- package/ez-agents/bin/lib/context-cache.cjs +154 -0
- package/ez-agents/bin/lib/context-errors.cjs +71 -0
- package/ez-agents/bin/lib/context-manager.cjs +220 -0
- package/ez-agents/bin/lib/core.cjs +507 -512
- package/ez-agents/bin/lib/cost-tracker.cjs +243 -0
- package/ez-agents/bin/lib/crash-recovery.cjs +172 -0
- package/ez-agents/bin/lib/dependency-graph.cjs +319 -0
- package/ez-agents/bin/lib/deploy/deploy-audit-log.cjs +76 -0
- package/ez-agents/bin/lib/deploy/deploy-detector.cjs +69 -0
- package/ez-agents/bin/lib/deploy/deploy-env-manager.cjs +109 -0
- package/ez-agents/bin/lib/deploy/deploy-health-check.cjs +88 -0
- package/ez-agents/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
- package/ez-agents/bin/lib/deploy/deploy-rollback.cjs +72 -0
- package/ez-agents/bin/lib/deploy/deploy-runner.cjs +97 -0
- package/ez-agents/bin/lib/deploy/deploy-status.cjs +74 -0
- package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
- package/ez-agents/bin/lib/file-access.cjs +207 -0
- package/ez-agents/bin/lib/finops/budget-enforcer.cjs +126 -0
- package/ez-agents/bin/lib/finops/cost-reporter.cjs +132 -0
- package/ez-agents/bin/lib/finops/finops-analyzer.cjs +112 -0
- package/ez-agents/bin/lib/finops/spot-manager.cjs +118 -0
- package/ez-agents/bin/lib/framework-detector.cjs +396 -0
- package/ez-agents/bin/lib/frontmatter.cjs +3 -1
- package/ez-agents/bin/lib/gates/README.md +374 -0
- package/ez-agents/bin/lib/gates/gate-01-requirement.cjs +303 -0
- package/ez-agents/bin/lib/gates/gate-02-architecture.cjs +555 -0
- package/ez-agents/bin/lib/gates/gate-03-code.cjs +635 -0
- package/ez-agents/bin/lib/gates/gate-04-security.cjs +829 -0
- package/ez-agents/bin/lib/git-errors.cjs +83 -0
- package/ez-agents/bin/lib/git-utils.cjs +118 -0
- package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
- package/ez-agents/bin/lib/health-check.cjs +162 -162
- package/ez-agents/bin/lib/index.cjs +40 -2
- package/ez-agents/bin/lib/init.cjs +0 -2
- package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
- package/ez-agents/bin/lib/log-rotation.cjs +71 -0
- package/ez-agents/bin/lib/logger.cjs +99 -154
- package/ez-agents/bin/lib/memory-compression.cjs +256 -0
- package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
- package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
- package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
- package/ez-agents/bin/lib/perf/api-monitor.cjs +88 -0
- package/ez-agents/bin/lib/perf/db-optimizer.cjs +78 -0
- package/ez-agents/bin/lib/perf/frontend-performance.cjs +56 -0
- package/ez-agents/bin/lib/perf/perf-analyzer.cjs +77 -0
- package/ez-agents/bin/lib/perf/perf-baseline.cjs +102 -0
- package/ez-agents/bin/lib/perf/perf-reporter.cjs +117 -0
- package/ez-agents/bin/lib/perf/regression-detector.cjs +92 -0
- package/ez-agents/bin/lib/project-reporter.cjs +502 -0
- package/ez-agents/bin/lib/quality-gate.cjs +332 -0
- package/ez-agents/bin/lib/recovery-manager.cjs +98 -0
- package/ez-agents/bin/lib/release-validator.cjs +617 -0
- package/ez-agents/bin/lib/safe-exec.cjs +128 -214
- package/ez-agents/bin/lib/security-errors.cjs +62 -0
- package/ez-agents/bin/lib/session-chain.cjs +304 -0
- package/ez-agents/bin/lib/session-errors.cjs +81 -0
- package/ez-agents/bin/lib/session-export.cjs +251 -0
- package/ez-agents/bin/lib/session-import.cjs +262 -0
- package/ez-agents/bin/lib/session-manager.cjs +280 -0
- package/ez-agents/bin/lib/skill-context.cjs +148 -0
- package/ez-agents/bin/lib/skill-matcher.cjs +236 -0
- package/ez-agents/bin/lib/skill-registry.cjs +341 -0
- package/ez-agents/bin/lib/skill-resolver.cjs +449 -0
- package/ez-agents/bin/lib/skill-triggers.cjs +90 -0
- package/ez-agents/bin/lib/skill-validator.cjs +270 -0
- package/ez-agents/bin/lib/skill-versioning.cjs +355 -0
- package/ez-agents/bin/lib/stack-detector.cjs +399 -0
- package/ez-agents/bin/lib/tech-debt-analyzer.cjs +309 -0
- package/ez-agents/bin/lib/tier-manager.cjs +428 -0
- package/ez-agents/bin/lib/tradeoff-analyzer.cjs +284 -0
- package/ez-agents/bin/lib/url-fetch.cjs +170 -0
- package/ez-agents/bin/lib/verify.cjs +863 -863
- package/ez-agents/references/decimal-phase-calculation.md +65 -65
- package/ez-agents/references/git-integration.md +248 -248
- package/ez-agents/references/git-planning-commit.md +38 -38
- package/ez-agents/references/metrics-schema.md +118 -0
- package/ez-agents/references/model-profile-resolution.md +34 -34
- package/ez-agents/references/model-profiles.md +93 -93
- package/ez-agents/references/phase-argument-parsing.md +61 -61
- package/ez-agents/references/planning-config.md +340 -200
- package/ez-agents/references/tier-strategy.md +103 -0
- package/ez-agents/references/ui-brand.md +160 -160
- package/ez-agents/references/verification-patterns.md +612 -612
- package/ez-agents/templates/DEBUG.md +164 -164
- package/ez-agents/templates/UAT.md +247 -247
- package/ez-agents/templates/agent-output-format.md +404 -0
- package/ez-agents/templates/bdd-feature.md +173 -0
- package/ez-agents/templates/codebase/architecture.md +255 -255
- package/ez-agents/templates/codebase/structure.md +285 -285
- package/ez-agents/templates/copilot-instructions.md +7 -7
- package/ez-agents/templates/debug-subagent-prompt.md +91 -91
- package/ez-agents/templates/discovery.md +146 -146
- package/ez-agents/templates/discussion.md +68 -0
- package/ez-agents/templates/handoff-protocol.md +294 -0
- package/ez-agents/templates/incident-runbook.md +205 -0
- package/ez-agents/templates/mode-workflow-templates.md +301 -0
- package/ez-agents/templates/phase-prompt.md +610 -610
- package/ez-agents/templates/planner-subagent-prompt.md +117 -117
- package/ez-agents/templates/project.md +184 -184
- package/ez-agents/templates/release-checklist.md +136 -0
- package/ez-agents/templates/research.md +552 -552
- package/ez-agents/templates/rollback-plan.md +201 -0
- package/ez-agents/templates/security-user-setup.md +244 -0
- package/ez-agents/templates/skill-validation-rules.md +476 -0
- package/ez-agents/templates/state.md +180 -176
- package/ez-agents/templates/summary-complex.md +59 -59
- package/ez-agents/tests/gates/gate-01-02.test.cjs +812 -0
- package/ez-agents/tests/gates/gate-03-04.test.cjs +762 -0
- package/ez-agents/tests/gates/gate-05-validator.test.cjs +145 -0
- package/ez-agents/tests/gates/gate-06-docs-validator.test.cjs +244 -0
- package/ez-agents/tests/gates/gate-07-release-validator.test.cjs +219 -0
- package/ez-agents/tests/guards/context-budget-guard.test.cjs +145 -0
- package/ez-agents/tests/guards/edge-case-guards.test.cjs +238 -0
- package/ez-agents/tests/guards/hallucination-guard.test.cjs +124 -0
- package/ez-agents/workflows/audit-milestone.md +1 -1
- package/ez-agents/workflows/autonomous.md +131 -30
- package/ez-agents/workflows/complete-milestone.md +1 -1
- package/ez-agents/workflows/discuss-phase.md +1 -1
- package/ez-agents/workflows/execute-phase.md +169 -3
- package/ez-agents/workflows/help.md +86 -133
- package/ez-agents/workflows/hotfix.md +291 -0
- package/ez-agents/workflows/new-milestone.md +340 -11
- package/ez-agents/workflows/new-project.md +294 -318
- package/ez-agents/workflows/plan-phase.md +22 -40
- package/ez-agents/workflows/progress.md +15 -25
- package/ez-agents/workflows/release.md +253 -0
- package/ez-agents/workflows/resume-session.md +215 -0
- package/ez-agents/workflows/run-phase.md +531 -0
- package/ez-agents/workflows/settings.md +2 -35
- package/hooks/dist/ez-check-update.js +81 -81
- package/hooks/dist/ez-context-monitor.js +148 -141
- package/hooks/dist/ez-statusline.js +115 -115
- package/package.json +78 -64
- package/scripts/fix-qwen-installation.js +144 -144
- package/agents/ez-integration-checker.md +0 -443
- package/agents/ez-nyquist-auditor.md +0 -176
- package/agents/ez-plan-checker.md +0 -706
- package/agents/ez-research-synthesizer.md +0 -247
- package/agents/ez-ui-auditor.md +0 -439
- package/agents/ez-ui-checker.md +0 -300
- package/agents/ez-ui-researcher.md +0 -353
- package/commands/ez/add-phase.md +0 -43
- package/commands/ez/add-todo.md +0 -47
- package/commands/ez/auth.md +0 -87
- package/commands/ez/autonomous.md +0 -41
- package/commands/ez/check-todos.md +0 -45
- package/commands/ez/cleanup.md +0 -18
- package/commands/ez/debug.md +0 -168
- package/commands/ez/health.md +0 -22
- package/commands/ez/insert-phase.md +0 -32
- package/commands/ez/join-discord.md +0 -18
- package/commands/ez/list-phase-assumptions.md +0 -46
- package/commands/ez/pause-work.md +0 -38
- package/commands/ez/plan-milestone-gaps.md +0 -34
- package/commands/ez/reapply-patches.md +0 -124
- package/commands/ez/remove-phase.md +0 -31
- package/commands/ez/research-phase.md +0 -190
- package/commands/ez/set-profile.md +0 -34
- package/commands/ez/stats.md +0 -18
- package/commands/ez/ui-phase.md +0 -34
- package/commands/ez/ui-review.md +0 -32
- package/commands/ez/validate-phase.md +0 -35
- package/ez-agents/templates/UI-SPEC.md +0 -100
- package/ez-agents/templates/VALIDATION.md +0 -76
- package/ez-agents/templates/context.md +0 -352
- package/ez-agents/templates/verification-report.md +0 -322
- package/ez-agents/workflows/research-phase.md +0 -74
- package/ez-agents/workflows/ui-phase.md +0 -290
- package/ez-agents/workflows/ui-review.md +0 -157
- package/ez-agents/workflows/validate-phase.md +0 -167
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
# Agent Output Format Template
|
|
2
|
+
|
|
3
|
+
**Version:** 1.0
|
|
4
|
+
**Phase:** 39
|
|
5
|
+
**Requirement:** POOL-02
|
|
6
|
+
|
|
7
|
+
All specialist agents must produce output following this standardized format to ensure consistency, enable cross-agent understanding, and provide audit trails for decisions made during execution.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Required Sections
|
|
12
|
+
|
|
13
|
+
Every agent output must include these 5 sections:
|
|
14
|
+
|
|
15
|
+
1. **Decision Log** — All architectural and implementation decisions with rationale
|
|
16
|
+
2. **Trade-off Analysis** — Options considered, pros/cons, why chosen option selected
|
|
17
|
+
3. **Artifacts Produced** — Files created/modified with purpose
|
|
18
|
+
4. **Skills Applied** — Which skills guided the work
|
|
19
|
+
5. **Verification Status** — Self-check results before handoff
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Section 1: Decision Log
|
|
24
|
+
|
|
25
|
+
### Purpose
|
|
26
|
+
|
|
27
|
+
Document all significant decisions made during task execution with full context and rationale.
|
|
28
|
+
|
|
29
|
+
### Format
|
|
30
|
+
|
|
31
|
+
```markdown
|
|
32
|
+
## Decisions Made
|
|
33
|
+
|
|
34
|
+
### Decision {N}: [Decision Name]
|
|
35
|
+
|
|
36
|
+
**Context:** [Situation requiring decision]
|
|
37
|
+
|
|
38
|
+
**Options Considered:**
|
|
39
|
+
1. [Option A]
|
|
40
|
+
2. [Option B]
|
|
41
|
+
3. [Option C]
|
|
42
|
+
|
|
43
|
+
**Decision:** [Chosen option]
|
|
44
|
+
|
|
45
|
+
**Rationale:**
|
|
46
|
+
- [Reason 1]
|
|
47
|
+
- [Reason 2]
|
|
48
|
+
- [Reason 3]
|
|
49
|
+
|
|
50
|
+
**Trade-offs:**
|
|
51
|
+
- ✅ Pros: [Advantages]
|
|
52
|
+
- ❌ Cons: [Disadvantages]
|
|
53
|
+
|
|
54
|
+
**Skills Applied:** `[skill_id_1]`, `[skill_id_2]`
|
|
55
|
+
|
|
56
|
+
**Impact:** [What this decision affects]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Required Fields
|
|
60
|
+
|
|
61
|
+
| Field | Required | Description |
|
|
62
|
+
|-------|----------|-------------|
|
|
63
|
+
| Context | Yes | Situation requiring decision |
|
|
64
|
+
| Options Considered | Yes | At least 2-3 options evaluated |
|
|
65
|
+
| Decision | Yes | Clear statement of chosen option |
|
|
66
|
+
| Rationale | Yes | Why this option was selected |
|
|
67
|
+
| Trade-offs | Yes | Pros and cons |
|
|
68
|
+
| Skills Applied | Yes | Skill IDs that guided decision |
|
|
69
|
+
| Impact | Yes | What this decision affects |
|
|
70
|
+
|
|
71
|
+
### Example
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
## Decisions Made
|
|
75
|
+
|
|
76
|
+
### Decision 1: JWT-based Authentication
|
|
77
|
+
|
|
78
|
+
**Context:** User authentication for SaaS platform requiring stateless API access
|
|
79
|
+
|
|
80
|
+
**Options Considered:**
|
|
81
|
+
1. JWT-based authentication with refresh rotation
|
|
82
|
+
2. Session-based authentication with Redis store
|
|
83
|
+
3. OAuth2 with external provider (Auth0, Okta)
|
|
84
|
+
|
|
85
|
+
**Decision:** JWT-based authentication with refresh rotation
|
|
86
|
+
|
|
87
|
+
**Rationale:**
|
|
88
|
+
- Stateless design matches microservices architecture
|
|
89
|
+
- Easier horizontal scaling for SaaS multi-tenant
|
|
90
|
+
- Mobile-friendly (no cookie dependencies)
|
|
91
|
+
- Full control over auth logic (vs external provider)
|
|
92
|
+
|
|
93
|
+
**Trade-offs:**
|
|
94
|
+
- ✅ Pros: Scalable, industry standard, mobile-friendly, full control
|
|
95
|
+
- ❌ Cons: Token revocation complexity, larger payload, storage for blacklist
|
|
96
|
+
|
|
97
|
+
**Skills Applied:** `authentication_jwt_skill_v1`, `security_architecture_skill_v1`, `saas_multi_tenant_skill_v1`
|
|
98
|
+
|
|
99
|
+
**Impact:** All API endpoints will require JWT validation middleware, refresh token rotation endpoint needed
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Section 2: Trade-off Analysis
|
|
105
|
+
|
|
106
|
+
### Purpose
|
|
107
|
+
|
|
108
|
+
Provide detailed comparison of options considered for significant decisions, enabling future agents to understand why specific approaches were chosen.
|
|
109
|
+
|
|
110
|
+
### Format
|
|
111
|
+
|
|
112
|
+
```markdown
|
|
113
|
+
## Trade-off Analysis
|
|
114
|
+
|
|
115
|
+
**Decision Point:** [Brief description of decision]
|
|
116
|
+
|
|
117
|
+
| Option | Pros | Cons | Best For |
|
|
118
|
+
|--------|------|------|----------|
|
|
119
|
+
| [Option A] | - [Pro 1]<br>- [Pro 2] | - [Con 1]<br>- [Con 2] | [Use case] |
|
|
120
|
+
| [Option B] | - [Pro 1]<br>- [Pro 2] | - [Con 1]<br>- [Con 2] | [Use case] |
|
|
121
|
+
| [Option C] | - [Pro 1]<br>- [Pro 2] | - [Con 1]<br>- [Con 2] | [Use case] |
|
|
122
|
+
|
|
123
|
+
**Recommendation:** [Option X]
|
|
124
|
+
|
|
125
|
+
**Why:** [Detailed explanation of why this option was chosen]
|
|
126
|
+
|
|
127
|
+
**Confidence:** [High | Medium | Low] ([context for confidence level])
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Example
|
|
131
|
+
|
|
132
|
+
```markdown
|
|
133
|
+
## Trade-off Analysis
|
|
134
|
+
|
|
135
|
+
**Decision Point:** Database selection for analytics module
|
|
136
|
+
|
|
137
|
+
| Option | Pros | Cons | Best For |
|
|
138
|
+
|--------|------|------|----------|
|
|
139
|
+
| PostgreSQL | - ACID compliance<br>- Complex queries<br>- Mature ecosystem | - Slower for time-series<br>- Vertical scaling limits | Transactional data |
|
|
140
|
+
| TimescaleDB | - Optimized for time-series<br>- PostgreSQL compatible<br>- Automatic partitioning | - Newer, smaller community<br>- Additional complexity | Time-series analytics |
|
|
141
|
+
| ClickHouse | - Extremely fast analytics<br>- Column-oriented<br>- Compression | - Limited transactional support<br>- Steep learning curve | Pure analytics |
|
|
142
|
+
|
|
143
|
+
**Recommendation:** TimescaleDB
|
|
144
|
+
|
|
145
|
+
**Why:** Matches requirement for time-series analytics while maintaining PostgreSQL compatibility for existing data. Team already has PostgreSQL expertise, reducing learning curve.
|
|
146
|
+
|
|
147
|
+
**Confidence:** High (used in 3 similar SaaS projects with positive results)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Section 3: Artifacts Produced
|
|
153
|
+
|
|
154
|
+
### Purpose
|
|
155
|
+
|
|
156
|
+
List all files created or modified during task execution with their purpose and skill alignment.
|
|
157
|
+
|
|
158
|
+
### Format
|
|
159
|
+
|
|
160
|
+
```markdown
|
|
161
|
+
## Artifacts Produced
|
|
162
|
+
|
|
163
|
+
### Files Created
|
|
164
|
+
| File | Purpose | Skill Alignment |
|
|
165
|
+
|------|---------|-----------------|
|
|
166
|
+
| `[file_path]` | [Purpose] | `[skill_id]` |
|
|
167
|
+
|
|
168
|
+
### Files Modified
|
|
169
|
+
| File | Changes | Reason |
|
|
170
|
+
|------|---------|--------|
|
|
171
|
+
| `[file_path]` | [Description of changes] | [Reason] |
|
|
172
|
+
|
|
173
|
+
### Documentation
|
|
174
|
+
- `[doc_name]` — [Description]
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Example
|
|
178
|
+
|
|
179
|
+
```markdown
|
|
180
|
+
## Artifacts Produced
|
|
181
|
+
|
|
182
|
+
### Files Created
|
|
183
|
+
| File | Purpose | Skill Alignment |
|
|
184
|
+
|------|---------|-----------------|
|
|
185
|
+
| `src/api/auth.ts` | JWT authentication endpoints | `api_design_rest_skill_v1` |
|
|
186
|
+
| `src/middleware/auth.ts` | Auth middleware for protected routes | `security_auth_best_practices_v1` |
|
|
187
|
+
| `src/models/user.ts` | User model with password hashing | `laravel_11_structure_skill_v2` |
|
|
188
|
+
| `src/services/token.service.ts` | Token generation and validation | `authentication_jwt_skill_v1` |
|
|
189
|
+
| `tests/unit/auth.test.ts` | Unit tests for auth flow | `testing_unit_phpunit_skill_v1` |
|
|
190
|
+
|
|
191
|
+
### Files Modified
|
|
192
|
+
| File | Changes | Reason |
|
|
193
|
+
|------|---------|--------|
|
|
194
|
+
| `src/config/database.ts` | Added TimescaleDB connection config | Analytics module requirement |
|
|
195
|
+
| `.env.example` | Added `TIMESCALE_DB_URL` variable | New environment variable |
|
|
196
|
+
| `package.json` | Added `jsonwebtoken`, `bcrypt` dependencies | Authentication implementation |
|
|
197
|
+
|
|
198
|
+
### Documentation
|
|
199
|
+
- `API-AUTH.md` — Authentication API documentation
|
|
200
|
+
- `DECISIONS.md#auth-strategy` — Decision record for auth approach
|
|
201
|
+
- `ADRs/001-jwt-authentication.md` — Architecture Decision Record
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Section 4: Skills Applied
|
|
207
|
+
|
|
208
|
+
### Purpose
|
|
209
|
+
|
|
210
|
+
Document which skills guided the work, enabling skill memory tracking and consistency verification.
|
|
211
|
+
|
|
212
|
+
### Format
|
|
213
|
+
|
|
214
|
+
```markdown
|
|
215
|
+
## Skills Applied
|
|
216
|
+
|
|
217
|
+
**Total Skills Activated:** {N} (must be 3-7 per task)
|
|
218
|
+
|
|
219
|
+
### Skill Breakdown
|
|
220
|
+
|
|
221
|
+
| Category | Skills | Count |
|
|
222
|
+
|----------|--------|-------|
|
|
223
|
+
| Stack | `[skill_1]`, `[skill_2]` | {N} |
|
|
224
|
+
| Architecture | `[skill_3]`, `[skill_4]` | {N} |
|
|
225
|
+
| Domain | `[skill_5]` | {N} |
|
|
226
|
+
| Operational | `[skill_6]` | {N} |
|
|
227
|
+
| Governance | `[skill_7]` | {N} |
|
|
228
|
+
|
|
229
|
+
### Skill Rationale
|
|
230
|
+
|
|
231
|
+
- **`[skill_1]`:** [Why this skill was activated]
|
|
232
|
+
- **`[skill_2]`:** [Why this skill was activated]
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Example
|
|
236
|
+
|
|
237
|
+
```markdown
|
|
238
|
+
## Skills Applied
|
|
239
|
+
|
|
240
|
+
**Total Skills Activated:** 5
|
|
241
|
+
|
|
242
|
+
### Skill Breakdown
|
|
243
|
+
|
|
244
|
+
| Category | Skills | Count |
|
|
245
|
+
|----------|--------|-------|
|
|
246
|
+
| Stack | `laravel_11_structure_skill_v2` | 1 |
|
|
247
|
+
| Architecture | `repository_pattern_skill_v1`, `api_versioning_skill_v1` | 2 |
|
|
248
|
+
| Domain | `ecommerce_product_catalog_skill_v1` | 1 |
|
|
249
|
+
| Operational | `testing_integration_phpunit_skill_v1` | 1 |
|
|
250
|
+
| Governance | `api_rate_limiting_skill_v1` | 0 |
|
|
251
|
+
|
|
252
|
+
### Skill Rationale
|
|
253
|
+
|
|
254
|
+
- **`laravel_11_structure_skill_v2`:** Stack skill for Laravel 11 framework patterns
|
|
255
|
+
- **`repository_pattern_skill_v1`:** Clean separation between business logic and data access
|
|
256
|
+
- **`api_versioning_skill_v1`:** API needs versioning for backward compatibility
|
|
257
|
+
- **`ecommerce_product_catalog_skill_v1`:** Domain skill for product catalog patterns
|
|
258
|
+
- **`testing_integration_phpunit_skill_v1`:** Integration testing for API endpoints
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Section 5: Verification Status
|
|
264
|
+
|
|
265
|
+
### Purpose
|
|
266
|
+
|
|
267
|
+
Self-check results before handoff to ensure quality and completeness.
|
|
268
|
+
|
|
269
|
+
### Format
|
|
270
|
+
|
|
271
|
+
```markdown
|
|
272
|
+
## Verification Status
|
|
273
|
+
|
|
274
|
+
### Self-Check Results
|
|
275
|
+
|
|
276
|
+
- [ ] Output matches standardized format
|
|
277
|
+
- [ ] Decision log is complete with all required fields
|
|
278
|
+
- [ ] Trade-off analysis includes comparison table
|
|
279
|
+
- [ ] Artifacts section lists all created/modified files
|
|
280
|
+
- [ ] Skills applied section documents 3-7 skills
|
|
281
|
+
- [ ] Skills alignment verified
|
|
282
|
+
- [ ] Skill consistency validation passed
|
|
283
|
+
- [ ] Ready for handoff to {next_agent}
|
|
284
|
+
|
|
285
|
+
### Quality Gates
|
|
286
|
+
|
|
287
|
+
| Gate | Status | Notes |
|
|
288
|
+
|------|--------|-------|
|
|
289
|
+
| Requirement Completeness | ✅ PASS | All requirements addressed |
|
|
290
|
+
| Architecture Review | ✅ PASS | Follows architectural patterns |
|
|
291
|
+
| Code Quality | ✅ PASS | Linting and formatting pass |
|
|
292
|
+
| Security Baseline | ✅ PASS | No security issues detected |
|
|
293
|
+
| Testing | ✅ PASS | Tests passing with {N}% coverage |
|
|
294
|
+
| Documentation | ✅ PASS | All sections complete |
|
|
295
|
+
| Performance | ✅ PASS | Within performance budget |
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Example
|
|
299
|
+
|
|
300
|
+
```markdown
|
|
301
|
+
## Verification Status
|
|
302
|
+
|
|
303
|
+
### Self-Check Results
|
|
304
|
+
|
|
305
|
+
- [x] Output matches standardized format
|
|
306
|
+
- [x] Decision log is complete with all required fields
|
|
307
|
+
- [x] Trade-off analysis includes comparison table
|
|
308
|
+
- [x] Artifacts section lists all created/modified files
|
|
309
|
+
- [x] Skills applied section documents 5 skills (within 3-7 limit)
|
|
310
|
+
- [x] Skills alignment verified
|
|
311
|
+
- [x] Skill consistency validation passed
|
|
312
|
+
- [x] Ready for handoff to Backend Agent
|
|
313
|
+
|
|
314
|
+
### Quality Gates
|
|
315
|
+
|
|
316
|
+
| Gate | Status | Notes |
|
|
317
|
+
|------|--------|-------|
|
|
318
|
+
| Requirement Completeness | ✅ PASS | All auth requirements addressed |
|
|
319
|
+
| Architecture Review | ✅ PASS | Follows modular monolith patterns |
|
|
320
|
+
| Code Quality | ✅ PASS | ESLint pass, no errors |
|
|
321
|
+
| Security Baseline | ✅ PASS | Password hashing, rate limiting implemented |
|
|
322
|
+
| Testing | ✅ PASS | 87% coverage, all tests passing |
|
|
323
|
+
| Documentation | ✅ PASS | All sections complete |
|
|
324
|
+
| Performance | ✅ PASS | JWT validation < 10ms |
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Agent Return Format
|
|
330
|
+
|
|
331
|
+
At task completion, agents return this structured format:
|
|
332
|
+
|
|
333
|
+
```markdown
|
|
334
|
+
## AGENT COMPLETE
|
|
335
|
+
|
|
336
|
+
**Agent:** {agent-name}
|
|
337
|
+
**Task:** {task-description}
|
|
338
|
+
**Phase:** {phase-number}
|
|
339
|
+
**Duration:** {time-spent}
|
|
340
|
+
|
|
341
|
+
### Skills Activated
|
|
342
|
+
- {skill-1}
|
|
343
|
+
- {skill-2}
|
|
344
|
+
- {skill-3}
|
|
345
|
+
|
|
346
|
+
### Decisions Made
|
|
347
|
+
{N} decisions documented in DECISIONS.md
|
|
348
|
+
|
|
349
|
+
### Artifacts
|
|
350
|
+
- {N} files created
|
|
351
|
+
- {M} files modified
|
|
352
|
+
|
|
353
|
+
### Verification
|
|
354
|
+
- [ ] Self-check passed
|
|
355
|
+
- [ ] Skills alignment verified
|
|
356
|
+
- [ ] Decision log complete
|
|
357
|
+
|
|
358
|
+
### Handoff Notes
|
|
359
|
+
{Context for next agent if task continues}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## Validation Rules
|
|
365
|
+
|
|
366
|
+
The output validator (`bin/lib/output-validator.cjs`) checks:
|
|
367
|
+
|
|
368
|
+
### Required Sections (Error if missing)
|
|
369
|
+
- Decision Log
|
|
370
|
+
- Trade-off Analysis
|
|
371
|
+
- Artifacts Produced
|
|
372
|
+
- Skills Applied
|
|
373
|
+
- Verification Status
|
|
374
|
+
|
|
375
|
+
### Field Requirements (Warning if incomplete)
|
|
376
|
+
- Decision Log: At least 1 decision with all required fields
|
|
377
|
+
- Trade-off Analysis: Comparison table with at least 2 options
|
|
378
|
+
- Artifacts: At least 1 file listed (created or modified)
|
|
379
|
+
- Skills: 3-7 skills documented
|
|
380
|
+
- Verification: All checkboxes evaluated
|
|
381
|
+
|
|
382
|
+
### Severity Levels
|
|
383
|
+
- **error** — Missing required section (blocks handoff)
|
|
384
|
+
- **warning** — Incomplete section (logged, allows handoff)
|
|
385
|
+
- **info** — Suggestions for improvement
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## Integration with Agents
|
|
390
|
+
|
|
391
|
+
Each specialist agent integrates this format by:
|
|
392
|
+
|
|
393
|
+
1. **Referencing this template** in their `<output_format>` section
|
|
394
|
+
2. **Including domain-specific examples** relevant to their responsibilities
|
|
395
|
+
3. **Defining agent-specific artifacts** they typically produce
|
|
396
|
+
4. **Following the agent return format** at task completion
|
|
397
|
+
|
|
398
|
+
See individual agent files for their specific integrations:
|
|
399
|
+
- `agents/ez-architect-agent.md`
|
|
400
|
+
- `agents/ez-backend-agent.md`
|
|
401
|
+
- `agents/ez-frontend-agent.md`
|
|
402
|
+
- `agents/ez-qa-agent.md`
|
|
403
|
+
- `agents/ez-devops-agent.md`
|
|
404
|
+
- `agents/ez-context-manager.md`
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# BDD Feature File Template
|
|
2
|
+
|
|
3
|
+
Use this template when creating `.feature` files for a phase.
|
|
4
|
+
|
|
5
|
+
Replace `{placeholders}` with actual content.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
```gherkin
|
|
10
|
+
# specs/features/{domain}/{feature-name}.feature
|
|
11
|
+
#
|
|
12
|
+
# Feature: {feature-name}
|
|
13
|
+
# Phase: {phase-number} — {phase-name}
|
|
14
|
+
# MoSCoW: @must | @should | @could | @wont
|
|
15
|
+
# Tier: @mvp | @medium | @enterprise
|
|
16
|
+
#
|
|
17
|
+
# Requirements: {REQ-IDs this feature satisfies}
|
|
18
|
+
|
|
19
|
+
Feature: {Feature Name}
|
|
20
|
+
As a {user role}
|
|
21
|
+
I want to {action/capability}
|
|
22
|
+
So that {benefit/value delivered}
|
|
23
|
+
|
|
24
|
+
# Background sets up shared preconditions for all scenarios in this Feature.
|
|
25
|
+
# Remove if no shared setup needed.
|
|
26
|
+
Background:
|
|
27
|
+
Given {shared precondition 1}
|
|
28
|
+
And {shared precondition 2}
|
|
29
|
+
|
|
30
|
+
# ─────────────────────────────────────────────
|
|
31
|
+
# MUST — Required for MVP (phase gate)
|
|
32
|
+
# ─────────────────────────────────────────────
|
|
33
|
+
|
|
34
|
+
@must @mvp
|
|
35
|
+
Scenario: {Happy path — primary success case}
|
|
36
|
+
Given {initial context / system state}
|
|
37
|
+
When {user performs action}
|
|
38
|
+
Then {expected outcome}
|
|
39
|
+
And {additional assertion}
|
|
40
|
+
|
|
41
|
+
@must @mvp
|
|
42
|
+
Scenario: {Primary error case}
|
|
43
|
+
Given {initial context}
|
|
44
|
+
When {user performs invalid action}
|
|
45
|
+
Then {expected error response}
|
|
46
|
+
And {system remains in valid state}
|
|
47
|
+
|
|
48
|
+
# ─────────────────────────────────────────────
|
|
49
|
+
# SHOULD — Target for medium tier release
|
|
50
|
+
# ─────────────────────────────────────────────
|
|
51
|
+
|
|
52
|
+
@should @medium
|
|
53
|
+
Scenario: {Secondary success case or edge case}
|
|
54
|
+
Given {context}
|
|
55
|
+
When {action}
|
|
56
|
+
Then {outcome}
|
|
57
|
+
|
|
58
|
+
@should @medium
|
|
59
|
+
Scenario: {Error recovery or retry flow}
|
|
60
|
+
Given {context where partial failure occurred}
|
|
61
|
+
When {user attempts recovery}
|
|
62
|
+
Then {system handles gracefully}
|
|
63
|
+
|
|
64
|
+
# ─────────────────────────────────────────────
|
|
65
|
+
# COULD — Nice-to-have for enterprise tier
|
|
66
|
+
# ─────────────────────────────────────────────
|
|
67
|
+
|
|
68
|
+
@could @enterprise
|
|
69
|
+
Scenario: {Advanced or compliance feature}
|
|
70
|
+
Given {enterprise context}
|
|
71
|
+
When {action}
|
|
72
|
+
Then {enterprise-specific outcome}
|
|
73
|
+
|
|
74
|
+
# ─────────────────────────────────────────────
|
|
75
|
+
# WONT — Explicitly deferred (document reasons)
|
|
76
|
+
# ─────────────────────────────────────────────
|
|
77
|
+
# @wont — SSO integration: deferred to Phase XX, depends on identity provider decision
|
|
78
|
+
# @wont — Biometric auth: deferred — mobile-only feature, out of scope for web
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Scenario Writing Guide
|
|
84
|
+
|
|
85
|
+
### Given (Precondition)
|
|
86
|
+
Sets up the world before the action. Should be:
|
|
87
|
+
- Specific: "Given a user exists with email test@example.com" not "Given a user exists"
|
|
88
|
+
- Minimal: Only include context relevant to this scenario
|
|
89
|
+
- Reusable: Use Background for context shared by all scenarios
|
|
90
|
+
|
|
91
|
+
```gherkin
|
|
92
|
+
# Good
|
|
93
|
+
Given a registered user with email "alice@example.com" exists
|
|
94
|
+
And the user's account is in "active" status
|
|
95
|
+
|
|
96
|
+
# Bad (too vague)
|
|
97
|
+
Given there is a user
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### When (Action)
|
|
101
|
+
The single event being tested. Rules:
|
|
102
|
+
- One action per scenario (split if multiple)
|
|
103
|
+
- Active voice: "When I submit the form" not "When the form is submitted"
|
|
104
|
+
- From user's perspective
|
|
105
|
+
|
|
106
|
+
```gherkin
|
|
107
|
+
# Good
|
|
108
|
+
When I submit the login form with email "alice@example.com" and password "secret123"
|
|
109
|
+
|
|
110
|
+
# Bad (multiple actions)
|
|
111
|
+
When I fill in the form and click submit and wait for response
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Then (Outcome)
|
|
115
|
+
Observable, verifiable result. Must be:
|
|
116
|
+
- Testable: Can be automated
|
|
117
|
+
- Specific: Exact values, not "something happens"
|
|
118
|
+
- From user's perspective
|
|
119
|
+
|
|
120
|
+
```gherkin
|
|
121
|
+
# Good
|
|
122
|
+
Then I am redirected to "/dashboard"
|
|
123
|
+
And the page title contains "Welcome, Alice"
|
|
124
|
+
And a session cookie named "ez_session" is present
|
|
125
|
+
|
|
126
|
+
# Bad (subjective)
|
|
127
|
+
Then it works correctly
|
|
128
|
+
And the user is happy
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### And / But
|
|
132
|
+
- `And` — continues the clause type (Given+And, When+And, Then+And)
|
|
133
|
+
- `But` — negative assertion ("But I should not see...")
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## MoSCoW Quick Reference
|
|
138
|
+
|
|
139
|
+
| Tag | When to Use | Tier |
|
|
140
|
+
|-----|-------------|------|
|
|
141
|
+
| `@must` | System is broken/unusable without it | `@mvp` |
|
|
142
|
+
| `@should` | Important but workaround exists | `@medium` |
|
|
143
|
+
| `@could` | Enhances experience but not critical | `@enterprise` |
|
|
144
|
+
| `@wont` | Explicitly out of scope (document why) | — |
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## File Naming Convention
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
specs/
|
|
152
|
+
features/
|
|
153
|
+
{domain}/
|
|
154
|
+
{feature-name}.feature # e.g., auth/login.feature
|
|
155
|
+
{feature-name}.feature # e.g., auth/registration.feature
|
|
156
|
+
{domain2}/
|
|
157
|
+
{feature-name}.feature
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Domain examples: `auth`, `payments`, `dashboard`, `onboarding`, `settings`, `api`
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## INVEST Checklist
|
|
165
|
+
|
|
166
|
+
Before finalizing a Feature, verify all scenarios as a group:
|
|
167
|
+
|
|
168
|
+
- [ ] **Independent**: Feature can be developed without dependency on other features in this file
|
|
169
|
+
- [ ] **Negotiable**: Implementation details (not described in Then) are flexible
|
|
170
|
+
- [ ] **Valuable**: The Feature statement explains clear user value
|
|
171
|
+
- [ ] **Estimable**: A developer can estimate effort from these scenarios
|
|
172
|
+
- [ ] **Small**: All @must scenarios fit in one phase (split if more than ~8 must scenarios)
|
|
173
|
+
- [ ] **Testable**: Every Then clause can be automated
|