Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions devlog/_chase/000_baseline.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@

> T3 축의 기준선이다. Cua Driver 축은 [20_cua_baseline](./20_cua_baseline.md).

> 갱신: 2026-10-28 (사이클 261026이 PR #1767 squash로 랜딩해 내용 기준 reviewed-through는 `f0dd86f164`, merge-base는 `2c592a108`. 사이클 261028 수동 선별 진행 중)
> 갱신: 2026-10-28 (사이클 261028 수동 선별 랜딩, #1982 → dev `5a9569eebf`. 내용 기준 reviewed-through `36d4d711b7`, merge-base는 `2c592a108`)

## 현재 기준선

| 항목 | 값 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| upstream | `pingdotgg/t3code` `main` (remote `upstream`, `tagopt --no-tags`) |
| GOAT 통합 브랜치 | `goat-si/goat` `dev` |
| reviewed-through (merge-base) | `2c592a108` 2026-10-24 fix(client-runtime): avoid duplicate handoff previews during startup (#24349) |
| reviewed-through (내용 기준) | `f0dd86f164` 2026-10-26 (PR #1767 squash → dev `c6b4131c76`). 다음 사이클의 시작점 |
| 스캔한 GOAT dev | `eb2a07db0` Merge pull request #1118 (사이클 261024b) |
| GOAT 고유 커밋 | 2073 |
| upstream 앞섬 | 0 (2026-10-24 KST) |
| trial merge 충돌 | 없음 ([10.013](./_fin/10/10.013_t3_chase_cycle_261024b.md)) |
| Node 고정 | 루트 `engines.node` `26.12.1`, 서버 `^24.16.0 \|\| >=26.1.0` ([10.011](./_fin/10/10.011_t3_chase_node_pin.md), PR #1587) |
| 항목 | 값 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| upstream | `pingdotgg/t3code` `main` (remote `upstream`, `tagopt --no-tags`) |
| GOAT 통합 브랜치 | `goat-si/goat` `dev` |
| reviewed-through (merge-base) | `2c592a108` 2026-10-24 fix(client-runtime): avoid duplicate handoff previews during startup (#24349) |
| reviewed-through (내용 기준) | `36d4d711b7` 2026-10-27 fix(server): bound hung delegated stop effects (#25675). 사이클 261028 랜딩, 다음 사이클의 시작점 |
| 스캔한 GOAT dev | `eb2a07db0` Merge pull request #1118 (사이클 261024b) |
| GOAT 고유 커밋 | 2073 |
| upstream 앞섬 | 0 (2026-10-24 KST) |
| trial merge 충돌 | 없음 ([10.013](./_fin/10/10.013_t3_chase_cycle_261024b.md)) |
| Node 고정 | 루트 `engines.node` `26.12.1`, 서버 `^24.16.0 \|\| >=26.1.0` ([10.011](./_fin/10/10.011_t3_chase_node_pin.md), PR #1587) |

`de49d637d`(2026-10-10)가 GOAT가 갈라진 fork point다. upstream 머지가 dev에 들어갈 때마다 merge-base가 그 머지의
upstream parent로 전진하고, 그 값이 다음 reviewed-through가 된다. 이 표는 `devlog/_chase/scan.sh` 출력의 요약이며,
Expand All @@ -27,16 +27,16 @@ upstream은 하루에 약 50-100커밋씩 움직인다. 사이클이 길어질

## 사이클 로그

| 사이클 | 날짜 | upstream 범위 | 커밋 | 충돌 | 결과 | 카드 |
| ------- | ---------- | ---------------------------------------------- | ---- | ------ | --------------------------------------------------------------- | ---------- |
| 261012 | 2026-10-12 | `de49d637d..262532709` | 106 | 11 | triage만, 261013이 대체 | 10.001-004 |
| 261013 | 2026-10-13 | `de49d637d..7b6d90757` (nightly.20261012.3021) | 201 | 62 | 머지, PR #100 → dev `b63df35cb` | 10.005 |
| 261014 | 2026-10-14 | `7b6d90757..bf8ffe81a` | 153 | 120 | 머지, PR #191 → dev `a492a4f4b` | 10.006 |
| 261019 | 2026-10-19 | `bf8ffe81a..952921f39` | 836 | 933 | 머지, PR #368 → dev `ec6c0b69b` | 10.007 |
| 261020 | 2026-10-20 | `952921f39..02b794c78` | 231 | 94 | 머지, PR #562 → dev `018943c61` | 10.008 |
| 261021 | 2026-10-21 | `02b794c78..4f651cb10` | 522 | 541 | 머지, PR #658 → dev `2e5707d82` | 10.009 |
| 261022 | 2026-10-22 | `4f651cb10..f054d1b80` | 202 | 묶음별 | 머지, PR #743-#757 14개 → dev `23901144a` | 10.010-011 |
| 261024 | 2026-10-24 | `f054d1b80..d14ace823` | 104 | 묶음별 | 머지, PR #1097, #1102-#1109 9개 → dev `34e0c15d8` | 10.012 |
| 261024b | 2026-10-24 | `d14ace823..2c592a108` | 7 | 7 | 머지, PR #1118 → dev `eb2a07db0` | 10.013 |
| 261026 | 2026-10-26 | `2c592a108..f0dd86f164` | 341 | 512 | 머지, PR #1767 squash → dev `c6b4131c76` (merge-base 전진 없음) | 10.016 |
| 261028 | 2026-10-28 | `f0dd86f164..36d4d711b7` | 147 | 수동 | 진행 중: 36 take, 62 adapt, 49 skip, 주제 PR 42개 | 10.017 |
| 사이클 | 날짜 | upstream 범위 | 커밋 | 충돌 | 결과 | 카드 |
| ------- | ---------- | ---------------------------------------------- | ---- | ------ | --------------------------------------------------------------------------- | ---------- |
| 261012 | 2026-10-12 | `de49d637d..262532709` | 106 | 11 | triage만, 261013이 대체 | 10.001-004 |
| 261013 | 2026-10-13 | `de49d637d..7b6d90757` (nightly.20261012.3021) | 201 | 62 | 머지, PR #100 → dev `b63df35cb` | 10.005 |
| 261014 | 2026-10-14 | `7b6d90757..bf8ffe81a` | 153 | 120 | 머지, PR #191 → dev `a492a4f4b` | 10.006 |
| 261019 | 2026-10-19 | `bf8ffe81a..952921f39` | 836 | 933 | 머지, PR #368 → dev `ec6c0b69b` | 10.007 |
| 261020 | 2026-10-20 | `952921f39..02b794c78` | 231 | 94 | 머지, PR #562 → dev `018943c61` | 10.008 |
| 261021 | 2026-10-21 | `02b794c78..4f651cb10` | 522 | 541 | 머지, PR #658 → dev `2e5707d82` | 10.009 |
| 261022 | 2026-10-22 | `4f651cb10..f054d1b80` | 202 | 묶음별 | 머지, PR #743-#757 14개 → dev `23901144a` | 10.010-011 |
| 261024 | 2026-10-24 | `f054d1b80..d14ace823` | 104 | 묶음별 | 머지, PR #1097, #1102-#1109 9개 → dev `34e0c15d8` | 10.012 |
| 261024b | 2026-10-24 | `d14ace823..2c592a108` | 7 | 7 | 머지, PR #1118 → dev `eb2a07db0` | 10.013 |
| 261026 | 2026-10-26 | `2c592a108..f0dd86f164` | 341 | 512 | 머지, PR #1767 squash → dev `c6b4131c76` (merge-base 전진 없음) | 10.016 |
| 261028 | 2026-10-28 | `f0dd86f164..36d4d711b7` | 147 | 수동 | 36 take, 62 adapt, 49 skip. 묶음 PR 27개 + 합친 PR #1982 → dev `5a9569eebf` | 10.017 |
2 changes: 1 addition & 1 deletion devlog/_chase/020_cycle_runbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ git reset -q --soft "$MERGED"

## 수동 선별 사이클

사용자가 일괄 머지 대신 커밋별 선별을 정한 사이클(첫 사례 [10.017](./10.017_t3_chase_cycle_261028.md))은 위 3-7번 대신 이렇게 돈다.
사용자가 일괄 머지 대신 커밋별 선별을 정한 사이클(첫 사례 [10.017](./_fin/10/10.017_t3_chase_cycle_261028.md))은 위 3-7번 대신 이렇게 돈다.

- 범위: 시작점은 `scan.sh`의 merge-base가 아니라 MOC의 reviewed-through(내용 기준)다. 끝점은 스캔한 upstream SHA로 고정한다.
- 분류: 커밋마다 take(`cherry-pick -x`), adapt(의미만 GOAT 코드에 재구현), skip을 이유와 함께 카드 표에 적는다. UI 레이아웃·스타일·디자인 토큰은 따라가지 않고 그 의미만 adapt한다. 010 영역과 부딪히면 GOAT 동작을 지킨다.
Expand Down
12 changes: 6 additions & 6 deletions devlog/_chase/10_t3_chase_MOC.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
# 10 — T3 chase MOC

> 축: upstream `pingdotgg/t3code` `main`
> reviewed-through: `f0dd86f164` (내용 기준, #1767 squash로 merge-base는 `2c592a108`) · 열린 카드 014·017 · 갱신 2026-10-28
> reviewed-through: `36d4d711b7` (내용 기준, 수동 선별로 merge-base는 `2c592a108`) · 열린 카드 014 · 갱신 2026-10-28

| NNN | 카드 | 상태 |
| --- | ------------------------------------------------------------ | -------------------------- |
| 014 | [T3 이름 잔여 정리](./10.014_t3_chase_rename_leftovers.md) | 🟡 #1619·#1628 머지, #1637 |
| 017 | [사이클 261028 수동 선별](./10.017_t3_chase_cycle_261028.md) | 🟡 분류 완료, PR 진행 |
| NNN | 카드 | 상태 |
| --- | ---------------------------------------------------------- | -------------------------- |
| 014 | [T3 이름 잔여 정리](./10.014_t3_chase_rename_leftovers.md) | 🟡 #1619·#1628 머지, #1637 |

랜딩: 017부터는 일괄 머지 대신 커밋별로 판정해 주제 PR로 가져온다. 각 PR은 sol 독립 리뷰와 goat-ci-result를 통과한 뒤 squash로 들어가므로 merge-base는 전진하지 않는다. reviewed-through는 이 MOC와 사이클 카드의 값이 기준이다.
랜딩: 017부터는 일괄 머지 대신 커밋별로 판정해 주제 묶음으로 가져오고, 묶음들을 하나의 combined PR로 합쳐 squash로 머지한다(020 수동 선별 사이클). merge-base는 전진하지 않는다. reviewed-through는 이 MOC와 사이클 카드의 값이 기준이다.

## \_fin

Expand All @@ -29,3 +28,4 @@
| 013 | [사이클 261024b 머지](./_fin/10/10.013_t3_chase_cycle_261024b.md) | ✅ _fin PR #1118 |
| 015 | [패키지 소유자, 보안 신고, 기여 정책](./_fin/10/10.015_t3_chase_owner_and_security.md) | ✅ _fin PR #1667 |
| 016 | [사이클 261026 머지](./_fin/10/10.016_t3_chase_cycle_261026.md) | ✅ _fin PR #1767 (squash) |
| 017 | [사이클 261028 수동 선별](./_fin/10/10.017_t3_chase_cycle_261028.md) | ✅ _fin #1982 + 묶음 PR 27개 |
2 changes: 1 addition & 1 deletion devlog/_chase/_fin/10/10.016_t3_chase_cycle_261026.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
[10.013](./10.013_t3_chase_cycle_261024b.md)과 같은 rename 3-way 머지를 한 번에 한다. 양 끝 트리는 현재 rename 규칙으로
만들었다(renamed base `542f598a5`, renamed upstream `be7c11562`). rename 뒤 충돌은 512파일(content 501, modify/delete 8,
add/add 3)이고, rename 전 trial merge는 854파일이었다. 충돌은 서로 겹치지 않는 12개 묶음으로 나눠 풀고(계약·persistence·
manifest·lock은 먼저), merge commit의 두 번째 부모는 upstream `f0dd86f16`이다. 계획한 랜딩은 `gh pr merge --merge --match-head-commit`였지만 PR #1767은 squash로 들어가 dev `c6b4131c76`의 부모는 하나다. 그래서 내용은 `f0dd86f16`까지 dev에 있지만 `git merge-base origin/dev upstream/main`은 `2c592a108`에 머문다. 다음 사이클 [10.017](../../10.017_t3_chase_cycle_261028.md)은 `f0dd86f16`부터 읽는다.
manifest·lock은 먼저), merge commit의 두 번째 부모는 upstream `f0dd86f16`이다. 계획한 랜딩은 `gh pr merge --merge --match-head-commit`였지만 PR #1767은 squash로 들어가 dev `c6b4131c76`의 부모는 하나다. 그래서 내용은 `f0dd86f16`까지 dev에 있지만 `git merge-base origin/dev upstream/main`은 `2c592a108`에 머문다. 다음 사이클 [10.017](./10.017_t3_chase_cycle_261028.md)은 `f0dd86f16`부터 읽는다.

## 스캔 요약

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# 10.017 — 사이클 261028 수동 선별

> 사이클: 261028 · 상태: 🟡 in progress
> 사이클: 261028 · 상태: ✅ fin
> Closed: 2026-10-28 `5a9569eebf` (#1982와 묶음 PR 27개)
> upstream: `f0dd86f164..36d4d711b7` (147커밋, 모두 first-parent) · GOAT dev 시작점 `3a2b1e8036` · 방식: 커밋별 판정 후 주제별 PR

## 범위

[10.016](./_fin/10/10.016_t3_chase_cycle_261026.md)의 PR #1767이 squash로 들어가(dev `c6b4131c76`) upstream `f0dd86f164`까지의
[10.016](./10.016_t3_chase_cycle_261026.md)의 PR #1767이 squash로 들어가(dev `c6b4131c76`) upstream `f0dd86f164`까지의
내용은 dev에 있지만 merge-base는 `2c592a108`에 머문다. 그래서 이 사이클은 `scan.sh`의 merge-base 대신 `f0dd86f164`부터 읽는다.
이번 사이클도 merge commit을 만들지 않으므로 merge-base는 전진하지 않는다. 이 축의 reviewed-through는 이 카드와 MOC에 적은 값이다.

Expand All @@ -17,7 +18,7 @@
- **adapt**: 의미만 GOAT 코드에 다시 구현하고 커밋 본문에 upstream sha를 적는다.
- **skip**: 가져오지 않는다. 이유를 적는다.
- UI 레이아웃·스타일·컴포넌트 구조·디자인 토큰·배치 변경은 따라가지 않는다. 그 변경이 담은 기능·버그 수정·접근성·상태 처리는 GOAT의 현재 UI에 맞게 adapt할 수 있다.
- 서버·프로토콜·provider·보안·버그 수정을 먼저 가져온다. [010](./010_fork_delta.md) 영역과 부딪히면 GOAT 동작을 지키고 이 표에 근거를 적는다.
- 서버·프로토콜·provider·보안·버그 수정을 먼저 가져온다. [010](../../010_fork_delta.md) 영역과 부딪히면 GOAT 동작을 지키고 이 표에 근거를 적는다.
- 의미 없는 리팩터(effect를 derive로 바꾸는 류)는 take의 전제이거나 실제 버그·비용을 줄일 때만 가져온다.

## 스캔 요약
Expand Down Expand Up @@ -273,4 +274,18 @@ gpt-6.1-sol 감사 1회차 NEAR-PASS(판정 뒤집기 없음). 반영: C4 표시

## 닫는 근거

PR 목록, 각 head의 sol 리뷰 PASS와 goat-ci-result.
42개 묶음이 모두 dev에 들어갔다. 27개는 묶음 PR로 따로, 나머지 15개는 사용자 결정으로 CI를 멈추고 하나로 합친 PR #1982로 들어갔다. 각 묶음은 정확한 head에서 gpt-6.1-sol 독립 리뷰 PASS를 받았다.

| 경로 | PR → dev |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 카드·runbook | #1874 → `f0d3cde8fe` |
| dev 코드 예산 차단 해소 | #1890 → `d0809663d2` |
| 묶음 PR | B01 #1891, B03 #1878, B04 #1880, B05 #1877, B06 #1879, B07 #1892, B08 #1938, B09 #1893, B10 #1895, B11 #1922, B12 #1896, B13 #1906, B14 #1908, B15 #1918, B16 #1920, B19 #1961, B21 #1926, B22 #1932, B24 #1944, B27 #1952, B30 #1959, B32 #1884, B33 #1885, B35 #1931, B36 #1939, B40 #1957, B42 #1953 |
| 합친 PR | #1982 → `5a9569eebf`: B02, B17, B18, B20, B23, B25, B26, B28, B29, B31, B34, B38, B39, B41, B43 (각 묶음 PR은 닫음) |

남은 것과 확인하지 못한 것:

- #1982는 goat-ci를 돌리지 않고 머지했다(사용자 지시). 로컬 테스트·typecheck도 사용자 지시로 멈춘 뒤였다. 합치며 고친 lint(B29 effect 의존성, B40 manual memo, `IncomingShareProvider` ref, `Stack.tsx` 예산)는 `vp lint`로만 확인했다. 다음 dev CI가 이 범위를 처음 실행한다.
- B43(가독성·safe area)은 화면만 바꾸는 수정이라 before/after 캡처가 필요했지만 이 머신에서 캡처할 수단이 없었다.
- 네이티브 모바일, 실제 provider(Claude, Cursor, fx, ACP) 턴, 패키지된 데스크톱 실행, linux-arm64 16/64 KiB 커널은 실행하지 않았다.
- upstream rename 시뮬레이션: 가져온 커밋의 새 T3 이름은 규칙으로 덮었고 각 묶음 head와 #1982에서 `goat-rename --check`는 0이었다.
Loading