From 3e7dcfead264b013a7dd2bba4348f832596e5b8d Mon Sep 17 00:00:00 2001 From: qwreey-agent-selene Date: Mon, 31 Aug 2026 14:47:42 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20ROADMAP=20=EC=9E=AC=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=20=EB=8C=80=EA=B8=B0=20=EC=A0=88=20stale=20=EC=A0=95=EB=A6=AC?= =?UTF-8?q?=20=E2=80=94=20=EB=8B=AB=ED=9E=8C=20=EC=85=8B=20[x],=20?= =?UTF-8?q?=EB=88=84=EB=9D=BD=20=EC=85=8B=20=EC=86=8C=EA=B8=89=20=EB=93=B1?= =?UTF-8?q?=EC=9E=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 닫힘 표기: 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 Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG --- .claude/luau-test/STATUS.md | 7 +++- .../2026-08-31-01-unit2-code-review.md | 13 +++++++ ROADMAP.md | 36 +++++++++++++------ 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/.claude/luau-test/STATUS.md b/.claude/luau-test/STATUS.md index e0a270f..17a9c6a 100644 --- a/.claude/luau-test/STATUS.md +++ b/.claude/luau-test/STATUS.md @@ -1,6 +1,11 @@ # 스파이크 상태판 — **폴더가 곧 상태** -> 마지막 갱신: **2026-08-21** — `Brand`가 **인스턴스 브랜드**로 전면 +> 마지막 갱신: **2026-08-29** — M2 구현이 스파이크 셋을 닫음: `05`(다이아몬드, +> `spec.state`/`spec.effect` 3번이 대체)·`15`(타입팩, `H-176` 기각 실측) **폐기 → +> `done/`**, 신규 `26`(`:Apply` 교집합 오버로드, `H-179`) `done/` 직행, "만들어야 할 +> 스파이크"의 중간 State GC(`spec.state` 11번)·`CheckedQuad` 재실행(`23`) 닫힘 — +> 각 행의 날짜 표기가 소스. 직전 갱신 2026-08-26(8라운드 `H-122`/`H-123`으로 +> `11`이 `done/` → `rewrite-required/`). 그 전 갱신: **2026-08-21** — `Brand`가 **인스턴스 브랜드**로 전면 > 재작성되면서(`base/brand-plan.md`) 옛 `Brand.set`/`Brand.get`을 직접 구현해 > 쓰던 `22`가 `done/` → `rewrite-required/` 이동(검증 대상인 `isRef`/`isPreRef` > 포함 관계 자체는 그대로). 같은 날 `Epoch`/`EpochMap` 승격도 있었으나 그건 diff --git a/.claude/session/2026-08-31-01-unit2-code-review.md b/.claude/session/2026-08-31-01-unit2-code-review.md index 472d267..f855c35 100644 --- a/.claude/session/2026-08-31-01-unit2-code-review.md +++ b/.claude/session/2026-08-31-01-unit2-code-review.md @@ -137,3 +137,16 @@ notification 시점에 파인더 4개가 미완인 채 멈춤. 이번엔 opus 의견: M2 방식 재사용 권고 — 실측 근거(③ 0회, 배치 회신 3번에 47건, 관여 촘촘). M3 특이점 셋만 얹음: Handler 작성 체크리스트 필독 게이트, 자유 이름 → module.xxx 해석 규칙(H-174), spec-로컬 테스트 핸들러(코드 배치). §0 회신 대기. + +## 같은 날 후속 6 — ROADMAP "재검증 대기" 절 stale 정리 (clear 전 마지막) + +사용자 요청으로 그 절을 `luau-test/STATUS.md`(소스)와 전수 대조. **stale 셋 정정**: +`05`(08-29 폐기 — `spec.state`/`spec.effect` 3번이 대체)·`15`(08-28 폐기 — `H-176` +`...any` 확정)·중간 State GC(08-28 닫힘 — `spec.state` 11번 실측, 그 항목 안의 +"question.md 최우선 승격" 서술도 08-25에 이미 해소된 낡은 것)를 `[x]`로. **누락 셋 +소급 등재**: `11`/`16`/`21`(절 신설 08-22 이후 rewrite-required 합류인데 목록에 없던 +것 — `11`은 ROADMAP 전체에 0건이었다). `11`은 M2 spec들이 검증 대상을 이미 고정해 +`05`/`15`와 같은 폐기 근거가 성립 — 판정은 다음 라운드로 미룸(결정 아님). +STATUS.md 머리의 "마지막 갱신: 2026-08-21" 배너도 본문(08-26·28·29 이동)과 어긋나 +08-29 기준으로 갱신. 잔여 유효 항목: `01`(순서 계약 한 루프 재작성)·`04`(**M3 착수 시 +같이 처리** — 곧 그 시점)·`19`(M10)·`22`(M8)·`10`(Studio, HUMAN_TODO 1 선행). diff --git a/ROADMAP.md b/ROADMAP.md index 036325b..6b330e1 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -169,9 +169,10 @@ Luau 코드로 부딪혀본 적 없는 세 가지**를 던지는 코드로 검 - [ ] **`01`(props 순회 순서)** — 두 루프로 짜여 있어 지금 계약의 구현 (단일 일반화 `for`, `F-4-1`)과 안 맞음. 재작성하면서 "배열 파트 전체가 해시보다 먼저 + 배열 안에서는 index 순서"를 그대로 확인할 것 -- [ ] **`05`(다이아몬드 전파)** — `Epoch` 리비전 비교 채택으로 다이아몬드 - Observer가 이제 변경당 **1회**만 울어야 함(옛 "emit은 항상 전파" 모델을 - 검증 중). `base/state-epoch-plan.md` 기준으로 재작성 +- [x] **`05`(다이아몬드 전파)** — **[2026-08-29 닫힘, 재작성 안 함]** M2 + 구현의 `spec.state.luau` 3번(다이아몬드 규칙 3, 조인 1회)· + `spec.effect.luau` 3번이 실제 구현에서 같은 것을 고정해 스파이크는 + 폐기, `done/`으로 이동(`luau-test/STATUS.md`의 그 행이 소스) - [ ] **`04`(Dispatch 체인 retractFrom)** — 하강 diff 확정으로 무효화. **M3 착수 시 같이 처리**하는 게 자연스러움 - [ ] **`19`(소유권/참조카운트 Relate 패턴)** — **B 섹션만** 낡음 @@ -184,17 +185,30 @@ Luau 코드로 부딪혀본 적 없는 세 가지**를 던지는 코드로 검 전면 재작성되며 옛 `Brand.set`/`Brand.get` 구현에 의존하던 부분이 깨짐(검증 대상인 `isRef`/`isPreRef` 포함 관계 자체는 그대로). **M8 착수 시 같이 처리** -- [ ] **`15`(`:Compute` trailing deps 타입팩)** — 이형 다중 deps를 제네릭 - 타입 팩으로 표현 가능한지 미실측(안 되면 동종 dep 1개로 한정). - **M2 착수 시 같이 처리** +- [x] **`15`(`:Compute` trailing deps 타입팩)** — **[2026-08-28 닫힘, 재작성 + 안 함]** M2 단위 2가 실제 `quad-types` 선언에서 타입팩 형태를 실측해 + **기각**했다(`m2-implementation-round11.md` `H-176`: strict에서 콜백 + dep 추론이 깨짐 → deps 자리 `...any` 확정). 물으려던 답이 나와 폐기, + `done/`으로 이동 - [ ] **`10`(Roblox Studio 확인)** — `bindLifetime`/`canExecute`/ `unbindLifetime` 재정정으로 무효화. **Studio 작업이라 `HUMAN_TODO.md` 1번(계정 분리)이 선행** -- [ ] **아직 파일이 없는 실측 항목** — **중간 State GC** - (`base/source-state-plan.md`, 상류 strong / 하류 weak 불변식 — - `.claude/todos.md`가 "M2 착수 전 필요"로 지정. **[2026-08-24 승격]** - 순서 교체로 반응형이 바로 다음 마일스톤이 되면서 `question.md` - 최우선 절로 올라갔다). **[2026-08-24 정리]** 여기 같이 적혀 있던 +- [ ] **`11`(modifier 불법 값 error) / `16`·`21`(Store 타입)** — + **[2026-08-31 소급 등재]** 셋 다 이 절 신설(08-22) **이후** 합류 + (`11`은 8라운드 `H-122`/`H-123`으로 08-26에, `16`/`21`은 Store 재설계로 + 08-25에)했는데 이 목록에 안 올라 있었다 — `11`은 ROADMAP 어디에도 + 없었고 `16`/`21`은 이제 닫힌 M2 본문 속 한 줄뿐. 재작성 지침은 + `luau-test/STATUS.md`의 각 행이 소스. **단 `11`은 폐기 후보다** — + 재작성이 검증하려는 것(`isModifier` 가드는 `Source` 생성자/`Set`/ + `Compute` 캐싱, Store는 `isSource` 화이트리스트)을 M2 구현의 + `spec.source.luau`·`spec.store.luau`가 이미 실제 구현에서 고정하고 + 있어 `05`/`15`와 같은 근거가 성립한다 — 다음 라운드에서 판정할 것 +- [x] **아직 파일이 없던 실측 항목 — 중간 State GC** — **[2026-08-28 닫힘]** + `_hold` 불변식(하류 → 상류 강함; 설계는 2026-08-25 사용자 확정으로 + `question.md`에서 이미 내려가 있었다)을 M2 구현의 `spec.state.luau` + 11번이 양성(체인 생존)·음성(하류를 놓으면 수거) 둘 다 실측 — + 별도 스파이크는 안 만든다(`luau-test/STATUS.md` "만들어야 할 스파이크" + 절의 그 행이 소스). **[2026-08-24 정리]** 여기 같이 적혀 있던 `R-11`의 `table.insert` 구멍 재사용은 6라운드 `H-7`로 **전제 자체가 없어져 폐기**됐다(`Ref.Callbacks`가 해시맵 셋이 되어 구멍 개념이 없음) — `luau-test/STATUS.md`가 소스