quad/.claude/session
qwreey 9622ccd3e9
design: ROADMAP 마일스톤 경계 재편 + 전반 stale 정리
`ROADMAP.md` 전문을 `base/`의 현재 확정과 대조한 전반 점검. 사용자 판단으로
마일스톤을 각주가 아니라 체크박스째 재편했다.

## 마일스톤 이동 (M3/M7 → M2)

`EpochMap.luau` / `state:Gate`+`GateNode` / `Blocker.luau` / `None`+
`Dispatch/None.luau`. 넷 다 M2가 실제로 호출하는데 각주로만 예고돼 있었고,
`GateNode`는 체크박스 자체가 없어 M2를 훑는 구현자에게 항목으로 보이지
않았다. `LifetimeHandle` 인터페이스를 M8→M2로 옮겼던 전례와 같은 처리.
`Blocker`는 `GateNode` 위의 정책으로 얹는다(노드를 다시 만들지 말 것).

##  새 미결 — M2와 M3의 의존이 양방향

이동하다 드러났다. `Dispatch.setLength`가 `State<number>`, `setOffsetSource`가
`Source<number>`를 받고 `recompute`가 `offset:Set()`을 부르며, `Dispatch.drive`
자신도 배치 등록을 Blocker로 게이팅한다 — 즉 M2는 `Source.luau`/`State.luau`
없이 구현이 안 된다. 설계가 아니라 마일스톤 순서 문제라, 선택지 셋((a) 순서
교체 / (b) M2 분할 — 경계선은 `drive` / (c) 유지)을 `question.md` 2번으로
신설하고 유일한 소스로 지정했다. `HUMAN_TODO.md` 11번이 사용자 진입점.

## 모순 정정

- `Dispatch.drive` 순회 구현은 두 패스가 아니라 단일 일반화 `for`(`F-4-1`).
  "배열→해시 먼저"는 그 루프가 지키는 계약. 코퍼스의 "두 패스"는 본체 루프의
  옛 이름으로 정리(시점 표기는 유지, 용어 각주 신설). 따름정리로 "base는
  언어 동작에 안 기댄다"는 서술이 거짓이 됐고, 재작성될 스파이크 `01`이
  검증할 것도 언어 동작 자체로 바뀐다
- 물리 조작 주입 op 이름은 `native*` 확정(옛 가칭 `mountInst`/`unmountInst`/
  `disposeInst` 폐기). 단건 경로 순서는 `setOffsetSource` → `nativeInsert` →
  `setLength` → `recompute` — 역전 배너를 스스로 단 절 안에 옛 "부기 먼저"
  주장이 두 문단 살아 있었다
- M2 첫 체크박스가 하강 diff와 폐기된 옛 모델을 한 불릿에서 둘 다 서술

## 상태 표시

- `[x]`는 "짜야 할 코드"만. 설계 확정은 `### 확정된 것` 절 또는 전용
  불릿으로 분리(M3/M6/M11) — 이제 `[x]`는 M0/M1에만 남는다
- M0에 `### 재검증 대기` 절 신설 — 설계 변경으로 무효화된 스파이크들이
  어느 체크박스에도 없어 잊히기 쉬웠다(현황의 소스는 `luau-test/STATUS.md`)
- 주입 op 개수 하드코딩을 네 문서에서 걷고 `architecture.md`의
  `EngineOps.luau` 줄 하나로 단일화(그 줄에 빠져 있던 시간 op도 채움)

## 검증

`quad-doc-auditor` 10라운드(각도를 매번 바꿔 34건) + 사용자가 돌린
`/code-review high` 9건. `doc-check.py` ERROR 0. 경위와 실측된 실패 패턴은
`.claude/session/2026-08-22-01-roadmap-milestone-review.md`.

