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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
36 changes: 36 additions & 0 deletions REPORT.md
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,41 @@
# REPORT

## [2026-09-04] upstream 동기 S7 — 컷 `ba5797b` 머지 + §5 서식에 «델타/누적» 축 (rustjava-upstream-sync-s7-and-fix-the-conflict-count-format)
- 무엇을: upstream `ba5797b`(#201 가상 디스패치 해석 · **1커밋** · 319파일 +20,118/−5,729)을 `--merge` 로
흡수하고 충돌 **1건**을 해소했다. 함께 ★**§5 「충돌 수」 정본 서식을
`<수> <델타|누적>(base <sha> · merge-base <sha>)` 로 고쳤다.**
★**`merge-base` `95ebc5c` → `ba5797b`** · behind **13 → 12** · 부모 **2개** ⇒ ★★**계획 7회차(S1~S7) 완주.**
- 왜: ⑴S6 이 「예측 0 ↔ 실측 1」로 갈렸고 검수자가 근인을 **서식의 구멍**으로 지목했다 —
base 만 병기하면 ★**「3 → 3」과 「0」이 둘 다 규칙을 지킨다.** ⑵S7 이 충돌 수를 «새로» 적는 회차라
★**그 서식을 이번에 고치는 것이 가장 쌌다**(같은 순간에 만난다).
★**착수 재측정은 신 서식으로 적었다**: 컷 `ba5797b` = **누적 1 · 델타 +1**(base `3e02f8c` · merge-base `95ebc5c`).
★**「예측대로였다」가 아니라 「재서 1 이었다」.** `string.rs` 는 집합에서 **빠졌다**(S6 해소 뒤 무접촉)
⇒ ★**누적은 줄어들 수도 있다 — 그래서 누적을 델타로 대신할 수 없다.**
- 사용자 영향: ★**가상 메서드 디스패치 해석이 JVM 규격에 맞게 고쳐진다** — `invoke_virtual` 이 «선언 클래스»를
받아 상속·오버라이드 해석이 정확해지고, 전 클래스에 **접근 플래그**(`PUBLIC`/`PRIVATE`)가 부여된다.
★**우리 자산 변경 0**(charset 라우팅 7곳 · `setProperty` 서술자 · 수동 span · `double_must_use` allow 7곳 · 픽스처 4).
- 검증: stable 4종 + ★beta 2종 rc=0 · `cargo test --all` **554 / 0 / 1** · beta 도 **554 동수** ·
★**시험 수 증감 0 이고 그것이 맞다** — upstream 테스트 함수도 `95ebc5c` **547** → `ba5797b` **547**
(78개 테스트 파일을 +14,730/−3,536 로 만지지만 **시그니처 스윕**이지 추가가 아니다) ·
★약화 0: `#[ignore]` **1 → 1** · 우리 테스트 함수 **558 → 558** · 단언 삭제 **0** ·
「해소분 0」 = `ba5797b` 대비 **삭제 파일 0** · 다른 파일 **52건 전수 우리 자산** ·
`Cargo.lock` **내려감 0 · 올라감 0 · 추가 0 · 제거 0**.
- ★★**`thread.rs` 는 «직교»다 — 「어느 쪽이 이기나」가 아니다.** upstream(**+23/−10**)은 `invoke_virtual` 에
«선언 클래스» 인자를 더했고, 우리(**+50/−42** · ★**의미 변경은 3줄**이고 나머지는 들여쓰기)는
그 호출들을 **감싸는 수동 span**(PR #4 · `#[tracing::instrument]` 금지)이다 ⇒ 의미가 겹치지 않는다.
우리 구조를 뼈대로 upstream 새 인자 **3곳**을 얹었다(S1·S3·S4 와 같은 전략 · **4회째**).
- ★★**「충돌 0으로 들어온」 파손 «4회째» — 그런데 축은 «처음»이다.** upstream 이 **공용 API 시그니처**를 바꾸자
★**우리 고유 테스트 5곳**(PR #5 자산)이 구식 4인자로 남아 **컴파일 실패**(`E0061`×5).
★**우리 줄이라 upstream 이 안 건드렸고 ⇒ 충돌이 «날 수가 없다».**
⇒ ★**S3·S5·S6 과 «반대 방향»이다**(그쪽은 upstream 신규 파일이 우리 규격을 안 지킨 것) —
★**그래서 「신규 파일을 훑는다」로는 못 잡고, 이번에 잡은 것은 «컴파일»이다.**
처분은 upstream 자신의 관용구를 **그대로 채택**(`&x.class_definition().name()` · `"java/lang/String"`) · 단언 무접촉.
- 후속 추천: ⑴**게이트③은 반드시 `--merge`**(등재 repo · `merge_strategy: merge` 필수).
⑵★**S8** — 남은 **behind 12** 가 «개명 스윕»(`java_runtime/`→`rustjava-runtime/` · `test_data/`→`test-data/`)이고
우리 픽스처에 꽂힌다. 총괄 보류분 `2026-09-03-upstream-sync-s5-s7-remeasure#p0` — **이 회차는 집행하지 않았다.**
⑶★**「우리 자산이 낡는」 축을 계약에 넣을지 판정하라** — 이번 4회째로 **두 방향이 다 확인됐다**
(upstream 신규 파일 ↔ upstream 시그니처 변경). 후자는 컴파일이 잡지만 **전자는 안 잡는다.**

## [2026-09-04] upstream 동기 S6 — 컷 `95ebc5c` 머지 (rustjava-upstream-sync-s6-cut-95ebc5c)
- 무엇을: upstream `95ebc5c`(**11커밋** · 142파일 +17,593/−483)을 `--merge` 로 흡수하고 충돌 **1건**을 해소했다.
★**`merge-base origin/main upstream/main` `c4665b0` → `95ebc5c`** · behind **24 → 13** · 머지커밋 **부모 2개**.
Expand Down
17 changes: 17 additions & 0 deletions STATE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,23 @@
(25번째 run, 앞선 24건 전부 red). **PR 대기 — 게이트③ 미착지.**

## 완료
- [rustjava-upstream-sync-s7-and-fix-the-conflict-count-format] ★**upstream 컷 `ba5797b`(가상 디스패치 해석 ·
1커밋 · 319파일) 머지 — 충돌 1 해소** + ★**§5 「충돌 수」 정본 서식에 «델타/누적» 축을 넣었다.**
★**`merge-base` `95ebc5c` → `ba5797b` · behind 13 → 12 · 부모 2개** ⇒ ★★**계획 7회차(S1~S7) 완주.**
착수 재측정(신 서식): 컷 `ba5797b` = **누적 1 · 델타 +1**(base `3e02f8c` · merge-base `95ebc5c`).
★`string.rs` 는 집합에서 **빠졌다**(S6 해소 뒤 upstream 무접촉) ⇒ ★**누적은 줄어들 수도 있다.**
★★**`thread.rs` 는 «직교»였다** — upstream(**+23/−10**)은 `invoke_virtual` 에 «선언 클래스» 인자를 더하고
우리(**+50/−42**, 의미 3줄 + 들여쓰기)는 그 호출들을 감싸는 **수동 span**(PR #4)이다 ⇒ 우열 판정 대상이 아니다.
우리 구조를 뼈대로 upstream 새 인자 3곳을 얹었다(S1·S3·S4 와 같은 전략 · **4회째**).
★★**「충돌 0으로 들어온」 파손 4회째 · ★축은 «처음»**: upstream 이 «공용 API 시그니처»를 바꿔
★**우리 고유 테스트 5곳**이 구식 4인자로 남아 **컴파일 실패**(E0061×5). 우리 줄이라 충돌이 «날 수가 없다»
⇒ ★**앞 세 번(신규 파일)과 «반대 방향»이고, 잡은 것은 «컴파일»이다.**
upstream 관용구를 그대로 채택(`&x.class_definition().name()` · `"java/lang/String"`) · 단언 무접촉.
green: stable 4종 + beta 2종 rc=0 · **554 / 0 / 1**(baseline 554 → ★**증감 0 이고 그것이 맞다** —
upstream 테스트 함수도 547 → 547 = 스윕이지 추가가 아니다) · `#[ignore]` 1 → 1 · 단언 삭제 0.
★게이트③ 완료: PR #23 — ★★**`--merge` 착지**(★`--squash` 아님 · 등재 repo). 머지커밋 sha 는 회신 `merged:` 참조.
★★**S1~S7 컷 조상 7/7** ⇒ S4 의 「전건 NO(스쿼시 3회가 족보를 원점으로)」 반대편을 **코드 회차 3연속**으로 지켰다.
★**남은 `behind 12` 는 «개명 스윕» 구간이고 S8 몫**(총괄 보류분 — 이 회차는 집행하지 않았다).
- [rustjava-upstream-sync-s6-cut-95ebc5c] ★**upstream 컷 `95ebc5c`(regex·Formatter·Locale · 11커밋) 머지 —
충돌 1 해소.** ★**`merge-base` `c4665b0` → `95ebc5c` · behind 24 → 13 · 머지커밋 부모 2개**(계보 보존).
`cargo test --all` **554 passed / 0 failed / 1 ignored**(S5 427 → **+127**) · stable 4종 + ★**beta 2종** rc=0.
Expand Down
77 changes: 76 additions & 1 deletion docs/upstream-sync-approach.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -265,7 +265,27 @@ upstream 은 여기서만 `UTF-8`/`EUC-KR` 하드코딩을 유지한다 ⇒ 그

### ★★[상시 규칙 · 2026-09-03 채택] 충돌 수를 적을 때는 «base» 를 반드시 병기한다

**형식**: `<수>(base <sha> · merge-base <sha>)`. ★**병기 없는 충돌 수는 문서·회신·티켓 어디에도 쓰지 않는다.**
**형식**: ★**`<수> <델타|누적>(base <sha> · merge-base <sha>)`**.
★**병기 없는 충돌 수는 문서·회신·티켓 어디에도 쓰지 않는다.**

★★**[2026-09-04 보강 ② — 게이트② 지적 · S7 회차가 집행] «무엇을 센 수인가»(델타/누적)를 서식에 넣는다.**
초판은 base 만 못박아서 ★**같은 base 로 적어도 「3 → 3」과 「0」이 «둘 다» 규칙을 지켰다.**
- **누적** = 그 base 에서 그 컷을 머지하면 **실제로 열리는** 파일 수 ⇒ ★**「이번 회차가 풀 것」**
- **델타** = 직전 컷 누적 대비 **새로 «나타난»** 파일 수 ⇒ ★**「어느 컷이 그 파일을 처음 연다」**

★★**둘은 «다른 질문»이고, 델타 0 은 「풀 것이 없다」가 «아니다».**
★**실사고**(2026-09-04 S6): §5 가 「S6 새 충돌 **0**」으로 남긴 수는 **델타**였는데
★**티켓 Goal 이 그것을 「부딪힐 것이 없다」로 읽었다.** 실제로는 **누적 1**(`string.rs`)이었다 —
직전 컷에서 이미 열려 있던 파일이라 «새로 나타나지» 않았을 뿐, **풀 일은 그대로 있었다.**
⇒ ★**둘 중 하나만 적지 마라. 어느 쪽인지 «표시»하거나 «둘 다» 적어라.**

★**본보기(2026-09-04 S7 착수 재측정 — 이 서식으로 적은 첫 수)**:
> 컷 `ba5797b` 충돌 = ★**누적 1 · 델타 +1**(base `3e02f8c` · merge-base `95ebc5c`) — `thread.rs`.
> ※`string.rs` 는 이번 집합에서 **빠졌다**(S6 이 해소했고 이 1커밋 구간에서 upstream 이 안 건드렸다)
> ⇒ ★**누적은 «줄어들 수도» 있다** — 그래서 누적을 델타로 대신할 수 없다.

★**과거 기록은 소급 수정하지 않는다**(그 파일은 기록이다) — 아래 표·블록의 수는 **옛 서식**이고,
★그 값들은 대체로 **누적**이다(「새 충돌 +N」으로 적힌 칸만 델타다).

★★**[2026-09-04 보강 — 게이트② 지적] `diff` 를 인용할 때는 «방향»도 못박는다.**
초판은 base 만 못박고 **방향을 안 못박았다** — 그래서 같은 표 안에서 「우리」 열이 역순
Expand DownExpand Up@@ -470,6 +490,61 @@ upstream `95ebc5c` 의 lock 도 이미 0.1.92) · 올라간 3(`event-listener` 5
구간 `95ebc5c..ba5797b` **1커밋**. ★**그 수도 S6 착지로 base 가 또 바뀌므로 S7 착수 시 다시 재라.**


### ★★[2026-09-04] S7 착지 기록 — 계획 **7회차 완주** · `thread.rs` 는 «직교»였다

**착수 시 재측정**(★신 서식 그대로): 컷 `ba5797b` 충돌 = ★**누적 1 · 델타 +1**
(base `origin/main` **`3e02f8c`** · merge-base **`95ebc5c`**) — `java_runtime/src/classes/java/lang/thread.rs`.
★**「예측대로였다」가 아니라 「재서 1 이었다」**(§5 예측도 1 이었으나 그것을 전제로 쓰지 않았다).
★**`string.rs` 는 이번 집합에서 빠졌다** — S6 이 해소했고 이 **1커밋** 구간에서 upstream 이 안 건드렸다
⇒ ★**누적은 줄어들 수도 있다**(위 서식 절의 본보기가 이것이다).

### `thread.rs` — ★**「어느 쪽이 이기나」가 아니라 «직교»다**

| | 규모(`merge-base` = `95ebc5c` 기준) | 한 일 |
|---|---|---|
| upstream `95ebc5c`→`ba5797b` | **+23/−10** | ★`invoke_virtual` 에 **«선언 클래스» 인자 추가**(#201 가상 디스패치 해석) + `<init>(Z)V` 에 `PRIVATE` |
| 우리 `95ebc5c`→`origin/main` | **+50/−42** | ★PR #4 의 **수동 span**(`#[tracing::instrument]` 금지 · tokio-rs/tracing#3388). ★**의미 변경은 3줄**이고 나머지는 `async {}` 로 감싸며 생긴 **들여쓰기**다 |

⇒ ★★**두 변경은 «호출 인자»와 «그 호출들을 감싸는 span» 이라 의미가 겹치지 않는다 — 우열 판정 대상이 아니다.**
텍스트가 같은 자리에 있어 충돌했을 뿐이다.
**처분**: 우리 구조(수동 span·들여쓰기)를 **뼈대**로 두고 upstream 의 새 인자 **3곳**을 그 안에 얹었다
(`"java/lang/Thread"` · `&exception.class_definition().name()` · `"java/io/StringWriter"`).
★**S1·S3·S4 에서 3회 확립된 전략과 «같다»**(upstream 본문 + 수동 span 재적용) — 이번이 **4회째**다.
**검증**: 수동 span 2요소(`info_span!` `:269` · `.instrument(span)` `:329`) **생존** ·
`invoke_virtual` **9곳 전건 새 시그니처** · `#[tracing::instrument]` 어트리뷰트 실사용 **0**(주석 1건뿐).

### ★★「충돌 0으로 들어온」 파손 — **4회째**이고 ★**축은 «처음»이다**

upstream 이 `invoke_virtual` 시그니처를 바꾸자 ★**«우리 고유 테스트» 5곳**(PR #5 자산)이
**구식 4인자**로 남아 **컴파일 실패**했다(`E0061` × 5):
`test_input_stream_reader.rs:134·157`(`read`) · `test_string.rs:1035`(`getBytes`)·`:1042`·`:1117`(`getMessage`).
★★**«우리 줄»이라 upstream 이 안 건드렸고 ⇒ 충돌이 «날 수가 없다».**
⇒ ★**이 축은 앞 세 번과 «반대 방향»이다**: S3·S5·S6 은 「upstream 이 «새 파일»을 들여와 우리 규격을 안 지킨」 것이었고,
이번은 「upstream 이 «공용 API 시그니처»를 바꿔 «우리 파일»이 낡은」 것이다.
⇒ ★**그래서 「신규 파일을 훑는다」로는 못 잡는다 — 잡은 것은 «컴파일»이다.**
**처분**: upstream 자신의 관용구를 **그대로 채택**했다 —
`read`·`getMessage` 는 `&x.class_definition().name()` · `getBytes` 는 `"java/lang/String"`
(`ba5797b` 의 upstream 테스트가 쓰는 형태를 실측해 맞췄다). ★**단언은 한 줄도 안 건드렸다.**

### 「해소분 0」 · `Cargo.lock` · 스위트

`ba5797b` 대비 **삭제 파일 0건** · 다른 파일 **52건 전수가 우리 fork 고유 자산**.
★**`Cargo.lock` — 내려간 0 · 올라간 0 · 추가 0 · 제거 0**(`async-trait` **0.1.92 유지** · 이 컷은 의존을 안 건드린다).
정독은 **양쪽이 둘 다 만진 15건**만(우리 52 ∩ upstream 319) — `charset` 라우팅(`string.rs` 4 · `input_stream_reader.rs` 3) ·
`setProperty` 서술자(`system.rs`·`jvm.rs`) · `double_must_use` allow **7곳** 전건 생존.

`cargo test --all` ★**554 / 0 / 1** · beta 도 **554 동수** · stable 4종 + beta 2종 **전건 rc=0**.
★★**시험 수 증감 «0» 이고 그것이 «맞다»** — upstream 자신의 테스트 함수도 `95ebc5c` **547** → `ba5797b` **547** 이다
(`ba5797b` 는 78개 테스트 파일을 +14,730/−3,536 로 만지지만 **시그니처 스윕**이지 테스트 «추가»가 아니다).
★약화 축 **0**: `#[ignore]` **1 → 1** · 우리 테스트 함수 **558 → 558** · 단언 삭제 **0**.

**착지 실측**: `merge-base origin/main upstream/main` ★**`95ebc5c` → `ba5797b`** · behind **13 → 12** ·
머지커밋 **부모 2개**(`3e02f8c` + `ba5797b`).

★★**계획 「7회차」가 이로써 완주됐다**(S1~S7). ★**남은 behind 12 는 «개명 스윕» 구간**이고
그것은 **S8**(총괄 보류분 `2026-09-03-upstream-sync-s5-s7-remeasure#p0`)의 몫이다 — 이 회차는 **집행하지 않았다**.


★**S1~S3 이 이 동기화의 «전부»다** — 세 회차가 판단을 다 쓰고, 각각 **한 축씩만** 다룬다.
검수자가 한 회차에서 읽어야 하는 것은 **우리 해소분**이지 upstream 원본 diff 가 아니다:

Expand Down
Loading