English version

방법론

이 페이지는 이 연구 프로젝트가 무엇을 만들었고, 어떻게 확인했고, 무엇을 아직 확인하지 못했는지를 프로젝트 문서에 기록된 범위 안에서 정리한 것이다. 기록되지 않은 내용은 쓰지 않았다. 숫자와 단위는 원문 그대로 인용했으며, 이 페이지가 새로운 과학적 주장이나 검증 주장을 더하는 것은 아니다.

이 방법론 페이지는 Claude Sonnet 5.5가 저장소 문서와 데모 산출물을 바탕으로 초안을 쓰고, Codex gpt-6.1-terra가 숫자·방정식·인용·링크를 원문과 대조했으며(지적 6건 반영), 통합 담당(Hermes, Claude Opus 5.5)이 지적 사항을 원문으로 다시 확인해 고쳤다. 페이지의 모든 사실 서술은 링크된 원문 문서가 기준이다.

수식 표기: 2장의 방정식은 KaTeX로 조판했다. Codex gpt-6-luna가 원문 텍스트 수식을 LaTeX로 옮기고, Claude Sonnet 5.5가 원문 문서와 하나씩 대조해 표기 모호성 10곳을 고쳤다(예: V0, dp를 곱으로 오해할 수 있는 표기). 각 수식 묶음 아래에서 원문 텍스트 수식을 펼쳐 비교할 수 있다.

1. 이 사이트는 무엇인가

사용 범위. 이 소프트웨어는 실험적 연구 소프트웨어이다. 진단, 치료 선택, 환자별 예측에 사용할 수 없다. 환자 데이터는 사용하지 않았으며 모든 입력과 결과는 합성(synthetic) 값이다. 신체의 어떤 상태를 “정상”이라고 주장하지도 않는다.

Phase 1 문서는 이 소프트웨어를 “Experimental Phase 1 research software”로, 수치 시뮬레이션은 결정적(deterministic)이며 설치 후에는 LLM이나 네트워크 연결이 필요 없다고 기록한다. 기본 설정(baseline)은 압력이 높은 계산용 기준선이며 건강한 성인의 기준값으로 기술해서는 안 된다고 명시되어 있다.

이 사이트에 공개된 것

관련 원문: research_report · physiology · decisions

2. 모델

세 가지 모델 계층이 있다. 세 모델 모두 파라미터 값은 탐색용(exploratory)·합성이며 문헌 값에 맞추어 보정(fitted)되지 않았다. 아래 방정식은 문서에 기록된 것을 그대로 옮긴 것이다.

2.1 Phase 1: 6-compartment 폐회로 모델

선언된 범위는 “실행 가능한 폐회로 교육/연구용 프로토타입”이며 임상 모델이 아니고 환자별 예측이 아니며 Smith et al. (2004)의 복제(replication)도 아니다. 구조 방정식은 검토한 출처에서 착안했으나 단순화되어 있고, 게시된 기준 궤적을 재현하지 않는다고 기록되어 있다.

상태 변수

상태 순서 COMPARTMENTS = (lv, sa, sv, rv, pa, pv): 좌심실, 체동맥, 체정맥, 우심실, 폐동맥, 폐정맥. 여섯 상태는 모두 총 구획 부피(mL)이며, 압력과 유량은 대수적 관측량이다. 순환은 방향이 있는 고리이다.

LV --aortic--> SA --systemic--> SV --tricuspid--> RV
RV --pulmonary_valve--> PA --pulmonary--> PV --mitral--> LV

지배 방정식

\[T = \frac{60}{\mathrm{heart\_rate}}\quad\text{[s; HR in beats/min]}\]
\[\varphi = \frac{(t \bmod T)}{T}\quad\text{[dimensionless]}\]
\[a(\varphi) = \begin{cases}\frac{1 - \cos(2\cdot\pi\cdot\varphi/s)}{2} \quad\text{if } 0 \le \varphi < s\\0 \quad\text{otherwise}\end{cases}\]
\[E_{\mathrm{lv}}(t) = \mathrm{emin}_{\mathrm{lv}} + (\mathrm{emax}_{\mathrm{lv}} - \mathrm{emin}_{\mathrm{lv}})\cdot a(\varphi)\]
\[E_{\mathrm{rv}}(t) = \mathrm{emin}_{\mathrm{rv}} + (\mathrm{emax}_{\mathrm{rv}} - \mathrm{emin}_{\mathrm{rv}})\cdot a(\varphi)\]
\[P_{\mathrm{lv}} = E_{\mathrm{lv}}(t)\cdot(V_{\mathrm{lv}} - \mathrm{V0}_{\mathrm{lv}})\]
\[P_{\mathrm{rv}} = E_{\mathrm{rv}}(t)\cdot(V_{\mathrm{rv}} - \mathrm{V0}_{\mathrm{rv}})\]
\[P_i = \frac{V_i - \mathrm{V0}_i}{C_i}\quad\text{for } i = \mathrm{sa},\ \mathrm{sv},\ \mathrm{pa},\ \mathrm{pv}\]
\[Q_{\mathrm{valve}} = \max\left(\frac{(P_{\mathrm{upstream}}-P_{\mathrm{downstream}})}{R_{\mathrm{valve}}},\,0\right)\]
\[Q_{\mathrm{bed}} = \frac{(P_{\mathrm{upstream}}-P_{\mathrm{downstream}})}{R_{\mathrm{bed}}}\]
\[\frac{dV_{\mathrm{lv}}}{dt} = Q_{\mathrm{mitral}} - Q_{\mathrm{aortic}}\]
\[\frac{dV_{\mathrm{sa}}}{dt} = Q_{\mathrm{aortic}} - Q_{\mathrm{systemic}}\]
\[\frac{dV_{\mathrm{sv}}}{dt} = Q_{\mathrm{systemic}} - Q_{\mathrm{tricuspid}}\]
\[\frac{dV_{\mathrm{rv}}}{dt} = Q_{\mathrm{tricuspid}} - Q_{\mathrm{pulmonary\_valve}}\]
\[\frac{dV_{\mathrm{pa}}}{dt} = Q_{\mathrm{pulmonary\_valve}} - Q_{\mathrm{pulmonary}}\]
\[\frac{dV_{\mathrm{pv}}}{dt} = Q_{\mathrm{pulmonary}} - Q_{\mathrm{mitral}}\]
원문 텍스트 수식 보기 (physiology와 대조용)
T = 60 / heart_rate                     [s; HR in beats/min]
phi = (t modulo T) / T                  [dimensionless]
a(phi) = (1 - cos(2*pi*phi/s))/2         if 0 <= phi < s
       = 0                             otherwise
