14 KiB
Step 2: Consistent→lumped 질량과 deterministic 조립
과거 개발 계획이다. 아래 작업·상태·예시는 현재 실행 지시가 아니다. 현재 구현과 검증 한계는 기능 요약을 따른다.
- Feature ID:
mitc4-shell-feast-eigen - Input contract revision:
r2 - Phase:
mitc4-shell-feast-eigen - Dependency: 동일 phase의 Step 1 completed
- Requirement IDs:
FEM-REQ-MITC4-EIGEN-003,FEM-REQ-MITC4-EIGEN-004,FEM-REQ-MITC4-EIGEN-005,FEM-REQ-MITC4-EIGEN-006,FEM-REQ-MITC4-EIGEN-007,FEM-REQ-MITC4-EIGEN-011,FEM-REQ-MITC4-EIGEN-014,FEM-REQ-MITC4-EIGEN-018,FEM-REQ-MITC4-EIGEN-026 - Logical cases:
MFE-C01,MFE-C02,MFE-C03,MFE-C04,MFE-C05,MFE-C06,MFE-C07,MFE-C11,MFE-C20 - I/O obligations:
IO-T02,IO-T04,IO-T11
필수 입력과 계약
Feature 폴더는 docs/mitc4-shell-feast-eigen/다. 아래 current r2 입력을 읽고 기존 완료 Step 코드와 evidence를 대조한다. 연결된 upstream contract는 read-only다.
- AGENTS.md
- docs/SOLVER_AGENT_DESIGN.md
- docs/FEATURE_DOCUMENTATION.md
- docs/PRD.md
- docs/ARCHITECTURE.md
- docs/ADR.md
- docs/CODINGSTYLE.md
- docs/TOLERANCE.md
- docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md
- docs/mitc4-shell-feast-eigen/PRD.md
- docs/mitc4-shell-feast-eigen/ADR.md
- docs/mitc4-shell-feast-eigen/coordination.md
- docs/mitc4-shell-feast-eigen/requirements.md
- docs/mitc4-shell-feast-eigen/requirements-evidence.md
- docs/mitc4-shell-feast-eigen/research.md
- docs/mitc4-shell-feast-eigen/research-evidence.md
- docs/mitc4-shell-feast-eigen/formulation.md
- docs/mitc4-shell-feast-eigen/formulation-mass.md
- docs/mitc4-shell-feast-eigen/formulation-eigen.md
- docs/mitc4-shell-feast-eigen/formulation-verification.md
- docs/mitc4-shell-feast-eigen/formulation-stabilization.md
- docs/mitc4-shell-feast-eigen/numerical-review.md
- docs/mitc4-shell-feast-eigen/numerical-review-evidence.md
- docs/mitc4-shell-feast-eigen/numerical-review-controls.md
- docs/mitc4-shell-feast-eigen/numerical-review-cases.md
- docs/mitc4-shell-feast-eigen/reference-model.md
- docs/mitc4-shell-feast-eigen/io.md
- docs/mitc4-shell-feast-eigen/io-input.md
- docs/mitc4-shell-feast-eigen/io-schema.md
- docs/mitc4-shell-feast-eigen/io-mapping.md
- docs/mitc4-shell-feast-eigen/implementation-plan.md
- docs/mitc4-shell-feast-eigen/implementation-environment.md
- docs/mitc4-shell-feast-eigen/implementation-interfaces.md
- docs/mitc4-shell-feast-eigen/implementation-verification.md
이 Step의 직접 계약: formulation-mass.md, numerical-review-evidence.md#독립-mass-oracle, numerical-review-controls.md#c2-matrix-mass-stabilization와-reduction, formulation-mass.md#m4-계산된-consistent-moment에서-nodal-block-유도, formulation-mass.md#m5-보존되는-양과-근사되는-양, formulation-eigen.md#e1-조립-단위-scaling과-실제-global-제약. 논리 case의 전체 parameter/threshold/음성 inventory는 NR 원문과 verification mapping을 함께 적용한다.
Owned paths
다음 목록은 phase index owned_paths와 exact equality를 유지한다. 목록 밖 파일이 필요하면 보존하고 Coordinator에 반환한다. 다른 agent도 같은 worktree를 사용하므로 타인 변경을 되돌리지 않는다.
[
"include/fesa/elements/mitc4_shell.h",
"src/fesa/elements/mitc4_shell_mass.cpp",
"tests/unit/elements/mitc4_shell_test.cpp",
"tests/unit/elements/mitc4_shell_mass_test.cpp",
"src/fesa/CMakeLists.txt",
"tests/CMakeLists.txt",
"include/fesa/elements/element_factory.h",
"src/fesa/elements/element_factory.cpp",
"include/fesa/assembly/shell_mass_assembler.h",
"src/fesa/assembly/shell_mass_assembler.cpp",
"tests/unit/elements/element_factory_test.cpp",
"tests/unit/assembly/shell_mass_assembler_test.cpp",
"docs/mitc4-shell-feast-eigen/implementation-step2-evidence.md"
]
같은 session의 behavior별 TDD
각 소단위는 아래 순서로 RED→observed failure→minimal GREEN→focused VERIFY를 완료한다. 마지막 소단위 뒤 full VERIFY를 한 번 수행하고 등록 Stop의 정상 전체검증도 받는다. Missing API의 정확한 compile/link failure는 RED일 수 있으나 configure/dependency 오류는 RED가 아니다. 이미 통과한 test를 새 RED라고 보고하지 않는다.
1. 27점 consistent scalar moments와 물리 관성
Symbols: Mitc4ConsistentMass; Mitc4Shell::ConsistentMass(double density); fixed 3x3x3 mass quadrature.
RED: Flat4x2 rho3 t1/2의 exact C0/C1/C2, 24-matrix energy 및 physical20 positive rank/null을 검사해 API 부재 failure를 관찰한다. Rational warped/director-varying fixture는 NR의 exact coefficient/row oracle를 test-local 독립 polynomial integration 또는 5-point direct particle integration으로 구성한다. Production ShapeFunctions/EvaluateGeometry 재호출 oracle는 금지한다. 강제 C1=0/2-point/flat C2 mutation은 오류를 검출해야 한다.
Minimal GREEN: Mitc4Shell의 기존 geometry evaluator를 같은 sign/원형상으로 27점에 적용하는 member 구현을 새 cpp에 둔다. M5의 C0/C1/C2 snapshot과 consistent24를 먼저 완성·검증해 반환한다. Quadrature loop 순서/finite/positive geometry와 rho 검사는 계약대로 한다. 5/6을 mass에 곱하거나 곡면 odd coupling을 생략하지 않는다. Lumped/FEAST/global dense MC는 이 단계에 넣지 않는다.
Focused VERIFY: 아래 regex 중 해당 suite를 먼저 discovery하여 tests>0을 확인하고 같은 test를 재실행한다. Exact exit와 실패 이유를 behavior별로 기록한다.
2. Moment 유도 lumping과 deterministic nodal 조립
Symbols: Mitc4LumpedMass; DeriveLumpedMass(consistent snapshot, directors); ElementFactory::CreateMitc4Shell; ShellMassAssembler::Assemble.
RED: C1/C2 symmetric perturbation을 consistent snapshot에 주어 derived block도 독립 integral대로 변하는지 먼저 실패시킨다. m/h/j positivity·central variance·rank5·drill null·spatial centroid와 Jensen work를 검사한다. m=1,2,4 grid의 velocity(x,0,0)에서 MC work4/3, difference8/(3m²)를 독립 기대값으로 사용한다. Two-rho/t patch의 source/scatter 및 parallel scheduling permutations를 검사한다.
Minimal GREEN: M6/M7의 scalar moment row-sum으로 nodal6 blocks를 만든다. 원 snapshot을 덮어쓰지 않는다. Typed factory 생성 경계에서 generic Element 생성과 동일 검증·runtime layout을 재사용하고 solver consumer의 downcast/type switch를 추가하지 않는다. Mass assembler는 DOF owner의 scatter로 index-owned contributions를 stable source order로 reduce한다. K는 기존 SparseAssembler/ElementView 경로를 재사용한다. Source/section/material별 rho·t 및 nodal incident kd 합을 보존한다.
Focused VERIFY: 아래 regex 중 해당 suite를 먼저 discovery하여 tests>0을 확인하고 같은 test를 재실행한다. Exact exit와 실패 이유를 behavior별로 기록한다.
Focused 명령
Workspace root의 PowerShell에서 실행한다. 초기 missing API RED라면 build의 expected failure를 기록하고 production 구현 후 같은 명령을 다시 실행한다.
$env:CMAKE_BUILD_PARALLEL_LEVEL = '1'
cmake --preset mfe-workspace-msvc-ninja-debug
cmake --build --preset mfe-workspace-msvc-ninja-debug --target fesa_tests
ctest --preset mfe-workspace-msvc-ninja-debug -R '^(Mitc4ShellMass|Mitc4ShellKinematics|Mitc4ShellKernel|ElementFactory|ShellMassAssembler|SparseAssembler)\.' --show-only=json-v1
ctest --preset mfe-workspace-msvc-ninja-debug -R '^(Mitc4ShellMass|Mitc4ShellKinematics|Mitc4ShellKernel|ElementFactory|ShellMassAssembler|SparseAssembler)\.' --output-on-failure
Configure exit는 항상0이어야 한다. GREEN에서는 위 모든 exit0, discovered selected tests>0, failures0이어야 한다. 각 호출의 $LASTEXITCODE를 즉시 기록하고 실패 뒤 후속 명령으로 덮어쓰지 않는다.
필수 신규 test discovery inventory
Mitc4ShellMass.MfeC01FlatMomentOracleMitc4ShellMass.MfeC02CurvedParticleOracleMitc4ShellMass.MfeC03DerivedSnapshotAndJensenShellMassAssembler.MfeC04RefinementEnergyMitc4ShellMass.MfeC05RotatedMassAndCentroidShellMassAssembler.MfeC06SourceAndParallelOrderMitc4ShellMass.MfeC07InvalidMassGeometry
위 이름 모두를 focused 및 full discovery JSON의 tests[].name에서 확인한다. Parameterized 전개가 필요하면 원 obligation→실제 discovered 이름을 evidence에 명시하고 모든 전개 case를 실행한다. 단지 selected count>0이거나 기존 suite만 존재하는 것은 실패다. V2의 해당 독립 oracle/mutation과 이 Step의 behavior assertions를 실제 구현해 각 결과를 기록한다.
Full VERIFY
현재 backend는 local user preset mfe-workspace-msvc-ninja-debug/MSVC x64 Debug다. 이 Step의 명령을 직접 실행하며 local config/preset과 다른 graph로 fallback하지 않는다.
과거 도구 실행·출력 지시는 정리했으며, 현재 검증 방법은 기능 요약을 따른다.
전체 discovery의 test count와 실제 실행 count를 대조하고 skipped/missing/unobserved를 성공으로 합치지 않는다. 기존 target의 /W4 /WX를 유지하고 새 compiler/link warning0을 확인한다. 등록 Stop의 전체 검증은 그대로 수행되며 수동 hook 실행·state/reentry 조작으로 대체하지 않는다. Step 2에서 영향받는 C++ binary가 바뀌면 기존 reference helper의 cache 재사용 여부와 실제 solve 호출을 구분한다. 최종 fresh portfolio의 권위는 Step 7이다.
Evidence와 종료
../../docs/mitc4-shell-feast-eigen/README.md
이 Step의 evidence에는 Feature/owner/r2, exact owned changed paths, RED→GREEN 명령·actual exits·기간·핵심 수치, focused/full counts, MSVC/x64/Debug/dependency/runtime selection, warning 수, upstream case/requirement 연결, 미실행 및 residual risk를 기록한다. Raw logs는 Git ignored 과거 검증 자료(정리됨)에 보존한다. 각 CTest 호출 직후 해당 Testing/Temporary/LastTest.log를 고유 RED/focused/full 이름으로 복사하여 이후 Stop 로그와 섞지 않는다. Binary/reference/result hash와 run freshness는 적용되는 경우 기록한다.
보고서 작성 시점에는 마지막 registered Stop/Codex exit가 아직 발생하지 않을 수 있다. Implementation은 실제 완료된 manual 검증과 미관찰 Stop을 구분하고 미래 성공을 선기록하지 않는다. completed payload는 그 자체로 Stop 성공 증거가 아니다. Executor 종료 뒤 Coordinator가 raw output·등록 Hook evidence·actual exit를 management 문서에서 사후 감사한다. Specialist 보고서 본문은 Coordinator가 대신 수정하지 않는다.
Manual AC가 성공하면 Executor가 허용한 phases/mitc4-shell-feast-eigen/index.json의 현재 Step 2만 status=completed와 비어 있지 않은 summary를 기록한다. 구현/검증 실패는 error/error_message, 환경·필수 준비 차단은 blocked/blocked_reason이다. owned_paths, 이름/번호, 다른 Step/top index, timestamp, attempt_history는 수정하지 않는다. step2-output.json은 Executor 생성 기록이며 ignored 상태를 유지한다. 마지막 응답은 공통 handoff envelope다. Phase 전체 또는 workflow gate의 자기 승인은 하지 않는다.
제외와 중단 조건
Physics/formulation/I/O/tolerance/원본 reference·기존 feature 보고서 변경, 외부 solver, spectrum fitting, eigen 외부 vector/frequency/stress gate, sparse rank cutoff, sandbox 확대, retry-budget 변경, Git branch/commit/push/tag/release는 소유 범위 밖이다. 명백한 구현 결함은 이 exact scope 안에서 최소 수정한다. 계약 결함은 정확한 owner로 return-upstream, 실행 환경 실패는 actual command/exit와 함께 Coordinator로 반환한다. 동일 실패를 transport timeout으로 가장하거나 evidence를 지우고 재실행하지 않는다.