---
name: test-first-coding-workflow
type: procedure
when: '实现需求, 编码, 开发功能, 写代码, coding, test first, 测试优先, 先写测试'
scope:
  - backend
  - frontend
products:
  - '*'
owner_mechanism_id: mc-coding-readiness
consumed_contracts:
  - coding_readiness_contract_entry
  - existing_system_analysis_contract_entry
  - architecture_design_contract_entry
  - detail_discipline_contract
  - first_principles_contract
required_sections:
  - 编码准备门
  - 测试优先计划
  - 约束消费报告
  - 主线消费检查
  - 编码完成审查
hard_rules:
  - coding workflow 不得直接进入实现
  - 必须先生成 CodingReadinessGate
  - 必须先生成 TestFirstPlan 或合法 not_applicable_with_reason
  - 有测试框架且行为可断言时，必须先写失败测试或回归测试
  - readiness_status=blocked/manual_required 时不得写实现代码
  - 现有项目新需求必须消费 ExistingSystemAnalysis 和 RequirementGapAnalysis
  - 根据架构设计编码时必须消费 ArchitectureDesignContract
  - 测试失败不得删除测试、降低断言、skip 后声称通过
acceptance_checks:
  - CodingReadinessGate status 非 blocked
  - TestFirstPlan 已创建且 status 为 written 或 expected_failure_recorded
  - 约束消费报告无 blocking_missing_constraints
  - 主线消费检查无 orphan_findings
  - 编码完成审查 review.passed 为 true
id: ka-procedure-测试优先编码工作流
asset_kind: procedure
lifecycle_status: active
authority: supporting
routes:
  - code_change
primary_triggers:
  - 测试优先编码工作流
secondary_triggers: []
negative_triggers: []
priority: P1
specificity: 5
consumes:
  - mc-coding-readiness
emits:
  - test_first_plan
  - coding_completion_review
required_evidence:
  - workflow_id
  - required_mechanisms
version: 1.1.0
last_reviewed: '2026-06-01'
stages: ["编码与单元测试"]
---

## 适用场景
任何编码实现前必须先通过编码准备门和测试优先计划。适用于有测试框架和可断言业务逻辑的项目。

## 步骤
1. **编码准备门**:
   - 检查是否有验证计划 (verification_plan_ref)
   - 检查前置条件（现有项目需差距分析，架构设计需 ArchitectureDesignContract）
   - 检查约束消费
2. **测试优先计划**:
   - 有测试框架且行为可断言 → test_first（先写失败测试）
   - 不能自动测试 → verification_case_first 或 manual_acceptance_first
   - TestFirstPlan 绑定需求、主链路入口和验收标准
3. **编码实现**: 按 TestFirstPlan 先写测试、再写实现
4. **主线消费检查**: 新增文件、组件、API、service 被真实消费
5. **编码完成审查**: reviewCodingCompletion 验证所有硬规则

## 检查点
- [ ] CodingReadinessGate allowed
- [ ] TestFirstPlan status 为 written
- [ ] 约束消费无 blocking_missing
- [ ] 主线消费无 orphan
- [ ] 编码完成审查 passed

## 禁止退化
- 缺验证计划不得编码
- blocked/manual_required 不得写实现代码
- 测试失败不得删测试或降断言
- 未消费前置条件不得编码
