@cregis-dev/cckit 0.3.0 → 0.4.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 -21
- package/README.md +89 -85
- package/bin/cckit.js +3 -3
- package/package.json +7 -5
- package/registry.json +43 -9
- package/src/adapters/trae-adapter.js +90 -90
- package/src/cli.js +2 -2
- package/src/commands/init.js +337 -333
- package/src/commands/status.js +62 -62
- package/src/commands/sync.js +325 -325
- package/src/commands/update.js +430 -425
- package/src/core/config.js +82 -82
- package/src/core/differ.js +57 -57
- package/src/core/installer.js +97 -97
- package/src/core/plugin-installer.js +278 -232
- package/src/core/registry.js +75 -75
- package/src/core/templatize.js +42 -42
- package/src/core/upstream.js +357 -357
- package/src/utils/fs.js +55 -50
- package/src/utils/logger.js +16 -16
- package/templates/bmad/_config/agent-manifest.csv +12 -12
- package/templates/bmad/_config/agents/bmm-analyst.customize.yaml +41 -41
- package/templates/bmad/_config/agents/bmm-architect.customize.yaml +41 -41
- package/templates/bmad/_config/agents/bmm-dev.customize.yaml +41 -41
- package/templates/bmad/_config/agents/bmm-pm.customize.yaml +41 -41
- package/templates/bmad/_config/agents/bmm-qa.customize.yaml +41 -41
- package/templates/bmad/_config/agents/bmm-quick-flow-solo-dev.customize.yaml +41 -41
- package/templates/bmad/_config/agents/bmm-sm.customize.yaml +41 -41
- package/templates/bmad/_config/agents/bmm-tech-writer.customize.yaml +41 -41
- package/templates/bmad/_config/agents/bmm-ux-designer.customize.yaml +41 -41
- package/templates/bmad/_config/agents/core-bmad-master.customize.yaml +41 -41
- package/templates/bmad/_config/agents/tea-tea.customize.yaml +41 -41
- package/templates/bmad/_config/bmad-help.csv +48 -47
- package/templates/bmad/_config/files-manifest.csv +118 -112
- package/templates/bmad/_config/ides/claude-code.yaml +2 -2
- package/templates/bmad/_config/ides/opencode.yaml +5 -5
- package/templates/bmad/_config/ides/trae.yaml +2 -2
- package/templates/bmad/_config/task-manifest.csv +8 -7
- package/templates/bmad/_config/tool-manifest.csv +1 -1
- package/templates/bmad/_config/workflow-manifest.csv +35 -35
- package/templates/bmad/bmm/agents/analyst.md +78 -78
- package/templates/bmad/bmm/agents/architect.md +58 -58
- package/templates/bmad/bmm/agents/dev.md +69 -69
- package/templates/bmad/bmm/agents/pm.md +72 -72
- package/templates/bmad/bmm/agents/qa.md +92 -92
- package/templates/bmad/bmm/agents/quick-flow-solo-dev.md +69 -69
- package/templates/bmad/bmm/agents/sm.md +70 -70
- package/templates/bmad/bmm/agents/tech-writer/tech-writer.md +70 -70
- package/templates/bmad/bmm/agents/ux-designer.md +57 -57
- package/templates/bmad/bmm/config.yaml +15 -15
- package/templates/bmad/bmm/data/project-context-template.md +26 -26
- package/templates/bmad/bmm/module-help.csv +31 -31
- package/templates/bmad/bmm/teams/default-party.csv +20 -20
- package/templates/bmad/bmm/teams/team-fullstack.yaml +12 -12
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -10
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -177
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -161
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -199
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -202
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -205
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -219
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -162
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -57
- package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -137
- package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -229
- package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -238
- package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -206
- package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -234
- package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +444 -444
- package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -182
- package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -237
- package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -249
- package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -259
- package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -177
- package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +476 -476
- package/templates/bmad/bmm/workflows/1-analysis/research/research.template.md +29 -29
- package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -137
- package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -239
- package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -248
- package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -202
- package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -233
- package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +487 -487
- package/templates/bmad/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -54
- package/templates/bmad/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -54
- package/templates/bmad/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -54
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +14 -14
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -197
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +10 -10
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -191
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +152 -152
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -224
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -154
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -170
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -226
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -213
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -207
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -226
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -237
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -228
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -231
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -242
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -217
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -124
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -247
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -208
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -249
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -253
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -168
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -226
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -191
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -209
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -174
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -214
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -228
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -217
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -205
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -243
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -263
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -209
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -264
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -242
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -231
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -10
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -63
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -65
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -63
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -135
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -127
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -190
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -216
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -219
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -234
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -252
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -254
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -224
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -224
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -241
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -248
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -237
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -264
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -171
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -13
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -42
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -184
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -172
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -173
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -133
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -245
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -129
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -4
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -54
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -12
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +12 -12
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +6 -6
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -153
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +173 -173
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -224
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +329 -329
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -318
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -359
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -379
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -359
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -76
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -49
- package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -259
- package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -233
- package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -272
- package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -149
- package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -57
- package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -58
- package/templates/bmad/bmm/workflows/4-implementation/code-review/checklist.md +23 -23
- package/templates/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +226 -226
- package/templates/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -43
- package/templates/bmad/bmm/workflows/4-implementation/correct-course/checklist.md +288 -288
- package/templates/bmad/bmm/workflows/4-implementation/correct-course/instructions.md +207 -207
- package/templates/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -53
- package/templates/bmad/bmm/workflows/4-implementation/create-story/checklist.md +358 -358
- package/templates/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +346 -346
- package/templates/bmad/bmm/workflows/4-implementation/create-story/template.md +49 -49
- package/templates/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -52
- package/templates/bmad/bmm/workflows/4-implementation/dev-story/checklist.md +80 -80
- package/templates/bmad/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -410
- package/templates/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -20
- package/templates/bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -1444
- package/templates/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -52
- package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -33
- package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -226
- package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -55
- package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -47
- package/templates/bmad/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -230
- package/templates/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -25
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -174
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -118
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -111
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -111
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -104
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -146
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -50
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -189
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +143 -143
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +126 -126
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -200
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -74
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -79
- package/templates/bmad/bmm/workflows/document-project/checklist.md +245 -245
- package/templates/bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -12
- package/templates/bmad/bmm/workflows/document-project/instructions.md +130 -130
- package/templates/bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -345
- package/templates/bmad/bmm/workflows/document-project/templates/index-template.md +169 -169
- package/templates/bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -103
- package/templates/bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -160
- package/templates/bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -135
- package/templates/bmad/bmm/workflows/document-project/workflow.yaml +22 -22
- package/templates/bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -298
- package/templates/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -31
- package/templates/bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -1106
- package/templates/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -31
- package/templates/bmad/bmm/workflows/generate-project-context/project-context-template.md +21 -21
- package/templates/bmad/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -184
- package/templates/bmad/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -318
- package/templates/bmad/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -278
- package/templates/bmad/bmm/workflows/generate-project-context/workflow.md +49 -49
- package/templates/bmad/bmm/workflows/qa/automate/checklist.md +33 -33
- package/templates/bmad/bmm/workflows/qa/automate/instructions.md +110 -110
- package/templates/bmad/bmm/workflows/qa/automate/workflow.yaml +44 -44
- package/templates/bmad/bmm/workflows/qa-generate-e2e-tests/checklist.md +33 -33
- package/templates/bmad/bmm/workflows/qa-generate-e2e-tests/instructions.md +110 -110
- package/templates/bmad/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -42
- package/templates/bmad/commands/bmad-agent-bmad-master.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-analyst.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-architect.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-dev.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-pm.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-qa.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-quick-flow-solo-dev.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-sm.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-tech-writer.md +15 -15
- package/templates/bmad/commands/bmad-agent-bmm-ux-designer.md +15 -15
- package/templates/bmad/commands/bmad-agent-tea-tea.md +15 -15
- package/templates/bmad/commands/bmad-bmm-check-implementation-readiness.md +6 -6
- package/templates/bmad/commands/bmad-bmm-code-review.md +14 -14
- package/templates/bmad/commands/bmad-bmm-correct-course.md +14 -14
- package/templates/bmad/commands/bmad-bmm-create-architecture.md +6 -6
- package/templates/bmad/commands/bmad-bmm-create-epics-and-stories.md +6 -6
- package/templates/bmad/commands/bmad-bmm-create-prd.md +6 -6
- package/templates/bmad/commands/bmad-bmm-create-product-brief.md +6 -6
- package/templates/bmad/commands/bmad-bmm-create-story.md +14 -14
- package/templates/bmad/commands/bmad-bmm-create-ux-design.md +6 -6
- package/templates/bmad/commands/bmad-bmm-dev-story.md +14 -14
- package/templates/bmad/commands/bmad-bmm-document-project.md +14 -14
- package/templates/bmad/commands/bmad-bmm-domain-research.md +6 -6
- package/templates/bmad/commands/bmad-bmm-edit-prd.md +6 -6
- package/templates/bmad/commands/bmad-bmm-generate-project-context.md +6 -6
- package/templates/bmad/commands/bmad-bmm-market-research.md +6 -6
- package/templates/bmad/commands/bmad-bmm-qa-automate.md +15 -15
- package/templates/bmad/commands/bmad-bmm-qa-generate-e2e-tests.md +14 -14
- package/templates/bmad/commands/bmad-bmm-quick-dev.md +6 -6
- package/templates/bmad/commands/bmad-bmm-quick-spec.md +6 -6
- package/templates/bmad/commands/bmad-bmm-retrospective.md +14 -14
- package/templates/bmad/commands/bmad-bmm-sprint-planning.md +14 -14
- package/templates/bmad/commands/bmad-bmm-sprint-status.md +14 -14
- package/templates/bmad/commands/bmad-bmm-technical-research.md +6 -6
- package/templates/bmad/commands/bmad-bmm-validate-prd.md +6 -6
- package/templates/bmad/commands/bmad-brainstorming.md +6 -6
- package/templates/bmad/commands/bmad-editorial-review-prose.md +10 -10
- package/templates/bmad/commands/bmad-editorial-review-structure.md +10 -10
- package/templates/bmad/commands/bmad-help.md +10 -10
- package/templates/bmad/commands/bmad-index-docs.md +10 -10
- package/templates/bmad/commands/bmad-party-mode.md +6 -6
- package/templates/bmad/commands/bmad-review-adversarial-general.md +10 -10
- package/templates/bmad/commands/bmad-review-edge-case-hunter.md +10 -0
- package/templates/bmad/commands/bmad-shard-doc.md +10 -10
- package/templates/bmad/commands/bmad-tea-teach-me-testing.md +6 -6
- package/templates/bmad/commands/bmad-tea-testarch-atdd.md +14 -14
- package/templates/bmad/commands/bmad-tea-testarch-automate.md +14 -14
- package/templates/bmad/commands/bmad-tea-testarch-ci.md +14 -14
- package/templates/bmad/commands/bmad-tea-testarch-framework.md +14 -14
- package/templates/bmad/commands/bmad-tea-testarch-nfr.md +14 -14
- package/templates/bmad/commands/bmad-tea-testarch-test-design.md +14 -14
- package/templates/bmad/commands/bmad-tea-testarch-test-review.md +14 -14
- package/templates/bmad/commands/bmad-tea-testarch-trace.md +14 -14
- package/templates/bmad/core/agents/bmad-master.md +56 -56
- package/templates/bmad/core/config.yaml +8 -8
- package/templates/bmad/core/module-help.csv +10 -9
- package/templates/bmad/core/tasks/editorial-review-prose.xml +101 -101
- package/templates/bmad/core/tasks/editorial-review-structure.xml +207 -207
- package/templates/bmad/core/tasks/help.md +86 -86
- package/templates/bmad/core/tasks/index-docs.xml +64 -64
- package/templates/bmad/core/tasks/review-adversarial-general.xml +48 -48
- package/templates/bmad/core/tasks/review-edge-case-hunter.xml +63 -0
- package/templates/bmad/core/tasks/shard-doc.xml +107 -107
- package/templates/bmad/core/tasks/workflow.xml +234 -234
- package/templates/bmad/core/workflows/advanced-elicitation/methods.csv +51 -51
- package/templates/bmad/core/workflows/advanced-elicitation/workflow.xml +117 -117
- package/templates/bmad/core/workflows/brainstorming/brain-methods.csv +61 -61
- package/templates/bmad/core/workflows/brainstorming/steps/step-01-session-setup.md +210 -197
- package/templates/bmad/core/workflows/brainstorming/steps/step-01b-continue.md +122 -122
- package/templates/bmad/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -225
- package/templates/bmad/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -237
- package/templates/bmad/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -209
- package/templates/bmad/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -264
- package/templates/bmad/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -399
- package/templates/bmad/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -303
- package/templates/bmad/core/workflows/brainstorming/template.md +15 -15
- package/templates/bmad/core/workflows/brainstorming/workflow.md +60 -58
- package/templates/bmad/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -138
- package/templates/bmad/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -187
- package/templates/bmad/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -168
- package/templates/bmad/core/workflows/party-mode/workflow.md +194 -194
- package/templates/bmad/tea/agents/tea.md +71 -71
- package/templates/bmad/tea/config.yaml +24 -20
- package/templates/bmad/tea/testarch/knowledge/contract-testing.md +24 -2
- package/templates/bmad/tea/testarch/knowledge/pact-mcp.md +204 -0
- package/templates/bmad/tea/testarch/knowledge/pactjs-utils-consumer-helpers.md +211 -0
- package/templates/bmad/tea/testarch/knowledge/pactjs-utils-overview.md +210 -0
- package/templates/bmad/tea/testarch/knowledge/pactjs-utils-provider-verifier.md +315 -0
- package/templates/bmad/tea/testarch/knowledge/pactjs-utils-request-filter.md +224 -0
- package/templates/bmad/tea/testarch/tea-index.csv +5 -0
- package/templates/bmad/tea/workflows/testarch/README.md +1 -1
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-01-preflight-and-context.md +30 -0
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-04-generate-tests.md +159 -57
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-04a-subagent-api-failing.md +215 -0
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-04b-subagent-e2e-failing.md +244 -0
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-04c-aggregate.md +31 -15
- package/templates/bmad/tea/workflows/testarch/atdd/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/atdd/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/atdd/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-01-preflight-and-context.md +32 -0
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03-generate-tests.md +215 -101
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03a-subagent-api.md +193 -0
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03b-subagent-backend.md +246 -0
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03b-subagent-e2e.md +213 -0
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03c-aggregate.md +38 -22
- package/templates/bmad/tea/workflows/testarch/automate/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/automate/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/automate/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/ci/steps-c/step-02-generate-pipeline.md +124 -1
- package/templates/bmad/tea/workflows/testarch/ci/steps-c/step-03-configure-quality-gates.md +7 -0
- package/templates/bmad/tea/workflows/testarch/ci/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/ci/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/ci/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/framework/steps-c/step-03-scaffold-framework.md +126 -3
- package/templates/bmad/tea/workflows/testarch/framework/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/framework/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/framework/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04-evaluate-and-score.md +150 -36
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04a-subagent-security.md +138 -0
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04b-subagent-performance.md +84 -0
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04c-subagent-reliability.md +85 -0
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04d-subagent-scalability.md +88 -0
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04e-aggregate-nfr.md +27 -10
- package/templates/bmad/tea/workflows/testarch/nfr-assess/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/nfr-assess/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/nfr-assess/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/teach-me-testing/data/tea-resources-index.yaml +3 -3
- package/templates/bmad/tea/workflows/testarch/teach-me-testing/workflow-plan-teach-me-testing.md +6 -6
- package/templates/bmad/tea/workflows/testarch/teach-me-testing/workflow.md +1 -1
- package/templates/bmad/tea/workflows/testarch/test-design/steps-c/step-02-load-context.md +30 -0
- package/templates/bmad/tea/workflows/testarch/test-design/steps-c/step-05-generate-output.md +72 -1
- package/templates/bmad/tea/workflows/testarch/test-design/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/test-design/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/test-design/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-01-load-context.md +29 -1
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03-quality-evaluation.md +147 -46
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03a-subagent-determinism.md +214 -0
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03b-subagent-isolation.md +125 -0
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03c-subagent-maintainability.md +102 -0
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03e-subagent-performance.md +117 -0
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03f-aggregate-scores.md +10 -10
- package/templates/bmad/tea/workflows/testarch/test-review/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/test-review/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/test-review/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/trace/steps-c/step-04-analyze-gaps.md +92 -1
- package/templates/bmad/tea/workflows/testarch/trace/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/trace/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/trace/workflow.yaml +2 -2
- package/templates/ecc/agents/chief-of-staff.md +151 -0
- package/templates/ecc/commands/claw.md +79 -0
- package/templates/ecc/rules/README.md +23 -2
- package/templates/ecc/rules/common/development-workflow.md +37 -0
- package/templates/ecc/rules/common/git-workflow.md +2 -23
- package/templates/ecc/rules/swift/coding-style.md +47 -0
- package/templates/ecc/rules/swift/hooks.md +20 -0
- package/templates/ecc/rules/swift/patterns.md +66 -0
- package/templates/ecc/rules/swift/security.md +33 -0
- package/templates/ecc/rules/swift/testing.md +45 -0
- package/templates/ecc/skills/api-design/SKILL.md +1 -0
- package/templates/ecc/skills/article-writing/SKILL.md +85 -0
- package/templates/ecc/skills/backend-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/clickhouse-io/SKILL.md +1 -0
- package/templates/ecc/skills/coding-standards/SKILL.md +1 -0
- package/templates/ecc/skills/configure-ecc/SKILL.md +32 -4
- package/templates/ecc/skills/content-engine/SKILL.md +88 -0
- package/templates/ecc/skills/content-hash-cache-pattern/SKILL.md +1 -0
- package/templates/ecc/skills/continuous-learning/SKILL.md +2 -1
- package/templates/ecc/skills/continuous-learning-v2/SKILL.md +4 -1
- package/templates/ecc/skills/continuous-learning-v2/hooks/observe.sh +14 -7
- package/templates/ecc/skills/cost-aware-llm-pipeline/SKILL.md +1 -0
- package/templates/ecc/skills/cpp-coding-standards/SKILL.md +1 -0
- package/templates/ecc/skills/cpp-testing/SKILL.md +1 -0
- package/templates/ecc/skills/database-migrations/SKILL.md +1 -0
- package/templates/ecc/skills/deployment-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/django-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/django-security/SKILL.md +1 -0
- package/templates/ecc/skills/django-tdd/SKILL.md +1 -0
- package/templates/ecc/skills/django-verification/SKILL.md +1 -0
- package/templates/ecc/skills/docker-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/e2e-testing/SKILL.md +1 -0
- package/templates/ecc/skills/eval-harness/SKILL.md +1 -0
- package/templates/ecc/skills/foundation-models-on-device/SKILL.md +243 -0
- package/templates/ecc/skills/frontend-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/frontend-slides/SKILL.md +184 -0
- package/templates/ecc/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/templates/ecc/skills/golang-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/golang-testing/SKILL.md +1 -0
- package/templates/ecc/skills/investor-materials/SKILL.md +96 -0
- package/templates/ecc/skills/investor-outreach/SKILL.md +76 -0
- package/templates/ecc/skills/iterative-retrieval/SKILL.md +1 -0
- package/templates/ecc/skills/java-coding-standards/SKILL.md +1 -0
- package/templates/ecc/skills/jpa-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/liquid-glass-design/SKILL.md +279 -0
- package/templates/ecc/skills/market-research/SKILL.md +75 -0
- package/templates/ecc/skills/nutrient-document-processing/SKILL.md +1 -1
- package/templates/ecc/skills/postgres-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/project-guidelines-example/SKILL.md +1 -0
- package/templates/ecc/skills/python-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/python-testing/SKILL.md +1 -0
- package/templates/ecc/skills/regex-vs-llm-structured-text/SKILL.md +1 -0
- package/templates/ecc/skills/search-first/SKILL.md +3 -1
- package/templates/ecc/skills/security-review/SKILL.md +1 -0
- package/templates/ecc/skills/security-scan/SKILL.md +1 -0
- package/templates/ecc/skills/skill-stocktake/SKILL.md +176 -0
- package/templates/ecc/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/templates/ecc/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/templates/ecc/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/templates/ecc/skills/springboot-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/springboot-security/SKILL.md +1 -0
- package/templates/ecc/skills/springboot-tdd/SKILL.md +1 -0
- package/templates/ecc/skills/springboot-verification/SKILL.md +1 -0
- package/templates/ecc/skills/strategic-compact/SKILL.md +1 -0
- package/templates/ecc/skills/swift-actor-persistence/SKILL.md +1 -0
- package/templates/ecc/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/templates/ecc/skills/swift-protocol-di-testing/SKILL.md +1 -0
- package/templates/ecc/skills/swiftui-patterns/SKILL.md +259 -0
- package/templates/ecc/skills/tdd-workflow/SKILL.md +1 -0
- package/templates/ecc/skills/verification-loop/SKILL.md +1 -0
- package/templates/ecc/skills/visa-doc-translate/README.md +86 -0
- package/templates/ecc/skills/visa-doc-translate/SKILL.md +117 -0
- package/templates/ext-skills/pinchtab/SKILL.md +89 -486
- package/templates/ext-skills/pinchtab/TRUST.md +69 -0
- package/templates/ext-skills/pinchtab/references/api.md +297 -0
- package/templates/ext-skills/pinchtab/references/env.md +45 -0
- package/templates/ext-skills/pinchtab/references/profiles.md +107 -0
- package/templates/mcp/claude-code/.mcp.json +35 -35
- package/templates/mcp/trae/mcp.json +35 -35
- package/templates/plugins/claude-code-setup/.claude-plugin/plugin.json +9 -0
- package/templates/plugins/claude-code-setup/LICENSE +202 -0
- package/templates/plugins/claude-code-setup/README.md +29 -0
- package/templates/plugins/claude-code-setup/automation-recommender-example.png +0 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/SKILL.md +288 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/hooks-patterns.md +226 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/mcp-servers.md +263 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/plugins-reference.md +98 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/skills-reference.md +408 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/subagent-templates.md +181 -0
- package/templates/plugins/claude-md-management/.claude-plugin/plugin.json +9 -0
- package/templates/plugins/claude-md-management/LICENSE +202 -0
- package/templates/plugins/claude-md-management/README.md +40 -0
- package/templates/plugins/claude-md-management/claude-md-improver-example.png +0 -0
- package/templates/plugins/claude-md-management/commands/revise-claude-md.md +54 -0
- package/templates/plugins/claude-md-management/revise-claude-md-example.png +0 -0
- package/templates/plugins/claude-md-management/skills/claude-md-improver/SKILL.md +179 -0
- package/templates/plugins/claude-md-management/skills/claude-md-improver/references/quality-criteria.md +109 -0
- package/templates/plugins/claude-md-management/skills/claude-md-improver/references/templates.md +253 -0
- package/templates/plugins/claude-md-management/skills/claude-md-improver/references/update-guidelines.md +150 -0
- package/templates/plugins/code-simplifier/.claude-plugin/plugin.json +9 -0
- package/templates/plugins/code-simplifier/LICENSE +202 -0
- package/templates/plugins/code-simplifier/agents/code-simplifier.md +52 -0
- package/templates/plugins/commit-commands/.claude-plugin/plugin.json +9 -0
- package/templates/plugins/commit-commands/LICENSE +202 -0
- package/templates/plugins/commit-commands/README.md +225 -0
- package/templates/plugins/commit-commands/commands/clean_gone.md +53 -0
- package/templates/plugins/commit-commands/commands/commit-push-pr.md +20 -0
- package/templates/plugins/commit-commands/commands/commit.md +17 -0
- package/templates/trae-bmad/rules/bmad-agent-bmad-master.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-analyst.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-architect.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-dev.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-pm.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-qa.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-quick-flow-solo-dev.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-sm.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-tech-writer.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-bmm-ux-designer.md +15 -15
- package/templates/trae-bmad/rules/bmad-agent-tea-tea.md +15 -15
- package/templates/trae-bmad/rules/bmad-bmm-check-implementation-readiness.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-code-review.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-correct-course.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-create-architecture.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-create-epics-and-stories.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-create-prd.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-create-product-brief.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-create-story.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-create-ux-design.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-dev-story.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-document-project.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-domain-research.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-edit-prd.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-generate-project-context.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-market-research.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-qa-automate.md +15 -15
- package/templates/trae-bmad/rules/bmad-bmm-qa-generate-e2e-tests.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-quick-dev.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-quick-spec.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-retrospective.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-sprint-planning.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-sprint-status.md +14 -14
- package/templates/trae-bmad/rules/bmad-bmm-technical-research.md +6 -6
- package/templates/trae-bmad/rules/bmad-bmm-validate-prd.md +6 -6
- package/templates/trae-bmad/rules/bmad-brainstorming.md +6 -6
- package/templates/trae-bmad/rules/bmad-editorial-review-prose.md +10 -10
- package/templates/trae-bmad/rules/bmad-editorial-review-structure.md +10 -10
- package/templates/trae-bmad/rules/bmad-help.md +10 -10
- package/templates/trae-bmad/rules/bmad-index-docs.md +10 -10
- package/templates/trae-bmad/rules/bmad-party-mode.md +6 -6
- package/templates/trae-bmad/rules/bmad-review-adversarial-general.md +10 -10
- package/templates/trae-bmad/rules/bmad-review-edge-case-hunter.md +10 -0
- package/templates/trae-bmad/rules/bmad-shard-doc.md +10 -10
- package/templates/trae-bmad/rules/bmad-tea-teach-me-testing.md +6 -6
- package/templates/trae-bmad/rules/bmad-tea-testarch-atdd.md +14 -14
- package/templates/trae-bmad/rules/bmad-tea-testarch-automate.md +14 -14
- package/templates/trae-bmad/rules/bmad-tea-testarch-ci.md +14 -14
- package/templates/trae-bmad/rules/bmad-tea-testarch-framework.md +14 -14
- package/templates/trae-bmad/rules/bmad-tea-testarch-nfr.md +14 -14
- package/templates/trae-bmad/rules/bmad-tea-testarch-test-design.md +14 -14
- package/templates/trae-bmad/rules/bmad-tea-testarch-test-review.md +14 -14
- package/templates/trae-bmad/rules/bmad-tea-testarch-trace.md +14 -14
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Pact MCP Server (SmartBear)
|
|
2
|
+
|
|
3
|
+
## Principle
|
|
4
|
+
|
|
5
|
+
Use the SmartBear MCP server to enable AI agent interaction with PactFlow/Pact Broker during contract testing workflows. The MCP server provides tools for generating pact tests, fetching provider states, reviewing test quality, and checking deployment safety — all accessible through the Model Context Protocol.
|
|
6
|
+
|
|
7
|
+
## Rationale
|
|
8
|
+
|
|
9
|
+
### Why MCP for contract testing?
|
|
10
|
+
|
|
11
|
+
- **Live broker queries**: AI agents can fetch existing provider states, verification results, and deployment status directly from PactFlow
|
|
12
|
+
- **Test generation assistance**: MCP tools generate consumer and provider tests based on existing contracts, OpenAPI specs, or templates
|
|
13
|
+
- **Automated review**: MCP-powered review checks tests against best practices without manual inspection
|
|
14
|
+
- **Deployment safety**: `can-i-deploy` checks integrated into agent workflows for real-time compatibility verification
|
|
15
|
+
|
|
16
|
+
### When TEA uses it
|
|
17
|
+
|
|
18
|
+
- **test-design workflow**: Fetch existing provider states to understand current contract landscape
|
|
19
|
+
- **automate workflow**: Generate pact tests using broker knowledge and existing contracts
|
|
20
|
+
- **test-review workflow**: Review pact tests against best practices with automated feedback
|
|
21
|
+
- **ci workflow**: Reference can-i-deploy and matrix tools for pipeline guidance
|
|
22
|
+
|
|
23
|
+
## Available Tools
|
|
24
|
+
|
|
25
|
+
| # | Tool | Description | When Used |
|
|
26
|
+
| --- | ------------------------- | ----------------------------------------------------------------------- | --------------------- |
|
|
27
|
+
| 1 | **Generate Pact Tests** | Create consumer/provider tests from code, OpenAPI, or templates | automate workflow |
|
|
28
|
+
| 2 | **Fetch Provider States** | List all provider states from broker for a given consumer-provider pair | test-design, automate |
|
|
29
|
+
| 3 | **Review Pact Tests** | Analyze tests against contract testing best practices | test-review |
|
|
30
|
+
| 4 | **Can I Deploy** | Check deployment safety via broker verification matrix | ci workflow |
|
|
31
|
+
| 5 | **Matrix** | Query consumer-provider verification matrix | ci, test-design |
|
|
32
|
+
| 6 | **PactFlow AI Status** | Check AI credits and permissions (PactFlow Cloud only) | diagnostics |
|
|
33
|
+
| 7 | **Metrics - All** | Workspace-wide contract testing metrics | reporting |
|
|
34
|
+
| 8 | **Metrics - Team** | Team-level adoption statistics (PactFlow Cloud only) | reporting |
|
|
35
|
+
|
|
36
|
+
## Installation
|
|
37
|
+
|
|
38
|
+
### Config file locations
|
|
39
|
+
|
|
40
|
+
| Tool | Global Config File | Format |
|
|
41
|
+
| ----------------- | ------------------------------------- | ---------------------- |
|
|
42
|
+
| Claude Code | `~/.claude.json` | JSON (`mcpServers`) |
|
|
43
|
+
| Codex | `~/.codex/config.toml` | TOML (`[mcp_servers]`) |
|
|
44
|
+
| Gemini CLI | `~/.gemini/settings.json` | JSON (`mcpServers`) |
|
|
45
|
+
| Cursor | `~/.cursor/mcp.json` | JSON (`mcpServers`) |
|
|
46
|
+
| Windsurf | `~/.codeium/windsurf/mcp_config.json` | JSON (`mcpServers`) |
|
|
47
|
+
| VS Code (Copilot) | `.vscode/mcp.json` | JSON (`servers`) |
|
|
48
|
+
|
|
49
|
+
> **Claude Code tip**: Prefer the `claude mcp add` CLI over manual JSON editing. Use `-s user` for global (all projects) or omit for per-project (default).
|
|
50
|
+
|
|
51
|
+
### CLI shortcuts (Claude Code and Codex)
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Claude Code — use add-json for servers with env vars (-s user = global)
|
|
55
|
+
claude mcp add-json -s user smartbear \
|
|
56
|
+
'{"type":"stdio","command":"npx","args":["-y","@smartbear/mcp@latest"],"env":{"PACT_BROKER_BASE_URL":"https://{tenant}.pactflow.io","PACT_BROKER_TOKEN":"<your-token>"}}'
|
|
57
|
+
|
|
58
|
+
# Codex
|
|
59
|
+
codex mcp add smartbear -- npx -y @smartbear/mcp@latest
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### JSON config (Gemini CLI, Cursor, Windsurf)
|
|
63
|
+
|
|
64
|
+
Add a `"smartbear"` entry to the `mcpServers` object in the config file for your tool:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"mcpServers": {
|
|
69
|
+
"smartbear": {
|
|
70
|
+
"type": "stdio",
|
|
71
|
+
"command": "npx",
|
|
72
|
+
"args": ["-y", "@smartbear/mcp@latest"],
|
|
73
|
+
"env": {
|
|
74
|
+
"PACT_BROKER_BASE_URL": "https://{tenant}.pactflow.io",
|
|
75
|
+
"PACT_BROKER_TOKEN": "<your-api-token>"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Codex TOML config
|
|
83
|
+
|
|
84
|
+
Codex uses TOML instead of JSON. Add to `~/.codex/config.toml`:
|
|
85
|
+
|
|
86
|
+
```toml
|
|
87
|
+
[mcp_servers.smartbear]
|
|
88
|
+
command = "npx"
|
|
89
|
+
args = ["-y", "@smartbear/mcp@latest"]
|
|
90
|
+
|
|
91
|
+
[mcp_servers.smartbear.env]
|
|
92
|
+
PACT_BROKER_BASE_URL = "https://{tenant}.pactflow.io"
|
|
93
|
+
PACT_BROKER_TOKEN = "<your-api-token>"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Note the key is `mcp_servers` (underscored), not `mcpServers`.
|
|
97
|
+
|
|
98
|
+
### VS Code (GitHub Copilot)
|
|
99
|
+
|
|
100
|
+
Add to `.vscode/mcp.json` (note: uses `servers` key, not `mcpServers`):
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"servers": {
|
|
105
|
+
"smartbear": {
|
|
106
|
+
"type": "stdio",
|
|
107
|
+
"command": "npx",
|
|
108
|
+
"args": ["-y", "@smartbear/mcp@latest"],
|
|
109
|
+
"env": {
|
|
110
|
+
"PACT_BROKER_BASE_URL": "https://{tenant}.pactflow.io",
|
|
111
|
+
"PACT_BROKER_TOKEN": "${input:pactToken}"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
> **Note**: Set either `PACT_BROKER_TOKEN` (for PactFlow) or `PACT_BROKER_USERNAME`+`PACT_BROKER_PASSWORD` (for self-hosted). Leave unused vars empty.
|
|
119
|
+
|
|
120
|
+
## Required Environment Variables
|
|
121
|
+
|
|
122
|
+
| Variable | Required | Description |
|
|
123
|
+
| ---------------------- | ---------------------------- | --------------------------------------- |
|
|
124
|
+
| `PACT_BROKER_BASE_URL` | Yes (for Pact features) | PactFlow or self-hosted Pact Broker URL |
|
|
125
|
+
| `PACT_BROKER_TOKEN` | For PactFlow / token auth | API token for broker authentication |
|
|
126
|
+
| `PACT_BROKER_USERNAME` | For basic auth (self-hosted) | Username for basic authentication |
|
|
127
|
+
| `PACT_BROKER_PASSWORD` | For basic auth (self-hosted) | Password for basic authentication |
|
|
128
|
+
|
|
129
|
+
**Authentication**: Use token auth (`PACT_BROKER_TOKEN`) for PactFlow. Use basic auth (`PACT_BROKER_USERNAME` + `PACT_BROKER_PASSWORD`) for self-hosted Pact Broker instances. Only one auth method is needed.
|
|
130
|
+
|
|
131
|
+
**Requirements**: Node.js 20+
|
|
132
|
+
|
|
133
|
+
## Pattern Examples
|
|
134
|
+
|
|
135
|
+
### Example 1: Fetching Provider States During Test Design
|
|
136
|
+
|
|
137
|
+
When designing contract tests, use MCP to query existing provider states:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
# Agent queries SmartBear MCP during test-design workflow:
|
|
141
|
+
# → Fetch Provider States for consumer="movie-web", provider="SampleMoviesAPI"
|
|
142
|
+
# ← Returns: ["movie with id 1 exists", "no movies exist", "user is authenticated"]
|
|
143
|
+
#
|
|
144
|
+
# Agent uses this to generate comprehensive consumer tests covering all states
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Example 2: Reviewing Pact Tests
|
|
148
|
+
|
|
149
|
+
During test-review workflow, use MCP to evaluate test quality:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
# Agent submits test file to SmartBear MCP Review tool:
|
|
153
|
+
# → Review Pact Tests with test file content
|
|
154
|
+
# ← Returns: feedback on matcher usage, state coverage, interaction naming
|
|
155
|
+
#
|
|
156
|
+
# Agent incorporates feedback into review report
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Example 3: Can I Deploy Check in CI
|
|
160
|
+
|
|
161
|
+
During CI workflow design, reference the can-i-deploy tool:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
# Agent generates CI pipeline with can-i-deploy gate:
|
|
165
|
+
# → Can I Deploy: pacticipant="SampleMoviesAPI", version="${GITHUB_SHA}", to="production"
|
|
166
|
+
# ← Returns: { ok: true/false, reason: "..." }
|
|
167
|
+
#
|
|
168
|
+
# Agent designs pipeline to block deployment if can-i-deploy fails
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Key Points
|
|
172
|
+
|
|
173
|
+
- **Per-project install recommended**: Different projects may target different PactFlow tenants — match TEA's per-project config philosophy
|
|
174
|
+
- **Env vars are project-specific**: `PACT_BROKER_BASE_URL` and `PACT_BROKER_TOKEN` vary by project/team
|
|
175
|
+
- **Node.js 20+ required**: SmartBear MCP server requires Node.js 20 or higher
|
|
176
|
+
- **PactFlow Cloud features**: Some tools (AI Status, Team Metrics) are only available with PactFlow Cloud, not self-hosted Pact Broker
|
|
177
|
+
- **Complements pactjs-utils**: MCP provides broker interaction during design/review; pactjs-utils provides runtime utilities for test code
|
|
178
|
+
|
|
179
|
+
## Related Fragments
|
|
180
|
+
|
|
181
|
+
- `pactjs-utils-overview.md` — runtime utilities that pact tests import
|
|
182
|
+
- `pactjs-utils-provider-verifier.md` — verifier options that reference broker config
|
|
183
|
+
- `contract-testing.md` — foundational contract testing patterns
|
|
184
|
+
|
|
185
|
+
## Anti-Patterns
|
|
186
|
+
|
|
187
|
+
### Wrong: Using MCP for runtime test execution
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
# ❌ Don't use MCP to run pact tests — use npm scripts and CI pipelines
|
|
191
|
+
# MCP is for agent-assisted design, generation, and review
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Right: Use MCP for design-time assistance
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
# ✅ Use MCP during planning and review:
|
|
198
|
+
# - Fetch provider states to inform test design
|
|
199
|
+
# - Generate test scaffolds from existing contracts
|
|
200
|
+
# - Review tests for best practice compliance
|
|
201
|
+
# - Check can-i-deploy during CI pipeline design
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
_Source: SmartBear MCP documentation, PactFlow developer docs_
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Pact.js Utils Consumer Helpers
|
|
2
|
+
|
|
3
|
+
## Principle
|
|
4
|
+
|
|
5
|
+
Use `createProviderState` and `toJsonMap` from `@seontechnologies/pactjs-utils` to build type-safe provider state tuples for consumer contract tests. These helpers eliminate manual `JsonMap` casting and ensure consistent parameter serialization across all consumer pact interactions.
|
|
6
|
+
|
|
7
|
+
## Rationale
|
|
8
|
+
|
|
9
|
+
### Problems with raw provider state handling
|
|
10
|
+
|
|
11
|
+
- **JsonMap requirement**: Pact's `.given(stateName, params)` requires `params` to be `JsonMap` — a flat object where every value must be `string | number | boolean | null`
|
|
12
|
+
- **Type gymnastics**: Complex params (Date objects, nested objects, null values) require manual casting that TypeScript can't verify
|
|
13
|
+
- **Inconsistent serialization**: Different developers serialize the same data differently (e.g., dates as ISO strings vs timestamps)
|
|
14
|
+
- **Verbose `.given()` calls**: Repeating state name and params inline makes consumer tests harder to read
|
|
15
|
+
|
|
16
|
+
### Solutions
|
|
17
|
+
|
|
18
|
+
- **`createProviderState`**: Returns a `[string, JsonMap]` tuple that spreads directly into `.given()` — one function handles name and params
|
|
19
|
+
- **`toJsonMap`**: Explicit coercion rules documented and tested — Date→ISO string, null→"null" string, nested objects→JSON string
|
|
20
|
+
|
|
21
|
+
## Pattern Examples
|
|
22
|
+
|
|
23
|
+
### Example 1: Basic Provider State Creation
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { PactV3, MatchersV3 } from '@pact-foundation/pact';
|
|
27
|
+
import { createProviderState } from '@seontechnologies/pactjs-utils';
|
|
28
|
+
|
|
29
|
+
const provider = new PactV3({
|
|
30
|
+
consumer: 'movie-web',
|
|
31
|
+
provider: 'SampleMoviesAPI',
|
|
32
|
+
dir: './pacts',
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('Movie API Contract', () => {
|
|
36
|
+
it('should return movie by id', async () => {
|
|
37
|
+
// createProviderState returns [stateName, JsonMap] tuple
|
|
38
|
+
const providerState = createProviderState({
|
|
39
|
+
name: 'movie with id 1 exists',
|
|
40
|
+
params: { id: 1, name: 'Inception', year: 2010 },
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
await provider
|
|
44
|
+
.given(...providerState) // Spread tuple into .given(name, params)
|
|
45
|
+
.uponReceiving('a request for movie 1')
|
|
46
|
+
.withRequest({ method: 'GET', path: '/movies/1' })
|
|
47
|
+
.willRespondWith({
|
|
48
|
+
status: 200,
|
|
49
|
+
body: MatchersV3.like({ id: 1, name: 'Inception', year: 2010 }),
|
|
50
|
+
})
|
|
51
|
+
.executeTest(async (mockServer) => {
|
|
52
|
+
const res = await fetch(`${mockServer.url}/movies/1`);
|
|
53
|
+
const movie = await res.json();
|
|
54
|
+
expect(movie.name).toBe('Inception');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Key Points**:
|
|
61
|
+
|
|
62
|
+
- `createProviderState` accepts `{ name: string, params: Record<string, unknown> }`
|
|
63
|
+
- Both `name` and `params` are required (pass `params: {}` for states without parameters)
|
|
64
|
+
- Returns `[string, JsonMap]` — spread with `...` into `.given()`
|
|
65
|
+
- `params` values are automatically converted to JsonMap-compatible types
|
|
66
|
+
- Works identically with HTTP (`PactV3`) and message (`MessageConsumerPact`) pacts
|
|
67
|
+
|
|
68
|
+
### Example 2: Complex Parameters with toJsonMap
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { toJsonMap } from '@seontechnologies/pactjs-utils';
|
|
72
|
+
|
|
73
|
+
// toJsonMap conversion rules:
|
|
74
|
+
// - string, number, boolean → passed through
|
|
75
|
+
// - null → "null" (string)
|
|
76
|
+
// - undefined → "null" (string, same as null)
|
|
77
|
+
// - Date → ISO string (e.g., "2025-01-15T10:00:00.000Z")
|
|
78
|
+
// - nested object → JSON string
|
|
79
|
+
// - array → comma-separated string via String() (e.g., [1,2,3] → "1,2,3")
|
|
80
|
+
|
|
81
|
+
const params = toJsonMap({
|
|
82
|
+
id: 42,
|
|
83
|
+
name: 'John Doe',
|
|
84
|
+
active: true,
|
|
85
|
+
score: null,
|
|
86
|
+
createdAt: new Date('2025-01-15T10:00:00Z'),
|
|
87
|
+
metadata: { role: 'admin', permissions: ['read', 'write'] },
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// Result:
|
|
91
|
+
// {
|
|
92
|
+
// id: 42,
|
|
93
|
+
// name: "John Doe",
|
|
94
|
+
// active: true,
|
|
95
|
+
// score: "null",
|
|
96
|
+
// createdAt: "2025-01-15T10:00:00.000Z",
|
|
97
|
+
// metadata: '{"role":"admin","permissions":["read","write"]}'
|
|
98
|
+
// }
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Key Points**:
|
|
102
|
+
|
|
103
|
+
- `toJsonMap` is called internally by `createProviderState` — you rarely need it directly
|
|
104
|
+
- Use it when you need explicit control over parameter conversion outside of provider states
|
|
105
|
+
- Conversion rules are deterministic: same input always produces same output
|
|
106
|
+
|
|
107
|
+
### Example 3: Provider State Without Parameters
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import { createProviderState } from '@seontechnologies/pactjs-utils';
|
|
111
|
+
|
|
112
|
+
// State without params — second tuple element is empty object
|
|
113
|
+
const emptyState = createProviderState({ name: 'no movies exist', params: {} });
|
|
114
|
+
// Returns: ['no movies exist', {}]
|
|
115
|
+
|
|
116
|
+
await provider
|
|
117
|
+
.given(...emptyState)
|
|
118
|
+
.uponReceiving('a request when no movies exist')
|
|
119
|
+
.withRequest({ method: 'GET', path: '/movies' })
|
|
120
|
+
.willRespondWith({ status: 200, body: [] })
|
|
121
|
+
.executeTest(async (mockServer) => {
|
|
122
|
+
const res = await fetch(`${mockServer.url}/movies`);
|
|
123
|
+
const movies = await res.json();
|
|
124
|
+
expect(movies).toEqual([]);
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Example 4: Multiple Provider States
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
import { createProviderState } from '@seontechnologies/pactjs-utils';
|
|
132
|
+
|
|
133
|
+
// Some interactions require multiple provider states
|
|
134
|
+
// Call .given() multiple times with different states
|
|
135
|
+
await provider
|
|
136
|
+
.given(...createProviderState({ name: 'user is authenticated', params: { userId: 1 } }))
|
|
137
|
+
.given(...createProviderState({ name: 'movie with id 5 exists', params: { id: 5 } }))
|
|
138
|
+
.uponReceiving('an authenticated request for movie 5')
|
|
139
|
+
.withRequest({
|
|
140
|
+
method: 'GET',
|
|
141
|
+
path: '/movies/5',
|
|
142
|
+
headers: { Authorization: MatchersV3.like('Bearer token') },
|
|
143
|
+
})
|
|
144
|
+
.willRespondWith({ status: 200, body: MatchersV3.like({ id: 5 }) })
|
|
145
|
+
.executeTest(async (mockServer) => {
|
|
146
|
+
// test implementation
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Key Points
|
|
151
|
+
|
|
152
|
+
- **Spread pattern**: Always use `...createProviderState()` — the tuple spreads into `.given(stateName, params)`
|
|
153
|
+
- **Type safety**: TypeScript enforces `{ name: string, params: Record<string, unknown> }` input (both fields required)
|
|
154
|
+
- **Null handling**: `null` becomes `"null"` string in JsonMap (Pact requirement)
|
|
155
|
+
- **Date handling**: Date objects become ISO 8601 strings
|
|
156
|
+
- **No nested objects in JsonMap**: Nested objects are JSON-stringified — provider state handlers must parse them
|
|
157
|
+
- **Array serialization is lossy**: Arrays are converted via `String()` (e.g., `[1,2,3]` → `"1,2,3"`) — prefer passing arrays as JSON-stringified objects for round-trip safety
|
|
158
|
+
- **Message pacts**: Works identically with `MessageConsumerPact` — same `.given()` API
|
|
159
|
+
|
|
160
|
+
## Related Fragments
|
|
161
|
+
|
|
162
|
+
- `pactjs-utils-overview.md` — installation, decision tree, design philosophy
|
|
163
|
+
- `pactjs-utils-provider-verifier.md` — provider-side state handler implementation
|
|
164
|
+
- `contract-testing.md` — foundational patterns with raw Pact.js
|
|
165
|
+
|
|
166
|
+
## Anti-Patterns
|
|
167
|
+
|
|
168
|
+
### Wrong: Manual JsonMap assembly
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// ❌ Manual casting — verbose, error-prone, no type safety
|
|
172
|
+
provider.given('user exists', {
|
|
173
|
+
id: 1 as unknown as string,
|
|
174
|
+
createdAt: new Date().toISOString(),
|
|
175
|
+
metadata: JSON.stringify({ role: 'admin' }),
|
|
176
|
+
} as JsonMap);
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Right: Use createProviderState
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
// ✅ Automatic conversion with type safety
|
|
183
|
+
provider.given(
|
|
184
|
+
...createProviderState({
|
|
185
|
+
name: 'user exists',
|
|
186
|
+
params: { id: 1, createdAt: new Date(), metadata: { role: 'admin' } },
|
|
187
|
+
}),
|
|
188
|
+
);
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Wrong: Inline state names without helper
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
// ❌ Duplicated state names between consumer and provider — easy to mismatch
|
|
195
|
+
provider.given('a user with id 1 exists', { id: '1' });
|
|
196
|
+
// Later in provider: 'user with id 1 exists' — different string!
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Right: Share state constants
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
// ✅ Define state names as constants shared between consumer and provider
|
|
203
|
+
const STATES = {
|
|
204
|
+
USER_EXISTS: 'user with id exists',
|
|
205
|
+
NO_USERS: 'no users exist',
|
|
206
|
+
} as const;
|
|
207
|
+
|
|
208
|
+
provider.given(...createProviderState({ name: STATES.USER_EXISTS, params: { id: 1 } }));
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
_Source: @seontechnologies/pactjs-utils consumer-helpers module, pactjs-utils sample-app consumer tests_
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Pact.js Utils Overview
|
|
2
|
+
|
|
3
|
+
## Principle
|
|
4
|
+
|
|
5
|
+
Use production-ready utilities from `@seontechnologies/pactjs-utils` to eliminate boilerplate in consumer-driven contract testing. The library wraps `@pact-foundation/pact` with type-safe helpers for provider state creation, verifier configuration, and request filter injection — working equally well for HTTP and message (async/Kafka) contracts.
|
|
6
|
+
|
|
7
|
+
## Rationale
|
|
8
|
+
|
|
9
|
+
### Problems with raw @pact-foundation/pact
|
|
10
|
+
|
|
11
|
+
- **JsonMap casting**: Provider state parameters require `JsonMap` type — manually casting every value is error-prone and verbose
|
|
12
|
+
- **Verifier configuration sprawl**: `VerifierOptions` requires 30+ lines of scattered configuration (broker URL, selectors, state handlers, request filters, version tags)
|
|
13
|
+
- **Environment variable juggling**: Different env vars for local vs remote flows, breaking change coordination, payload URL matching
|
|
14
|
+
- **Express middleware types**: Request filter requires Express types that aren't re-exported from Pact
|
|
15
|
+
- **Bearer prefix bugs**: Easy to double-prefix tokens as `Bearer Bearer ...` in request filters
|
|
16
|
+
- **CI version tagging**: Manual logic to extract branch/tag info from CI environment
|
|
17
|
+
|
|
18
|
+
### Solutions from pactjs-utils
|
|
19
|
+
|
|
20
|
+
- **`createProviderState`**: One-call tuple builder for `.given()` — handles all JsonMap conversion automatically
|
|
21
|
+
- **`toJsonMap`**: Explicit type coercion (null→"null", Date→ISO string, nested objects flattened)
|
|
22
|
+
- **`buildVerifierOptions`**: Single function assembles complete VerifierOptions from minimal inputs — handles local/remote/BDCT flows
|
|
23
|
+
- **`buildMessageVerifierOptions`**: Same as above but for message/Kafka provider verification
|
|
24
|
+
- **`handlePactBrokerUrlAndSelectors`**: Resolves broker URL and consumer version selectors from env vars with breaking change awareness
|
|
25
|
+
- **`getProviderVersionTags`**: CI-aware version tagging (extracts branch/tag from GitHub Actions, GitLab CI, etc.)
|
|
26
|
+
- **`createRequestFilter`**: Pluggable token generator pattern — prevents double-Bearer bugs by contract
|
|
27
|
+
- **`noOpRequestFilter`**: Pass-through for providers that don't require auth injection
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install -D @seontechnologies/pactjs-utils
|
|
33
|
+
|
|
34
|
+
# Peer dependency
|
|
35
|
+
npm install -D @pact-foundation/pact
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Requirements**: `@pact-foundation/pact` >= 16.2.0, Node.js >= 18
|
|
39
|
+
|
|
40
|
+
## Available Utilities
|
|
41
|
+
|
|
42
|
+
| Category | Function | Description | Use Case |
|
|
43
|
+
| ----------------- | --------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------- |
|
|
44
|
+
| Consumer Helpers | `createProviderState` | Builds `[stateName, JsonMap]` tuple from typed input | Consumer tests: `.given(...createProviderState(input))` |
|
|
45
|
+
| Consumer Helpers | `toJsonMap` | Converts any object to Pact-compatible `JsonMap` | Explicit type coercion for provider state params |
|
|
46
|
+
| Provider Verifier | `buildVerifierOptions` | Assembles complete HTTP `VerifierOptions` | Provider verification: `new Verifier(buildVerifierOptions(...))` |
|
|
47
|
+
| Provider Verifier | `buildMessageVerifierOptions` | Assembles message `VerifierOptions` | Kafka/async provider verification |
|
|
48
|
+
| Provider Verifier | `handlePactBrokerUrlAndSelectors` | Resolves broker URL + selectors from env vars | Env-aware broker configuration |
|
|
49
|
+
| Provider Verifier | `getProviderVersionTags` | CI-aware version tag extraction | Provider version tagging in CI |
|
|
50
|
+
| Request Filter | `createRequestFilter` | Express middleware with pluggable token generator | Auth injection for provider verification |
|
|
51
|
+
| Request Filter | `noOpRequestFilter` | Pass-through filter (no-op) | Providers without auth requirements |
|
|
52
|
+
|
|
53
|
+
## Decision Tree: Which Flow?
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
Is this a monorepo (consumer + provider in same repo)?
|
|
57
|
+
├── YES → Local Flow
|
|
58
|
+
│ - Consumer generates pact files to ./pacts/
|
|
59
|
+
│ - Provider reads pact files from ./pacts/ (no broker needed)
|
|
60
|
+
│ - Use buildVerifierOptions with pactUrls option
|
|
61
|
+
│
|
|
62
|
+
└── NO → Do you have a Pact Broker / PactFlow?
|
|
63
|
+
├── YES → Remote (CDCT) Flow
|
|
64
|
+
│ - Consumer publishes pacts to broker
|
|
65
|
+
│ - Provider verifies from broker
|
|
66
|
+
│ - Use buildVerifierOptions with broker config
|
|
67
|
+
│ - Set PACT_BROKER_BASE_URL + PACT_BROKER_TOKEN
|
|
68
|
+
│
|
|
69
|
+
└── Do you have an OpenAPI spec?
|
|
70
|
+
├── YES → BDCT Flow (PactFlow only)
|
|
71
|
+
│ - Provider publishes OpenAPI spec to PactFlow
|
|
72
|
+
│ - PactFlow cross-validates consumer pacts against spec
|
|
73
|
+
│ - No provider verification test needed
|
|
74
|
+
│
|
|
75
|
+
└── NO → Start with Local Flow, migrate to Remote later
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Design Philosophy
|
|
79
|
+
|
|
80
|
+
1. **One-call setup**: Each utility does one thing completely — no multi-step assembly required
|
|
81
|
+
2. **Environment-aware**: Utilities read env vars for CI/CD integration without manual wiring
|
|
82
|
+
3. **Type-safe**: Full TypeScript types for all inputs and outputs, exported for consumer use
|
|
83
|
+
4. **Fail-safe defaults**: Sensible defaults that work locally; env vars override for CI
|
|
84
|
+
5. **Composable**: Utilities work independently — use only what you need
|
|
85
|
+
|
|
86
|
+
## Pattern Examples
|
|
87
|
+
|
|
88
|
+
### Example 1: Minimal Consumer Test
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
import { PactV3 } from '@pact-foundation/pact';
|
|
92
|
+
import { createProviderState } from '@seontechnologies/pactjs-utils';
|
|
93
|
+
|
|
94
|
+
const provider = new PactV3({
|
|
95
|
+
consumer: 'my-frontend',
|
|
96
|
+
provider: 'my-api',
|
|
97
|
+
dir: './pacts',
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should get user by id', async () => {
|
|
101
|
+
await provider
|
|
102
|
+
.given(...createProviderState({ name: 'user exists', params: { id: 1 } }))
|
|
103
|
+
.uponReceiving('a request for user 1')
|
|
104
|
+
.withRequest({ method: 'GET', path: '/users/1' })
|
|
105
|
+
.willRespondWith({ status: 200, body: { id: 1, name: 'John' } })
|
|
106
|
+
.executeTest(async (mockServer) => {
|
|
107
|
+
const res = await fetch(`${mockServer.url}/users/1`);
|
|
108
|
+
expect(res.status).toBe(200);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Example 2: Minimal Provider Verification
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
import { Verifier } from '@pact-foundation/pact';
|
|
117
|
+
import { buildVerifierOptions, createRequestFilter } from '@seontechnologies/pactjs-utils';
|
|
118
|
+
|
|
119
|
+
const opts = buildVerifierOptions({
|
|
120
|
+
provider: 'my-api',
|
|
121
|
+
port: '3001',
|
|
122
|
+
includeMainAndDeployed: true,
|
|
123
|
+
stateHandlers: {
|
|
124
|
+
'user exists': async (params) => {
|
|
125
|
+
await db.seed({ users: [{ id: params?.id }] });
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
requestFilter: createRequestFilter({
|
|
129
|
+
tokenGenerator: () => 'test-token-123',
|
|
130
|
+
}),
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
await new Verifier(opts).verifyProvider();
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Key Points
|
|
137
|
+
|
|
138
|
+
- **Import path**: Always use `@seontechnologies/pactjs-utils` (no subpath exports)
|
|
139
|
+
- **Peer dependency**: `@pact-foundation/pact` must be installed separately
|
|
140
|
+
- **Local flow**: No broker needed — set `pactUrls` in verifier options pointing to local pact files
|
|
141
|
+
- **Remote flow**: Set `PACT_BROKER_BASE_URL` and `PACT_BROKER_TOKEN` env vars
|
|
142
|
+
- **Breaking changes**: Set `includeMainAndDeployed: false` when coordinating breaking changes (verifies only matchingBranch)
|
|
143
|
+
- **Type exports**: Library exports `StateHandlers`, `RequestFilter`, `JsonMap`, `ConsumerVersionSelector` types
|
|
144
|
+
|
|
145
|
+
## Related Fragments
|
|
146
|
+
|
|
147
|
+
- `pactjs-utils-consumer-helpers.md` — detailed createProviderState and toJsonMap usage
|
|
148
|
+
- `pactjs-utils-provider-verifier.md` — detailed buildVerifierOptions and broker configuration
|
|
149
|
+
- `pactjs-utils-request-filter.md` — detailed createRequestFilter and auth patterns
|
|
150
|
+
- `contract-testing.md` — foundational contract testing patterns (raw Pact.js approach)
|
|
151
|
+
- `test-levels-framework.md` — where contract tests fit in the testing pyramid
|
|
152
|
+
|
|
153
|
+
## Anti-Patterns
|
|
154
|
+
|
|
155
|
+
### Wrong: Manual VerifierOptions assembly when pactjs-utils is available
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
// ❌ Don't assemble VerifierOptions manually
|
|
159
|
+
const opts: VerifierOptions = {
|
|
160
|
+
provider: 'my-api',
|
|
161
|
+
providerBaseUrl: 'http://localhost:3001',
|
|
162
|
+
pactBrokerUrl: process.env.PACT_BROKER_BASE_URL,
|
|
163
|
+
pactBrokerToken: process.env.PACT_BROKER_TOKEN,
|
|
164
|
+
publishVerificationResult: process.env.CI === 'true',
|
|
165
|
+
providerVersion: process.env.GIT_SHA || 'dev',
|
|
166
|
+
consumerVersionSelectors: [{ mainBranch: true }, { deployedOrReleased: true }],
|
|
167
|
+
stateHandlers: {
|
|
168
|
+
/* ... */
|
|
169
|
+
},
|
|
170
|
+
requestFilter: (req, res, next) => {
|
|
171
|
+
/* ... */
|
|
172
|
+
},
|
|
173
|
+
// ... 20 more lines
|
|
174
|
+
};
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Right: Use buildVerifierOptions
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
// ✅ Single call handles all configuration
|
|
181
|
+
const opts = buildVerifierOptions({
|
|
182
|
+
provider: 'my-api',
|
|
183
|
+
port: '3001',
|
|
184
|
+
includeMainAndDeployed: true,
|
|
185
|
+
stateHandlers: {
|
|
186
|
+
/* ... */
|
|
187
|
+
},
|
|
188
|
+
requestFilter: createRequestFilter({ tokenGenerator: () => 'token' }),
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Wrong: Importing raw Pact types for JsonMap conversion
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
// ❌ Manual JsonMap casting
|
|
196
|
+
import type { JsonMap } from '@pact-foundation/pact';
|
|
197
|
+
|
|
198
|
+
provider.given('user exists', { id: 1 as unknown as JsonMap['id'] });
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Right: Use createProviderState
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
// ✅ Automatic type conversion
|
|
205
|
+
import { createProviderState } from '@seontechnologies/pactjs-utils';
|
|
206
|
+
|
|
207
|
+
provider.given(...createProviderState({ name: 'user exists', params: { id: 1 } }));
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
_Source: @seontechnologies/pactjs-utils library, pactjs-utils README, pact-js-example-provider workflows_
|