E_lv(t) = emin_lv + (emax_lv - emin_lv)*a(phi)
E_rv(t) = emin_rv + (emax_rv - emin_rv)*a(phi)
P_lv = E_lv(t)*(V_lv - V0_lv)
P_rv = E_rv(t)*(V_rv - V0_rv)
P_i = (V_i - V0_i)/C_i                  for i = sa, sv, pa, pv
Q_valve = max((P_upstream-P_downstream)/R_valve, 0)
Q_bed = (P_upstream-P_downstream)/R_bed
dV_lv/dt = Q_mitral - Q_aortic
dV_sa/dt = Q_aortic - Q_systemic
dV_sv/dt = Q_systemic - Q_tricuspid
dV_rv/dt = Q_tricuspid - Q_pulmonary_valve
dV_pa/dt = Q_pulmonary_valve - Q_pulmonary
dV_pv/dt = Q_pulmonary - Q_mitral

여기서 s는 systolic_fraction이다. 각 유량이 정확히 한 번씩 반대 부호로 나타나므로 여섯 도함수의 기호적 합은 0이다. 수치적 보존은 별도로 시험하며, 부피를 재정규화하거나 압력·부피를 clipping하여 통과시키지 않는다(유량만 밸브의 구성 법칙에 따라 clipping). 내부 단위는 s, mL, mmHg이다. 밸브는 4개의 대수적 일방향 저항 밸브(이상적 다이오드)이고, 체순환·폐순환 혈관상(vascular bed)은 부호가 있는 저항이다.

파라미터의 지위

문서는 모든 기본값이 “exploratory, author-selected, unfitted, not clinically validated”이며 문헌 측정 출처를 주장하지 않는다고 기록한다. 문헌 인용은 방정식 구조를 뒷받침할 뿐 이 값들을 뒷받침하지 않는다.

필드기본값단위
heart_rate75beat/min
emin_lv / emax_lv0.06 / 2.5mmHg/mL
emin_rv / emax_rv0.03 / 0.8mmHg/mL
systolic_fraction0.41
compliance_sa / sv / pa / pv1.5 / 100 / 5 / 20mL/mmHg
resistance_aortic / tricuspid / pulmonary_valve / mitral0.01 (각각)mmHg s/mL
resistance_systemic / resistance_pulmonary1 / 0.1mmHg s/mL
unstressed_volumes (lv, sa, sv, rv, pa, pv)(10, 700, 2500, 10, 100, 400)mL
initial_volumes (같은 순서)(140, 850, 3200, 140, 180, 490)mL (합계 5000 mL)

초기 부피 분포는 주기 해가 아니라 탐색용 시작 조건이다.

시나리오

세 시나리오(baseline, reduced_contractility, partial_contractility_restoration)는 동일한 초기 부피에서 시작하는 별개의 실행이며 시간 순서가 있는 치료 경과가 아니다. reduced_contractility는 emax_lv만 2.5 → 1.25 mmHg/mL로 바꾸고(factor 0.5), partial_contractility_restoration은 그 값에 1.5배(→ 1.875 mmHg/mL)를 적용한다. 변경은 시간 0에 적용되며 약물 용량 모델이 아니다.

실제 사용된 solver 설정 (summary.json)

항목값
방법DOP853
cycles60
samples_per_cycle400
rtol1e-09
atol1e-10 mL
max_step_fraction0.005 (= T/200)
periodicity_tolerance_ml0.1 mL

이 주기성 기준(마지막/직전 박동 파형의 여섯 부피 최대 차이 0.1 mL)은 “modest software milestone gate”이며 검증 프로토콜의 더 엄격한 다중 박동 기준(1e-4 mL)이 아니다. 이 실행의 세 시나리오는 모두 periodic_within_declared_gate 상태로 기록되었다.

