docs: 단위 4 감사 1라운드 반영 — __apply 시그니처 문단을 H-179 뒤 모양으로, isEpochSet 의사 술어 주석, 'M2에서 만들어진다' 시제 셋

Co-authored-by: qwreey <me@qwreey.moe>
This commit is contained in:
qwreey-agent-selene 2026-08-29 02:11:40 +09:00
parent c932206ebf
commit 654bdbf2e5
No known key found for this signature in database
4 changed files with 11 additions and 7 deletions

View file

@ -201,7 +201,7 @@ leading/trailing/통과 후 창 재개방은 **완전히 동일**. 그래서 공
생겼으니 이름 붙여 꺼내는 것뿐. 생겼으니 이름 붙여 꺼내는 것뿐.
**[2026-08-21 실현 — 이 권고가 확정됐다]** 그 노드는 `state:Gate(setup)` **[2026-08-21 실현 — 이 권고가 확정됐다]** 그 노드는 `state:Gate(setup)`
만드는 **`GateNode`**이고 **M2**에서 구현된다(`base/gate-plan.md` 만드는 **`GateNode`**이고 **M2**에서 구현됐다(**[2026-08-29]** 단위 4, `quad-base/src/State.luau``:Gate`; `base/gate-plan.md`
**[2026-08-24]** 2026-08-22엔 디스패치 쪽이었다가 마일스톤 순서 교체로 **[2026-08-24]** 2026-08-22엔 디스패치 쪽이었다가 마일스톤 순서 교체로
반응형 코어로 돌아왔다). 다만 반응형 코어로 돌아왔다). 다만
"내부 공용"은 아니게 됐다 — **공개 표면**이다. `Debounce`/`Throttle` 쪽 "내부 공용"은 아니게 됐다 — **공개 표면**이다. `Debounce`/`Throttle` 쪽
@ -1244,7 +1244,7 @@ additional-primitives-plan.md`가 원래 "안 만들어도 된다"고 판단했
**M8**(`Ref`)에서 확정되는 것들이라 그 이후 언제든 얹을 수 있다. 2026-08-22엔 **M8**(`Ref`)에서 확정되는 것들이라 그 이후 언제든 얹을 수 있다. 2026-08-22엔
`Blocker.luau`가 디스패치 쪽으로 앞당겨져 있어서 "게이트/`Blocker`는 다른 `Blocker.luau`가 디스패치 쪽으로 앞당겨져 있어서 "게이트/`Blocker`는 다른
마일스톤"이라고 적었으나, 2026-08-24 마일스톤 순서 교체로 되돌아왔다. 그 마일스톤"이라고 적었으나, 2026-08-24 마일스톤 순서 교체로 되돌아왔다. 그
"게이트 노드를 공용으로 빼는" 작업도 같은 M2에서 State 코어와 함께 한다 "게이트 노드를 공용으로 빼는" 작업도 같은 M2에서 State 코어와 함께 했다(**[2026-08-29]** 완료)
사용자 결정 "게이팅 먼저"(`Dispatch.drive`의 배치 등록이 이미 그 게이팅에 사용자 결정 "게이팅 먼저"(`Dispatch.drive`의 배치 등록이 이미 그 게이팅에
의존하므로)는 그대로 지켜진다. 1절에서 봤듯 같은 노드를 공유하므로 따로 의존하므로)는 그대로 지켜진다. 1절에서 봤듯 같은 노드를 공유하므로 따로
하면 같은 걸 두 번 설계하게 되는 것도 그대로다. 표면/이름은 `base/gate-plan.md`가 소스(이 문서의 1절이 그 일반화를 처음 하면 같은 걸 두 번 설계하게 되는 것도 그대로다. 표면/이름은 `base/gate-plan.md`가 소스(이 문서의 1절이 그 일반화를 처음

View file

@ -337,7 +337,8 @@ function GateNode:_receive(from)
-- (2) 통과한 것만 흡수 집합에 합친다. `from`이 집합이면 unfold해서 합친다 -- (2) 통과한 것만 흡수 집합에 합친다. `from`이 집합이면 unfold해서 합친다
-- — 게이트-게이트 중첩에서 중복이 저절로 접힌다(집합이라서). -- — 게이트-게이트 중첩에서 중복이 저절로 접힌다(집합이라서).
if isEpochSet(from) then if isEpochSet(from) then -- (의사 술어 — 실제 코드는 `isEpoch(from)`의 반대 분기,
-- `state-epoch-plan.md` §5 "런타임 분기는 `isEpoch`로"; 단위 4)
for epoch in from do self._withheld[epoch] = true end for epoch in from do self._withheld[epoch] = true end
else else
self._withheld[from] = true self._withheld[from] = true

View file

@ -1121,9 +1121,12 @@ then return factory(self) else return factory:__apply(self) end end` — 즉
- **함수와 콜러블의 유니온으로 여는 안은 기각** — 필드로 받으면 - **함수와 콜러블의 유니온으로 여는 안은 기각** — 필드로 받으면
유니온도 캐스트도 필요 없다. 필드 이름은 **`__apply`**(**[2026-08-28 10라운드 유니온도 캐스트도 필요 없다. 필드 이름은 **`__apply`**(**[2026-08-28 10라운드
`H-158` 사용자 확정]** *"키는 __apply 로 하기로 했던거로 기억중임"* `H-158` 사용자 확정]** *"키는 __apply 로 하기로 했던거로 기억중임"*
`base/blocker-plan.md` 배너), 시그니처는 **[2026-08-28 M2 단위 2 확정]** 메소드형 `base/blocker-plan.md` 배너), 시그니처는 **[2026-08-28 M2 단위 2 확정, 2026-08-29 단위 4
`__apply: (self: any, state: State<T>) -> U``quad-types/src/init.luau``State<T>.Apply` `H-179` 정정]** 메소드형 `__apply: (self: any, state: any) -> any` — 호출은 `State.luau`
파라미터 타입과 `State.luau``(factory :: any):__apply(self)` 호출이 소스. `(factory :: any):__apply(self)`. `State<T>.Apply`의 파라미터 타입은 **교집합 오버로드**
(함수 팩토리는 제네릭 `U`, 객체 팩토리는 `any` 반환 → 호출부가 결과를 명시)이고 그
정확한 표기와 근거는 `base/typing-limits.md` §1②가 소스 — 한때 여기 `(self: any, state:
State<T>) -> U`라 적었는데 그 유니온 표기는 `Blocker`처럼 필드가 더 있는 객체를 못 받는다.
- **구현 비용 거의 0**: Modifier와 달리 State/Source는 제네릭 `__index` - **구현 비용 거의 0**: Modifier와 달리 State/Source는 제네릭 `__index`
필드 setter를 즉석 합성하는 메커니즘이 없어서(고정된 메소드 표면만 필드 setter를 즉석 합성하는 메커니즘이 없어서(고정된 메소드 표면만
존재), Modifier의 `Apply`처럼 "필드 이름으로 예약해야 하는" 충돌 존재), Modifier의 `Apply`처럼 "필드 이름으로 예약해야 하는" 충돌

