diff --git a/docs/mitc4-shell-feast-eigen2/ADR.md b/docs/mitc4-shell-feast-eigen2/ADR.md new file mode 100644 index 0000000..a0f64aa --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/ADR.md @@ -0,0 +1,40 @@ +# MITC4 Shell Mass·FEAST Eigen 2 결정 기록 + +- Feature ID: `mitc4-shell-feast-eigen2` +- Owner: 메인 assistant +- Requirement baseline revision: `r1` + +기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), +[공통 ADR](../ADR.md#adr-028). 사용자 요청·현재 checklist는 [PRD](PRD.md), +지역 지침·소유권은 [FEATURED_AGENTS](FEATURED_AGENTS.md)를 따른다. + +## MFE2-ADR-001 — 새로운 requirement baseline과 작업 범위 + +- 상태: 사용자 명시 요청, 2026-09-08. +- 결정: `mitc4-shell-feast-eigen2`를 새 Feature ID로 사용하고 requirement 단계만 수행한다. 변경 문서는 이 폴더에 작성하며 완성된 변경을 경로별로 커밋한다. +- 근거: “mitc4-shell-feast-eigen2 라는 이름으로 처음 requirement 작업부터 시작”, “requirement 단계만 진행”, “변경사항들을 깃에 커밋”. +- 영향: 새 요구 ID·r1을 작성한다. 기존 Feature·phase의 미커밋 변경과 실패 이력은 보존하고 research 이후 작업·push는 이번 범위에 포함하지 않는다. +- 이유: 요구사항을 현재 운영 기준에서 다시 검토하면서 기존 작업과 결과를 혼동하지 않기 위함이다. + +## MFE2-ADR-002 — 기존 명시 사용자 요구의 적용 + +- 상태: 기존 명시 사용자 결정의 재시작 기준으로서 기록. 새로운 수학·schema 승인 아님. +- 결정: consistent→lumped→FEAST, 입력의 mode count, 고유치 Value-only 외부 비교, 좌표 공변적 stabilization 개선 및 영향받는 static/eigen 재검증, reference/temp 제외의 의미를 새 요구사항에 반영한다. +- 근거: 기존 [ADR](../mitc4-shell-feast-eigen/ADR.md)의 MFE-ADR-001·002·004·005·007·013 및 [requirements](../mitc4-shell-feast-eigen/requirements.md) r3. 기존 ADR에는 질량 사용·개선 범위·제외에 관한 사용자 답변이 명시되어 있다. +- 영향: 알려진 사용자 결정을 다시 양자택일 질문으로 만들지 않는다. 기존 formulation/NR/I/O의 상세 수식·control·영속 식별자를 자동 채택하거나 통과로 표시하지 않는다. +- 한계: 일부 기존 r3 문서는 현재 worktree의 미커밋 자료다. 필요한 요구의 실제 의미와 제외 목록은 새 requirements에 독립적으로 명시하고 이전 HEAD에 동일 내용이 있다고 주장하지 않는다. + +## MFE2-ADR-003 — 참고 자료와 새 evidence의 경계 + +- 상태: 현행 프로젝트 기준을 적용한 문서 작성 결정. +- 결정: 기존 요구사항·근거는 요구 정의의 입력, research/formulation/NR/I/O 문서는 후속 검토 후보로 구분한다. 기존 implementation/environment/recovery/coordination/phase는 역사적 진단 자료다. +- 이유: 유용한 연구·반례를 재사용하되 과거 gate와 환경 통과를 새 Feature의 검증으로 오인하지 않게 한다. +- 영향: 새 정식화의 채택·수치 기준·source/result mapping은 후속 전문 작업이 필요할 때 정의한다. 이 요구사항 단계는 solver 구현·FEAST 실행·reference 비교·환경 준비 통과를 선언하지 않는다. +- 보존: reference artifact와 `docs/TOLERANCE.md`는 읽기 전용이다. 제외 예제의 재사용이나 comparison tolerance 완화로 알려진 문제를 숨기지 않는다. + +## MFE2-ADR-004 — 현행 운영 방식과 요구사항 완료 + +- 상태: [ADR-028](../ADR.md#adr-028) 적용. +- 결정: 메인이 관리 문서·검토·커밋을 맡고 Requirement specialist는 할당된 요구사항 문서만 작성한다. 상태는 PRD checklist에만 둔다. +- 영향: 고정 9단계 dispatch, 별도 planning/correction/release profile, 자동 Git·hook, phase payload·retry budget을 새 요구사항으로 복원하지 않는다. +- 검증: 문서·ID·출처·링크·scope의 정적 확인을 수행한다. 실제 동작 검증 의무와 기존 명시 감사 요구의 보존은 문서 작성과 별개이며 이번에는 실행하지 않는다. diff --git a/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md b/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md new file mode 100644 index 0000000..f62333a --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/FEATURED_AGENTS.md @@ -0,0 +1,34 @@ +# MITC4 Shell Mass·FEAST Eigen 2 작업 지침 + +- Feature ID: `mitc4-shell-feast-eigen2` +- Owner: 메인 assistant +- Requirement baseline revision: `r1` +- 현재 작업: requirement 단계만. Research·formulation·I/O 설계·구현·실행 검증은 이번 요청에 포함하지 않는다. +- 목적: 기존 작업의 유용한 요구·근거를 검토하여 MITC4 질량행렬과 FEAST 고유진동 해석의 새 요구사항 baseline을 작성한다. +- 현재 checklist: [PRD](PRD.md#현재-checklist). + +기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), +[공통 ADR](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md), +[Feature 문서 관리](../FEATURE_DOCUMENTATION.md), [TOLERANCE](../TOLERANCE.md). + +## 지역 지침 + +- 기존 `docs/mitc4-shell-feast-eigen/`의 현재 worktree 문서는 읽기 전용 참고 자료다. 일부 r3 기록은 미커밋 상태이므로 HEAD의 내용과 동일하다고 가정하지 않는다. +- 기존 명시 사용자 요구와 물리·검증 의도는 출처를 연결하여 정리한다. 과거 agent stage, phase 상태, 수치 검토 통과와 환경 복구 기록은 새 작업의 승인·실행 evidence가 아니다. +- 새 요구사항은 `FEM-REQ-MITC4-EIGEN2-###` ID를 사용한다. 기존 ID는 추적용 대응 관계에만 남긴다. +- Requirement는 관찰 가능한 동작·범위·검증 의도를 소유한다. 특정 lumping/축소 수식, FEAST parameter, HDF5 layout, 수치 threshold는 새로 결정하지 않는다. +- `reference/temp` 예제는 원본·옛 경로·복사본·cache를 통해서도 검증에 사용하지 않는다. 제외 목록은 requirements의 원본 정의를 따른다. +- 변경은 할당된 이 폴더의 문서로 제한한다. 기존 Feature·phase·source·test·config·reference는 수정하지 않는다. +- 이번 요구사항 정리의 완료는 solver 기능 완료가 아니다. 명시적으로 제외된 후속 작업을 진행하거나 빈 후속 보고서를 만들지 않는다. + +## 문서 목록과 소유권 + +| 문서 | Owner | 역할 | +| --- | --- | --- | +| [FEATURED_AGENTS.md](FEATURED_AGENTS.md) | 메인 assistant | Feature 지역 지침·문서 목록 | +| [PRD.md](PRD.md) | 메인 assistant | 사용자 요청·범위 요약·현재 checklist | +| [ADR.md](ADR.md) | 메인 assistant | 새 작업의 결정·기존 자료 적용 경계 | +| [requirements.md](requirements.md) | requirement-agent | 원자적 요구사항·acceptance intent·검증 matrix | +| [requirements-evidence.md](requirements-evidence.md) | requirement-agent | 재사용 근거·기존 요구 대응·reference 정적 관찰·미해결 사항 | + +반환은 결과·변경 파일·정적 확인·미해결 항목으로 충분하다. Git 경로 선택·커밋과 최종 결과 확인은 메인이 수행한다. diff --git a/docs/mitc4-shell-feast-eigen2/PRD.md b/docs/mitc4-shell-feast-eigen2/PRD.md new file mode 100644 index 0000000..e8905f4 --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/PRD.md @@ -0,0 +1,61 @@ +# MITC4 Shell Mass·FEAST Eigen 2 PRD + +- Feature ID: `mitc4-shell-feast-eigen2` +- Owner: 메인 assistant +- Requirement baseline revision: `r1` +- 상태: requirement baseline r1 작성 및 정적 확인 완료. 이번 요청의 범위는 requirement 단계까지이며 solver 구현·실행 검증은 미실행이다. + +기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), +[공통 ADR](../ADR.md#adr-028). 지역 지침은 [FEATURED_AGENTS](FEATURED_AGENTS.md), +결정 근거는 [Feature ADR](ADR.md)을 따른다. + +## 사용자 요청과 적용 범위 + +2026-09-08 사용자는 기존 작업을 `mitc4-shell-feast-eigen2`라는 이름으로 requirement부터 +다시 시작하고, 기존 `docs/mitc4-shell-feast-eigen/`의 유용한 문서를 참고하며 작업 중 +변경사항을 Git에 커밋하도록 요청했다. 이어 **모든 단계를 진행하지 말고 requirement +단계만 진행**하도록 범위를 명시했다. + +이번 산출물은 요구사항·acceptance intent와 검증 의도다. 이후의 research, 정식화 채택, +독립 numerical review, I/O 설계, 구현 계획·코드, build/test·reference 비교와 release +감사는 수행하지 않는다. 별도 coordinator나 phase 상태기계를 만들지 않는다. + +## 솔버 기능의 요구 범위 요약 + +기존 사용자 결정에 기록된 다음 의미를 새 요구사항의 출발점으로 사용한다. +승계 근거와 후속 전문 판단 경계는 [ADR](ADR.md)에 기록한다. + +1. MITC4 shell consistent mass를 계산하고 그 결과로부터 lumped mass를 유도한다. +2. 실제 무감쇠 선형 고유진동 해석은 derived lumped mass와 Intel MKL FEAST를 사용한다. +3. 원형상·무응력 상태와 승인된 shell/constraint 범위를 대상으로 하며, requested mode count는 `.inp`의 `*FREQUENCY`에서 얻는다. +4. 지정 `reference/shellNL-eigen-meshfine`의 기존 입력·고유치 TXT를 보존하고 외부 eigen 비교는 `Value`만 사용한다. Mode shape는 내부 검증 대상이며 외부 acceptance를 추가하지 않는다. +5. 좌표 공변적인 numerical drilling stabilization 개선과 영향받는 기존 선형·비선형 정적 및 새 eigen 검증을 포함한다. 기존 물리 kernel·source identity·output 의미·공통 tolerance는 보존한다. +6. `reference/temp`로 제외된 예제는 검증에 사용하지 않는다. 남는 정적 회귀와 내부 물리 검증 의무를 명시한다. + +지속할 상세 계약이 필요하므로 요구사항과 verification matrix 원본은 +[requirements.md](requirements.md)에 둔다. 이 PRD에는 수식·threshold·schema를 중복 정의하지 않는다. + +## Acceptance 요약과 원본 + +아래 ID는 `FEM-REQ-MITC4-EIGEN2-` prefix를 생략하며 링크는 상세 matrix의 원본을 가리킨다. + +| 영역 | Requirement IDs | 요구되는 결과와 검증 의도 | +| --- | --- | --- | +| 입력·물리 범위 | [001~004, 015~016](requirements.md#requirement-verification-matrix) | 밀도·section·geometry·boundary·mode 요청의 의미를 보존하고 미지원 조합을 명확히 진단 | +| 질량·stabilization | [005~008, 014, 026~027](requirements.md#requirement-verification-matrix) | 두 질량의 유도 관계, 물리 관성·drilling null, 대칭성·에너지·좌표 공변성 검증 | +| FEAST·modal evidence | [009~013](requirements.md#requirement-verification-matrix) | 실제 backend, 낮은 N개·multiplicity, 동일 사용 질량의 residual·normalization·orthogonality 및 실패 보존 | +| 결과·reference | [017~022](requirements.md#requirement-verification-matrix) | HDF5 source/mode identity, Value-only 대응, completeness·finite 사전검사와 공통 tolerance | +| 회귀·완료 | [023~025](requirements.md#requirement-verification-matrix) | 제외 예제를 사용하지 않는 남은 static·내부 물리 검증, 필요한 실제 실행 evidence와 미실행의 구분 | + +각 영역의 원자적 ID·검증 방법·출처는 requirements 및 [근거 문서](requirements-evidence.md)를 따른다. +과거 문서의 `pass`, 362/352 test count나 stage 완료를 이 baseline의 실행 결과로 사용하지 않는다. + +## 현재 checklist + +- [x] 새 Feature ID·작업 브랜치와 requirement-only 범위를 설정한다. +- [x] 기존 자료의 참고·승계·후속 재검토 경계를 정한다. +- [x] Requirement specialist가 새 요구사항·verification matrix와 근거를 작성한다. +- [x] 메인이 사용자 요구 coverage, 전문 owner 경계와 미해결 사항을 정적으로 확인한다. +- [x] 상대 링크·ID를 검사하고 커밋 대상이 새 Feature 문서 5개뿐인지 확인한다. + +이번 checklist의 완료는 요구사항 작업의 완료만 뜻한다. 다음 단계는 자동으로 시작하지 않는다. diff --git a/docs/mitc4-shell-feast-eigen2/requirements-evidence.md b/docs/mitc4-shell-feast-eigen2/requirements-evidence.md new file mode 100644 index 0000000..46416d7 --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/requirements-evidence.md @@ -0,0 +1,129 @@ +# 요구사항 근거와 적용 경계 + +- Feature ID: `mitc4-shell-feast-eigen2` +- Requirement baseline revision: `r1` +- Owner: `requirement-agent` +- 작성일: `2026-09-08` +- 원본: [requirements.md](requirements.md), 현재 작업: [PRD](PRD.md). + +기준은 [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), +[ADR-028](../ADR.md#adr-028), [새 Feature ADR](ADR.md)이다. 이 문서는 근거와 미실행을 +구분하며 새 수학·구현 acceptance 승인이나 solver readiness 판정이 아니다. + +## 근거의 종류와 재사용 + +| 근거 | 재사용하는 내용 | 이번 기준선으로 가져오지 않는 것 | +| --- | --- | --- | +| 2026-09-08 사용자 요청과 [새 PRD](PRD.md) | 새 Feature 이름, requirement부터 재시작, 유용한 기존 자료 참고, 작업 중 commit; 최종 지시로 requirement 단계만 수행 | Research 이후 실행 권한·전체 단계 자동 진행·push 권한 | +| [기존 ADR](../mitc4-shell-feast-eigen/ADR.md)의 MFE-ADR-001/002/004/005 | MKL FEAST, consistent→derived lumped→eigen, 지정 reference의 Value-only, 입력의 mode count 권위 | Mass variant 선택 API, 다른 backend, 외부 mode-shape acceptance | +| 같은 ADR의 MFE-ADR-007 | 좌표 공변적 stabilization 개선 및 영향받는 static/eigen 검증의 명시 사용자 승인 | 특정 trace 공식 또는 기존 NR pass의 자동 채택 | +| 같은 ADR의 MFE-ADR-013 | reference/temp 네 예제와 옛 경로·복사·cache 검증 제외 | 과거 14개 blob·이동 commit·검사 수를 이번 재확인으로 보고 | +| [기존 requirements r3](../mitc4-shell-feast-eigen/requirements.md), [기존 evidence r3](../mitc4-shell-feast-eigen/requirements-evidence.md) | 27개 관찰 의무, 단위·identity·실패·남는 static/internal portfolio, 알려진 partial-BC 반례 | 기존 revision의 수식·threshold·영속 문자열이 새 Feature에 자동 승인되었다는 문구 | +| 기존 [research evidence](../mitc4-shell-feast-eigen/research-evidence.md), [formulation](../mitc4-shell-feast-eigen/formulation.md), [NR](../mitc4-shell-feast-eigen/numerical-review.md), [I/O](../mitc4-shell-feast-eigen/io.md) | 후속 전문 작업에서 필요한 근거·후보·반례를 찾을 위치 | 이번에 새로 조사·검토·검증한 evidence라는 주장 | +| 기존 [PRD 사용자 요구](../mitc4-shell-feast-eigen/PRD.md#사용자-요구) | 명시 release-readiness 감사 요청의 이력 보존 | 옛 고정 9-stage 순회, Hook·phase 상태·중복 수동/자동 실행의 복원 | + +기존 r3 요구 문서는 **현재 worktree의 미커밋 자료**를 읽었다. 링크는 그 작업 자료를 +가리키며 과거 HEAD/commit에 동일 내용이 있다고 가정하지 않는다. 과거 공개 문헌 조사도 +기존 evidence에 기록된 당시 이력으로만 참조한다. 이번 작업은 외부 문헌 조사·정식화 유도· +독립 수치 검토를 수행하지 않았다. + +기존 `NR-MFE-001`은 같은 물리 partial rotation BC에서 좌표를 회전하고 stiffness를 +재계산할 때 나타난 반례다. 기존 evidence의 numerical 값은 재계산하지 않았다. `014/027`은 +알려진 사례를 검증에서 배제하지 않는 의도를 승계한다. 이전 행렬을 단순 기저변환하는 +검사만으로 geometry부터 재계산한 complete K의 공변성 검사를 대체하지 않는다. +기존 linear 요구 `FESA-REQ-LSMITC4-034/056`과 +[nonlinear formulation §10.3](../nonlinear-static-newton-raphson/formulation.md#103-fixed-scale-and-potential)의 +scale 선정 부분이 영향 대상이며 다른 물리·lifecycle 의미를 교체하지 않는다. + +## 기존 ID와 새 ID 대응 + +기존 열은 prefix `FEM-REQ-MITC4-EIGEN-`, 새 열은 prefix +`FEM-REQ-MITC4-EIGEN2-`를 생략한다. 27개 ID를 1:1로 대응하며 아래 요약은 +요구사항 본문의 acceptance를 대신하지 않는다. + +| 기존 suffix | 새 suffix | 보존하는 관찰 의무·변경 경계 | +| --- | --- | --- | +| `001` | `001` | 원형상·무응력 단일 무감쇠 procedure | +| `002` | `002` | S4/S4R의 기존 물리 의미와 stabilization 개선 분리 | +| `003` | `003` | Material/section의 양의 유한 밀도 연결과 진단 | +| `004` | `004` | 기존 geometry/director/thickness 유효성 | +| `005` | `005` | Consistent mass의 계산·독립 oracle·lumping 원본 | +| `006` | `006` | 물리 병진/회전 관성과 drilling null | +| `007` | `007` | 같은 DOF/constraint·결정적 조립 | +| `008` | `008` | 실제 partial BC에서 유한 spectrum 보존·FEAST admissibility | +| `009` | `009` | 입력 요청의 낮은 N개·zero modes·불가능 요청 진단 | +| `010` | `010` | 오름차순 mode identity·multiplicity | +| `011` | `011` | Derived lumped mass로 실제 MKL FEAST 실행 | +| `012` | `012` | Backend 실패·미수렴·불완전 모드의 성공 반영 금지 | +| `013` | `013` | 같은 lumped M의 residual·normalization·orthogonality | +| `014` | `014` | 두 mass와 complete K/eigen의 물리·좌표 불변식 | +| `015` | `015` | 원본 Frequency 및 부수 옵션의 명시적 의미 처리 | +| `016` | `016` | 미지원 모델·옵션의 silent no-op 거부 | +| `017` | `017` | HDF5 quantity·단위·source/mode/backend/mass 식별 | +| `018` | `018` | 내부 modal vectors와 source/physical DOF 대응 | +| `019` | `019` | 검증 candidate 반영과 state/final output 실패 보존 | +| `020` | `020` | 지정 eigen TXT Value-only 외부 비교 | +| `021` | `021` | Tolerance 전 identity/quantity/schema/finite 검사 | +| `022` | `022` | 공통 tolerance 유지; family는 후속 NR/I/O 정의 | +| `023` | `023` | 현행 behavior tests·관련 검사·완료 시 전체검증; 고정 RED/중복 실행 삭제 | +| `024` | `024` | 남는 shell/shellNL 및 내부 static 회귀·밀도 없는 static 유지 | +| `025` | `025` | 메인의 evidence 추적 완료 판단·필수 독립 검증; 고정 stage 삭제·감사 요청 이력 보존 | +| `026` | `026` | Consistent에서 유도한 lumped의 질량·관성 보존 검사 | +| `027` | `027` | 좌표 공변적 비물리 stabilization 및 partial-BC 정적/eigen 검증 | + +## 현재 원본의 정적 관찰 + +아래는 메인이 `2026-09-08` 전달한 read-only 관찰이다. Python `pathlib`·regex·finite +검사와 keyword inventory는 exit `0`이었고 solver 실행은 아니다. Requirement owner는 +원본을 다시 읽거나 hash·산술 검사를 반복하지 않았다. 과거 hash를 현재 확인값으로 옮기지 않는다. + +| 대상 | 메인이 확인한 현재 사실 | +| --- | --- | +| `reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp` | 729 nodes, 676 S4 elements; density `2700.`, shell section `0.5, 5` | +| Step/BC | 한 `*Step, name=Step-2, nlgeom=NO, perturbation`; `Set-2` DOF 1~6의 homogeneous boundary 행 | +| Frequency | `eigensolver=Lanczos, sim, acoustic coupling=on, normalization=mass`; data `10, , , , ,` | +| `shellNL-eigen-meshfine eigenvalues.txt` | Mode IDs 1~10, finite Value, 중복 mode ID 없음 | +| Value 순서 | `219507, 885523, 885523, 1855340, 2740230, 2775150, 4149410, 4149410, 6733790, 6733790` | +| 표시값 반복 | `(2,3)`, `(7,8)`, `(9,10)`에서 같은 표시 Value; 이것만으로 실제 spectral multiplicity를 판정하지 않음 | +| 남는 static artifact | `rg --files`로 `reference/shell`·`reference/shellNL` 각각 inp 및 displacements/reactions/stresses CSV 존재 확인; 내용·수치 통과 확인은 아님 | + +TXT의 표시 Value는 보정하지 않는다. 단위계는 수치 크기로 추론하지 않는다. 기존 관찰은 +선행 static/load가 없는 단일 frequency 모델과 TXT의 분리된 Value/Freq를 기록한다. +입력의 유일한 step과 TXT mode를 연결할 수 있다는 것은 요구 정리를 위한 관찰이며, +comparison readiness·HDF5 projection·frame/family의 최종 정의는 후속 NR/I/O 책임이다. + +`reference/temp` 원본은 이번에 읽거나 실행하지 않았다. 네 제외 예제와 남는 coverage의 +원본은 [requirements](requirements.md#사용자-제외-예제)이며 과거 검사 개수나 cache로 +현재 실행 검증을 대체하지 않는다. + +## 후속 전문 판단과 사용자 결정 경계 + +아래는 requirement 작성의 blocker가 아니라 후속 작업이 필요할 때 구체화할 사항이다. +이번 요청으로 그 작업을 시작하지 않는다. + +| 후속 owner | 필요한 판단·고정 경계 | +| --- | --- | +| Formulation | Consistent→lumped 유도, 정확한 관성 불변식·좌표 block, massless drilling과 실제 global BC의 유한 spectrum 보존, FEAST admissibility, 낮은 N개 완전성. 특정 quadrature·row-sum·projection/whitening 공식은 자동 채택하지 않음 | +| Formulation·NR | 공변 stabilization과 기존 nonlinear 초기 고정 scale lifecycle의 정합, partial-BC 반례·대응 static response 및 개선된 pencil 재검증. 기존 trace scale 공식·NR pass를 새 승인으로 간주하지 않음 | +| NR | 독립 내부 oracle·scale/threshold·검증 충분성·FEAST controls 검토. 외부 eigen Value는 blocking acceptance이며 비교 family는 공통 TOLERANCE의 같은 model/step/frame/quantity/차원/좌표/판정 영향 규칙 안에서 정의; 과거 singleton family 판정을 자동 채택하지 않음 | +| I/O | 최소 syntax/무해 옵션/진단, source step·mode·modal vector 의미와 HDF5 projection. Exact layout·영속 contract/stabilization 문자열은 이번에 고정하지 않음; 기존 public 호환성 보존 | +| 메인·Implementation·Physics | 실제 retained test 선택과 실행 evidence·독립 물리 판단. 옛 362/352 수, 미실행·실패·stale를 통과로 소급하지 않으며 명시 감사 요청은 후속 범위와 함께 관리 | + +질량 흐름·backend·입력 count·Value-only·stabilization 개선·제외 목록은 기존 명시 결정으로 +해결되어 재질문하지 않는다. 현재 추가 사용자 결정이 필요한 material conflict는 발견하지 +않았다. 후속 증거가 새 물리 근사·지원 축소·공개 호환성/영속 schema의 비호환 변경 또는 +acceptance 변경을 필요로 할 때만 근거와 함께 메인에게 반환한다. Reference 변경이나 +공통 tolerance 완화로 충돌을 해소하지 않는다. + +## 정적 확인과 미실행 + +Requirement owner는 `Get-Content`·`rg`로 할당 관리문서, 기존 r3 요구·근거, 관련 사용자 +ADR와 프로젝트 PRD/ARCHITECTURE/ADR-028/TOLERANCE 절을 읽었다. 명령 exit `0`. +`python -B -X utf8 -` 문서 작성 및 정적 검사는 exit `0`으로 27개 새 matrix ID의 유일성·연속성, +27개 old→new 대응과 상대 파일 링크 존재를 확인했다. 수정 대상은 할당된 두 문서이며 +checklist는 PRD 한 곳에서 관리한다. + +C++·FEAST·CMake/CTest·Harness·pytest·외부 solver·reference 수치 비교·독립 numerical/physics +review·release-readiness는 requirement-only 요청 때문에 미실행이다. 문서 완료는 이 검사의 +통과나 새 수학·구현 acceptance 승인을 뜻하지 않는다. Source·test·공통 정책·기존 Feature· +phase·reference와 Git 작업은 변경하지 않았다. diff --git a/docs/mitc4-shell-feast-eigen2/requirements.md b/docs/mitc4-shell-feast-eigen2/requirements.md new file mode 100644 index 0000000..b27a8ee --- /dev/null +++ b/docs/mitc4-shell-feast-eigen2/requirements.md @@ -0,0 +1,142 @@ +# MITC4 질량행렬·FEAST eigen 요구사항 + +- Feature ID: `mitc4-shell-feast-eigen2` +- Requirement baseline revision: `r1` +- Owner: `requirement-agent` +- 상태: 요구사항 기준선 작성. 구현·수치 검증 또는 readiness 통과 기록이 아니다. + +기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), +[ADR-028](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md), +[TOLERANCE](../TOLERANCE.md). 현재 작업·checklist는 [PRD](PRD.md), +소유권은 [FEATURED_AGENTS](FEATURED_AGENTS.md), 결정은 [ADR](ADR.md)을 따른다. +근거 구분·기존 ID 대응·미결정은 [requirements-evidence](requirements-evidence.md)에 둔다. + +## 범위와 해석 의미 + +Consistent mass를 계산하고 그 결과로부터 lumped mass를 유도하며 실제 무감쇠 선형 +고유진동 해석은 **derived lumped mass와 MKL FEAST**를 사용한다. 같은 lumped mass를 +modal residual·normalization·orthogonality와 외부 고유치 비교의 기준으로 사용한다. +Consistent와 lumped의 모든 속도장 energy 또는 spectrum 동일성은 요구하지 않는다. + +원형상·무응력 상태의 단일 `*FREQUENCY`, homogeneous essential constraints와 기존 +지원 partial rotation BC를 대상으로 한다. 기존 MITC4의 막·굽힘·횡전단, 단일층 균질 +등방성 탄성, centered constant-thickness section, geometry-derived director, source +`S4`/`S4R`, 전역 6 DOF 의미를 유지한다. FESA는 독립 솔버이며 Abaqus 내부 정식화·적분· +stabilization·결과 생성의 동등성을 주장하지 않는다. + +좌표 공변적인 numerical drilling stabilization 개선 및 영향받는 선형·비선형 정적/eigen +재검증은 범위에 포함한다. 기존 basis-dependent scale 선정과 그 공식 자체의 검사만 +대체 대상이다. 물리 kernel·지원 BC·physical recovery·source identity와 결과 의미는 +보존한다. Nonlinear objective drilling potential, 초기 reference에서 scale을 고정하는 +lifecycle, 일관 residual/Hessian 의미도 유지한다. 상세 대체 공식은 이 문서에서 채택하지 않는다. + +| 물리량 | 단위·좌표·identity 의미 | +| --- | --- | +| `rho`, thickness | mass/length³, length; 양의 유한한 일정 값, 사용자 일관 단위계이며 SI 추론·자동 변환 없음 | +| 병진 질량·회전 관성 | mass, mass·length²; 3 병진과 director 접평면 2 물리 회전, drilling은 물리 관성 없음 | +| 고유치 `lambda` | `omega²`, 1/time², 좌표계 불변 scalar; 원본 `Value`와 직접 비교 | +| 주파수 `f` | 양의 lambda에서 `sqrt(lambda)/(2*pi)`, cycles/time; 의미 확인용 파생량이며 외부 acceptance 대체량 아님 | +| Modal vector | Global physical DOF와 source instance/node/component에 연결; 진폭은 정규화된 모드이며 응답변위가 아님 | +| 결과 identity | Source step·mode와 scalar quantity를 식별; equation index·row 위치·source label을 혼동하지 않음 | + +제외: prestress/선행 nonlinear state 전달, 다중 step, initial stress, 새 geometric stiffness +의미, 재료비선형, 감쇠·복소 고유치, 좌굴, 강제진동·시간적분, acoustic coupling, 혼합 +beam/solid/shell, concentrated/nonstructural mass, composite/offset/variable thickness, +기존 미지원 shell geometry, residual modes, modal stress/reaction recovery. +별도 frequency interval/shift 사용자 기능, Lanczos/AMS 대체 backend, reference +생성·수정·복원과 외부 배포도 제외한다. Eigen 기능의 밀도 필수 조건을 기존 static에 확대하지 않는다. + +## Requirement verification matrix + +각 행은 하나의 관찰 의무이며 acceptance는 해당 요구와 검증 조건을 충족하는 것이다. +현재 요청은 이 의무를 정의하는 **requirement 단계만** 수행한다. 아래 검증은 후속 솔버 +작업의 의도이며 이번에 실행하지 않는다. 구체적인 수식·내부 수치 기준·FEAST controls와 +I/O layout은 후속 전문 owner가 필요한 시점에 정의한다. 외부 tolerance는 공통 정책을 따른다. + +출처: `U`=[새 Feature ADR](ADR.md)의 기존 명시 사용자 결정 적용, +`R`=[근거 문서](requirements-evidence.md)의 reference 관찰, +`P`=위 프로젝트 기준, `L`=[기존 shell 요구](../linear-static-mitc4-shell/requirements.md), +`N`=[기존 nonlinear I/O](../nonlinear-static-newton-raphson/io.md)의 공통 경로·실패 의미. +`Formulation`, `NR`, `I/O`, `Implementation`, `Physics`는 전문 책임이며 고정 호출 단계가 아니다. +각 행은 [기존 r3](../mitc4-shell-feast-eigen/requirements.md)의 같은 번호에 대응한다. + +| Requirement ID | Shall statement | 측정 가능한 acceptance / verification method | 출처·후속 owner | +| --- | --- | --- | --- | +| FEM-REQ-MITC4-EIGEN2-001 | 솔버는 선행 상태 없는 원형상 무응력 모델의 단일 무감쇠 선형 고유진동 procedure를 실행해야 한다. | 지정 reference가 한 frequency step으로 선택되고 static/nonlinear preload 경로를 호출하지 않음; procedure 통합 테스트 | U, R, P; Formulation, I/O | +| FEM-REQ-MITC4-EIGEN2-002 | `S4`와 `S4R`는 기존 FESA MITC4 물리 kernel·director·전역 6 DOF 의미를 유지하고 numerical stabilization만 Requirement 027에 따라 개선해야 한다. | Physical contribution·mapping·recovery 의미 보존, source type만 다른 모델은 같은 mass·개선된 stiffness/eigen 경로와 별도 source metadata; 개선 전 전체 K의 수치 동일성을 요구하지 않음 | U, L; Formulation, I/O | +| FEM-REQ-MITC4-EIGEN2-003 | 모든 활성 shell의 밀도는 해당 section이 참조하는 material에서 하나의 finite `rho > 0`로 결정되어야 한다. | 여러 material의 올바른 연결 및 missing/duplicate/unresolved/nonpositive/nonfinite/dependent density 거부; semantic 양성·음성 테스트 | U, R, P; I/O | +| FEM-REQ-MITC4-EIGEN2-004 | 질량 계산은 기존 shell의 유효한 geometry·director와 양의 centered constant thickness를 사용해야 한다. | 기존 geometry/material/section 검증 재사용과 서로 다른 두께·밀도 연결 테스트; 부적합 요소를 질량 zero로 우회하지 않음 | L, P; Formulation, I/O | +| FEM-REQ-MITC4-EIGEN2-005 | 솔버는 MITC4 보간에 일관된 consistent mass를 계산하고 derived lumped mass 계산의 원본으로 제공해야 한다. | 독립 consistent mass/kinetic-energy oracle와 일치하고 같은 geometry/material/section의 consistent 결과가 Requirement 026의 입력임을 확인; 원본을 lumping으로 덮어쓰지 않음 | U, P; Formulation, NR | +| FEM-REQ-MITC4-EIGEN2-006 | 질량은 3개 병진 및 2개 director-tangent 회전의 물리 관성을 포함하고 numerical drilling에 물리 관성을 부여하지 않아야 한다. | Rigid translation의 총질량, 회전 관성·kinetic energy, director-parallel null action을 독립 검사; NR의 scale-aware 기준 | L, P; Formulation, NR | +| FEM-REQ-MITC4-EIGEN2-007 | 질량·강성은 동일한 physical DOF와 constraint 의미로 결정적으로 조립되어야 한다. | Scatter/source order, 대칭 구조, sequential/병렬 reduction 및 constrained motion 검증; 행렬 및 재실행 테스트 | P, L; Formulation, Implementation | +| FEM-REQ-MITC4-EIGEN2-008 | Massless numerical 좌표 처리는 개선된 stabilization과 lumped mass에 실제 global BC를 적용한 원 pencil의 유한 spectrum을 보존하며 FEAST admissibility를 만족해야 한다. | 지원 partial BC를 포함해 축소 전후 spectrum·constraint·원 free DOF residual 검증; 개선 전 K와의 spectrum 동일성 또는 consistent→lumped 동일성을 요구하지 않음. 인공 mass·임의 cutoff·clamp 금지 | U, P, L; Formulation, NR | +| FEM-REQ-MITC4-EIGEN2-009 | Mode-count 요청은 물리 spectrum의 낮은 순서에서 지정 개수의 고유쌍을 계산해야 한다. | Reference는 10개; 작은 독립 spectrum에서 첫 N개·multiplicity·zero rigid-mode case·요청수 초과/빈 물리계의 명시적 실패 확인. 부적합 음수 spectrum을 양수화하지 않음 | U, R; Formulation, NR, I/O | +| FEM-REQ-MITC4-EIGEN2-010 | 고유치 결과는 오름차순의 고유한 mode identity를 가지고 반복 고유값의 multiplicity를 보존해야 한다. | Repeated/clustered spectrum에서 row 수·순위·identity 및 재현성 확인; 같은 eigenvalue 값은 duplicate identity 오류가 아님 | R, P; NR, I/O | +| FEM-REQ-MITC4-EIGEN2-011 | 실제 고유치 계산은 consistent mass에서 유도한 lumped mass를 MKL FEAST에 사용해야 한다. | Consistent→lumped→FEAST 연결과 real adapter의 질량 입력·backend identity 확인; source Lanczos가 backend를 변경하지 않고 consistent나 다른 질량으로 reference에 맞추지 않음 | U; Formulation, Implementation | +| FEM-REQ-MITC4-EIGEN2-012 | FEAST 실패·미수렴·불충분 모드·비유한 eigenpair를 성공 결과로 반영해서는 안 된다. | 각 failure injection에서 안정된 diagnostic과 불완전 result 미공개 확인; bounded termination 테스트 | P; Formulation, I/O, Implementation | +| FEM-REQ-MITC4-EIGEN2-013 | 성공 eigenpair는 FEAST에서 사용한 동일 lumped mass로 modal residual·mass normalization·orthogonality 검증을 통과해야 한다. | 내부 modal vectors로 독립 residual/Gram 검사를 수행하고 잘못된 mass variant·eigenvector·mode pairing을 검출; NR가 내부 기준·scale 정의 | U, P, R; Formulation, NR, Physics | +| FEM-REQ-MITC4-EIGEN2-014 | 두 질량과 개선된 stabilized eigen 해석은 symmetry, kinetic-energy, coordinate invariance, rigid-body 및 density scaling 검증을 통과해야 한다. | 독립 mass oracle·invariants 및 동일 물리 BC를 보존하는 지원 partial-rotation 사례에서 재계산한 complete K와 eigen spectrum의 좌표 검증 필수. NR-MFE-001 반례를 필수 통과 사례로 포함하며 full-free/full-clamp만으로 대체하지 않음; density scaling 및 각 mass 고유 energy oracle 유지; NR가 내부 기준 정의 | U, P, L; Formulation, NR, Physics | +| FEM-REQ-MITC4-EIGEN2-015 | 지정 `.inp`의 `*FREQUENCY` 요청과 부수 옵션은 보존된 입력에서 명시적으로 mapping되어야 한다. | 원본 파일 변경 없이 실행; requested count와 mass normalization 유지; Lanczos/SIM 옵션의 FESA 처리 및 acoustic-free 모델에서 `ACOUSTIC COUPLING=ON`의 무해성/진단을 I/O에 명시 | U, R, P; I/O | +| FEM-REQ-MITC4-EIGEN2-016 | 승인 subset 밖의 모델·절차·옵션은 의미를 삭제하거나 근사해 실행하지 않고 진단해야 한다. | Exclusion inventory의 양성/음성 테스트; acoustic 요소, preload, damping, 비영 prescribed base state, 미지원 frequency fields 등의 silent no-op 없음 | P, R; I/O, Implementation | +| FEM-REQ-MITC4-EIGEN2-017 | 공식 HDF5는 source step·mode identity와 고유치의 물리량·단위·실제 backend·사용 질량 variant를 식별할 수 있어야 한다. | 입력 sibling `_results.h5`에서 10개 reference 대응 고유치와 선택 질량을 복원; additive schema/self-check 테스트. Mode-vector 영속 projection 필요성·layout은 I/O 소유 | U, P, N; I/O | +| FEM-REQ-MITC4-EIGEN2-018 | 내부 modal vectors는 global physical DOF·source identity와 연결되고 외부 mode-shape acceptance로 사용되지 않아야 한다. | Constraint 복원·source renumbering·mass normalization과 내부 verification evidence 재현; 비교기가 vector reference 파일을 요구하지 않음 | U, P; Formulation, NR, I/O | +| FEM-REQ-MITC4-EIGEN2-019 | State와 final HDF5는 검증된 candidate만 반영하고 제어된 실패에서 기존 유효 결과를 보존해야 한다. | Solve·validation·writer/finalization 실패 후 이전 state/final hash 보존; live log는 기존 `_log.txt` 독립 lifecycle 유지 | P, N; Formulation, I/O, Implementation | +| FEM-REQ-MITC4-EIGEN2-020 | 새 eigen 외부 검증은 지정 원본 TXT의 `Value`만 derived lumped mass로 계산한 FESA HDF5 고유치와 비교해야 한다. | 같은 지정 `.inp`·TXT, Mode 1~10 포함; mass variant 사후 선택 금지. Eigen `Freq`·변위·회전·stress·reaction·mode shape 외부 gate를 추가하지 않음. 승인된 기존 static 회귀는 별도 Requirement 024의 기존 계약 사용 | U, R; NR, I/O | +| FEM-REQ-MITC4-EIGEN2-021 | 비교기는 required identity의 missing/extra/duplicate/nonfinite와 quantity/schema 오류를 tolerance 전에 거부해야 한다. | 행 재정렬은 같은 mapping, mode label 중복·누락·추가·비유한 `Value`는 실패; 같은 값의 다른 mode는 허용; comparator 음성 테스트 | P, R; NR, I/O, Implementation | +| FEM-REQ-MITC4-EIGEN2-022 | 외부 고유치 acceptance는 공통 `docs/TOLERANCE.md`의 scale·row·RMS·zero-scale 정책을 적용해야 한다. | NR/I/O가 공통 정책의 같은 step/frame 규칙 안에서 mode identity·family를 정의하고 모든 요청 Value의 blocking 비교 통과; frequency로 대체하거나 tolerance를 조정하지 않음 | U, P; NR, I/O | +| FEM-REQ-MITC4-EIGEN2-023 | 변경 동작은 의미 있는 테스트와 구성된 MSVC x64 Debug CMake/CTest 검증으로 확인해야 한다. | 가능한 버그 재현, 변경 중 관련 검사, 기능 완료 시 전체 build/test와 필수 reference 비교 1회; 새 warning 없음과 실제 FEAST runtime evidence. 아래 제외 예제 사용 0건 및 남은 필수 coverage와 실행 identity 대조; 형식적 RED·수동/자동 중복 실행을 요구하지 않음 | U, P; Implementation | +| FEM-REQ-MITC4-EIGEN2-024 | 기존 선형·비선형 정적해석은 승인된 stabilization 개선 외의 입력·출력·물리 의미를 보존하고 영향받는 correctness·reference 회귀를 통과해야 한다. | 아래 portfolio의 `shell`·`shellNL` 및 linear-limit 역할을 fresh solve로 검증하고 기존 comparison identity·판정 정책 유지; tangent/선형극한/평형·reaction/energy/state 검증. 제외 예제는 복사본·cache로도 재사용하지 않음. 개선 전 bitwise equality를 요구하지 않고 density 없는 기존 정적 모델도 유지 | U, P, L, N; Formulation, NR, Implementation, Physics | +| FEM-REQ-MITC4-EIGEN2-025 | 솔버 기능 완료 판단은 적용 계약과 모든 필수 검증 evidence를 추적하여 내려야 한다. | 각 요구와 독립 numerical review·analytical/invariant·필요한 physics/reference evidence 연결; 필수 실패·미실행·stale를 통과로 집계하지 않음. 사용자 제외·과거 결과·현재 실행 구분; 기존 명시 감사 요청은 아래 범위 경계대로 보존 | U, P; 메인, NR, Physics | +| FEM-REQ-MITC4-EIGEN2-026 | 솔버는 계산된 consistent mass에서 lumped mass를 유도하고 승인된 질량·관성 보존 계약을 검증해야 한다. | 유도 관계·독립 lumping oracle·총 병진 질량 보존, 차원/대칭성/물리 kinetic-energy 비음성, 물리 회전 관성과 drilling nullspace 의미 검사. Lumping 수식·좌표 block 처리·정확한 관성 불변식과 threshold는 Formulation/NR가 고정 | U, P, L; Formulation, NR | +| FEM-REQ-MITC4-EIGEN2-027 | 개선된 numerical drilling stabilization은 같은 물리 모델의 좌표·접평면 기저 선택에 공변적이고 기존 비물리 역할을 유지해야 한다. | 독립 재계산한 stabilization/complete K의 congruence, finite·대칭·양의 numerical stabilization, 물리 rigid modes 보존, physical recovery 제외 및 결정론 검증. Partial BC의 NR-MFE-001과 대응 정적 response를 필수 통과시키며 기존 static의 동일 scale 사용 경로도 정합 검증; 수식·threshold는 Formulation/NR 소유 | U, L; Formulation, NR, Implementation, Physics | + +## 지정 reference와 남는 검증 범위 + +Eigen input은 `reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp`, 외부 reference는 +같은 폴더의 `shellNL-eigen-meshfine eigenvalues.txt`를 그대로 사용한다. 입력의 +`*FREQUENCY`가 requested count의 권위이며 현재 `N=10`이다. TXT `Mode 1~10`의 `Value`만 +비교한다. 이름 `shellNL`·`Step-2`로 preload를 추정하지 않는다. TXT를 CSV로 변환하거나 +canonical 이름·보조 metadata·provenance를 새 readiness 조건으로 요구하지 않는다. +Source의 blank bounds/shift/control fields, Lanczos/SIM 및 acoustic-free 모델 옵션은 +최소 subset의 의미와 진단으로 다뤄야 하며 정확한 allowlist는 I/O 책임이다. + +| 남는 대상 | 필수 관찰·비교 의미 | +| --- | --- | +| `reference/shell/shell.inp` + `shell displacements.csv` | Linear `shell-s4` 및 `shell-s4-linear-limit` 역할. Source instance/node/component와 해당 static step/frame, global U1/U2/U3 blocking·UR1/UR2/UR3 warning-only. 같은 fresh solve를 사용해도 두 역할의 evidence를 유지 | +| `reference/shellNL/shellNL.inp` + `shellNL displacements.csv` | `shellnl-s4-final`의 factor-one accepted state와 source identity; U blocking·UR warning-only, 기존 좌표 의미 유지 | +| `reference/shellNL/shellNL reactions.csv` | Local RF1/RF2/RF3와 physical spatial RM1/RM2의 source-key·finite·inventory·error 보고는 review-only 유지; RM3/stress를 새 numerical gate로 추가하지 않음 | +| Element·linear static 내부 검사 | Kernel/patch·rigid mode·physical recovery·partition/full residual·reaction·energy·source mapping; 같은 물리 BC/loads를 유지하는 좌표 변환에서 complete K와 partial-BC static response | +| Nonlinear 내부 검사 | 선형극한·tangent consistency·objectivity·factor-one 전역 force/moment balance·free residual·commit/rollback; Newton·convergence·하중·reaction 의미 유지 | +| 새 eigen 내부 검사 | 두 mass의 독립 oracle·질량/관성·drilling null·density scaling·rigid modes, 실제 constraints·finite spectrum·modal residual/Gram·순위/multiplicity·실패 보존; 알려진 `NR-MFE-001` partial-BC 반례를 포함한 좌표 검증 | +| 기타 기존 coverage | Pressure synthetic kernel/하중/평형·schema/comparator 및 무관한 beam 등 회귀 유지. 제외된 복합 시험에 남은 모델 검사가 섞여 있으면 retained fixture/evidence로 해당 관찰을 보존 | + +모든 외부 수치 비교는 [TOLERANCE](../TOLERANCE.md)를 적용한다. 회귀는 개선 전 숫자의 +bitwise equality가 아니라 승인된 물리·identity·공통 정책으로 판단한다. 내부 평형 acceptance와 +reaction의 local distribution 검토는 별개다. 알려진 partial-BC 반례를 full-free/full-clamp +사례만으로 대체하거나 실패 수치를 기대값으로 재생성해 정당화하지 않는다. + +## 사용자 제외 예제 + +다음 네 예제는 `reference/temp/` 아래 원본뿐 아니라 옛 경로, 복사 input, cached HDF5·log· +추출 결과를 통한 검증에서도 제외한다. 원본 열람·artifact audit·solve·비교·복원 또는 +새 fixture로 위장한 재사용을 하지 않는다. 과거 기록은 이력이며 현재 성공 evidence가 아니다. + +| 제외 예제 | 제외되는 외부 coverage | +| --- | --- | +| `shellNL-meshfine` | Fine static solve·변위 비교·reaction review | +| `shellNL-meshfine-pressure` | 해당 pressure 예제의 artifact audit·solve·결과 비교 | +| `shellNL-meshfine_02` | 별도 post-closure 예제의 검증 | +| `shellNL-dyn-meshfine` | 해당 예제의 검증 | + +`reference/shellNL-eigen-meshfine`는 이 목록에 포함되지 않는다. 제외는 지원 기능과 내부 +물리 검증 의무 삭제를 뜻하지 않는다. Pressure 예제에 대한 fresh 외부 coverage 부재는 +명시적으로 보고한다. 과거 test 수 `362/352`를 새 완료 조건으로 사용하지 않고 실제 남은 +의무·선택·실행·사용자 제외를 구분한다. + +## 이번 완료와 후속 판단의 경계 + +이번 완료는 요구·출처·coverage·링크의 정적 확인까지다. 구현/FEAST/build/test/reference, +독립 numerical/physics review와 release-readiness는 미실행이다. 기존 명시 release-readiness +감사 요청은 후속 요구 기록으로 보존하되 이번 요청의 실행 범위나 모든 기능의 고정 단계 +의무로 확대하지 않는다. 메인이 필요한 후속 전문 작업과 evidence를 판단한다. +공통 문서·기존 Feature·source·test·reference는 읽기 전용이며 Git은 메인이 소유한다.