구현 세부

밸브 전이마다 고정된 밸브 영역(regime) 안에서 적분하고, 압력 차 종단 이벤트(terminal pressure-gap event)로 첫 개폐 시점을 찾는다. 이벤트 이후의 연속 외삽은 해를 찾는 동안에만 쓰이고 보존되지 않는다. 수축기/이완기 경계와 활성화 펄스의 정점에서도 적분을 재시작한다. 선택 옵션 cumulative_flows=True는 유량의 적분 상태 여섯 개를 추가한다.

모델링하지 않은 것

별도의 심방, 중격·심낭 상호작용, 밸브 관성, 비선형 수동 심실 역학, 반사(reflex), 신장 조절, 호흡, 산소 수송, 약리학. 선형 압력 법칙은 일부 파라미터/초기 상태에서 비물리적인 음압을 허용하며 숨기지 않는다. 폐정맥 압력은 집중 저장소(lumped reservoir) 압력이며 측정된 심방 압력이나 폐부종의 증거가 아니다.

관련 원문: physiology · research_report · decisions

2.2 four-chamber M1: 수동 심방 스냅샷

MODEL_ID="four_chamber_m1", 버전 1.0.0. 합성/탐색용이며 임상 검증을 받지 않았고 게시된 four-chamber 재현이 아니다. 기존 6-compartment 방정식과 정체성은 그대로 독립적으로 남아 있다.

상태 변수

상태 순서 (lv, sa, sv, ra, rv, pa, pv, la), 8개의 총 혈액 부피(mL, stressed volume 아님) + 8개의 보조 유량 적분. 유량/관성 상태는 없다. 총 부피는 호출자가 선언한 여덟 초기 부피의 합이며 정규화하지 않는다.

간선과 방정식

간선출발도착법칙
aorticlvsaideal diode
systemicsasvsigned resistor
venous_returnsvrasigned resistor
tricuspidrarvideal diode
pulmonary_valvervpaideal diode
pulmonarypapvsigned resistor
pulmonary_venouspvlasigned resistor
mitrallalvideal diode
\[B_{\mathrm{source},e} = -1,\quad B_{\mathrm{target},e} = +1,\quad \text{other entries 0}\]
\[\frac{dV}{dt} = B q,\quad \mathbf{1}^{T} B = 0,\quad \frac{d}{dt}\sum V = 0\]
\[T = \frac{60}{\mathrm{HR}}\ [\mathrm{s}],\quad \varphi = \frac{(t \bmod T)}{T},\quad s = \mathrm{systolic\_fraction}\]
\[a(\varphi) = \begin{cases}(1-\cos(2\cdot\pi\cdot\varphi/s))/2 \quad\text{if } \varphi < s\\0 \quad\text{otherwise}\end{cases}\]
\[E_v(t) = \mathrm{Emin}_{v} + (\mathrm{Emax}_{v}-\mathrm{Emin}_{v})\cdot a(\varphi),\quad v \in \{\mathrm{lv},\mathrm{rv}\}\]
\[P_v = E_v(t)\cdot(V_v-\mathrm{V0}_v),\quad v \in \{\mathrm{lv},\mathrm{rv}\}\]
\[P_{\mathrm{a}} = E_{\mathrm{a}}\cdot(V_{\mathrm{a}}-\mathrm{V0}_{\mathrm{a}}),\quad \mathrm{a} \in \{\mathrm{la},\mathrm{ra}\},\quad\text{constant positive } E_{\mathrm{a}}\]
\[P_i = \frac{(V_i-\mathrm{V0}_i)}{C_i},\quad i \in \{\mathrm{sa},\mathrm{sv},\mathrm{pa},\mathrm{pv}\}\]
\[\mathrm{dp}_e = P_{\mathrm{source}(e)}-P_{\mathrm{target}(e)}\]
\[q_e = \max\left(\frac{\mathrm{dp}_e}{R_e},\,0\right),\quad\text{for the four ideal diodes}\]
\[q_e = \frac{\mathrm{dp}_e}{R_e},\quad\text{for the four signed resistors}\]
\[\mathrm{Cumulative}_{e}(t) = \int_{0}^{t} q_{e}(u)\,du\]
원문 텍스트 수식 보기 (physiology_four_chamber_m1와 대조용)
B[source,e] = -1,  B[target,e] = +1,  other entries 0
dV/dt = B q,   1^T B = 0,   d(sum V)/dt = 0
T = 60/HR s,  phi = (t mod T)/T,  s = systolic_fraction
a(phi) = (1-cos(2*pi*phi/s))/2, if phi < s; 0 otherwise
E_v(t) = Emin_v + (Emax_v-Emin_v)*a(phi),  v in {lv,rv}
P_v = E_v(t)*(V_v-V0_v),                   v in {lv,rv}
P_a = E_a*(V_a-V0_a),  a in {la,ra},  constant positive E_a
P_i = (V_i-V0_i)/C_i,                      i in {sa,sv,pa,pv}
dp_e = P_source(e)-P_target(e)
q_e = max(dp_e/R_e,0),  for the four ideal diodes
q_e = dp_e/R_e,         for the four signed resistors
Cumulative_e(t) = integral from 0 to t of q_e(u) du

