- Dispatch/init.luau: InitDispatch(module) 팩토리(§6) — 인스턴스별 레지스트리 +chains(Relate), getHandler(순수 스캔)/process(하강 diff (A)/(B), 점유 마커, SetStrong 선행, retractor 생략 즉시 error)/3-인자 retractFrom(꼬리 역순, 구멍 error level 1)/addHandler(등록 시 정렬, 동률 경고는 module.debug)/ listHandlers(순수 조회)/drive((b) 본체 루프만 — ⓪⓪' 단위 2, (a)(c) M8). 매치 실패는 typeof+브랜드(is* 프로브)+provider 안내, 지연 생성 - spec.dispatch.luau(12절: (A)/(B)·깊은 체인 힌트·같은 핸들러 두 슬롯·조건부 재위임·다른 키 위임·동률·격리) / spec.drive.luau(F-4-1 언어 동작 실측) — 전부 PASS, luau-analyze·selene 클린 - H-212(①): base 의사코드 error 셋이 error 계약(영어+level, 08-25) 이전 표기 — dispatch-core-plan.md와 코드 같은 커밋 정정 - H-213(①): HANDLER_PRIORITY_* 리터럴 값은 문서 미정 — 1000/0/-1000/-1000000 - H-214(②): listHandlers·동률 경고가 원하는 핸들러 "이름"이 계약 3종에 없음 — round12 §4 문항 등재, 코드는 TODO(H-214) 마커 1곳 - 스파이크 01 폐기(직전 커밋에서 done/ 이동): spec.drive가 같은 질문을 상시 회귀로 대체(§6 승인) — STATUS.md·ROADMAP 재검증 대기 절 [x] - ROADMAP M3 체크박스: 단위 1 몫 여섯 [x](drive 범위 절단 주석 포함) Co-authored-by: qwreey <me@qwreey.moe> Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
7 KiB
M3 구현 12라운드 — 발견 원문 + 배치 문항지
이 파일이 무엇인가: [2026-08-31 신설] M3 자율 구현 구간 (
m3-implementation-round12-brief.md가 규약, 같은 날 §0·§6 확정)에서 나온 발견 전부. 실제 코드를 옮기고 돌리다 나온 것이다. 번호는H-212부터 (11라운드가H-211까지 썼다).갈래 표기(규약 §2): ① 자율로 고침(같은 커밋에서
base/+코드) / ② §4 표에 쌓아 배치 회신 대기 / ③ 즉시 중단·보고. M2 하자는 규약 §0 Q3 (a) — 경미하면 여기 ①, 설계 결정 규모면 그때m2-implementation-round13을 새로 연다.상태의 소스는 이 파일 자신 — 요약 표의 상태 열이 최신.
요약 표
| 번호 | 갈래 | 단위 | 심각도 | 한 줄 | 상태 |
|---|---|---|---|---|---|
H-212 |
① | 1 | 🟢 | dispatch-core-plan.md "Dispatch 체인" 의사코드의 error 세 자리가 한국어·level 없음 — 그 절(2026-08-13)보다 늦게 확정된 architecture.md error 계약(영어, level 이분, 2026-08-25)이 미반영 |
✅ 반영(dispatch-core-plan.md 의사코드 영어+level, H-212 문단) |
H-213 |
① | 1 | 🟢 | HANDLER_PRIORITY_* 상수의 실제 숫자값을 어느 문서도 안 정했다 — 문서가 정한 건 이름·순서(HIGH > NORMAL > LOW > FALLBACK)·열린 공간(± 오프셋)뿐 |
✅ 구현이 채움: 1000 / 0 / -1000 / -1000000 (밴드 간 ± 오프셋 여유, Dispatch/init.luau 주석) |
H-214 |
② | 1 | 🟡 | listHandlers가 "이름/priority를 반환"이고 동률 경고·quad-debug 체인 덤프도 핸들러 이름을 원하는데, Handler 계약(3종)엔 name 필드가 없다 — 새 필드라 자율 반영 불가 |
⏳ §4 대기 — 코드는 핸들러 객체 배열 반환 + TODO(H-214) 마커 |
H-212 — base 의사코드 error가 error 계약 이전 표기로 남아 있었다 (①)
process의 retractor 생략 error 두 자리와 retractFrom의 배열 구멍 error가
한국어 메시지에 level 인자 없음 — base/architecture.md의 "error 계약 —
level 이분과 메시지 언어" 절("base/의 예시 메시지도 영어로 쓴다")이 그
의사코드보다 늦게 확정되며 반영이 안 된 자리다. 문서가 이미 답(영어 + level
이분)을 갖고 있어 ①: retractor 생략은 핸들러(제공자) 계약 위반이라 호출부를
가리키는 2, 배열 구멍은 내부 부기 파손이라 그 자리를 가리키는 1.
base/와 코드를 같은 커밋에서 맞췄다.
H-213 — 우선순위 밴드 상수의 리터럴 값 (①)
"우선순위 동률/매치 실패 처리" 절은 상수 이름 넷과 순서, "열린 숫자 공간
위의 편의 상수"(HANDLER_PRIORITY_HIGH + 1식 미세 조정)만 정하고 값은 안
정했다. 구현 선택: HIGH = 1000 / NORMAL = 0 / LOW = -1000 /
FALLBACK = -1000000. 근거 — 밴드 사이 간격이 커서 ± 오프셋이 이웃 밴드를
침범하기 어렵고, FALLBACK + 1(base Fallback을 가로채는 관례 자리)이 LOW
보다 한참 아래에 남는다. 계약 의미(순서·밴드)는 값과 무관해 사용자 결정
대상이 아니라고 판단 — 다른 값을 원하면 §4 회신에 얹으면 된다.
H-214 — listHandlers/동률 경고가 원하는 핸들러 "이름"이 계약에 없다 (②)
dispatch-core-plan.md "우선순위 동률/매치 실패 처리" 절: "Dispatch.listHandlers()는
현재 등록된 전체 핸들러(이름/priority)를 반환". research/debug-tooling-plan.md
쪽 서술(체인 슬롯을 "이름으로 바로 덤프")도 같은 걸 전제한다. 그런데 핸들러
계약은 isHandlable/priority/process 3종으로 못 박혀 있고(같은 문서
"핸들러 계약" 절: "다음 3개를 제공하는"), name을 붙이는 건 새 필드라
규약 §2의 ② 갈래다. 기각 이력 grep: Handler에 이름 필드를 검토·기각한 기록
없음(등록 엔티티 이름 논의(TagFallbackHandler 등)는 변수명 이야기지
계약 필드가 아님). 임시 구현: 등록된 핸들러 객체 배열(우선순위순 사본)을
그대로 반환 — 정의된 정보(priority, 함수들)는 다 담기고 새 개념이 없다.
동률 경고 print는 priority 값만 찍는다. 코드 마커 TODO(H-214) 1곳
(Dispatch/init.luau의 listHandlers).
§4 배치 문항지 (사용자가 읽을 유일한 자리)
| 번호 | 무엇 | 선택지 | 권고 | 권고 근거 |
|---|---|---|---|---|
H-214 |
listHandlers·동률 경고·(나중의) quad-debug 덤프가 쓸 핸들러 이름 — Handler 계약(3종)엔 name이 없다 |
(a) 계약에 선택 필드 name: string? 추가 — 있으면 경고·덤프·listHandlers가 쓰고 없으면 priority만 / (b) 이름 없이 감 — listHandlers는 핸들러 객체 배열만 반환(지금 임시 구현), "이름/priority" 서술을 문서에서 걷어냄 / (c) 다른 방식(별도 등록 인자 addHandler(h, name) 등) |
(a) | 문서 두 곳(dispatch-core-plan.md "우선순위 동률/매치 실패 처리", research/debug-tooling-plan.md)이 이미 "이름"을 전제하고, 선택 필드면 기존 3종 계약을 안 깬다. (c)는 이름이 핸들러 자신이 아니라 레지스트리에 살게 돼 체인 슬롯 덤프(슬롯엔 handler 객체만 저장)가 역조회를 또 요구함 |
§5 이상 없음 확인 (탐사자·구현이 확인만 하고 문제 없었던 자리)
- [2026-08-31, 단위 1 구현] "Dispatch 체인" 절 의사코드를 한 줄씩 옮기며
대조 — (A)/(B) 분기, (A)의 소비 직후
NOOP교체, (B)의 점유 마커 선행,chains:SetStrong이h.process앞, retractor 생략 즉시 error 양쪽,retractFrom꼬리 역순·항상 소비·구멍 error,H-103주석(pcall 안 감쌈) 전부 그대로 — 전사 차이는H-212(error 표기)뿐.spec.dispatch.luau1~12가 각 계약을 실측(같은 핸들러 두 슬롯 =State<State<T>>유사 구조, 깊은 체인 (A) 연쇄에서 각 레벨이 자기 힌트를 받는 것 포함). - [2026-08-31]
F-4-1의 언어 동작(일반화for가 배열 파트 전체를 해시보다 먼저, 배열 안은 index 순서) —spec.drive.luau1번이 실측 통과. 스파이크01재작성은 이 spec이 상시 회귀로 대체(§6 계획,STATUS.md에 기록). - [2026-08-31] 매치 실패 메시지의 "브랜드 출력"은 기각된 Brand 역조회
(
archive/brand-shared-registry-reversed.md)를 재도입하지 않고 모듈 공개 술어(is*) 프로브로 구현 — 실패 경로에서만 돌고(지연 생성 규칙), 새 표면 없음. - [2026-08-31]
H-165(quad-types에export type추가 시 pesde shim 재생성 필요)를 예고대로 밟았고pesde install재실행으로 해소 —Handler/Dispatch가 shim에 올라옴. 새 발견 아님(문서 그대로).
§6 남은 의심 (발견은 아니지만 다음 라운드가 파볼 자리)
(아직 없음)