tooling: 에디터 Luau 솔버 설정 확정 — luau-lsp 설치해 새 솔버 필요성 실측

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 <me@qwreey.moe>
This commit is contained in:
qwreey-agent-selene 2026-08-19 14:37:17 +09:00
parent 0b471535a3
commit 2de2f99cc4
No known key found for this signature in database
6 changed files with 65 additions and 31 deletions

View file

@ -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`가 필수인 이유

View file

@ -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에 실제로 반영할

View file

@ -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<T>`도 `Ref<T>`를 만족하는지 추가), 런타임 절반은 신규
`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<Error>`로 새는 것, `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개 후속 검증 항목은
전부 닫힘.

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"luau-lsp.fflags.enableNewSolver": true
}

View file

@ -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절.

View file

@ -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"