관찰
scripts/load-protocols.js:201-202
isProtocol: protocolNodeSet.has(pluginDir),
isUtility: !protocolNodeSet.has(pluginDir),
protocolNodeSet(:146)은 CANONICAL_PROTOCOL_SET(:41-45)에서 만들어지고, 그 집합은 CANONICAL_PRECEDENCE(:30-34)의 소문자화 + anamnesis + katalepsis다. 즉 프로토콜 여부는 하드코딩 배열의 원소인지로만 결정되고, 유틸리티는 그 여집합으로 정의된다. 제3의 상태가 없다.
귀결
새 프로토콜 디렉터리를 추가하고 CANONICAL_PRECEDENCE에 등록하지 않으면 isUtility: true가 된다. isProtocol 필터를 통과해야 하는 검사(:218, :223 경유)들이 그 디렉터리를 말없이 건너뛴다. 실패가 아니라 무증상 면제라서 검사 결과는 초록으로 남는다.
docs/co-change.md의 "New protocol added" 행이 CANONICAL_PRECEDENCE 갱신을 요구하지만, 그 표는 강제 채널이 없는 손유지 문서다 (#764).
미해결 — 수정 기준
구조적 판별식으로 대체하려 했으나 후보 하나가 실패했다. MORPHISM 블록 보유 여부는 판별식이 되지 못한다: 모든 핵심 프로토콜이 보유하지만 유틸리티 중 misuse, probe, realign, steer도 보유한다.
후보 방향:
- 3상태화 —
protocol / utility / 미분류로 넓히고 미분류를 명시 실패로 올린다. 판별식을 찾지 않아도 침묵만은 없앤다.
- 등록 누락 전용 검사 — 플러그인 디렉터리 집합과
CANONICAL_PROTOCOL_SET의 차집합이 알려진 유틸리티 목록과 일치하는지 검사한다. 유틸리티 목록도 손유지가 되므로 문제를 한 칸 옮기는 것에 가깝다.
- 구조적 판별식 재설계 — 프로토콜만 가지는 형식 블록 조합을 찾는다. 위 실패는 단일 블록으로는 안 된다는 것만 보여줬을 뿐, 조합 판별식은 아직 시도되지 않았다.
1번이 가장 싸고, 판별식 문제를 열어둔 채로도 침묵을 없앤다.
관찰
scripts/load-protocols.js:201-202protocolNodeSet(:146)은CANONICAL_PROTOCOL_SET(:41-45)에서 만들어지고, 그 집합은CANONICAL_PRECEDENCE(:30-34)의 소문자화 +anamnesis+katalepsis다. 즉 프로토콜 여부는 하드코딩 배열의 원소인지로만 결정되고, 유틸리티는 그 여집합으로 정의된다. 제3의 상태가 없다.귀결
새 프로토콜 디렉터리를 추가하고
CANONICAL_PRECEDENCE에 등록하지 않으면isUtility: true가 된다.isProtocol필터를 통과해야 하는 검사(:218,:223경유)들이 그 디렉터리를 말없이 건너뛴다. 실패가 아니라 무증상 면제라서 검사 결과는 초록으로 남는다.docs/co-change.md의 "New protocol added" 행이CANONICAL_PRECEDENCE갱신을 요구하지만, 그 표는 강제 채널이 없는 손유지 문서다 (#764).미해결 — 수정 기준
구조적 판별식으로 대체하려 했으나 후보 하나가 실패했다. MORPHISM 블록 보유 여부는 판별식이 되지 못한다: 모든 핵심 프로토콜이 보유하지만 유틸리티 중
misuse,probe,realign,steer도 보유한다.후보 방향:
protocol/utility/미분류로 넓히고 미분류를 명시 실패로 올린다. 판별식을 찾지 않아도 침묵만은 없앤다.CANONICAL_PROTOCOL_SET의 차집합이 알려진 유틸리티 목록과 일치하는지 검사한다. 유틸리티 목록도 손유지가 되므로 문제를 한 칸 옮기는 것에 가깝다.1번이 가장 싸고, 판별식 문제를 열어둔 채로도 침묵을 없앤다.