# Step 0: Abaqus Input Contract

## 읽어야 할 파일

- `/AGENTS.md`
- `/docs/PRD.md`
- `/docs/ARCHITECTURE.md`
- `/docs/ADR.md`
- `/docs/superpowers/specs/2026-07-29-abaqus-assembly-reference-design.md`
- `/docs/superpowers/plans/2026-07-29-fesa-phase-1.md`
- `/include/fesa/io/abaqus/`
- `/reference/cantilever beam/cantilever beam.inp`

## 작업

production parser를 수정하기 전에 `docs/ABAQUS_INPUT_SUBSET.md`를 normative contract로
작성하고 valid/invalid fixture matrix를 등록한다.

문서에 각 keyword의 허용 scope, parameter, data line, diagnostic을 정확히 정의한다.

- `*NODE`, `*ELEMENT,TYPE=B31`
- `*PART/*END PART`, `*ASSEMBLY/*END ASSEMBLY`,
  `*INSTANCE/*END INSTANCE`
- `*NSET`, `*ELSET`, `GENERATE`, nested set, `INSTANCE=`
- `*MATERIAL`, `*ELASTIC`, `*BEAM GENERAL SECTION`
- optional `*TRANSVERSE SHEAR STIFFNESS`
- `*BOUNDARY`, `*CLOAD`, `*STEP`, `*STATIC`, `*END STEP`
- no-op `*HEADING`, `*PREPRINT`, `*RESTART`, `*OUTPUT`

`tests/fixtures/abaqus/valid`와 `invalid`에 최소 한 규칙당 fixture를 정의하고
data-driven contract test를 먼저 실패시킨다.

## Acceptance Criteria

```powershell
cmake --build --preset windows-debug
ctest --preset windows-debug -R AbaqusInputContract --output-on-failure
ctest --preset windows-debug --output-on-failure
```

## 검증 절차

1. 문서와 fixture manifest를 먼저 작성한다.
2. 아직 미구현인 계약 테스트가 실패하는 것을 확인한다.
3. 이 step에서는 parser behavior를 확장하지 않는다.
4. index summary에 계약 문서와 미통과 fixture 범위를 기록한다.

## 금지사항

- Abaqus 전체 문법 지원을 약속하지 마라. 이유: 명시된 subset만 대상이다.
- unknown keyword ignore 규칙을 만들지 마라. 이유: 조용한 모델 손실을 유발한다.
- reference 원본을 고치지 마라. 이유: golden provenance를 보존해야 한다.
