저장 탱크에 대한 지식은 스키마 공유가 드문 여러 분야에 분산되어 있습니다. 기계 엔지니어는 쉘 계산을 담당하고, 토목 엔지니어는 기초를 담당하며, 부식 전문가들은 코팅 이력을 담당하고, 운영자들은 충진 리듬을 담당하며, 검사관들은 증거를 담당합니다. 산업 도메인을 위한 콘텐츠 형성 페르소나인 GenAnywhere는 각 탱크를 명시적인 불변성(invariants)을 가진 유형화된 엔티티들의 작은 시스템으로 모델링하여 이 모든 것을 통합하고, 그 결과로 나온 모든 아티팩트 — 검사 인덱스, 교체 패킷, 규제 요약 등 — 를 단일 모델로부터 렌더링합니다. 이 아키텍처는 순전히 산문(prose)으로 기술될 수 있습니다.
여섯 가지 핵심 엔티티
중심에는 Vessel이 자리 잡고 있으며, 이는 태그, 서비스, 제품 이력 및 보호 대상 문장이라는 연속적인 정체성을 가진 탱크입니다. Vessel에 다섯 개의 패밀리(family)가 연결되어 있습니다. Shell family는 코스, 심(seams), 코팅 및 내부 구조물을 포함하며, 각 코스는 재질, 두께 이력 및 상태로 유형화됩니다. Nozzle family는 배관 목적지 및 퇴역 이력이 있는 모든 관통부를 담고 있는데, 이는 노즐이 자신이 봉사했던 장치보다 수명이 길기 때문입니다. Foundation family는 지오메트리, 측량 시기(survey epochs) 및 이동 중, 정지 또는 가속으로 유형화된 침하 추세를 포함합니다. Containment family는 둑(dikes), 이중 벽, 패드, 배수 경로 및 화재 방호 시설을 담고 있으며, 각 항목은 고장 경로 행동(failure-path behavior)으로 유형화됩니다. Evidence family는 검사 보고서, 사진, 두께 측정값 및 수리 기록을 포함하며, 각각 자신이 설명하는 정확한 쉘 코스, 노즐 또는 기초 요소에 연결됩니다. 여섯 개의 패밀리, 하나의 Vessel, 그리고 현장에서 생성되는 모든 문서는 이들의 투영(projection)입니다.
초기 모순을 드러내는 불변성
모델은 불변성(invariants)을 통해 가치를 발휘합니다. 모든 Evidence 항목은 유형화된 위치(typed location)—쉘 코스, 노즐, 기초 지점—로 해결되어야 합니다. 따라서 고아가 된 사진이나 위치를 알 수 없는 두께 측정값도 숨겨진 파일이 아니라 눈에 보이는 결함으로 나타납니다. 코팅 캠페인 날짜는 동일한 코스에서 중복될 수 없도록 하여 이중 예약된 유지보수를 포착합니다. 침하 추세 유형은 지난 세 번의 측량 시기(survey epochs) 방향과 일치해야 하므로, 안정성을 주장하는 서술이 가속화되는 데이터와 공존할 수 없습니다. 서비스되던 장치가 폐지된 모든 노즐에는 블랭킹(blanking) 또는 제거 항목을 포함해야 하며, 이는 사장 파이프라인에 남아있는 활성 관통부를 드러냅니다. 그리고 모든 Containment 요소는 배수 결정(drainage decision)을 참조해야 하므로, 액체가 어디로 가는지에 대한 명시적인 답변 없이 제방은 존재할 수 없습니다. 각 불변성 실패는 엔티티와 규칙의 이름을 밝히며, 검토 과정을 발굴 작업에서 분류 작업으로 바꿉니다.
렌더러(Renderers): 하나의 모델, 여러 청중
엔티티와 불변성이 갖춰지자 GenAnywhere는 동일한 출처로부터 청중별 아티팩트를 렌더링합니다. 검사관의 인덱스는 Evidence와 그 유형화된 위치만을 프로젝트하며, 코스별로 시간 순서대로 정렬됩니다. 운용자의 교체 패킷은 Vessel, Containment, 그리고 일반 언어 운영 계층을 프로젝트하며, 필러(filler)의 메모를 그대로 인용합니다. 규제 기관의 요약본은 Containment, Evidence 개수, 불변성 상태만을 프로젝트하고 상업적 세부 사항은 생략합니다. 경영진 검토는 추세 문장—침하 방향, 남은 코팅 수명, 검사 간격 준수 여부—을 같은 필드에서 가져와 프로젝트합니다. 모든 렌더러가 동일한 엔티티를 읽기 때문에, 새로운 두께 측정값이 인덱스, 패킷, 그리고 검토본에 한 번의 동작으로 전파됩니다. 문서 간의 편차는 구조적으로 불가능해집니다.
검사 증거를 위한 자산 파이프라인
탱크 프로그램은 수만 개의 증거 자산을 축적합니다. 내부 사진, 초음파 두께 그리드, 코팅 홀리데이 맵, 드론 외벽 조사 등이 여기에 해당합니다. GenAnywhere의 파이프라인은 각 자산을 그것이 묘사하는 엔티티와 위치, 그리고 속한 검사 시점(inspection epoch)에 등록하고, 다음 두 가지 규칙을 강제합니다. 첫째, 렌더링된 문서에서 인용되는 모든 자산은 반드시 등록된 증거 항목으로 연결되어야 하므로, 고아화된 그림(orphaned figure)이 재조직 과정을 거치면서 사라지는 일이 없습니다. 둘째, 외벽 코스(shell course)의 상태가 시점 간에 등급을 변경할 경우, 해당 코스에 등록된 모든 자산은 재검토 대상으로 플래그 지정되어 서술 내용과 사진 자료가 일치함을 보장합니다. 그 결과는 검사관이 떠난 지 오랜 시간이 지난 후에도 코스와 시점을 기준으로 쿼리 가능한 증거 아카이브입니다.
유형화된 엔티티가 작성자를 능가하는 이유
이 아키텍처에 대한 가장 깊은 주장은 조직적인 측면입니다. 탱크 현장에서는 검사관과 운영자가 교체되는 속도가 그들을 대체하는 속도보다 빠르며, 자유 형식 보고서는 그들의 판단을 외부로 유출시킵니다. 유형화된 엔티티와 불변성(invariants) 모델은 그러한 판단을 외재화합니다. 특정 코스에 바인딩된 검사관의 일반 언어 레이어는 그들의 전문 지식이 되며, 10년 후에도 여전히 쿼리할 수 있습니다. 신규 직원은 PDF 폴더가 아니라, 코스별로, 노즐별로, 시점별로 조사할 수 있는 용기(vessel)를 물려받습니다. 이것이 아카이브와 기관의 차이이며, GenAnywhere로 저장 탱크 콘텐츠를 구조화하는 전체 목적입니다. 즉, 탱크의 지능이 그것을 관리했던 사람들을 능가한다는 것입니다.