압력 기준은 문서가 정확히 이렇게 선언한다: “model gauge pressure relative to one common fixed external pressure of 0 mmHg; no intrathoracic/pericardial pressure”. 이는 수학적 gauge 선언이며 대기압/절대압에 대한 주장이 아니다. 음의 gauge 압력도 허용되고 clipping이나 보존 투영은 없다.

파라미터의 지위

파라미터에는 기본값이 없다(호출자가 모두 제공). 데모용 synthetic_fixture()는 기존 탐색용 심실/혈관 스칼라 값을 복사하고, 새 값 E_la=.15, E_ra=.10 mmHg/mL, R_venous_return=.05, R_pulmonary_venous=.05 mmHg s/mL을 “explicit fixture choices”로 둔다. 상태 순서의 V0=(10,700,2500,20,10,100,400,20) mL, V_initial=(140,850,3200,60,140,180,490,60) mL이며 호출자가 선언한 총량은 5120 mL이다. 모두 “test design choices, not fitted, literature-derived or normal physiology”이다. 심방 탄성도, 정맥 유입 저항, 심방 비응력 부피를 보정하는 출처는 없다고 기록되어 있다.

실제 사용된 solver 설정 (summary.json)

항목값
methodDOP853
cycles30
samples_per_cycle400
rtol1e-09
atol1e-10 mL
max_step0.004 s

이 실행의 periodicity 최대 차이는 0.0007067402634675091 mL(가장 큰 구획: sv)로 기록되었다. 문서는 고정 박동 수가 정상 상태를 증명하지 않으며 자동 수렴 게이트도 없다고 명시한다. 보존 보고: 총 부피 드리프트 1.0913936421275139e-11 mL, 국소 균형 잔차 1.7280399333685637e-11 mL(후자는 배선과 반올림만 확인하며 적분 정확도를 독립적으로 입증하지 않는다).

모델링하지 않은 것

능동 심방 수축, AV 지연, 관성(inertance), 폐쇄 역류, FSI, 신장/약물/반사 모델, 임상 검증. 4개의 이상적 대수 다이오드는 동적 밸브 거동을 주장할 수 없다. Smith/four-chamber 기준 재현이 아니며, 6-compartment 모델과의 무조건적 R→0 동등성도 주장하거나 게이트로 사용하지 않는다.

관련 원문: physiology_four_chamber_m1 · anatomy_nodes_v2 · decisions

2.3 applied LA–mitral–LV 설명용 sidecar

이 sidecar는 four_chamber_m1@1.0.0의 얇은 메타데이터 층이며 LA, 승모판 수송, LV로 한정된다. M1 manifest를 읽기만 하고 방정식, 파라미터, 단위, 출력, 기존 registry를 건드리지 않는다. 새로운 생리 모델이나 해부학적 온톨로지 동등성을 만들지 않으며 환자·CT·마스크·측정·관측 자료는 일절 받지 않는다.

상태 변수와 방정식

sidecar는 M1의 선택된 계약을 그대로 복사해 가리킨다: V_la, V_lv(상태, mL), P_la, P_lv(대수적 관측량, mmHg, 공통 gauge), Q_mitral(mL/s, LA→LV, 비음수), Q_cum_mitral(mL, 실행 누적). 방정식은 새로 만들지 않고 M1 방정식(활성화, E_v(t), P_v, P_a, ideal-diode q_e, 누적 적분)을 문서 줄 번호로 참조한다. E_lv(t)는 매니페스트 변수가 아니라 별도의 구성 법칙 노드이다. 입력은 heart_rate와 systolic_fraction이다.

파라미터의 지위

필수 파라미터 참조: elastance_la, emin_lv, emax_lv(mmHg/mL), resistance_mitral(mmHg*s/mL), heart_rate(1/min), systolic_fraction(dimensionless), unstressed_volumes, initial_volumes(mL). 값은 해부학에서 얻지 않으며 데모는 M1과 같은 합성 fixture를 사용한다.

실제 사용된 데모 설정 (run_receipt.json)

항목값
실행 횟수동일 설정 2회 (sidecar 구축·검증 전/후)
cycles2
samples_per_cycle50
method / rtol / atolDOP853 / 1e-09 / 1e-10 mL
max_step0.004 s
배열 형태time (101,), 나머지 (101, 8)

두 실행의 전체 time/volume/pressure/flow/cumulative 배열 해시가 일치했고 manifest 해시도 전후 동일(9393e36f…3506)했다. 이는 짧은 실행에서의 수치 불변성 점검이며 정상 상태나 생리적 검증이 아니다.

모델링하지 않은 것

M1의 이상적 다이오드는 출처 인터페이스가 허용하는 부호 있는/역류 수송에 대한 제한된 “no-reverse-flow” 근사이다. 역류, 유효 오리피스 면적(EOA는 NOT_REPRESENTED), 환자 기하, 밸브 역학은 모델링하지 않는다. 우심 변경, 신체 전체 적용, M2/M3 변경도 없다.

관련 원문: applied_la_mitral_lv · physiology_four_chamber_m1

3. 온톨로지와 의미 계층

3.1 변수 주석과 개념 IRI

