Commit graph

442 commits

Author SHA1 Message Date
a6d0c7f9a7
feat: M3 단위 1 — 디스패치 코어(InitDispatch) + spec 둘, H-212~H-214
- 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
2026-08-31 15:13:28 +09:00
590b0fe6a1
feat: M3 단위 1 — Handler 계약 타입(quad-types 소유) + Quad.Dispatch 필드(H-25)
- quad-types: `Handler`(isHandlable/priority/process→retractor 3종) /
  `Dispatch`(getHandler/process/retractFrom/addHandler/listHandlers/drive +
  HANDLER_PRIORITY_* 밴드) export type 신설, `Quad`에 `Dispatch` 필드
  (H-25 — 닫힌 레코드라 없으면 quad.Dispatch 접근이 analyze 타입에러)
- quad-base/src/Dispatch/Handler.luau: 타입 전용 잎(§6 계획) — quad-types
  재export만, Dispatch 되참조 없음(단방향 의존)
- H-165 예고대로 pesde shim 재생성 필요했음 — `pesde install` 재실행으로 해소

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 15:13:08 +09:00
f14ba09cd6
docs: M3 자율 구현 규약 확정 — round12 §0 전량 (a)·§6 첫 단위 계획 승인
- §0 회신 기록: Q1(M2 골격 + Handler 체크리스트 게이트)/Q2(단위 넷)/
  Q3(M2 하자는 규모로 가름) 전부 권고 (a) 사용자 채택
- §6 신설·승인: Dispatch/Handler.luau(타입 전용 잎) + Dispatch/init.luau
  (InitDispatch(module), chains는 인스턴스별 Relate, HANDLER_PRIORITY_* 상수
  정의+재노출) + quad-types Dispatch 필드(H-25) / drive는 단위 1에서 (b) 본체
  루프만 — 배치 게이팅은 단위 2, pre-pass·postRefList는 M8 / 스파이크 01
  재작성은 spec.drive.luau 상시 회귀로 대체
- round12.md 스텁을 실 스켈레톤(요약 표/§4/§5/§6)으로 교체, H-212부터
- 인덱스 3층 갱신: README qa-request 행, CLAUDE.md·project-context 머리말,
  todos.md 00번 — "M3 진행 중"

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 14:59:23 +09:00
3e7dcfead2
docs: ROADMAP 재검증 대기 절 stale 정리 — 닫힌 셋 [x], 누락 셋 소급 등재
- 닫힘 표기: 05(spec.state/spec.effect 3번이 대체, 08-29 폐기) /
  15(H-176 ...any 확정, 08-28 폐기) / 중간 State GC(spec.state 11번 실측,
  08-28 — 항목 안의 question.md 승격 서술도 08-25 해소분이라 같이 정정)
- 소급 등재: 11/16/21(절 신설 08-22 이후 rewrite-required 합류인데 목록 누락 —
  11은 ROADMAP 전체 0건). 11은 M2 spec들이 검증 대상을 고정해 05/15와 같은
  폐기 근거 성립 — 판정은 다음 라운드로(결정 아님)
- STATUS.md 머리 "마지막 갱신" 배너를 본문 최신(08-29 이동들)에 맞춤
- 잔여 유효: 01 / 04(M3 착수 시) / 19(M10) / 22(M8) / 10(Studio)

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 14:47:42 +09:00
e4a3eda85d
docs: M3 자율 구현 규약 문항지 신설 — m3-implementation-round12-brief.md (§0 회신 대기)
- §0 문항 셋: Q1 M2 규약 재사용(+Handler 작성 체크리스트 필독 게이트 추가, 권고 a) /
  Q2 단위 넷 — 코어 → Length/Offset 부기 → None·Nil 핸들러 → Leaf·가드·종합(권고 a) /
  Q3 M3 중 M2 하자 혼입 규칙 — 경미는 M3 라운드 ①, 결정 규모면 m2-round13 신설(권고 a)
