Skip to content

[S5] upstream 동기 — 컷 c4665b0 (Java 1.2 API 확장 · 충돌 3) [rustjava-upstream-sync-s5-with-remeasured-conflicts] - #21

Merged
Jun025 merged 11 commits into
mainfrom
feat/rustjava-upstream-sync-s5
Sep 3, 2026
Merged

[S5] upstream 동기 — 컷 c4665b0 (Java 1.2 API 확장 · 충돌 3) [rustjava-upstream-sync-s5-with-remeasured-conflicts]#21
Jun025 merged 11 commits into
mainfrom
feat/rustjava-upstream-sync-s5

Conversation

@Jun025

Copy link
Copy Markdown
Owner

upstream c4665b0(dlunch#190 · 6커밋 · 171파일 +33,138/−1,058)을 --merge 로 흡수하고 재측정된 충돌 3건을 해소했다.

계보 — ★이 repo 가 «네 번» 잃었던 것

착지 전착지 후
merge-base origin/main upstream/main3296139c★**c4665b0**
behind3024
머지커밋 부모2개(1983d9f + c4665b0)

★★게이트③이 --squash 면 이 전진이 통째로 사라진다<id>-merge 티켓에 merge_strategy: merge 필수.

착수 실측 (★§5 상시 규칙 — base 병기)

base = 당시 main1983d9f · merge-base3296139c · behind 30 ·
착수 시 충돌 재측정 3건 ⇒ ★**§5 재측정 표와 일치**(그 사이 #19·#20 이 착지했으나 둘 다 문서 회차).

충돌 3건 — ★예측 2건 적중 · 1건 반증

1. Cargo.lock — 재생성(손 머지 0 · cargo build).

2. string.rs — ★설계 판단이 맞았으나 «형태»가 예상과 달랐다

  • ⒜ upstream +285/−31 = copyValueOf 2종 신설 + compareTo(Object) 브리지 + PUBLIC 플래그 스윕.
    우리 +8/−28 = charset 해석을 로컬 표 → 공용 charset::Charset 로 라우팅(4 호출부)하고 그 표 20줄 삭제.
  • 우리 8줄이 지키려던 것 = charset 해석의 «단일 출처»: ⑴ISO-8859-1·US-ASCII 가 String·InputStreamReader
    양쪽에서 같은 표로 동작 ⑵미지원 charset 의 UnsupportedEncodingException throw 를 Charset::resolve 한 곳으로
    ⑶기본 charset 경로는 UTF-8 폴백(JDK 규격).
  • ⒞ → ★ⓙ 다시 얹어야 한다. 근거 둘 다 실측: upstream 에 charset 모듈 0건(git ls-tree) ·
    c4665b0:string.rsdecode_str(:1078)·encode_str(:1087) 잔존 ⇒ 삼키지 않았다.

★★그런데 «얹기»는 이미 되어 있었다 — 진짜 판단은 «버릴 것인가»였다. 충돌면 한 곳에 upstream 의
신규 API 2종되살아난 표 2함수가 함께 있었고, 그 표를 쓰던 4개 호출부는 충돌 없이 자동병합돼
우리 Charset 라우팅을 유지
했다 ⇒ 신규 API 는 취하고 표는 버렸다.
통째로 취했으면 dead code 로 남아 §5 의 S3 완료조건(「charset.rs 배선으로 dead code 0」)을 깼다.
충돌면은 «표»에 났는데 의미가 갈린 곳은 «충돌하지 않은 호출부»였다 — 「union 자동병합 경계」의 실례다.

3. test_timer.rs — ★「되얹기」 예측이 반증됐다
upstream 이 우리 벽시계 테스트 2건을 ★manual clock + queued spawn + monitor notification 기반
결정성 스위트 12건으로 대체했다(Thread.sleep 기반 단정 0건). 우리 2건은 그 부분집합이다.
⇒ ★되얹을 자리가 사라졌다upstream 채택.
★★S4 가 남긴 「우리 테스트의 시간 의존」 별 축은 소멸했다.
단 «왜 2000ms 였는지»는 지우지 않았다 — 코드 줄이 사라졌으므로 §5 착지 기록과 워크로그에 인용 보존.

★★충돌 «목록에 없던» 파손 1건 — §4 가 경고한 형태가 실제로 났다

upstream 신규 io 테스트 3파일 5곳System.setProperty)Ljava/lang/Object; 로 부르는데,
우리는 PR #5 에서 JDK 규격대로 )Ljava/lang/String; 으로 고쳐 뒀다
⇒ ★충돌 마커 0줄인데 NoSuchMethodError 3건. 서술자만 String 으로 맞췄다(값은 _ 로 버려져 바인딩 무접촉).
새 처분이 아니다test_boolean·test_integer·test_long앞 회차에 이미 같은 처분(+2/−2)을 받았다.
java/util/Properties.setPropertyObject 반환은 JDK 규격상 옳아 무접촉.

green · 「해소분 0」

명령rc
cargo fmt --all -- --check0
cargo clippy --all -- -D warnings0
cargo clippy --workspace --exclude test_utils --target wasm32-unknown-unknown -- -D warnings0
cargo test --all0 — ★427 passed / 0 failed / 1 ignored
python3 scripts/check-worklog-json.py0

새 red 0: 착수 baseline 261/0/1 → 착지 427/0/1(+166). S1 169 → S2 191 → S3 216 → S4 261 → S5 427.
「해소분 0」: c4665b0 대비 삭제 파일 0 · 다른 파일 47건 전수가 우리 fork 고유 자산 ·
tracing::instrument 실사용 0(주석 1건) · tests/test_class_format.rs4/4.

경계

머지 0 · 새 PR 1(base main · 스택 아님) · force-push 0 · 리베이스 0 · main 직접 push 0 ·
S6·S7 무접촉 · upstream 코드 «개선» 0(수렴만) · upstream 발신 0 · §5 재측정 표 재작성 0.

dependabotBotand others added 11 commits July 20, 2026 19:58
Bumps [async-trait](https://github.com/dtolnay/async-trait) from 0.1.89 to 0.1.91.
- [Release notes](https://github.com/dtolnay/async-trait/releases)
- [Commits](dtolnay/async-trait@0.1.89...0.1.91)
---
updated-dependencies:
- dependency-name: async-trait
dependency-version: 0.1.91
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [bytemuck](https://github.com/Lokathor/bytemuck) from 1.25.1 to 1.25.2.
- [Changelog](https://github.com/Lokathor/bytemuck/blob/main/changelog.md)
- [Commits](Lokathor/bytemuck@v1.25.1...v1.25.2)
---
updated-dependencies:
- dependency-name: bytemuck
dependency-version: 1.25.2
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.103 to 1.0.104.
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](dtolnay/anyhow@1.0.103...1.0.104)
---
updated-dependencies:
- dependency-name: anyhow
dependency-version: 1.0.104
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.53.0 to 1.53.1.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](tokio-rs/tokio@tokio-1.53.0...tokio-1.53.1)
---
updated-dependencies:
- dependency-name: tokio
dependency-version: 1.53.1
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Expand Java 1.2 runtime API compatibility
* Document interrupt field access rationale
재측정된 충돌 3건을 해소했다(base = 착수 시 main 1983d9f · merge-base 3296139).
1. Cargo.lock — 재생성(손 머지 0 · cargo build).
2. java/lang/string.rs — ★설계 판단. upstream 이 copyValueOf 2종 신설과 함께
decode_str/encode_str 하드코딩 표를 «되살렸는데», 4개 호출부는 자동병합으로 우리
Charset 라우팅을 유지했다 ⇒ upstream 의 신규 API 는 취하고 죽은 표 2함수는 버렸다.
(그대로 뒀으면 dead code — §5 S3 완료조건 「charset.rs 배선으로 dead code 0」 위반)
3. test_timer.rs — ★upstream 채택. upstream 이 벽시계 테스트 2건을 manual clock +
queued spawn + monitor notification 기반 결정성 스위트 12건으로 «대체»했다.
⇒ S4 의 500→2000ms 여백은 «되얹을 자리»가 사라졌다(그 근거는 원장에 보존).
★충돌 «없이» 깨진 자리 1건(§4 가 경고한 형태): upstream 신규 io 테스트 3파일 5곳이
System.setProperty 를 )Ljava/lang/Object; 로 부르는데 우리는 PR #5 에서 JDK 규격대로
)Ljava/lang/String; 로 고쳐 뒀다 ⇒ NoSuchMethodError 3건. 서술자만 String 으로 맞췄다
(test_boolean·test_integer·test_long 이 앞 회차에 이미 같은 처분을 받았다 · Properties.setProperty 는 무접촉).
green 4종 rc=0 · cargo test --all 427 passed / 0 failed / 1 ignored (261 → +166) ·
c4665b0 대비 삭제 파일 0 · tracing::instrument 실사용 0(주석 1) · test_class_format 4/4.
…measured-conflicts]
§5 재측정 표는 재작성하지 않고 「[2026-09-04] S5 착지 기록」 절을 신설했다(test_timer.rs 예측 칸만
취소선 + 안내). STATE·REPORT 갱신 + 워크로그 쌍 신설(신설 DoD 의무 첫 적용).
…a-upstream-sync-s5-with-remeasured-conflicts]
CI beta 셀 3개 red(로컬 stable green). upstream 판본 lock 을 취한 뒤 cargo build 를 돌렸는데
그 lock 이 이미 유효해 cargo 가 아무것도 올리지 않았고, async-trait 이 내려갔다. 0.1.91 매크로가
#[must_use] 를 이중으로 달아 beta clippy double_must_use 가 jvm/ 의 #[async_trait] 트레이트 7자리를 물었다.
그 트레이트들은 main 과 바이트 동일이고 main 의 beta 셀은 green 이므로 원인은 코드가 아니라 lock 이다.
처방: main 의 lock 에서 출발해 다시 cargo build(§2 「도구가 다시 만든다」) ⇒ async-trait 0.1.92 유지 ·
델타는 libm 추가 1건 · #[allow] 를 뿌리지 않았다.
검증(로컬 beta 툴체인): +beta clippy 2종 rc=0 · +beta test --all 427 passed / 0 failed / 1 ignored.
…easured-conflicts]
「upstream 판본 취한 뒤 cargo build」는 그 자체가 beta red 를 만든 첫 시도의 서술이라 남기면 오도한다.
…-with-remeasured-conflicts]
STATE.md 진행중 → 완료(게이트③ PR #21 · --merge 착지 · squash 금지 사유) + 「착지로 base 가
바뀌므로 S6·S7 새 충돌 수는 다시 재야 한다」 1줄 + worklog .json 게이트③ 집행 1줄. 코드 변경 0.
@Jun025
Jun025 merged commit a0b5d3c into mainSep 3, 2026
9 checks passed
@Jun025
Jun025 deleted the feat/rustjava-upstream-sync-s5 branch September 3, 2026 22:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jun025@dlunch