Claude-Session: https://claude.ai/code/session_01TiW21rnti9SbLgF6twtn6D

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-22 03:19:13 +09:00
..
2026-08-04-01-roadmap-handoff.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-06-01-quad-debug-design.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-06-02-event-self-rbvm-corpus.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-06-03-docsite-source-state.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-06-04-pre-implementation-audit.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-01-with-new-node.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-02-modifier-apply.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-03-preref.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-04-corpus-reorg.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-05-override-peek-isstate.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-06-ref-preref-api.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-07-state-apply-effect-subscribe.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-08-none-sentinel-dispatch-brand.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-09-corpus-audit-createdref.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-07-10-none-vs-nil-order.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-08-01-relate-bindlifetime.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-08-02-dispatch-singleton-naming.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-08-03-tag-redesign-dispatch-chain.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-08-04-overridden-naming.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-08-05-terminology-round.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-09-01-canbound-modifier-error.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-09-02-corpus-audit-archive-move.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-09-03-slot-crud-list.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-09-06-length-offset-unbindlifetime.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-09-07-list-observer-lazy.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-09-08-midreview-defects.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-09-12-luau-test-spikes.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-10-01-slot-add-return-index.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-10-02-dynamic-children-ub.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-10-03-tween-redesign.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-10-04-onchange-key.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-01-compute-trailing-args.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-02-trailing-deps-positional.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-03-previous-before-pack.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-04-slot-list-layoutorder-index.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-05-slot-doc-framing.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-06-slot-single-nesting.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-07-reactive-raw-elements.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-08-claude-md-restructure.md chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries 2026-08-11 14:40:43 +09:00
2026-08-11-09-attribute-group-primitive.md decide(attribute): group Attribute(...) primitive, AttributeKey rename, weak-cache identity 2026-08-11 18:22:54 +09:00
2026-08-12-01-tween-shape-finalized.md decide(tween): finalize option shape, override policy, relation-slot value 2026-08-12 11:02:13 +09:00
2026-08-12-02-animate-confirmed-and-or-audit.md decide(tween): finalize Animate combinator, fix and/or falsy-value bug 2026-08-12 11:14:08 +09:00
2026-08-12-03-cananimate-luau-syntax-note.md decide(tween): add Animate CanAnimate field, document Luau syntax facts 2026-08-12 11:17:49 +09:00
2026-08-12-04-compute-self-get-audit.md fix(docs): missing :Get() on :Compute callback args across base docs 2026-08-12 11:22:26 +09:00
2026-08-12-05-operator-sugar-plan.md decide(operator): add Operator sugar plan, unify combinators on :Apply 2026-08-12 11:54:09 +09:00
2026-08-12-06-tween-completed-bookkeeping-promoted.md decide(tween): confirm natural-completion bookkeeping is left as-is, promote to base/ 2026-08-12 12:19:49 +09:00
2026-08-12-07-preref-single-use-no-cancel.md decide(bind-system): PreRef is single-use, no cancel concept, reuse errors 2026-08-12 13:26:46 +09:00
2026-08-12-08-ref-retract-tagged-pattern.md decide(bind-system): Ref retract mirrors TagHandler, non-nilable T stays valid 2026-08-12 13:44:31 +09:00
2026-08-12-09-slot-retract-same-pattern.md decide(slot): store-bound Slot rebind uses Relate identity check, not retract 2026-08-12 13:49:58 +09:00
2026-08-12-10-attribute-name-ownership.md decide(attribute): per-name ownership via private rawNew keys, not a new registry 2026-08-12 15:23:24 +09:00
2026-08-12-11-retract-always-fires-correction.md decide(bind-system): retract fires on every re-dispatch, not just type changes 2026-08-12 16:13:25 +09:00
2026-08-12-12-slot-owner-relate-retractunder-args.md decide(slot): track slot->inst ownership directly instead of position diffing 2026-08-12 16:20:29 +09:00
2026-08-12-13-slot-gc-cycle-fix.md decide(slot): break the kSlotMap/slotOwner mutual strong-reference cycle 2026-08-12 16:37:40 +09:00
2026-08-12-14-luau-no-ephemeron-confirmed.md decide(relate): confirm and document that Luau has no ephemeron tables 2026-08-12 16:42:56 +09:00
2026-08-12-15-slot-in-slot-relate-scope-tag-splice-additions.md fix(slot): Splice가 vararg인 진짜 이유는 T가 opaque 제네릭이라서 2026-08-12 17:14:15 +09:00
2026-08-12-16-corpus-audit-attribute-retract-slot-owner.md fix(attribute,slot): retract 전면 재설계, 소유권 레지스트리 통합, 코퍼스 감사 2026-08-12 18:39:45 +09:00
2026-08-12-17-priority1-audit-resolved.md decide(dispatch,modifier,store): pre-implementation-audit 우선순위1 마지막 넷 해소, 누락 스파이크 보강 2026-08-12 20:24:04 +09:00
2026-08-12-18-framework-comparison-fixables-closed.md decide(state,operator,ref): use-after-destroy/동적With 의도적 비지원 확정, Operator 카탈로그 외부 리서치 반영, State 이름 최종 확정 2026-08-12 21:14:15 +09:00
2026-08-12-19-operator-sugar-external-research.md decide(state,operator,ref): use-after-destroy/동적With 의도적 비지원 확정, Operator 카탈로그 외부 리서치 반영, State 이름 최종 확정 2026-08-12 21:14:15 +09:00
2026-08-12-20-state-name-final-usedaftedestroy-scoped-out.md decide(state,operator,ref): use-after-destroy/동적With 의도적 비지원 확정, Operator 카탈로그 외부 리서치 반영, State 이름 최종 확정 2026-08-12 21:14:15 +09:00
2026-08-12-21-naming-clarity-pipe-compute-with-clone-contrast.md decide(state,operator,ref): use-after-destroy/동적With 의도적 비지원 확정, Operator 카탈로그 외부 리서치 반영, State 이름 최종 확정 2026-08-12 21:14:15 +09:00
2026-08-13-01-gcconn-audit-relate-cycle-spike-readme-sync.md audit(lifecycle): partial gcconn trick verification, close Relate cycle spike gap 2026-08-13 10:09:47 +09:00
2026-08-13-02-haskell-comparison-dispatch-reentrant-bug.md fix(dispatch): State<State<T>> 재진입 디스패치 체인 파손 버그 발견·수정, Operator Alternative 후보 신설 2026-08-13 10:49:34 +09:00
2026-08-13-03-v1-newindex-typo-scoped-out.md decide(v1-compat): objectListClass.__newIndex 오타 기능, v2 무관으로 스코프 아웃 2026-08-13 10:55:27 +09:00
2026-08-13-04-blind-spot-audit-checkpoint-handlers.md design(dispatch): 사각지대 손 트레이싱 라운드 + Dispatch 인덱스 기반 전면 재설계 2026-08-13 14:24:48 +09:00
2026-08-13-05-dispatch-index-based-redesign.md design(dispatch): 사각지대 손 트레이싱 라운드 + Dispatch 인덱스 기반 전면 재설계 2026-08-13 14:24:48 +09:00
2026-08-13-06-commit-audit-dispatch-redesign-bugs.md docs(audit): 스파이크 상태판 신설 + 코퍼스 전반 모순·stale 감사 정정 2026-08-13 16:48:32 +09:00
2026-08-13-07-corpus-audit-six-rounds.md docs(audit): 6라운드 코퍼스 감사 수렴 — 검증 라운드 마무리 + 세션 기록 2026-08-13 17:31:20 +09:00
2026-08-13-08-direct-verification-audit.md docs(session): 8차 감사 세션 기록 — 직전 6라운드 감사의 순차 직접 재검증 2026-08-13 17:56:09 +09:00
2026-08-13-09-structure-and-guardrails.md docs(session): 9차 세션 기록 — 구조 재편 3건 + 재발 방지 도구 2026-08-13 18:14:06 +09:00
2026-08-13-10-corpus-audit-parallel-agents.md docs(audit): 10차 세션 — 병렬 에이전트 코퍼스 감사, 부정확성 7건 수정 2026-08-13 18:32:53 +09:00
2026-08-13-11-corpus-audit-sequential-direct.md docs(audit): 11차 세션 — 순차 직접 감사, 부정확성 4건 수정 2026-08-13 18:52:10 +09:00
2026-08-13-12-corpus-audit-sequential-no-issues.md docs(audit): 12차 세션 — 순차 직접 감사 반복, 새 문제 없음 확인 2026-08-13 19:04:30 +09:00
2026-08-13-13-type-recursion-limit-resolved.md docs(type): 0-Y 해소 — 재귀 제네릭 반환은 Luau 상위 한계로 확정, typing-limits.md 신설 2026-08-13 22:08:51 +09:00
2026-08-13-14-attribute-getkey-dispatch-diff-reflected.md fix(docs): 리뷰 라운드 — 의사코드 결함 3건 + doc-check 사각지대 수정 2026-08-14 00:29:25 +09:00
2026-08-14-01-component-fallback-plan.md docs(research): 컴포넌트 에러 격리 유틸 Fallback 백로그 신설 2026-08-14 01:17:40 +09:00
2026-08-14-02-fallback-xpcall-spike-verified.md docs(research): Fallback의 xpcall+traceback 메커니즘 실측 확인 2026-08-14 02:54:37 +09:00
2026-08-14-03-fallback-traceback-promoted.md docs(base): Fallback/Traceback 승격 — research/에서 base/fallback-plan.md로 2026-08-14 04:32:29 +09:00
2026-08-14-04-processedpreref-postref-symmetry.md fix(lifecycle): canExecute/unbindLifetime을 value 1-인자로 정정, Subscribed 오염 제거 2026-08-14 04:03:49 +09:00
2026-08-14-05-canexecute-value-scoped.md fix(lifecycle): canExecute/unbindLifetime을 value 1-인자로 정정, Subscribed 오염 제거 2026-08-14 04:03:49 +09:00
2026-08-14-06-lifecycle-hooks-plan.md docs(session): 생명주기 훅 세션 로그 신설, CLAUDE.md 세션 번호 재조정 2026-08-14 04:08:48 +09:00
2026-08-14-07-store-source-split-shorthand-tween.md docs(base): bind/store/state 3단계 분할, UI 숏핸드 Tween 지원, existing-instance-bind 기각 2026-08-14 05:10:49 +09:00
2026-08-14-08-debounce-throttle-backlog.md docs: Debounce/Throttle 백로그 신설 + "emit은 항상 전파" base 역전 정정 2026-08-14 05:22:06 +09:00
2026-08-14-09-postref-confirmed.md docs(base): PreRef/PostRef 계열 안 fire 순서 미보장안 철회 — 배열 index 순서 보장 유지 2026-08-14 05:54:05 +09:00
2026-08-14-10-dispose-scope-resolved.md docs(base): dispose(value) 시그니처/범위 확정 — question.md 0-B 해소 2026-08-14 06:18:28 +09:00
2026-08-14-11-corpus-audit-canbound-resplit.md docs: 코퍼스 전체 감사 + canBound/canExecute 재분리, Ref 0-W 해소 2026-08-14 11:03:24 +09:00
2026-08-14-12-observer-effect-leaf-dedup.md docs(base): Observer/Effect Leaf dedup 추가 + Tag/Attribute 자기등록 모델 역전 2026-08-14 12:32:17 +09:00
2026-08-14-13-recursive-acronym-brainstorm.md docs: quad 재귀 약어 브레인스토밍 research 문서 신설 2026-08-14 13:58:01 +09:00
2026-08-14-14-corpus-audit-doc-include-backlog.md docs: 문서 stale 감소용 include 도구 백로그 신설(doc-include.py) 2026-08-14 22:56:21 +09:00
2026-08-15-01-typeof-recursive-generic-workaround.md docs: 콜백 파라미터 무주석 추론 전방위 재시도, code-review 2회전 정합성 수정 2026-08-15 19:36:44 +09:00
2026-08-15-02-try-callback-investigation-and-review-fixes.md docs: 콜백 파라미터 무주석 추론 전방위 재시도, code-review 2회전 정합성 수정 2026-08-15 19:36:44 +09:00
2026-08-16-01-subagent-audit-and-claudemd-split.md docs: CLAUDE.md 4분할(매 세션 로드 1537→354줄), 워크플로 가짜 초록불 수정 2026-08-16 01:35:02 +09:00
2026-08-16-02-audit-tooling-verification-and-first-real-run.md docs: 감사 루프 4라운드에서 중단(사용자 결정) + 다음 세션 핸드오버 정리 2026-08-16 04:05:05 +09:00
2026-08-16-03-doc-check-section-convention.md tooling: 절 인용 규약 신설 + doc-check 절 참조를 ERROR 게이트로 승격 2026-08-16 10:47:29 +09:00
2026-08-18-01-pre-implementation-qa-applied.md tooling: 감사 루프를 병렬 다패스에서 순차 1패스/턴으로 재설계 2026-08-18 19:45:36 +09:00
2026-08-19-01-new-initxxx-composition-relate-guard.md design: New()의 내부 구성 확정 — InitXxx 팩토리 체이닝 + Relate 기반 멱등 Init 가드 2026-08-19 01:16:26 +09:00
2026-08-19-02-detach-naming-and-placement.md design: PopOnly 가칭을 Detach로 리네임 확정 + 공개 표면 위치 확정 2026-08-19 01:46:18 +09:00
2026-08-19-03-debounce-throttle-final-close.md design: Debounce/Throttle 마지막 판단 대기 4개 닫고 base/로 승격 2026-08-19 02:11:11 +09:00
2026-08-19-04-pesde-migration-and-project-setup.md tooling: 에디터 Luau 솔버 설정 확정 — luau-lsp 설치해 새 솔버 필요성 실측 2026-08-19 14:37:17 +09:00
2026-08-19-04-qa-round4-questionnaire.md qa: 구현 전 QA 4라운드 문항지 — base/ 전 문서 확정 주장 전수 문항화 2026-08-20 00:33:49 +09:00
2026-08-19-05-mise-migration-and-selene-linter.md tooling: rokit → mise 전환 + selene 린터 도입 (roblox-project-example 벤치마킹) 2026-08-19 15:09:35 +09:00
2026-08-19-06-runinit-redesign-and-darklua-precision.md design: RunInit 재설계(함수를 릴레이션 키로) + darklua 경계 실측 정밀화 2026-08-19 16:17:08 +09:00
2026-08-19-07-quad-types-package-addplugin-checkversion.md design: quad-types 패키지 신설 — AddPlugin<Self,P> + CheckedQuad<T> 실측 설계 2026-08-19 17:09:16 +09:00
2026-08-19-08-type-version-check-package-extraction.md design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
2026-08-19-09-handover-prep-roadmap-status-sync.md tooling: 핸드오버 준비 — session-summary.md 색인 공백 + ROADMAP/CLAUDE.md stale 정정 2026-08-19 20:47:31 +09:00
2026-08-20-01-qa-round4-response-processing.md qa: QA 4라운드 followup — 회신 처리 결과 + 재질문 정리 2026-08-20 00:57:19 +09:00
2026-08-21-01-detach-keygone-owned-and-attachslot-decomposition.md design: Epoch/EpochMap/Brand 전면 승격 + 해소 기록 flatten 2026-08-22 01:27:18 +09:00
2026-08-21-02-qa-round5-and-gate-epoch-research.md docs: 핸드오버 — Epoch/Brand 제안 승격을 다음 세션 첫 작업으로 지정 2026-08-21 23:32:48 +09:00
2026-08-21-03-epoch-brand-promotion-and-flatten.md design: Epoch/EpochMap/Brand 전면 승격 + 해소 기록 flatten 2026-08-22 01:27:18 +09:00
2026-08-22-01-roadmap-milestone-review.md design: ROADMAP 마일스톤 경계 재편 + 전반 stale 정리 2026-08-22 03:19:13 +09:00