From 9e1fbbd7857dae88c7e8a83b1b731ad4946b8c60 Mon Sep 17 00:00:00 2001 From: qwreey-agent-selene Date: Sat, 29 Aug 2026 02:18:00 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EB=8B=A8=EC=9C=84=203=20=EA=B0=90?= =?UTF-8?q?=EC=82=AC=203=EB=9D=BC=EC=9A=B4=EB=93=9C=20=EB=B0=98=EC=98=81?= =?UTF-8?q?=20=E2=80=94=20round11=20=C2=A75=20=EC=83=89=EC=9D=B8=20?= =?UTF-8?q?=EC=95=BD=ED=98=B8=20=EC=9D=B8=EC=9A=A9=20=EC=A0=95=EC=A0=95,?= =?UTF-8?q?=20Subscribed=20=EC=98=9B=20=EC=9D=B4=EB=A6=84=20=EB=91=98?= =?UTF-8?q?=EC=A7=B8=20=EC=9E=90=EB=A6=AC,=20luau-test=20README=2016=20?= =?UTF-8?q?=ED=98=84=ED=99=A9,=20=EB=B0=A4=EC=83=98=20=EB=B3=91=EB=A0=AC?= =?UTF-8?q?=202=20=ED=97=88=EC=9A=A9=20=EB=AA=85=EB=AC=B8=ED=99=94(convent?= =?UTF-8?q?ions=C2=B7=EC=84=B8=EC=85=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: qwreey --- .claude/base/source-state-plan.md | 2 +- .claude/conventions.md | 6 +++++- .claude/luau-test/README.md | 2 +- .claude/qa-request/pre-implementation-handtrace-round11.md | 2 +- .claude/session/2026-08-28-03-m2-unit1-common-base.md | 6 ++++++ 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.claude/base/source-state-plan.md b/.claude/base/source-state-plan.md index f32acfd..c99c6d5 100644 --- a/.claude/base/source-state-plan.md +++ b/.claude/base/source-state-plan.md @@ -1474,7 +1474,7 @@ no-op. 한때 검토했던 "`isInit=false`면 허용, `isInit=true`+생존확인 **weak 아닌 강참조**로 둠 — 여기서 weak면 "구독해서 살려둔다"는 목적 자체가 무의미해짐. 위 자동 케이스의 weak table과 역할이 명확히 갈림 (weak table=자동/리프 전용, 강참조 레지스트리=수동 구독 전용). - **`:Unsubscribe()`는 이 레지스트리에서 반드시 `SubscribedObservers[observer] + **`:Unsubscribe()`는 이 레지스트리에서 반드시 `Subscribed[observer]`(옛 표기 `SubscribedObservers[observer]` = nil`까지 해야 함** — `Subscribed` 플래그만 내리고 강참조를 안 끊으면 GC 대상이 안 되는 반쪽짜리 해제가 됨. **⭐ [2026-08-26 정정, 8라운드 `H-111`]** 여기 한때 *"둘은 항상 같이 diff --git a/.claude/conventions.md b/.claude/conventions.md index cbbfd20..e225195 100644 --- a/.claude/conventions.md +++ b/.claude/conventions.md @@ -234,7 +234,11 @@ haiku, 일반 작업은 sonnet. 특히 소스코드를 많이 읽어야 하는 서술을 새로 만들어냄**, (3) 서브에이전트는 사용자에게 물을 수가 없어서 판단이 필요한 항목이 그냥 임의 처리됨. 지금 절차: 1. **⭐ `quad-doc-auditor`는 한 턴에 하나만 호출한다 — 병렬 금지** - (Agent 도구 직접 호출, Workflow 안 씀). **사용자 지침(2026-08-18): + (Agent 도구 직접 호출, Workflow 안 씀). **[2026-08-29 예외]** 사용자가 밤샘 자율 + 구간에 한해 완화 — *"내가 자는동안 많은 작업을 수행해도 좋아 … 2개 정도까지 + 병렬로 돌려도 토큰 비용 문제 없어"*(근거가 토큰 비용이었으므로 비용을 허용하면 + 완화된다). 그 구간엔 감사자 2개 병렬까지, 단 같은 파일을 고치는 작업은 여전히 + 병렬 금지. 평상시 기본은 그대로 하나씩. **사용자 지침(2026-08-18): "시간이 걸려도 상관 없으니, 차라리 병렬 에이전트를 덜 써줘. 그냥 한 턴에 하나씩만 사용하고, 0 이 나올때 까지 턴 수를 늘리는게 나아보임. 토큰을 너무 많이 소비해서 다른 작업을 못 하고, 세션 한도에 닿더라고."** diff --git a/.claude/luau-test/README.md b/.claude/luau-test/README.md index c051d47..550bbd8 100644 --- a/.claude/luau-test/README.md +++ b/.claude/luau-test/README.md @@ -11,7 +11,7 @@ | 폴더 | 뜻 | 누가 처리 | |---|---|---| | `review-required/` | **설계가 걸림 — 사람 결정 필요**(**[2026-08-13 13차 세션] 현재 비어 있음** — 마지막 한 건이던 `08`이 해소돼 `done/`으로 감) | ⭐ 사용자 | -| `rewrite-required/` | 스파이크가 낡음 — 코드가 깨졌거나(`13`/`15`), **설계가 바뀌어 옛 모델을 검증 중**(`04`/`19`, 2026-08-13 14차 세션 하강 diff / `10`, **[2026-08-14 5차 세션]** `canExecute` 1-인자 재정정 / `05`, **[2026-08-14 8차 세션]** "emit은 항상 전파" 정정 → 재작성 통과했다가 **[2026-08-21]** 소스 에포크 채택으로 다시 합류) — **`16`은 [2026-08-15] 통과로 `done/`에 있음**(아래 참고); **[2026-08-29] `13`·`15`·`05`도 지금은 `done/`에 있다**(`15`는 `H-176`으로 폐기, `05`는 `spec.state`/`spec.effect`가 대체 — 여기 나열은 폴더가 왜 생겼는지의 예시일 뿐, 현황은 `STATUS.md`) | 에이전트 | +| `rewrite-required/` | 스파이크가 낡음 — 코드가 깨졌거나(`13`/`15`), **설계가 바뀌어 옛 모델을 검증 중**(`04`/`19`, 2026-08-13 14차 세션 하강 diff / `10`, **[2026-08-14 5차 세션]** `canExecute` 1-인자 재정정 / `05`, **[2026-08-14 8차 세션]** "emit은 항상 전파" 정정 → 재작성 통과했다가 **[2026-08-21]** 소스 에포크 채택으로 다시 합류) — `16`은 [2026-08-15] 통과로 `done/`에 갔다가 **[2026-08-25] Store 재설계로 `rewrite-required/`에 재합류**(`STATUS.md`); **[2026-08-29] `13`·`15`·`05`는 지금 `done/`에 있다**(`15`는 `H-176`으로 폐기, `05`는 `spec.state`/`spec.effect`가 대체 — 여기 나열은 폴더가 왜 생겼는지의 예시일 뿐, 현황은 `STATUS.md`) | 에이전트 | | `not-run/` | 이 환경에서 못 돌림 — **[2026-08-14 5차 세션] 스파이크는 0건**(`10`이 `rewrite-required/`로 감), GC 헬퍼만 남음 | 사용자 or MCP 연결 후 | | `done/` | 통과 or 판정 끝, 더 할 일 없음 | — | diff --git a/.claude/qa-request/pre-implementation-handtrace-round11.md b/.claude/qa-request/pre-implementation-handtrace-round11.md index 0195018..4dd400a 100644 --- a/.claude/qa-request/pre-implementation-handtrace-round11.md +++ b/.claude/qa-request/pre-implementation-handtrace-round11.md @@ -292,7 +292,7 @@ lazy 하게 읽으면 되는거 아냐? Set 재진입 같은 경우는, 반복 - **`onDestroying` 스텁의 자리**: `LifetimeHandle.luau`의 `Init`이 생명주기 4종과 같이 에러 스텁을 설치(주입 op 목록의 소스는 `architecture.md` EngineOps 줄 — 스텁 파일 배치는 코드 배치). mock은 `installLifetime`이 `inst.Destroying:Connect(fn)`으로 채운다. -- 색인이 짚은 문서 긴장(`ss:1197` "Effect의 내부 Observer가 설치 발화를 `from == nil`로 +- 색인이 짚은 문서 긴장(`base/source-state-plan.md` "`state:Observer(fn)`" 절의 *"Effect의 내부 Observer가 이 설치 발화를 `from == nil`로 거르는 이유이기도 하다"* — 한때 여기 `ss:1197`이라는 색인 약호로 적혀 있었다 — 거른다" vs `H-164`)은 코드에서 모순 없음 — Observer 계약은 `nil` = 출처 없음이고, Effect의 `fire`가 그걸 `Update` 못 하는 값으로 **자기 사정**으로 거를 뿐이다. - 테스트 작성 함정: `table.insert(t, nil)`은 길이를 안 늘린다 — `emitFrom == nil` 발화를 셀 땐 diff --git a/.claude/session/2026-08-28-03-m2-unit1-common-base.md b/.claude/session/2026-08-28-03-m2-unit1-common-base.md index 7e62f95..eb674ef 100644 --- a/.claude/session/2026-08-28-03-m2-unit1-common-base.md +++ b/.claude/session/2026-08-28-03-m2-unit1-common-base.md @@ -83,6 +83,12 @@ ## 2026-08-29 새벽 — 컨테이너 이사 뒤 재개 (사용자: *"내가 자는동안 많은 작업을 수행해도 좋아"*) +사용자 원문(01:00 KST): *"내가 자는동안 많은 작업을 수행해도 좋아. 코퍼스 전체를 순회하거나 +구현을 계속하거나 등, opus 모델을 잘 섞어서 수행하면 괜찮아. 2개 정도까지 병렬로 돌려도 +토큰 비용 문제 없어. … 내일 2시에서 4시 사이에 내가 돌아오게 될거야."* — 그래서 이 구간은 +감사자 2개 병렬(`conventions.md`의 2026-08-18 "하나씩" 규칙의 비용 근거를 사용자가 걷음, +예외로 명문화). 감사자 모델은 sonnet 유지, 색인·탐사엔 opus. + - 이사 검증: `upstream/main`에서 26커밋 fast-forward, `pesde install`, ALL PASS. Studio MCP 연결(`Place1`, Edit) — M5 전까지 안 씀. - 단위 2 감사 4·5라운드 반영(`442d800`, `67fb61e`: `implFor` 호출자 정정, `EpochMap`도 공유 잎,