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
This commit is contained in:
parent
e0cb530b6b
commit
89e078b387
17 changed files with 56 additions and 38 deletions
File diff suppressed because one or more lines are too long
|
|
@ -173,7 +173,7 @@ export type State<T> = StateData<T> & {
|
|||
유니온 하나(`((State<T>) -> U) | { __apply: … -> U }`)로 두면 `Blocker`처럼 필드가
|
||||
더 있는 객체가 제네릭 `U` 자리에서 너비 서브타이핑을 못 받아 `state:Apply(blocker)`가
|
||||
strict에서 막힌다(인덱서 `[string]: any`로 열어도 같다 — `luau-test/done/26-*`).
|
||||
객체 쪽 반환이 `any`라 결과는 명시 주석(①과 같은 관례). `qa-request/pre-implementation-handtrace-round11.md` `H-179`.
|
||||
객체 쪽 반환이 `any`라 결과는 명시 주석(①과 같은 관례). `qa-request/m2-implementation-round11.md` `H-179`.
|
||||
- **캐비엇**: 콜백이 받는 `s`는 `StateData<T>`라 `Compute`/`With`가
|
||||
없습니다. 콜백 안에서 다시 `s:Compute(...)`를 부르는 자리
|
||||
(`:Apply`의 factory가 대표적)는 이 방식으로 못 풀고
|
||||
|
|
|
|||
|
|
@ -379,7 +379,7 @@ haiku, 일반 작업은 sonnet. 특히 소스코드를 많이 읽어야 하는
|
|||
GitHub 기여 그래프에 반영되게 하기 위함 — 관련 리모트 정책은 메모리
|
||||
`git-remote-push-policy` 및 위 `SAFETY.md` 항목 참고.
|
||||
- **⭐ [2026-08-28 신설] M2 자율 구현 규약 — 본문은
|
||||
`qa-request/pre-implementation-handtrace-round11-brief.md`가 소스, 여기선
|
||||
`qa-request/m2-implementation-round11-brief.md`가 소스, 여기선
|
||||
가리키기만.** 사용자 결정(2026-08-28, *"수정하고 너가 진행하자"*)으로 M2는
|
||||
자율 구간으로 돈다. 요지 셋: (1) 발견은 **세 갈래** — 문서가 이미 답을 가진
|
||||
건 `H-nnn`으로 기록하고 `base/`+코드를 같은 커밋에서 자율로 고침 / 새
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ ROADMAP 항목 근거인지, 어떻게 실행하는지, 실행 후 뭘 확인해
|
|||
| `21-type-store-undeclared-key-rejected.luau` (타입체크 전용) | **[2026-08-19 신규]** `Store<{field: T}>`로 선언 안 된 이름에 dot-access하면 `type function`이 합성한 결과 타입(`ProcessStoreType`, `16`과 동일)에 그 프로퍼티가 없어 타입 시간에 거부되는지 — `store-plan.md`가 "아마 그럴 것"으로만 적어뒀던 걸 M0에서 실측. 통과: 미선언 키 접근 2건이 정확히 `TypeError`로 걸림 | `store-plan.md` "Store = Source들의 이름 붙은 모음" 절의 "[확인 요구, 2026-08-18 구현 전 QA]" 항목, `todos.md` 00번 **⚠️ [2026-08-25 이동, `rewrite-required/`]** `16`의 `ProcessStoreType`을 재사용하므로 같이 낡았다. **검증 대상(미선언 키는 타입 에러)은 그대로 유효**하고 새 모양에서도 성립함이 확인됐다(`store.nope` 거부) — 새 `Store<T>` 선언으로 바꿔 쓰기만 하면 된다 |
|
||||
| `22-runtime-ref-preref-postref-brand.luau` | **[2026-08-19 신규]** 구 `13`의 런타임(B) 절반을 분리한 것 — `isPreRef`/`isPostRef`가 같은 층위의 배타적 형제(둘 다 `isRef`엔 `true`, 서로에겐 `false`)인지, Leaf 핸들러 흉내(`isRef(v) and not isPreRef(v) and not isPostRef(v)`)가 Ref/PreRef/PostRef 셋을 정확히 갈라내는지. **[2026-08-21] `rewrite-required/`로 이동** — 파일이 직접 구현해 쓰는 `Brand.set`/`Brand.get`이 인스턴스 브랜드 재작성으로 역전된 옛 API가 됐다(검증 대상 자체는 그대로 유효, 상태와 재작성 지침은 `STATUS.md`가 소스) | `ref-plan.md`의 "`PostRef`" 절, `brand-plan.md`의 "⭐ 구현 — 인스턴스 브랜드" 절 |
|
||||
| `23-type-quadtypes-checkversion-addplugin.luau` (타입체크 전용) | **[2026-08-19 신규, 같은 날 후속으로 재작성]** 실제 `quad-types`/`quad-base`/`type-version-check`를 `require`해서 `CheckedQuad<T, Pattern>`(글롭/캐럿 버전 패턴 체크, `type-version-check` 위에 얹힘)이 `AddPlugin<Self,P>` 체이닝과 맞물려 동작하는지 — 양성(버전 일치 + 2단 체이닝 + 이전 확장 필드 보존), 음성(버전 불일치 → 강제 참조 시점에 정확히 `TypeError`). `type function`을 거친 값은 패스스루라도 이후 제네릭 self 체이닝이 깨진다는 걸 이 스파이크가 재작성 과정에서 직접 발견. 재작성 과정에서 `export type function`(cross-package 필수)과 2개 이상 명시 제네릭 인스턴스화의 이중 꺾쇠(`Foo<<A,B>>`) 요구도 추가로 실측 확인 | `quad-types-plan.md`, `typing-limits.md` §6 |
|
||||
| `26-type-apply-object-factory-overload.luau` (타입체크 전용) | `state:Apply(factory)`의 파라미터 타입 — 함수 팩토리와 `__apply` 객체 팩토리를 한 시그니처로 받을 때 유니온/오버로드/인덱서 중 어느 표기가 strict에서 `state:Apply(blocker)`(필드가 더 있는 객체)를 통과시키는지 | `qa-request/pre-implementation-handtrace-round11.md` `H-179`(M2 단위 4 실측) |
|
||||
| `26-type-apply-object-factory-overload.luau` (타입체크 전용) | `state:Apply(factory)`의 파라미터 타입 — 함수 팩토리와 `__apply` 객체 팩토리를 한 시그니처로 받을 때 유니온/오버로드/인덱서 중 어느 표기가 strict에서 `state:Apply(blocker)`(필드가 더 있는 객체)를 통과시키는지 | `qa-request/m2-implementation-round11.md` `H-179`(M2 단위 4 실측) |
|
||||
|
||||
## 공통 유틸리티
|
||||
|
||||
|
|
|
|||
|
|
@ -181,9 +181,9 @@
|
|||
|
||||
| 파일 | 확인된 것 |
|
||||
|---|---|
|
||||
| `26-type-apply-object-factory-overload.luau` (타입체크 전용) | ✅ **[2026-08-29 M2 단위 4]** `state:Apply(factory)`의 파라미터 타입은 **교집합 오버로드**(함수 팩토리 제네릭 `U` / `__apply` 객체 `any` 반환) — 유니온 하나는 필드가 더 있는 객체(`Blocker`)를 못 받는다. 기대 진단 2건(음성 대조군)만 — 근거: `qa-request/pre-implementation-handtrace-round11.md` `H-179`, `quad-types/src/init.luau` `State<T>.Apply` |
|
||||
| `26-type-apply-object-factory-overload.luau` (타입체크 전용) | ✅ **[2026-08-29 M2 단위 4]** `state:Apply(factory)`의 파라미터 타입은 **교집합 오버로드**(함수 팩토리 제네릭 `U` / `__apply` 객체 `any` 반환) — 유니온 하나는 필드가 더 있는 객체(`Blocker`)를 못 받는다. 기대 진단 2건(음성 대조군)만 — 근거: `qa-request/m2-implementation-round11.md` `H-179`, `quad-types/src/init.luau` `State<T>.Apply` |
|
||||
| `05-store-state-diamond-propagation.luau` | **[2026-08-29 폐기 → `done/`로 이동, 재작성 안 함]** M2 단위 2·3의 `quad-base/test/spec.state.luau` 3번(다이아몬드에서 두 번째 도착이 규칙 3으로 접힘, 조인 1회 계산)·`spec.effect.luau` 3번(Effect도 1회)이 실제 구현에서 같은 것을 고정한다 — 이 스파이크가 물으려던 "변경당 1회"의 답. 아래는 폐기 전 상태: 2026-08-19 재작성분은 그 시점 모델 기준 ✅ 통과였음 — 근거: **[2026-08-21] 모델이 또 바뀌었다** — 소스 에포크 비교 채택(`base/state-epoch-plan.md`)으로 다이아몬드에서 **두 번째 통지가 접힌다**. 그래서 이 스파이크의 핵심 assert("`:Get()`을 안 부르는 Observer가 변경당 경로 수(2)만큼 운다")가 **정반대**가 됐다 — 이제 **변경당 1회**여야 한다. **살릴 것**: `invalid` 기반 dedup이면 두 번째 변경부터 침묵하는 것을 잡는 음성 대조군(그 금지는 지금도 유효). **새로 넣을 것**: DFS 도중 `Get()`이 섞인 값을 캐시하던 glitch가 에포크로 사라지는지(그 문서 §1의 시나리오) |
|
||||
| `15-type-compute-trailing-deps-typepack.luau` | **[2026-08-28 폐기 → `done/`로 이동, 재작성 안 함]** M2 단위 2가 실제 `quad-types` 선언에서 타입팩 형태를 실측해 기각했다(`qa-request/pre-implementation-handtrace-round11.md` `H-176`: strict에서 콜백 dep 추론이 깨져 정상 호출까지 막힘 → deps 자리 `...any`). 이 스파이크가 물으려던 (B)의 답이 나왔으므로 파일은 역사로만 `done/`에 남긴다. 아래는 폐기 전 상태: **파싱 실패**(SyntaxError) — 근거: 음성 대조군의 타입 표기가 `TypeError`가 아니라 `SyntaxError`로 걸려 **파일 전체가 아무것도 검증 못 함** — 대조군을 별도 파일/블록으로 격리 |
|
||||
| `15-type-compute-trailing-deps-typepack.luau` | **[2026-08-28 폐기 → `done/`로 이동, 재작성 안 함]** M2 단위 2가 실제 `quad-types` 선언에서 타입팩 형태를 실측해 기각했다(`qa-request/m2-implementation-round11.md` `H-176`: strict에서 콜백 dep 추론이 깨져 정상 호출까지 막힘 → deps 자리 `...any`). 이 스파이크가 물으려던 (B)의 답이 나왔으므로 파일은 역사로만 `done/`에 남긴다. 아래는 폐기 전 상태: **파싱 실패**(SyntaxError) — 근거: 음성 대조군의 타입 표기가 `TypeError`가 아니라 `SyntaxError`로 걸려 **파일 전체가 아무것도 검증 못 함** — 대조군을 별도 파일/블록으로 격리 |
|
||||
| `02-none-sentinel-vs-nil-holes` | `nil` 소진 시 `#t` 50→49로 무너짐 / `None`은 항상 50. 반대로 **당시의** Ref 콜백 배열은 `None` 쓰면 죽은 슬롯 1000개 잔존 — **두 배열의 규칙이 서로 반대여야 함**이 정량 확인. **[2026-08-24]** 그 대비의 한쪽(Ref 콜백)은 6라운드 `H-7`로 **해시맵 셋**이 되어 사라졌지만, 이 스파이크가 실제로 확인한 것(**일반 Lua 테이블에서 `nil` 구멍과 `None` 채움의 거동 차이**)은 그대로 유효하다 — `sourceList`/`flattened`처럼 순서가 중요한 배열이 여전히 그 결론 위에 선다 |
|
||||
| `03-recursive-store-bind-dispatch` | StoreBind 재귀 재-dispatch, `None`→`nil` 흐름, 무한재귀 없이 종료 |
|
||||
| `06-component-boundary-nil-hole-props` | `or None` 없으면 앞쪽 nil-hole로 슬롯 소실, 관용구 쓰면 항상 보존 |
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
-- [2026-08-29 M2 단위 4] `state:Apply(factory)`의 파라미터 타입 표기 실측 — 결론: 교집합 오버로드(N/O).
|
||||
-- 유니온 하나(`((State<T>) -> U) | { __apply: ... -> U }`)는 `Blocker`처럼 필드가 더 있는 객체를 제네릭 U 자리에서
|
||||
-- 받지 못한다(너비 서브타이핑 실패, 인덱서 `[string]: any`로도 안 됨). 원문 스파이크 4개 중 통과한 마지막 것.
|
||||
-- 소스: `qa-request/pre-implementation-handtrace-round11.md` `H-179`. 기대: 진단 2건(마지막 두 줄 음성 대조군)만.
|
||||
-- 소스: `qa-request/m2-implementation-round11.md` `H-179`. 기대: 진단 2건(마지막 두 줄 음성 대조군)만.
|
||||
export type StateData<T> = { Get: (self: StateData<T>) -> T }
|
||||
-- N: 교집합 오버로드 — 함수 팩토리는 제네릭 U, 객체 팩토리는 비제네릭 any 반환
|
||||
export type StateN<T> = StateData<T> & {
|
||||
|
|
|
|||
|
|
@ -10,13 +10,12 @@ Roblox 엔진에서 동작하는 DOMless UI 렌더러 **quad**를 처음부터
|
|||
지속 가능성 — 빠른 이터레이션보다 정확성/설계 정합성이 우선. 작업 기간은
|
||||
길게 잡음.
|
||||
|
||||
**[2026-08-24 기준] M0(스파이크 검증)/M1(스캐폴딩) 완료, 다음은 M2(반응형
|
||||
코어 — Source/State/Store)** — **⭐ [2026-08-28] M2 착수, 자율 구현 구간 진행
|
||||
중**(규약 `qa-request/pre-implementation-handtrace-round11-brief.md`, 발견
|
||||
`-round11.md`; **[2026-08-29]** 단위 넷 전부 구현 완료·단위 3·4 끝 절차 완료,
|
||||
**[2026-08-31]** 단위 2 `/code-review`·§4 배치 회신 **전량 종결**(열린 문항 0·
|
||||
코드 마커 0) — 남은 마무리는 `.claude/todos.md` 00번이 소스)(마일스톤이
|
||||
넘어갈 때 루트 `CLAUDE.md` 머리말도
|
||||
**⭐ [2026-08-31 기준] M0(스파이크 검증)/M1(스캐폴딩)/M2(반응형 코어 —
|
||||
Source/State/Store) 완료, 다음은 M3(디스패치 엔진)** — M2는 자율 구현
|
||||
구간(규약 `qa-request/m2-implementation-round11-brief.md`, 발견 `-round11.md`)
|
||||
으로 2026-08-28 착수~08-31 종결(단위 넷 구현·감사·리뷰·탐사 완료, §4 문항·
|
||||
코드 마커 0). **M3 착수 전 새 자율 규약 문항은 사용자와 정할 것** —
|
||||
`.claude/todos.md` 00번이 소스(마일스톤이 넘어갈 때 루트 `CLAUDE.md` 머리말도
|
||||
같이 고칠 것 — 같은 상태를 두 곳이 서술하고 있음). **⚠️ [2026-08-24] M2와
|
||||
M3의 번호·순서가 맞바뀌었다** — 열려 있던 마일스톤 순서 문제가 (a) 순서
|
||||
교체로 닫힌 결과다(경위는 `archive/question-resolved.md`의 "마일스톤 경계"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
> **이 파일이 무엇인가**: **[2026-08-28 신설]** M2(반응형 코어) 구현을 자율 구간으로
|
||||
> 돌리기 위한 규약이자, 단위가 끝날 때마다 띄우는 **11라운드 탐사자**에게 그대로
|
||||
> 주는 지시서다. 산출물은 `pre-implementation-handtrace-round11.md`(발견 원문 +
|
||||
> 주는 지시서다. 산출물은 `m2-implementation-round11.md`(발견 원문 +
|
||||
> §4 배치 문항지). 9·10라운드 지시서(`-round9-brief.md`/`-round10-brief.md`)와
|
||||
> 같은 관례이되, **이번 라운드는 종이가 아니라 실제 코드가 감사 도구다** —
|
||||
> 10라운드 지시서가 *"이후로는 M2 구현 자체가 더 나은 감사 도구"*라고 예고한
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
1. **자율로 고치고 넘어가는 것**: `base/` 의사코드를 옮기다 드러나는 오류(순서,
|
||||
빠진 `end`, 이름 불일치, 문서 간 stale), 테스트 실패 중 **"문서가 이미 답을 갖고
|
||||
있는 것"**.
|
||||
→ `H-nnn` 번호를 매겨 `pre-implementation-handtrace-round11.md`에 기록하고
|
||||
→ `H-nnn` 번호를 매겨 `m2-implementation-round11.md`에 기록하고
|
||||
**`base/`와 코드를 같은 커밋에서** 고친다. 묻지 않는다. 번호는 **`H-165`부터**
|
||||
(10라운드 후속이 `H-164`까지 썼다).
|
||||
2. **모아서 올리는 것**: 새 필드·인자·이름·표면·메커니즘이 필요해지는 것, 확정을
|
||||
|
|
@ -106,7 +106,7 @@
|
|||
|
||||
1. 먼저 읽을 것: `CLAUDE.md` → `.claude/conventions.md`(특히 *"새 필드·인자·이름·
|
||||
메커니즘은 발견이지 결정이 아니다"*와 *"하나의 무언가가 두 일을 하고 있지
|
||||
않은지"*) → 이 파일 §1~§3 → `pre-implementation-handtrace-round11.md`(지금까지의
|
||||
않은지"*) → 이 파일 §1~§3 → `m2-implementation-round11.md`(지금까지의
|
||||
발견, 당신의 번호는 마지막 번호 다음부터).
|
||||
2. 대상: 이번 단위의 커밋 범위(`git log`로 확인)에 들어온 `quad-base/src/`·
|
||||
`quad-base/test/`와, 그 코드가 옮겨 적은 `base/` 절.
|
||||
|
|
@ -2017,7 +2017,7 @@ Q4(`EffectHandle` 네 진입점 의사코드 — Observer 것 재사용, `Unsubs
|
|||
`FrameParam<E>` 원소 타입 파라미터.
|
||||
- **`session/2026-08-28-03-m2-unit1-common-base.md`** — **M2 착수.** 다른 에이전트가
|
||||
초안한 자율 구현 규약을 검토해 순서 오류 하나(`EpochMap`이 `Effect` 뒤 → State 본체
|
||||
앞)와 소스 단일화를 고쳐 채택(`qa-request/pre-implementation-handtrace-round11-brief.md`,
|
||||
앞)와 소스 단일화를 고쳐 채택(`qa-request/m2-implementation-round11-brief.md`,
|
||||
세 갈래 분류 / 단위 넷 / 두 층 커밋 게이트, `HUMAN_TODO.md` 2번 닫힘). 첫 단위(공통
|
||||
기반)를 사용자 확인(*"진행하면 될것 같아"*) 뒤 구현 — `Void`/`Brand`(인스턴스 15 +
|
||||
`is*` 11 한 잎 파일)/`LifetimeHandle`(`InitLifetimeHandle` 에러 스텁)/`Ref` 최소형/
|
||||
|
|
@ -2056,5 +2056,8 @@ Q4(`EffectHandle` 네 진입점 의사코드 — Observer 것 재사용, `Unsubs
|
|||
그 §4 회신 2 블록), 보류 하나(`H-205`). **같은 날 회신 3으로 §4 전량 종결** —
|
||||
`H-186` UB 문서화 / `H-198` 사용자 안(스탬프를 fn 직전 + `Get` 재시작 루프 — 계약
|
||||
강화: 모든 `Get`이 최신 수렴값 반환, 무한 케이스 UB) / `H-205` level 3 / 코드 검토
|
||||
`H-208`(`table.clone` 스냅샷)·`H-209`(generalized iteration 전환). 열린 문항 0·마커 0,
|
||||
남은 마무리는 round11 파일명 변경과 M2 종료 보고.
|
||||
`H-208`(`table.clone` 스냅샷)·`H-209`(generalized iteration 전환). 열린 문항 0·마커 0.
|
||||
**같은 날 파일 개명·M2 종결** — `m2-implementation-round11*`로(명명 규약
|
||||
`mN-implementation-roundNN`, 라운드 번호는 마일스톤 가로질러 단순 증가 —
|
||||
`README.md` `qa-request/` 행이 소스), 툴링 픽스 둘(`H-210` rojo 트리 /
|
||||
`H-211` Relate 타입)도 이 세션. 다음 액션은 M3 착수 규약 문항.
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
- `scripts/test.sh`: `spec.*` 수집 + `luau-analyze quad-base/src + spec + mock`.
|
||||
- spec 5개(brand/relate/lifetime/ref/void).
|
||||
|
||||
## 발견 (`qa-request/pre-implementation-handtrace-round11.md`)
|
||||
## 발견 (`qa-request/m2-implementation-round11.md`)
|
||||
|
||||
- `H-165` ① pesde shim은 생성 시점 export 타입만 안다 → `pesde install` 재실행,
|
||||
`project-setup-plan.md`에 둘째 함정으로 기록.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
지시했다. §4 문항 여섯(`H-182`~`H-187`)의 회신은 이 세션 시작 시점에 아직 없음.
|
||||
|
||||
부수 결정 하나 — 사용자: *"이건 pre-implementation 은 아닌듯 하네, 이름은 나중에
|
||||
바꾸자"*. `pre-implementation-handtrace-round11*.md`는 구현 **중** 발견 문서라 이름이
|
||||
바꾸자"*. `m2-implementation-round11*.md`는 구현 **중** 발견 문서라 이름이
|
||||
안 맞는다는 것. **이름 변경은 §4 회신 처리 뒤로 미룸**(문항지·brief와 인용처를 한꺼번에
|
||||
옮겨야 해서) — 아직 안 했고, 잊지 말 것.
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ notification 시점에 파인더 4개가 미완인 채 멈춤. 이번엔 opus
|
|||
|
||||
정확성 8건 전부 실제 코드에 재현 스크립트로 확인. 효율 배치는 리뷰 스스로 "관측된
|
||||
병목에만 구조" 원칙 위반으로 기각, 약한 정리 항목들은 심각도 미달 기각. 발견 상세와
|
||||
처리의 소스는 `qa-request/pre-implementation-handtrace-round11.md`(요약 표
|
||||
처리의 소스는 `qa-request/m2-implementation-round11.md`(요약 표
|
||||
`H-198`~`H-207`, 상세 절 "단위 2 — `/code-review high`") — 여기선 갈래만:
|
||||
|
||||
- **① 여섯**(같은 커밋에서 반영): `H-199`(nil dep 조용한 탈락 — `collectDeps` + error),
|
||||
|
|
@ -115,3 +115,14 @@ notification 시점에 파인더 4개가 미완인 채 멈춤. 이번엔 opus
|
|||
- 회신 3 감사 1라운드(확실 1·의심 1) 반영: `state-epoch-plan.md` H-85 절의 옛 계약
|
||||
문장("다음 Get이 반드시 재계산")을 H-198 재시작 루프로 정정, `todos.md` 00의 H-번호
|
||||
나열을 소스 포인터로 축소(머리말 규칙).
|
||||
|
||||
## 같은 날 후속 4 — round11 파일 개명과 명명 규약, M2 종결
|
||||
|
||||
사용자 선택 (2): `pre-implementation-handtrace-round11*` → **`m2-implementation-round11*`**.
|
||||
**명명 규약 확정**: `mN-implementation-roundNN` — 라운드 번호는 마일스톤을 가로질러
|
||||
**단순 증가**, 마일스톤 접두가 소속을 담는다. 사용자 근거: *"m3 을 진행하다 m2 에
|
||||
하자가 있음을 확인하면 다시 m2 로 올라가 round 가 진행되다 돌아오는 경우도 있을것 …
|
||||
접두가 둘 다 있는게 정보를 온전히 담아줘"* — 규약 본문은 `README.md` `qa-request/` 행.
|
||||
`git mv` + 전 코퍼스 치환 22곳(잔존 0), round1~10의 `pre-implementation-*` 옛 이름은
|
||||
실제로 구현 전 라운드라 그대로. CLAUDE.md/project-context.md 머리말을 "M0~M2 완료,
|
||||
다음은 M3"로, todos 00을 종결로. **M2 종결** — 다음 액션은 M3 착수 규약 문항.
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
(`.claude/question.md`, `luau-test/STATUS.md` 등).
|
||||
|
||||
|
||||
00. **⭐⭐⭐ [2026-08-28] M2 착수 — 자율 구현 구간 진행 중.** 규약은
|
||||
`qa-request/pre-implementation-handtrace-round11-brief.md`(세 갈래 분류 /
|
||||
00. **⭐⭐⭐ [2026-08-28 착수 → 2026-08-31 종결] M2 자율 구현 구간 — 완료.** 규약은
|
||||
`qa-request/m2-implementation-round11-brief.md`(세 갈래 분류 /
|
||||
단위 넷 / 관여 시점), 발견과 배치 문항은 `-round11.md`(§4 표가 사용자가
|
||||
읽을 유일한 자리). **진행 상태의 소스는 `ROADMAP.md` M2 체크박스**, 여기서
|
||||
세지 않는다. **[2026-08-29 새벽 기준]** 단위 1·2 완료(단위 2 감사 6라운드 수렴),
|
||||
|
|
@ -18,9 +18,14 @@
|
|||
회신 블록들이 소스 — 여기서 세지 않는다), **§4 열린 문항 0·코드 마커 0** —
|
||||
진행 원문은
|
||||
`session/2026-08-28-03-m2-unit1-common-base.md` 마지막 절과
|
||||
`session/2026-08-31-01-unit2-code-review.md`. 남은 할 일:
|
||||
`pre-implementation-handtrace-round11*` 파일명 변경(사용자 2026-08-31 — 구현 중
|
||||
문서라 pre-implementation이 안 맞음; 새 이름은 사용자와 정할 것)과 M2 종료 보고.
|
||||
`session/2026-08-31-01-unit2-code-review.md`. **[2026-08-31] 파일명 변경까지
|
||||
완료** — 옛 `pre-implementation-handtrace-round11*`을 `m2-implementation-round11*`로
|
||||
개명(구현 중 문서라 옛 이름이 안 맞았음; 명명 규약 `mN-implementation-roundNN`은
|
||||
`.claude/README.md` `qa-request/` 행이 소스 — 라운드 번호는 마일스톤을 가로질러
|
||||
단순 증가). M2 종료 보고도 전달 — **M2 종결.**
|
||||
**다음 액션: M3(디스패치 엔진) 착수 — 자율 구현 규약을 M2처럼 쓸지, 단위를
|
||||
어떻게 자를지 등 새 규약 문항을 만들어 사용자와 정할 것**(2026-08-29
|
||||
체크포인트의 "M3은 새 규약 문항" 그대로).
|
||||
아래는 착수 전(2026-08-26) 서술:
|
||||
|
||||
**[2026-08-26] 8라운드까지 전부 처리 완료 — M2 착수 게이트가 0이다.**
|
||||
|
|
|
|||
14
CLAUDE.md
14
CLAUDE.md
|
|
@ -1,13 +1,13 @@
|
|||
# CLAUDE.md
|
||||
|
||||
Roblox 엔진용 DOMless UI 렌더러 **quad**를 처음부터 다시 짜는 프로젝트.
|
||||
**[2026-08-24 기준] M0(스파이크 검증)/M1(스캐폴딩)까지 완료, 다음은
|
||||
M2(반응형 코어 — Source/State/Store)** — **⭐ [2026-08-28] M2 착수, 자율 구현
|
||||
구간 진행 중**(규약은 `.claude/qa-request/pre-implementation-handtrace-round11-brief.md`,
|
||||
발견·배치 문항은 `-round11.md`; **[2026-08-29]** 단위 넷 전부 구현 완료 — `ROADMAP.md` M2
|
||||
체크박스 전부 `[x]`, 단위 3·4 끝 절차 완료; **[2026-08-31]** 단위 2 `/code-review`와
|
||||
§4 배치 회신 **전량 종결**(열린 문항 0·코드 마커 0) — 남은 마무리(파일명 변경,
|
||||
M2 종료 보고)는 `.claude/todos.md` 00번이 소스). **⚠️ [2026-08-24] M2와 M3의
|
||||
**⭐ [2026-08-31 기준] M0(스파이크 검증)/M1(스캐폴딩)/M2(반응형 코어 —
|
||||
Source/State/Store)까지 완료, 다음은 M3(디스패치 엔진)** — M2는 자율 구현
|
||||
구간(규약 `.claude/qa-request/m2-implementation-round11-brief.md`, 발견·배치
|
||||
문항 `-round11.md`)으로 돌아 2026-08-28 착수~08-31 종결: 단위 넷 구현·감사·
|
||||
리뷰·탐사 완료, `ROADMAP.md` M2 체크박스 전부 `[x]`, §4 문항·코드 마커 0.
|
||||
**M3 착수 전에 새 자율 규약 문항을 사용자와 정할 것**(`.claude/todos.md`
|
||||
00번이 소스). **⚠️ [2026-08-24] M2와 M3의
|
||||
번호·순서가 맞바뀌었다** — 예전엔 M2=디스패치, M3=반응형이었는데 의존이
|
||||
한 방향(디스패치 → 반응형)이라 반응형을 먼저 짓기로 확정했다. 그래서
|
||||
**2026-08-24 이전에 쓰인 `session/`·`archive/`·`qa-request/` 문서의
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ git.qwreey.moe에 제한된 계정 생성). 로컬 git 저장소는 이미 초
|
|||
## 2. ~~자율 작업 루프/스케줄 설정~~ **[해소됨, 2026-08-28]**
|
||||
|
||||
**사용자가 M2를 세션 안 자율 구현 구간으로 확정**했다 — 규약은
|
||||
`.claude/qa-request/pre-implementation-handtrace-round11-brief.md`, 요지는
|
||||
`.claude/qa-request/m2-implementation-round11-brief.md`, 요지는
|
||||
`.claude/conventions.md`의 "M2 자율 구현 규약" 항목. cron/`/schedule`은 안 쓴다
|
||||
(사용자 개입 지점은 단위가 끝날 때 `-round11.md` §4 표를 배치로 회신하는 것뿐).
|
||||
아래는 해소 전 원문.
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ Luau 코드로 부딪혀본 적 없는 세 가지**를 던지는 코드로 검
|
|||
> 지켜집니다.
|
||||
>
|
||||
> **⭐ [2026-08-28 착수] M2는 자율 구현 구간으로 돕니다** — 규약(세 갈래 분류,
|
||||
> 단위 넷, 관여 시점)은 `.claude/qa-request/pre-implementation-handtrace-round11-brief.md`가
|
||||
> 단위 넷, 관여 시점)은 `.claude/qa-request/m2-implementation-round11-brief.md`가
|
||||
> 소스, 발견은 `-round11.md`. 단위 순서는 이 문서의 체크박스 순서 그대로이되
|
||||
> **`H-97`의 mock 생명주기 4종은 첫 단위(공통 기반)로 당겨** 짠다 — 그게 없으면
|
||||
> 두 번째 단위부터 전파 루프 테스트가 안 돈다.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
`archive/brand-shared-registry-reversed.md`).
|
||||
|
||||
Every brand instance lives in this leaf file (M2 first-unit plan,
|
||||
`qa-request/pre-implementation-handtrace-round11-brief.md` §6): `EpochBrand`
|
||||
`qa-request/m2-implementation-round11-brief.md` §6): `EpochBrand`
|
||||
is shared by `Source`/`Ref`/`GateNode`, so keeping the instances per type
|
||||
module would force a circular require. Each *type* still registers only
|
||||
into its own brand at its own construction sites; subtype relations are
|
||||
|
|
|
|||
Loading…
Reference in a new issue