- §1~§5는 M2 규약 준용 + [M3 변경] 표시(이름 해석 module.xxx, H-186 UB 가드 금지,
  Slot 경계 주의), §6 첫 단위 계획은 회신 후 확정
- 발견 문서 스텁 m3-implementation-round12.md(H-212부터), README·todos 색인 갱신

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 14:43:40 +09:00
89e078b387
docs: round11 파일 개명 — m2-implementation-round11* + 명명 규약 확정, M2 종결
- pre-implementation-handtrace-round11(.md/-brief.md) → m2-implementation-round11*
  (사용자: 구현 중 문서라 pre-implementation이 안 맞음), 인용처 22곳 일괄 치환
- 명명 규약(사용자 확정, README qa-request/ 행): mN-implementation-roundNN —
  라운드 번호는 마일스톤을 가로질러 단순 증가("m3 진행 중 m2 하자로 돌아가는
  경우도 있을 것"), 마일스톤 접두가 소속을 담음. round1~10 옛 이름은 실제로
  구현 전 라운드라 유지
- CLAUDE.md/project-context.md 머리말: M0~M2 완료, 다음은 M3(디스패치 엔진);
  todos 00 종결 표기 — 다음 액션은 M3 착수 규약 문항(사용자와 정할 것)

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 13:40:27 +09:00
e0cb530b6b
feat: round11 §4 전량 종결(회신 3) — H-198 재시작 모델, H-186 UB, H-205 level 3, H-208/H-209/H-211
- H-198(사용자 안): 상류 스탬프(dep:_track)를 fn 직전으로 + Get을 수렴까지의
  재시작 루프로 — 계약 강화: 모든 Get이 fn 도중 변경(재진입·게이트 유보)을
  같은 호출 안에서 수렴시켜 항상 최신 반환. 매 패스 자기 dep Set은 UB.
  state-epoch-plan §4 세 절 + H-85 bullet 정정, spec.state 6 새 계약,
  spec.gate 10(리뷰의 영구 stale 재현 → 같은 Get에서 99 + flush 통지만)
- H-186(b): 교차 인스턴스 값 혼용 UB 문서화 — architecture 13번 + content-map
  §4 22번(H-116 이웃), 코드 주석. M5 재검토
- H-205(a): Modifier 가드 level 2→3(직접 Get이면 유저 호출부), spec.state 12 단언
- H-208: Ref:Set 스냅샷을 table.clone + 집합 병합으로(사용자 — 더 싸고 dedup 공짜)
- H-209: src 전 파일 pairs/ipairs → generalized iteration(사용자 — 최적화로 더
  빠름; 메타테이블 있는 테이블의 raw 순회 실측 확인). 문서 의사코드 표기는
  H-178과 같은 급으로 무변경
- H-211: Relate:SetWeak의 캐스트 없는 setmetatable 대입이 IDE(strict)에서
  TypeError(플레인 luau-analyze는 솔버 차로 조용) → 로컬 주석 + :: any 경유
- §4 열린 문항 0, 코드 마커 0. 감사 2라운드 수렴(확실 1·의심 1 → 0)

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 13:33:09 +09:00
274da35923
fix: default.project.json에 패키지별 roblox_packages 매핑 (H-210)
rojo 통합 luau-lsp가 "Unknown require: game/ReplicatedStorage/roblox_packages/
quad_types"로 죽던 것 — 트리에 roblox_packages가 없어 require("../roblox_packages/…")
의 인스턴스 경로가 안 풀렸다. pesde 가이드대로 패키지마다 src·roblox_packages를
형제로: ReplicatedStorage.quad-base(Folder){src, roblox_packages} +
quad-roblox 동형(사용자 지적 — 공유 roblox_packages 하나면 quad-roblox가
자기 의존성을 갖는 순간 충돌). rojo sourcemap + luau-lsp analyze로
unknown-require 0 실측. project-setup-plan.md 셋째 함정으로 기록.

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 13:24:22 +09:00
0d66e03875
feat: round11 §4 배치 회신 1차 반영 — 확정 일곱(H-182~H-185/H-187/H-200/H-203), 재질문 둘(H-186/H-198)·보류(H-205)
- H-182 (a): Effect `_dying` — Destroying 콜백이 세우고 재바인드·Subscribe류가
  내림, rawRerun 홀드 조건 합류(Slot `_destroyed`와 다른 이름은 의도 — 재바인드 가능)
- H-183 (a): Observer `_running` — 모든 fn 실행 둘레 + 네 진입점 첫 줄 가드
  (H-147 대칭; error 시 잔류는 설계상 인정)
- H-184 (a): `_assertBindable` 훅 — bindLifetime이 부기 커밋 전에 문의(level 3),
  H-147 가드는 _bindDestroying에서 이 훅으로 이동. mock + lifecycle-pattern (1)
- H-185: 권고 기각 — cleanup은 하나만(목록 소진은 표면 확대), 문서·타입 주석 명시
- H-187 (a): 타입 별칭 이름 넷 승인(quad-types-plan 기록, 마커 해소)
- H-200 (b): Gate 생성이 setup 동안 상류 _subs에서 떼고 성공 후 재등록(pcall 없음)
- H-203 (a): Blocker 순회가 핸들마다 IsBlocked 재확인 — 재차단 시 잔여는 다음 Off로
- H-168~H-170 재확인 반영: H-170 한계 공개 문서화(ref-plan + content-map 22번)
- 스펙: spec.effect 10 / spec.observer 9 / spec.gate 1 확장 / spec.blocker 8
- 감사 3라운드(3+2 → 3 → 0 수렴): 필드 목록 _running/_dying, CLAUDE.md·
  project-context.md M2 배너(목록은 todos.md 00번 단일 소스), session-summary
- 남은 코드 마커 셋: H-186/H-198(재질문 — §4 회신 2 블록에 메인 답변), H-205(보류)

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 12:56:31 +09:00
dc81dd26db
feat: 단위 2 /code-review high 반영 — ① 여섯(H-199/H-201/H-202/H-204/H-206/H-207) + ② 넷(H-198/H-200/H-203/H-205) §4 합류
체크포인트 재개 첫 항목. 8각도 후보 22 → 검증 생존 10(정확성 8건 실측 재현).

- H-199: With/Compute nil dep 조용한 탈락 → collectDeps + "dep #N is nil"(level 3)
- H-201: store:Of 이름 문자열 검증(할당 전, level 2)
- H-202: Compute fn 함수 검증(형제 표면과 같은 급)
- H-204: Store defaults 평범한 테이블 검증(clone 전)
- H-206: implsOf 세 벌 → ImplRegistry.luau 신설(잎, 내부 전용)
- H-207: Source.Set이 Impl.Emit 직접 호출로 위임(꼬리 한 벌)
- ② 넷은 코드에 TODO 마커만, 문항은 round11.md §4(마커 10 = 문항 10, 1:1)
- H-198(🔴 닫힌 게이트 너머 fn 도중 Set → 영구 stale)은 state-epoch-plan §4
  확정 의사코드 자체의 구멍 — 그 절에 ⚠️ 결정 대기 배너, README 색인 갱신
- architecture.md: ImplRegistry 소스 트리 등재, error 계약 "도착지가 계약" 명료화
- spec.state 13절·spec.store 2·3절 신설/확장, 감사 2라운드(6건 → 니트 2) 반영

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 11:39:42 +09:00
3cb45646d4
docs: 체크포인트 — 2026-08-29 아침 중단, 재개 지점(§4 회신 여섯 / 단위 2 코드 리뷰) 기록
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 03:44:47 +09:00
28dbc818b0
docs: 마무리 감사 반영 — Observer/Effect 네 진입점 의사코드 블록을 H-174 모양으로(임플 팩토리 안, module.canBound)
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 03:24:59 +09:00
67d1a41ef6
docs: 전 코퍼스 스윕 2 반영 — README gate/epoch 행 완료 표기, quad-types-plan 시제, STATUS 스파이크 23 재실행 닫힘, HUMAN_TODO M2 표기, project-context src 나열 → 소스 트리 포인터, architecture 테스트 전략 포인터
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 03:17:59 +09:00
f346792186
docs: 단위 3·4 탐사자 반영 — H-191(Ref 콜백 게이팅은 rawRerun 홀드) / H-192(설치 발화 억제는 from==nil 가드) / H-193(H-152 근거 갱신) / H-194(레지스트리는 임플 클로저 로컬) / H-195 / H-196(no-op → 홀드) / H-197(spec.init에 Effect·Blocker·onDestroying)
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 03:13:11 +09:00
f1c8be8390
docs: 전 코퍼스 스윕 반영 — debounce-throttle의 HasBlockedEmit 개념 이름 표기 둘(H-86), effect-plan의 'LifetimeHandle 탑레벨 함수' → 인스턴스 필드(H-174)
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 03:10:00 +09:00
3670e88d78
fix(m2): /code-review high(단위 3·4) 반영 — 임플을 module._impl로(H-181, 인스턴스 영구 핀 해소), Gate 실패 시 detach(H-188), Observer.Subscribed=false(H-189), Apply 검증(H-190); ② H-182~H-187은 §4 + TODO 마커
- State/Observer/Effect: implByModule(weak-key, 값이 키 캡처 → ephemeron 없어 불멸) 제거,
  임플은 rawset(module, "_impl") 비공개 필드(H-174 (a) 원문 모양). spec.init 2가 인스턴스 GC 고정.
- State.Gate: 검증 실패 시 상류 _subs에서 detach, setup 전 _onUpstreamEmit = Void. Apply 객체 분기 검증.
- Effect 시딩은 dep:_track(map), EpochSet 타입은 quad-types 하나로, State.Impl._module 제거.
- 코드 마커 TODO(H-182)(H-183)(H-184)(H-185)(H-186)(H-187); round11 §4 표 여섯 행(권고 전부 (a)).
- WARN 둘(round11.md 축약 참조) 전체 이름으로. 세션 원문·요약.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:58:27 +09:00
de36ecb508
docs: 단위 4 감사 4라운드(확실 0) — blocker-plan 231 '필드' 괄호, CLAUDE.md/project-context 머리말을 '단위 넷 구현 완료·끝 절차 진행 중'으로
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:34:08 +09:00
0537c02e1a
docs: 단위 3 감사 4라운드 반영 — 코드 스팬 줄바꿈 파손, round11 §5 인용 꼬리 잔재, STATUS done/ 표 3번째 셀 접기
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:28:57 +09:00
40b8129612
docs: 단위 4 감사 3라운드 반영 — Gate setup 검증 기록, source-state-plan H-94 문단을 __apply 문단 포인터로, HasBlockedEmit 각주
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:26:02 +09:00
8dc4498e7a
docs: 단위 4 감사 2라운드 반영 — H-94 문단의 귀속(단위 4 H-179)·'반환 U만' 정정, 표기 소스는 quad-types, blocker-plan 'Block은' 잔재
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:20:52 +09:00
9e1fbbd785
docs: 단위 3 감사 3라운드 반영 — round11 §5 색인 약호 인용 정정, Subscribed 옛 이름 둘째 자리, luau-test README 16 현황, 밤샘 병렬 2 허용 명문화(conventions·세션)
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:18:00 +09:00
5b09c05e8b
docs: 단위 3 감사 2라운드 반영 — STATUS 05 행 열 구조, luau-test README 예시 나열의 이동 각주, todos 00 M2 완료 표기, SubscribedObservers 옛 이름 표시
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:12:04 +09:00
654bdbf2e5
docs: 단위 4 감사 1라운드 반영 — __apply 시그니처 문단을 H-179 뒤 모양으로, isEpochSet 의사 술어 주석, 'M2에서 만들어진다' 시제 셋
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:11:40 +09:00
c932206ebf
feat(m2): 단위 4 — GateNode(state:Gate) / Blocker + Apply 파라미터 타입(교집합 오버로드, H-179) + spec 2개; M2 체크박스 전부 [x]
- State.luau: GateImpl(Impl 상속) — _receive(emit 맵 Peek, 규칙 3 삼킴, unfold 합류, 정책 호출),
  _flush(빈 배치 false → weak 스왑 → Sync(batch) → _emitDown(batch); emit(false) 버리기),
  Impl.Gate(setup 검증, newNode(..., GateImpl)로 StateBrand·시딩·_hold 공유, 반환 검증).
- Blocker.luau(잎): On/Off/OffWithoutEmit(스냅샷 순회)/IsOn/Policy(weak-key 핸들, 강한 주인은
  onUpstreamEmit 클로저)/__apply(메소드형 → state:Gate). init.luau·quad-types에 Blocker.
- quad-types: State.Apply를 교집합 오버로드로(H-179 — 유니온은 필드 있는 객체를 못 받음,
  스파이크 luau-test/done/26-*), GateEmit/GateSetup/Blocker 타입, State.Gate.
- spec.gate 9절·spec.blocker 7절 ALL PASS, analyze 0. 스파이크 05 → done/(spec.state/effect 3번이 대체).
- 문서: :Block 잔재 정정(H-180), typing-limits §1②·ROADMAP·round11·STATUS/README·세션·요약.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 02:04:58 +09:00
a8731d7a1a
docs: 단위 2 감사 6라운드(0건) — round11 §5 잎 목록을 시점 스냅샷으로 표시, 소스는 파일 헤더
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 01:53:33 +09:00
dca789ecca
feat(m2): 단위 3 — Observer(레지스트리 소유·네 진입점) / Effect(rawRerun·_rerunRequired 홀드·cleanup·네 진입점) + onDestroying 스텁·mock + spec 2개
- Observer.luau: Observer.Init(module) — 인스턴스별 임플 + Subscribed/WeakSubscribed(H-99),
  _receive(canExecute 게이팅, 홀드 H-159)/_catchUp(유일한 재생 자리, from=nil H-164),
  네 진입점 인라인(H-149, Weak 프리미티브 H-111, 관대 H-133, 엄격), 생성자 순서(fn → 플래그 → _subs).
- Effect.luau: Effect.Init(module) — deps 검증(H-70), dep 종류별 클로저(H-107), fire(from==nil
  가드, _epochs Update만 H-151, _blocker 없음 H-150), rawRerun(force)/Rerun(_pending 지연, 홀드,
  사망 계약), _bindDestroying/_unbindDestroying/_consumeCleanup(_cleanupRunning H-160),
  네 진입점 자기 본문(H-144) + isRunning 가드(H-147) + resubscribeTail.
- State:Observer → ObserverImpl.new. LifetimeHandle: onDestroying 에러 스텁. mock: onDestroying.
- quad-types: EpochSet/Observer/ObserverFn/EffectHandle/EffectFn, State.Observer, Quad.Effect·onDestroying.
- spec.observer(8절)·spec.effect(9절) ALL PASS, analyze 0. ROADMAP 단위 3 체크박스(mock 전파 루프
  테스트 포함), round11 §5 단위 3 확인 목록 + H-178(사적 필드 _ 접두), 세션 원문·요약.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 01:52:21 +09:00
67fb61e988
docs: 단위 2 감사 5라운드 반영 — H-174 잎 목록은 파일 헤더가 소스(module-lifecycle-plan), InitState→State.Init 표기, EpochMap 주석 인용을 산문으로
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 01:48:04 +09:00
442d800e5d
docs: 단위 2 감사 4라운드 반영 — implFor 호출자는 Source Init뿐, EpochMap도 공유 잎, _hold 본문 닫힘(spec.state 11), implFor 에러 문구
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-29 01:39:19 +09:00
34adf3b260
docs: 세션 중단 — 재개 지점(단위 2 감사 4라운드부터) 기록
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 20:56:48 +09:00
8aa13ed435
fix(m2): 단위 2 감사 3라운드 반영 — Source/Store Init이 자기 의존성을 module:RunInit로 직접 당겨옴(H-177, New() 순서 무관), init.luau 주석 모순 제거, luau-test README 스파이크 15 상태 주석
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 20:56:00 +09:00
cd65520921
docs: 단위 2 감사 2라운드 반영 — ROADMAP 418 깨진 볼드, source-state-plan의 '구현 시 정한다' 잔여 둘(Source 이름·__apply 시그니처), 스파이크 15를 done/으로(폴더가 곧 상태)
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 20:48:29 +09:00
500ae298aa
docs: 단위 2 감사 1라운드 반영 — H-176 실측 전 서술 표시(ROADMAP·source-state-plan), STATUS 스파이크 15 폐기·_hold 스파이크 닫힘, state-epoch §8 다이아몬드 스파이크 닫힘, H-84 부분 완료 표기 통일
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 20:40:21 +09:00
1e070e3f1f
feat(m2): 단위 2 — EpochMap / State(Init 팩토리, H-174) / Source / Store + quad-types 최종형 타입 + spec 4개
- EpochMap.luau: Update/Peek/Refresh/Sync/TrackFrom, EpochSet은 집합, 키 weak (state-epoch-plan §3).
- State.luau: InitState(module) → 인스턴스별 임플(implFor로 Source/Store에 전달). _emitDown은
  스냅샷 후 sub:_receive(from)(H-163), _receive 규칙 1~3, 시딩 Sync/TrackFrom, 카운터 쌍(H-85),
  Get의 Refresh 순회(값만), fn(self=리시버 lazy 핸들, previous?, ...deps), With pass-through,
  Apply(fn | __apply 객체, H-158), _hold 강참조. Compute 결과 isModifier 가드, dep isState 검증.
- Source.luau: Set 동일값도 emit(H-68)/Emit/isModifier 가드, SourceBrand+EpochBrand.
- Store.luau: 그림자=store 자신, defaults isSource 화이트리스트 + RESERVED 가드(H-122/H-153),
  Of(모듈의 Source를 호출 시점에)/Names.
- quad-types: StateData/State/Source/Store 타입(ty11 최종형), export type function CheckReservedKeys,
  Quad에 Source/Store. Compute deps는 ...any — 타입팩 D...는 strict에서 기각(H-176, 스파이크 15 닫힘).
- spec.{epochmap,source,state,store}.luau, spec.init에 Source/Store. ROADMAP 단위 2 체크박스,
  round11 §5 단위 2 확인 목록, 세션 원문·요약.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 20:33:29 +09:00
4169d7ba50
qa: 단위 1 배치 회신 반영 — H-174 팩토리형+module.canExecute 늦게 읽기, H-169 리비전 가드로 재진입 파동 놓기, H-168 Ref<<T?>>() 관용구, H-170 resume 즉시 실패 re-raise
- Ref.luau :Set — 순회 앞에서 리비전을 잡고 바뀌면 break(사용자 안, 권고 k(self.Value)는
  콜백 이중 호출을 남겨 기각), coroutine.resume 결과 false면 error(err, 0). spec.ref 10·11.
- ref-plan.md: :Set 블록·재진입 절·:Wait 정정·"제네릭 시그니처"에 H-168 읽기 규칙.
  lifecycle-hooks/debounce-throttle 관용구에 배너.
- H-174: lifecycle-pattern.md·module-lifecycle-plan.md·ROADMAP 반응형 본체 — 반응형 모듈은
  InitXxx(module) 팩토리, 게이트는 발화 시점에 module.canExecute(self)로(캡처 금지).
- round11.md §4 전량  + 사용자 원문, 세션 원문·요약 갱신. 단위 2 게이트 0.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 20:18:13 +09:00
31c55c625e
qa: 11라운드 탐사자 결과 — H-174(🔴 ② 생명주기 필드 조립 형태 미정, §4) 기록, H-175 클로저 캐시 규칙 범위 좁힘
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 19:29:07 +09:00
325f3f0237
fix(m2): /code-review high 반영 — mock Destroy 의미론(자손·순서·이중 no-op, H-172), lazy claim GC 타이밍(H-171), M7 TweenBrand 잔재(H-173), spec.init 신설; ② H-168~H-170은 round11 §4로
- test/mock.luau: Destroy = Destroying → Parent nil → 자손 재귀 → 연결 해제, 두 번째는 no-op;
  claim이 Destroy된 inst면 새 gcconn 즉시 Disconnect. spec.lifetime 6b/6c 추가.
- test/spec.init.luau: Quad 탑레벨 값 확인을 typechecked 계층으로(smoke.init 5절 제거).
- ROADMAP M7 체크박스·tween-plan: isTween/TweenBrand는 Brand.luau.
- conventions: 규약 요약의 단위 나열 제거(소스는 brief §1). 코드 주석 절 인용을 제목 앞부분으로.
- round11.md: H-168(Ref() 무인자 vs Ref<T>(T)) / H-169(재진입 :Set 옛 value) / H-170(resume이
  에러 삼킴)을 §4 배치 문항으로(권고 전부 (a)), §5에 단위 끝 절차 기록. 세션 원문·요약 갱신.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 19:16:28 +09:00
7e7328fd89
docs: 감사 7라운드 반영 — conventions 규약 요약의 단위 넷 표기(EpochMap은 2번째 단위 안의 순서)
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 18:55:01 +09:00
86f768717e
docs: 감사 6라운드 반영 — lifecycle-pattern 순환 절 인용 제거·스케치에 필드 프레이밍 주석, ref-plan 같은-파일 인용 둘 정정
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 18:47:27 +09:00
c685dffaa0
docs: 감사 5라운드 반영 — lifecycle-pattern 원 확정 문단에 '평평한 = 모듈 인스턴스 필드' 정정, 깨진 절 인용 둘, 브랜드 개수 리터럴 제거
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 18:40:24 +09:00
197ea881ed
docs: 감사 4라운드 반영 — ROADMAP의 'Brand.luau 트리에 없음' 정정, lifecycle-pattern의 'base가 Relate로 직접 구현' 옛 서술 정정
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 18:32:22 +09:00
c427c9c143
docs: 감사 3라운드 반영 — TweenBrand/isTween 위치는 Brand.luau (architecture 소스 트리, tween-plan 패키지 경계)
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 18:27:04 +09:00
7a1c511c11
fix(m2): 감사 2라운드 반영 — Ref 시그니처를 문서대로 Ref<T>(T)로(H-167), mock docstring 자기모순, architecture 소스 트리에 Brand.luau + LifetimeHandle 줄 정정
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 18:22:59 +09:00
9ef44ca1e2
docs: 감사 1라운드 반영 — todos 5번 해소, quad-types-plan Quad 블록을 코드 포인터로, smoke.init에 M2 탑레벨 값 확인
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 18:16:17 +09:00
d9898d6629
feat(m2): 첫 단위 공통 기반 — Void/Brand/LifetimeHandle/Ref 최소형 + mock 생명주기 + spec 5개
- quad-base/src: Void.luau(단일 no-op), Brand.luau(Brand() + 브랜드 인스턴스 15 +
  M2 is* 11), LifetimeHandle.luau(InitLifetimeHandle — 모듈 인스턴스에 영어 level 2
  에러 스텁 4종), Ref.luau(.Value/.Revision/:Set/:Callback/:WeakCallback/:Uncallback,
  EpochBrand+RefBrand), init.luau 재export. Relate.luau는 타입만 quad-types에서 재export.
- quad-types: Quad에 M2 첫 단위 탑레벨 값 + Ref<T>/RefCallback<T>/Relate/Epoch 타입.
- test/mock.luau: installLifetime(quad) — lifecycle-pattern.md (0)/(1) 스케치 그대로,
  Destroy가 모든 Connection을 끊도록 보강(gcconn 판정 근거).
- scripts/test.sh: spec.* 수집 + luau-analyze(src/spec/mock). 전부 ALL PASS, analyze 0건.
- 발견 ①: H-165 pesde shim은 생성 시점 export 타입만 안다(project-setup-plan.md),
  H-166 Ref.Revision 초기값 0(ref-plan.md). ROADMAP 공통 기반 체크박스 완료 표기.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 18:10:50 +09:00
92721d768f
docs: M2 첫 단위(공통 기반) 작업 계획 확정 — round11-brief §6
Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 17:58:01 +09:00
f94234aa7c
docs: M2 자율 구현 규약 신설 — round11 brief/발견 파일, EpochMap 순서 정정, Void 체크박스, HUMAN_TODO 2번 닫음
- qa-request/pre-implementation-handtrace-round11-brief.md: 세 갈래 분류 /
  단위 넷(공통 기반+H-97 mock 생명주기 → EpochMap → Source/State/Store →
  Observer/Effect → GateNode/Blocker+탑레벨) / 두 층 커밋 게이트 / 탐사자 지시
- 초안 규약의 순서 오류(EpochMap이 Effect 뒤) 정정 — ROADMAP "반응형 본체"가
  EpochMap을 State 본체보다 먼저로 못 박아 둠
- round11.md 골격(번호 H-165부터, §4 배치 표에 "옛 메커니즘 복원?" 열)
- conventions.md 작업 방식에 짧은 포인터 항목, ROADMAP M2 배너 + Void 체크박스
  + Relate.luau가 M1에 이미 있음 표기, HUMAN_TODO 2번 해소, README 색인,
  CLAUDE.md/project-context/todos 머리말 "M2 진행 중"

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-28 17:51:30 +09:00
51ffadcd8d
qa: Claim 후속 문항 넷 확정 — nativeClaim 주입 op(gcconn/gchold 경로 전부), 이중 claim은 셋업 유무로, PlayerGui는 claim 대상 아님, <Class>Param<E>
- base/claim-plan.md §7-9~12 + §10 해소 표시, §6 Claim(PlayerGui) 예시 폐기(루트는 ScreenGui/SurfaceGui)
- architecture.md 주입 op 목록 nativeClaim / bind-system-plan New ② 주석 / lifecycle-pattern (0) 머리 / slot-plan 폴백 예외
- ROADMAP M5(gcconn 셋업 체크박스·Claim 체크박스·배너), question.md M5 절 삭제, archive/question-resolved 추기
- 감사 1라운드(2건) 반영

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01546hjsYNLSMZdHdPyTZaGb
2026-08-28 17:36:06 +09:00
253d141096
qa: Claim 갈래 8건 확정 — research/existing-mount-plan → base/claim-plan.md 승격, 루트 .Parent= 밖에서 허용 복원
- 루트 키 센티널(맨 테이블+Claim<<T>> 기각), type <Class>Param 필드 파트 공유, Claim 타입 인자 없음
- 디스크립터 순서 정본 / claim된 부모 안 New 자식 허용(위치는 프로바이더 몫) / 이름 Claim·D.Mapper
- §5-7: Claim은 1회·전체 소유, H-146 루트 .Parent= 예외를 좁혀 복원(H-148 폐기 → 같은 날 복원)
- debug 검사 범위는 research/debug-tooling-plan.md로 이관, nativeFindChild 주입 op 등록
- 감사 8라운드 수렴(2→3→1→3→2→0→4→0) + /code-review high 10건 반영 — 새 메커니즘 넷은
  base/claim-plan.md §10 + question.md "M5 착수 전" 절로(gcconn/gchold 셋업 자리 /
  이중 claim 레지스트리 / PlayerGui own-all vs ResetOnSpawn / <Class>Param 배열 파트)

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01546hjsYNLSMZdHdPyTZaGb
2026-08-28 17:23:30 +09:00
f020f3f36f
docs: 인덱스 레이어에 후속 2(H-163/H-164, EmitReceive, _catchUp) 반영
Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01546hjsYNLSMZdHdPyTZaGb
2026-08-28 16:00:36 +09:00
c8d4569819
docs: 세션 로그 후속 2 (H-163/H-164/EmitReceive/_catchUp)
Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01546hjsYNLSMZdHdPyTZaGb
2026-08-28 15:56:23 +09:00