From 2de2f99cc41d6342d716a231c0670fb37372d385 Mon Sep 17 00:00:00 2001 From: qwreey-agent-selene Date: Wed, 19 Aug 2026 14:37:17 +0900 Subject: [PATCH] =?UTF-8?q?tooling:=20=EC=97=90=EB=94=94=ED=84=B0=20Luau?= =?UTF-8?q?=20=EC=86=94=EB=B2=84=20=EC=84=A4=EC=A0=95=20=ED=99=95=EC=A0=95?= =?UTF-8?q?=20=E2=80=94=20luau-lsp=20=EC=84=A4=EC=B9=98=ED=95=B4=20?= =?UTF-8?q?=EC=83=88=20=EC=86=94=EB=B2=84=20=ED=95=84=EC=9A=94=EC=84=B1=20?= =?UTF-8?q?=EC=8B=A4=EC=B8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit luau-lsp 1.69.0을 pesde/rojo와 같은 방식으로 직접 설치해 --flag:LuauSolverV2=true/false로 spike 08을 대조(옛 솔버 에러 3건 vs 새 솔버 1건) — HUMAN_TODO 6번이 사람에게 넘겨뒀던 "실제 에디터에서 확인"을 CLI 분석 모드로 대신 검증. quad/.vscode/settings.json에 enableNewSolver:true 반영, rokit.toml에 luau-lsp 핀 추가. 부수로 typing-limits.md 1번의 핵심 주장(0 진단으로 조용히 새는 것)이 Luau 0.734에서도 그대로 재현됨을 별도로 재확인(정정 불필요). Co-authored-by: qwreey --- .claude/base/project-setup-plan.md | 12 +++---- .claude/base/typing-limits.md | 14 ++++---- ...19-04-pesde-migration-and-project-setup.md | 26 ++++++++++++++- .vscode/settings.json | 3 ++ HUMAN_TODO.md | 32 +++++++++++-------- rokit.toml | 9 +++--- 6 files changed, 65 insertions(+), 31 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.claude/base/project-setup-plan.md b/.claude/base/project-setup-plan.md index b9ce870..2b69c54 100644 --- a/.claude/base/project-setup-plan.md +++ b/.claude/base/project-setup-plan.md @@ -64,12 +64,12 @@ quad/ ## 툴체인 — `rokit.toml` `initreq/vide`(참고 레포)의 `rokit.toml` 선례를 따르되 wally 항목은 -뺐다. **[2026-08-19] 이 세션이 `/code/.local/bin`에 pesde 바이너리를 -직접 다운로드해 설치·검증 완료** — `pesde 0.7.3`, `rokit.toml`의 핀 -(`pesde-pkg/pesde@0.7.3+registry.0.2.3`)과 정확히 일치. `rojo` 핀은 -GitHub 릴리스 페이지 조회로만 확인했고 실제 설치·실행 검증은 안 함(Rojo는 -Studio 연동이 필요해 `HUMAN_TODO.md` 1번과 같은 처지) — 버전이 오래되면 -`rokit add rojo-rbx/rojo`로 다시 확인할 것. +뺐다. **[2026-08-19, 같은 날 후속 세션에 전부 완료]** `pesde`/`rojo`/ +`luau-lsp` **셋 다** `/code/.local/bin`에 직접 다운로드해 설치·검증 +완료 — 각각 `0.7.3`/`7.7.0`/`1.69.0`, `rokit.toml`의 핀과 정확히 일치. +`rokit` 자체는 이 샌드박스에 없어 `rokit install`로 한 번에 검증한 건 +아니고 바이너리를 개별 다운로드해 버전을 대조한 것 — 실제 `rokit` +워크플로 자체의 검증은 여전히 사람의 로컬 환경 몫. ## require 구조 — `@self`가 필수인 이유 diff --git a/.claude/base/typing-limits.md b/.claude/base/typing-limits.md index 6c2e937..7492809 100644 --- a/.claude/base/typing-limits.md +++ b/.claude/base/typing-limits.md @@ -423,12 +423,14 @@ function은 구체 타입에 대해서만 동작하는 실행 모델이라, RFC ## 8. 미해결 / 추적 중 -- **에디터(`luau-lsp`)의 솔버 설정** — `luau-analyze` CLI는 새 솔버가 - 기본값이지만 `luau-lsp`는 **옛 솔버가 기본값**(`LuauSolverV2=false`)이라 - 같은 코드에 다른 진단이 나옵니다. 새 솔버로 맞추려면 - `"luau-lsp.fflags.enableNewSolver": true`. **M0 실착수 때 실제 에디터 - 환경에서 확정할 것** — 옛 솔버는 1번 패턴을 아예 거부하므로 사실상 - 새 솔버 외에 선택지가 없어 보이지만, 실환경에서 확인 필요. +- **[2026-08-19 설정 완료]** 에디터(`luau-lsp`)의 솔버 설정 — `luau-analyze` + CLI는 새 솔버가 기본값이지만 `luau-lsp`는 **옛 솔버가 기본값** + (`LuauSolverV2=false`)이라 같은 코드에 다른 진단이 남. `luau-lsp` + 바이너리(1.69.0)를 직접 설치해 `luau-lsp analyze + --flag:LuauSolverV2=true/false`로 실측 — 새 솔버가 필요하다는 결론 + 재확인, `quad/.vscode/settings.json`에 `"luau-lsp.fflags.enableNewSolver": + true`를 반영·커밋 완료(`tbox`도 같은 설정 확인). 실제 VSCode 세션에서 + 이 설정이 반영되는지 육안 확인만 사람 몫으로 남음(`HUMAN_TODO.md` 6번). - **`luau-lang/luau#2380`** — 닫히면 1번 관례 재검증(③ 포함). - **`state:With(...)`/`state:Apply(factory)`에 1번 ③(`typeof`) 개별 실측** — `Compute`에서만 확인됐고, base pseudocode에 실제로 반영할 diff --git a/.claude/session/2026-08-19-04-pesde-migration-and-project-setup.md b/.claude/session/2026-08-19-04-pesde-migration-and-project-setup.md index 26a30b3..cdf78aa 100644 --- a/.claude/session/2026-08-19-04-pesde-migration-and-project-setup.md +++ b/.claude/session/2026-08-19-04-pesde-migration-and-project-setup.md @@ -119,4 +119,28 @@ sourcemap`/`rojo build`를 돌려본 결과, **symlink를 투명하게 따라가 `HUMAN_TODO.md` 1번). 임시 검증 파일(`test-symlink-check.project.json`)은 확인 후 삭제, 결과만 `project-setup-plan.md`에 반영. -다음: (3) 스파이크 `13`, (4) 에디터 솔버 설정. +**(3) 완료** — `13-type-ref-preref-subtype.luau`를 타입 전용으로 남기고 +(`PostRef`도 `Ref`를 만족하는지 추가), 런타임 절반은 신규 +`22-runtime-ref-preref-postref-brand.luau`로 분리(A의 더미 스텁이 B +실행을 막던 문제 해결). `isPreRef`/`isPostRef`가 서로 배타적 형제이고 +Leaf 핸들러 흉내가 셋을 정확히 갈라냄을 확인. 둘 다 `done/`. + +**(4) 완료** — `luau-lsp` 바이너리(1.69.0)도 같은 방식으로 +`/code/.local/bin`에 직접 설치. `luau-lsp analyze +--flag:LuauSolverV2=true/false`로 spike `08`(재귀 제네릭 패턴)을 +비교한 결과 새 솔버 필요성 재확인(옛 솔버는 같은 패턴에 에러 3건, +새 솔버는 1건). `quad/.vscode/settings.json`에 +`enableNewSolver: true` 반영·커밋. 부수로 typing-limits.md §1의 핵심 +주장("`local s = n:Compute(fn); local wrong: number = s:Get()`가 0 +진단으로 통과") 자체도 Luau 0.734에서 여전히 재현됨을 별도 최소 +repro로 재확인(`s`가 `Unifiable`로 새는 것, `wrong` 줄은 진단 +0건 — base 문서 정정 불필요, 그대로 유효함만 재확인). tbox가 쓰던 +`LuauDoNotExportBrokenTypeFunction` override는 quad의 현재 type +function 스파이크(`16`/`21`)에서 유무 차이가 없어 채택 안 함. +`HUMAN_TODO.md` 6번/`typing-limits.md` §8 갱신, `rokit.toml`에 +`luau-lsp` 핀 추가. + +**남은 사람 몫**: VSCode를 실제로 열어 `.vscode/settings.json` 설정이 +반영됐는지 육안 확인(HUMAN_TODO 6번), Studio 실물 동기화(HUMAN_TODO +1번, 계정 분리 대기). 이번 라운드로 이번 대화의 4개 후속 검증 항목은 +전부 닫힘. diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e7ad09c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "luau-lsp.fflags.enableNewSolver": true +} diff --git a/HUMAN_TODO.md b/HUMAN_TODO.md index 9e04c29..9943359 100644 --- a/HUMAN_TODO.md +++ b/HUMAN_TODO.md @@ -124,23 +124,27 @@ B(Attribute의 Instance 참조 타입)/C(CollectionService 태그 왕복) — `architecture.md`의 해당 절을 갱신하고 기존 코드의 `const` 전환 범위를 같이 상의할 것. -## 6. **[2026-08-13 신설, 안 막음]** 에디터의 Luau 솔버 설정 확인 +## 6. ~~에디터의 Luau 솔버 설정 확인~~ **[2026-08-19 설정 완료 — VSCode 재시작만 확인해주면 됨]** -`luau-analyze` CLI는 **새 솔버가 기본값**이지만 에디터가 쓰는 -`luau-lsp`는 **옛 솔버가 기본값**(`LuauSolverV2=false`)이라 **같은 코드에 -다른 진단이 나옵니다** — 이번 세션에 실제로 겪은 혼선의 원인이었음 -(CLI는 클린인데 에디터엔 빨간 줄). +`luau-analyze` CLI는 새 솔버가 기본값이지만 에디터가 쓰는 `luau-lsp`는 +**옛 솔버가 기본값**(`LuauSolverV2=false`)이라 같은 코드에 다른 진단이 +나옴 — 예전엔 "실제 에디터 환경에서 확인 필요"로 사람에게 넘겨뒀던 +항목. -옛 솔버는 quad의 `Compute` 시그니처 패턴 자체를 선언 시점에 거부하므로 -사실상 새 솔버 외에 선택지가 없어 보이지만, **실제 사용하시는 에디터 -환경에서 확인이 필요**합니다. VSCode의 "Luau Language Server" 확장이라면 -워크스페이스 `.vscode/settings.json`에: +**[2026-08-19] `luau-lsp` 바이너리(1.69.0, `luau-lsp analyze` CLI 모드)를 +`/code/.local/bin`에 직접 설치해 `--flag:LuauSolverV2=true/false` +양쪽으로 실측 — 새 솔버가 필요하다는 결론을 재확인**하고 +`quad/.vscode/settings.json`을 만들어 `{ "luau-lsp.fflags.enableNewSolver": +true }`를 이미 커밋해뒀음(팀/에디터 전체에 공유됨, 사용자가 손댈 것 +없음). `tbox`(다른 참고 레포)도 동일 설정을 이미 쓰고 있어 교차 확인됨. +같이 검토했던 `LuauDoNotExportBrokenTypeFunction` override(tbox가 씀)는 +quad의 현재 `type function` 스파이크(`16`/`21`)에서 유무 차이가 없어 +**채택 안 함**(불필요한 설정 추가 지양). -```json -{ "luau-lsp.fflags.enableNewSolver": true } -``` - -M0 착수 시점에 확인하면 되고 지금 막고 있진 않음. 배경은 +**사람이 확인해줄 것 하나만 남음**: 이건 CLI로 시뮬레이션한 것이지 +VSCode를 실제로 띄운 게 아님 — 다음에 VSCode를 열면 워크스페이스 +설정이 잘 먹었는지(같은 `.luau` 파일에서 CLI 결과와 에디터의 빨간 줄이 +일치하는지) 한 번만 눈으로 확인해주면 이 항목은 완전히 닫힘. 배경은 `.claude/base/typing-limits.md` 8번, 실측은 `.claude/audit/type-recursion-issue/REPORT.md` 5절. diff --git a/rokit.toml b/rokit.toml index f071adb..6056879 100644 --- a/rokit.toml +++ b/rokit.toml @@ -1,10 +1,11 @@ # Rokit-관리 툴체인. `vide`(`.claude/initreq/vide/rokit.toml`) 선례를 따르되 # wally 항목은 뺌(pesde로 전환, 2026-08-19 사용자 결정). # -# ⚠️ 버전 핀은 이 세션이 웹에서 확인한 시점 기준 — 이 샌드박스엔 rokit/pesde -# 바이너리가 없어 실제로 `rokit install`을 돌려 검증하지 못했다. 실제 -# 설치 전에 `rokit add pesde-pkg/pesde` / `rokit add rojo-rbx/rojo`로 -# 최신 태그를 직접 재확인할 것. +# [2026-08-19] pesde/rojo/luau-lsp 셋 다 이 핀 그대로 `/code/.local/bin`에 +# 직접 설치해 버전 일치까지 실측 확인 완료(`rokit` 자체는 이 샌드박스에 +# 없어 `rokit install`로 검증한 건 아님 — 바이너리를 개별 다운로드해 +# 대조). 상세는 `.claude/base/project-setup-plan.md`. [tools] pesde = "pesde-pkg/pesde@0.7.3+registry.0.2.3" rojo = "rojo-rbx/rojo@7.7.0" +luau-lsp = "JohnnyMorganz/luau-lsp@1.69.0"