physiosim.ontology는 완전히 오프라인인 34개 변수의 registry와 RDFLib named-graph 내보내기를 제공한다. 물리적 속성, 해부학적 맥락, 물리적 보유자(bearer), 시간적 의미, 단위, 유량 방향, 방정식, 의존성, 출처 맥락을 구분한다. 문서는 이것이 “프로젝트 주석 계층이며 가져온 참조 온톨로지나 임상 추론 시스템이 아니다”라고 기록한다.

3.2 SHACL 검증 계층

증거 검토 문서에 따르면 SHACL 모양(shapes)은 OMEX v1.2 composite annotation용 일반 규칙 11개와 Smith 전용 규칙 7개로 작성되었고, 양성/음성 대조 fixture가 정확히 기대 결과를 낸다. 워크스페이스 267의 SemSim 주석을 OMEX 형태로 번역해 실행하면 22 Violations, 7 Warnings, 46 Info가 나온다. SHACL은 구조 규칙을 강제할 수 있지만 생리적 타당성이나 수치 일치를 검사하지 못하며, 주석이 없는 데이터에는 공허하게 통과할 수 있다는 한계도 기록되어 있다. 별도 깨끗한 작업 트리에서 새 가상환경으로 재현했을 때 같은 출력이 나왔으나(대조군 0 / 13 / 12), 이는 재현 시험이지 shapes가 옳다는 확인이 아니다.

3.3 증거 검토와 해부학 노드 v2 카탈로그

증거 검토(2026-11-01)는 OWL 생성 이전의 검토이며 어떤 매핑도 채택하지 않는다. 후보는 근거 위치와 함께 제안되고, 출처가 결정하지 못하는 점은 UNKNOWN으로 남긴다. 초록만 읽은 출처는 관계 방향이나 매핑을 확정하는 데 쓰지 않았다. Smith 2004 CellML의 76개 변수와 32개 방정식 사전, 거절된 연결 사례(R1–R13), 미해결 충돌(C1–C11)이 여기 정리되어 있다.

해부학 노드 사양 v2는 31개 노드 목록이다: 27개는 Uberon 기본 식별자, 혈관 내강 4개는 FMA 기본 식별자이고 모든 노드에 다른 쪽 식별자를 교차참조로 기록한다. 노드 클래스는 modelled / lumped part / catalogue / reference이다. 카탈로그 노드(예: 상·하대정맥, 관상정맥동, 소형 밸브 3종)는 식별자만 있고 Smith 그래프에서의 주장은 없다. 문서는 이 식별자 규칙이 SPARC, SCKAN, HRA 관행에 기반하며 COMBINE 문서가 Uberon을 공식 권고한 것은 아님을 명시한다.

3.4 그래프 뷰어의 세 가지 보기

보기무엇을 보여주는가무엇이 아닌가
원본 주장 (source claims)실선 화살표: 원본 sourceTemplate → targetTemplate 주장과 원본 predicate.원본 ACCEPT/REVIEW는 대상 매핑 승인이 아니다.
모델 참조 (model references)점선: 모델 역할, 포트 참조, 의존성(의존성은 on → dependent).해부학 관계나 수치 연결로 해석하지 않는다. role_in_smith는 참조 모델 역할이며 M1 고유 기능의 증거가 아니다.
카탈로그 (catalogue)31개 항목을 node_class별로 묶은 목록. 구조 간선 없음.전체 Uberon/FMA나 OWL 추론 결과가 아니다.

레이아웃은 화면 정렬용 계층 배치일 뿐 새로운 관계나 순서를 뜻하지 않는다. 간선 레이블은 predicate IRI의 마지막 부분을 그대로 쓰며(예: BFO_0000050), 프로젝트 문서가 RO_0002572를 해석 없이 IRI로 유지하므로 사람이 읽는 이름을 덧붙이지 않았다. 이 뷰어는 3D 형상, 시뮬레이션, 추론 검증을 제공하지 않는다.

3.5 서로 독립인 상태 축

sidecar 문서와 뷰어는 아래 축들을 합치지 않고 따로 보존한다. 한 축의 값이 다른 축의 값을 함의하지 않는다.

축기록된 상태의미
원본 주장 결정 (source)ACCEPT / REVIEW이번 실행의 gate_report.json에서 주장 12건 중 11건 ACCEPT, 1건 REVIEW. 12건 모두 NOT_INDEPENDENTLY_EXPERT_REVIEWED. ACCEPT는 설명용 맥락만 뒷받침한다.
대상 crosswalkPROPOSED제안 상태이며 승인이 아니다.
외부 수치 사용 권한NONE수치 연결 권한 없음.
G3 (외부 수치 binding)CLOSEDrequest_numeric_binding은 ACCEPT 또는 승인 주장이 있어도 항상 PermissionError를 던진다.
C5 part_of 어댑터deferred (USER_DECISION_RUNTIME_DEFERRED, applied false)사용자 결정은 기록되었으나 런타임 적용은 보류. 원본 located_in, M1 blood_contained_in과 서로 구분되어 남는다.
기계적 bearer미선택 (unselected)LV/LA 벽 대 심근 후보 중 선택되지 않음.
승모판 경계·고리mitral_orifice_boundary_equivalence=REVIEW, mitral_annulus_complete_fibrous_ring_interpretation=REVISE, 경계 정의 DRAFT_MODEL_CONVENTIONREVIEW, REVISE, DRAFT는 가려지지 않고 유지되며 소유자 검토나 수치 허가를 뜻하지 않는다.
기준 스냅샷 / 상속된 M1 검토UNREVIEWEDM1 batch-TDD 이력은 미해결이며 sidecar가 이를 승인하지 않는다.

