pqcaton · architecture
pqcota가 관측하고, pqcaton이 그 관측을 선언과 대조해 리뷰에 올리고 확정합니다.
두 리포는 계약(contracts/)으로만 이어집니다. 코드가 서로를 부르지 않습니다.
pqcota observes; pqcaton reconciles those observations against the declaration, puts them
in a review queue and finalizes them. The two repositories are joined only by contracts
(contracts/) — neither calls the other's code.
왼쪽이 기반(pqcota), 오른쪽이 이 리포(pqcaton)입니다. 가운데 띠가 둘 사이를 잇는 유일한 통로이고, 화살표는 그 띠를 두 번 건넙니다. 관측이 오른쪽으로 가고, 확정된 계획이 왼쪽으로 돌아갑니다. The base (pqcota) is on the left, this repository (pqcaton) on the right. The band in the middle is the only passage between them, and the arrows cross it twice: observations travel right, finalized plans come back left.
이 그림이 알려 주는 것 하나. pqcaton은 pqcota를 감싸지 않습니다. 나란히 서서 계약으로만 주고받습니다. 그래서 pqcota를 갈아 끼워도 이 리포가 깨지지 않고, 이 리포를 지워도 pqcota는 그 자체로 완결됩니다. One thing this diagram tells you. pqcaton does not wrap pqcota. They stand side by side and exchange only what the contracts define. Swap pqcota out and this repository does not break; delete this repository and pqcota is still complete on its own.
이 리포는 pqcota의 생성된 타입만 import합니다. 관측 로직도, 저장소 스키마도 재구현하지 않습니다. This repository imports only the generated types from pqcota. It reimplements neither the observation logic nor the storage schema.
| 이 리포가 쓰는 상류 Upstream this repository uses | 무엇을 위해 What for |
|---|---|
gen/…/common/v1 | Envelope·CryptoRuntime 등 공통 어휘
Shared vocabulary such as Envelope and CryptoRuntime |
gen/…/discovery/v1 | 관측 결과(CollectionResult)를 읽는다
Reads observation results (CollectionResult) |
gen/…/inventory/v1 | ReconState·Decision. 3-상태와 판정의 SSOT
ReconState and Decision — the SSOT for the three states and for judgments |
pkg/discovery/history | 관측 이력 저장소를 그대로 쓴다 Uses the observation history store as it is |
pkg/discovery/normalize | 정규화된 관측을 받는다 Takes normalized observations |
pkg/inventory/declaration | 선언(CMDB) 반입 Imports the declaration (CMDB) |
pkg/kernel/posture | 양자내성 등급. 우리가 다시 판단하지 않는다 Quantum-resistance grading — we do not judge it again |
pkg/kernel/registry | 결정론적 서명 매칭 데이터 Deterministic signature-matching data |
pkg/kernel/scope | 자산 스코프 규칙. 형식과 집행을 그대로 쓴다 Asset scope rules — both the format and the enforcement are used as they are |
discovery/collectors/openssl | 이 기계를 스캔하는 지름길이 부른다 Called by the shortcut that scans this machine |
gen/…/provisioning/v1 | 확정 계획(FinalizedPlan)의 형식
The shape of a finalized plan (FinalizedPlan) |
pkg/org | 조직 격리 축 The organization isolation axis |
internal/probe는 그 연결을 붙들어 두는 최소 코드입니다. 지워도 빌드는 되지만,
그러면 go.mod의 require가 아무 표시 없이 미사용이 됩니다.
internal/probe is the smallest amount of code that holds that link in place.
Delete it and the build still passes, but the require lines in go.mod quietly
go unused.
| 모듈 Module | 하는 일 What it does | 왜 상류가 안 만들었나 Why upstream did not build it |
|---|---|---|
pkg/inventory/reconcile |
3-상태 대조 · confidence 스코어링 · 리뷰 큐 · 거버넌스 토폴로지 Three-state reconciliation, confidence scoring, the review queue, the governance topology | 관측 도구가 “무엇이 위험한가”를 판정하기 시작하면 관측의 정직성이 무너집니다 Once an observation tool starts judging “what is risky”, the honesty of the observation is gone |
pkg/inventory/decision |
리뷰-확정 상태기계 · 판정 영속(append-only) · 확정 계획 The review-to-finalize state machine, append-only judgment persistence, the finalized plan | 판정은 조직의 책임이고 감사 대상입니다. 혼자 쓰면 필요 없습니다 A judgment is the organization's responsibility and subject to audit. Working alone, you do not need it |
inventory/cmd/* · pkg/inventory/ui |
대조 실행 · 리포트와 토폴로지 렌더 · 사람이 쓰는 화면(선언 · 암호 자산 스코프 · 대조 · 판정 · 인벤토리 조회) Runs the reconciliation, renders reports and the topology, and serves the screens people use — declaration, crypto asset scope, reconciliation, judgment, inventory lookup | 사람이 돌리고 사람이 채우는 자리 The place a person runs and a person fills in |
saas/runner |
호스팅으로 쓸 때만 필요한, 결과를 내보내는 자리 The place that sends results out, needed only when we host it | 고객 인프라 안에서만 돌 때는 필요 없습니다. 05 Not needed when everything runs inside the customer's infrastructure. 05 |
| 상태 State | 정의 Definition | 등급 Grade | 무엇을 뜻하나 What it means |
|---|---|---|---|
| CONFIRMED | 선언 ∩ 관측 declared ∩ observed | AUTO | 신뢰도 최상 The highest confidence |
| UNDECLARED | 관측만 observed only | AUTO | 조직이 모르는 통신입니다. 이 도구가 주는 첫 번째 쓸모입니다 Traffic the organization does not know about. This is the first thing the tool is good for |
| UNOBSERVED | 선언만 declared only | MANUAL | 실재하는데 못 본 것인지 이미 없어진 것인지는 사람만 압니다 Whether it exists and was missed or is already gone — only a person knows |
UNOBSERVED를 기계가 확정하지 않는 것이 설계의 축입니다. pqcota의 완전성 맵이 “원리상 관측 불가”와 “실제 없음”을 구분해 주고, 그 위에서 사람이 정합니다. The axis of the design is that no machine finalizes an UNOBSERVED item. pqcota's completeness map separates “cannot be observed in principle” from “really absent”, and a person decides on top of that.
직접 설치에서는 밖으로 나가는 것이 하나도 없습니다. 모든 단계가 고객 인프라 안에서 끝납니다. 호스팅으로 쓸 때 무엇이 달라지는지는 05절에 있습니다. In a self-hosted install nothing leaves the network. Every step finishes inside the customer's own infrastructure. What changes when we host it for you is in section 05.
위 그림에는 러너가 없습니다. 자기 서버에서 돌릴 때는 필요 없기 때문입니다.
pqcota-ingest가 결과를 바로 읽고, 대조와 판정이 같은 기계에서 끝납니다.
There is no runner in the diagram above, because on your own servers you
do not need one. pqcota-ingest reads the results directly, and
reconciliation and judgment finish on the same machine.
우리가 대신 돌려 주는 호스팅에서는 관측 결과가 고객망을 나와야 하고, 그것을 내보내는 자리가
saas/runner입니다. 그 코드만 이 리포에 있는 이유는 하나입니다.
고객 서버에서 고객 권한으로 도니 무엇을 밖으로 보내는지 읽어서 확인할 수 있어야 합니다.
컨트롤 플레인 쪽 코드와 설계는 이 리포에 없습니다.
When we run it for you, the observation results have to leave the customer network, and
saas/runner is the place that sends them out. Only that piece lives in this
repository, for one reason: it runs on the customer's servers with the customer's privileges, so
what it sends must be open to reading. The control-plane code and its design are not here.