View file

@ -422,7 +422,7 @@
실제로 quad-base에 새 코어 메커니즘을 추가하지 않는 **순수 슈가**로 실제로 quad-base에 새 코어 메커니즘을 추가하지 않는 **순수 슈가**로
확인돼(같은 절), 위 항목들과 우선순위는 다시 같아짐 — M0/M2를 막지 확인돼(같은 절), 위 항목들과 우선순위는 다시 같아짐 — M0/M2를 막지
않고, **그 게이티드 노드는 [2026-08-21] `state:Gate`로 확정돼 M2에서 않고, **그 게이티드 노드는 [2026-08-21] `state:Gate`로 확정돼 M2에서
만들어진다**(`base/gate-plan.md`) — `Debounce`/`Throttle`은 그 위의 만들어졌다**(`base/gate-plan.md`, **[2026-08-29]** 단위 4로 완료) — `Debounce`/`Throttle`은 그 위의
정책으로 얹으면 되고, 같은 설계를 두 번 할 일은 없어졌다. 정책으로 얹으면 되고, 같은 설계를 두 번 할 일은 없어졌다.
주입 op 2개(`setTimeout`/`clearTimeout`)가 백엔드 팩토리 표면에 주입 op 2개(`setTimeout`/`clearTimeout`)가 백엔드 팩토리 표면에
추가될 예정이라는 것도 M1 설계 시 인지. 남은 열린 질문 없음(구 추가될 예정이라는 것도 M1 설계 시 인지. 남은 열린 질문 없음(구