sidecar의 G1(고정된 표현과 정확한 모델 계약 검사)은 PASS, G2(합성 실행)는 executed가 true일 때만 PASS로 보고된다(이번 실행은 true / PASS). 이 게이트들은 설명용 메타데이터 계약과 수치 불변성에 대한 것이며 의미 승인이 아니다. “법칙/버전 계약 선언은 수치 무결성 증명이 아니다”라고 뷰어 문서가 명시한다.

관련 원문: ontology · evidence_review · anatomy_nodes_v2 · applied_la_mitral_lv · decisions

4. 검증 방법

4.1 시험의 종류

4.2 보존·주기성 감사

총 부피 보존은 점검 항목이며 재정규화나 clipping으로 통과시키지 않는다. research_report(저장소에 커밋된 이전 결과 기준)는 세 정식 실행에서 총 부피 드리프트 최대 3.18323e-11 mL(런타임 게이트 1e-6 mL), 마지막/직전 박동 여섯 부피 파형 최대 차이 2.29051e-05 mL(정식 게이트 0.1 mL)를 기록했다. 이 사이트의 Phase 1 데모(demos/phase1/summary.json)는 baseline / reduced_contractility / partial_contractility_restoration 순으로 volume_drift_ml 1.0913936421275139e-11 / 1.000444171950221e-11 / 4.3655745685100555e-11 mL, final_beat_max_volume_difference_ml 3.880984422721667e-11 / 1.48929757415317e-11 / 2.9103830456733704e-11 mL를 기록했다. 두 값 집합은 서로 다른 실행의 산출물이다. 이 게이트는 소프트웨어 이정표 기준이며 전향적 프로토콜의 “연속 세 박동 1e-4 mL” 기준이 아니다. 독립 검토에서 tight baseline은 마지막 세 박동 잔차가 2.33e-4, 7.37e-5, 2.29e-5 mL로 1e-4 mL 기준을 통과하지 못했고, 더 정밀한 설정(rtol 1e-11, atol 1e-12, T/400)에서는 두 시나리오 모두 통과했다. 문서는 이를 한계로 기록하며 기준을 완화하지 않았다.

또한 기록된 한계: 기본 설정 대 tight 설정의 전체 궤적 최대 부피 차이 0.3153 mL(체동맥 구획, t=28.856 s)는 기계 정밀도 일치로 서술해서는 안 된다. 같은 해를 400 대 1600 샘플/박동으로 재표본하면 전방 SV가 약 0.057–0.059% 달라진다. 전체 실행의 solver 고유 적응형 노드에서 수행한 사다리꼴 적분의 국소 균형 잔차는 가장 정밀한 설정에서도 약 6.76 mL(baseline), 4.47 mL(reduced)로, 상태 부피의 거의 정확한 전역 보존과 공존한다. 이 때문에 강한 누적 유량 주장은 보류된다.

4.3 재현성

4.4 CI 행렬

워크플로 “Synthetic research checks”는 pull request, main 브랜치 push, 수동 실행에서 돌며 ubuntu-24.04 러너에서 Python 3.12.3과 3.12 두 버전의 행렬(fail-fast 꺼짐, 제한시간 25분)을 실행한다. 환경 변수는 MPLBACKEND=Agg, PYTHONHASHSEED=0, 단일 스레드 BLAS/OpenMP, 그리고 API 키는 빈 문자열로, AWS EC2 메타데이터 접근은 비활성화로 설정한다. 단계: 잠금 의존성과 깨끗한 wheel 설치 → python -I -m pytest → scripts/verify_reproducibility.py → scripts/verify_independent.py → 증거를 7일 보관 비공개 artifact로 업로드. 로컬에서는 macOS ARM64의 Python 3.11.15로 실행했다고 README가 기록한다.

4.5 독립 검증

독립 검토자는 구현의 도함수·지표 루틴을 유일한 기준으로 쓰지 않고 별도 오라클(명시적 부호 있는 incidence 행렬, 대체 활성화식 sin(pi*phase/systolic_fraction)**2, 80개 시드 무작위 상태)을 구성했다. 독립 시험은 12 passed, 최종 설치 wheel의 전체 시험은 64 passed, 5 RDFLib 경고(RDFLib 내부 deprecation)로 기록되었다. 서로 다른 스냅샷의 숫자이며 일치하지 않는 것이 아니다. 독립 검토 이후 소유자는 두 개의 빈 메타데이터 오류(참조/해부학 식별자 누락 쌍이 수락됨)를 실패하는 회귀 시험으로 재현한 뒤 수정했다. 원래 검토 스냅샷은 보존되고 재실행 증거는 별도로 쓰였다. 방정식이 바뀌어도 메타데이터가 같으면 수락되는 점, 자유 텍스트 출처 맥락은 검사하지 않는 점은 남아 있다.

