contract-driven-delivery 1.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 +142 -0
- package/assets/AGENTS.template.md +21 -0
- package/assets/CLAUDE.template.md +159 -0
- package/assets/agents/backend-engineer.md +24 -0
- package/assets/agents/change-classifier.md +73 -0
- package/assets/agents/ci-cd-gatekeeper.md +40 -0
- package/assets/agents/contract-reviewer.md +42 -0
- package/assets/agents/e2e-resilience-engineer.md +25 -0
- package/assets/agents/frontend-engineer.md +22 -0
- package/assets/agents/monkey-test-engineer.md +29 -0
- package/assets/agents/qa-reviewer.md +49 -0
- package/assets/agents/repo-context-scanner.md +71 -0
- package/assets/agents/spec-architect.md +47 -0
- package/assets/agents/spec-drift-auditor.md +41 -0
- package/assets/agents/stress-soak-engineer.md +51 -0
- package/assets/agents/test-strategist.md +57 -0
- package/assets/agents/ui-ux-reviewer.md +42 -0
- package/assets/agents/visual-reviewer.md +44 -0
- package/assets/ci/gate-policy.md +51 -0
- package/assets/ci/github-actions/contract-driven-gates.yml +38 -0
- package/assets/ci/required-check-policy.md +13 -0
- package/assets/contracts/api/api-contract.md +20 -0
- package/assets/contracts/api/api-inventory.md +13 -0
- package/assets/contracts/api/error-format.md +19 -0
- package/assets/contracts/business/business-rules.md +13 -0
- package/assets/contracts/ci/ci-gate-contract.md +13 -0
- package/assets/contracts/css/css-contract.md +15 -0
- package/assets/contracts/css/design-tokens.md +13 -0
- package/assets/contracts/data/data-shape-contract.md +22 -0
- package/assets/contracts/env/.env.example.template +5 -0
- package/assets/contracts/env/env-contract.md +12 -0
- package/assets/contracts/env/env.schema.json +7 -0
- package/assets/skill/SKILL.md +102 -0
- package/assets/skill/agents/openai.yaml +2 -0
- package/assets/skill/references/api-contract-standard.md +55 -0
- package/assets/skill/references/business-logic-standard.md +32 -0
- package/assets/skill/references/ci-cd-policy.md +34 -0
- package/assets/skill/references/css-contract-standard.md +40 -0
- package/assets/skill/references/data-contract-standard.md +43 -0
- package/assets/skill/references/e2e-standard.md +33 -0
- package/assets/skill/references/env-contract-standard.md +30 -0
- package/assets/skill/references/monkey-operation-standard.md +32 -0
- package/assets/skill/references/qa-gates.md +37 -0
- package/assets/skill/references/sdd-tdd-policy.md +53 -0
- package/assets/skill/references/spec-drift-policy.md +28 -0
- package/assets/skill/references/stress-soak-standard.md +42 -0
- package/assets/skill/references/visual-review-standard.md +27 -0
- package/assets/skill/references/workflow-router.md +34 -0
- package/assets/skill/scripts/detect_project_profile.py +61 -0
- package/assets/skill/scripts/generate_change_scaffold.py +38 -0
- package/assets/skill/scripts/validate_ci_gates.py +14 -0
- package/assets/skill/scripts/validate_contracts.py +13 -0
- package/assets/skill/scripts/validate_env_contract.py +16 -0
- package/assets/skill/scripts/validate_spec_traceability.py +18 -0
- package/assets/skill/templates/archive.md +17 -0
- package/assets/skill/templates/change-classification.md +48 -0
- package/assets/skill/templates/change-request.md +15 -0
- package/assets/skill/templates/ci-gates.md +31 -0
- package/assets/skill/templates/contracts.md +37 -0
- package/assets/skill/templates/current-behavior.md +17 -0
- package/assets/skill/templates/design.md +23 -0
- package/assets/skill/templates/monkey-test-report.md +17 -0
- package/assets/skill/templates/project-profile.md +38 -0
- package/assets/skill/templates/proposal.md +17 -0
- package/assets/skill/templates/qa-report.md +26 -0
- package/assets/skill/templates/regression-report.md +21 -0
- package/assets/skill/templates/spec.md +23 -0
- package/assets/skill/templates/stress-soak-report.md +22 -0
- package/assets/skill/templates/tasks.md +43 -0
- package/assets/skill/templates/test-plan.md +31 -0
- package/assets/skill/templates/visual-review-report.md +33 -0
- package/assets/specs-templates/archive.md +17 -0
- package/assets/specs-templates/change-classification.md +48 -0
- package/assets/specs-templates/change-request.md +15 -0
- package/assets/specs-templates/ci-gates.md +31 -0
- package/assets/specs-templates/contracts.md +37 -0
- package/assets/specs-templates/current-behavior.md +17 -0
- package/assets/specs-templates/design.md +23 -0
- package/assets/specs-templates/monkey-test-report.md +17 -0
- package/assets/specs-templates/project-profile.md +38 -0
- package/assets/specs-templates/proposal.md +17 -0
- package/assets/specs-templates/qa-report.md +26 -0
- package/assets/specs-templates/regression-report.md +21 -0
- package/assets/specs-templates/spec.md +23 -0
- package/assets/specs-templates/stress-soak-report.md +22 -0
- package/assets/specs-templates/tasks.md +43 -0
- package/assets/specs-templates/test-plan.md +31 -0
- package/assets/specs-templates/visual-review-report.md +33 -0
- package/assets/tests-templates/data-boundary/malformed-data.spec.md +14 -0
- package/assets/tests-templates/e2e/critical-journey.spec.md +13 -0
- package/assets/tests-templates/monkey/operation-sequence.spec.md +11 -0
- package/assets/tests-templates/resilience/api-failure.spec.md +12 -0
- package/assets/tests-templates/soak/soak-profile.md +15 -0
- package/assets/tests-templates/stress/load-profile.md +15 -0
- package/bin/cdd.js +2 -0
- package/dist/cli/index.js +336 -0
- package/package.json +48 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Detect a repository profile and print Markdown."""
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import argparse
|
|
5
|
+
|
|
6
|
+
FRONTEND_MARKERS = ['package.json', 'vite.config.js', 'vite.config.ts', 'next.config.js', 'tailwind.config.js', 'tailwind.config.ts']
|
|
7
|
+
BACKEND_MARKERS = ['pyproject.toml', 'requirements.txt', 'app.py', 'main.py', 'manage.py', 'pom.xml', 'build.gradle']
|
|
8
|
+
CI_MARKERS = ['.github/workflows', '.gitlab-ci.yml', 'bitbucket-pipelines.yml', '.circleci']
|
|
9
|
+
CONTRACT_DIRS = ['contracts', 'contract']
|
|
10
|
+
|
|
11
|
+
def exists(root: Path, rel: str) -> bool:
|
|
12
|
+
return (root / rel).exists()
|
|
13
|
+
|
|
14
|
+
def list_existing(root: Path, rels):
|
|
15
|
+
return [r for r in rels if exists(root, r)]
|
|
16
|
+
|
|
17
|
+
def detect_commands(root: Path):
|
|
18
|
+
commands = {}
|
|
19
|
+
pkg = root / 'package.json'
|
|
20
|
+
if pkg.exists():
|
|
21
|
+
text = pkg.read_text(encoding='utf-8', errors='ignore')
|
|
22
|
+
for script in ['dev','build','test','lint','typecheck','e2e']:
|
|
23
|
+
if f'"{script}"' in text:
|
|
24
|
+
commands[script] = f'npm run {script}'
|
|
25
|
+
if (root / 'pyproject.toml').exists() or (root / 'pytest.ini').exists() or (root / 'tests').exists():
|
|
26
|
+
commands.setdefault('unit', 'pytest')
|
|
27
|
+
return commands
|
|
28
|
+
|
|
29
|
+
def main():
|
|
30
|
+
ap = argparse.ArgumentParser()
|
|
31
|
+
ap.add_argument('root', nargs='?', default='.')
|
|
32
|
+
ap.add_argument('--write', help='optional output markdown path')
|
|
33
|
+
args = ap.parse_args()
|
|
34
|
+
root = Path(args.root).resolve()
|
|
35
|
+
frontend = list_existing(root, FRONTEND_MARKERS)
|
|
36
|
+
backend = list_existing(root, BACKEND_MARKERS)
|
|
37
|
+
ci = list_existing(root, CI_MARKERS)
|
|
38
|
+
contracts = [d for d in CONTRACT_DIRS if (root/d).exists()]
|
|
39
|
+
tests = [p for p in ['tests','frontend/tests','e2e','playwright.config.ts','playwright.config.js'] if (root/p).exists()]
|
|
40
|
+
commands = detect_commands(root)
|
|
41
|
+
lines = ['# Project Profile', '', f'## Root', str(root), '', '## Detected Markers']
|
|
42
|
+
lines += ['- frontend: ' + (', '.join(frontend) if frontend else 'none detected')]
|
|
43
|
+
lines += ['- backend: ' + (', '.join(backend) if backend else 'none detected')]
|
|
44
|
+
lines += ['- contracts: ' + (', '.join(contracts) if contracts else 'none detected')]
|
|
45
|
+
lines += ['- tests: ' + (', '.join(tests) if tests else 'none detected')]
|
|
46
|
+
lines += ['- ci/cd: ' + (', '.join(ci) if ci else 'none detected')]
|
|
47
|
+
lines += ['', '## Suggested Commands']
|
|
48
|
+
if commands:
|
|
49
|
+
lines += [f'- {k}: `{v}`' for k,v in sorted(commands.items())]
|
|
50
|
+
else:
|
|
51
|
+
lines += ['- none detected; inspect README/CI manually']
|
|
52
|
+
lines += ['', '## Missing Standard Surfaces']
|
|
53
|
+
if not contracts: lines.append('- contracts directory not detected')
|
|
54
|
+
if not ci: lines.append('- CI/CD workflow not detected')
|
|
55
|
+
if not tests: lines.append('- tests not detected')
|
|
56
|
+
out='\n'.join(lines)+'\n'
|
|
57
|
+
if args.write:
|
|
58
|
+
Path(args.write).write_text(out, encoding='utf-8')
|
|
59
|
+
print(out)
|
|
60
|
+
if __name__ == '__main__':
|
|
61
|
+
main()
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Generate a specs/changes/<change-id> scaffold from bundled templates."""
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import argparse
|
|
5
|
+
import shutil
|
|
6
|
+
|
|
7
|
+
def main():
|
|
8
|
+
ap=argparse.ArgumentParser()
|
|
9
|
+
ap.add_argument('change_id')
|
|
10
|
+
ap.add_argument('--root', default='.')
|
|
11
|
+
ap.add_argument('--templates', default=None)
|
|
12
|
+
args=ap.parse_args()
|
|
13
|
+
root=Path(args.root).resolve()
|
|
14
|
+
templates=Path(args.templates).resolve() if args.templates else Path(__file__).resolve().parents[1]/'templates'
|
|
15
|
+
dest=root/'specs'/'changes'/args.change_id
|
|
16
|
+
dest.mkdir(parents=True, exist_ok=False)
|
|
17
|
+
mapping={
|
|
18
|
+
'change-request.md':'request.md',
|
|
19
|
+
'change-classification.md':'classification.md',
|
|
20
|
+
'current-behavior.md':'current-behavior.md',
|
|
21
|
+
'proposal.md':'proposal.md',
|
|
22
|
+
'spec.md':'spec.md',
|
|
23
|
+
'design.md':'design.md',
|
|
24
|
+
'contracts.md':'contracts.md',
|
|
25
|
+
'test-plan.md':'test-plan.md',
|
|
26
|
+
'ci-gates.md':'ci-gates.md',
|
|
27
|
+
'tasks.md':'tasks.md',
|
|
28
|
+
'qa-report.md':'qa-report.md',
|
|
29
|
+
'regression-report.md':'regression-report.md',
|
|
30
|
+
'archive.md':'archive.md',
|
|
31
|
+
}
|
|
32
|
+
for src,dst in mapping.items():
|
|
33
|
+
s=templates/src
|
|
34
|
+
if s.exists():
|
|
35
|
+
shutil.copyfile(s, dest/dst)
|
|
36
|
+
print(f'created {dest}')
|
|
37
|
+
if __name__ == '__main__':
|
|
38
|
+
main()
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Basic ci-gates.md validation."""
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import argparse, sys
|
|
5
|
+
REQUIRED_TERMS=['required gates','tier','trigger','workflow','promotion policy','rollback policy']
|
|
6
|
+
def main():
|
|
7
|
+
ap=argparse.ArgumentParser(); ap.add_argument('path')
|
|
8
|
+
args=ap.parse_args(); p=Path(args.path)
|
|
9
|
+
if not p.exists(): print(f'{p} not found'); sys.exit(1)
|
|
10
|
+
text=p.read_text(encoding='utf-8', errors='ignore').lower()
|
|
11
|
+
missing=[t for t in REQUIRED_TERMS if t not in text]
|
|
12
|
+
if missing: print('ci-gates missing terms: '+', '.join(missing)); sys.exit(1)
|
|
13
|
+
print('CI gates basic validation passed.')
|
|
14
|
+
if __name__=='__main__': main()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Check for required contract surfaces."""
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import argparse, sys
|
|
5
|
+
REQUIRED=['contracts/api/api-contract.md','contracts/css/css-contract.md','contracts/env/env-contract.md','contracts/data/data-shape-contract.md','contracts/business/business-rules.md','contracts/ci/ci-gate-contract.md']
|
|
6
|
+
def main():
|
|
7
|
+
ap=argparse.ArgumentParser(); ap.add_argument('root', nargs='?', default='.')
|
|
8
|
+
args=ap.parse_args(); root=Path(args.root)
|
|
9
|
+
missing=[p for p in REQUIRED if not (root/p).exists()]
|
|
10
|
+
if missing:
|
|
11
|
+
print('Missing contract files:'); [print(f'- {p}') for p in missing]; sys.exit(1)
|
|
12
|
+
print('All required contract files are present.')
|
|
13
|
+
if __name__=='__main__': main()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Basic env contract validation."""
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import argparse, sys
|
|
5
|
+
REQUIRED_COLUMNS=['name','scope','required','secret','default','example','validation']
|
|
6
|
+
def main():
|
|
7
|
+
ap=argparse.ArgumentParser(); ap.add_argument('path', nargs='?', default='contracts/env/env-contract.md')
|
|
8
|
+
args=ap.parse_args(); p=Path(args.path)
|
|
9
|
+
if not p.exists(): print(f'{p} not found'); sys.exit(1)
|
|
10
|
+
text=p.read_text(encoding='utf-8', errors='ignore').lower()
|
|
11
|
+
missing=[c for c in REQUIRED_COLUMNS if c not in text]
|
|
12
|
+
if missing: print('Env contract missing columns/terms: '+', '.join(missing)); sys.exit(1)
|
|
13
|
+
if 'vite_' not in text and 'next_public_' not in text and 'public_' not in text:
|
|
14
|
+
print('Warning: public frontend env policy not found.')
|
|
15
|
+
print('Env contract basic validation passed.')
|
|
16
|
+
if __name__=='__main__': main()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Coarse traceability check for a change folder."""
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import argparse, sys
|
|
5
|
+
REQUIRED=['classification.md','test-plan.md','ci-gates.md','tasks.md']
|
|
6
|
+
def main():
|
|
7
|
+
ap=argparse.ArgumentParser(); ap.add_argument('change_dir')
|
|
8
|
+
args=ap.parse_args(); d=Path(args.change_dir)
|
|
9
|
+
if not d.exists(): print(f'{d} not found'); sys.exit(1)
|
|
10
|
+
missing=[f for f in REQUIRED if not (d/f).exists()]
|
|
11
|
+
if missing: print('Missing required change artifacts: '+', '.join(missing)); sys.exit(1)
|
|
12
|
+
text='\n'.join((d/f).read_text(encoding='utf-8', errors='ignore') for f in REQUIRED)
|
|
13
|
+
warnings=[]
|
|
14
|
+
for term in ['contract','test','ci','gate']:
|
|
15
|
+
if term not in text.lower(): warnings.append(term)
|
|
16
|
+
if warnings: print('Warning: weak traceability terms: '+', '.join(warnings))
|
|
17
|
+
print('Change traceability basic validation passed.')
|
|
18
|
+
if __name__=='__main__': main()
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Change Classification
|
|
2
|
+
|
|
3
|
+
## Change Types
|
|
4
|
+
- primary:
|
|
5
|
+
- secondary:
|
|
6
|
+
|
|
7
|
+
## Risk Level
|
|
8
|
+
- low / medium / high / critical
|
|
9
|
+
|
|
10
|
+
## Impact Radius
|
|
11
|
+
- isolated / module-level / cross-module / system-wide
|
|
12
|
+
|
|
13
|
+
## Required Artifacts
|
|
14
|
+
| artifact | required | reason |
|
|
15
|
+
|---|---:|---|
|
|
16
|
+
| current-behavior.md | | |
|
|
17
|
+
| proposal.md | | |
|
|
18
|
+
| spec.md | | |
|
|
19
|
+
| design.md | | |
|
|
20
|
+
| contracts.md | | |
|
|
21
|
+
| test-plan.md | yes | every implementation change requires test planning |
|
|
22
|
+
| ci-gates.md | yes | every implementation change requires CI/CD gate planning |
|
|
23
|
+
| qa-report.md | | |
|
|
24
|
+
| regression-report.md | | |
|
|
25
|
+
|
|
26
|
+
## Required Contracts
|
|
27
|
+
- API:
|
|
28
|
+
- CSS/UI:
|
|
29
|
+
- Env:
|
|
30
|
+
- Data shape:
|
|
31
|
+
- Business logic:
|
|
32
|
+
- CI/CD:
|
|
33
|
+
|
|
34
|
+
## Required Test Families
|
|
35
|
+
- unit:
|
|
36
|
+
- contract:
|
|
37
|
+
- integration:
|
|
38
|
+
- E2E:
|
|
39
|
+
- visual:
|
|
40
|
+
- data-boundary:
|
|
41
|
+
- resilience:
|
|
42
|
+
- fuzz/monkey:
|
|
43
|
+
- stress:
|
|
44
|
+
- soak:
|
|
45
|
+
|
|
46
|
+
## Required Agents
|
|
47
|
+
|
|
48
|
+
## Assumptions / Clarifications
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# CI/CD Gate Plan
|
|
2
|
+
|
|
3
|
+
## Change ID
|
|
4
|
+
|
|
5
|
+
## Required Gates
|
|
6
|
+
| gate | tier | required | trigger | command/workflow | expected artifact |
|
|
7
|
+
|---|---:|---:|---|---|---|
|
|
8
|
+
| lint | 1 | yes | pull_request | | |
|
|
9
|
+
| build | 1 | yes | pull_request | | |
|
|
10
|
+
| unit | 1 | yes | pull_request | | |
|
|
11
|
+
| contract | 1 | conditional | pull_request | | |
|
|
12
|
+
| integration | 1/3 | conditional | pull_request/nightly | | |
|
|
13
|
+
| e2e-critical | 1 | conditional | pull_request | | |
|
|
14
|
+
| visual | 2 | conditional | pull_request | | |
|
|
15
|
+
| data-boundary | 1 | conditional | pull_request | | |
|
|
16
|
+
| resilience | 1/3 | conditional | pull_request/nightly | | |
|
|
17
|
+
| fuzz/monkey | 1/3 | conditional | pull_request/nightly | | |
|
|
18
|
+
| stress | 4/5 | conditional | weekly/manual | | |
|
|
19
|
+
| soak | 4/5 | conditional | weekly/manual | | |
|
|
20
|
+
|
|
21
|
+
## New Workflow Changes
|
|
22
|
+
|
|
23
|
+
## Required Check Policy
|
|
24
|
+
|
|
25
|
+
## Informational Gate Promotion Policy
|
|
26
|
+
|
|
27
|
+
## Rollback Policy
|
|
28
|
+
|
|
29
|
+
## Artifact Retention
|
|
30
|
+
|
|
31
|
+
## Merge Eligibility Decision
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Contract Change Report
|
|
2
|
+
|
|
3
|
+
## API Contract
|
|
4
|
+
- changed:
|
|
5
|
+
- files:
|
|
6
|
+
- compatibility:
|
|
7
|
+
- tests:
|
|
8
|
+
|
|
9
|
+
## CSS/UI Contract
|
|
10
|
+
- changed:
|
|
11
|
+
- files:
|
|
12
|
+
- visual evidence required:
|
|
13
|
+
- tests:
|
|
14
|
+
|
|
15
|
+
## Env Contract
|
|
16
|
+
- changed:
|
|
17
|
+
- variables:
|
|
18
|
+
- public/private scope:
|
|
19
|
+
- deployment impact:
|
|
20
|
+
- tests:
|
|
21
|
+
|
|
22
|
+
## Data Shape Contract
|
|
23
|
+
- changed:
|
|
24
|
+
- required columns/types:
|
|
25
|
+
- malformed data behavior:
|
|
26
|
+
- tests:
|
|
27
|
+
|
|
28
|
+
## Business Logic Contract
|
|
29
|
+
- changed:
|
|
30
|
+
- decision table:
|
|
31
|
+
- regression tests:
|
|
32
|
+
|
|
33
|
+
## CI/CD Contract
|
|
34
|
+
- changed:
|
|
35
|
+
- gates:
|
|
36
|
+
- required checks:
|
|
37
|
+
- promotion policy:
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Technical Design
|
|
2
|
+
|
|
3
|
+
## Architecture Summary
|
|
4
|
+
|
|
5
|
+
## Affected Components
|
|
6
|
+
|
|
7
|
+
## API Design
|
|
8
|
+
|
|
9
|
+
## Data / Schema Design
|
|
10
|
+
|
|
11
|
+
## UI / UX Design
|
|
12
|
+
|
|
13
|
+
## Env / Config Design
|
|
14
|
+
|
|
15
|
+
## Error Handling
|
|
16
|
+
|
|
17
|
+
## Performance Considerations
|
|
18
|
+
|
|
19
|
+
## Security Considerations
|
|
20
|
+
|
|
21
|
+
## Deployment / Rollback
|
|
22
|
+
|
|
23
|
+
## Architecture Decision Notes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Monkey Operation Test Report
|
|
2
|
+
|
|
3
|
+
## Target Feature
|
|
4
|
+
|
|
5
|
+
## Preventive Spec Cases
|
|
6
|
+
|
|
7
|
+
## Exploratory Operation Sequences
|
|
8
|
+
| id | sequence | expected safe outcome | result |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
|
|
11
|
+
## Fuzz Payloads / Malformed Data
|
|
12
|
+
|
|
13
|
+
## Findings
|
|
14
|
+
|
|
15
|
+
## Required Fixes
|
|
16
|
+
|
|
17
|
+
## Regression Tests Added
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Project Profile
|
|
2
|
+
|
|
3
|
+
## Project Type
|
|
4
|
+
|
|
5
|
+
## Detected Stack
|
|
6
|
+
- languages:
|
|
7
|
+
- frontend:
|
|
8
|
+
- backend:
|
|
9
|
+
- database:
|
|
10
|
+
- cache/queue:
|
|
11
|
+
- storage:
|
|
12
|
+
- auth:
|
|
13
|
+
- styling:
|
|
14
|
+
- test frameworks:
|
|
15
|
+
- build/deploy:
|
|
16
|
+
|
|
17
|
+
## Important Paths
|
|
18
|
+
|
|
19
|
+
## Commands
|
|
20
|
+
- install:
|
|
21
|
+
- dev:
|
|
22
|
+
- build:
|
|
23
|
+
- lint:
|
|
24
|
+
- typecheck:
|
|
25
|
+
- unit:
|
|
26
|
+
- integration:
|
|
27
|
+
- e2e:
|
|
28
|
+
- contract:
|
|
29
|
+
- stress:
|
|
30
|
+
- soak:
|
|
31
|
+
|
|
32
|
+
## Existing Contracts
|
|
33
|
+
|
|
34
|
+
## CI/CD Workflows
|
|
35
|
+
|
|
36
|
+
## Missing or Weak Standards
|
|
37
|
+
|
|
38
|
+
## Recommended Next Steps
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# QA Report
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
## Gate Results
|
|
6
|
+
| gate | command/workflow | result | artifact/log |
|
|
7
|
+
|---|---|---|---|
|
|
8
|
+
|
|
9
|
+
## Functional Verification
|
|
10
|
+
|
|
11
|
+
## Contract Verification
|
|
12
|
+
|
|
13
|
+
## Visual / UX Verification
|
|
14
|
+
|
|
15
|
+
## E2E / Resilience Verification
|
|
16
|
+
|
|
17
|
+
## Stress / Soak Verification
|
|
18
|
+
|
|
19
|
+
## Known Risks
|
|
20
|
+
|
|
21
|
+
## Failures and Fixback Routing
|
|
22
|
+
| failure | evidence | owner | required fix |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
|
|
25
|
+
## Decision
|
|
26
|
+
approved / blocked / approved-with-risk
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Regression Report
|
|
2
|
+
|
|
3
|
+
## Changed Areas
|
|
4
|
+
|
|
5
|
+
## Directly Affected Features
|
|
6
|
+
|
|
7
|
+
## Indirectly Affected Features
|
|
8
|
+
|
|
9
|
+
## Critical User Journeys Re-tested
|
|
10
|
+
|
|
11
|
+
## API Regression
|
|
12
|
+
|
|
13
|
+
## UI Regression
|
|
14
|
+
|
|
15
|
+
## Data / Business Logic Regression
|
|
16
|
+
|
|
17
|
+
## CI/CD Regression
|
|
18
|
+
|
|
19
|
+
## Spec Drift Findings
|
|
20
|
+
|
|
21
|
+
## Decision
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Specification
|
|
2
|
+
|
|
3
|
+
## User Stories / Scenarios
|
|
4
|
+
|
|
5
|
+
### Scenario 1
|
|
6
|
+
Given
|
|
7
|
+
When
|
|
8
|
+
Then
|
|
9
|
+
|
|
10
|
+
## Functional Requirements
|
|
11
|
+
|
|
12
|
+
## Non-functional Requirements
|
|
13
|
+
|
|
14
|
+
## Edge Cases
|
|
15
|
+
|
|
16
|
+
## Acceptance Criteria
|
|
17
|
+
|
|
18
|
+
| id | criterion | measurable signal |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
|
|
21
|
+
## Clarifications
|
|
22
|
+
|
|
23
|
+
## Open Risks
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Stress / Soak Report
|
|
2
|
+
|
|
3
|
+
## Workload Model
|
|
4
|
+
|
|
5
|
+
## Environment
|
|
6
|
+
|
|
7
|
+
## Duration
|
|
8
|
+
|
|
9
|
+
## Metrics Collected
|
|
10
|
+
|
|
11
|
+
## Thresholds
|
|
12
|
+
|
|
13
|
+
## Results
|
|
14
|
+
| metric | threshold | observed | result |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
|
|
17
|
+
## Failures / Degradation
|
|
18
|
+
|
|
19
|
+
## Artifacts
|
|
20
|
+
|
|
21
|
+
## Recommendation
|
|
22
|
+
pass / fail / repeat-with-adjusted-load / promote-to-gate
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Tasks
|
|
2
|
+
|
|
3
|
+
## 1. Preparation
|
|
4
|
+
- [ ] 1.1 Confirm classification and required artifacts
|
|
5
|
+
- [ ] 1.2 Confirm contracts to update
|
|
6
|
+
- [ ] 1.3 Confirm CI/CD gate plan
|
|
7
|
+
|
|
8
|
+
## 2. Contract Updates
|
|
9
|
+
- [ ] 2.1 API contract
|
|
10
|
+
- [ ] 2.2 CSS/UI contract
|
|
11
|
+
- [ ] 2.3 Env contract
|
|
12
|
+
- [ ] 2.4 Data shape contract
|
|
13
|
+
- [ ] 2.5 Business logic contract
|
|
14
|
+
- [ ] 2.6 CI/CD contract
|
|
15
|
+
|
|
16
|
+
## 3. Tests First
|
|
17
|
+
- [ ] 3.1 Unit/contract tests
|
|
18
|
+
- [ ] 3.2 Integration tests
|
|
19
|
+
- [ ] 3.3 E2E/resilience tests
|
|
20
|
+
- [ ] 3.4 Data-boundary/monkey tests
|
|
21
|
+
- [ ] 3.5 Stress/soak tests if required
|
|
22
|
+
|
|
23
|
+
## 4. Implementation
|
|
24
|
+
- [ ] 4.1 Backend
|
|
25
|
+
- [ ] 4.2 Frontend
|
|
26
|
+
- [ ] 4.3 Env/deploy
|
|
27
|
+
- [ ] 4.4 CI/CD workflows
|
|
28
|
+
|
|
29
|
+
## 5. Review
|
|
30
|
+
- [ ] 5.1 UI/UX review
|
|
31
|
+
- [ ] 5.2 Visual review
|
|
32
|
+
- [ ] 5.3 Contract review
|
|
33
|
+
- [ ] 5.4 QA review
|
|
34
|
+
|
|
35
|
+
## 6. Verification
|
|
36
|
+
- [ ] 6.1 Local gates
|
|
37
|
+
- [ ] 6.2 PR required gates
|
|
38
|
+
- [ ] 6.3 Informational gates
|
|
39
|
+
- [ ] 6.4 Nightly/weekly/manual gates if required
|
|
40
|
+
|
|
41
|
+
## 7. Archive
|
|
42
|
+
- [ ] 7.1 Archive change
|
|
43
|
+
- [ ] 7.2 Promote durable learnings to contracts or CLAUDE.md
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Test Plan
|
|
2
|
+
|
|
3
|
+
## Acceptance Criteria Mapping
|
|
4
|
+
| requirement | test family | planned file/spec | expected evidence |
|
|
5
|
+
|---|---|---|---|
|
|
6
|
+
|
|
7
|
+
## Unit Tests
|
|
8
|
+
|
|
9
|
+
## Contract Tests
|
|
10
|
+
|
|
11
|
+
## Integration Tests
|
|
12
|
+
|
|
13
|
+
## E2E Tests
|
|
14
|
+
|
|
15
|
+
## Visual Tests / Review
|
|
16
|
+
|
|
17
|
+
## Data Boundary Tests
|
|
18
|
+
|
|
19
|
+
## Resilience Tests
|
|
20
|
+
|
|
21
|
+
## Fuzz / Monkey Operation Tests
|
|
22
|
+
|
|
23
|
+
## Stress Tests
|
|
24
|
+
|
|
25
|
+
## Soak Tests
|
|
26
|
+
|
|
27
|
+
## Mutation Checks
|
|
28
|
+
|
|
29
|
+
## Commands
|
|
30
|
+
|
|
31
|
+
## CI/CD Gate Mapping
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Visual Review Report
|
|
2
|
+
|
|
3
|
+
## Affected Screens
|
|
4
|
+
|
|
5
|
+
## Viewports Checked
|
|
6
|
+
- desktop:
|
|
7
|
+
- tablet:
|
|
8
|
+
- mobile:
|
|
9
|
+
|
|
10
|
+
## States Checked
|
|
11
|
+
- default:
|
|
12
|
+
- loading:
|
|
13
|
+
- empty:
|
|
14
|
+
- error:
|
|
15
|
+
- disabled:
|
|
16
|
+
- focus/keyboard:
|
|
17
|
+
- long text:
|
|
18
|
+
- no permission:
|
|
19
|
+
|
|
20
|
+
## Evidence
|
|
21
|
+
- screenshots:
|
|
22
|
+
- videos:
|
|
23
|
+
- traces:
|
|
24
|
+
- diff reports:
|
|
25
|
+
|
|
26
|
+
## CSS Contract Findings
|
|
27
|
+
|
|
28
|
+
## Accessibility Findings
|
|
29
|
+
|
|
30
|
+
## Required Fixes
|
|
31
|
+
|
|
32
|
+
## Decision
|
|
33
|
+
approved / changes-required
|