/apt-scwSourceCodeWorld — TDD implementation of crystallized Contracts.
/apt-scw Claude Code CLI 또는 연결된 에이전트에서 호출합니다.
> **SCW = Contract가 실행 코드가 되는 곳.** > 코드 = Contract의 물질화(materialization). > KG가 정본(canonical), 코드는 구현 공간. > 코드가 contract를 구현하지만, 코드를 의미론적 정본과 혼동하면 안 된다.
> `apt-gate-check.sh`가 자동 실행. ST Gate 미통과 시 `permissionDecision: deny`. > `$PROJECT`는 apt-progress.md의 `## Anchor:` 에서 읽는다. > BLOCKED 시: `/apt-st` → `/taliban` → ST Gate 통과 → `/apt-scw` 재호출. ---
``` 1. Contract의 acceptance_criteria에서 테스트 작성 (RED) 2. 테스트가 통과하는 최소 코드 구현 (GREEN) 3. 리팩토링 (REFACTOR) 4. FulfillmentGate 7 checks 5. 통과 → Contract status = Fulfilled ``` 같은 레이어의 AtomicSpan은 **완전 독립**이므로 **병렬 구현 가능**. Contract가 인터페이스 역할 — 각 Task는 자기 Contract만 이행. ---
> "SourceCodeWorld의 코드 파일은 KG 노드 참조를 주석으로 포함해야 한다.
> 이는 코드↔KG 양방향 추적성(traceability)을 보장한다."
### 규칙
```python
# KG: TASK_OM_GPU_Modal_Hardening ← 파일 상단: 이 파일이 구현하는 Task
# KG: CONTRACT_OM_GPUAllocateIO ← 클래스/함수: 준수하는 Contract
class ModalGPUProvider(GPUProvider):
def allocate(self, name, gpu_type, ...) -> GPUInstance: # CONTRACT_OM_GPUInstance
...
```
1. **파일 상단**: `# KG: TASK_xxx` (이 파일이 구현하는 SemanticTask)
2. **클래스/함수 docstring**: `# KG: CONTRACT_xxx` (준수하는 Contract/DTO)
3. **주요 로직**: `# KG: ATOM_xxx` 또는 `SPAN_xxx` (관련 Span 참조)
**KG ref 없는 코드 = 롱기누스 추적 불가 = APT 위반.**
--- | 속성 | 규칙 | |------|------| | estimated_lines | **≤ 500줄** (바이브코딩 최적 단위) | | target_file | 단일 파일 | | acceptance_criteria | 실행 가능한 테스트 | | impact_tests | **필수** (TDAD) — 빈 값 = BLOCKING violation | > "Task estimated_lines > 500 → Span을 더 분해해야 함" > "Contract가 잘게 쪼개져야 Task도 잘게 나뉨" ---
### Step 1: Contract + Task 로드
```cypher
MATCH (sa:SemanticAnchor {name: $PROJECT})-[:HAS_ROOT]->(root)
MATCH (root)-[:DECOMPOSES_TO*1..10]->(atom:AtomicSpan)
MATCH (atom)-[:CRYSTALLIZES_TO]->(st:SemanticTwin)
MATCH (st)-[:HAS_CONTRACT]->(c:AptContract)
MATCH (st)-[:HAS_TASK]->(t:SemanticTask)
WHERE c.status = 'CRYSTALLIZED'
RETURN atom.name, c.name, c.input_type, c.output_type, c.acceptance_criteria,
t.name, t.target_file, t.estimated_lines, t.impact_tests
ORDER BY atom.name
```
### Step 2: Task별 TDD 루프
각 Task에 대해:
```
2a. acceptance_criteria → 테스트 파일 작성 (RED)
- 테스트가 먼저. 코드 전에 테스트.
- impact_tests 경로에 작성
2b. 테스트 통과하는 최소 코드 구현 (GREEN)
- target_file에 작성
- # KG: TASK_xxx, CONTRACT_xxx 주석 포함
2c. 리팩토링 (REFACTOR)
- 테스트 여전히 통과 확인
- 중복 제거, 명확성 개선
```
### Step SCW 실행 중 발견된 문제: - **Task FAIL** → Span 재분해 필요 → SP로 피드백 - **Contract 불충분** → ST로 피드백 - **새로운 요구** → SA 업데이트 ``` SCW → SP 피드백: "이 Span의 분해가 틀렸다" SCW → ST 피드백: "이 Contract의 타입이 부족하다" SCW → SA 피드백: "프로젝트 범위 변경 필요" ``` > "APT의 피드백 루프(PH6)는 과학의 자기수정과 동일. > 괴델이 증명했듯이 어떤 체계도 자기 완전성을 보장 못하므로, > 외부 피드백(사용자, 실행 결과)을 통한 지속적 수정이 유일한 해결책." ---
| 금지 | 이유 | 대안 | |------|------|------| | 테스트 없이 코드 작성 | TDD 위반 | RED → GREEN → REFACTOR | | KG ref 주석 생략 | 롱기누스 추적 불가 | # KG: TASK_xxx 필수 | | impact_tests 비워두기 | TDAD BLOCKING violation | 테스트 경로 명시 | | 500줄 초과 파일 | Task 단위 초과 | SP로 돌아가 추가 분해 | | Contract 무시하고 코드 | 물질화가 아닌 임의 구현 | Contract 7대 필드 준수 | | 코드를 정본으로 취급 | KG가 canonical | Neo4j Canonicality 원칙 | | executor = reviewer | 자기 승인 금지 | Taliban D20 protocol |