전체 전향적 프로토콜은 완료되지 않았다(인간 사용성 연구, 사건 해상도 밸브 타이밍, 자동 주기성 종료, 다중 수준 수축력 스윕, 플랫폼 간 재현성, 환자/기준 데이터 검증 등).

4.6 Smith 2004 / OpenCOR 참조 재현 작업 (기록된 그대로, report-only)

Smith 2004의 정식(canonical) CellML을 OpenCOR v0.8.3에서 실행한 참조 작업이 별도로 기록되어 있다. 이는 프로젝트의 시뮬레이션 엔진이 기준 궤적을 재현했다는 뜻이 아니다(엔진은 기준 궤적을 재현하지 않았다고 기록됨).

4.7 “통과”가 의미하는 것과 의미하지 않는 것

의미하는 것: 시험한 조건에서 구현 결과가 선언된 방정식과 독립 오라클 및 해당 소프트웨어 허용 기준에 부합한다는 점, 총 부피가 보존된다는 점, 선언된 소프트웨어 허용 기준을 만족했다는 점, 같은 환경에서 재실행하면 같은 결과가 나온다는 점.

의미하지 않는 것: 생물학적 타당성, 정상 범위, 진단 정확도, 환자별 예측, 임상 적합성, 게시된 기준 모델의 재현. 프로젝트 문서는 “Passing these checks is not biological validation”이라고 명시한다. 오류 주입 벤치마크는 일부러 거짓 수락 1건을 남긴다(올바른 것처럼 보이는 LV 메타데이터가 붙은 실제 RV 압력, 의도한 LV 압력 대비 최대 오차 129.793 mmHg). 메타데이터 검증은 수치 출처 검증이 아니다. 벤치마크는 hand-assigned 정답을 쓰는 12개 fixture의 합성 실험이며 사용자 연구가 아니다.

조건올바른 수락올바른 거절안전하지 않은 수락잘못된 거절
manual3090
units_only3360
semantic3810

관련 원문: verification_protocol · independent_verification · research_report · decisions · orchestration_state · evidence_review

5. AI 보조 개발과 검토 절차

이 프로젝트의 작업은 AI 코딩 에이전트를 사용해 진행되며, 아래는 docs/orchestration_state.md, docs/decisions.md, 그리고 그래프 뷰어 README가 기록한 범위만 옮긴 것이다. 같은 문서의 용어로 상태 어휘는 엄격하다: PROPOSED < IMPLEMENTED < TESTED < SCIENTIFICALLY VALIDATED. 이 프로젝트에서 외부 생리 데이터에 대해 과학적으로 검증된 것은 없다.

다중 모델 라우팅 정책

작업은 위험도와 복잡도에 따라 Claude 또는 Codex 모델 계층(tier)으로 배정된다. 기록된 유효 계층:

계층ClaudeCodex
LIGHTclaude-haiku-5-5gpt-5.6-terra
STANDARDclaude-sonnet-5-5gpt-5.6-sol (사용할 수 없는 gpt-6.1-sol의 대체)
DEEPclaude-opus-5-5gpt-6-astra

일부 Codex 모델 ID는 이 계정에서 model_not_found로 거절되었고, 하나는 HTTP 429로 미확인 상태이다. 이런 이유로 모델은 항상 명시적으로 지정한다고 기록되어 있다.

구현과 검토의 분리

관련 원문: orchestration_state · decisions · independent_verification

6. 결정과 미결 사항

기록된 소유자(사용자) 결정 요약

아직 열려 있는 것

관련 원문: decisions · orchestration_state · evidence_review · applied_la_mitral_lv

7. 한계

관련 원문: research_report · physiology · ontology · independent_verification · applied_la_mitral_lv

8. 출처와 저작자 표시

Smith et al. (2004) 및 CellML 모델

Smith BW, Chase JG, Nokes RI, Shaw GM, Wake G. Minimal haemodynamic system model including ventricular interaction and valve dynamics. Medical Engineering & Physics 26 (2004), 131–139, PMID 15036180.

Physiome Model Repository(PMR)는 공개 접근 가능한 저장소 내용 전체가 CC BY 3.0 Unported로 라이선스된다고 밝힌다. 재배포에는 CellML 저자(Geoffrey Nunns, Auckland Bioengineering Institute), 원 논문(PMID 15036180), 출처 URL과 다운로드 시각, PMR 인용(Lloyd et al., Bioinformatics 2008;24(18):2122–2123)을 표기해야 한다고 docs/physiology.md가 기록한다. 이 라이선스는 CellML 인코딩에 적용되며 저널 논문의 본문이나 그림에는 적용되지 않는다. 이는 기술적 실사이며 법률 자문이 아니다. 이 프로젝트의 수치 엔진에는 CellML이나 그 코드가 통합되지 않았고, 구조 방정식 설계에 참고했다.

온톨로지와 어휘

문헌 (문서에 인용된 범위)

이 페이지는 위 서지 정보를 문서에서 복사한 것이며, 문서에 적히지 않은 저자·연도·DOI는 추가하지 않았다. 프로젝트가 인용한 논문·사양 전체 목록과 DOI·PMID 링크는 참고 문헌 페이지에 있다.

