soloforge 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/LICENSE +21 -0
- package/README.md +203 -0
- package/dist/adapters/claude_code/claude_md.d.ts +3 -0
- package/dist/adapters/claude_code/claude_md.d.ts.map +1 -0
- package/dist/adapters/claude_code/claude_md.js +79 -0
- package/dist/adapters/claude_code/claude_md.js.map +1 -0
- package/dist/adapters/claude_code/hooks.d.ts +3 -0
- package/dist/adapters/claude_code/hooks.d.ts.map +1 -0
- package/dist/adapters/claude_code/hooks.js +30 -0
- package/dist/adapters/claude_code/hooks.js.map +1 -0
- package/dist/adapters/claude_code/server.d.ts +10 -0
- package/dist/adapters/claude_code/server.d.ts.map +1 -0
- package/dist/adapters/claude_code/server.js +75 -0
- package/dist/adapters/claude_code/server.js.map +1 -0
- package/dist/adapters/claude_code/tools.d.ts +15 -0
- package/dist/adapters/claude_code/tools.d.ts.map +1 -0
- package/dist/adapters/claude_code/tools.js +758 -0
- package/dist/adapters/claude_code/tools.js.map +1 -0
- package/dist/adapters/trae/trae_config.d.ts +2 -0
- package/dist/adapters/trae/trae_config.d.ts.map +1 -0
- package/dist/adapters/trae/trae_config.js +22 -0
- package/dist/adapters/trae/trae_config.js.map +1 -0
- package/dist/adapters/trae/trae_rules.d.ts +3 -0
- package/dist/adapters/trae/trae_rules.d.ts.map +1 -0
- package/dist/adapters/trae/trae_rules.js +85 -0
- package/dist/adapters/trae/trae_rules.js.map +1 -0
- package/dist/bin/soloforge.d.ts +3 -0
- package/dist/bin/soloforge.d.ts.map +1 -0
- package/dist/bin/soloforge.js +353 -0
- package/dist/bin/soloforge.js.map +1 -0
- package/dist/engine/adr_recorder.d.ts +13 -0
- package/dist/engine/adr_recorder.d.ts.map +1 -0
- package/dist/engine/adr_recorder.js +132 -0
- package/dist/engine/adr_recorder.js.map +1 -0
- package/dist/engine/change_coordinator.d.ts +17 -0
- package/dist/engine/change_coordinator.d.ts.map +1 -0
- package/dist/engine/change_coordinator.js +138 -0
- package/dist/engine/change_coordinator.js.map +1 -0
- package/dist/engine/classifier.d.ts +7 -0
- package/dist/engine/classifier.d.ts.map +1 -0
- package/dist/engine/classifier.js +135 -0
- package/dist/engine/classifier.js.map +1 -0
- package/dist/engine/code_reviewer.d.ts +15 -0
- package/dist/engine/code_reviewer.d.ts.map +1 -0
- package/dist/engine/code_reviewer.js +371 -0
- package/dist/engine/code_reviewer.js.map +1 -0
- package/dist/engine/confidence_scorer.d.ts +11 -0
- package/dist/engine/confidence_scorer.d.ts.map +1 -0
- package/dist/engine/confidence_scorer.js +30 -0
- package/dist/engine/confidence_scorer.js.map +1 -0
- package/dist/engine/contract_guard.d.ts +10 -0
- package/dist/engine/contract_guard.d.ts.map +1 -0
- package/dist/engine/contract_guard.js +471 -0
- package/dist/engine/contract_guard.js.map +1 -0
- package/dist/engine/convention_detector.d.ts +7 -0
- package/dist/engine/convention_detector.d.ts.map +1 -0
- package/dist/engine/convention_detector.js +93 -0
- package/dist/engine/convention_detector.js.map +1 -0
- package/dist/engine/debt_reporter.d.ts +4 -0
- package/dist/engine/debt_reporter.d.ts.map +1 -0
- package/dist/engine/debt_reporter.js +67 -0
- package/dist/engine/debt_reporter.js.map +1 -0
- package/dist/engine/debt_tracker.d.ts +20 -0
- package/dist/engine/debt_tracker.d.ts.map +1 -0
- package/dist/engine/debt_tracker.js +152 -0
- package/dist/engine/debt_tracker.js.map +1 -0
- package/dist/engine/debugger.d.ts +3 -0
- package/dist/engine/debugger.d.ts.map +1 -0
- package/dist/engine/debugger.js +291 -0
- package/dist/engine/debugger.js.map +1 -0
- package/dist/engine/delivery.d.ts +15 -0
- package/dist/engine/delivery.d.ts.map +1 -0
- package/dist/engine/delivery.js +182 -0
- package/dist/engine/delivery.js.map +1 -0
- package/dist/engine/dependency_scanner.d.ts +13 -0
- package/dist/engine/dependency_scanner.d.ts.map +1 -0
- package/dist/engine/dependency_scanner.js +275 -0
- package/dist/engine/dependency_scanner.js.map +1 -0
- package/dist/engine/evolver.d.ts +15 -0
- package/dist/engine/evolver.d.ts.map +1 -0
- package/dist/engine/evolver.js +167 -0
- package/dist/engine/evolver.js.map +1 -0
- package/dist/engine/failure_classifier.d.ts +11 -0
- package/dist/engine/failure_classifier.d.ts.map +1 -0
- package/dist/engine/failure_classifier.js +120 -0
- package/dist/engine/failure_classifier.js.map +1 -0
- package/dist/engine/feasibility_checker.d.ts +6 -0
- package/dist/engine/feasibility_checker.d.ts.map +1 -0
- package/dist/engine/feasibility_checker.js +88 -0
- package/dist/engine/feasibility_checker.js.map +1 -0
- package/dist/engine/git_deps.d.ts +37 -0
- package/dist/engine/git_deps.d.ts.map +1 -0
- package/dist/engine/git_deps.js +3 -0
- package/dist/engine/git_deps.js.map +1 -0
- package/dist/engine/impact_analyzer.d.ts +10 -0
- package/dist/engine/impact_analyzer.d.ts.map +1 -0
- package/dist/engine/impact_analyzer.js +171 -0
- package/dist/engine/impact_analyzer.js.map +1 -0
- package/dist/engine/intent_expander.d.ts +17 -0
- package/dist/engine/intent_expander.d.ts.map +1 -0
- package/dist/engine/intent_expander.js +447 -0
- package/dist/engine/intent_expander.js.map +1 -0
- package/dist/engine/knowledge_manager.d.ts +76 -0
- package/dist/engine/knowledge_manager.d.ts.map +1 -0
- package/dist/engine/knowledge_manager.js +781 -0
- package/dist/engine/knowledge_manager.js.map +1 -0
- package/dist/engine/migration_guard.d.ts +3 -0
- package/dist/engine/migration_guard.d.ts.map +1 -0
- package/dist/engine/migration_guard.js +235 -0
- package/dist/engine/migration_guard.js.map +1 -0
- package/dist/engine/observability.d.ts +33 -0
- package/dist/engine/observability.d.ts.map +1 -0
- package/dist/engine/observability.js +312 -0
- package/dist/engine/observability.js.map +1 -0
- package/dist/engine/onboarding.d.ts +27 -0
- package/dist/engine/onboarding.d.ts.map +1 -0
- package/dist/engine/onboarding.js +362 -0
- package/dist/engine/onboarding.js.map +1 -0
- package/dist/engine/prompt_experiment.d.ts +18 -0
- package/dist/engine/prompt_experiment.d.ts.map +1 -0
- package/dist/engine/prompt_experiment.js +127 -0
- package/dist/engine/prompt_experiment.js.map +1 -0
- package/dist/engine/resilience.d.ts +20 -0
- package/dist/engine/resilience.d.ts.map +1 -0
- package/dist/engine/resilience.js +210 -0
- package/dist/engine/resilience.js.map +1 -0
- package/dist/engine/scaffolder.d.ts +9 -0
- package/dist/engine/scaffolder.d.ts.map +1 -0
- package/dist/engine/scaffolder.js +222 -0
- package/dist/engine/scaffolder.js.map +1 -0
- package/dist/engine/scope_controller.d.ts +3 -0
- package/dist/engine/scope_controller.d.ts.map +1 -0
- package/dist/engine/scope_controller.js +121 -0
- package/dist/engine/scope_controller.js.map +1 -0
- package/dist/engine/task_context.d.ts +34 -0
- package/dist/engine/task_context.d.ts.map +1 -0
- package/dist/engine/task_context.js +321 -0
- package/dist/engine/task_context.js.map +1 -0
- package/dist/engine/task_planner.d.ts +11 -0
- package/dist/engine/task_planner.d.ts.map +1 -0
- package/dist/engine/task_planner.js +267 -0
- package/dist/engine/task_planner.js.map +1 -0
- package/dist/engine/team_awareness.d.ts +12 -0
- package/dist/engine/team_awareness.d.ts.map +1 -0
- package/dist/engine/team_awareness.js +121 -0
- package/dist/engine/team_awareness.js.map +1 -0
- package/dist/engine/test_generator.d.ts +9 -0
- package/dist/engine/test_generator.d.ts.map +1 -0
- package/dist/engine/test_generator.js +241 -0
- package/dist/engine/test_generator.js.map +1 -0
- package/dist/engine/test_quality.d.ts +9 -0
- package/dist/engine/test_quality.d.ts.map +1 -0
- package/dist/engine/test_quality.js +256 -0
- package/dist/engine/test_quality.js.map +1 -0
- package/dist/engine/traceability.d.ts +3 -0
- package/dist/engine/traceability.d.ts.map +1 -0
- package/dist/engine/traceability.js +137 -0
- package/dist/engine/traceability.js.map +1 -0
- package/dist/engine/verifier.d.ts +3 -0
- package/dist/engine/verifier.d.ts.map +1 -0
- package/dist/engine/verifier.js +202 -0
- package/dist/engine/verifier.js.map +1 -0
- package/dist/engine/workspace_manager.d.ts +29 -0
- package/dist/engine/workspace_manager.d.ts.map +1 -0
- package/dist/engine/workspace_manager.js +77 -0
- package/dist/engine/workspace_manager.js.map +1 -0
- package/dist/git/operations.d.ts +57 -0
- package/dist/git/operations.d.ts.map +1 -0
- package/dist/git/operations.js +215 -0
- package/dist/git/operations.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/conflict_detector.d.ts +6 -0
- package/dist/knowledge/conflict_detector.d.ts.map +1 -0
- package/dist/knowledge/conflict_detector.js +19 -0
- package/dist/knowledge/conflict_detector.js.map +1 -0
- package/dist/knowledge/health_checker.d.ts +10 -0
- package/dist/knowledge/health_checker.d.ts.map +1 -0
- package/dist/knowledge/health_checker.js +61 -0
- package/dist/knowledge/health_checker.js.map +1 -0
- package/dist/knowledge/index_manager.d.ts +35 -0
- package/dist/knowledge/index_manager.d.ts.map +1 -0
- package/dist/knowledge/index_manager.js +209 -0
- package/dist/knowledge/index_manager.js.map +1 -0
- package/dist/knowledge/loader.d.ts +13 -0
- package/dist/knowledge/loader.d.ts.map +1 -0
- package/dist/knowledge/loader.js +161 -0
- package/dist/knowledge/loader.js.map +1 -0
- package/dist/knowledge/writer.d.ts +15 -0
- package/dist/knowledge/writer.d.ts.map +1 -0
- package/dist/knowledge/writer.js +98 -0
- package/dist/knowledge/writer.js.map +1 -0
- package/dist/types.d.ts +724 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +54 -0
- package/templates/config.yaml +53 -0
- package/templates/knowledge/acceptance_templates/Bug/345/210/206/346/236/220/346/250/241/347/211/210.md +45 -0
- package/templates/knowledge/acceptance_templates/POC/347/273/223/350/256/272/346/250/241/347/211/210.md +39 -0
- package/templates/knowledge/acceptance_templates//345/211/215/347/253/257/351/241/265/351/235/242/351/252/214/346/224/266/346/270/205/345/215/225.md +27 -0
- package/templates/knowledge/acceptance_templates//345/216/237/345/236/213/350/257/264/346/230/216/346/250/241/347/211/210.md +180 -0
- package/templates/knowledge/acceptance_templates//345/220/216/347/253/257API/351/252/214/346/224/266/346/270/205/345/215/225.md +26 -0
- package/templates/knowledge/acceptance_templates//345/256/211/345/205/250/345/256/241/350/256/241/346/250/241/347/211/210.md +51 -0
- package/templates/knowledge/acceptance_templates//346/200/247/350/203/275/345/210/206/346/236/220/346/250/241/347/211/210.md +45 -0
- package/templates/knowledge/acceptance_templates//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210/346/250/241/347/211/210.md +45 -0
- package/templates/knowledge/acceptance_templates//346/216/245/345/217/243/350/256/276/350/256/241/346/250/241/347/211/210.md +58 -0
- package/templates/knowledge/acceptance_templates//346/225/205/351/232/234/345/244/215/347/233/230/346/250/241/347/211/210.md +53 -0
- package/templates/knowledge/acceptance_templates//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210/346/250/241/347/211/210.md +45 -0
- package/templates/knowledge/acceptance_templates//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/351/252/214/346/224/266/346/270/205/345/215/225.md +24 -0
- package/templates/knowledge/acceptance_templates//346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/347/211/210.md +42 -0
- package/templates/knowledge/acceptance_templates//346/265/213/350/257/225/350/256/241/345/210/222/346/250/241/347/211/210.md +39 -0
- package/templates/knowledge/acceptance_templates//350/257/246/347/273/206/350/256/276/350/256/241/346/250/241/347/211/210.md +40 -0
- package/templates/knowledge/acceptance_templates//350/277/201/347/247/273/350/257/204/344/274/260/346/250/241/347/211/210.md +42 -0
- package/templates/knowledge/acceptance_templates//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md +26 -0
- package/templates/knowledge/acceptance_templates//351/207/215/346/236/204/346/226/271/346/241/210/346/250/241/347/211/210.md +47 -0
- package/templates/knowledge/acceptance_templates//351/234/200/346/261/202/345/210/206/346/236/220/346/250/241/347/211/210.md +44 -0
- package/templates/knowledge/domain//345/244/232/347/247/237/346/210/267.md +35 -0
- package/templates/knowledge/domain//345/256/241/350/256/241/346/227/245/345/277/227.md +34 -0
- package/templates/knowledge/domain//345/257/274/345/205/245/345/257/274/345/207/272/350/247/204/345/210/231.md +37 -0
- package/templates/knowledge/domain//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md +37 -0
- package/templates/knowledge/domain//346/212/245/350/241/250/347/273/237/350/256/241.md +36 -0
- package/templates/knowledge/domain//346/224/257/344/273/230/350/247/204/345/210/231.md +38 -0
- package/templates/knowledge/domain//346/225/260/346/215/256/346/235/203/351/231/220.md +34 -0
- package/templates/knowledge/domain//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +24 -0
- package/templates/knowledge/domain//351/200/232/347/237/245/350/247/204/345/210/231.md +36 -0
- package/templates/knowledge/procedures/Figma/344/272/244/344/273/230/346/265/201/347/250/213.md +35 -0
- package/templates/knowledge/procedures/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +28 -0
- package/templates/knowledge/procedures//344/273/243/347/240/201/351/227/250/347/246/201/346/265/201/347/250/213.md +33 -0
- package/templates/knowledge/procedures//344/273/273/345/212/241/346/213/206/350/247/243/346/265/201/347/250/213.md +31 -0
- package/templates/knowledge/procedures//345/212/237/350/203/275/345/274/200/345/217/221/346/265/201/347/250/213.md +37 -0
- package/templates/knowledge/procedures//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +43 -0
- package/templates/knowledge/procedures//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +27 -0
- package/templates/knowledge/procedures//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +46 -0
- package/templates/knowledge/procedures//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273/346/265/201/347/250/213.md +38 -0
- package/templates/knowledge/procedures//346/236/266/346/236/204/350/256/276/350/256/241/346/265/201/347/250/213.md +30 -0
- package/templates/knowledge/procedures//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +24 -0
- package/templates/knowledge/procedures//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md +40 -0
- package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +45 -0
- package/templates/knowledge/procedures//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/347/250/213.md +33 -0
- package/templates/knowledge/procedures//347/274/272/351/231/267/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +28 -0
- package/templates/knowledge/procedures//350/257/246/347/273/206/350/256/276/350/256/241/346/265/201/347/250/213.md +29 -0
- package/templates/knowledge/procedures//350/260/203/350/257/225/346/216/222/346/237/245/346/265/201/347/250/213.md +43 -0
- package/templates/knowledge/procedures//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +27 -0
- package/templates/knowledge/procedures//351/203/250/347/275/262/345/217/221/345/270/203/346/265/201/347/250/213.md +45 -0
- package/templates/knowledge/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +27 -0
- package/templates/knowledge/procedures//351/233/206/346/210/220/351/252/214/350/257/201/346/265/201/347/250/213.md +36 -0
- package/templates/knowledge/procedures//351/234/200/346/261/202/346/276/204/346/270/205/346/265/201/347/250/213.md +32 -0
- package/templates/knowledge/procedures//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +40 -0
- package/templates/knowledge/procedures//351/252/214/350/257/201/350/256/241/345/210/222/346/265/201/347/250/213.md +32 -0
- package/templates/knowledge/product_profiles/b2b-internal.yaml +35 -0
- package/templates/knowledge/product_profiles/b2c.yaml +37 -0
- package/templates/knowledge/product_profiles/saas.yaml +35 -0
- package/templates/knowledge/review_rules//345/256/211/345/205/250/345/256/241/346/237/245/350/247/204/345/210/231.md +79 -0
- package/templates/knowledge/review_rules//345/271/266/345/217/221/345/256/241/346/237/245/350/247/204/345/210/231.md +67 -0
- package/templates/knowledge/review_rules//346/200/247/350/203/275/345/256/241/346/237/245/350/247/204/345/210/231.md +61 -0
- package/templates/knowledge/review_rules//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245/350/247/204/345/210/231.md +67 -0
- package/templates/knowledge/review_rules//346/236/266/346/236/204/345/256/241/346/237/245/350/247/204/345/210/231.md +62 -0
- package/templates/knowledge/review_rules//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +80 -0
- package/templates/patterns/API/350/256/276/350/256/241/350/247/204/350/214/203.md +31 -0
- package/templates/patterns/Docker/351/203/250/347/275/262/350/247/204/350/214/203.md +31 -0
- package/templates/patterns/Git/346/223/215/344/275/234/350/247/204/350/214/203.md +31 -0
- package/templates/patterns/N/345/212/2401/346/237/245/350/257/242/350/247/204/350/214/203.md +32 -0
- package/templates/patterns/React/345/210/227/350/241/250/350/241/250/346/240/274/350/247/204/350/214/203.md +29 -0
- package/templates/patterns/React/346/216/245/345/217/243/351/233/206/346/210/220/350/247/204/350/214/203.md +28 -0
- package/templates/patterns/React/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +28 -0
- package/templates/patterns/React/347/273/204/344/273/266/350/247/204/350/214/203.md +28 -0
- package/templates/patterns/React/350/241/250/345/215/225/350/247/204/350/214/203.md +29 -0
- package/templates/patterns/React/350/267/257/347/224/261/350/247/204/350/214/203.md +29 -0
- package/templates/patterns/Schema/345/205/274/345/256/271/350/247/204/350/214/203.md +28 -0
- package/templates/patterns/Vue/347/212/266/346/200/201/347/256/241/347/220/206/350/247/204/350/214/203.md +28 -0
- package/templates/patterns/Vue/347/273/204/344/273/266/350/247/204/350/214/203.md +28 -0
- package/templates/patterns/Vue/350/267/257/347/224/261/350/247/204/350/214/203.md +29 -0
- package/templates/patterns//344/272/213/344/273/266/351/251/261/345/212/250/350/247/204/350/214/203.md +32 -0
- package/templates/patterns//344/272/213/345/212/241/346/250/241/345/274/217/350/247/204/350/214/203.md +28 -0
- package/templates/patterns//344/274/230/351/233/205/345/201/234/346/234/272/350/247/204/350/214/203.md +30 -0
- package/templates/patterns//345/205/250/346/240/210/346/265/201/347/250/213/344/277/256/345/244/215.md +31 -0
- package/templates/patterns//345/210/206/351/241/265/346/237/245/350/257/242/350/247/204/350/214/203.md +27 -0
- package/templates/patterns//345/211/215/347/253/257/346/200/247/350/203/275/350/247/204/350/214/203.md +33 -0
- package/templates/patterns//345/221/275/345/220/215/350/247/204/350/214/203.md +32 -0
- package/templates/patterns//345/233/275/351/231/205/345/214/226/350/247/204/350/214/203.md +31 -0
- package/templates/patterns//345/242/236/345/210/240/346/224/271/346/237/245/350/247/204/350/214/203.md +31 -0
- package/templates/patterns//345/244/226/351/203/250/344/276/235/350/265/226/350/247/204/350/214/203.md +29 -0
- package/templates/patterns//345/245/221/347/272/246/345/205/274/345/256/271/350/247/204/350/214/203.md +28 -0
- package/templates/patterns//345/256/232/346/227/266/344/273/273/345/212/241/350/247/204/350/214/203.md +25 -0
- package/templates/patterns//345/256/236/346/227/266/346/216/250/351/200/201/350/247/204/350/214/203.md +33 -0
- package/templates/patterns//345/267/245/347/250/213/347/272/252/345/276/213.md +39 -0
- package/templates/patterns//345/271/266/345/217/221/346/216/247/345/210/266/350/247/204/350/214/203.md +34 -0
- package/templates/patterns//345/274/202/346/255/245/345/257/274/345/207/272/350/247/204/350/214/203.md +27 -0
- package/templates/patterns//346/216/245/345/217/243/345/245/221/347/272/246/350/247/204/350/214/203.md +30 -0
- package/templates/patterns//346/220/234/347/264/242/346/250/241/345/274/217/350/247/204/350/214/203.md +32 -0
- package/templates/patterns//346/225/260/346/215/256/351/232/220/347/247/201/350/247/204/350/214/203.md +31 -0
- package/templates/patterns//346/226/207/344/273/266/344/270/212/344/274/240/350/247/204/350/214/203.md +31 -0
- package/templates/patterns//346/227/240/351/232/234/347/242/215/350/247/204/350/214/203.md +33 -0
- package/templates/patterns//346/227/245/345/277/227/350/247/204/350/214/203.md +31 -0
- package/templates/patterns//346/235/203/351/231/220/350/256/244/350/257/201/350/247/204/350/214/203.md +35 -0
- package/templates/patterns//346/236/266/346/236/204/347/272/242/347/272/277.md +30 -0
- package/templates/patterns//346/265/213/350/257/225/350/264/250/351/207/217/350/247/204/350/214/203.md +30 -0
- package/templates/patterns//347/206/224/346/226/255/351/231/215/347/272/247/350/247/204/350/214/203.md +33 -0
- package/templates/patterns//347/212/266/346/200/201/346/265/201/350/275/254/350/247/204/350/214/203.md +29 -0
- package/templates/patterns//347/272/246/346/235/237/345/256/236/347/216/260/350/247/204/350/214/203.md +32 -0
- package/templates/patterns//347/274/223/345/255/230/347/255/226/347/225/245/350/247/204/350/214/203.md +31 -0
- package/templates/patterns//347/274/226/347/240/201/350/264/250/351/207/217/350/247/204/350/214/203.md +31 -0
- package/templates/patterns//347/274/272/351/231/267/347/256/241/347/220/206/350/247/204/350/214/203.md +30 -0
- package/templates/patterns//350/260/203/350/257/225/346/226/271/346/263/225/350/256/272.md +28 -0
- package/templates/patterns//350/276/223/345/205/245/346/240/241/351/252/214/350/247/204/350/214/203.md +30 -0
- package/templates/patterns//351/224/231/350/257/257/345/244/204/347/220/206/350/247/204/350/214/203.md +32 -0
- package/templates/patterns//351/224/231/350/257/257/350/276/271/347/225/214/350/247/204/350/214/203.md +24 -0
- package/templates/patterns//351/242/206/345/237/237/351/251/261/345/212/250/350/256/276/350/256/241/350/247/204/350/214/203.md +29 -0
- package/templates/scaffolds/react/Form.tsx.hbs +16 -0
- package/templates/scaffolds/react/List.tsx.hbs +28 -0
- package/templates/scaffolds/react/Page.test.tsx.hbs +10 -0
- package/templates/scaffolds/react/Page.tsx.hbs +14 -0
- package/templates/scaffolds/react/README.md.hbs +44 -0
- package/templates/scaffolds/react/service.ts.hbs +37 -0
- package/templates/scaffolds/react/types.ts.hbs +6 -0
- package/templates/scaffolds/react/use{{ModuleName}}.ts.hbs +88 -0
- package/templates/scaffolds/spring-boot/ApiContract.md.hbs +110 -0
- package/templates/scaffolds/spring-boot/Controller.java.hbs +43 -0
- package/templates/scaffolds/spring-boot/DTO.java.hbs +9 -0
- package/templates/scaffolds/spring-boot/Entity.java.hbs +12 -0
- package/templates/scaffolds/spring-boot/ErrorCode.java.hbs +28 -0
- package/templates/scaffolds/spring-boot/Mapper.java.hbs +9 -0
- package/templates/scaffolds/spring-boot/PageResponse.java.hbs +29 -0
- package/templates/scaffolds/spring-boot/Service.java.hbs +12 -0
- package/templates/scaffolds/spring-boot/ServiceImpl.java.hbs +48 -0
- package/templates/scaffolds/spring-boot/ServiceTest.java.hbs +22 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: accessibility
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 无障碍, 可访问性, a11y, ARIA, 键盘导航, 屏幕阅读器, 语义化, WCAG, 辅助功能
|
|
5
|
+
scope: [frontend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 表单 input 必须关联 label(htmlFor/id 或 aria-labelledby),禁止无标签输入框
|
|
11
|
+
- 按钮和链接必须有可识别文本或 aria-label,禁止纯图标按钮无文字说明
|
|
12
|
+
- 页面必须支持键盘导航(Tab 序列、Enter/Space 触发),焦点顺序符合视觉逻辑
|
|
13
|
+
- 动态内容更新必须使用 aria-live 区域通知屏幕阅读器
|
|
14
|
+
- 颜色对比度必须满足 WCAG AA 标准(文本 4.5:1,大文本 3:1)
|
|
15
|
+
- 图标按钮必须提供 aria-label 或 tooltip,图标作为装饰时使用 aria-hidden="true"
|
|
16
|
+
- 错误提示必须通过 aria-describedby 关联到对应表单字段
|
|
17
|
+
- 所有交互元素必须有可访问的名称(aria-label 或关联 label),屏幕阅读器可识别
|
|
18
|
+
- 颜色对比度必须满足 WCAG 2.1 AA 标准(正文 ≥ 4.5:1,大文本 ≥ 3:1)
|
|
19
|
+
- 所有功能必须支持键盘操作(Tab 导航 + Enter/Space 触发),不能仅依赖鼠标
|
|
20
|
+
- 表单必须有明确的错误提示和关联(aria-describedby),不能只用颜色标识错误
|
|
21
|
+
- 图片/图标必须有替代文本(alt 属性),装饰性图片使用 alt=""
|
|
22
|
+
- 页面标题(title)和标题层级(h1-h6)必须语义正确,便于辅助导航
|
|
23
|
+
|
|
24
|
+
## 验收项
|
|
25
|
+
- [AC-01] 表单字段有关联 label
|
|
26
|
+
- [AC-02] 按钮和链接有可识别文本
|
|
27
|
+
- [AC-03] 页面支持键盘导航
|
|
28
|
+
- [AC-04] 颜色对比度满足 WCAG AA
|
|
29
|
+
- [AC-05] 交互元素有 aria-label
|
|
30
|
+
- [AC-06] 颜色对比度符合 WCAG AA
|
|
31
|
+
- [AC-07] 功能支持键盘操作
|
|
32
|
+
- [AC-08] 表单错误有关联提示
|
|
33
|
+
- [AC-09] 图片有替代文本
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: logging
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 日志记录, 日志, log, 打日志, 链路追踪, MDC, traceId, 日志格式, 记录日志, 操作日志
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 必须使用 SLF4J + Logback,禁止 System.out.println
|
|
11
|
+
- 所有请求必须有 traceId 贯穿完整链路(MDC Filter)
|
|
12
|
+
- 关键业务操作(创建/修改/删除)必须记录 INFO 日志
|
|
13
|
+
- 禁止日志中打印敏感信息(密码、token、身份证号),敏感字段必须脱敏
|
|
14
|
+
- ERROR 日志必须包含异常堆栈(log.error("msg", e))
|
|
15
|
+
- 所有新增/修改/删除/审核/审批/发放/冻结/解冻等写操作必须有审计落点
|
|
16
|
+
- 审计至少包含:操作者、操作时间、操作对象、来源入口、关键前后值或结果摘要
|
|
17
|
+
- 关键路径(写操作、状态变更、外部调用、异常捕获)必须有日志,只读查询不得为满足规则而硬加日志
|
|
18
|
+
- 禁止在循环中打印日志(尤其是 DEBUG 级别),防止日志洪泛
|
|
19
|
+
- 异常日志必须包含完整堆栈(log.error("msg", exception)),禁止只打印 getMessage()
|
|
20
|
+
- 生产环境禁止使用 DEBUG/TRACE 级别日志
|
|
21
|
+
|
|
22
|
+
## 验收项
|
|
23
|
+
- [AC-01] 所有请求有 traceId 贯穿
|
|
24
|
+
- [AC-02] 关键操作记录 INFO 日志
|
|
25
|
+
- [AC-03] 日志不含敏感信息
|
|
26
|
+
- [AC-04] 无 System.out.println
|
|
27
|
+
- [AC-05] 写操作有审计记录(操作者/时间/对象/来源)
|
|
28
|
+
- [AC-06] 关键路径有日志且只读查询无冗余日志
|
|
29
|
+
- [AC-07] 关键操作有审计日志
|
|
30
|
+
- [AC-08] 日志包含 traceId
|
|
31
|
+
- [AC-09] 异常日志包含完整堆栈
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: auth-permission
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 权限认证, 权限校验, 认证, 登录, 鉴权, 授权, Token, JWT, RBAC, 角色, @PreAuthorize, 登录验证, 访问控制
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 所有写接口必须有权限注解或 URL 级别鉴权
|
|
11
|
+
- 禁止在 Controller 中硬编码角色判断(if role == "ADMIN")
|
|
12
|
+
- JWT Token 必须设置过期时间(建议 2-8 小时)
|
|
13
|
+
- 密码必须使用 BCrypt 哈希存储,禁止明文或可逆加密
|
|
14
|
+
- 前端隐藏按钮不能替代后端权限校验
|
|
15
|
+
- 任何新增或修改菜单必须同步声明角色、权限标识、默认可见性和数据范围
|
|
16
|
+
- 页面可见不等于可操作,按钮权限、接口权限和数据权限必须分别定义
|
|
17
|
+
- 接口鉴权要求必须能回链到角色与权限模型,不能只写 auth=token
|
|
18
|
+
- 禁止菜单可见性与接口可调用性解耦(菜单隐藏但接口暴露)
|
|
19
|
+
- 登录失败不得提示具体原因(不区分"用户名不存在"和"密码错误")
|
|
20
|
+
- 登录接口必须有暴力破解防护(连续失败 N 次锁定或验证码)
|
|
21
|
+
- Session ID 必须在登录成功后重新生成,防止会话固定攻击
|
|
22
|
+
- 前端敏感操作(修改密码、删除)必须重新验证身份(re-authentication)
|
|
23
|
+
- API 接口必须实现限流(Rate Limiting),防止暴力枚举和 CC 攻击
|
|
24
|
+
|
|
25
|
+
## 验收项
|
|
26
|
+
- [AC-01] 写接口有权限注解或鉴权
|
|
27
|
+
- [AC-02] Token 有过期时间
|
|
28
|
+
- [AC-03] 密码 BCrypt 哈希存储
|
|
29
|
+
- [AC-04] 无硬编码角色判断
|
|
30
|
+
- [AC-05] 菜单/按钮/接口/数据范围三层权限同步定义
|
|
31
|
+
- [AC-06] 接口鉴权可回链到角色权限模型
|
|
32
|
+
- [AC-07] 登录失败不暴露具体原因
|
|
33
|
+
- [AC-08] 有暴力破解防护机制
|
|
34
|
+
- [AC-09] 敏感操作重新验证身份
|
|
35
|
+
- [AC-10] API 接口有限流策略
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture-redline
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 架构设计, 系统架构, 模块划分, 服务边界, 架构红线, 跨模块调用, 服务拆分
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 禁止绕过统一认证和数据范围控制直接暴露业务接口
|
|
11
|
+
- 禁止通过 Patch JAR、docker commit 或运行时文件替换交付代码
|
|
12
|
+
- 禁止前端、Controller 或定时任务跨服务边界直接访问持久化实现
|
|
13
|
+
- 禁止将事务、认证、金额、库存、安全策略或数据库 Schema 变更打包为"小修改"而无设计追溯
|
|
14
|
+
- 禁止菜单可见性与接口可调用性解耦(菜单隐藏但接口暴露,或菜单存在但无权限支撑)
|
|
15
|
+
- 禁止异步消息、定时任务或补偿逻辑绕过主路径审计和幂等控制
|
|
16
|
+
- 所有新增写操作必须有可追溯的审计记录
|
|
17
|
+
- 禁止在循环内执行数据库操作(N+1),必须使用批量查询
|
|
18
|
+
- 禁止在事务内执行远程调用(HTTP/RPC),防止长事务锁表
|
|
19
|
+
- 禁止 catch 后空处理,至少记录日志并标注忽略原因
|
|
20
|
+
- 禁止直接使用 new Date() 获取时间,必须通过时钟服务注入便于测试
|
|
21
|
+
- 禁止在 Service 层注入 HttpServletRequest/Response,保持层级清晰
|
|
22
|
+
|
|
23
|
+
## 验收项
|
|
24
|
+
- [AC-01] 业务接口经过统一认证
|
|
25
|
+
- [AC-02] 无跨边界直接持久化访问
|
|
26
|
+
- [AC-03] 菜单与接口权限同步定义
|
|
27
|
+
- [AC-04] 写操作有审计记录
|
|
28
|
+
- [AC-05] 无循环内数据库调用
|
|
29
|
+
- [AC-06] 无事务内远程调用
|
|
30
|
+
- [AC-07] 无空 catch 块
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing-quality
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 测试质量, 测试规范, 测试策略, 单元测试, 集成测试, 测试覆盖, E2E测试, 测试反模式
|
|
5
|
+
scope: [backend, frontend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 每个接口至少覆盖:正常流程、参数缺失、权限不足、业务异常、边界值
|
|
11
|
+
- 端到端业务测试必须从浏览器页面模拟真实用户操作,直接 API 调用只能补充不能替代
|
|
12
|
+
- 测试失败必须在源逻辑修复,禁止修改测试来适配 Bug
|
|
13
|
+
- 测试数据准备必须走业务 API 或页面操作,禁止直接 SQL INSERT 业务数据
|
|
14
|
+
- 禁止在测试脚本中硬编码凭据,必须从环境变量或配置文件读取
|
|
15
|
+
- Docker 部署必须从全新镜像构建,禁止 docker commit 和热补丁
|
|
16
|
+
- 单元测试覆盖率核心逻辑必须 ≥ 80%,关键路径(支付/权限)必须 100%
|
|
17
|
+
- 测试方法命名必须清晰表达测试场景(如 shouldReturn401WhenTokenExpired)
|
|
18
|
+
- 测试数据必须使用工厂方法或 Builder 构建,禁止硬编码 magic values
|
|
19
|
+
- 集成测试必须使用测试容器(Testcontainers)或内存数据库,禁止依赖外部环境
|
|
20
|
+
- 每个修复的 bug 必须有对应的回归测试,防止问题复现
|
|
21
|
+
|
|
22
|
+
## 验收项
|
|
23
|
+
- [AC-01] 接口测试覆盖正常+异常+边界
|
|
24
|
+
- [AC-02] E2E 测试从浏览器模拟用户操作
|
|
25
|
+
- [AC-03] 测试失败修复源逻辑而非改测试
|
|
26
|
+
- [AC-04] 测试数据走业务 API 非 SQL 直写
|
|
27
|
+
- [AC-05] 核心逻辑覆盖率 ≥ 80%
|
|
28
|
+
- [AC-06] 测试方法名清晰表达场景
|
|
29
|
+
- [AC-07] 测试数据工厂构建
|
|
30
|
+
- [AC-08] Bug 修复有回归测试
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: circuit-breaker
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 服务降级, 熔断, 限流, 降级, 级联故障, 服务雪崩, Sentinel, Hystrix, Resilience4j, 服务保护, 容错
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 外部依赖(第三方 API、中间件、其他微服务)必须配置超时时间,禁止无限等待
|
|
11
|
+
- 核心链路的外部调用必须配置熔断器:失败率阈值(建议 50%)、熔断时长(建议 30s)、半开探测数(建议 5)
|
|
12
|
+
- 熔断触发后必须有降级策略:返回缓存数据/默认值/友好提示,禁止直接抛异常给用户
|
|
13
|
+
- 接口必须有限流保护(令牌桶/漏桶),防止突发流量击穿服务
|
|
14
|
+
- 降级方案必须提前定义:降级行为、用户提示文案、数据一致性保障、恢复条件
|
|
15
|
+
- 重试必须满足幂等性,重试间隔必须使用指数退避(initial 100ms, multiplier 2, max 3 次)
|
|
16
|
+
- 线程池隔离:不同外部依赖使用独立线程池,防止一个慢服务拖垮所有请求
|
|
17
|
+
- 必须有服务健康检查端点(/actuator/health),包含依赖组件状态(DB/Redis/MQ)
|
|
18
|
+
- 熔断器必须配置 half-open 状态的探测请求量(如允许 5 个请求通过测试),成功后才恢复
|
|
19
|
+
- 降级 fallback 必须返回有意义的默认值或缓存数据,禁止返回 null 或空对象
|
|
20
|
+
- 熔断/降级事件必须触发监控告警,不能静默降级
|
|
21
|
+
- 外部调用必须设置独立的超时时间(不依赖全局超时),与熔断器配合使用
|
|
22
|
+
- 熔断器状态变化必须有日志记录(closed → open → half-open → closed)
|
|
23
|
+
|
|
24
|
+
## 验收项
|
|
25
|
+
- [AC-01] 外部调用有超时和熔断配置
|
|
26
|
+
- [AC-02] 熔断后有降级策略和用户提示
|
|
27
|
+
- [AC-03] 重试有指数退避和幂等保障
|
|
28
|
+
- [AC-04] 有限流保护
|
|
29
|
+
- [AC-05] 健康检查端点包含依赖状态
|
|
30
|
+
- [AC-06] half-open 探测机制配置
|
|
31
|
+
- [AC-07] fallback 返回有意义的值
|
|
32
|
+
- [AC-08] 熔断事件有监控告警
|
|
33
|
+
- [AC-09] 外部调用有独立超时
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: state-transition
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 状态机, 状态流转, 状态变更, 状态转换, 审批流, 工单状态, 订单状态, 流程引擎
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 仅列出状态列表不够,每个状态转换必须定义:触发条件、守卫条件、失败/回滚动作
|
|
11
|
+
- 金额、库存、配额、计数器等并发敏感节点默认需要并发控制
|
|
12
|
+
- 并发敏感操作必须显式声明:并发控制方式(乐观锁/悲观锁/幂等键/去重表)、重试策略、重复提交处理、用户可见失败反馈
|
|
13
|
+
- 跨模块或跨服务状态变更必须显式声明最终一致性和补偿策略
|
|
14
|
+
- 集成测试必须覆盖:至少一次成功转换、一次守卫失败、一次失败恢复或升级路径
|
|
15
|
+
- 状态流转必须通过状态机框架(如 Spring Statemachine)或显式流转表校验,禁止硬编码 if-else
|
|
16
|
+
- 每次状态变更必须记录流转日志(原状态→新状态、操作人、时间、原因)
|
|
17
|
+
- 并发状态变更必须使用乐观锁或分布式锁,防止状态覆盖
|
|
18
|
+
- 状态流转失败必须返回明确的错误原因,告知用户当前状态和允许的下一步操作
|
|
19
|
+
- 状态定义必须包含初始状态和终态,禁止出现无法流转的"悬挂状态"
|
|
20
|
+
|
|
21
|
+
## 验收项
|
|
22
|
+
- [AC-01] 状态转换有触发条件、守卫条件、回滚动作
|
|
23
|
+
- [AC-02] 并发敏感操作有显式并发控制声明
|
|
24
|
+
- [AC-03] 跨服务状态变更有补偿策略
|
|
25
|
+
- [AC-04] 集成测试覆盖成功和失败路径
|
|
26
|
+
- [AC-05] 状态机校验(非硬编码)
|
|
27
|
+
- [AC-06] 状态变更审计日志
|
|
28
|
+
- [AC-07] 并发状态变更防护
|
|
29
|
+
- [AC-08] 无悬挂状态
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: constrained-implementation
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 编码实现, 写代码, 修改代码, 代码变更, 实现, 编码, coding, 代码修改, 修bug, 修代码
|
|
5
|
+
scope: [backend, frontend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 必须在修改代码前定位根因,解释根因、修改边界和验证方式后再编码
|
|
11
|
+
- 只修改任务卡/补丁计划/白名单明确范围内的文件
|
|
12
|
+
- 禁止补丁叠补丁或试错式堆叠修复
|
|
13
|
+
- 禁止删除断言、放宽测试、增加 sleep、让测试适应错误行为
|
|
14
|
+
- 禁止顺手重构或范围外的"清理"
|
|
15
|
+
- 每个代码变更必须追溯到任务卡、补丁计划或阻塞性缺陷
|
|
16
|
+
- 范围超出白名单或需要变更接口/DDL/权限/菜单时,立即上报而非自行决定
|
|
17
|
+
- 必须完成本地验证并产出结构化证据后再结束
|
|
18
|
+
- 唯一约束必须同时在数据库和应用层校验,防止并发场景下的重复数据
|
|
19
|
+
- 外键约束在微服务架构中不建议使用物理外键,应通过应用层保证数据一致性
|
|
20
|
+
- 乐观锁必须使用 version 字段而非 update_time(后者可能因精度问题失效)
|
|
21
|
+
- 软删除数据必须排除在唯一约束之外(如添加 is_deleted 条件索引)
|
|
22
|
+
- 数据库约束的校验失败必须返回用户友好的错误消息,而非数据库原始报错
|
|
23
|
+
|
|
24
|
+
## 验收项
|
|
25
|
+
- [AC-01] 变更范围与白名单完全匹配
|
|
26
|
+
- [AC-02] 根因已确认再编码(非先改再试)
|
|
27
|
+
- [AC-03] 无顺手重构或范围外变更
|
|
28
|
+
- [AC-04] 本地验证执行完毕有结果
|
|
29
|
+
- [AC-05] 超范围变更已上报
|
|
30
|
+
- [AC-06] 唯一约束双层校验
|
|
31
|
+
- [AC-07] 乐观锁用 version 字段
|
|
32
|
+
- [AC-08] 软删除与唯一约束兼容
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: caching
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 缓存策略, 缓存, cache, Redis, 热点数据, 查询优化, 缓存穿透, 缓存雪崩, @Cacheable, 缓存一致性
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 所有缓存必须设置 TTL,禁止永久缓存
|
|
11
|
+
- 热点数据 TTL 必须加随机偏移防止雪崩
|
|
12
|
+
- 缓存 key 格式必须统一:模块:业务:id
|
|
13
|
+
- 查询不存在的数据必须缓存空值或使用布隆过滤器防止穿透
|
|
14
|
+
- 写操作必须同步更新或失效缓存,保证一致性
|
|
15
|
+
- 缓存重建必须使用分布式锁或 singleflight 模式,防止缓存击穿导致 DB 过载
|
|
16
|
+
- 缓存值禁止存储大对象(建议 ≤ 1MB),大对象应只缓存 key 引用
|
|
17
|
+
- 缓存操作必须设置超时时间,防止 Redis 阻塞拖垮业务线程
|
|
18
|
+
- 禁止缓存中存储敏感信息(密码、token、身份证号),或必须加密后存储
|
|
19
|
+
- 缓存命中率必须纳入监控,命中率低于阈值时触发告警
|
|
20
|
+
- 本地缓存(Caffeine/Guava)与分布式缓存的数据一致性策略必须明确
|
|
21
|
+
|
|
22
|
+
## 验收项
|
|
23
|
+
- [AC-01] 所有缓存 key 有 TTL
|
|
24
|
+
- [AC-02] 热点数据 TTL 加随机偏移
|
|
25
|
+
- [AC-03] 缓存 key 格式统一
|
|
26
|
+
- [AC-04] 有穿透/雪崩防护措施
|
|
27
|
+
- [AC-05] 缓存重建有分布式锁保护
|
|
28
|
+
- [AC-06] 缓存值不超过 1MB
|
|
29
|
+
- [AC-07] 缓存操作有超时设置
|
|
30
|
+
- [AC-08] 缓存中无明文敏感信息
|
|
31
|
+
- [AC-09] 缓存命中率有监控告警
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: coding-quality
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 编码质量, 代码规范, 代码评审, 代码质量, 重构, over-engineering, 过度设计, 代码异味
|
|
5
|
+
scope: [backend, frontend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 50 行能解决的问题禁止写 200 行;禁止为单次使用场景过度设计
|
|
11
|
+
- 每行代码变更必须可追溯到任务卡片中的显式需求,禁止"顺手"重构相邻代码
|
|
12
|
+
- 实现记录必须显式声明业务入口集成状态(菜单/路由/权限)
|
|
13
|
+
- Bug 修复必须针对根因,禁止在破损代码上叠加 workaround
|
|
14
|
+
- 方法必须按业务步骤拆分为单一职责的私有方法
|
|
15
|
+
- 新增/修改类必须文档化业务职责、边界和关键协作者
|
|
16
|
+
- 仅在"非显而易见"的关键行添加注释说明 why,禁止对简单赋值加噪声注释
|
|
17
|
+
- 方法长度不超过 80 行,超过时拆分为子方法
|
|
18
|
+
- 方法参数不超过 5 个,超过时封装为请求对象
|
|
19
|
+
- 单个类职责单一(SRP),超过 500 行的类应考虑拆分
|
|
20
|
+
- 条件嵌套不超过 3 层,超过时使用卫语句、策略模式或 Optional 链重构
|
|
21
|
+
- 禁止使用魔法数字,必须提取为命名常量或枚举
|
|
22
|
+
|
|
23
|
+
## 验收项
|
|
24
|
+
- [AC-01] 代码变更可追溯到任务需求
|
|
25
|
+
- [AC-02] 业务入口集成状态已声明
|
|
26
|
+
- [AC-03] Bug 修复针对根因而非 workaround
|
|
27
|
+
- [AC-04] 无过度设计(50行能解决的不写200行)
|
|
28
|
+
- [AC-05] 方法不超过 80 行
|
|
29
|
+
- [AC-06] 参数不超过 5 个
|
|
30
|
+
- [AC-07] 嵌套不超过 3 层
|
|
31
|
+
- [AC-08] 无魔法数字
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: defect-management
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 缺陷管理, Bug修复, 缺陷闭环, 回归测试, 缺陷预防, 缺陷归因, 质量改进
|
|
5
|
+
scope: [backend, frontend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 每个缺陷必须归因到最小责任阶段(需求/设计/任务拆解/实现/测试/门禁)
|
|
11
|
+
- 修复必须附带证据,"理论上修好了"不可接受
|
|
12
|
+
- 有复现价值的缺陷必须产出至少一项回填动作:规则、模板、检查项或知识条目
|
|
13
|
+
- 同一缺陷若在案例库中已出现过,自动升级为深层缺陷(方法论级别)
|
|
14
|
+
- 报告必须在修复之前编写,禁止先改规则后写报告
|
|
15
|
+
- 缺陷结论必须区分:已完成 / 未完成 / 未验证 / 未知,无真实证据不得标记为已完成
|
|
16
|
+
- 缺陷必须包含完整的复现步骤、预期结果、实际结果和环境信息
|
|
17
|
+
- 每个缺陷必须有优先级(P0-P4)和严重程度(S1-S4)分类
|
|
18
|
+
- 修复缺陷必须包含根因分析,禁止只修表面症状
|
|
19
|
+
- P0/P1 缺陷修复后必须经过回归测试,不能直接上线
|
|
20
|
+
- 缺陷关闭必须由提单人确认,修复人不能自行关闭
|
|
21
|
+
|
|
22
|
+
## 验收项
|
|
23
|
+
- [AC-01] 缺陷有归因阶段
|
|
24
|
+
- [AC-02] 修复附带执行证据
|
|
25
|
+
- [AC-03] 有复现价值的缺陷有回填动作
|
|
26
|
+
- [AC-04] 结论区分已完成/未完成/未验证/未知
|
|
27
|
+
- [AC-05] 缺陷有完整复现信息
|
|
28
|
+
- [AC-06] 有优先级和严重程度
|
|
29
|
+
- [AC-07] 修复包含根因分析
|
|
30
|
+
- [AC-08] 高优先级缺陷有回归测试
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: debugging-methodology
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 调试, debug, 排查问题, 修复Bug, 定位错误, 根因分析, 排障, 故障排查
|
|
5
|
+
scope: [backend, frontend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 一次只验证一个假设,一次只改一个变量,记录所有结果包括被否定的假设
|
|
11
|
+
- 禁止从观察直接跳到修复,必须经过假设验证
|
|
12
|
+
- 修复范围只覆盖确认的根因,禁止顺手改其他代码
|
|
13
|
+
- 同一现象修复失败 3 次后停止猜测,重新审视假设,考虑是否为架构问题而非 Bug
|
|
14
|
+
- 使用 RED-GREEN 回归验证:回退修复 → 确认失败 → 恢复修复 → 确认通过
|
|
15
|
+
- 禁止通过删除断言、增加 sleep、降低覆盖率、增加 mock 来制造通过
|
|
16
|
+
- 调试必须先复现问题(确定环境、数据、步骤),禁止在未复现的情况下猜测修改
|
|
17
|
+
- 必须使用二分法定位问题范围(注释一半代码/回退一半提交),禁止全量排查
|
|
18
|
+
- 线上问题排查必须优先查看日志和监控,禁止直接登录服务器修改代码
|
|
19
|
+
- 修复后必须验证根因是否消除,而非只验证症状消失
|
|
20
|
+
|
|
21
|
+
## 验收项
|
|
22
|
+
- [AC-01] 调试过程有假设-验证记录
|
|
23
|
+
- [AC-02] 修复范围仅限确认的根因
|
|
24
|
+
- [AC-03] 3次失败后重新审视假设
|
|
25
|
+
- [AC-04] 使用 RED-GREEN 回归验证
|
|
26
|
+
- [AC-05] 先复现再排查
|
|
27
|
+
- [AC-06] 使用二分法定位
|
|
28
|
+
- [AC-07] 修复后验证根因消除
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: input-validation
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 参数校验, 输入验证, 字段验证, 合法性校验, 入参校验, 必填, 格式校验, 参数检查, @Valid, @NotNull
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 必须使用 Bean Validation 注解(@NotBlank、@Size、@Min 等)声明式校验
|
|
11
|
+
- 禁止手写 if-else 逐字段校验(跨字段业务规则除外)
|
|
12
|
+
- 创建和更新必须使用分组校验(CreateGroup/UpdateGroup)
|
|
13
|
+
- 校验失败必须返回 400 + 具体字段名和错误消息
|
|
14
|
+
- 后端必须校验,禁止仅依赖前端校验
|
|
15
|
+
- 数组/集合参数必须校验非空且限制最大长度(防止批量攻击)
|
|
16
|
+
- 枚举类型参数必须校验是否为合法枚举值,禁止直接信任前端传入
|
|
17
|
+
- 日期参数必须指定格式(@DateTimeFormat)并校验合理性(不能是未来日期等)
|
|
18
|
+
- 富文本输入必须使用白名单标签过滤(如 jsoup Whitelist),禁止直接存储原始 HTML
|
|
19
|
+
- 正则表达式校验必须限制输入长度和复杂度,防止 ReDoS 攻击
|
|
20
|
+
- URL 参数必须校验协议白名单(仅允许 http/https),防止 SSRF
|
|
21
|
+
|
|
22
|
+
## 验收项
|
|
23
|
+
- [AC-01] 所有 DTO 字段有校验注解
|
|
24
|
+
- [AC-02] 创建/更新使用分组校验
|
|
25
|
+
- [AC-03] 校验失败返回 400 + 字段详情
|
|
26
|
+
- [AC-04] 无手写 if-else 参数校验
|
|
27
|
+
- [AC-05] 集合参数有长度限制
|
|
28
|
+
- [AC-06] 枚举参数校验合法值
|
|
29
|
+
- [AC-07] 富文本经过白名单过滤
|
|
30
|
+
- [AC-08] URL 参数校验协议白名单
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: error-handling
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 异常处理, 错误处理, 全局异常, 错误码, Exception, BusinessException, 状态码, 报错, 异常捕获, 错误响应
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 必须使用 @ControllerAdvice 全局异常处理器,禁止散落的 try-catch 吞异常
|
|
11
|
+
- 业务异常必须使用自定义 BusinessException 携带错误码和消息
|
|
12
|
+
- 禁止将异常堆栈信息返回给前端
|
|
13
|
+
- 系统异常必须记录 ERROR 日志并返回通用提示,不暴露内部细节
|
|
14
|
+
- 参数校验失败必须返回 HTTP 400
|
|
15
|
+
- 每个用户可见写操作必须定义失败反馈:提示文案、重试建议、是否可恢复
|
|
16
|
+
- 权限失败、校验失败、资源不存在、冲突失败、系统异常必须有区别化处理
|
|
17
|
+
- 前端提示与接口错误码必须可回链,不得一个写"无权限"、一个写"操作失败"
|
|
18
|
+
- 若失败后需要用户补动作(刷新、重新登录、补齐字段、稍后重试),必须写明
|
|
19
|
+
- 全局异常处理器必须区分业务异常(可预期)和系统异常(不可预期),分别返回不同错误码
|
|
20
|
+
- 错误响应必须包含 traceId,便于日志追踪关联
|
|
21
|
+
- 前端必须对每个 API 调用做错误处理(toast/notification),禁止静默失败
|
|
22
|
+
|
|
23
|
+
## 验收项
|
|
24
|
+
- [AC-01] 所有异常经全局处理器返回
|
|
25
|
+
- [AC-02] 业务异常返回具体错误码和消息
|
|
26
|
+
- [AC-03] 系统异常不暴露堆栈给前端
|
|
27
|
+
- [AC-04] 校验失败返回 400 + 字段错误详情
|
|
28
|
+
- [AC-05] 用户可见写操作有失败反馈(提示+重试建议)
|
|
29
|
+
- [AC-06] 前端提示与后端错误码可回链
|
|
30
|
+
- [AC-07] 业务异常与系统异常分别处理
|
|
31
|
+
- [AC-08] 错误响应包含 traceId
|
|
32
|
+
- [AC-09] 前端 API 调用有错误提示
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: error-boundary
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 错误边界, 错误处理, 白屏, 页面崩溃, ErrorBoundary, 异常捕获, 全局错误, 前端异常, componentDidCatch, fallback
|
|
5
|
+
scope: [frontend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- React 应用必须在路由级别包裹 ErrorBoundary,防止单个组件崩溃导致整个页面白屏
|
|
11
|
+
- 必须提供全局未捕获异常处理(window.onerror / window.addEventListener('error'))
|
|
12
|
+
- ErrorBoundary 的 fallback UI 必须包含:错误提示、重试按钮、返回首页链接
|
|
13
|
+
- 异步请求错误(网络、超时、服务端)统一在 axios 拦截器处理,禁止每个组件单独 try-catch
|
|
14
|
+
- Promise 未捕获 rejection 必须有全局监听(unhandledrejection event)
|
|
15
|
+
- 错误信息禁止暴露技术细节给用户(堆栈、SQL、内部 IP)
|
|
16
|
+
- 生产环境必须上报错误到监控服务(Sentry / 自建),禁止只在控制台打印
|
|
17
|
+
- loading / error / empty 三态必须完整处理,禁止只处理成功状态
|
|
18
|
+
|
|
19
|
+
## 验收项
|
|
20
|
+
- [AC-01] 路由级别有 ErrorBoundary 包裹
|
|
21
|
+
- [AC-02] fallback UI 有重试和返回首页
|
|
22
|
+
- [AC-03] 异步错误统一在拦截器处理
|
|
23
|
+
- [AC-04] loading/error/empty 三态完整
|
|
24
|
+
- [AC-05] 生产错误上报到监控服务
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ddd-design
|
|
3
|
+
type: pattern
|
|
4
|
+
when: 领域驱动设计, DDD, 领域模型, 聚合根, 值对象, 领域事件, 充血模型, 贫血模型, 模块设计
|
|
5
|
+
scope: [backend]
|
|
6
|
+
products: ["*"]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 决策规则
|
|
10
|
+
- 简单 CRUD 使用贫血模型,禁止在领域不复杂时强行使用充血模型
|
|
11
|
+
- 不教条式应用 DDD,仅在领域真正复杂时采用充血领域模型
|
|
12
|
+
- 一个模块/类应该只有一个变更原因(SRP),两个方法被不同需求修改即为 SRP 违反
|
|
13
|
+
- 跨模块非强一致性流程应优先事件驱动架构,未采用事件驱动必须文档化原因
|
|
14
|
+
- 高层模块必须依赖抽象而非具体实现(DIP),Service 依赖 Repository 接口而非具体 DAO
|
|
15
|
+
- 写操作涉及金额、库存、状态流转等关键逻辑应考虑封装在领域服务中
|
|
16
|
+
- 聚合根必须有明确的边界,聚合间通过 ID 引用而非对象嵌套
|
|
17
|
+
- 领域事件必须由聚合根产生,跨聚合操作通过事件最终一致性
|
|
18
|
+
- 值对象必须不可变(immutable),使用新的值对象表示变更
|
|
19
|
+
- 仓储(Repository)只对聚合根提供存取,聚合内部实体不独立持久化
|
|
20
|
+
- 领域服务只在跨聚合或需要外部资源时使用,单一聚合逻辑放在聚合根内
|
|
21
|
+
|
|
22
|
+
## 验收项
|
|
23
|
+
- [AC-01] CRUD 场景使用贫血模型
|
|
24
|
+
- [AC-02] 跨模块交互有明确的依赖方向
|
|
25
|
+
- [AC-03] Service 依赖接口而非具体实现
|
|
26
|
+
- [AC-04] 事件驱动决策有文档记录
|
|
27
|
+
- [AC-05] 聚合边界清晰,聚合间 ID 引用
|
|
28
|
+
- [AC-06] 值对象不可变
|
|
29
|
+
- [AC-07] 仓储仅对聚合根
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { {{ModuleName}} } from './types';
|
|
3
|
+
|
|
4
|
+
interface {{ModuleName}}FormProps {
|
|
5
|
+
initialData?: Partial<{{ModuleName}}>;
|
|
6
|
+
onSubmit: (data: {{ModuleName}}) => void;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const {{ModuleName}}Form: React.FC<{{ModuleName}}FormProps> = ({ initialData, onSubmit }) => {
|
|
10
|
+
// TODO: 实现表单组件
|
|
11
|
+
return (
|
|
12
|
+
<form>
|
|
13
|
+
{/* TODO: 添加表单字段 */}
|
|
14
|
+
</form>
|
|
15
|
+
);
|
|
16
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { {{ModuleName}} } from './types';
|
|
3
|
+
|
|
4
|
+
interface {{ModuleName}}ListProps {
|
|
5
|
+
data: {{ModuleName}}[];
|
|
6
|
+
onEdit?: (item: {{ModuleName}}) => void;
|
|
7
|
+
onDelete?: (id: number) => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const {{ModuleName}}List: React.FC<{{ModuleName}}ListProps> = ({ data, onEdit, onDelete }) => {
|
|
11
|
+
// TODO: 实现列表组件
|
|
12
|
+
return (
|
|
13
|
+
<table>
|
|
14
|
+
<thead>
|
|
15
|
+
<tr>
|
|
16
|
+
{/* TODO: 添加表头 */}
|
|
17
|
+
</tr>
|
|
18
|
+
</thead>
|
|
19
|
+
<tbody>
|
|
20
|
+
{data.map((item) => (
|
|
21
|
+
<tr key={item.id}>
|
|
22
|
+
{/* TODO: 添加数据列 */}
|
|
23
|
+
</tr>
|
|
24
|
+
))}
|
|
25
|
+
</tbody>
|
|
26
|
+
</table>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { render } from '@testing-library/react';
|
|
3
|
+
import { {{ModuleName}}Page } from './Page';
|
|
4
|
+
|
|
5
|
+
describe('{{ModuleName}}Page', () => {
|
|
6
|
+
it('renders without crashing', () => {
|
|
7
|
+
const { container } = render(<{{ModuleName}}Page />);
|
|
8
|
+
expect(container).toBeTruthy();
|
|
9
|
+
});
|
|
10
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { {{ModuleName}} } from './types';
|
|
3
|
+
import { {{moduleName}}Service } from './service';
|
|
4
|
+
|
|
5
|
+
export const {{ModuleName}}Page: React.FC = () => {
|
|
6
|
+
// TODO: 实现页面组件
|
|
7
|
+
return (
|
|
8
|
+
<div>
|
|
9
|
+
<h1>{{ModuleName}} 管理</h1>
|
|
10
|
+
</div>
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export default {{ModuleName}}Page;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# {{ModuleName}} 模块
|
|
2
|
+
|
|
3
|
+
> 自动生成于 {{date}}
|
|
4
|
+
|
|
5
|
+
## 概述
|
|
6
|
+
|
|
7
|
+
{{ModuleName}} 模块提供 {{moduleNameLower}} 的增删改查功能。
|
|
8
|
+
|
|
9
|
+
## 文件结构
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
src/pages/{{ModuleName}}/
|
|
13
|
+
├── Page.tsx # 主页面组件
|
|
14
|
+
├── Form.tsx # 表单组件
|
|
15
|
+
├── List.tsx # 列表组件
|
|
16
|
+
├── service.ts # API 调用层
|
|
17
|
+
├── types.ts # 类型定义
|
|
18
|
+
└── use{{ModuleName}}.ts # 数据 Hook
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## API 接口
|
|
22
|
+
|
|
23
|
+
| 方法 | 路径 | 说明 |
|
|
24
|
+
|------|------|------|
|
|
25
|
+
| GET | {{basePath}} | 查询列表(分页) |
|
|
26
|
+
| GET | {{basePath}}/:id | 查询详情 |
|
|
27
|
+
| POST | {{basePath}} | 创建 |
|
|
28
|
+
| PUT | {{basePath}}/:id | 更新 |
|
|
29
|
+
| DELETE | {{basePath}}/:id | 删除 |
|
|
30
|
+
|
|
31
|
+
## 使用示例
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { {{ModuleName}}Page } from './pages/{{ModuleName}}/Page';
|
|
35
|
+
|
|
36
|
+
// 在路由中注册
|
|
37
|
+
<Route path="/{{module_name}}" element={<{{ModuleName}}Page />} />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 注意事项
|
|
41
|
+
|
|
42
|
+
- 列表使用服务端分页,默认每页 20 条
|
|
43
|
+
- 表单提交前会进行前端校验
|
|
44
|
+
- 删除操作有二次确认弹窗
|