soloforge 1.1.46 → 1.1.48
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 +23 -7
- package/dist/cli/adapter_writers.d.ts +5 -0
- package/dist/cli/adapter_writers.d.ts.map +1 -1
- package/dist/cli/adapter_writers.js +25 -0
- package/dist/cli/adapter_writers.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +3 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/scope_check.d.ts +4 -0
- package/dist/cli/scope_check.d.ts.map +1 -0
- package/dist/cli/scope_check.js +41 -0
- package/dist/cli/scope_check.js.map +1 -0
- package/dist/context/adapters/claude_code/hooks.d.ts +5 -7
- package/dist/context/adapters/claude_code/hooks.d.ts.map +1 -1
- package/dist/context/adapters/claude_code/hooks.js +11 -9
- package/dist/context/adapters/claude_code/hooks.js.map +1 -1
- package/dist/context/adapters/shared/integration_guide.js +18 -6
- package/dist/context/adapters/shared/integration_guide.js.map +1 -1
- package/dist/context/adapters/shared/workflow_template.js +1 -1
- package/dist/context/config/intent_schema.d.ts +793 -6
- package/dist/context/config/intent_schema.d.ts.map +1 -1
- package/dist/context/config/intent_schema.js +9 -0
- package/dist/context/config/intent_schema.js.map +1 -1
- package/dist/context/config/resolver.d.ts +9 -0
- package/dist/context/config/resolver.d.ts.map +1 -1
- package/dist/context/config/resolver.js +5 -0
- package/dist/context/config/resolver.js.map +1 -1
- package/dist/core/adversarial_review_store.d.ts +133 -0
- package/dist/core/adversarial_review_store.d.ts.map +1 -0
- package/dist/core/adversarial_review_store.js +161 -0
- package/dist/core/adversarial_review_store.js.map +1 -0
- package/dist/core/domain_transition.d.ts.map +1 -1
- package/dist/core/domain_transition.js +3 -0
- package/dist/core/domain_transition.js.map +1 -1
- package/dist/core/gate_record_store.d.ts +13 -7
- package/dist/core/gate_record_store.d.ts.map +1 -1
- package/dist/core/gate_record_store.js +39 -17
- package/dist/core/gate_record_store.js.map +1 -1
- package/dist/core/git_utils.d.ts +1 -1
- package/dist/core/git_utils.js +1 -1
- package/dist/core/observer.d.ts.map +1 -1
- package/dist/core/observer.js +33 -6
- package/dist/core/observer.js.map +1 -1
- package/dist/core/task_context/constants.js +1 -1
- package/dist/core/task_context/constants.js.map +1 -1
- package/dist/core/task_context/manager.d.ts +4 -0
- package/dist/core/task_context/manager.d.ts.map +1 -1
- package/dist/core/task_context/manager.js +48 -30
- package/dist/core/task_context/manager.js.map +1 -1
- package/dist/core/task_context/manager_setters.d.ts +2 -0
- package/dist/core/task_context/manager_setters.d.ts.map +1 -1
- package/dist/core/task_context/manager_setters.js +10 -0
- package/dist/core/task_context/manager_setters.js.map +1 -1
- package/dist/core/types.d.ts +19 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/domain/asset_registry/derived_registry.d.ts.map +1 -1
- package/dist/domain/asset_registry/derived_registry.js +20 -5
- package/dist/domain/asset_registry/derived_registry.js.map +1 -1
- package/dist/domain/asset_registry/derived_types.d.ts +22 -1
- package/dist/domain/asset_registry/derived_types.d.ts.map +1 -1
- package/dist/domain/build/contract.d.ts.map +1 -1
- package/dist/domain/build/contract.js +3 -8
- package/dist/domain/build/contract.js.map +1 -1
- package/dist/domain/build/engine.d.ts +4 -2
- package/dist/domain/build/engine.d.ts.map +1 -1
- package/dist/domain/build/engine.js +38 -5
- package/dist/domain/build/engine.js.map +1 -1
- package/dist/domain/contracts/design_lifecycle_contract.d.ts.map +1 -1
- package/dist/domain/contracts/design_lifecycle_contract.js +11 -4
- package/dist/domain/contracts/design_lifecycle_contract.js.map +1 -1
- package/dist/domain/design/contract.d.ts.map +1 -1
- package/dist/domain/design/contract.js +13 -31
- package/dist/domain/design/contract.js.map +1 -1
- package/dist/domain/design/engine.d.ts +4 -2
- package/dist/domain/design/engine.d.ts.map +1 -1
- package/dist/domain/design/engine.js +39 -4
- package/dist/domain/design/engine.js.map +1 -1
- package/dist/domain/engine_helpers.d.ts +55 -2
- package/dist/domain/engine_helpers.d.ts.map +1 -1
- package/dist/domain/engine_helpers.js +173 -8
- package/dist/domain/engine_helpers.js.map +1 -1
- package/dist/domain/operate/contract.js +1 -1
- package/dist/domain/operate/contract.js.map +1 -1
- package/dist/domain/operate/engine.d.ts +4 -2
- package/dist/domain/operate/engine.d.ts.map +1 -1
- package/dist/domain/operate/engine.js +23 -3
- package/dist/domain/operate/engine.js.map +1 -1
- package/dist/domain/types.d.ts +6 -0
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/domain/types.js.map +1 -1
- package/dist/domain/verify/engine.d.ts +4 -2
- package/dist/domain/verify/engine.d.ts.map +1 -1
- package/dist/domain/verify/engine.js +22 -2
- package/dist/domain/verify/engine.js.map +1 -1
- package/dist/gate/contracts/tool_actions.d.ts +2 -2
- package/dist/gate/contracts/tool_actions.d.ts.map +1 -1
- package/dist/gate/contracts/tool_actions.js +2 -2
- package/dist/gate/contracts/tool_actions.js.map +1 -1
- package/dist/gate/contracts/tool_invocation_contract_registry.js +1 -1
- package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
- package/dist/gate/executors/executors_artifact.d.ts +19 -0
- package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
- package/dist/gate/executors/executors_artifact.js +108 -8
- package/dist/gate/executors/executors_artifact.js.map +1 -1
- package/dist/gate/executors/executors_build.d.ts.map +1 -1
- package/dist/gate/executors/executors_build.js +17 -15
- package/dist/gate/executors/executors_build.js.map +1 -1
- package/dist/gate/executors/executors_external_command.d.ts.map +1 -1
- package/dist/gate/executors/executors_external_command.js +32 -0
- package/dist/gate/executors/executors_external_command.js.map +1 -1
- package/dist/gate/executors/executors_field_mapping.d.ts +7 -0
- package/dist/gate/executors/executors_field_mapping.d.ts.map +1 -0
- package/dist/gate/executors/executors_field_mapping.js +179 -0
- package/dist/gate/executors/executors_field_mapping.js.map +1 -0
- package/dist/gate/executors/executors_prerequisite.d.ts.map +1 -1
- package/dist/gate/executors/executors_prerequisite.js +27 -7
- package/dist/gate/executors/executors_prerequisite.js.map +1 -1
- package/dist/gate/executors/executors_regex_scan.d.ts.map +1 -1
- package/dist/gate/executors/executors_regex_scan.js +36 -15
- package/dist/gate/executors/executors_regex_scan.js.map +1 -1
- package/dist/gate/executors/executors_scope.js +4 -4
- package/dist/gate/executors/executors_scope.js.map +1 -1
- package/dist/gate/executors/executors_trace.d.ts +5 -0
- package/dist/gate/executors/executors_trace.d.ts.map +1 -1
- package/dist/gate/executors/executors_trace.js +186 -3
- package/dist/gate/executors/executors_trace.js.map +1 -1
- package/dist/gate/executors/index.d.ts.map +1 -1
- package/dist/gate/executors/index.js +2 -0
- package/dist/gate/executors/index.js.map +1 -1
- package/dist/gate/gate_engine.d.ts +9 -0
- package/dist/gate/gate_engine.d.ts.map +1 -1
- package/dist/gate/gate_engine.js +15 -0
- package/dist/gate/gate_engine.js.map +1 -1
- package/dist/gate/gate_registry_bridge.d.ts +9 -8
- package/dist/gate/gate_registry_bridge.d.ts.map +1 -1
- package/dist/gate/gate_registry_bridge.js +57 -16
- package/dist/gate/gate_registry_bridge.js.map +1 -1
- package/dist/gate/middleware_gates.js +1 -1
- package/dist/gate/middleware_gates.js.map +1 -1
- package/dist/gate/scope_resolver.d.ts +7 -0
- package/dist/gate/scope_resolver.d.ts.map +1 -1
- package/dist/gate/scope_resolver.js +1 -1
- package/dist/gate/scope_resolver.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/server/tools/sf_doctor.d.ts +2 -0
- package/dist/server/tools/sf_doctor.d.ts.map +1 -1
- package/dist/server/tools/sf_doctor.js +35 -1
- package/dist/server/tools/sf_doctor.js.map +1 -1
- package/dist/server/tools/sf_gate.d.ts +1 -1
- package/dist/server/tools/sf_gate.js +2 -2
- package/dist/server/tools/sf_gate.js.map +1 -1
- package/dist/server/tools/sf_task.d.ts +83 -0
- package/dist/server/tools/sf_task.d.ts.map +1 -1
- package/dist/server/tools/sf_task.js +121 -4
- package/dist/server/tools/sf_task.js.map +1 -1
- package/dist/server/tools/sf_work.d.ts +203 -0
- package/dist/server/tools/sf_work.d.ts.map +1 -1
- package/dist/server/tools/sf_work.js +549 -46
- package/dist/server/tools/sf_work.js.map +1 -1
- package/dist/shared/traceability_id_utils.js +3 -3
- package/dist/shared/traceability_id_utils.js.map +1 -1
- package/dist/verify/contracts/decision_workshop.d.ts.map +1 -1
- package/dist/verify/contracts/decision_workshop.js +4 -3
- package/dist/verify/contracts/decision_workshop.js.map +1 -1
- package/package.json +2 -1
- package/templates/build/enforced.md +299 -39
- package/templates/build//344/270/223/351/241/271/345/256/236/347/216/260.md +75 -0
- package/templates/build//345/256/211/345/205/250/345/212/240/345/233/272.md +75 -0
- package/templates/build//346/263/250/351/207/212/347/272/252/345/276/213.md +48 -0
- package/templates/build//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201.md +50 -79
- package/templates/build//346/265/213/350/257/225/350/256/241/345/210/222.md +31 -24
- package/templates/build//347/274/226/347/240/201/347/272/252/345/276/213.md +101 -0
- package/templates/build//350/260/203/350/257/225/346/216/222/346/237/245.md +44 -75
- package/templates/build//351/207/215/346/236/204/346/226/271/346/263/225.md +68 -0
- package/templates/design/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243.md +38 -28
- package/templates/design/enforced.md +234 -74
- package/templates/design//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +5 -2
- package/templates/design//345/205/274/345/256/271/346/200/247/344/270/216/350/277/201/347/247/273/350/257/204/344/274/260.md +71 -0
- package/templates/design//345/206/263/347/255/226/344/270/216/351/200/211/345/236/213.md +70 -0
- package/templates/design//345/210/207/347/211/207/350/247/204/345/210/222.md +51 -55
- package/templates/design//345/274/200/345/217/221/345/210/207/347/211/207/350/256/241/345/210/222.md +75 -0
- package/templates/design//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243.md +35 -47
- package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241.md +63 -81
- package/templates/design//350/256/276/350/256/241/345/206/263/347/255/226/347/272/252/345/276/213.md +58 -0
- package/templates/design//350/256/276/350/256/241/350/264/250/351/207/217/350/246/201/347/202/271.md +58 -0
- package/templates/design//351/234/200/346/261/202/345/210/206/346/236/220.md +49 -53
- package/templates/operate/UI/350/247/206/350/247/211/351/252/214/346/224/266/347/272/252/345/276/213.md +74 -0
- package/templates/operate/enforced.md +52 -5
- package/templates/operate//344/270/212/347/272/277/350/247/202/345/257/237.md +53 -32
- package/templates/operate//345/217/221/345/270/203/350/257/264/346/230/216.md +22 -1
- package/templates/operate//351/203/250/347/275/262/351/205/215/347/275/256.md +93 -0
- package/templates/shared/enforced.md +83 -5
- package/templates/shared//345/217/215/351/246/210/344/277/256/345/244/215/351/227/255/347/216/257.md +86 -0
- package/templates/shared//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246.md +1 -1
- package/templates/shared//345/267/245/347/250/213/346/211/247/350/241/214/346/200/273/347/272/262.md +148 -0
- package/templates/shared//345/267/245/347/250/213/347/272/252/345/276/213.md +71 -0
- package/templates/shared//345/274/200/345/217/221/350/200/205/345/256/252/346/263/225.md +48 -43
- package/templates/shared//346/234/272/345/210/266/350/257/264/346/230/216.md +67 -0
- package/templates/shared//347/240/224/350/256/250/350/256/260/345/275/225.md +54 -0
- package/templates/shared//350/257/201/346/215/256/351/251/261/345/212/250/344/270/216/345/217/215/345/271/273/350/247/211.md +27 -17
- package/templates/shared//350/264/241/347/214/256/350/247/204/350/214/203.md +78 -0
- package/templates/verify/enforced.md +87 -263
- package/templates/verify//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245.md +46 -87
- package/templates/verify//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +17 -0
- package/templates/verify//345/256/241/346/237/245/346/270/205/345/215/225.md +79 -0
- package/templates/verify//346/236/266/346/236/204/350/257/255/344/271/211/347/272/242/347/272/277.md +60 -0
- package/templates/verify//351/252/214/350/257/201/346/226/271/346/263/225.md +72 -0
- package/dist/core/scope_checker.d.ts +0 -29
- package/dist/core/scope_checker.d.ts.map +0 -1
- package/dist/core/scope_checker.js +0 -53
- package/dist/core/scope_checker.js.map +0 -1
- package/templates/build/Bug/345/210/206/346/236/220.md +0 -59
- package/templates/build/Git/346/223/215/344/275/234.md +0 -48
- package/templates/build/OOD/350/256/276/350/256/241/346/221/230/350/246/201.md +0 -46
- package/templates/build/React/346/216/245/345/217/243/351/233/206/346/210/220.md +0 -42
- package/templates/build/Schema/345/217/230/346/233/264/346/265/201/346/260/264/347/272/277.md +0 -52
- package/templates/build/TS/350/264/250/351/207/217/345/256/241/346/237/245.md +0 -78
- package/templates/build//344/270/212/346/270/270/344/272/244/345/217/211/351/252/214/350/257/201.md +0 -68
- package/templates/build//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245/351/252/214/350/257/201.md +0 -56
- package/templates/build//344/273/243/347/240/201/351/227/250/347/246/201.md +0 -58
- package/templates/build//345/205/250/346/240/210/346/265/201/347/250/213/344/277/256/345/244/215.md +0 -48
- package/templates/build//345/210/207/347/211/207/346/211/247/350/241/214/347/272/252/345/276/213.md +0 -108
- package/templates/build//345/210/207/347/211/207/347/253/257/345/210/260/347/253/257/351/252/214/350/257/201.md +0 -221
- package/templates/build//345/212/237/350/203/275/345/274/200/345/217/221.md +0 -66
- package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260.md +0 -39
- package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213.md +0 -33
- package/templates/build//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/256/241/346/237/245.md +0 -70
- package/templates/build//345/220/216/347/253/257/346/216/245/345/217/243/345/256/236/347/216/260.md +0 -43
- package/templates/build//345/233/275/351/231/205/345/214/226.md +0 -45
- package/templates/build//345/256/211/345/205/250/345/212/240/345/233/272/346/265/201/346/260/264/347/272/277.md +0 -68
- package/templates/build//345/256/211/345/205/250/345/256/241/346/237/245.md +0 -154
- package/templates/build//345/256/211/345/205/250/345/256/241/350/256/241.md +0 -47
- package/templates/build//345/267/245/347/250/213/347/272/252/345/276/213.md +0 -56
- package/templates/build//346/200/247/350/203/275/345/210/206/346/236/220.md +0 -59
- package/templates/build//346/200/247/350/203/275/346/265/201/346/260/264/347/272/277.md +0 -53
- package/templates/build//346/216/245/345/217/243/351/233/206/346/210/220/346/265/201/346/260/264/347/272/277.md +0 -76
- package/templates/build//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273.md +0 -63
- package/templates/build//346/226/260/350/200/201/351/200/273/350/276/221/346/257/224/345/257/271/346/227/245/345/277/227.md +0 -39
- package/templates/build//346/235/203/351/231/220/350/256/244/350/257/201.md +0 -49
- package/templates/build//346/265/213/350/257/225/350/264/250/351/207/217.md +0 -45
- package/templates/build//347/206/224/346/226/255/351/231/215/347/272/247.md +0 -49
- package/templates/build//347/212/266/346/200/201/346/265/201/350/275/254.md +0 -43
- package/templates/build//347/213/254/347/253/213/345/256/241/346/237/245.md +0 -45
- package/templates/build//347/272/246/346/235/237/345/256/236/347/216/260.md +0 -47
- package/templates/build//347/274/226/347/240/201/345/260/261/347/273/252/345/256/241/346/237/245.md +0 -60
- package/templates/build//347/274/226/347/240/201/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -22
- package/templates/build//347/274/226/347/240/201/350/264/250/351/207/217.md +0 -46
- package/templates/build//347/274/226/347/240/201/351/230/266/346/256/265/346/211/247/350/241/214.md +0 -105
- package/templates/build//347/274/272/351/231/267/347/256/241/347/220/206.md +0 -47
- package/templates/build//350/200/246/345/220/210/346/243/200/346/265/213.md +0 -86
- package/templates/build//350/246/206/347/233/226/347/216/207/346/240/207/345/207/206.md +0 -40
- package/templates/build//350/264/250/351/207/217/345/256/241/346/237/245.md +0 -111
- package/templates/build//350/277/201/347/247/273/346/265/201/346/260/264/347/272/277.md +0 -52
- package/templates/build//351/200/232/347/224/250/350/264/250/351/207/217.md +0 -176
- package/templates/build//351/207/215/346/236/204/346/226/271/346/241/210.md +0 -61
- package/templates/build//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +0 -53
- package/templates/build//351/230/262/345/276/241/346/200/247/347/274/226/347/240/201.md +0 -94
- package/templates/build//351/233/206/346/210/220/351/252/214/350/257/201.md +0 -67
- package/templates/build//351/233/267/345/214/272/345/217/215/346/250/241/345/274/217.md +0 -135
- package/templates/build//351/252/214/346/224/266/346/240/207/345/207/206/345/256/241/346/237/245.md +0 -64
- package/templates/build//351/252/214/346/224/266/346/265/213/350/257/225/350/247/204/345/210/222.md +0 -75
- package/templates/design/API/350/256/276/350/256/241.md +0 -47
- package/templates/design/N/345/212/2401/346/237/245/350/257/242.md +0 -48
- package/templates/design/OOD/350/256/276/350/256/241.md +0 -72
- package/templates/design//344/270/200/350/207/264/346/200/247/346/240/241/351/252/214.md +0 -109
- package/templates/design//344/270/215/347/241/256/345/256/232/346/227/266/345/244/264/350/204/221/351/243/216/346/232/264.md +0 -105
- package/templates/design//344/273/273/345/212/241/346/213/206/350/247/243.md +0 -61
- package/templates/design//344/273/273/345/212/241/350/247/204/345/210/222.md +0 -84
- package/templates/design//344/274/232/350/257/235/346/201/242/345/244/215-procedures.md +0 -78
- package/templates/design//345/205/274/345/256/271/346/200/247/346/243/200/346/237/245.md +0 -89
- package/templates/design//345/210/207/347/211/207/350/256/241/345/210/222.md +0 -149
- package/templates/design//345/211/215/347/253/257/346/200/247/350/203/275.md +0 -49
- package/templates/design//345/216/206/345/217/262/351/201/227/347/225/231/351/233/267/345/214/272/346/270/205/345/215/225.md +0 -50
- package/templates/design//345/216/237/345/236/213/346/272/220/347/240/201/346/217/220/345/217/226.md +0 -78
- package/templates/design//345/216/237/345/236/213/350/257/264/346/230/216.md +0 -200
- package/templates/design//345/216/237/345/236/213/350/257/264/346/230/216/345/256/241/346/237/245.md +0 -81
- package/templates/design//345/220/221/345/220/216/345/205/274/345/256/271/346/200/247/345/220/210/350/247/204/346/212/245/345/221/212.md +0 -52
- package/templates/design//345/221/275/344/273/244/346/211/247/350/241/214-procedures.md +0 -45
- package/templates/design//345/221/275/344/273/244/350/267/257/347/224/261-procedures.md +0 -46
- package/templates/design//345/221/275/345/220/215.md +0 -49
- package/templates/design//345/242/236/351/207/217/350/276/271/347/225/214/347/225/214/345/256/232/346/226/207/346/241/243.md +0 -48
- package/templates/design//345/267/245/345/205/267/350/260/203/347/224/250-procedures.md +0 -41
- package/templates/design//345/271/266/345/217/221/346/216/247/345/210/266.md +0 -50
- package/templates/design//346/212/200/346/234/257/351/200/211/345/236/213.md +0 -33
- package/templates/design//346/216/245/345/217/243/345/257/271/346/216/245/346/226/271/346/241/210.md +0 -97
- package/templates/design//346/224/271/351/200/240/345/275/261/345/223/215/350/214/203/345/233/264/350/257/204/344/274/260.md +0 -56
- package/templates/design//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264/346/226/271/346/241/210.md +0 -75
- package/templates/design//346/225/260/346/215/256/350/241/200/347/274/230/345/233/276.md +0 -49
- package/templates/design//346/227/240/351/232/234/347/242/215.md +0 -49
- package/templates/design//346/236/266/346/236/204/345/206/263/347/255/226/350/256/260/345/275/225.md +0 -53
- package/templates/design//346/236/266/346/236/204/345/256/241/346/237/245.md +0 -256
- package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241-constraints.md +0 -177
- package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241-procedures.md +0 -130
- package/templates/design//346/246/202/345/277/265/351/252/214/350/257/201/346/265/201/346/260/264/347/272/277.md +0 -47
- package/templates/design//346/272/220/347/240/201/345/216/237/345/236/213/344/272/244/344/273/230.md +0 -58
- package/templates/design//347/216/260/346/234/211/347/263/273/347/273/237/345/267/256/350/267/235/345/210/206/346/236/220.md +0 -114
- package/templates/design//347/237/245/350/257/206/347/273/264/346/212/244/346/265/201/346/260/264/347/272/277.md +0 -64
- package/templates/design//347/254/254/344/270/200/346/200/247/345/216/237/347/220/206/346/216/250/347/220/206.md +0 -182
- package/templates/design//347/264/247/346/200/245/345/233/236/346/273/232/346/211/213/345/206/214.md +0 -77
- package/templates/design//347/274/226/347/240/201/345/211/215/346/276/204/346/270/205.md +0 -85
- package/templates/design//350/200/201/347/263/273/347/273/237/345/210/207/347/211/207/350/247/204/345/210/222.md +0 -48
- package/templates/design//350/207/252/344/270/273/351/200/211/345/236/213.md +0 -57
- package/templates/design//350/256/276/350/256/241/344/270/200/350/207/264/346/200/247/351/252/214/346/224/266/346/212/245/345/221/212.md +0 -34
- package/templates/design//350/256/276/350/256/241/344/272/247/347/211/251/347/224/237/346/210/220/344/270/216/345/244/215/351/252/214.md +0 -60
- package/templates/design//350/256/276/350/256/241/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -21
- package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241-procedures.md +0 -123
- package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241.md +0 -109
- package/templates/design//350/257/246/347/273/206/350/256/276/350/256/241/345/256/241/346/237/245.md +0 -88
- package/templates/design//350/260/203/350/257/225/346/226/271/346/263/225/350/256/272.md +0 -43
- package/templates/design//350/277/201/347/247/273/350/257/204/344/274/260.md +0 -67
- package/templates/design//351/232/224/347/246/273/351/200/202/351/205/215/345/231/250/346/226/271/346/241/210.md +0 -44
- package/templates/design//351/234/200/346/261/202/346/276/204/346/270/205.md +0 -65
- package/templates/design//351/234/200/346/261/202/350/264/250/351/207/217/345/256/241/346/237/245.md +0 -88
- package/templates/design//351/242/206/345/237/237/351/251/261/345/212/250/350/256/276/350/256/241.md +0 -43
- package/templates/operate//345/217/221/345/270/203/350/257/264/346/230/216/345/256/241/346/237/245.md +0 -60
- package/templates/operate//350/277/220/347/273/264/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -22
- package/templates/operate//351/203/250/347/275/262/351/205/215/347/275/256/345/256/241/346/237/245.md +0 -59
- package/templates/shared/Diff/345/275/222/345/261/236/350/277/275/350/270/252.md +0 -55
- package/templates/shared/Java/350/264/250/351/207/217/351/227/250/347/246/201.md +0 -54
- package/templates/shared/OOD/344/270/216SOLID/350/256/276/350/256/241.md +0 -48
- package/templates/shared//344/272/247/347/211/251Schema/346/263/250/345/206/214/344/270/255/345/277/203.md +0 -57
- package/templates/shared//344/272/247/347/211/251/345/245/221/347/272/246.md +0 -44
- package/templates/shared//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/345/245/221/347/272/246.md +0 -116
- package/templates/shared//344/273/273/345/212/241/344/270/212/344/270/213/346/226/207/347/224/237/345/221/275/345/221/250/346/234/237.md +0 -45
- package/templates/shared//344/273/273/345/212/241/347/212/266/346/200/201/346/234/272.md +0 -55
- package/templates/shared//344/273/273/345/212/241/347/256/241/347/220/206/345/231/250.md +0 -55
- package/templates/shared//344/274/230/351/233/205/345/201/234/346/234/272.md +0 -43
- package/templates/shared//344/275/234/347/224/250/345/237/237/344/270/216/345/257/206/351/222/245/346/213/246/346/210/252.md +0 -54
- package/templates/shared//344/275/234/347/224/250/345/237/237/347/247/237/347/272/246.md +0 -55
- package/templates/shared//345/206/262/347/252/201/351/227/250/347/246/201.md +0 -55
- package/templates/shared//345/206/263/347/255/226/347/275/221/345/205/263.md +0 -47
- package/templates/shared//345/210/207/347/211/207/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -72
- package/templates/shared//345/217/230/345/274/202/345/256/241/350/256/241.md +0 -58
- package/templates/shared//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/245/221/347/272/246.md +0 -40
- package/templates/shared//345/221/275/344/273/244/346/211/247/350/241/214.md +0 -48
- package/templates/shared//345/221/275/344/273/244/350/267/257/347/224/261.md +0 -45
- package/templates/shared//345/233/236/345/275/222/347/237/251/351/230/265.md +0 -54
- package/templates/shared//345/244/232/347/247/237/346/210/267.md +0 -49
- package/templates/shared//345/256/241/350/256/241/346/227/245/345/277/227.md +0 -46
- package/templates/shared//345/257/274/345/205/245/345/257/274/345/207/272.md +0 -51
- package/templates/shared//345/267/245/344/275/234/345/214/272/344/272/222/346/226/245/351/224/201.md +0 -52
- package/templates/shared//345/267/245/344/275/234/345/214/272/345/224/244/351/206/222.md +0 -54
- package/templates/shared//345/267/245/344/275/234/346/265/201/345/245/221/347/272/246.md +0 -42
- package/templates/shared//345/267/245/344/275/234/346/265/201/345/274/225/346/223/216.md +0 -50
- package/templates/shared//345/267/245/344/275/234/346/265/201/346/250/241/347/211/210/345/214/205.md +0 -34
- package/templates/shared//345/267/245/345/205/267/350/260/203/347/224/250.md +0 -48
- package/templates/shared//345/271/266/345/217/221/351/224/201.md +0 -57
- package/templates/shared//346/211/247/350/241/214/345/256/210/345/215/253/350/257/204/344/274/260.md +0 -47
- package/templates/shared//346/211/251/345/261/225/347/224/237/345/221/275/345/221/250/346/234/237.md +0 -34
- package/templates/shared//346/212/200/346/234/257/345/206/263/347/255/226/344/270/273/346/235/203.md +0 -50
- package/templates/shared//346/212/245/350/241/250/347/273/237/350/256/241.md +0 -50
- package/templates/shared//346/224/257/344/273/230.md +0 -51
- package/templates/shared//346/225/217/346/204/237/344/277/241/346/201/257/345/244/204/347/220/206.md +0 -77
- package/templates/shared//346/225/217/346/204/237/344/277/241/346/201/257/346/211/253/346/217/217.md +0 -53
- package/templates/shared//346/225/260/346/215/256/346/235/203/351/231/220.md +0 -47
- package/templates/shared//346/226/275/345/267/245/346/214/207/344/273/244/345/245/221/347/272/246.md +0 -69
- package/templates/shared//346/227/245/345/277/227/346/262/273/347/220/206.md +0 -31
- package/templates/shared//346/234/272/345/210/266/350/207/252/346/262/273/347/220/206.md +0 -31
- package/templates/shared//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226.md +0 -50
- package/templates/shared//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md +0 -38
- package/templates/shared//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +0 -154
- package/templates/shared//346/250/241/347/211/210Frontmatter.md +0 -125
- package/templates/shared//346/250/241/347/211/210/350/264/241/347/214/256/346/214/207/345/215/227.md +0 -282
- package/templates/shared//346/250/241/347/211/210/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247.md +0 -48
- package/templates/shared//346/262/273/347/220/206/350/277/220/350/241/214/346/227/266/345/276/252/347/216/257.md +0 -56
- package/templates/shared//346/263/250/345/206/214/350/241/250/345/237/272/347/241/200/350/256/276/346/226/275.md +0 -49
- package/templates/shared//346/274/224/350/277/233/345/233/236/345/275/222/351/227/250/346/216/247.md +0 -50
- package/templates/shared//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246.md +0 -86
- package/templates/shared//347/237/245/350/257/206/344/270/273/346/235/203.md +0 -66
- package/templates/shared//347/237/245/350/257/206/346/262/273/347/220/206.md +0 -31
- package/templates/shared//347/237/245/350/257/206/346/263/250/345/205/245/350/276/271/347/225/214.md +0 -47
- package/templates/shared//347/273/206/350/212/202/347/272/252/345/276/213.md +0 -54
- package/templates/shared//350/204/221/346/232/264/344/270/216/346/226/271/346/241/210/346/216/242/347/264/242.md +0 -51
- package/templates/shared//350/256/241/345/210/222/345/211/215/347/275/256/351/227/250.md +0 -47
- package/templates/shared//350/256/276/350/256/241/344/272/247/347/211/251/345/214/205.md +0 -58
- package/templates/shared//350/257/255/344/271/211/350/257/201/346/215/256.md +0 -55
- package/templates/shared//350/267/250/345/271/263/345/217/260/350/267/257/345/276/204/345/256/211/345/205/250.md +0 -41
- package/templates/shared//350/276/223/345/205/245/346/235/220/346/226/231/345/245/221/347/272/246.md +0 -50
- package/templates/shared//350/277/220/350/241/214/345/256/211/345/205/250/345/214/205.md +0 -58
- package/templates/shared//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250.md +0 -62
- package/templates/shared//351/200/232/347/224/250/346/234/272/346/242/260/346/235/241/346/254/276.md +0 -47
- package/templates/shared//351/200/232/347/237/245.md +0 -50
- package/templates/shared//351/203/250/347/275/262/351/205/215/347/275/256.md +0 -14
- package/templates/shared//351/205/215/347/275/256/344/274/230/345/205/210/347/272/247.md +0 -67
- package/templates/shared//351/205/215/347/275/256/350/220/275/347/233/230/350/276/271/347/225/214.md +0 -32
- package/templates/shared//351/230/262/345/255/244/345/262/233/345/256/236/347/216/260.md +0 -51
- package/templates/shared//351/233/266/351/205/215/347/275/256/345/210/235/345/247/213/345/214/226.md +0 -57
- package/templates/shared//351/252/214/346/224/266/346/250/241/347/211/210/350/276/223/345/207/272/345/245/221/347/272/246.md +0 -71
- package/templates/shared//351/252/214/350/257/201/345/221/275/344/273/244/347/224/237/346/210/220.md +0 -55
- package/templates/shared//351/252/214/350/257/201/345/245/221/347/272/246.md +0 -48
- package/templates/verify/Docker/351/203/250/347/275/262.md +0 -46
- package/templates/verify/POC/347/273/223/350/256/272.md +0 -53
- package/templates/verify/React/345/210/227/350/241/250/350/241/250/346/240/274.md +0 -43
- package/templates/verify/React/347/212/266/346/200/201/347/256/241/347/220/206.md +0 -42
- package/templates/verify/React/347/273/204/344/273/266.md +0 -42
- package/templates/verify/React/350/241/250/345/215/225.md +0 -43
- package/templates/verify/React/350/267/257/347/224/261.md +0 -43
- package/templates/verify/SOLID/344/273/243/347/240/201/345/256/241/346/237/245.md +0 -74
- package/templates/verify/SOLID/350/256/276/350/256/241.md +0 -31
- package/templates/verify/Schema/345/205/274/345/256/271.md +0 -42
- package/templates/verify/Vue/347/212/266/346/200/201/347/256/241/347/220/206.md +0 -42
- package/templates/verify/Vue/347/273/204/344/273/266.md +0 -42
- package/templates/verify/Vue/350/267/257/347/224/261.md +0 -43
- package/templates/verify//344/270/212/346/270/270/350/256/276/350/256/241/344/272/244/345/217/211/351/252/214/350/257/201/345/256/241/346/237/245.md +0 -76
- package/templates/verify//344/270/273/351/223/276/350/267/257/346/216/245/345/205/245.md +0 -38
- package/templates/verify//344/272/213/344/273/266/351/251/261/345/212/250.md +0 -46
- package/templates/verify//344/272/213/345/212/241/346/250/241/345/274/217.md +0 -42
- package/templates/verify//344/273/243/347/240/201/345/217/257/347/273/264/346/212/244/346/200/247/344/270/216/345/217/257/350/247/202/346/265/213/346/200/247/345/256/241/346/237/245.md +0 -92
- package/templates/verify//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/351/252/214/346/224/266.md +0 -64
- package/templates/verify//344/274/232/350/257/235/346/201/242/345/244/215.md +0 -46
- package/templates/verify//345/206/263/347/255/226/345/256/214/346/225/264/346/200/247/345/256/241/346/237/245.md +0 -71
- package/templates/verify//345/210/206/351/241/265/346/237/245/350/257/242.md +0 -41
- package/templates/verify//345/211/215/347/253/257/351/241/265/351/235/242.md +0 -40
- package/templates/verify//345/216/206/345/217/262/346/225/260/346/215/256/346/270/205/346/264/227/350/204/232/346/234/254.md +0 -55
- package/templates/verify//345/217/221/345/270/203/345/220/216/345/256/241/346/237/245.md +0 -73
- package/templates/verify//345/220/216/347/253/257API.md +0 -39
- package/templates/verify//345/242/236/345/210/240/346/224/271/346/237/245.md +0 -45
- package/templates/verify//345/244/226/351/203/250/344/276/235/350/265/226.md +0 -43
- package/templates/verify//345/245/221/347/272/246/345/205/274/345/256/271.md +0 -42
- package/templates/verify//345/256/232/346/227/266/344/273/273/345/212/241.md +0 -39
- package/templates/verify//345/256/236/346/227/266/346/216/250/351/200/201.md +0 -48
- package/templates/verify//345/256/241/346/237/245/346/221/230/350/246/201.md +0 -58
- package/templates/verify//345/267/245/344/275/234/346/265/201.md +0 -38
- package/templates/verify//345/271/266/345/217/221/345/256/241/346/237/245.md +0 -132
- package/templates/verify//345/274/202/346/255/245/345/257/274/345/207/272.md +0 -41
- package/templates/verify//346/200/247/350/203/275/345/256/241/346/237/245.md +0 -110
- package/templates/verify//346/216/245/345/217/243/345/245/221/347/272/246.md +0 -44
- package/templates/verify//346/216/245/345/217/243/345/245/221/347/272/246/345/256/241/346/237/245.md +0 -131
- package/templates/verify//346/220/234/347/264/242/346/250/241/345/274/217.md +0 -47
- package/templates/verify//346/225/205/351/232/234/345/244/215/347/233/230.md +0 -67
- package/templates/verify//346/225/260/346/215/256/345/272/223/345/217/230/346/233/264.md +0 -37
- package/templates/verify//346/225/260/346/215/256/351/232/220/347/247/201.md +0 -46
- package/templates/verify//346/226/207/344/273/266/344/270/212/344/274/240.md +0 -45
- package/templates/verify//346/227/245/345/277/227.md +0 -45
- package/templates/verify//346/234/254/345/234/260/346/265/217/350/247/210/345/231/250/351/252/214/346/224/266.md +0 -94
- package/templates/verify//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214.md +0 -65
- package/templates/verify//347/237/245/350/257/206/346/263/250/345/205/245.md +0 -38
- package/templates/verify//347/264/247/346/200/245/344/277/256/345/244/215/346/265/201/346/260/264/347/272/277.md +0 -76
- package/templates/verify//347/274/223/345/255/230/347/255/226/347/225/245.md +0 -45
- package/templates/verify//350/201/224/350/260/203/350/256/276/350/256/241/347/274/272/351/231/267/345/210/244/345/256/232.md +0 -67
- package/templates/verify//350/201/224/350/260/203/351/252/214/350/257/201.md +0 -87
- package/templates/verify//350/256/276/350/256/241/345/256/241/350/256/241.md +0 -184
- package/templates/verify//350/257/225/350/277/220/350/241/214/347/206/224/346/226/255.md +0 -74
- package/templates/verify//350/276/223/345/205/245/346/240/241/351/252/214.md +0 -44
- package/templates/verify//351/203/250/347/275/262/345/217/221/345/270/203.md +0 -101
- package/templates/verify//351/224/231/350/257/257/345/244/204/347/220/206.md +0 -46
- package/templates/verify//351/224/231/350/257/257/350/276/271/347/225/214.md +0 -38
- package/templates/verify//351/232/220/347/247/201/345/256/241/346/237/245.md +0 -37
- package/templates/verify//351/252/214/350/257/201.md +0 -38
- package/templates/verify//351/252/214/350/257/201/350/201/232/345/220/210/346/243/200/346/237/245.md +0 -22
package/templates/build//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201.md
CHANGED
|
@@ -1,99 +1,70 @@
|
|
|
1
1
|
---
|
|
2
|
-
id: ka-
|
|
2
|
+
id: ka-guidance-测试优先编码
|
|
3
3
|
kind: guidance
|
|
4
4
|
title: 测试优先编码
|
|
5
5
|
sync_policy: copy_to_project
|
|
6
6
|
status: active
|
|
7
7
|
triggers:
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
- coding
|
|
13
|
-
- test first
|
|
14
|
-
- 测试优先
|
|
8
|
+
- 测试
|
|
9
|
+
- TDD
|
|
10
|
+
- 覆盖率
|
|
11
|
+
- 单元测试
|
|
15
12
|
- 先写测试
|
|
13
|
+
- 测试优先
|
|
14
|
+
- test first
|
|
15
|
+
- 测试驱动
|
|
16
|
+
- 写测试
|
|
16
17
|
extra:
|
|
17
|
-
name: test-first-coding
|
|
18
|
-
type: procedure
|
|
18
|
+
name: test-first-coding
|
|
19
19
|
scope:
|
|
20
|
-
-
|
|
21
|
-
- frontend
|
|
20
|
+
- '*'
|
|
22
21
|
products:
|
|
23
22
|
- '*'
|
|
24
|
-
|
|
25
|
-
- coding_readiness_contract_entry
|
|
26
|
-
- existing_system_analysis_contract_entry
|
|
27
|
-
- architecture_design_contract_entry
|
|
28
|
-
- detail_discipline_contract
|
|
29
|
-
- first_principles_contract
|
|
30
|
-
required_sections:
|
|
31
|
-
- 编码准备门
|
|
32
|
-
- 测试优先计划
|
|
33
|
-
- 约束消费报告
|
|
34
|
-
- 主线消费检查
|
|
35
|
-
- 编码完成审查
|
|
36
|
-
hard_rules:
|
|
37
|
-
- coding workflow 不得直接进入实现
|
|
38
|
-
- 必须先生成 CodingReadinessGate
|
|
39
|
-
- 必须先生成 TestFirstPlan 或合法 not_applicable_with_reason
|
|
40
|
-
- 有测试框架且行为可断言时,必须先写失败测试或回归测试
|
|
41
|
-
- readiness_status=blocked/manual_required 时不得写实现代码
|
|
42
|
-
- 现有项目新需求必须消费 ExistingSystemAnalysis 和 RequirementGapAnalysis
|
|
43
|
-
- 根据架构设计编码时必须消费 ArchitectureDesignContract
|
|
44
|
-
- 测试失败不得删除测试、降低断言、skip 后声称通过
|
|
45
|
-
- 每个切片至少覆盖 ≥9 个测试场景(≥3 正常路径 + ≥3 边界条件 + ≥3 异常路径)
|
|
46
|
-
- 模式 B 不得用于支付/状态流转/权限/跨系统同步逻辑
|
|
47
|
-
acceptance_checks:
|
|
48
|
-
- CodingReadinessGate status 非 blocked
|
|
49
|
-
- TestFirstPlan 已创建且 status 为 written 或 expected_failure_recorded
|
|
50
|
-
- 约束消费报告无 blocking_missing_constraints
|
|
51
|
-
- 主线消费检查无 orphan_findings
|
|
52
|
-
- 编码完成审查 review.passed 为 true
|
|
23
|
+
type: procedure
|
|
53
24
|
lifecycle_status: active
|
|
54
|
-
version: 1.
|
|
55
|
-
last_reviewed: '2026-06-
|
|
56
|
-
domain: build
|
|
25
|
+
version: 1.0.0
|
|
26
|
+
last_reviewed: '2026-06-17'
|
|
57
27
|
verification_layer: L2
|
|
58
28
|
stage: build
|
|
29
|
+
domain: build
|
|
59
30
|
owner_mechanism: mc-coding-readiness
|
|
60
31
|
---
|
|
61
32
|
|
|
62
|
-
|
|
63
|
-
|
|
33
|
+
# 测试优先编码:怎么让代码可验证
|
|
34
|
+
|
|
35
|
+
> 吸收旧的「测试优先编码」「覆盖率标准」「测试质量」。
|
|
36
|
+
> [[工程执行总纲]] 目标驱动:先定可验证目标,未执行验证不算完成。
|
|
37
|
+
|
|
38
|
+
## 何时必须先写测试
|
|
39
|
+
|
|
40
|
+
- 有测试框架且行为可断言时,先写失败测试(red)再实现(green)
|
|
41
|
+
- 修 bug 时先写复现测试(回归测试)
|
|
42
|
+
|
|
43
|
+
## TDD 循环
|
|
44
|
+
|
|
45
|
+
red(失败测试)→ green(最小实现通过)→ refactor(重构保持绿)
|
|
46
|
+
|
|
47
|
+
- 每一步都可验证,不积累"最后再测"
|
|
48
|
+
- 测试描述行为,不测实现细节(实现变了测试不该挂)
|
|
49
|
+
|
|
50
|
+
## 覆盖率标准
|
|
51
|
+
|
|
52
|
+
- 增量代码行覆盖率 ≥ 80%(build-gate BLD-G05 守护)
|
|
53
|
+
- 覆盖率是下限不是目标——覆盖关键路径比追数字重要
|
|
54
|
+
- 重点覆盖:正常路径 / 错误路径 / 边界 / 权限 / 并发
|
|
55
|
+
|
|
56
|
+
## 测试质量(禁止伪满足)
|
|
57
|
+
|
|
58
|
+
- 禁止"测试自己证明自己"(断言恒真、mock 掉被测逻辑)
|
|
59
|
+
- 禁止为过门禁删断言/加无关 mock/降低覆盖率([[工程执行总纲]] 精准修改硬失败)
|
|
60
|
+
- 测试要有意义:能抓到真实回归
|
|
61
|
+
|
|
62
|
+
## 不适用场景
|
|
64
63
|
|
|
65
|
-
|
|
66
|
-
1. **编码准备门**:
|
|
67
|
-
- 检查是否有验证计划 (verification_plan_ref)
|
|
68
|
-
- 检查前置条件(现有项目需差距分析,架构设计需 ArchitectureDesignContract)
|
|
69
|
-
- 检查约束消费
|
|
70
|
-
2. **测试优先计划**:
|
|
71
|
-
- 有测试框架且行为可断言 → test_first(先写失败测试)
|
|
72
|
-
- 不能自动测试 → verification_case_first 或 manual_acceptance_first
|
|
73
|
-
- TestFirstPlan 绑定需求、主链路入口和验收标准
|
|
74
|
-
2a. **头脑风暴触发**:若实现方案选择存在不确定性(模式 A/B 不确定、模块间依赖不清晰、反复修复同一逻辑):
|
|
75
|
-
→ 进入「不确定时头脑风暴流程」(templates/procedures/不确定时头脑风暴.md)
|
|
76
|
-
→ 若 fundamental_need 为空 → 先触发 FP-01
|
|
77
|
-
3. **编码实现**: 按 TestFirstPlan 选择模式:
|
|
78
|
-
- **模式 A**:严格测试先行(red→green→refactor)——推荐核心逻辑
|
|
79
|
-
1. 编写失败测试(red)
|
|
80
|
-
2. 编写最小实现使测试通过(green)
|
|
81
|
-
3. 重构优化(refactor)
|
|
82
|
-
- **模式 B**:红绿合并(同时编写测试和实现)——适用简单逻辑/CRUD
|
|
83
|
-
- 约束:不降低覆盖率(≥9 场景);不适用于支付/状态流转/权限/跨系统同步
|
|
84
|
-
- **模式 B 约束**:不降低覆盖率(≥9 场景);禁止用于支付/状态流转/权限/跨系统同步逻辑
|
|
85
|
-
4. **主线消费检查**: 新增文件、组件、API、service 被真实消费
|
|
86
|
-
5. **编码完成审查**: reviewCodingCompletion 验证所有硬规则
|
|
64
|
+
- 纯 UI 布局/配置/无行为逻辑的代码:标注 `not_applicable_with_reason`,不强行写无意义测试
|
|
87
65
|
|
|
88
|
-
##
|
|
89
|
-
- [ ] CodingReadinessGate allowed
|
|
90
|
-
- [ ] TestFirstPlan status 为 written
|
|
91
|
-
- [ ] 约束消费无 blocking_missing
|
|
92
|
-
- [ ] 主线消费无 orphan
|
|
93
|
-
- [ ] 编码完成审查 passed
|
|
66
|
+
## 验证
|
|
94
67
|
|
|
95
|
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
- 测试失败不得删测试或降断言
|
|
99
|
-
- 未消费前置条件不得编码
|
|
68
|
+
- 测试全绿(BLD-G05)
|
|
69
|
+
- 覆盖率达标
|
|
70
|
+
- 关键路径有断言,不是空壳测试
|
|
@@ -12,8 +12,8 @@ extra:
|
|
|
12
12
|
products:
|
|
13
13
|
- '*'
|
|
14
14
|
lifecycle_status: active
|
|
15
|
-
version:
|
|
16
|
-
last_reviewed: '2026-06-
|
|
15
|
+
version: 2.0.0
|
|
16
|
+
last_reviewed: '2026-06-17'
|
|
17
17
|
type: artifact
|
|
18
18
|
domain: build
|
|
19
19
|
stage: build
|
|
@@ -22,25 +22,32 @@ extra:
|
|
|
22
22
|
|
|
23
23
|
# 测试计划
|
|
24
24
|
|
|
25
|
+
> **产物定位**:build 阶段必出。定义"测什么、怎么测、什么证据算通过"。
|
|
26
|
+
> **核心纪律**:禁止假验证——E0(无运行时证据)不可接受([[证据驱动与反幻觉]] 第 5/10 条)。覆盖正常/异常/边界/权限/并发,不只 happy path。
|
|
27
|
+
> **反退化纪律**:每个测试条目(T-*)必须在「测试条目」表中逐行填写真实编号(REQ-*/SLC-*),禁止只列前几行后用「…」省略、禁止用一句话概括代替表格行。
|
|
28
|
+
|
|
25
29
|
## 1. 测试范围
|
|
26
|
-
-
|
|
30
|
+
- 关联任务/需求:
|
|
27
31
|
- 测试目标(验证哪些功能点):
|
|
28
|
-
-
|
|
32
|
+
- 不在范围内的事项:
|
|
29
33
|
|
|
30
34
|
## 2. 测试条目
|
|
31
|
-
| 编号 | 功能点 | 测试类型 | 覆盖策略 | 关联需求基线 | 关联切片 | 关联任务卡 | test_phase | 优先级 | Evidence 级别 |
|
|
32
|
-
|------|--------|---------|---------|-------------|-----------|-----------|-----------|--------|--------------|
|
|
33
|
-
| T-01 | 正常流程 | 集成测试 | 正常路径 | REQ-NNN | SLC-{模块}-{序号} | TASK-NNN | red→green | P0 | E1 |
|
|
34
|
-
| T-02 | 参数缺失 | 单元测试 | 错误路径 | REQ-NNN | SLC-{模块}-{序号} | TASK-NNN | red→green | P0 | E1 |
|
|
35
|
-
| T-03 | 权限不足 | 集成测试 | 错误路径 | REQ-NNN | SLC-{模块}-{序号} | TASK-NNN | red→green | P0 | E2 |
|
|
36
|
-
| T-04 | 边界值 | 单元测试 | 边界场景 | REQ-NNN | SLC-{模块}-{序号} | TASK-NNN | combined_red_green | P1 | E1 |
|
|
37
35
|
|
|
38
|
-
>
|
|
36
|
+
> 填**真实编号**:REQ-001(需求分析的真实 REQ)、SLC-用户-01(切片规划的真实切片)。build-gate cross_validation 校验测试↔需求的 REQ-* 一致性+覆盖率,占位符 REQ-NNN 会 fail-closed 阻断。
|
|
37
|
+
|
|
38
|
+
| 编号 | 功能点 | 测试类型 | 覆盖策略 | 关联需求 | 关联切片 | test_phase | 优先级 | Evidence 级别 |
|
|
39
|
+
|------|--------|---------|---------|---------|-----------|-----------|--------|--------------|
|
|
40
|
+
| T-01 | 正常流程 | 集成测试 | 正常路径 | REQ-001 | SLC-用户-01 | red→green | P0 | E1 |
|
|
41
|
+
| T-02 | 参数缺失 | 单元测试 | 错误路径 | REQ-001 | SLC-用户-01 | red→green | P0 | E1 |
|
|
42
|
+
| T-03 | 权限不足 | 集成测试 | 错误路径 | REQ-002 | SLC-用户-01 | red→green | P0 | E2 |
|
|
43
|
+
| T-04 | 边界值 | 单元测试 | 边界场景 | REQ-001 | SLC-用户-01 | combined | P1 | E1 |
|
|
44
|
+
|
|
45
|
+
> 覆盖策略必含:正常路径 / 错误路径 / 边界 / 权限 / 并发(适用时)。缺一类须说明理由。
|
|
39
46
|
|
|
40
47
|
## 3. 环境与数据
|
|
41
48
|
- 测试环境:
|
|
42
|
-
- 数据准备方式(业务API/页面操作/SQL
|
|
43
|
-
- 前置依赖(DDL
|
|
49
|
+
- 数据准备方式(业务API/页面操作/SQL脚本):
|
|
50
|
+
- 前置依赖(DDL迁移/配置/Mock):
|
|
44
51
|
|
|
45
52
|
## 4. 执行顺序
|
|
46
53
|
1. DDL 迁移验证
|
|
@@ -51,19 +58,19 @@ extra:
|
|
|
51
58
|
## 5. 验收标准
|
|
52
59
|
- [ ] 所有 P0 测试条目通过
|
|
53
60
|
- [ ] 所有 P1 测试条目通过
|
|
54
|
-
- [ ]
|
|
61
|
+
- [ ] 高风险变更有运行时验证(非静态分析)
|
|
55
62
|
- [ ] DDL 变更有回滚验证
|
|
56
63
|
|
|
57
|
-
##
|
|
64
|
+
## Evidence 级别
|
|
58
65
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
| AT-02 | 规划循环收敛性 | 超时检测 | Agent 在 max_steps 内收敛 | 步骤计数 |
|
|
63
|
-
| AT-03 | 错误恢复路径 | 异常注入 | Agent 遇到错误后能重试或降级 | 恢复日志 |
|
|
66
|
+
- **E0**:无运行时证据(仅静态分析/AI 摘要)— **不可接受**
|
|
67
|
+
- **E1**:运行时证据(测试输出/截图/API 响应日志)— 最低要求
|
|
68
|
+
- **E2**:完整运行时 + 端到端浏览器验证 — 推荐用于 P0 项
|
|
64
69
|
|
|
65
|
-
##
|
|
70
|
+
## 完成判定
|
|
66
71
|
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
72
|
+
- [ ] 测试条目覆盖正常/错误/边界/权限四类(适用时含并发)
|
|
73
|
+
- [ ] 每条标注 Evidence 级别,无 E0
|
|
74
|
+
- [ ] P0 项有验收标准且执行通过
|
|
75
|
+
- [ ] 失败用例有修复或明确说明
|
|
76
|
+
- [ ] 测试条目表逐行填真实编号,无「…」省略、无一句话概括代替
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ka-guidance-编码纪律
|
|
3
|
+
kind: guidance
|
|
4
|
+
title: 编码纪律
|
|
5
|
+
sync_policy: copy_to_project
|
|
6
|
+
status: active
|
|
7
|
+
triggers:
|
|
8
|
+
- 实现
|
|
9
|
+
- 编码
|
|
10
|
+
- 写代码
|
|
11
|
+
- 开发
|
|
12
|
+
- 编码阶段
|
|
13
|
+
- 切片执行
|
|
14
|
+
- 后端实现
|
|
15
|
+
- 前端实现
|
|
16
|
+
extra:
|
|
17
|
+
name: coding-discipline
|
|
18
|
+
scope:
|
|
19
|
+
- '*'
|
|
20
|
+
products:
|
|
21
|
+
- '*'
|
|
22
|
+
type: procedure
|
|
23
|
+
lifecycle_status: active
|
|
24
|
+
version: 1.0.0
|
|
25
|
+
last_reviewed: '2026-06-17'
|
|
26
|
+
verification_layer: L2
|
|
27
|
+
stage: build
|
|
28
|
+
domain: build
|
|
29
|
+
owner_mechanism: mc-coding-readiness
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# 编码纪律:怎么把代码写对
|
|
33
|
+
|
|
34
|
+
> 吸收旧的「编码阶段执行」「编码就绪审查」「编码质量」「切片执行纪律」「防御性编码」。
|
|
35
|
+
> 基本功(命名/注释/单一职责/错误处理)见 [[工程纪律]],不重复。
|
|
36
|
+
|
|
37
|
+
## 超大系统:先研讨实现策略再动手
|
|
38
|
+
|
|
39
|
+
开发切片计划 SLC 切片数 ≥ 5(超大系统)时,build 写代码前**必须**先 `sf_work action=deliberate target=code` 与用户研讨实现策略(头脑风暴 + 第一性原理),收敛后把结论总结留痕到 `docs/研讨记录/构建/产物-研讨记录.md`,再 act 写代码。
|
|
40
|
+
|
|
41
|
+
- 此规则由 build-gate `BLD-DELIB` 确定性门禁兜底——未研讨则 build 阻断,不是软建议
|
|
42
|
+
- 小任务(切片 < 5 或无切片计划)不强制,正常列改动清单即可
|
|
43
|
+
- 研讨重点:切片实现顺序、跨切片共享代码先沉淀、风险切片先行验证
|
|
44
|
+
|
|
45
|
+
## 工程骨架:首个切片建多工程目录(涉及多端时)
|
|
46
|
+
|
|
47
|
+
build 域第一个切片(首次 `act target=code`)时,按架构 §6.3 端清单 + intent.yaml `projects` 创建工程目录骨架——每个端一个独立工程目录(`backend/` `client-portal/` `admin-web/` `miniapp/` `shared/`),每个工程目录内建标准 `src/` + 独立 `.gitignore`(按技术栈)+ 各自构建配置(package.json/pom.xml 等)。
|
|
48
|
+
|
|
49
|
+
- 工程目录结构 = 架构 §6.3 端清单 + intent.yaml `projects`(build scope `allowed_paths` 据此放行)
|
|
50
|
+
- **每个工程独立 `.gitignore`**(不要只在根目录一个):前端 `node_modules/` `dist/`、Java `target/` `build/`、小程序 `miniprogram_npm/` 等
|
|
51
|
+
- 各工程独立构建配置(package.json/pom.xml/build.gradle),独立依赖、独立构建
|
|
52
|
+
- 单工程项目(纯后端 API)保持根 `src/`,不强制多工程
|
|
53
|
+
|
|
54
|
+
## 前端骨架先行(涉及 FE-* 端时)
|
|
55
|
+
|
|
56
|
+
涉及前端端(架构 §6.3 声明 FE-*)的项目,前端骨架切片先于业务页面:每个 FE-* 端先落地路由 / 状态管理 / API service 壳 / 认证拦截器 / 脱敏工具,再填充业务页面。
|
|
57
|
+
|
|
58
|
+
- 骨架切片须覆盖架构 §6.3 所有 FE-* 端(XVAL-SLC 校验 ARCH-*/FE-* 覆盖)
|
|
59
|
+
- 共享层(shared:类型/API client/工具)先于各端业务沉淀,避免散落
|
|
60
|
+
- 前端 API 调用封装到 service 层,禁止组件内直接 fetch/axios(build-gate ARC-06)
|
|
61
|
+
- Vue3/uni-app 等无内置脚手架的技术栈,配自定义模板合同(`config.scaffold.contracts`)
|
|
62
|
+
|
|
63
|
+
## 实现前:先列改动清单(精准修改)
|
|
64
|
+
|
|
65
|
+
动手前明确([[工程执行总纲]] 精准修改):
|
|
66
|
+
- 要改哪些文件、改什么行为
|
|
67
|
+
- 主链路入口在哪、必须接入(不接入=孤岛)
|
|
68
|
+
- 类型/schema 变化的必要联动调用方
|
|
69
|
+
- 不改什么(范围外文件不动)
|
|
70
|
+
|
|
71
|
+
## 实现中:不写半成品
|
|
72
|
+
|
|
73
|
+
- 不留空函数体、空 catch、TODO 占位(build-gate BLD-G02 守护)
|
|
74
|
+
- 关键业务行有中文注释,业务日志用中文事件名(BLD-G03)
|
|
75
|
+
- 错误处理:禁止静默吞异常,错误信息说清哪步失败+原因+下一步
|
|
76
|
+
- 边界:空数据、null、超长、并发、重复提交都要处理
|
|
77
|
+
|
|
78
|
+
## 类型安全(TS)
|
|
79
|
+
|
|
80
|
+
- 禁 `as any` 绕类型(TS-Q01),禁 `@ts-ignore/@ts-nocheck`(TS-Q02)
|
|
81
|
+
- 禁 `==`/`!=`,用 `===`/`!==`(TS-Q03)
|
|
82
|
+
- 禁 `var`,用 `let`/`const`(TS-Q04)
|
|
83
|
+
|
|
84
|
+
## 接口契约先行
|
|
85
|
+
|
|
86
|
+
- 接口契约先于实现(避免前端等后端)
|
|
87
|
+
- 后端接口有 OpenAPI 文档
|
|
88
|
+
- 每完成一个子模块及时联调,不要全做完才联调
|
|
89
|
+
|
|
90
|
+
## 防御性编码
|
|
91
|
+
|
|
92
|
+
- 外部输入一律校验(类型/范围/权限)
|
|
93
|
+
- 写操作考虑幂等
|
|
94
|
+
- 跨系统调用考虑超时/重试/熔断([[安全加固]])
|
|
95
|
+
|
|
96
|
+
## 反规避
|
|
97
|
+
|
|
98
|
+
- 空函数体/TODO 占位 = 半成品(违规)
|
|
99
|
+
- 不接入主链路 = 孤岛(违规)
|
|
100
|
+
- 静默 catch = 吞异常(违规)
|
|
101
|
+
- 为了过测试删断言/降覆盖率(违规,[[工程执行总纲]] 精准修改硬失败)
|
|
@@ -1,105 +1,74 @@
|
|
|
1
1
|
---
|
|
2
|
-
id: ka-
|
|
2
|
+
id: ka-guidance-调试排查
|
|
3
3
|
kind: guidance
|
|
4
4
|
title: 调试排查
|
|
5
5
|
sync_policy: copy_to_project
|
|
6
6
|
status: active
|
|
7
7
|
triggers:
|
|
8
|
+
- bug
|
|
8
9
|
- 调试
|
|
10
|
+
- 排查
|
|
11
|
+
- 报错
|
|
12
|
+
- 异常
|
|
13
|
+
- 失败
|
|
9
14
|
- 排障
|
|
10
|
-
-
|
|
11
|
-
- bug定位
|
|
12
|
-
- 问题排查
|
|
13
|
-
- 线上排查
|
|
14
|
-
- 异常排查
|
|
15
|
-
- 错误定位
|
|
15
|
+
- 定位
|
|
16
16
|
- 日志排查
|
|
17
17
|
- 缺陷修复
|
|
18
|
-
-
|
|
19
|
-
- 问题修复
|
|
20
|
-
- 异常修复
|
|
21
|
-
- 错误修复
|
|
22
|
-
- bug fix
|
|
23
|
-
- 缺陷处理
|
|
18
|
+
- bugfix
|
|
24
19
|
extra:
|
|
25
20
|
name: debug-investigation
|
|
26
|
-
type: procedure
|
|
27
21
|
scope:
|
|
28
|
-
-
|
|
29
|
-
- frontend
|
|
22
|
+
- '*'
|
|
30
23
|
products:
|
|
31
24
|
- '*'
|
|
25
|
+
type: procedure
|
|
32
26
|
lifecycle_status: active
|
|
33
|
-
version: 1.
|
|
34
|
-
last_reviewed: '2026-06-
|
|
35
|
-
domain:
|
|
36
|
-
- build
|
|
37
|
-
- verify
|
|
27
|
+
version: 1.0.0
|
|
28
|
+
last_reviewed: '2026-06-17'
|
|
38
29
|
verification_layer: L2
|
|
39
30
|
stage: build
|
|
31
|
+
domain: build
|
|
40
32
|
owner_mechanism: mc-verifier
|
|
41
33
|
---
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
# 调试排查:出了 bug 怎么定位根因
|
|
36
|
+
|
|
37
|
+
> 吸收旧的「调试排查」「Bug分析」「调试方法论」「全栈流程修复」「新老逻辑比对日志」。
|
|
38
|
+
> [[工程执行总纲]] 思考先行:禁止只修表象不找根因。
|
|
39
|
+
|
|
40
|
+
## 第一步:稳定复现
|
|
41
|
+
|
|
42
|
+
- 先找到稳定复现路径(无复现=瞎改)
|
|
43
|
+
- 记录复现步骤、环境、输入、预期 vs 实际
|
|
44
|
+
|
|
45
|
+
## 第二步:定位根因(不是表象)
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
4. **修复阶段**:确认根因后编写最小修复 + 回归测试
|
|
47
|
+
- 读日志/堆栈,追到真实失败点
|
|
48
|
+
- 区分:症状(报什么)vs 根因(为什么报)
|
|
49
|
+
- 二分法/日志插桩缩小范围
|
|
50
|
+
- 靠证据,不靠猜([[证据驱动与反幻觉]])
|
|
51
51
|
|
|
52
|
-
##
|
|
53
|
-
1. 复现问题:获取具体操作步骤、输入数据、环境信息
|
|
54
|
-
2. 确定影响范围:是全部用户还是特定条件?是偶发还是必现?
|
|
55
|
-
3. 查看日志:根据时间窗口搜索 traceId,查看完整请求链路日志
|
|
56
|
-
4. 查看监控:接口响应时间、错误率、资源使用(CPU/内存/磁盘)
|
|
57
|
-
5. 定位代码:根据日志中的异常堆栈定位到具体文件和方法
|
|
58
|
-
6. 分析根因:区分是代码 Bug、配置错误、数据异常还是环境问题
|
|
59
|
-
7. 验证假设:在本地或测试环境复现并验证根因(一次只验证一个假设)
|
|
60
|
-
8. 编写最小修复:修复范围只覆盖确认的根因,禁止顺手改其他代码
|
|
61
|
-
9. 使用 RED-GREEN 验证:回退修复 → 确认失败 → 恢复修复 → 确认通过
|
|
62
|
-
10. 添加回归测试(防止同类问题再发生)
|
|
52
|
+
## 第三步:最小修复
|
|
63
53
|
|
|
64
|
-
|
|
54
|
+
- 只改根因点,不扩大范围([[工程执行总纲]] 精准修改)
|
|
55
|
+
- 改老系统先比对新老逻辑差异
|
|
56
|
+
- 修复限于同一上下文;跨模块回到任务拆解
|
|
65
57
|
|
|
66
|
-
|
|
67
|
-
| 项目 | 内容 |
|
|
68
|
-
|------|------|
|
|
69
|
-
| 问题描述 | <!-- 现象描述 --> |
|
|
70
|
-
| 影响范围 | <!-- 用户/模块/接口 --> |
|
|
71
|
-
| 复现条件 | <!-- 步骤 --> |
|
|
72
|
-
| 严重程度 | P0/P1/P2 |
|
|
58
|
+
## 第四步:回归测试
|
|
73
59
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|------|------|---------|------|
|
|
77
|
-
| 观察 | — | <!-- 日志/监控 --> | <!-- 发现 --> |
|
|
78
|
-
| 假设 1 | <!-- 假设内容 --> | <!-- 验证方法 --> | 确认/否定 |
|
|
79
|
-
| 假设 2 | <!-- 假设内容 --> | <!-- 验证方法 --> | 确认/否定 |
|
|
60
|
+
- 先写复现测试(证明 bug 存在)→ 修复后证明 bug 消失
|
|
61
|
+
- 跑相关测试,确认没引入新问题
|
|
80
62
|
|
|
81
|
-
|
|
82
|
-
| 修改文件 | 修改内容 | 关联切片 |
|
|
83
|
-
|---------|---------|---------|
|
|
84
|
-
| <!-- 文件路径 --> | <!-- 修改说明 --> | SLC-{模块}-{序号} |
|
|
63
|
+
## 第五步:防复发
|
|
85
64
|
|
|
86
|
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
65
|
+
- 补测试守住这个修复
|
|
66
|
+
- 想想同类问题会不会在别处出现(举一反三)
|
|
67
|
+
- 必要时沉淀成规则/检查
|
|
89
68
|
|
|
90
|
-
##
|
|
91
|
-
- [ ] 问题可稳定复现(或记录了偶现条件)
|
|
92
|
-
- [ ] 日志中有 traceId 可追踪完整链路
|
|
93
|
-
- [ ] 调试过程有假设-验证记录
|
|
94
|
-
- [ ] 根因已确认而非停留在表象
|
|
95
|
-
- [ ] 修复范围仅限确认的根因
|
|
96
|
-
- [ ] 修复包含回归测试
|
|
69
|
+
## 禁止
|
|
97
70
|
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
- 同一现象修复失败 3 次后停止猜测,重新审视假设,考虑是否为架构问题
|
|
103
|
-
- 禁止通过删除断言、增加 sleep、降低覆盖率、增加 mock 来制造通过
|
|
104
|
-
- 调试修复须遵守 SED-04(禁止跨任务修改),修复范围仅限当前切片涉及文件
|
|
105
|
-
- 修复范围超出当前切片涉及文件时,须触发重规划(参见切片计划 §7 动态重规划)
|
|
71
|
+
- 不复现就改(违规,改了也不知道对不对)
|
|
72
|
+
- 只修表象不找根因(违规,bug 会回来)
|
|
73
|
+
- 改一大片"可能相关"的代码(违规,扩大风险)
|
|
74
|
+
- 修复后不写回归测试(违规,无法证明修好)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ka-guidance-重构方法
|
|
3
|
+
kind: guidance
|
|
4
|
+
title: 重构方法
|
|
5
|
+
sync_policy: copy_to_project
|
|
6
|
+
status: active
|
|
7
|
+
triggers:
|
|
8
|
+
- 重构
|
|
9
|
+
- refactor
|
|
10
|
+
- 解耦
|
|
11
|
+
- 耦合
|
|
12
|
+
- 重构方案
|
|
13
|
+
- 改善代码
|
|
14
|
+
- 抽象
|
|
15
|
+
extra:
|
|
16
|
+
name: refactoring-method
|
|
17
|
+
scope:
|
|
18
|
+
- '*'
|
|
19
|
+
products:
|
|
20
|
+
- '*'
|
|
21
|
+
type: procedure
|
|
22
|
+
lifecycle_status: active
|
|
23
|
+
version: 1.0.0
|
|
24
|
+
last_reviewed: '2026-06-17'
|
|
25
|
+
verification_layer: L2
|
|
26
|
+
stage: build
|
|
27
|
+
domain: build
|
|
28
|
+
owner_mechanism: mc-code-maintainability-observability-contract
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# 重构方法:怎么改老代码不翻车
|
|
32
|
+
|
|
33
|
+
> 吸收旧的「重构方案」「重构流水线」「耦合检测」「OOD设计摘要」。
|
|
34
|
+
|
|
35
|
+
## 何时该重构(先想清楚)
|
|
36
|
+
|
|
37
|
+
- 代码确实难以理解/修改/扩展,且有测试保护
|
|
38
|
+
- 重构服务于当前目标,不是"看着不爽"
|
|
39
|
+
|
|
40
|
+
## 何时不该重构
|
|
41
|
+
|
|
42
|
+
- 没有测试覆盖的代码(先补测试)
|
|
43
|
+
- 跟当前任务无关的顺手重构([[工程执行总纲]] 精准修改:禁止)
|
|
44
|
+
- 需求紧急、没有回滚余量时
|
|
45
|
+
|
|
46
|
+
## 重构步骤
|
|
47
|
+
|
|
48
|
+
1. **先有测试**:覆盖现有行为(重构后行为不变是验证标准)
|
|
49
|
+
2. **小步前进**:每步可编译可测试,不一次性大改
|
|
50
|
+
3. **每步验证**:跑测试,绿了再下一步
|
|
51
|
+
4. **新老逻辑比对**(改老系统):行为一致才算通过
|
|
52
|
+
|
|
53
|
+
## 解耦判断
|
|
54
|
+
|
|
55
|
+
- 检测高耦合点(模块间循环依赖、上帝对象、散弹式修改)
|
|
56
|
+
- 用接口/事件/适配器解耦,但不过度抽象([[工程执行总纲]] 简单优先)
|
|
57
|
+
- 引入新抽象前说明必要性
|
|
58
|
+
|
|
59
|
+
## 禁止
|
|
60
|
+
|
|
61
|
+
- 无测试就重构(违规,无法验证行为不变)
|
|
62
|
+
- 顺手重构无关模块(违规)
|
|
63
|
+
- 大爆炸式重构(违规,无法回滚)
|
|
64
|
+
- 为重构而抽象(违规,增加复杂度)
|
|
65
|
+
|
|
66
|
+
## 验证
|
|
67
|
+
|
|
68
|
+
重构后必须给出:测试全绿 + 行为不变的证据(新老比对/覆盖率不降)。
|
|
@@ -12,8 +12,8 @@ extra:
|
|
|
12
12
|
- frontend
|
|
13
13
|
products:
|
|
14
14
|
- '*'
|
|
15
|
-
version:
|
|
16
|
-
last_reviewed: '2026-06-
|
|
15
|
+
version: 2.0.0
|
|
16
|
+
last_reviewed: '2026-06-17'
|
|
17
17
|
type: artifact
|
|
18
18
|
domain: design
|
|
19
19
|
stage: design
|
|
@@ -22,29 +22,39 @@ extra:
|
|
|
22
22
|
|
|
23
23
|
# API 接口规格文档
|
|
24
24
|
|
|
25
|
+
> **产物定位**:涉及前后端接口对接时产出(按需)。把接口契约先于实现定清楚,避免前端等后端。
|
|
26
|
+
> **核心纪律**:契约先行([[编码纪律]]);每个 endpoint 有验收场景 + 验证证据([[证据驱动与反幻觉]])。
|
|
27
|
+
> **反退化纪律**:每个 endpoint 必须完整重复其全部必填结构块,禁止退化——
|
|
28
|
+
> - 禁止「前详后废」(前几个 endpoint 完整、后面的退化成一行文字)
|
|
29
|
+
> - 禁止用一行文字 `**xxx**:…` 代替表格,或省略标 `[Always]` 的必填块(基本信息/响应体字段/错误与副作用/验收场景)
|
|
30
|
+
> - 章节标题必须用 `###`,禁止降级为 `**粗体**`
|
|
31
|
+
> - 禁止「同上格式」「见上文」「…」等偷懒占位
|
|
32
|
+
> 任一 endpoint 缺任一必填块 = 未完成,须补齐后再推进。
|
|
33
|
+
> **完成判定**:见文末,每个 endpoint 须满足。
|
|
34
|
+
|
|
25
35
|
OpenAPI 权威路径: `docs/api/openapi.yaml`
|
|
26
36
|
|
|
27
37
|
## Endpoint: `METHOD /api/v1/resource`
|
|
28
38
|
|
|
29
|
-
> **接口编号**: `DD-A01`(每个 endpoint
|
|
30
|
-
> **关联需求**: `REQ-001
|
|
39
|
+
> **接口编号**: `DD-A01`(每个 endpoint 唯一,供切片计划/代码审查引用)
|
|
40
|
+
> **关联需求**: `REQ-001`(供 cross_validation 校验与需求一致;多个用 `/` 分隔)
|
|
31
41
|
|
|
32
42
|
### 基本信息 [Always — 每个 endpoint 必填]
|
|
33
43
|
|
|
34
44
|
| endpoint_id | 用途 | 调用端 | 权限 | 幂等 | 限流 | 副作用 |
|
|
35
45
|
|-------------|------|--------|------|------|------|--------|
|
|
36
46
|
|
|
37
|
-
### 请求 Header 字段 [
|
|
47
|
+
### 请求 Header 字段 [有认证/自定义 Header 时必填]
|
|
38
48
|
|
|
39
49
|
| 字段路径 | 类型 | 必填 | 格式/约束 | 数据映射 | 说明 | 示例 |
|
|
40
50
|
|----------|------|------|-----------|----------|------|------|
|
|
41
51
|
|
|
42
|
-
### 请求 Path / Query 字段 [
|
|
52
|
+
### 请求 Path / Query 字段 [有路径/查询参数时必填]
|
|
43
53
|
|
|
44
54
|
| 字段路径 | 类型 | 必填 | 默认值 | 格式/约束 | 说明 | 示例 |
|
|
45
55
|
|----------|------|------|--------|-----------|------|------|
|
|
46
56
|
|
|
47
|
-
### 请求体字段 [
|
|
57
|
+
### 请求体字段 [有请求体时必填]
|
|
48
58
|
|
|
49
59
|
| 字段路径 | 类型 | 必填 | 可空 | 枚举/格式/校验 | 数据映射 | 说明 | 示例 |
|
|
50
60
|
|----------|------|------|------|----------------|----------|------|------|
|
|
@@ -64,32 +74,32 @@ OpenAPI 权威路径: `docs/api/openapi.yaml`
|
|
|
64
74
|
| 场景 | 输入 | 预期响应 | 数据/状态变化 | 验证证据 |
|
|
65
75
|
|------|------|----------|---------------|----------|
|
|
66
76
|
|
|
67
|
-
### 枚举值定义 [
|
|
77
|
+
### 枚举值定义 [有枚举字段时必填]
|
|
68
78
|
|
|
69
79
|
| 枚举名 | 值 | 含义 |
|
|
70
80
|
|--------|------|------|
|
|
71
81
|
|
|
72
|
-
### 页面交互映射 [
|
|
82
|
+
### 页面交互映射 [前端直接调用的接口必填]
|
|
73
83
|
|
|
74
84
|
| 页面操作 | 触发接口 | 加载状态 | 成功行为 | 失败行为 |
|
|
75
85
|
|---------|---------|---------|---------|---------|
|
|
76
86
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- [ ]
|
|
80
|
-
- [ ]
|
|
81
|
-
- [ ]
|
|
82
|
-
- [ ]
|
|
83
|
-
- [ ]
|
|
84
|
-
- [ ]
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- [ ]
|
|
89
|
-
- [ ] 所有 数据映射
|
|
90
|
-
- [ ] 所有 类型
|
|
91
|
-
- [ ]
|
|
92
|
-
- [ ]
|
|
93
|
-
- [ ]
|
|
94
|
-
- [ ]
|
|
95
|
-
- [ ]
|
|
87
|
+
## 接口规范检查
|
|
88
|
+
|
|
89
|
+
- [ ] 接口有版本号和演进策略(如 /api/v1/)
|
|
90
|
+
- [ ] 写接口有幂等设计(幂等键或唯一约束)
|
|
91
|
+
- [ ] 错误码体系完整(业务码 + HTTP 状态码双映射)
|
|
92
|
+
- [ ] 分页参数有上限(防恶意大翻页)
|
|
93
|
+
- [ ] 接口有限流策略(QPS/并发上限)
|
|
94
|
+
- [ ] 批量操作有数量上限(≤ 500 条)
|
|
95
|
+
|
|
96
|
+
## 完成判定(每个 endpoint 须满足)
|
|
97
|
+
|
|
98
|
+
- [ ] endpoint_id 全局唯一且遵循命名规范({资源}-{动作})
|
|
99
|
+
- [ ] 所有 数据映射 字段精确到 表名.字段名(禁止仅写表名)
|
|
100
|
+
- [ ] 所有 类型 用标准类型(string/integer/number/boolean/array/object/date/datetime/enum)
|
|
101
|
+
- [ ] 错误映射表每个 HTTP 状态码至少对应一个业务码
|
|
102
|
+
- [ ] 每个验收场景有验证证据(不得为空)
|
|
103
|
+
- [ ] 枚举值定义覆盖所有枚举字段
|
|
104
|
+
- [ ] 涉及前端调用的接口有页面交互映射
|
|
105
|
+
- [ ] 每个 endpoint 都含全部必填表格块(基本信息/响应体字段/错误与副作用/验收场景),无一行文字替代、无偷懒占位
|