사용한 오픈소스 소프트웨어 (GitHub 링크)

버전은 프로젝트 잠금 파일(requirements.lock, docs/evidence_review/shacl/requirements-shacl.txt)과 실행 기록에 적힌 값이다. 라이선스는 2026-11-02 GitHub API의 저장소 라이선스 필드로 확인했고, GitHub가 판정하지 못한 NumPy·Matplotlib·Pint는 설치된 패키지 메타데이터의 값을 적었다. 각 프로젝트의 저작권은 해당 저작자에게 있다.

프로젝트버전라이선스이 프로젝트에서의 쓰임
계산·검증에 실제로 실행한 소프트웨어
OpenCOR0.8.3GPL-3.0Smith 2004 정식 CellML 참조 실행(A/B/C, RK4). 수치 엔진에 코드를 넣지 않은 별도 도구로만 실행. GitHub 저장소는 현재 보관(archived) 상태.
pySHACL0.26.0Apache-2.0SHACL 의미 검증(run_shacl.py)
RDFLib7.6.0BSD-3-ClauseRDF/TriG 내보내기, SHACL 그래프 처리
SciPy1.17.1BSD-3-ClauseODE 적분(solve_ivp, DOP853)
NumPy2.4.6BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0 (패키지 메타데이터)배열 연산
Matplotlib3.11.2Matplotlib License (PSF 기반, 패키지 메타데이터)데모 그림 생성
Pint0.25.3BSD (패키지 메타데이터)단위 변환·차원 검사
pytest9.2.0MIT테스트 실행
GitHub에서 가져와 참조한 사양·데이터
SemGen (SemBioProcess)OPB v1.07 OWLREADME: 비상업 목적(연구·개인·교육)에 한해 재배포·사용 허용, 전체 고지 포함 조건저장소에 번들된 OPB v1.07을 물리적 속성 IRI의 출처로 참조. SemGen 소프트웨어를 실행한 기록은 문서에 없음.
COMBINE specificationsOMEX metadata v1.0, v1.2저장소에 라이선스 명시 없음SHACL shape와 압력 기준 결정의 근거 사양으로 인용
검토만 하고 포함하지 않은 프로젝트
CardioLab (cardiac-simulator)커밋 b3f4374MIT (해부학 자료는 CC BY 4.0)구조와 검증 아이디어를 검토했으며, 엔진을 실행하거나 코드를 가져오지 않음(ecosystem).
개발·문서·배포 도구
Hermes Agentv0.22.5MITAI 작업 조율: 모델 라우팅, 통합, 검증 재실행, 이 사이트 빌드
Codex CLI0.166.0 (이전 작업은 0.153.4)Apache-2.0구현·교차 검토 작업자 실행
Python-Markdown3.7BSD-3-Clause저장소 문서를 HTML로 렌더링
Wrangler (cloudflare/workers-sdk)4.156.1Apache-2.0Cloudflare Pages 배포
KaTeX0.19.1MIT방법론 페이지의 수식 조판. CDN 없이 사이트 안(/assets/katex/, LICENSE 포함)에 직접 넣어 사용

함께 쓴 Claude Code(Anthropic)는 오픈소스가 아니므로 위 목록에 넣지 않았다. 그래프 뷰어는 외부 라이브러리 없이 작성했다. 사이트 메뉴(왼쪽 위)도 외부 라이브러리 없이 작성했다.

관련 원문: physiology · ontology · evidence_review · anatomy_nodes_v2 · verification_protocol · applied_la_mitral_lv

9. 재현 정보

소스 커밋: e3d560ed2bad14958b6ff35dff135782468441ca (약식 e3d560e, 브랜치 codex/ontology-graph-view). 이 커밋은 PR #5의 코드(680bd29)와 그래프 뷰어를 포함한다. 그래프 뷰어 README는 프로젝트 원본 리비전을 680bd29650d97957256dd05fd3281ee8403f6aed로 기록한다. 데모 출력은 이 커밋에서 2026-11-02에 생성되었다.

데모 생성 명령

데모명령
Phase 1python -m physiosim --config experiments/phase1.json --output <출력 디렉터리>
four-chamber M1python scripts/run_four_chamber_m1.py --output <출력 디렉터리>
applied LA–mitral–LVpython scripts/run_applied_la_mitral_lv.py --output <출력 디렉터리>
그래프 뷰어tools/ontology_graph_view/build_graph.py (README 예: python build_graph.py --input-dir inputs --output-dir site, 표준 라이브러리만 필요)

출처 해시

생성된 모든 파일의 해시를 담은 /provenance.json을 통합 담당이 작성해 이 사이트에 게시한다. Phase 1과 M1의 manifest.json에는 설정·소스 해시와 출력 체크섬이, applied의 run_receipt.json에는 배열·manifest 해시와 출력 체크섬이 들어 있다(각 영수증은 자기 자신의 체크섬을 제외한다). 해시는 무결성과 출처를 나타낼 뿐 과학적 타당성이나 수치 사용 허가를 의미하지 않는다.

관련 원문: physiology · physiology_four_chamber_m1 · applied_la_mitral_lv · research_report