โ ๋๊ฒฐ โ 2026-09-25 ์ดํ ๊ธฐ๋ก์
docs/worklog/YYYY-MM-DD-<slug>.md(ํ์ฐจ๋ง๋ค ์ ํ์ผ) ยท ๋ค์ =docs/next.mdยท ์งํ์ค =gh pr list -R Jun025/RustJava. ์ด ํ์ผ์ ๊ณ ์น๋ฉดscripts/check-ledgers-frozen.py๊ฐ red ๋ฅผ ๋ธ๋ค(๊ท์ฝAGENTS.mdยงRound Worklog).
(์์ โ 2026-09-17 ์ค์ธก: ์ฐฉ์ ์ ์ด๋ฆฐ PR 4๊ฑด(#56ยท#57ยท#58ยท#59). โ
๋ด ๊ฒฝ๋ก์ ๊ฒน์น๋ ๊ฒ์ ๋์ด๋ค โ
#59 ๊ฐ test-data/src/indy/make_indy_fixtures.pyยทtests/test_class_format.rs ยท #56 ์ด tests/test_class_format.rs.
โ
jvm-bytecode/src/interpreter.rsยทrustjava-runtime/ ์ ๊ฒน์นจ 0. โ ์ฐฉ์ง ์์๋ #56ยท#59 ๋จผ์ , ์ด PR ๋์ค์ด ๋ง๋ค
(๋ ๋ค ์ด๊ฒ๋ณด๋ค ์ค๋๋๊ณ MERGEABLE/CONFLICTING ์ฒ๋ถ์ด ์ด๋ฏธ ๊ฑธ๋ ค ์๋ค). ๊ฒน์นจ์ ์ ๋ถ append ํ ํฉ์งํฉ์ด๋ผ ํด์๋ ๊ธฐ๊ณ์ ์ด๋ค)
- [rustjava-2026-09-23-validation-rules-name-their-position-adopt-p0] parse-level ๊ฑฐ๋ถ 3์ข
ํ์ : extra bytes ๋ง ์ ํํ ์์น โ
Location::ByteOffset(u32)ยท truncated/unparsable ์ nom ์คํ์ ์ด 1๋ฐ์ดํธ ๋ณ์ด์ ์ฝ ์ ๋ฐ์์ ์์ ์ง์ ยฑ8B ๋ฐ์ด๋ผ ์ ์ง ยท version<45 ๋ ์์น ์์.ClassFileError24โ32B(ํฌ๊ธฐ ์ ๊ธ ๊ฐฑ์ ). ๋ณ์ด 3์ข red. ์ฑํ2026-09-23-validation-rules-name-their-position#p0. ์์ธdocs/worklog/2026-09-24-extra-bytes-name-their-offset.md. - [wie-2026-09-22-lgt-object-reference-gate-adopt-p0] GC ๋๋ฌ์ฑ ์ํ
Result์ ํ โget_fieldยทget_static_fieldยทloadunwrap 3๊ณณ โ?(ํธ์คํธ ์ค๋ฅ ๊ทธ๋๋ก) ยท ๋ถ๋ณ์ unwrap 2๊ณณ โUnraisableยท ์ค๋ฅ ์ ์ค๋จ(ํด์ 0). ์ ๋ณ์ข 0 ยท ๊ณต๊ฐ ์๋ช ๋ณ๊ฒฝ 0. ์๋ฐฉํฅ: ์ ์ํ ok โ unwrap ๋ณต์ ์ panic FAILED. ์ฑํ2026-09-22-lgt-object-reference-gate#p0ยท2026-09-24-unraisable-error-variant#p0. wie ํจ๋ ฅ์ crates.io ๋ฆด๋ฆฌ์ค ๋ค. ์์ธdocs/worklog/2026-09-24-gc-walk-propagates-host-errors.md. - [rustjava-2026-09-20-name-the-missing-bootstrap-class-adopt-p0] โ
๊ณต๊ฐ API ๋ณ๊ฒฝ(breaking):
JavaError::Unraisable(String)์ ์ค โ Java ์์ธ๋ก ๋ง๋ค ์ ์๋ ์คํจ.Jvm::newํจ๋ 2๊ณณ โErr(Unraisable)(๋น ์ง ํด๋์ค ์ด๋ฆ ํฌํจ) ยทJvm::exception์ฌ๊ท ๋ฐ๋ฅ(๊ฐ์ ์ค๋ ๋์์ ยซ๊ฐ์ ์์ธยป๋ฅผ ๋ค์ ๋ง๋ค๊ฑฐ๋ ๊น์ด 8 โUnraisable, ์ฒซ ์คํจ ๋ช ๋ช ) ยท[Ljava/lang/String;์จ๊น ์ฌํ์ด stack overflow โ loader ์ง๋ฌธ 2ํ. โ ์ธ๋ถ ์๋น์:let JavaError::JavaException(..) = ..irrefutable ๊ตฌ์กฐ๋ถํด๊ฐ ์ปดํ์ผ ์๋ฌ๊ฐ ๋๋ค(์ด repo 3๊ณณ ์์ ยท wie ๋ crates.io 0.1.1 ์๋น๋ผ ํ์ฌ๋ฆผ ๋ ๋ฐ์). ์ฑํ2026-09-20-name-the-missing-bootstrap-class#p0ยท2026-09-20-string-array-hiding-overflows-stack#p0. ์์ธdocs/worklog/2026-09-24-unraisable-error-variant.md. ๋ณด์ (-fix):stream_handler.rspublish์if let Err(JavaException)2๊ณณ โmatch+Unraisable์ ํ(์ผํด ์ ๊ฑฐ) ยท ํ๊ทstream_handler_propagates_unraisable_output_failures. - [rustjava-2026-09-18-bootstrap-argument-index-and-tag-adopt-p0] โ
๊ฒ์ฆ ๊ท์น์ด ๋ฉ์ถ ์์น๋ฅผ ๋งํ๋ค โ 11๊ท์น, ๋ณ์ข
1๊ฐ. ์ฑํ ์ ์
2026-09-18-bootstrap-argument-index-and-tag#p0. โ ์ ์ ๋ฐ์ฆ(์๊ฒ):validate_class๊ท์น์ 15/14 ๊ฐ ์๋๋ผ 14 ยท ๊ณ ์ ๋ฌธ์ฅ 13(@origin/mainc654ae2e). โ ์ ์: 13 ์ค 11์ด ํ๋ฅผ ๊ฑธ์ผ๋ฉฐ ๋ฉ์ถ ์์น๋ฅผ ์ฅ๊ณ ์์๋ค(pool 3 ยท field 3 ยท method 3 ยท interface 1 ยท class attribute 1) ยทthis_class/super_class2๊ฐ๋ ๊ฐ๋ฆฌํฌ ๊ณณ ์์ โInvalidFormat์ ์ง. โ ๋ฉ์ถค ๊ธฐ์ค: enum ์ ยซ๊ท์นยป์ด ์๋๋ผ ยซํ ์ข ๋ฅยป๋ก๋ง ์๋๋ค โInvalidFormatAt { cause, location: Location }1๋ณ์ข +Location5์ข .ClassFileErrorํฌ๊ธฐ ๋ถ๋ณ(๊ธฐ์กด ํฌ๊ธฐ ํ ์คํธ ๋ฌด์์ ํต๊ณผ). โ ๋ฌธ๋ฉด =<์ข ์ ๋ฌธ์ฅ> (<ํ> #<n>)ยท pool ์javap์ 1-๊ธฐ๋ฐ#Nยท ํ์ผ ๋ฐ์ดํธ 0. ๊ฒฝ๊ณ ๋ฌด์ด๋(์ ์ด ๋ณธ๋ฌธ ๋ถ๋ณ ยทall/anyโ ์ฒซ ์๋ฐ ์์น). โ ์๋ฐฉํฅ: ์ธ๋ฑ์ค 3์ข ๊ฐ์ (M1 ๋ฌธ๋ฉด์์ ์์น ์ญ์ ยท M2 field/method 0 ๊ณ ์ ยท M3 pool ์ฒซ ํค ๋ณด๊ณ ) ์ ๊ฑด red ยท pool ์ธ๋ฑ์ค(#11ยท#18ยท#34)๋ ๋ ๋ฆฝ ๋ฐ์ดํธ ์์ปค๋ก ๊ต์ฐจ ํ์ธ. - [rustjava-2026-09-23-stale-next-pointer-and-euc-kr-boundary-adopt-p0] charset ๋ณด๋ฅ ํ๋จ์
Charset::bytes_to_hold_back(wildcard ์๋ match)๋ก ์ฎ๊น ยทread()์ด๋ฆ ๋น๊ต 0 ยท ๋์ ๋ถ๋ณ ยท ๋ณ์ด ์๋ฐฉํฅ ํ์ธ. ์ฑํ2026-09-23-stale-next-pointer-and-euc-kr-boundary#p0. - [rustjava-2026-09-23-stale-next-pointer-and-euc-kr-boundary-adopt-p1]
## ๋ค์์ ๋ณธ ๊ฒฐ์ = โ ์์ ์ธต(ref + ์ ํ ์ฌ์ฌ + ์นด๋ ๋ฐ ํญ๋ชฉ๋ง ยท ์ฐ๋ฌธ ์ง๋ชฉ ๊ธ์ง). โ ๊ธฐ๊ฐ ๊ทผ๊ฑฐ = tower ์ ์ด๋ก ์ด๋ฆฐ ์นด๋ 0(32๊ฑด ์ ๊ฑด injected). ์ฑํ2026-09-23-stale-next-pointer-and-euc-kr-boundary#p1. ์์ธdocs/worklog/2026-09-23-next-section-canon-decision.md. - [rustjava-prune-declined-followup-proposals-2026-09-21] โ
์ถ์ฒ ํ์์์
2๊ฑด ๊ธฐ๊ฐ โ ์ด์์ ์ง์(2026-09-21 ์ฐ์ ์์ ์ ๋ฆฌ). โ
์ ํ ์ฝ๋ 0์ค ยท ์ ์ ์ 0 ยท ๊ฒ์ฌ๊ธฐ/CI ์ ์ค 0.
โ
๋ซ์ ๋(๊ฒ์ฌ๊ธฐ ๋ค๋ฌ๊ธฐ ์ถ):
2026-09-19-nonliteral-blind-spot-is-reported-not-gated#p0ยท2026-09-20-lock-script-output-order#p0. โ ๋จ๊ธด ๋(๋ฐํ์ ์ถ):2026-09-20-string-array-hiding-overflows-stack#p0ยท2026-09-20-name-the-missing-bootstrap-class#p0. โ โ **ยซ์ ์ธยป์ด๊ณ ยซ์ญ์ ยป๊ฐ ์๋๋ค** โproposals[]์์ ์ญ์ 0(์ง์ฐ๋ฉด 0-๊ธฐ๋ฐ#pN์ด ๋ฐ๋ ค ๋ค๋ฅธ ์ ์์ ref ๊ฐ ๋ฐ๋๋ค). ์์์ ์ ๋ก2026-09-17-ldc-asm-regeneration-declined.json๊ทธ๋๋ก. โ ์ค์ธก: ์๋น์ ํ์์ ์ฌํ โ open 4 โ 2 ยท ๋จ๊ธฐ๊ธฐ๋ก ํ ๋ ๊ทธ๋๋ก ์ด๋ฆผ(๊ณผ์ ์ฐจ๋จ 0) ยท ref ์ด์ 99 ๋ถ๋ณ ยทcheck-worklog-json.pyrc 0. โ ๋์ด๋ฆฌ๊ธฐ: ๊ทธ json ์declinedProposals[]์์ ref ์ค์ ๋นผ๋ฉด ๋ค์ ์ด๋ฆฐ๋ค. - [rustjava-error-path-string-array-hiding-overflows-stack-p1] โ
โ
**
[Ljava/lang/String;์ค๋ฒํ๋ก์ ์์ธ โ ์ง๋ ํ์ฐจ ๊ธฐ์ฌ๊ฐ ยซํ๋ ธ๋คยป.** ์ฑํ ์ ์2026-09-20-error-path-class-closure#p1ยท โ ์กฐ์ฌ ํ์ฐจ ยท ์ ํ ์ฝ๋ 0์ค. โ ์ฌํ: cap 20 ยท ๊ธฐ๋ณธ ์คํ โstack overflow, abortingrc 134. โ โ ๋ฐ์ฆ: ใ๋ก๋๋ก ์ ๋์์ cap ์ด ๋ชป ๋๋ธ๋คใ๋ ๊ฑฐ์ง โ ์ด์๋จ์ ์ ์คํ์์asked = cap+1(=[C์ ๊ฐ์ ๋ชจ์). ์์ธ์ โ ํด๋น ๋น์ฉ. โ ๋ ์์ก์ด๊ฐ ๋ฐ๋ก ์์ง์ธ๋ค(๊ฐ์ค ๋ถ๋ฆฌ): cap 18โ19 ยท ์คํ 2 MiBโ4 MiB(cap 20 ๊ณ ์ ). โ ์ํ์ ๋ฐฑํธ๋ ์ด์ค๋ก:fillInStackTraceโinstantiate_arrayโresolve_classโload_class(None)โexceptionโnew_classโinvoke_specialร4โThrowable.<init>โfillInStackTraceยท โ ํ ํด โ 57 ํ๋ ์. โ ๋์กฐ:[C๋ง ๊ฐ์ด ๋๋ค ยท[Iยท[Ljava/lang/Object;ยทjava/lang/Integer๋ฑ์ asked=0 โ ใ๋ฐฐ์ด์ด๋ฉด ๋๋คใ๊ฐ ์๋๋ค. โ ๊ณ ์นจ = ์ค์ ํค๋์ ๊ฑฐ์ง ๋ฌธ์ฅ ํ๋ ยท ๋ฐฐ์ด ์ ์ธ๋ ์ ์ง(์ด์ ๊ฐ ๋ค๋ฅด๊ณ ์ฌ์ ํ ์ ํจ) ยท ๊ฐ์ ์๋ฐฉํฅ ํด๋น ์์(๋์ ๋ฌด๋ณ๊ฒฝ). โ ๋จ๊ธด ๊ฒ: ์ํ์ ์ ํ์ ๋ฐ๋ฅ์ด ์๋ค(์ค๋ ๋ฟ์ ์ ์์ ๋ฟ) โ ํ์ ์นด๋ ใJvm::exception์ ๋ฐ๋ฅ์ใ(M). - [rustjava-error-path-name-the-missing-bootstrap-class-p0] โ
โ
์๋ ๋ถํธ์คํธ๋ฉ ํด๋์ค์ ยซ์ด๋ฆยป์ ๋งํ๊ฒ ํ๋ค. ์ฑํ ์ ์
2026-09-20-error-path-class-closure#p0. โJvm::new์bootstrap_classes๋ฃจํ.unwrap()โlet โฆ elseยท ๋ฌธ๋ฉด = ์ด๋ฆ + ์ฌ์ฏ ์ค ํ๋ + โ ์ด๋์ ๋ฌผ์๋์ง(ํธ์คํธ ๋ก๋์ด์งjava.class.path๊ฐ ์๋๋ค). โ ๊ฐ์กฑ์ ์ธ๊ณ ๊ณจ๋๋ค: ์ด ์ถ 1๊ณณ ๊ณ ์นจ โ ๊ฐ์ ยซ๋ชจ์ยป์ ๋ ์ง์คํธ๋ฆฌ ์กฐํ 4๊ณณ์ ๋ค๋ฅธ ์ถ(๋ด๋ถ ๋ถ๋ณ์)์ด๊ณ ์ค์์ด ๋ฟ์ง ์์์ ์ค์ธก(์ต๋ช ๊ฑฐ์ 0/37) โ blind spot ์ผ๋ก ์ ๊ณ ๋์๋ค. โ โ ์ค์์ด ์๊ธฐ ๋์ผ๋ก ๋ณด๊ณ ๋ ์ข์ ์ชฝ์ ์ธ๊ณ ์์๋ค โPanicked๊ฐ ๋ฌธ๋ฉด์ ์ ์ฝ์๋ค. ์ด์ payload ๋ฅผ ์จ๊ธด ์ด๋ฆ๊ณผ ๋์กฐํ๊ณPanickedAnonymously๋ ๊ทธ ์์ฒด๊ฐ ์คํจ. โ ์๋ฐฉํฅ(๋ ์ฌ์ค์ ยซ๋ฐ๋กยป): ๊ฐ์ โ ์ด๋ฆ ์ ์ค 0/5 ยท7 by name ยท 5 anonymousFAILED โ ๊ณ ์นจ โ 5/5 ยท12 ยท 0ok. โ rc ๋ง ๋ณด๋ฉด ๋์ด ๊ฐ๋ค(์์ชฝ ํจ๋). โ ๋๊ฐ: ๋ฐํ์ 0. ํจ๋โ์ค๋ฅ ๋ฐํ์ ํ์ง ์์๋ค(JavaError๋ณ์ข 1๊ฐ ยท ์๋ ๊ฒ์ด ๋ฐ๋ก ์์ธ๋ฅผ ๋ง๋ค ํด๋์ค ยท ์ฌ๋ด 3๊ณณ + ๊ณต๊ฐ enum ํ๊ดด) โ ์ ์ ์นด๋. - [rustjava-string-on-the-error-path-p0] โ
โ
์ค๋ฅ ๊ฒฝ๋ก์ ํด๋์ค ์งํฉ์ ํ ๋ฒ์ ์๋ค โ ๋ต์ ยซ๋ยป์ด ์๋์๋ค. ์ฑํ ์ ์
2026-09-19-string-on-the-error-path#p0. โ ํ๋ณด๋ฅผ ยซ์ ๋ยปํ๋ค(์ ๋ชฉ๋ก ์๋): ๊ธฐ๋ก ๋ก๋๋ก ์ ์ ๊ตฌ์ฑ 1ํ โ ์์ฒญ 51 ยท ์๋ก ๋ค๋ฅธ ์ด๋ฆ 42 ยท ๋ฐฐ์ด 5 ์ ์ธ โ ํ๋ณด 37. โ โ 5๊ฐ๊ฐ ๋ ์ฌ๊ทํ๋ค:ThrowableยทErrorยทLinkageErrorยทCharSequenceยทComparable= ๊ธฐ์กด ๋ ์ด๋ฆ์ ์์ํยท์ธํฐํ์ด์ค ํํฌ. โ ์ฒ๋ฐฉ = ํํฌ walk(assert 2 โ ์์ ๋ชฉ๋ก 1 ยท ๋ก๋์ ์ง์ ์ง์). โ ํํฌ 9๋ก ๊ณ์ฐ์ด ๋ซํ๋ค(๋งํ 2 + ์ฌ๊ท 5 + bootstrap 2) โ ๋ฏธ์ค๋ช 0. โ ์๋ฐฉํฅ:0 recursedok โextend2์ค ์ ๊ฑฐ โ 5 recursed FAILED โ ๋ณต์ ok. ๊ธฐ์กด ์ ๊ธ 2๊ฑด ๋ฌด์์ ํต๊ณผ. โ ๋๊ฐ: ๋ก๋ ์ง๋ฌธ 44โ51 ยท ์ค์ ~15์ด ยท โ ๋ฐฐ์ด 5๊ฐ ์ ์ธ(๋ก๋๊ฐ ํฉ์ฑํ๋ฏ๋ก ํด๋์ค ์งํฉ์ด ๋ชป ๋น ๋จ๋ฆฐ๋ค โ ๋จ[Ljava/lang/String;๋ ์ํ 20์์๋ ์ค๋ฒํ๋ก = in-process ๋ถ๊ฐ). โ ํ์ 2๊ฑด: ๋ถํธ์คํธ๋ฉ unwrap ์ด ์ด๋ฆ์ ๋งํ์ง ์๋๋ค(S) ยท[Ljava/lang/String;์ ๋ ๋ฒ์งธ ์ํ(M). - [rustjava-checker-output-determinism-has-no-guard] โ
โ
๊ฒ์ฌ๊ธฐ ์ถ๋ ฅ ์์๋ฅผ ์ ๊ฐ๋ค โ ์ต๊ด์ ๊ท์น์ผ๋ก. ์ฑํ ์ ์
2026-09-19-merge-drops-deterministic-order#p0ยท ์ ์คscripts/check-script-output-order.py(AST) + CI ์กscript_output_order+ DoD 10๋ฒ์งธ ์ค. โ ๋ถ๋ณ์ ํ ์ค:scripts/*.py์ ์ด๋คforยท์ปดํ๋ฆฌํจ์ ๋sorted(...)๋ฐ์์ set ์ ์ํํ์ง ์๋๋ค. โ **ใ๊ทธ๋ฌผ 0ใ ์ฌํ**: ๋น๊ฒฐ์ ์ฑ์ ๋๋๋ฆฐ ์ฑ ํ์ด์ฌ ๊ฒ์ฌ๊ธฐ 4์ข rc 0 ยทcargo fmtrc 0. โ ํด์ ์ฌ๋ถ ์ ํ ํ์ธ โscripts/ยทrust.yml์ต์ข ์ปค๋ฐ์35f34797(๊ทธ ์์ ์์ ). โ ์ ์ ์ ๊ณ ๋ฅธ ์ด์ : ๋PYTHONHASHSEED์ฌ์คํ์ โ ํ์ฐจ๋น ์ฝ ์ ๋ฐ ๋์ ๊ฐ๊ณ (ํด์ ์์ = ์ ๋ ฌ ์์๋ฉด ๋ฌด์ฆ์),assert sorted๋ ๋ค๋ฅธ ๊ณณ์ ์ ์ถ์ฒ๋ฅผ ๋ชป ์ก๋๋ค(์ ์ ์์ ์ ์ฝ์ ๊ธฐ์ ). โ ์๋ฐฉํฅ 2ร2(์ ํ ํธ์ถ๋ถ): M1check-merge-dropped-symbols.py:254์ ๊ฑฐ โ rc 1 โ ๋ณต์ rc 0 ยท M2 โ ๋ค๋ฅธ ํ์ผcheck-dod-ci-parity.py:215โ rc 1 โ ๋ณต์ rc 0. ์ ์7 script(s): 0ยท 0.06์ด. โ ์ธก์ ๋ ์ฌ๊ฐ: ํํ ์ธํจํน ๋ฐํ set ์ ๋ชป ๋ณธ๋ค โci_runs, ci_tcs = parse_ci(...)์ ์ ๋ ฌ ์๋ ์ํ๋ฅผ ๋ฃ์ผ๋ โ rc 0 ํต๊ณผ. ํ์ ์ ์#p0. โ โ ๊ฒ์ดํธยฒ ๋ฐ๋ ค ์น๊ณ(-fix): R1", ".join(myset)ยทprint(*myset)์ด ํต๊ณผํ๋ค(์ฌ๊ณ ์ ๊ฐ์ ๊ณ๊ธ ยท ๋ฏธ๊ธฐ์ฌ) โstr.join์ฒซ ์ธ์ +Starred(Load) ๋ฅผ ๊ฒ์ฌ์ ๋ํ๊ณ ์ฝ์ ๋ฌธ๊ตฌ๋ฅผ โ **ยซfor/์ปดํ๋ฆฌํจ์ ยท str.join ยท *-์ธํฉยป ์ธ ์์น๋ก ๋ช ์** ยท R2 ใsetโdict ๋ set ์์ ์กํ๋คใ๊ฐ ๊ฑฐ์ง(dict.fromkeys)์ด๋ผ ์ญ์ . โfromkeys๋ง ๋ฐ์ชฝ์ผ๋ก ์ก์ง ยซ์์๋คยป โ ์ง์ง ๊ณ๊ธ์ ยซ์ปจํ ์ด๋ ์์ ์ค์ผยป์ด๊ณ ํ๋๋ง ์ก์ผ๋ฉด ์๋ ํ๋ก๊ทธ๋จ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ค(์ค๋ 0๊ฑด โ ๋ฌธ์ ๊ฒฐํจ) ยท R3 โ python ๋ฆฐํฐยทํฌ๋งคํฐยทํ ์คํธ 0(์ถ์ ํ์ผ 0๊ฑด ยทrust.yml์ ๊ฒ์ฌ๊ธฐ 5ํ ์คํ๋ฟ) โ **์ด ํ์ผ์ ๋ณด๋ ๊ธฐ๊ณ๋ CI ์ก ยซํ๋ยป**์์ ๋น์ผ๋ก ์ ์๋ค(ํ๋ค์ค๋ ๋ง๋ค์ง ยซ์์๋คยป). โ ์น๊ณ ์๋ฐฉํฅ:joinยท*๋ฐ๋ก rc 1 โsorted()์์ฐ๋ฉด ๋ฌด๊ฒ์ถ(์คํ 0) โ ๋ฐ๋ก ์ ๊ฑฐ rc 0 ยท ์ M1ยทM2 ํ๊ท ์ฌํ์ธ. - [rustjava-error-path-needs-java-lang-string-measure-first] โ
โ
์ค๋ฅ ๊ฒฝ๋ก์ ๋ ํ๋
java/lang/Stringโ โ ยซ์ฌ๊ทํ๋คยป๋ก ํ์ ํ๊ณ ์ ์ฌ ํ์ธ์ ๋ฃ์๋ค. ์ฑํ ์ ์2026-09-19-fallback-class-absence-fails-at-construction#p0. โ ์ ์์ ์กฐ๊ฑด์ด ใ์ธก์ ์ด ๋จผ์ ใ์๊ณ ๊ทธ๋๋ก ํ๋ค. โ ์ค์ธก: ์ํ 116 ์์กด โ 117 SIGABRT ยซstack overflow, abortingยป(์์ชฝ 2ํ ์ฌํ) ยท โ ์ํ 100000 ๋ abort โ ๋ฐ๋ฅ์ด ์๋ค. โ โ ์๋์ ๊ตฌ์กฐ๋ก:bootstrap_classes6๊ฐ์ String ์์ ยทfrom_rust_class๋ ์ด๋ฆ์[B(nameBytes) ๋ก ๋ฃ๋๋ค โ ์ฒ์ ํ์ํ ๊ณณ์ ํ๋กํผํฐ ๋ฃจํ. โ ์๋ฆฌ: ํ๋กํผํฐ ๋ฃจํ ์(๊ธฐ์กดNoClassDefFoundErrorํ์ธ์ ๊ทธ ๋ค๋ผ String ํ์์ ๋ฆ๋ค) ยท ๊ด์ฉ์ ๋์ผ(๋ก๋์ ์ง์ ์ง์ ํ resolve โ bareresolve_class๋ ์ํ ์์ ์๊ฒ ๋๊ธด๋ค). โ ์๋ฐฉํฅ(์ ํ ํธ์ถ๋ถ): green โ ์ ๊ฑฐ ์ โ ๋ฐ์ด๋๋ฆฌ์งธ SIGABRT โ ๋ณต์ green. โ ์์ ๋น์ฉ: ๋ก๋ ์ง์ 1 โ 2ํ(๊ฒฐ์ ๋ก ๊ณ์). โ ๋ฒฝ์๊ณ๋ ๋ฒ๋ ธ๋ค โ ํ์ ๋ ์ธ ๋ถํ๋ก ๊ฐ์ ํ์ p50 ์ด 69ms~1690ms ๊ณ ๊ต๋ 8ํ ์ค 3ํ๋ ํ์ธ ์๋ ์ชฝ์ด ๋ ๋นจ๋๋ค โ ์๋ฅผ ์ฃผ์ฅํ์ง ์๋๋ค. โ ๋ฏธ์ธก์ : ๋ ํด๋์ค์ ์์ฑ์ยท์ ์ ์ด๊ธฐํ๊ฐ ๋ฟ๋ ๋๋จธ์ง(ํ์ ์นด๋). - [2026-09-19-partial-clone-blob-vs-absence-p0] โ
โ
**
check-merge-dropped-symbols.py์ ์ถ๋ ฅ ์์๋ฅผ ๊ณ ์ ํ๋ค โ ๋ ํ์ฐจ๋ฅผ diff ํ ์ ์๋ค.** ์ฑํ ์ ์2026-09-19-partial-clone-blob-vs-absence#p0. โ ์ฝ๋ 1์ค(+์ฃผ์ 8์ค) ยท.rs0์ค. โ ์ฌํ:origin/mainํ๋ณธ ยทPYTHONHASHSEED=random10ํ โ ์์ 2์ข (๊ฐ์ 6๊ฑด) โ ์๋ ์ฐจ์ด๊ฐ diff ์ ๋ณด์๋ค. โ โ ์ ์ ์ง๋จ์ ๋ถ์ ํ:findings๋ set ์ด ์๋๋ผ list ์ด๊ณ ์ด๋ฆ์ ์ด๋ฏธ ์ ๋ ฌ๋ผ ์์๋ค โ set 4๊ฐ ์ค ์ถ๋ ฅ์ ๋ฟ๋ ๊ฒ์ โ **changed(๊ฒฝ๋ก) ํ๋๋ค. โ ใprint siteใ๊ฐ ์๋๋ผ โ ์ถ์ฒ์์** ์ ๋ ฌํ๋ค(check()์ ๋ฐํ๊ฐ๋ ๊ฒฐ์ ์ ์ด์ด์ผ ํ๋ฏ๋ก). โ ์๋ฐฉํฅ: 2์ข โ 1์ข โ ๋๋๋ฆฌ๋ฉด 2์ข . โ ์ฐพ์ ๊ฒ ๋ถ๋ณ(15์ค ยท ์งํฉ ์ผ์น ยท rc 1). โ ๋๊ฐ: ์๋ฌด๋ ์ ๊ทธ์ง ์๋๋ค โscripts/ํ ์คํธ ํ๋ค์ค 0 ยท ๋น๊ฒฐ์ ์ฑ์ ๋ฃ์ด๋ ํ์ด์ฌ ๊ฒ์ฌ๊ธฐ 4์ข rc 0 ยท fmt rc 0 โ โ ๊ทธ๋ฌผ ยซ0ยป. ํ์ ์ ์์ผ๋ก ๋จ๊ฒผ๋ค. - [2026-09-18-nonliteral-exception-call-sites-p0] โ
โ
๋น๋ฆฌํฐ๋ด ์ฌ๊ฐ์ ยซ๊ด๋ฌธยป์ด ์๋๋ผ ยซ๋ณด๊ณ ยป๋ค โ ์ ์์ ์ ์ ๋ ๋ค ์๋ฉธ. ์ฑํ ์ ์
2026-09-18-nonliteral-exception-call-sites#p0. โ ์ ์ ์ฌ์ธก: ใbaseline 0ใ โ โ 1(๊ทธ 1์๋ฆฌ๋ ์ ์์ด๊ณ ยซ๋น๋ฆฌํฐ๋ด์ด์ด์ผ๋งยป ํ๋ค โ ๋ฆฌํฐ๋ด์ด๋ฉด ์ด ๊ฒ์ฌ๊ธฐ๊ฐ red) ยท ใ์ฃฝ๋๋คใ โ โ ๋๋ ์ ์ฃฝ๋๋ค(#76 ์ฐฉ์ง) โ ํด์ ์ด ยซ์ฃฝ์ยป์์ ยซํ๋ฆฐ catchยป๋ก ๋ด๋ ค๊ฐ๋ค. โ ๊ด๋ฌธ์ 0์ผ๋ก ๊ฑธ์์ผ๋ฉด ์ ์๋ ๋ main ์ด red ์๋ค โ โ ์ ์์ด ์๊ธฐwhy์ ๊ทธ ๋น์ฉ์ ์๊ณ ํ๊ณ 4์๊ฐ ๋ค ํ์ค์ด ๋๋ค. โ ์ง์ ๊ฒ: ๋งค ์คํ์ ์ฌ๊ฐ์ ์ธ์ด ์ฐ๋๋ค(never fail) ยท 1ํ์ผ +90/โ6 ยท ์ DoD ๋ช ๋ น 0 ยท ์ CI ์ก 0 ยท ์ข ๋ฃ์ฝ๋ ๋ถ๋ณ. โ ์ถ: ์ ํ ์ฝ๋ ์ฃผ์ โ 1โ2(ํ์ผ:์ค ์ง๋ชฉ) ยท ์๋ณต โ 1 ยท rc ์์ชฝ 0 ยท ์ ์ด ๋ฏผ๊ฐ๋ 42. โ ๋๊ฐ: ์ฐํ ์๋ ๋ฌด์ํ ์ ์๋ค ยท ์๋ ์ ์ด๋งํผ๋ง ์ ํ ยท ์ ํ/ํ ์คํธ ๋ฏธ๊ตฌ๋ณ(ํ์ ์นด๋). โ ํ๊ท ๋์ ์ค์ค๋ก ๋ง๋ค๊ณ ์ฌ์ ๊ฑท์ด๋๋ค(๋ ๋ฒ ๊ฑท๊ธฐ ยท ๊ฐํ ์ธ๋ฑ์ค) โ ์ต์ข ๋น์ฉ ์ ์์ฐจ ์์. - [rustjava-assert-loadable-rederivation-did-not-come-up-short] โ
โ
๋์ ๋๋ฅผ ๋ฏฟ์ง ์๊ณ ยซ๋จ์ธยปํ๋ค โ ๋ ์ถ ๋ชจ๋ fail-closed(exit 2). ์ฑํ ์ ์
2026-09-19-loadable-set-source-of-truth#p0. โ 1ํ์ผ +38/โ2. โ ๋จผ์ ์๋ค: ๊ฐ์ ๊ฒ์ ๋ค ๊ฐ์ง๋ก ์ธ์ด ์ ๋ถ 268 ยท โ ํ๋ฆฌ๊ฒ ์ธ ์กฐ๊ฑด๋ 0(ํ ์ค ๋ยท์ผํ ์์ยท์ฃผ์ ์ยท์ค๋ณต ์ด๋ฆ) โ green ์์ ์์ํ๋ ํ๊ท ๋ฐฉ์ด๋ค. โ ๋ ์ถ: โดํ์ฑ โ ๋ ๋ฆฝ ์ฆ์ธ(์์ฌ ๋์์ ์๊ธฐ ๋งค์น๋ ์ฆ๋ช ์ด ์๋๋ค) โต๋ฑ์ฌ ์ โ ๊ณ ์ ์ด๋ฆ ์(โ ์ ํ ์์ ์ด๋ฆ์ผ๋ก ์ฐ๋๋ค). โ ์๋ฐฉํฅ: ์ดํ ๊ฒฐํจ ยซ๋ยป์ ์ ํ ์คํฌ๋ฆฝํธ์ ๋์ด๋ ค ๊ฐ๊ฐ rc=2(265โ268 ยท 268โ263 + ์ถฉ๋์ ์ง๋ชฉ) ยท ์ํ์ rc=0. โ ๋ธ๋ฆฌํ 3๋ฌธ: ๋น๊ต ๋์ = ์์ค ์์ (๊ธฐ์ค์ ยท์ง์ ๊ฐ ์๋) ยท ์ฒซ ์คํ/์ ๋นํ ๊ฐ์ = โ ์๊ธฐ์ง ์๋๋ค(๊ธฐ์ต์ด ์๋ค) ยท โ ์ฃฝ๋๋ค(exit 2) โ ํ์ ํ์ฐจ์ ใ์ฐ๊ณ ์ ์ฃฝ๋๋คใ์ ๊ฐ๋ ธ๊ณ ์ฌ์ ๋ฅผ ์ ์๋ค(์ฌ๊ฐ ์ธก์ โ ์๊ธฐ ์ ๋ ฅ ์ค๋ ). โ ๋๊ฐ: ๋ฑ์ฌ ๋ฐฐ์ด ยซ๋ฐยป ํธ์ถ์ด๋ฉด false red ยท ์ง์ง ์ค๋ณต ๋ฑ์ฌ๋ false red(์ค๋ 0) ยท โ ๋ฐ๋ฅ์ด์ง ์ฆ๋ช ์๋(๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ํ๋ฆฌ๋ฉด ํต๊ณผ) ยท ๋น์ฉ ์ ์์ฐจ ์์. โ ์ ์tradeoff์ ๊ฐ๋ ธ๋ค: ใ์ค ํํ์ ๋ฌถ์ธ๋คใ๋ฅผ โ ์ถํ ๊ณ์๋ก ์์ด๋ค(์ค๋ ์ค ์์ ๋์ผ). - [rustjava-loadable-set-from-loader-vs-rederive-decision] โ
โ
์ ์ฌ ๊ฐ๋ฅ ์งํฉ์ ยซ์ฌ์ ๋ยป๋ฅผ ์ ์งํ๋ค โ ๋ก๋์์ ์ฝ์ง ์๋๋ค. ์ฑํ ์ ์
2026-09-18-named-exception-classes-are-loadable#p2. โ ์์ ๊ฒฐ์ ยท ์ฝ๋ 0์ค ยท ์ฐ์ถ =docs/loadable-set-source-of-truth.md. โ ์ ์ ํ์ธ: ใ4์ค 3์ด ์ฌ์ ๋ใ๋ ์ฐธ(๊ณ ์นจ ์ปค๋ฐ89c2e83c์์ ๊ฐ๋๋ค โ loadable 3 ยท named 1). โ โ ๊ทธ 1๊ฑด์ด ๊ฒฐ์ ํ๋ค:named(์ฝ๋๊ฐ ๋ฌด์์ ๋๊ธฐ๋๊ฐ)๋ ๋ก๋๊ฐ ๋ตํ ์ ์๋ค โ ๋ก๋ ์ฝ๊ธฐ๋ ํ์ ํ๋๋ฅผ ์์จ ๋ฟ ํ์ฑ์ ๋ชป ์์ค๋ค(๊ทธ ์ ๋ฐ์์ ํ์ ํ์ฐจ๊ฐ โ 4์๊ฐ 31๋ถ ๋ค์ ๋ ์ก์๋ค โ โ **ใ๋ค๋ฅธ ํจ์ 8์ข 41์๋ฆฌใ๋ฅผ ์ธ์ด๋ด๋ ์ต์ปค ํจ์ ์ด๊ณ , ์ธ๋ฉด 33 ยท ๋ง๋ ๋ต์ 0 ์ด๋ค). โ ๋๊ฐ ์ค์ธก**: ์ด๊ฑฐ API 0๊ฐ(268 ๋ฑ์ฌ๊ฐ ํจ์ ยซ์ยป ์ง์ญ ๋ฐฐ์ด) โ ๊ฒ์ฌ๊ธฐ ์ ์ฉ ์์ฐ API ๊ฐ ํ์ ยท ํํ 0.8์ดยท๋ฌด๋น๋์ธ๋ฐrust.yml5์ก ์ค 4์ก์ด ๊ทธ ํ์์ด๋ค. โ โ ๊ฒฐ์ ์ ์ค์ธก: ์ดํ ๊ฒ์ฌ๊ธฐ๋ฅผ ์ง๊ธ ํธ๋ฆฌ์์ ๋๋ฆฌ๋ฉด 265/263 โ ๋ฑ์ฌ ์ค 268 โ โ ๋ถ๋ณ์ ํ๋๋ก ๊ฒฐํจ 2๊ฑด์ด 1ํ์ฐจ์ ์กํ์ ๊ฐ(ํํ 268/268/268). โ ๋จ ยซ๋ชจ๋ ์ค๊ท์ยป์ ๋ชป ์ก๋๋ค(๊ณผ์๊ณ์ ๊ณ๊ธ๋ง). โ ๋ธ๋ฆฌํ ์ ์ 1๊ฑด์ด ๊ฑฐ์ง: ์ด repo ์machine-independence-guard๊ฐ ์๋ค(๋ค๋ฅธ repo ์ถ). โ ์ฌ๊ฐ ์กฐ๊ฑด ์ฌ์ ๋ฑ๋ก: loadable ์ฌ์ ๋ ๊ฒฝ๋ก์์ ์ธ ๋ฒ์งธ ๊ฒฐํจ์ด ๋์ค๋ฉด ๋ค์ ์ฐ๋ค(ใ๊ณ ์นจ ์ดํ 0ใ์ ํ๋ฃจ์ง๋ฆฌ๋ผ ๋ ผ๊ฑฐ๋ก ์ฐ์ง ์์๋ค). - [2026-09-19-exception-reports-instead-of-aborting-p0] โ
โ
๋ณด๊ณ ์์ ๋ถ์ฌ๋ ๋ณด๊ณ ๋ ์ ์๋ค โ ๋ก๋์ ์ง์ ๋ฌป๊ณ ยซ์ด๋ฆ์ ๋ค์ดยป ์คํจํ๋ค. ์ฑํ ์ ์
2026-09-19-exception-reports-instead-of-aborting#p0. โ ์ด ํ์ฐจ๊ฐ ๊ทธ ์ํ์ ยซ์ฒ์ ์ค์ธกยปํ๋ค(์ ์ ํ์ฐจ๋ ใ์ค์ธก ์๋ใ์ด๋ผ ์ ์๋ค): ์จ๊น ๋ก๋๋ก 6/21/61/121 ์๋ณต ํ ์๋ฃ ยท ์ํ 160ยท200 โ โ SIGABRT ์คํ ์ค๋ฒํ๋ก โ ๋ฐ๋ฅ ์์ ยท 121~160 ์ฌ์ด์์ ์ฃฝ๋๋ค. โ โ ์ธก์ ์ด ์ค๊ณ๋ฅผ ๋ ๋ฒ ๊ธฐ๊ฐํ๋ค: โด๋ถํธ์คํธ๋ฉ ๋ชฉ๋ก ์ถ๊ฐ โ 6 ํ ์คํธ ์ฆ์ฌ(ํด์์ด ยซ์ด๊ธฐํยป๋ฅผ ๋๋ ค ์ค๋ ๋๊ฐ ํ์) โต์์คํ ๋ก๋ ๋คresolve_classโ ์ ์ 6/6 ์ธ๋ฐ โ ์จ๊น ๋ก๋์์ ์ฌ์ ํ ์คํ ์ค๋ฒํ๋ก(์์ ๋ง ์ด๋). โ ์ฒ๋ฐฉ: ์์ธ ๊ธฐ๊ตฌ๋ฅผ ์ฐํํด ๋ก๋์ ์ง์ ๋ฌป๋๋ค โ ์์ผ๋ฉด ์์ฑ ์์ ์ ์ด๋ฆ์ ๋ค์ด ์คํจ ยท ๊ทธ ๋ค ๋ฑ์ฌํด ์ฌ์ง์ 0. โ ์ถ: ์ ๋ฐ์ด๋๋ฆฌ์งธ SIGABRT โ ํshould_panicํต๊ณผ ยท ์ ์ ๊ธฐ๋ 6/6 ๋ถ๋ณ. โ ๋๊ฐ: โ ํจ๋์ด๊ณAGENTS.md์ ์ถฉ๋ํ๋ค(๋์ ๋์ ๊ฐ๊ฐ ยซ๋ถ๊ฐ๋ฅยปยทยซ460์๋ฆฌ ๋ฌด์ธ ๋ณ๊ฒฝยป์ด๋ผ ๊ธฐ๊ฐ ยทJvm::new๋ ์ด๋ฏธ unwrap ํ๋ค) ยท ํ์๋ณด๋ค ์ผ์ฐ ์คํจ ยท ์ด ์ํ๋ง ๋ง๋๋ค(String์ ๋ฏธ์ธก์ ยท ํ์ ์นด๋). - [rustjava-jvm-exception-throws-instead-of-unwrap] โ
โ
์ผ์ผํค๋ ค๋ ์์ธ๋ฅผ ๋ชป ๋ง๋ค๋ฉด ์ฃฝ๋ ๊ฒ์ ยซ๋ณด๊ณ ยป๋ก ๋ฐ๊ฟจ๋ค. ์ฑํ ์ ์
2026-09-18-named-exception-classes-are-loadable#p1. โ ์๊ทธ๋์ฒ ๋ถ๋ณ ยท variant 0 ยท ํธ์ถ๋ถ ํธ์ง 0. โ ๊ธ์:from_rust_stringยทnew_class์ ์คํจ๋ ์ด๋ฏธJavaError(= ์๋ฐ ์์ธ)๋ค โ unwrap ์ด ๊ทธ๊ฒ์ ๋ฒ๋ ธ๋ค. โ ๊ทธ๋๋ก ๋๋ ค์ค๋ค. โ ์ค์ธก:panicked โฆ unwrap() on an Err value: JavaException(java/lang/NoClassDefFoundError)โ โ ์ฌ๋ฐ๋ฅธ ๋ณด๊ณ ๊ฐ ํจ๋ ๋ฉ์์ง ์์ ์ค๋ ค ์ฌ๋ผ์ก๋ค. โ ๋๋ฌ์ฑ ๋ ์ถ: ์๊ธฐ ํธ์ถ๋ถ 0(named 43 ์ ๊ฑด loadable + 43 ์ ๊ฑด String ์์ฑ์ ๋ณด์ ยท ์ด ํ์ฐจ ์ค์ธก) โ โ ๊ณต๊ฐ API ๋ก๋ ๋๋ฌ(wie๊ฐ ์ฃ๋๋ค ยท ํธ์คํธ๊ฐ ์ฃฝ๋๋ค). โ ์๋ฐฉํฅ(์ ํ ํจ์): ์ FAILED(ํจ๋) โ ํ ok ยท ๋๋๋ฆฌ๋ฉด red. โ ํ๊ธ 0 ์ ๊ทผ๊ฑฐ:.exception(846โ846 ยทJavaError::527 ํธ์ง 0 โ variant ์ถ๊ฐ์์ด์๋ค๋ฉดlet โฆelse460์๋ฆฌ๊ฐ ์กฐ์ฉํ ์๋ค(๊ทธ๋์ ๊ทธ ์์ ๋ฒ๋ ธ๋ค). โ ๋๊ฐ: ์คํจ ์ ๋ค๋ฅธ ํด๋์ค์ ์์ธ๊ฐ ์จ๋ค โ ํด๋์ค๋ก ๋ถ๊ธฐํ๋ ์ ํ 12์๋ฆฌ๋ ๋ชป ์ก๊ณ ์ ํํ๋ค(์ฃฝ๋ ๊ฒ๋ณด๋ค ๋ซ์ง๋ง ๋ฌดํดํ์ง ์๋ค). โ ๋ถ๋ณ: ํดํ ๊ฒฝ์ฐ(ํด๋ฐฑ ํด๋์ค ์์ฒด ๋ถ์ฌ)๋ ๋ฌดํ ์ฌ๊ท์ด๊ณ ์ unwrap ๋ ๋ชป ๋ง์๋ค โ โ ํธ์ถ๊ทธ๋ํ์์ ์ฝ์๊ณ ์ค์ธก ์๋(ํ์ ์นด๋). โ ์๊ธฐ diff ๋ฐ ํ๊ธ ๋: โด๊ฒ์ฌ๊ธฐ ๋ฌธ๋ฉด 3์๋ฆฌ๊ฐ ๊ฑฐ์ง์ด ๋ผ ๋ฌธ๋ฉด๋ง ๊ณ ์ณค๋ค(์ ์ด ๋ฌด์ ์ด ยท ์ถ ์๋ฐฉํฅ ์ฌ๊ฒ์ฆ rc=1/rc=0) โ ์ ๊ธ์ ์ด์ ๊ฐ ใ์ฃฝ๋๋คใ์์ โ **ใํ๋ฆฐ ์์ธ๊ฐ ์จ๋คใ๋ก ๋ฐ๋๋ค โตโ ํ์ ํ์ฐจ์ ๋น๋ฆฌํฐ๋ด 0 โ 1(์ด ํ ์คํธ๊ฐ ๊ทธ 1์ด๋ค) โ โ ๊ทธ ํ์ฐจ๊ฐ ๊ด๋ฌธ์ ยซ์ยป ๊ฑด ํ๋จ์ด ํ๋ฃจ ๋ง์ ๊ฐ์ ํ๋ค**(๊ฑธ์์ผ๋ฉด ์ด ํ ์คํธ๊ฐ ๋งํ๋ค). - [rustjava-partial-clone-refusal-decision] โ
โ
๋ถ๋ถ ํด๋ก ์ ยซ๊ฑฐ์ ํ์ง ์๋๋คยป โ ๋ชจํธํ๋ ๊ฒ์ ํ๊ฒฝ์ด ์๋๋ผ ยซํธ์ถ ํ๋ยป์๋ค. ์ฑํ ์ ์
2026-09-18-merge-drops-no-silent-git-failure#p0. โ ์ง์ง blobless ํด๋ก ์ผ๋ก ์๋ค: promisor ๋๋ฌ ๊ฐ๋ฅ์ด๋ฉด ๋ต์ด ์์ ํด๋ก ๊ณผ ๋์ผ(rc 1 ยท 6 dropped ยท 15.7s vs 2.5s) โ โ ๊ฑฐ์ ์ ยซ๋์๊ฐ๋ ์ค์ ยป์ ๋ง๋ ๊ฒ. โ ๊ทธ๋ฌ๋ ์กฐ์ฉํ green ์ ์ค์ฌ: ์ ์ ํ blobless + promisor ๋๋ฌ ๋ถ๊ฐ โ0 droppedยท โ rc 0(์์ ํด๋ก ์ 6๊ฑด). โ ์ฒ๋ฐฉ:symbols()๊ฐ ์คํจํshow๋ฅผ ๋ถ์ฌ๋ก ์ฝ๊ธฐ ์ ์ls-tree๋ก ํธ๋ฆฌ ์กด์ฌ๋ฅผ ๋ฌป๋๋ค(๋ถ๋ถ ํด๋ก ๋ ํธ๋ฆฌ๋ ๊ฐ๋๋ค) โ ๋ฌธ๋ฉด ๋์กฐ ์์ด ๊ฐ๋ฆฐ๋ค. โ ์๋ฐฉํฅ: ์ rc 0(๊ฑฐ์ง green) โ ํ โ rc 2 ยซ๋ชป ์๋คยป ยท โ ๊ณผ์ฐจ๋จ 0(๋๋ฌ ๊ฐ๋ฅ blobless ๋ ์ฌ์ ํ rc 1) ยท ์์ ํด๋ก ๋ถ๋ณ ยท ๋น์ฉ ์ ์์ฐจ ์์(๊ตฌ๊ฐ ๊ฒน์นจ). โ ์ํ ์คํ 0:.github์filter:0๊ฑด(merge_drops๋fetch-depth: 0) โ ๊ทธ๊ฒ์ด ยซ๊ฑฐ์ ์ ํจยป์ ๊ทผ๊ฑฐ์ด์ง ยซ๋ชจํธํจ์ ๋จ๊ธธยป ๊ทผ๊ฑฐ๋ ์๋๋ค. โ ์ ํ ๊ฒฐํจ ๋ฐ๊ฒฌ(๋ฏธ์์ ): ์ถ๋ ฅ ์์๊ฐ ์คํ๋ง๋ค ๋ค๋ฅด๋ค(set) โorigin/mainํ๋ณธ 5ํ์ ์์ 2์ข . rcยท์งํฉ ๋ถ๋ณ(ํ์ ์นด๋). โ ๊ฒฐ์ ์preflight()docstring ์ ๋ชป๋ฐ์๋ค โ ๋ค์ ํ์ฐจ๊ฐ ๊ฐ์ ์ง๋ฌธ์ ๋ค์ ํ์ง ์๋๋ก. - [rustjava-count-nonliteral-exception-call-sites] โ
โ
์ฌ๊ฐ์ ยซํฌ๊ธฐยป๋ฅผ ์๋ค โ ๋น๋ฆฌํฐ๋ด exception() ํธ์ถ๋ถ๋ ยซ0ยป ์ด๋ค. ์ฑํ ์ ์
2026-09-18-named-exception-classes-are-loadable#p0. โ ์์ ์ธก์ ยท.rs0์ค ยทscripts/0์ค. โ ์: bareexception(847 = ์ ์ 1 + ๋ฆฌํฐ๋ด 846 + ๊ทธ ๋ฐ ๋ฆฌํฐ๋ด 0 + โ ๋น๋ฆฌํฐ๋ด 0 โ ๊ฒ์ฌ๊ธฐ๊ฐ ๋ณด๋ ์งํฉ = ์ค์ ํธ์ถ๋ถ ์งํฉ(์ง๊ธ์ ์ผ์น). โ โ ์ ์ด๋ฅผ ๊ฐ๋ผ์ผ ๋ต์ด ๋ง๋๋ค โexception(๋ถ๋ถ์ผ์น๊ฐassert_exception(๋ฑ ๋ค๋ฅธ ํจ์ 8์ข 41์๋ฆฌ(์ฒซ ์ธ์๊ฐjvm)๋ฅผ ์ธ์ด๋ด๋๋ค. ์ ๊ฐ๋์ผ๋ฉด โ M=33 ์ด๋ผ๋ ํ๋ฆฐ ๋ต์ด์๋ค. โ ์๋ฐฉํฅ์ผ๋ก ์ ์ด๋ฅผ ์ํํ๋ค: ๋์กฐ๊ตฐ = ํ ์ค ๋ฆฌํฐ๋ด๋ง ์ธ๋ฉด 812 = ๊ฒ์ฌ๊ธฐ ์ดํ ์์ ์ ํํ ์ผ์น ยท ๊ฐ์ ์ฃผ์ (๋ณ์ยทformat!ยทconstยทraw string) โ ์ ๊ฑดnonliteral0โ4, ๋น-java ๋ฆฌํฐ๋ด โliteral_other0โ1, ์๋ณต ํ 0/0ยทํธ๋ฆฌ ํด๋ฆฐ. โ ๋จ์ ์ฃผ์: ๋งคํฌ๋ก ๋ณธ๋ฌธ 3์๋ฆฌ ร 22์ ๊ฐ โ ์ ๊ฐ ๊ธฐ์ค์ด๋ฉด 865(์์ค ๊ธฐ์ค 846). ์ด๋ฆ์ด ์ ๋ถ ๋ฆฌํฐ๋ด์ด๋ผ ๋ต์ ๋ถ๋ณ โ ์ฌ๊ฐ์ด ์๋๋ผ ๋จ์ ์ฐจ์ด๋ค. โ ์๋ ๊ฒ: ํ ํฐ ๋ถ์ด๊ธฐ ๋งคํฌ๋ก๋ ์ด๋ค ํ ์คํธ ์ ์ด๋ ๋ชป ๋ณธ๋ค(์ด ํธ๋ฆฌ 0) ยท ใ๋ฆฌํฐ๋ด์ธ๋ฐ ์คํใ๋ ์ข ์ ํ๊ณ ๊ทธ๋๋ก ยทnew_class(ยทfind_class(๋ ์์ง ๋ฐ์ด๋ผ ๋ฏธ๊ณ์. โ ๊ฒ์ดํธ ์น๊ฒฉ์ ยซ์ ํ๋คยป โ ์ ์์ด ์๊ตฌํ ๊ฒ์ ๊ณ์์ด๊ณ , ๋ฒ ์ด์ค๋ผ์ธ 0 ๊ด๋ฌธ์ ๋ณ ๊ฒฐ์ ์ด๋ผ ํ์ ์นด๋๋ก ๋จ๊ฒผ๋ค. - [rustjava-merge-dropped-symbols-checker-swallows-git-failures] โ
โ
**ใ์กฐ์ฉํ ์คํจใ ๊ฒ์ฌ๊ธฐ์ ยซ์กฐ์ฉํ ํต๊ณผํ๋ ๊ธธยป์ด ์์๋ค โ ๋ซ์๋ค.**
โ
์ฌํ = ์ง์ง ์์ ํด๋ก (
--depth 10): ์ rc=0โ 56bb54fa (0 file(s) examined)โ โ ์์ ํด๋ก ์์ examined 20 โ 20โ0 ์ผ๋ก ์ ํ๊ณ green. ํ rc=2cannot measure: shallow cloneโฆ. โ raise ๊ฒฝ๋ก๋ ์๋ค โ ๋ฒ์ ์ค๋ฅยท๋ฃจํ ๋ด diff ์คํจยท๋น-git ์ ๋ถ rc=2(git stderr ๋๋ด). โ โ ๊ธ์:run()ํธ์ถ๋ถ 8๊ณณ ์ค โ **git show <rev>:<path>ํ๋๋ง ยซ์คํจ๊ฐ ๋ตยป(๊ฒฝ๋ก ๋ถ์ฌ๋ ์ ์) โ rc ๋ก ๋ชป ๊ฐ๋ฅด๋ ํ๊ฒฝ์ preflight ๋ก ๋ฐฐ์ . โ โ CI ๋ ์ด๋ฏธfetch-depth: 0** โ ์ PR ์ ๋ง์ง ์๋๋ค(๊ทธ job ์ ์์ ํด๋ก ๋น๋ 0) โ ๊ทธ๋์ ์ฒ๋ฐฉ์ด ยซrc ์ฌ๋ฆฌ๊ธฐยป๋ก ์ ํด์ก๋ค. โ ์๋ฐฉํฅ: ์คํจโrc=2 ยท โ ์ ์ 0(97660921)โ์ฌ์ ํ โ rc=0 ยท ํ์ง ํ๊ท 0(e53b21426 ยท514d5b086 ยท56bb54fa20). โ ์๋ ๊ฒ: ์์ ํธ๋ฆฌ ์๋ ์คํ์ ์ด์ ๋นจ๊ฐ ยท ํ์/๋ฉด์ ํธ์ถ๊น์ง ์ผ๊ด raise ๋ผ ๋ ์์ฃผ ๋ฉ์ถ๋ค ยท โ preflight ๋ ยซ์์ยป๋ง ๋ณธ๋ค(๋ถ๋ถ ํด๋ก ์ ๋จ์๋ค) ยท F8 ใ0ใ์ ์ธ๊ณผ๋ ๋ฏธ์ฆ๋ช . โ.rs0๊ฑด ยท ์ ์ดยทํํฐ ํญ ๋ฌด์ ์ด ยท ์ข ๋ฃ์ฝ๋๋ ๊ธฐ์กด2์ฌ์ฌ์ฉ. โ PR ์ #71 ์ ์์ฌ ์๋ค(๊ฒ์ฌ๊ธฐ๊ฐ main ์ ์๋ค) โ ๊ณ์ฝ 5 ์ฌ์ง์ ํ์. - [rustjava-lock-every-named-exception-class-is-loadable-fix] โ
โ
๊ฒ์ฌ๊ธฐ์ ยซ๊ฑฐ์ง ์ด๋กยป 2๊ฑด + ยซ๊ฑฐ์ง ๋นจ๊ฐยป 1๊ฑด ์ ์ (๊ฒ์ดํธยฒ ๋ฐ๋ ค ์น๊ณ ยท PR #72).
โ
F1 ์งง์ ์ด๋ฆ ์ถฉ๋(
FormatterยทJarURLConnection2์) โ ํ์ชฝ ๋ฑ์ฌ๋ฅผ ์ง์๋ ์ rc=0(๊ฑฐ์ง ์ด๋ก) โ ํ rc=1. ํค๋ฅผ (๋ชจ๋,ํ์ ,ํจ์) ๋ก. โ F2 ์ค ๋จ์ ์ค์บ์ด ๋ค์ค ์ค ํธ์ถ์ ๋ชป ๋ด โ ์ rc=0(์ ๋ณด์) โ ํ rc=1. โ 846 โ 34 = 812 ๋ก ๊ฒ์์ ์์์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ๋ค. โ F3list_proto3๊ฑด ๋๋ฝ + ํimpl์ ๋์งธ ์์ฑ์ ์ค๊ท์ โ โ ์ดํ์ ใ๋ฏธ๋ฑ์ฌ 5๊ฑดใ์ ํ๋ ธ๋ค โ ์ค์ ยซ0ยป(5๊ณณ ์ ์ ). โ ์ ์ /ํ: ์ด๋ฆ 41โ43 ยท ํธ์ถ๋ถ 812โ846 ยท loadable 263โ268(์์ธ์ง ๊ธฐ์ฌ). โ โ ํธ์ง ยซ์ ยป์ ์ red ์ํ ์ธก์ โ ๋์ด๋๋ 2์ด๋ฆ ๋ชจ๋ ๋ฑ์ฌ โ ์ red 0. โ ์๊ฐ ์ ์์ฐจ ์์(์ 1.42/1.67/1.46 โ ํ 2.01/1.69/1.19 ยท ๊ตฌ๊ฐ ๊ฒน์นจ). โ ๋ฐํ์ ํด๋์ค ์ถ๊ฐ 0 ยทprotos๋ฌด์ ์ด. - [rustjava-bootstrap-argument-diagnostic-names-index-and-tag] โ
โ
๋ถํธ์คํธ๋ฉ ์ธ์ ๊ฑฐ๋ถ๊ฐ ยซ์ด๋ ์ธ์ยท๋ฌด์์ยป ๋งํ๋ค. ์ฑํ ์ ์
2026-09-18-bootstrap-argument-diagnostic-sequencing#p0. โ ์ ์ ํ์ธ(์ฝ๋): ์ ์ด๊ฐfalse๋ฅผ ๋ด๋ ์๋ฆฌ์index์constant_pool.get(index)๊ฐ ์์ ์์๋ค โbool์ด ๋์ ๋ฒ๋ ธ๋ค. โ ์ ์ฒด๊ณ 0 โ ๊ฐ์ enum ์UnsupportedVersion(u16)์ด ์ด๋ฏธ 3์ธต์ ๊ดํตํ๋ ํจํด์ด๋ผ ๋ณต์ ํ๋ค. โ ์ /ํ:ClassFormatError: a bootstrap method argument names nothing or is not a loadable constantโ โClassFormatError: bootstrap method #0 argument #0 names no constant pool entry(CLI ์ค์ธก). โ ์ธ ์๊ตฌ 3/3(expectedยทindex+method_indexยทactual) ยท ํ๊ทธ๋ ์ด๋ฆ์ผ๋ก(๋ฒํธ๋ ํ๊ฐ ํ๋ ๋ ๋๋ค). โ ์๋ฐฉํฅ ๊ธ์:StringConcat์ ์ธ์ 1๊ฐ๋ผ index 0 ์ด ํ๋์ฝ๋ฉ์ด์ด๋ ํต๊ณผ โ ์ธ์ 3๊ฐLambda.class์ #0โ#2 ๋ก index ๊ฐ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ ์ ๊ฐ๋ค. โ ์๋น์ 1๊ฐ(jvm-bytecodeFrom) โ arm ์ถ๊ฐ๋ฟ, 14๊ท์น ๋ฌด๋ณ. โ ํ์ ยซ์ ์ปค์ก๋คยป(Copyยทํฌ๊ธฐ ๋ถ๋ณ ์ํ) ยท โ ๋ฉ์์ง ๋ฌธ๋ฉด์ด ๋ฐ๋์ด ๋จ์ธ 2๊ณณ์ด ๋ฐ๋๋ค. โ-p classfile16 passed(์ 13) ยทtest_class_format22 ยท--allrc=0. - [rustjava-lock-every-named-exception-class-is-loadable] โ
โ
์ด๋ฆ์ผ๋ก ๋ถ๋ฅด๋ ์์ธ ํด๋์ค๊ฐ ยซ์ค์ ์ ์๋ยป ๊ฒ์ธ๊ฐ โ ๋์กฐ ํ ์๋ฆฌ. ์ฑํ ์ ์
2026-09-17-string-concat-recipe-arity#p0(worklog json ๊ธฐ๋ก). โ ์ ์ ํ์ธ(์ฝ๋):jvm/src/jvm.rs:943-950new_class(...).await.unwrap()โ ๋ชป ์ฃ๋ ์ด๋ฆ์ throw ๊ฐ ์๋๋ผ ํจ๋. โ ์๊ธฐ ์ฐธ์กฐ โ:842๊ฐ ๋ถ์ฌ๋ฅผexception("java/lang/NoClassDefFoundError")๋ก ๋ณด๊ณ ํ๋ค. โ ๋ฒ ์ด์ค๋ผ์ธ 0(โ ๊ฒ์ดํธยฒ ์ ์ ํ):exception(๋ฆฌํฐ๋ด 43 ๊ณ ์ / 846 ํธ์ถ๋ถ โ ๋ฑ์ฌ 268(as_proto265 +list_proto3). โ ์ดํ์ 41/812/263 ์ ์ ๋ถ ๊ณผ์์๋ค(๋ค์ค ์ค 34 ยทlist_proto3 ยท ์งง์ ์ด๋ฆ ์ถฉ๋). โ ์ ์์ ใ72ใ๋ ์ฌ์ ํ ์ฌํ ์ ๋จ. โ ์ค์ ์ ์๋ ์งํฉ = ๋ฑ์ฌ๋ถ ยท โ ์ดํ์ ใ๋ฏธ๋ฑ์ฌ 5๊ฑดใ์ ํ๋ ธ๋ค โ ์ค์ ๋ฏธ๋ฑ์ฌ ยซ0ยป(name:268 = ๋ฑ์ฌ 268). โ ์๋ฐฉํฅ: ํ ์ํ rc=0 ยท โBootstrapMethodError๋ฑ์ฌ ์ ๊ฑฐ โ rc=1(์ค์ ํจ๋ ์ฌ๋ก ์ฌํ) ยท ํ๋กํ ์ด๋ฆ ์คํ โ rc=1 ยท โ ํด์ ๋ถ๊ฐ ๋ฑ์ฌ โ rc=2(๋ชป ์๋ค ยท fail-closed) ยท CI step ์ ๊ฑฐ โdod_parityrc=1. โ ๋ชป ๋ณด๋ ๊ฒ: ๋ฐํ์ ์กฐ๋ฆฝ ์ด๋ฆ ์ ๋ณด์(๋ฐ๋ฅ์ด์ง ์ฆ๋ช ์๋) ยทexception(๋ง ยท ์ด๊ธฐํ ์คํจ ํต๊ณผ. โ ์๋ ๊ฒ: DoD 6โ7(~1์ด ยท ์ดํ 32.7์ด๋target/๊ฐ์ง์น๊ธฐ๋ก ํด์) ยท โ.unwrap()๋ฌด์ ์ด(์ ํ์ ๋ฒ์ ๋ฐ). โ--allrc=0 ยทdod-ci-parity๋ช ๋ น 7๊ฐ rc=0. - [rustjava-count-symbols-dropped-from-second-parent-on-resolution] โ
โ
์ถฉ๋ ํด์๊ฐ ๋จ์ด๋จ๋ฆฐ ์ ์๋ฅผ ์ผ๋ค โ ๊ทธ๋ฆฌ๊ณ ๊ฐ์
์ํ์ด ยซ๋ด ๊ฒ์ฌ๊ธฐยป์ ๊ตฌ๋ฉ์ ์ก์๋ค. ์ฑํ ์ ์
2026-09-17-union-restores-silently-dropped-makeconcat#p0. โ ์ ํ ์ฝ๋ 0์ค(๊ฒ์ฌ๊ธฐ + ๊ท์ฝ + ๊ธฐ์กด ์ํฌํ๋ก ์ก 1). โ โ ๋ฅผ ๋จผ์ ์๋ค โ ์์ค์ ์ฌ๊ตฌ์ฑํด ๊ธฐ์กด ์ถ ์ ์(์์ฑ๊ธฐยท๋จ์ผ๊ฒฐํจ ๊ฐ์ฌยท๋ ์ค์ํธยทํ๋ฆฌํฐยทgit statusยท๋ง์ปค) โ โ ์ ๋ถ green = ์๋ฌด๊ฒ๋ ๋ชป ์ก๋๋ค. โ ์กฐ์ฉํ ์กฐ๊ฑด์ ใ๋จ์ด์ง ์ด๋ฆ๋ค์ด ์๊ธฐ์๊ฒฐ์ผ ๋ใ์ด๊ณ , ํ์ชฝ์ ํต์งธ๋ก ํํ๋ ๊ฒ์ด ์ ํํ ๊ทธ๊ฒ์ด๋ค. โ โ 3๊ฑด โ ยซ4๊ฑดยป ยท โ โ ๋ท์งธ๊ฐ ํด๋์ค ยซ์ยป์ ๋ฉ์๋๋ผ ใ์ต์์ใ๋ง ๋ณด๋ฉด 4 ์ค 3๋ง ์ก๋๋ค โ ํ ๋จ๊ณ ์ค์ฒฉ๊น์ง. โ โ ์ค๊ณ ๊ต์ฒด: ใํธ๋ฆฌ==๋ถ๋ชจ1 โ-s ours๋ฉด์ ใ๊ฐ ๊ฐ์ ์ ์ผ์ผ rc=0 ์ด ๋๋ค(๊ทธ๊ฒ ์กด์ฌ ์ด์ ์ธ ์คํจ๋ค) โ ์ ์ธ(*trailer)์ผ๋ก ๊ต์ฒด. โ ์๋ฐฉํฅ ์ ๊ฑด: ๊ฐ์ rc=1 + ์ด๋ฆ ยท ์ ์ rc=0 ยท trailer rc=0/์ง์ฐ๋ฉด rc=1 ยท ์ค์ฟผ์ rc=0 ยท ์ค์ฌ๊ณ ์์ ์ ๋ถํ ๊ณผ ๋์ผ(4 ์ฌ๊ณ + 2 ์๋). โ โ **[๊ฒ์ดํธโก ์น๊ณ] ํํฐ๊ฐ ์ข์ ยซ๋์งธ ์ฌ๊ณ ยป(514d5b08)๋ฅผ ๋์ณค๋ค** โ ๊ทผ๊ฑฐ ๋ฌธ์ฅ์ด ๊ฑฐ์ง์ด์๋ค โ ์ดํ์ ํ์ผ 4๊ฐ๋ฅผ ๋ณด๊ณ ๋ findings 0 ยท rc=0(ํ์ฅ๋ณธ์ ๊ฐ์ ๋จธ์ง์์ 13๊ฐ) โ ใtheirs ๊ฐ ๋ฐ๊พผ ํ์ผ โช ๋จธ์ง๊ฐ ๋ฐ๊พผ ํ์ผใ๋ก ๋ํ โ ๋ ๋ค rc=1. โ docstring ์ ์ ์ผํ ์์๊ฐ ๋ฉด์ ๋์ง ์๋ ํ์์ด์๋ค โ ๊ณ ์น๊ณ ใ์ถ๋ ฅ์์ ๋ณต์ฌํ๋ผใ๋ฅผ ๊ณ์ฝ์ ๋ฐ์๋ค(๋น์ trailer 0๊ฑด). โ ์คํ ์ค์ธก โ ์ด ํ์ฐจ๊ฐ ์ง์ ๋๋ ธ๋ค(์ฐฝ38b0df38..8c7b473f83๋จธ์ง): ์ดํ 8๊ฑด/19์ ์ โ ํ์ฅ๋ณธ 10๊ฑด/26์ ์. โ ๋์ด๋ ๊ฒ์ 7์ ์(514d5b086 +37ea5a131)์ด๊ณ โ ์ง์ง 4 ยท ์คํ 3. โ ์๊ฐ์ ยซ์ ์ํ ์ฆ๊ฐ ์์ยป์ด๋ค(ํ๋ณธ ์ฐจ โ0.8s/๋จธ์ง โ ๊ฐ์ ํ๋ณธ ์ฌ์คํ ํธ์ฐจ 2.6๋ฐฐ ยท ์ ์ถ์ฒ = ๊ฒ์ดํธโก ๊ฒ์ ์ค์ธก ยท โ ์ฌ์ธก ์ ํจ). โ ใ๋๋ฆฌ์ง ์์๋คใ๋ ํ๋ ธ๋ค โ wide ๋ narrow ์ ์์์งํฉ์ด๋ผ ๋ ์ธ์ง ์ ์๋ค. โ ์๋ ๊ฒ: ๋ณธ๋ฌธ๋ง ๋น ๊ฒฝ์ฐยท๋ฆฌ๋ค์์ ๋ชป ๊ฐ๋ฅธ๋ค ยท trailer ๋ ์ฐํ๋ก์ด๊ณ ์ด๋ฆ์ด ๊ธ์ ๊ทธ๋๋ก ๋์กฐ๋๋ค ยท โ โ ์ red ๊ณ๊ธ โ main ์๋ ์๋ ์ ์๋ฅผ ์ง์ด ๋ธ๋์น๋ ๋ค์ base ๋น๊น์์ red ๊ฐ ๋๋ค(์ค๋ก37ea5a13ยท 7 ์ค 3). โ--all583/0/1(๋ถ๋ณ) ยท ํ๋ฆฌํฐ ๋ช ๋ น 7๊ฐ ์ผ์น(DoD ๋ธ๋ก ๋๊ธฐ). - [rustjava-adopt-loadable-bootstrap-arguments-diagnostic] โ
โ
๋์ ์ โ ์์ ๋๋ฌ๋ค โ ๊ทธ ์ผ์ ํ๋ ์ถ(PR #67)์ด ์ด๋ฏธ ๋ ์๋ค. ์ฑํ ์ ์
2026-09-17-loadable-bootstrap-arguments#p0(worklog json ๊ธฐ๋ก). โ ์ฝ๋ 0ํ. โ ์ ์ ๋ ์ฐธ(CLI ์คํ: ์ธ ๊ท์น์ด ์ ๋ถClassFormatError: Invalid class file๋์ผ ๋ฌธ๋ฉด) โ ๊ทธ๋ฌ๋ โ ํธ์ง ์์ญ์ ์ ๋ถ ๊ฒน์น๋ค(์ ๋ฌ๋ ๊ฐ์ 3 ์ค 1 โ ์๋): #67 ์ด ์ ์target๋ ํ์ผ์ ๊ณ ์น๊ณ , ์ด ์ ์ด์ ์ด๋ฏธ ์ฌ์ ๋ฅผ ์ฃผ๋ฉฐ, ๋ฐ๋ฐํ ๋ฌธ๋ฉด ๋ ์๋ฆฌ๋ฅผ ๋ ๋ค ๊ณ ์ณค๋ค. โ ์ ์tradeoff์์ ์ด ใ๋ ๋ฒ ํ์ง ๋ง๊ณ ํจ๊ป ํ๋ผใ๊ณ ์ ์๋ค. โ ๋จ๋ ์์ฌ๋ ์ข๋ค โ&'static str์ด๋ผ ์ธ๋ฑ์ค๋ฅผ ๋ชป ๋ด๋๋ค โ ใ๊ธฐ๋ใ ๋ฌ์ฑ ยท ใ์ธ๋ฑ์คยท์ค์ ใ ๋ฏธ๋ฌ โ โ ์ ์นด๋๋ฅผ ๋๋ค(โ M โ ์ดํS์์ ์ค์ธก ํ ์ฌ๋ ธ๋ค: ์์ฌ๋ ๊ฐ์ 3์ธต์ ๊ฑด๋target5ํ์ผ/4ํฌ๋ ์ดํธ(classfileยทjvm-bytecodeยทRustJavaยทtest-utilsโ โ ์ธต 3 โ ํฌ๋ ์ดํธ 4: ๊ฒฝ๊ณ ์ธต์ด ๋ ํฌ๋ ์ดํธ์ ๊ฑธ์น๋ค) ยทInvalidFormat์ ๋ํ๋ฉด ์์ฑ 17 + ๋งค์น 11 ์ด๋ผ ์ variant ๋ฅผ ๊ณ ๋ฅด๊ณ ๋ ๊ฐ๋์ ๋๊ฐ๋ฅผ ์ ์๋ค). โ ์ค๊ณ ์ ์ฝ ๊ธฐ๋ก โClassFileError๋Copy(ํ์ผ 4 ยท ํฌ๋ ์ดํธ 2 ์์กด) ยท ์ ์ ์ฌ์ +u16+u8๋ก ๊นจ์ง ์๊ณ ๋๋ค. โ ์๋ ๊ฒ: main ์ #67 ์ฐฉ์ง๊น์ง ๋ฐ๋ฐํ ์ฑ(๊ท์น ์ด๋ฆ์กฐ์ฐจ ์๋ค) ยท ์ด ํ์ฐจ๊ฐ ์ ๋ฌํ ๊ฒ์ ๊ฐ์ด ์๋๋ผ ์์๋ค. โ--all583/0/1(๋ถ๋ณ ยท base8c7b473f). - [rustjava-adopt-test-data-version-freeze-uniform-target-p0] โ
โ
๋ฃจํธ fixture ๋ฅผ ํ target ์ผ๋ก ๋ชจ์ ๊ฒ์ธ๊ฐ โ ยซ๋ชจ์ผ์ง ์๋๋คยป. ์ฑํ ์ ์
2026-09-17-test-data-version-freeze#p0(worklog json ๊ธฐ๋ก). โ ์ฝ๋ 0ํ ยท ์ฌ์ปดํ์ผ 0 ยท.class0 ๋ณ๊ฒฝ โ ์ฐ์ถ๋ฌผ =docs/test-data-target-policy.md. โ ๋ถํฌ 114๊ฑด ยท 52ร40 ยท 65ร62 ยท 66ร8 ยท 68ร1 ยท 70ร3(fixture ์์ ์์ ์ฝ์). โ โ ์๋ฐฉํฅ: โ๋ฒ์ ์ด ๋ต โStringBuilder3๊ฑด์ 21 ๋ก ์ฌ์ปดํ์ผ โ โ indy ์๊ธฐ๊ณ StringBuilder ์ฌ๋ผ์ง(โStringConcat์ด ๋ฃจํธ์ ์ ์ผํ indy) ยทThreadInterruptionaccess$ร10 โ 0 + NestMembers(JEP 181) โ์๋ฌด ๋ฒ์ ์ด๋ โ 20๊ฑด ์ค โ 16๊ฑด ๋ช ๋ น ์ํ์ค ์์ ๋์ผ. โ ๊ทธ ์ปค๋ฒ๋ฆฌ์ง๋ ๋ค๋ฅธ ๋ฐ ์๋ค โ ์์ฑ๊ธฐ ์ฐ์ถ 64๊ฑด์์StringBuilder0 ยทaccess$0. โ ์ด์ : ์ ์์ ์ด๋(ใ์ซ์ ํ๋๋ก ์์ธกใ)์ด ๋ค์งํ๋ค โ 52 ๋ ใ์ -indyยท์ -nestmateใ๋ผ๋ ๋ป์ ์ค์ ๋ก ๊ฐ๊ณ , ํด๋ฉด ๊ทธ ๊ตฌ๋ถ์ด ์ฌ๋ผ์ง๋ฉฐ ์ ์ผํ ์ปค๋ฒ๋ฆฌ์ง๊ฐ ์ง์์ง๋ค. โ ์๋ ๊ฒ: ๋น๊ท ์ผ ์์กด(์ ๊ท target ๊ท์น ๋ฏธ์๋ฆฝ) ยท 16๊ฑด์ ๊ทธ๋๋ก ยท โ ๋ณธ ๊ฒ์ 40 ์ค 20 ยทNativeMethod์ฐจ์ด๋ ๋ฏธ๊ท๋ช . โ--all583/0/1(๋ถ๋ณ ยท base8c7b473fโ ์ ํ์ฐจ์ 579 ๋ #61 ์ฐฉ์ง ์ base ๋ค) ยท ๋๋๋ฆด ์กฐ๊ฑด 4๊ฐ๋ฅผ ๊ฒฐ์ ๋ฌธ์์ ๋ช ์. - [rustjava-adopt-javac-fixture-provenance-verified-p0] โ
โ
๋ฃจํธ ํฝ์ค์ฒ ๋ค์ฏ์ด ์ฌ๋น๋๋์ง ์๋ ์ด์ =
-g. ์ฑํ ์ ์2026-09-17-javac-fixture-provenance-verified#p0(worklog json ๊ธฐ๋ก). โ ์ ํ Rust 0์ค ยท ์ปค๋ฐ.class๋ฐ์ดํธ 0 ๋ณ๊ฒฝ. โ ์ ์์ด ๋ ๋ ์ค๋ช ์ด ๋ ๋ค ํ๋ ธ๋ค โ ์ปดํ์ผ๋ฌ ์๋๋ค(26.0.1ยท26.0.2.1 ์์ ๊ฐ์ ๋ค์ฏ์ด ๊ฐ๊ฒ ํ๋) ยท ์์ค ๋ฐ์ฐ ์๋๋ค(-g๋ฉด ์ง๊ธ ์์ค๊ฐ ์ปค๋ฐ ๋ฐ์ดํธ๋ฅผ ๋ธ๋ค). โ โ ์ ์tradeoff์ ใ์ฌ์ปดํ์ผ์ด ๋์ ๋ณ๊ฒฝ์ด ๋ ์ ์๋คใ๊ฐ ยซ์ฑ๋ฆฝํ์ง ์๋๋คยป โ ์ฌ์ปดํ์ผ์ด ๋ถ์๋ค. โ ๊ณ ์น ํ ์๋ฆฌ: ์คํฌ๋ฆฝํธ๊ฐ--release๋ฅผ ํฝ์ค์ฒ์์ ์ฝ๋ฏ-g๋ ํฝ์ค์ฒ์์(์์ํLocalVariableTable). โ ๋ฐฐ์ ์ ํ๋ณ๋ ฅ ์ค์ธก 5/5 ยท ์คํ 0(๋ณด์ 5 ยท ๋ฏธ๋ณด์ 107). โ ์๋ฐฉํฅ: ์ ์ 109/109/0 differed โ ๊ฐ์ (ํ์ ํ ์ค no-op) 104/5 differed(์๋ ๋ค์ฏ๊ณผ ๋์ผ). โ ์๋ ๊ฒ: ์คํฌ๋ฆฝํธ๋ ์ฌ์ ํ rc=1(์ฌ๋น๋ ๋ถ๊ฐ 3๊ฑด = ์ ์์ด ๋ฏธํด๊ฒฐ๋ก ์ ์ ๋ณ ์ถ ยท ๋ํ์ง ์์๋ค) ยท ํ์ ์ด ํ ์์ฑ ์ ๋ฌด์ ๊ฑธ๋ฆฐ๋ค. โ--all579/0/1(๋ถ๋ณ) ยทcheck-dod-ci-parityOK. - [rustjava-adopt-classfile-error-cause-decision-p0] โ
โ
๊ฑฐ๋ถ ์ฌ์ ๋ฅผ ์ธ ์ธต์ ๊ฟด๋ค โ ใInvalid class fileใ ํ๋๊ฐ 14๊ฐ ๋ฌธ์ฅ์ด ๋๋ค(ํด๋์ค 8 ยท ํ๋ 3 ยท ๋ฉ์๋ 3). ์ฑํ ์ ์
2026-09-17-classfile-error-cause-decision#p0. โ ์ ํ ๋์ ๋ณ๊ฒฝ ์์(์ฌ์ฉ์๊ฐ ๋ณด๋ClassFormatError๋ฉ์์ง). โ ์ ์์ด all-or-nothing ์ด๋ผ ๋ชป๋ฐ์ ๋ท์ ๋ค ํ๋ค:InvalidFormat(&'static str)ยทInvalidClassFile(&'static str)(โFrom์ด ๋ฒ๋ฆฌ๋ ์๋ฆฌ) ยท ๊ฒฝ๊ณ 2์๋ฆฌ ยท โ **validate_class8ํญ||โ ๊ท์น๋ง๋คif. โ โ ์ฌ์ ๋ฅผ ๊ฟฐ์ ยซํํํ ์ค๋ฅ๊ฐ ๊ฐ๋ฆฌ๋ ๊ฒ ๋ยป์ด ๋์๋ค**: โดํ ์คํธ๊ฐ ์ด๋ ์ธต์ด ๊ฑฐ๋ถํ๋์ง๋ฅผ ํ๋ฆฌ๊ฒ ๋ฏฟ์๋ค(๊ฒ์ฆ ์๋ ํ์) โ โ ๋จ์ธ์ ์ค์ธก์ ๋ง์ท๋ค โต์ ์ด ์ด๋ฆ์ด ๋ก์ ์์๋ค(ใin_the_poolใ์ธ๋ฐ ์ ์ฌ ๊ฐ๋ฅ์ฑ๊น์ง ๋ณธ๋ค) โ ์ฌ์ ๋ ๊ท์น๋๋ก, โ ์ด๋ฆ์ ์ ๋ฐ๊ฟจ๋ค(๋ฆฌํฉํฐ ๊ธ์ง). โ ์๋ฐฉํฅ โ ์ธ ์ธต ์ ๋ถ ๊ฐ์ : M1 ๊ฒฝ๊ณ ยท M2From์ด ์ฌ์ ๋ฒ๋ฆผ ยท M3 ๋ ์ฌ์ ๋ฅผ ํ ๋ฌธ์์ด๋ก ์ ์(โ ์ก๋ ๊ฒ์contains:450(dedup ์ ๊ฑฐ๋ก 452โ450) โ ์ดํ์ด ๊ท์ํ dedup ๋จ์ธ์ ์์ ๋ ์์๋ผ ๊ณตํํ๊ณ ๊ฑท์ด๋๋ค) ยท ๋ณต์ 17/0. โ โ ๋๊ฐ: โ ๋ง์ง๋ง ํ์ด ๋ ๋ฒ ์ฐ์ฌ ์๊ณtest-utils์ฌ๋ณธ์ ยซ๋ฌด๊ฒ์ฆยป(๊ฐ์ ํด๋ 579/0 ยท ํฉ์น์ง ์๊ณ ๋ณด๊ณ ) ยท ์ฌ์ ๊ฐ ๋ฌธ์์ด์ด๋ผ ๊ฐ์ ๋ฌธ๊ตฌ ์ค๋ณต์ ๋ง๋ ๊ฒ์ด ์๋ค ยท โ PR #66 ๊ณผ ๊ฐ์ ํจ์(์ถฉ๋์ ๊ธฐ๊ณ์ ). โ--all578 โ 579/0/1 ยทcheck-dod-ci-parityโ ใOK ๋ ์ถ ๋ชจ๋ ๋์นญ์ฐจ 0 โ ๋ช ๋ น 6๊ฐ ยท toolchain 2๊ฐ๋ก ยซ๋ ๋ค ์ผ์นยปใ(rc=0). - [rustjava-adopt-link-stringconcatfactory-p2-fix2] โ
โ
**#57 ์ ๋ฒ์ ํ์ 25ํ ๋ฑ์ฌ โ ใ์ฐฉ์ง ์์ใ๊ฐ ๋ง๋ ๋ถ์ฑ๋ฅผ ๊ฐ๋๋ค(PR #61).**
โ
๋งํ ๊ฒ์ CI ๋ ์ถฉ๋๋ ์๋์๋ค: ํ
85cf0fba์์ rc=0 CI_GREEN ยทgit merge origin/main์ฝ๋ ์ถฉ๋ 0 ์ธ๋ฐ โ ํฉ์น ๊ฒฐ๊ณผ๊ฐ #57 ์ด ์ธ์ด ใ๋ฏธ๋ฑ์ฌ ํฝ์ค์ฒ๋ ํ์ ์คํจ์ํจ๋คใ๋ฅผ ์ด๊ฒผ๋ค(๋ฏธ๋ฑ์ฌ 25๊ฑด ์ฌํ). โ ์์ฑ๊ธฐ(record-class-file-versions.py)๋ฅผ ๋๋ ค์ ์ฑ์ ๋ค โ ์ํธ์ง 0. โ ์ญ์ ํ 0(25 0) = ๊ธฐ์กด ํฝ์ค์ฒ ์ฌ์์ฑ 0 ์ด ์ด ํ์ฐจ์ ์์ ์ . โ ์ถ๊ฐ 25ํ์ด ์ด PR ์ 25๊ฐ.class์ ์งํฉ ๋์ผ(ํผ์ 0) ยท โ ์๋ฐฉํฅ(ํ ํ ์ ๊ฑฐ โ red ยท ๋๋๋ฆผ โ green). โ ์์ฅ ์ถฉ๋ 2๊ฑด์ ํฉ์งํฉ(์ค ๋จ์ ์๋ฐฉํฅ ๋ณด์กด ยท ํ์ชฝ ํต์งธ ์ฑํ 0) ยท #62 ๊ธฐ์ฌ ์ ๊ฑด ์์กด. โtest_fixture_pins3/0 ยท--all581/0/1 ยท DoD 7๋ช ๋ น rc=0. โ โ **[์น๊ณ -p2-fix3] ์ฝ๋ 2ํ์ผ ํฉ์งํฉ โ ours ์ ยซ์ญ์ ยป๊ฐ ์๋๊ฐ ์๋์๋ค.** โ ์ ํ ๋จธ์ง ๋(e53b2142ยท514d5b08)์ด ๋ถ๋ชจ2์ makeconcat ๊ฐ์กฑ(fieldrefยทmake_concat_call_siteยทLINKED)์ ๊ฒฐ๊ณผ์์ ๋จ์ด๋จ๋ ธ๋ค โ ๋์ด๋ ธ๋ค. โ ๋ฐ๋ฉด.rs์ 16์ค์ ์ง์ง ours ์๋(metafactory ๋ฅผ ๋งํฌํ๋ ใ๋งํฌ ์ ๋๋คใ ๋จ์ธ์ด ๊ฑฐ์ง) โ ๋์ด๋ฆฌ์ง ์์๋ค. ํ๊ณ:.pyโmain 156/0 ยท.rsโHEAD 86/0 ยท โmain 182/29. โ ๋ณต์๋ถ์ด ์ฐ ์ฝ๋์์ ์คํ์ผ๋ก ์ฆ๋ช โ MakeConcat 3์ฅ์ ์ง์ฐ๊ณ ์ฌ์์ฑ โ ๋ฐ์ดํธ ๋์ผ ๋ณต๊ตฌ(๋ณต์ ์ ์์ฑ๊ธฐ๋ก๋ ๋ถ๊ฐ). โ ์๋ฐฉํฅ ๊ฐ์ ours 4 red / theirs 1 red ยท--all583/0/1 ยท DoD 7๋ช ๋ น rc=0. โ ๊ทธ ํ์ฐจ๋ ใ์ฐฉ์ง ๊ธ์ง โ ๊ฒ์ดํธโก ์ฌ๊ฒ์ด ๋จผ์ ใ๋ก ๋๋ฌ๊ณ , โ ๊ทธ ์ฌ๊ฒ์ด approve ๋ก ๋ซํ๋ค(์๋). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #61 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ํฐ์ผmerge_strategy: merge์ ์ธ๋ถ โ โ ๊ณ๋ณด ๋ณด์กด). โ ํ PR ์ด-p2ยท-fixยท-fix2ยท-fix3๋ค ํ์ฐจ๋ฅผ ํจ๊ป ์ฃ๋๋ค. ๊ฒ์ดํธโก approve(๋ฆฌ๋์ง ์ต์ ํ์โฆ-p2-fix3.review.md) ยท ํ5f7ce1a8โ ์ฐฉ์ ์ PR head ๋์ผ(๋ถ์ด๋) ยท โ **MERGEABLE/CLEANยท base ๋ค์ฒ์ง ยซ0ยป** โ ์ถฉ๋ ํด์ยทbase ๋น๊น ๋ ๋ค ๋ถ์(-fix3์ด ์ด๋ฏธ ๋น๊ฒผ๋ค). โ ํ์์ci-presencerc=0 CI_GREEN(3๊ฑด ์ ๊ฑด) ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ 0(๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด ยท ๋ผ์ด๋ธ ์คํ ์ฃผ์ฒด ์์. โ ์ ํ-merge๋ ๊ฑด์ ํก์ํ ๊ฒ์ด ์์๋ค โโฆ-fix-merge(needs-fix-ticket)ยทโฆ-fix2-merge(code-conflict-out-of-scope) ๋ ๋ค ๋จธ์ง 0ยท์ปค๋ฐ 0ยทํธ์ 0 ์ผ๋ก ๋ฉ์ท๋ค. - [rustjava-adopt-class-format-mutation-audit-p0-fix] โ
โ
ํ์ ์์
given์์ ํ์์ํจ๋ค โ ๊ฒ์ดํธโก ๋ฐ๋ ค ์น๊ณ(PR #63). โ ๊ธ์ ํ ์ค:repaired๋ฅผ ์ ๋ณธ ์ธ์๋ก ๋ค์ ์ง๊ณ ์์ด ๋์งธ ๊ฒฐํจ์ ๋ฒ๋ ธ๋ค โ ใsingle-defect ์ธ๊ฐใ๋ฅผ ๋ฌป๋๋ฐ ์ ๋ ฅ์ด ์ด๋ฏธ single-defect ์๋ค(์ํ ยท 18์ค 14๊ฑด). โ ์ฒ๋ฐฉ์ ๋ฐ๋ช ์ด ์๋๋ผ ์ฎ๊ฒจ์ค๊ธฐ โ ์ด๋ฏธ ์ณ๋indy๊ทผ์ ์คํจ ํํ๋ฅผadd()ํ ๊ณณ์ผ๋ก ๋ชจ์ 4์กฑ ์ ๊ฑด์ด ์ง๋๊ฒ ํ๊ณ ,given์inspect.signature(...).bind(*spec)๋ก ์ด๋ฆ์ ๋ฌถ์ด ์์ฑ๊ธฐ์ ์ธ์๊ฐ ๋์ด๋ ์๋ ์น๊ณ๋๋ค. โ ๋น๋์นญ์ด ๊ฒ์ฌ์ ์ ๋ถ(repaired๋ง ํ์ ยทcanonical์ ์๋๋ค) โ ๊ทธ ๋น๋์นญ์ ์งํค๋AUDIT SPEC STALE(rc=2) ๊ฐ๋ ์ ์ค โ ๋ชจ๋ฅด๋ฉด ยซํ์ ํ์ง ์๋๋คยป. โ โ ์กฑ๋ง๋ค ๊ฐ์ (ํ ์กฑ red ์ ์ผ๋ฐํ๊ฐ ์ด๋ฒ ๊ฒฐํจ์ ์ด๋ ธ๋ค): M-A ldc rc=0โrc=1 ยท M-B cp rc=0โrc=2(SPEC STALE) ยท M-B2 ์ ๋ณธ ๊ณ ์ง ํ โrc=1(1B) ยท M-C indy ๊ทผ์ ์คํจ rc=1โrc=1(์ผํ๋ ์กฑ ์ ์ง) ยท M-D indy LINKED rc=0โrc=1. โ โ ์์ ๊ฒ: ์ปค๋ฐ ํฝ์ค์ฒ 18๊ฑด์ ์ฌ์ ํ ์ ๊ฑด ํต๊ณผ๋ค โ ๋ด๋ ค๊ฐ ๊ฒ์ ยซํต๊ณผ ์ยป๊ฐ ์๋๋ผ ยซํต๊ณผ ๊ฐ๋ฅํ ์ ๋ ฅ ์งํฉยป(์คํจ ๋ถ๊ฐ ์ฌ๋ก 14 โ 0). ๋์ ํ์ ์ดCANONํ์ ์์กดํ๊ฒ ๋๊ณ (ํ๋ฆฌ๋ฉด ๊ฑฐ์ง MULTI-DEFECT), ์์ฑ๊ธฐ๊ฐ ์๋ผ๋ฉด SPEC STALE ์ด ๋ง๋๋ค(๊ณ ์). ์ํ ์๊ฐ ์ฆ๊ฐ๋ โ ์ค์ธก 9.57์ด(๊ฐ์ 5์ข ยท ์คํฌ๋์น 5๋ฒ) ยท ๊ฐ์ฌ 1ํ 0.31์ด. โ ์์ CI ๊ฒ์ฌ๋ ๋ง๋ค์ง ์์๋ค โ ๊ณตํํ ๊ฒ์ฌ๋ฅผ DoD ์ ๋ฐ์ง ์์ผ๋ ค๊ณ ํ์ ์์ ๋จผ์ ์กฐ์๋ค. โ ์ ํ Rust 0์ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #63 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ํฐ์ผmerge_strategy: merge์ ์ธ๋ถ โ โ ๊ณ๋ณด ๋ณด์กด). โ ํ PR ์ด-p0ยท-p0-fix๋ ํ์ฐจ๋ฅผ ํจ๊ป ์ฃ๋๋ค. ๊ฒ์ดํธโก approve ยท ํ3472d642โ ์ฐฉ์ ์ PR head ๋์ผ(๋ถ์ด๋) ยท โ **CONFLICTING** โ ์์ธ ์ฌ์ โ(๋ฑ์ฌ repo ๋ ๋ฌด์กฐ๊ฑด ๋ณ-merge)๋ก ๋ฐ๊ถ๋ ํ์ฐจ๋ค. โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(STATE.mdยทREPORT.md์๋จ ์ฝ์ ยท ์ ํ ์ฝ๋ 0) โ base ๋น๊น(๋ค์ฒ์ง 15) + ํฉ์งํฉ ํด์. ๋ณด์กด ์ฆ๋ช ์๋ฐฉํฅ ์์ค 0 ยท ๊ธฐ์ฌ ๋ถ๋ณ--numstat์ ํ ์ผ์น. โ ํ์์ci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ 0(๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด ยท ๋ผ์ด๋ธ ์คํ ์ฃผ์ฒด ์์. โ โ ๊ณ ์ง(๋น์ฐจ๋จ ยท ์ด ํ์ฐจ๊ฐ ๊ณ ์น์ง ์๋๋ค ยท base ๋ฅผ ยซ๋ ๋ฒยป ๋น๊ธด ๋ค ์ฌ์ธก): ํ์ ํ์ฐจ๊ฐ ๋ณ๋ ฌ๋ก ๋ค์ฌ์จ ํฝ์ค์ฒ โ 10์ฅ์ด ๊ฐ์ฌ ๋ฒ์ ๋ฐ์ด๋ค โtest-data/indy/RecipeWants{AConstant,FewerArguments,MoreArguments}.class3์ฅ(PR #57 ๊ณ์ด) +test-data/attr/Duplicate*.classโ 7์ฅ(PR #66 ยท ์ด ํ์ฐจ ์ค์ ์ฐฉ์ง). ๋ณํฉ ํธ๋ฆฌ์์ ๊ฐ์ฌ๊ธฐ ์ฌ์คํ = ๊ฒ์ฌ 18 ยท ๋ฌด๊ฒฐํจ 5 ยท ํฉ๊ณ 23 ยท rc=0 ์ธ๋ฐ ๊ทธ 10์ฅ์ โ ์ถ๋ ฅ์ ํ ์ค๋ ์๊ณAUDIT SPEC STALE๋ ์ธ์ง ์์๋ค. โCANONํ๊ฐ ์๊ธฐ๋ผ โ ํ์ ๊ฐ ๋ค์ฌ์จ ํฝ์ค์ฒ๋ ยซ์กฐ์ฉํยป ๋น์ด ์๋ค(๊ฐ์ฌ๊ธฐ๋ ใ์๋ ์์ฑ๊ธฐใ๋ง ๋ง๋๋ค). โ ์ฐจ๋จ ์ฌ์ ์๋ โ ์ด๊ด ์น๊ณ ํ์ ๋์. - [rustjava-adopt-class-format-mutation-audit-p0] โ
โ
ํฝ์ค์ฒ ยซ๋จ์ผ ๊ฒฐํจยป ๊ฐ์ฌ. โ
**[๊ต์ ยท
-fixํ์ฐจ] ์ข ์ ์ ๋ชฉ์ ใ18/18 ํต๊ณผใ๋ ยซ์ธก์ ยป์ด ์๋์๋ค** โ ์๋ ๊ต์ ์ค ์ฐธ์กฐ. ์ฑํ ์ ์2026-09-16-class-format-mutation-audit#p0(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ ํ ์ฝ๋ 0์ค(๊ฐ์ฌ ์คํฌ๋ฆฝํธ 1๊ฐ). โ ํ์ ์์ ยซ๋ก๋ยป๊ฐ ์๋๋ผ ยซ๋ฐ์ดํธ ๋์ผยป๋ก ์ก์๋ค(์์ฑ๊ธฐ๊ฐ ๊ฒฐํจ์ ์ธ์๋ก ๋ฐ์ผ๋ฏ๋ก ๋ ๊ฐํ๊ณ ๋ ์ธ๋ค):generator(๊ฒฐํจ)==์ปค๋ฐ๋ณธ๊ทธ๋ฆฌ๊ณgenerator(์๋ฆฌ)==generator(ํ์ค). โ โ **[๊ต์ 2026-09-17 ยท ๊ฒ์ดํธโก request-changes] ๊ทธ ใ์ ๊ฑดใ์ ยซ์ธก์ ยป์ด ์๋์๋ค** โ 18๊ฑด ์ค 14๊ฑด์ดrepaired๋ฅผ ์ ๋ณธ ์ธ์๋ก ยซ๋ค์ ์ง์ดยป ๋์งธ ๊ฒฐํจ์ ๋ฒ๋ ธ๋ค(๊ตฌ์กฐ์ ์ผ๋ก MULTI-DEFECT ๋ถ๊ฐ). โ ์ค์ธก๋ ๊ฒ์ 4/18. ์ ์ ์-fixํญ๋ชฉ์ด ์ง๋ค. โ ๋ฎ์ง ์๋ ๊ฒ์ ์คํฌ๋ฆฝํธ์ ์ ์๋ค(javac ์ฐ์ถ๋ฌผ ยท ์ ๋ฒ-๋ฏธ๊ตฌํ ยท ํ ์คํธ ์ ๋ฐ์ดํธ ํจ์น๋ถ). โ ๊ฐ์ 2์ข red(๋์งธ ๊ฒฐํจ ์ฌ๊ธฐ rc=1 ยท ์ปค๋ฐ๋ณธ 1๋ฐ์ดํธ ๋ฐ์ rc=2) ยท--all576/0/1(Rust ๋ฌด์ ์ด์ด๋ผ ๋ถ๋ณ). - [rustjava-adopt-reject-duplicate-bootstrap-methods-p0] โ
โ
ํด๋์ค ์์ค ์์ฑ ๊ฐ์ ๊ท์น โ ๋ค์ฏ์ ยซ์ยป. ์ฑํ ์ ์
โฆ-reject-duplicate-bootstrap-methods#p0(worklog json ๊ธฐ๋ก). โ ์ ํ ๋์ ๋ณ๊ฒฝ ์์. โ ์ ์ ๊ธฐ์ค๋ง์ผ๋ก๋ ยซ์๋์คยป์๋ค(ํ๋ฅfind_map์๋น์๊ฐ ์๋ ๊ฒ์BootstrapMethods๋ฟ ยท ๋๋จธ์ง 6์ข ์๋น์ 0). โ โ ํ์ ์ ๋ฐ๊พผ ๊ฒ์ ์ง์ง JVM ์ด๋ค โ OpenJDK 26.0.1 ์ดSourceFileยทInnerClassesยทSourceDebugExtensionยทBootstrapMethods(52)ยทNestHostยทNestMembers(55) ์ค๋ณต์ โ ์ ๊ฑดClassFormatError๋ก ๊ฑฐ๋ถํ๋ค โ โ ์ ์์ ใ์ค๋ ๋ก๋๋๋ ํ์ผ์ ๋ ๊ฑฐ๋ถํ๋คใ๋ ยซ๊ฑฐ์งยป(๊ทธ ํ์ผ๋ค์ ์ง์ง JVM ์์๋ ์ ์ด๋ฆฐ๋ค). โ โ ํต์ ๊ตฐ ๋์ด ํยท๋ฒ์ ๊ฒ์ดํธ์ ์ด์ :NestHost@52 ๋ โ ๋ก๋๋๋ค(๋ฏธ์ ์ โ ๋ฌด์) ยทSynthetic์ ์คํ์ด ํ๋๋ผ๋๋ฐ โ HotSpot ์ด ๋์ ๋ฐ๋๋ค(๊ทผ๊ฑฐ๋ก ๋บ๋ค). โ ๊ฐ์ 4์ข ์ ๊ฑด red(M1 ๊ฒ์ดํธ ์ ๊ฑฐยทM2 Synthetic ์ถ๊ฐ โ ํต์ ๊ตฐ red ยท M3 ํ ์นธ ์ ๊ฑฐ ยท M4 ํธ์ถ๋ถ ์๋ณต) ยท ๋ณต์ 17/0. โ ๋๊ฐ: ๋์ ๋ณ๊ฒฝ ยท ํ๋ ์๋ ๋ชฉ๋ก(๋์ด๋ ์ ์ธ๋ฆฐ๋ค) ยท Synthetic ๋ฐฐ์ ๋ JVM ํ๋์ ์์กด ยท โ **attribute.rsํ ์ค**(์ ์ target ๋ฐ โ ์ ๊ณ ). โ--all579/0/1 ยท ๋ฒ์ ํ +7ํ ยท DoD 7๋ช ๋ น rc=0. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #66 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ํฐ์ผmerge_strategy: merge์ ์ธ๋ถ โ โ ๊ณ๋ณด ๋ณด์กด). ๊ฒ์ดํธโก approve ยท ํ1da1379eโ ์ฐฉ์ ์ PR head ๋์ผ(๋ถ์ด๋) ยท โ **CONFLICTING** โ ์์ธ ์ฌ์ โ ๋ก ๋ณ-merge๊ฐ ๋ฐ๊ถ๋ ํ์ฐจ๋ค. โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(STATE.mdยทREPORT.md์๋จ ์ฝ์ ยท ์ ํ ์ฝ๋ 0) โ base ๋น๊น(๋ค์ฒ์ง 3) + ํฉ์งํฉ ํด์. ๋ณด์กด ์ฆ๋ช ์๋ฐฉํฅ ์์ค 0 ยท ๊ธฐ์ฌ ๋ถ๋ณ--numstat์ ํ ์ผ์น. โ ํ์์ci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ 0(๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด(์ต๋ค ๊ท์น์ฑ author cv 0.57 > 0.1) ยท ๋ผ์ด๋ธ ์คํ ์ฃผ์ฒด ์์. - [rustjava-adopt-ldc-tags-real-world-generator-survey-p0] โ
โ
**ใldc ํฝ์ค์ฒ๋ฅผ ASM ์ผ๋ก ์ฌ์์ฑใ ์ ์ โ ๊ธฐ๊ฐ.** โ
์ ํ ์ฝ๋ 0์ค(
declinedProposals๊ธฐ๋ก). โ ์ฌ์ โด ๋ ์ผ ์ค๋ผํด์ด ์ด๋ฏธ ์๋ค โ โ OpenJDK 26.0.1 ์ด ์์ฑ 4๊ฑด์ ์คํํ๋ค(์ ๊ฑด rc=0) ยท ์๋ฒ 5๊ฑด์ ์ ๊ฑด rc=1 ยท ใASM ์ด ๋ธ๋คใ๋ ์ ํ ํ์ฐจ๊ฐ ์ด๋ฏธ ๋์ ์ค์ฆ. โ โต ์์ ํ์ ์ ยซ์ฎ๊ฒจ๊ฐยป ๋ฟ์ด๋ค(ASM ๋ ๋๋ผ์ด๋ฒ 15์ค์ด ๋ชจ์์ ๊ณ ๋ฅธ๋ค) โ โถ ์์ฑ๊ธฐ๊ฐ ยซ๋ ๊ธฐ๊ตฌยป๊ฐ ๋๋ค(์์ฑ ํฝ์ค์ฒ๋ ASM ๋ถ๊ฐ) ยท ๊ฐ์ ์ค์ฒด๋ ใCI ๊ฐ ๊นจ์ง๋คใ๊ฐ ์๋๋ผ(CI ๋ ํฝ์ค์ฒ๋ฅผ ์ฌ์์ฑํ์ง ์๋๋ค โ ์ฐธ์กฐ 0๊ฑด) โ **ใ์ด๋์๋ ํ ์คใ์ด ใ๋คํธ์ํฌ+JDK+ํ jarใ๊ฐ ๋๋ ๊ฒ**. โ โ โท ๋จ์ผ๊ฒฐํจ ๊ฐ์ฌ์ ์ฒซ ๋ฑ์(generator==committed)๊ณผ ์ถฉ๋ โGENERATOR DRIFT rc=2. โ ๋จ ๊ทธ ๊ฐ์ฌ๊ธฐ๋ ๋ฏธ์ฐฉ์ง(PR #63)๋ผ ใ์ฐฉ์งํ๋ฉด ์ถฉ๋ํ๋ ์ถใ์ผ๋ก ์ ์๋ค. โ โ ์๋ ๊ฒ:synthetic๋จ์๊ฐ ๋จ๊ณ , โ ์ฐ๋ฆฌ ์ธ์ฝ๋์ ์ฒด๊ณ์ ํธํฅ์ ํ์ยซ์ยป JVM ์ด ๋ ๋ค ๊ด๋ํ๊ฒ ๋๊ธฐ๋ ๊ฒฝ์ฐ๋ ๋ชป ์ก๋๋ค(๊ฒ์ฆ๊ธฐ๋ ์ผ ํํฐ์ด์ง ์ฆ๋ช ์ด ์๋๋ค). โ ํ์ ์นด๋ 1๊ฑด โ ์ฌ์์ฑ ๋์ ์์ฑ ํฝ์ค์ฒ๋ฅผ ์ง์ง JVM ์ ์ฌ๋ฆฌ๋ ํ์ค์ฑ ๊ฒ์ฌ(์ ๋กverify-javac-fixtures.sh). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #64 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ํฐ์ผmerge_strategy: merge์ ์ธ๋ถ โ โ ๊ณ๋ณด ๋ณด์กด). ๊ฒ์ดํธโก approve ยท ํc0413f81โ ์ฐฉ์ ์ PR head ๋์ผ(๋ถ์ด๋) ยท โ **MERGEABLE/CLEANยท base ๋ค์ฒ์ง ยซ0ยป** โ ์ถฉ๋ ํด์ยทbase ๋น๊น ๋ ๋ค ๋ถ์. โ ํ์์ci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ 0(๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด ยท ๋ผ์ด๋ธ ์คํ ์ฃผ์ฒด ์์. โ โ ์ฐฉ์ง์ํจ ๊ฒ์ ยซ๊ธฐ๊ฐ ๊ธฐ๋กยป์ด๋ค โ ์ ํ ์ฝ๋ 0์ค์ด ์ ์์ด๊ณ , ์ฐฉ์ง diff ๋ ์์ฅ 4ํ์ผ๋ฟ์ด๋ค. - [rustjava-adopt-ldc-tags-real-world-generator-survey-p1] โ
โ
kotlincยทscalac ํ๊น ํ์ ์กฐ์ฌ โ 0. ๊ทธ๋ฌ๋ ยซ๋ค๋ฅธ 0ยป. ์ฑํ ์ ์
โฆ-survey#p1(worklog jsonadoptedProposals๊ธฐ๋ก) ยท โ ์ ํ Rust 0์ค. โ ์กฐ์ฌ ํ์ฐจ๊ฐ ใ๋ชป ์๋คใ๋ก ๋น์ ๋ ์นธ์ ์ฑ์ ๋ค โ ์ข ์ ์ถ์ stdlib(ํธํ์ฑ์ฉ ์ปดํ์ผ)์ด๋ผ ใ์ด ์ฝํผ์ค์์ 0ใ๊ณผ ใ์ด ๊ธฐ๋ฅ๋ค์์ 0ใ์ด ๋ฌ๋๋ค. โ kotlinc 2.4.20 โ 0 ยท scalac 3.9.0 โ 0. โ โ ํ ์์น๊ฐ ๊ทธ 0 ์ ์ฝ์ ๊ฐ์ผ๋ก ๋ง๋ ๋ค(KotlinMH 7ยทMT 6ยท Scala11ยท6= indy ๊ฐ ์ค์ ๋ก ๋์๋ค) โ ใ์ ์ผ๋คใ๊ฐ ์๋๋ผ ใ์ผ๋๋ฐldc์๋ฆฌ์ ์ ์จ๋คใ. โ ํ๊ทธ 17 ์ ํ์๋ 0 โ โ ์ด ํ์๋ค์์๋ ๋ ์ปดํ์ผ๋ฌ ๋ค condy ๋ฅผ ์ ๋ธ๋ค(ํ์ ์ ๋๋จธ์ง ์์ ๊ฐ๋ค โ ์ปดํ์ผ๋ฌ๋น ํ๋ก๊ทธ๋จ 1๊ฐ). โ ์๋ฐฉํฅ: ์์ฑ ๋์กฐ๊ตฐtest-data/ldcโ{MH 1, MT 2, Dynamic 7}โ ใ์ค์บ๋๊ฐ ๋ชป ๋ณธ๋คใ ๋ฐฐ์ ยท ์ค์ฐจ๋ง๋ 0.00%. โ ์ ์์ ๊ฐ ์ ์ ๊ฐ ๋ถ๋ถ์ ์ผ๋ก ๊ฑฐ์ง์ด์๋ค โ openjdk 26 ์ 2026-07-22 ๋ถํฐ ์ค์น๋ผ ์์๋ค(INSTALL_RECEIPTtime=1784711495ยท โsource_modified_time์๋) โ ์กฐ์ฌ(09-16)๋ณด๋ค 56์ผ ์ . โ โ ๋๊ฐ: ๋จธ์ ์kotlinยทscala์ค์น๋จ(์ฌ์ธก์ ์ํด ๋จ๊ฒผ๋ค) ยท โ ์ถ๊ฐ ์ ๊ณ โopenjdk๊ธฐ๋ณธ ๋งํฌ 26.0.1 โ 26.0.2.1 ์น๊ฒฉ(์์กด์ฑ ยท/opt/homebrew/opt/openjdk). โbrew uninstall kotlin scala๋ก๋ ์ ๋์์จ๋ค(Homebrew 7 ์brew switch์์) โ ์ฒ๋ฐฉ์ 26.0.1 keg ๊ฒฝ๋ก ํ(JAVA_HOME=/opt/homebrew/Cellar/openjdk/26.0.1ยท ์คํ ํ์ธ). โ keg-only ๋ผPATH์java(=/usr/bin/java)๋ ๋ถ๋ณ โ ์ํฅ์ opt ๊ฒฝ๋ก๋ฅผ ๋ช ์์ ์ผ๋ก ์ฐ๋ ์๋น์๋ฟ. โ ์ปดํ์ผ๋ฌ๋น ํ๋ก๊ทธ๋จ 1๊ฐ ยท CI ๋ถ๊ฐ. - [rustjava-adopt-link-stringconcatfactory-p1-fix2] โ
โ
base ๋น๊น โ ๊ทธ๋ฐ๋ฐ ๋ง๊ณ ์๋ ์ฝ๋ ์ถฉ๋์ ยซ์ด๋ฏธ ์์๋คยป(PR #60).
โ
์ ์ ๋ฐ์ฆ: ใ
make_indy_fixtures.py4๊ตฌ์ญ ์ถฉ๋ใ์-p1-fix๊ฐ 14:100f06b93f๋ก ํฉ์งํฉ ํด์ํ๊ณ ๊ฒ์ดํธโก๊ฐ 15:43 ๊ทธ head ๋ฅผ approve ํ๋ค. ๋ฐ๊ถ ๊ทผ๊ฑฐ(12:12 blocked ํ์ )๊ฐ ๊ทธ ์ฌ์ด ๋ก์ ๊ฒ์ด๋ค. โ ์ฌ๋ฐ ๋ถ๊ฐ๋ ํ์ธ โ ๋ค์ง 9์ปค๋ฐ ์ค ๊ทธ ํ์ผ์ ๋ง์ง ๊ฒ 0๊ฑด. โ ํฉ์งํฉ์ด ์ง์ง์ธ์ง ๋ค์ ์๋ค: ์์ฑ๊ธฐ ์ฌ์คํ์ด 10ํฝ์ค์ฒ ๋ฐ์ดํธ ๋ถ๋ณ(์์ชฝ ๊ฐ์กฑ์ ํ ์์ฑ๊ธฐ๊ฐ ๋ธ๋ค) ยท โ ์๋ฐฉํฅ ๊ฐ์ โ ours ์ฐ์ถ๋ฌผ๋ง ์น์ฐ๋ฉด ours ๋ง red ยท theirs ๋ง ์น์ฐ๋ฉด theirs 2๊ฑด๋ง red โ ใ์ ํใ์ด ์๋๋ค. โ ์ค์ ๋ก ๋จ์ ์๋ ๊ฒ์ ๋ถ์ฑ๋ค: ๋น๊ธฐ๋ฉด #57 ์ ํ๊ฐ ๋ค์ด์ ์ด PR ํฝ์ค์ฒ 3๊ฐ๊ฐ ๋ฏธ๋ฑ์ฌ โ ์์ฑ๊ธฐ๋ก 3ํ(โ ์ญ์ 0) ๋ฑ์ฌ. โ ์์ฅ 2ํ์ผ ํฉ์งํฉยท์๊ฐ์ ยท--all578/0/1 ยท DoD 7๋ช ๋ น rc=0. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #60 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ํฐ์ผmerge_strategy: merge์ ์ธ๋ถ โ โ ๊ณ๋ณด ๋ณด์กด). ๊ฒ์ดํธโก approve(๋ฆฌ๋์ง ์ต์ ํ์โฆ-p1-fix2.review.md) ยท ํ632c6b06โ ์ฐฉ์ ์ PR head ๋์ผ(๋ถ์ด๋) ยท โ **MERGEABLE/CLEANยท base ๋ค์ฒ์ง ยซ0ยป** โ ์ถฉ๋ ํด์ยทbase ๋น๊น ๋ ๋ค ๋ถ์(์ ํ์ฐจ๊ฐ ์ด๋ฏธ ๋น๊ฒผ๋ค). โ ํ์์ci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ 0(์ด ์ ์ฅ์์ ๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด ยท ๋ผ์ด๋ธ ์คํ ์ฃผ์ฒด ์์. โ ๋๋ด์ ์ด ๊ธฐ๋ก ํ ์ค๋ฟ โ ์์ฅ(worklog ์ยทSTATEยทREPORT)์ ๊ตฌํยท์น๊ณ ํ์ฐจ๊ฐ ์ด๋ฏธ ์ค์๋ค. - [rustjava-adopt-bound-bootstrap-static-arguments-p0] โ
โ
๋ถํธ์คํธ๋ฉ ์ ์ ์ธ์ = ยซ์ ์ฌ ๊ฐ๋ฅ ์์ยป โ ๊ฒฝ๊ณ์์ ยซ์ข
๋ฅยป๋ก.
์ฑํ ์ ์
2026-09-16-bound-bootstrap-static-arguments#p0(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ ํ ๋์ ๋ณ๊ฒฝ ์์. โ ์ ์์ด ์ ์ ์ํ์ ๋จผ์ ์๋ค(ใํ๋ฆฌ๋ฉด ๋๋ค๊ฐ ์ ๋ถ corruptใ): ํ๊ทธ ๊ฒ์ฌ๋ payload ๋ฅผ ์ฝ์ง ์์ผ๋ฏ๋กattribute.rs์ค๊ณ์ ์ถฉ๋ํ์ง ์๊ณ , โ ์ปค๋ฐ๋ ํด๋์ค ํ์ฑ์ด ์ /ํ ยซ144/12 ๋์ผยป(์๋ก ๊ฑฐ๋ถ 0). โ OpenJDK 26 ์ ๊ฐ์ ํ์ผ์ClassFormatError: argument_index 4 has bad constant type๋ก ๊ฑฐ๋ถํ๋ค. โ ์ ํ๋ฉด: ๋ง์ปค์์UnsupportedOperationExceptionโ ใํ์ใ์ ใ๋ฏธ์ง์ใ์ด๋ผ ๋งํ๊ฒ ๋๋ค. โ ๊ฐ์ 2์ข red(์กด์ฌ๋ง ๋๋๋ฆฌ๊ธฐ ยท โ ์งํฉ์ Utf8 ํ ์นธ ์ถ๊ฐ) ยท--all575/0/1 ยท ์ ํฝ์ค์ฒ 0(๋ฐ์ดํธ ํจ์น). - [rustjava-adopt-link-stringconcatfactory-p2-fix] โ
โ
ํฌํ ยซ์์ยป๋ฅผ ๊ฐ์ผ๋ก ์ ๊ทธ๊ณ ยซํธ์คํธ abortยป๋ฅผ ์์ค๋ค โ ๊ฒ์ดํธโก ๋ฐ๋ ค ์น๊ณ(PR #61).
โ
๊ฒ์์ F1ยทF2 ๋ ๋ค ์ณ์๋ค. F1: ํฝ์ค์ฒ ์ ๊ฑด์ด ํฌํ 1๊ฐ ์ดํ๋ผ ์์ ์ถ์ด ๋ฌด๊ด์ธก์ด์๊ณ RM4(์ฝ๊ธฐ ์์ ์ญ์ )๊ฐ 576 green ์ด์๋ค
โ ํฌํ 2๊ฐ ๋๋ค ๋ ์ถ๊ฐ(
(String,int)=a:7๊ธ์๋ก ยท(int,int)=120โ ๊ฐ์ผ๋ก๋ง) โ RM4 red(7:aยท2001). F2: ์์ ์๊ฐI์ธ ์ฝ์ฌ์ดํธ๊ฐ ํธ์คํธ ํ๋ก์ธ์ค๋ฅผ ์ฃฝ์๋ค. โ ๊ณ ์น ์๋ฆฌ =validation.rs์ ยซ์ฌ์ฉ ์ง์ ยป(JVMS 4.4.10: InvokeDynamic=๋ฉ์๋ ยท Dynamic=ํ๋) โ ์ผ๋ฐNameAndTypeํ์||๋ ์ณ์ผ๋ฏ๋ก ๋์๋ค(FieldrefยทMethodref ๊ณต์ ํญ๋ชฉ). โ ๊ทผ๊ฑฐ๋ ์ค์ธก์ด๋ค: OpenJDK 26 ๋ ๊ฐ์ ํ์ผ์ClassFormatError๋ก ๊ฑฐ๋ถํ๋ค โ ใ๋ฏธ์ง์ใ์ด ์๋๋ผ ใํ์ใ์ด ์ณ์ ์ง๋จ. โ ์กฐ์ด๊ธฐ ๋น์ฉ ์ ์ธก์ : ํด๋์ค 175 ยท indy/condy 44๊ฑด ์ค ์๋ก ์๋ฒ 1๊ฑด(์ด ํ์ฐจ ํฝ์ค์ฒ)๋ฟ. โlower()์try_parse๋ ๋์งธ ์ธต์ด๊ณ โ ๋ ๋ฆฝ ๊ด์ธก ๋ถ๊ฐ์์ ๋ช ์ํ๋ค(๋จ๊ธด ๊ทผ๊ฑฐ = ๋น์ฉ ๋น๋์นญ). โ ๊ฐ์ 2์ข ์ ๊ฑด red ยท--all578/0/1 ยท ํฝ์ค์ฒ ์ฌ์์ฑ ๋ฉฑ๋ฑ(ํ์ #59 ์์ฑ๊ธฐ์ ํฉ์น ๋ค์๋ ๋ฐ์ดํธ ๋ถ๋ณ). - [rustjava-adopt-link-stringconcatfactory-p2] โ
โ
**
LambdaMetafactory.metafactory๋งํฌ โ ๋๋คยท๋ฉ์๋ ์ฐธ์กฐ๊ฐ ยซ๋๋คยป.** ์ฑํ ์ ์2026-09-16-link-stringconcatfactory#p2(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ ํ ๋์ ๋ณ๊ฒฝ ์์ (๋๋ค ํฌํจ ํด๋์ค: ์ ์ฌ ๊ฑฐ๋ถ โ ์คํ). โjvm/๋ฌด์ ์ด ยทjava.lang.invoke0์ค. โ โ ์ ์์ ใjava.lang.invoke ๊ฐ ๋ถ๊ฐํผ ยท Lใ์ ํ๋ ธ๋ค โ ์ฝ์ฌ์ดํธ๊ฐ ์๋ฏธํ๋ ๊ฒ์ ํธ๋ค ์ฌ์ฌ์ด ์๋๋ผ ๊ฐ์ฒด์ด๊ณ , ๊ทธ๊ฑธ ๋ง๋ค ๋ ์ถ์ด ์ด๋ฏธ ์์๋ค(MethodBody::Rust(JvmCallback)ยทJvm::register_class). โ ํฉํ ๋ฆฌ๊ฐ ์คํํ ํด๋์ค๋ฅผ ์ง์ ๋ง๋ ๋ค. โ ๊ฒฝ๊ณ = ์ด๋ํฐ(๋ฐ์ฑยท์ธ๋ฐ์ฑยทํ๋): ํต๊ณผ๊ฐ ์๋๋ฉด ๋งํฌํ์ง ์๋๋ค โ ํ์ ์ด lowering ์์ ์ด๋ผ ใ๋ก๋๋๊ฑฐ๋ ์ ๋๊ฑฐ๋ใ์ด๊ณ ํธ์ถ ยซ๋์คยป ์คํจ ๊ฒฝ๋ก๊ฐ ์๋ค.LambdaBoxing.class๊ฐ ๊ทธ ๊ฒฝ๊ณ๋ฅผ ์ ๊ทผ๋ค(OpenJDK ๋ 3์ ์ฐ๋๋ค). โ โ ๊ด์ธก ๊ฐ๋ฅ์ฑ 3์ข ์ด ยซ์ฒ์์ ์ ์ฃฝ์๋คยป โ โดvoid ๋ฒ๋ฆผ(์ธํฐํ๋ฆฌํฐ ยซ๋ฐยป =Thread.run()์()๋ณํ์์๋ง ๋ณด์ธ๋ค) โตREF_invokeSpecial(javac 11+ ๋ ์ ๋ธ๋ค โ --release 8 ํฝ์ค์ฒ ยท ํ์ ยซํฝ์ค์ฒ๋ณยป๋ก ๋ฐ๊ฟจ๋ค) โถ์ ์ ์ธ์ ๊ฐ์ยท์ข ๋ฅ(์์กฐ๋ฆฝ 2์ข ). โ ๊ฐ์ 14์ข ์ ๊ฑด red ยทcargo test --all573 โ 576 / 0 failed / 1 ignored ยทLambdaKinds10์ค์ด OpenJDK 26.0.1 ๊ณผ ์ผ์น ยท DoD 7๋ช ๋ น rc=0 ยท ํฝ์ค์ฒ ์ฌ์์ฑ ๋ฉฑ๋ฑ. - [rustjava-adopt-link-stringconcatfactory-p1] โ
โ
๋ ์ํผ๊ฐ ์ฝ์ฌ์ดํธ์ ์ด๊ธ๋ ๋ โ ์ ์์ ใ์ธ๊ณ ์ณ๋คใ๊ฐ ๋ ๊ฒน์ผ๋ก ๊ฑฐ์ง์ด์๋ค.
์ฑํ ์ ์
2026-09-16-link-stringconcatfactory#p1(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ ํ ๋์ ๋ณ๊ฒฝ ์์. โ ์ ์์ ์ฒ๋ฐฉ์ ๊ธฐ๊ฐ(classfile/validation.rs/ClassFormatError) โ โ OpenJDK 26.0.1 ์ ํฝ์ค์ฒ 3์ข ์ ์ง์ ๋๋ฆฐ ์ค์ธก์ด ๊ทผ๊ฑฐ๋ค: ์ ๊ฑดBootstrapMethodError(์์ธStringConcatException) ยท ํ๋ ์linkCallSite= ๋งํฌ ์์ ยทClassFormatError์๋. โ โ ์ค์ ๋ก ๊นจ์ ธ ์๋ ๋: โดjava/lang/BootstrapMethodError๊ฐ ๋ฐํ์์ ์์ด์ ๊ทธ ๊ฐ์ง๊ฐ ๋์ง๋ ๋์jvm.rs:948unwrap ์์ ํจ๋ํ๋ค(ํฝ์ค์ฒ 0 ์ด๋ผ ์๋ฌด๋ ๋ฐ์ ์ ์ด ์๋ค) โต๊ฒ์ฌ๊ฐ ๋ถ์กฑ๋ถ๋ง ๋ด์ ๋ ์ํผ๊ฐ ์งง์ผ๋ฉด ๋จ๋ ์ธ์๋ฅผ ๋ฒ๋ฆฌ๊ณ ํ๋ฆฐ ๋ฌธ์์ด์ ๋ฐํํ๋ค(rc=0). โ ์๋ฑ ๊ฒ์ฌ ยท ๋ณํ ์ 1ํ ยท ์ธ์/์์ ๋ ์ถ. โ ๋ณํ ์ ์ธ ์ด์ :String.valueOf๊ฐ ์ฌ์ฉ์toString()์ ๋๋ฆฌ๋ฏ๋ก, ๋จผ์ ๋ณํํ๋ฉด ๊ทธ ์์ธ๊ฐ ์ง๋จ์ ๋ฎ๋๋ค. โ ๊ฐ์ 4์ข ์ ๊ฑด red(M1 ๊ฒ์ฌ ์ ๊ฑฐ ยท M2!=โ>ยท M3 ์์ ์ถ ์ ๊ฑฐ ยท โ M4 ํด๋์ค ๋ฑ๋ก ์ ๊ฑฐ โ ํจ๋ ์ฌํ) ยทcargo test --all573 โ 574 / 0 failed / 1 ignored(๊ธฐ์ค์ ์ํฌํธ๋ฆฌ ์ค์ธก) ยท DoD 7๋ช ๋ น rc=0 ยท ํฝ์ค์ฒ ์ฌ์์ฑ ๋ฉฑ๋ฑ. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #60 ยท--merge(๋ฑ์ฌ repo ยทmerge_strategy: merge์ ์ธ๋ถ). ๊ฒ์ดํธโก approve ยท ํ532d98d7๋ถ์ด๋(์ฐฉ์ ์ค์ธก 2026-09-17T01:18:24Z) ยท โ **MERGEABLE/CLEANยท base ๋ค์ฒ์ง ยซ0ยป** โ ์ถฉ๋ ํด์ยทbase ๋น๊น ๋ ๋ค ๋ถ์. โ ํ์์ci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ 0(์ด ์ ์ฅ์์ ๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด. โ ๋๋ด์ ์ด ๊ธฐ๋ก ํ ์ค๋ฟ โ ์์ฅ(worklog ์ยทSTATEยทREPORT)์ ๊ตฌํ ํ์ฐจ๊ฐ ์ด๋ฏธ ์ค์๋ค. โ โ ์ฐฉ์ง ์์ ๊ณ ์ง โ ์ด ํ์ฐจ๊ฐ ยซ์.class3๊ฐยป๋ฅผ ๋ค์ฌ์จ๋ค(RecipeWants{MoreArguments,FewerArguments,AConstant}). ์ด๋ฆฐ PR #57(ci-pending)์ด ใ.class๋test-data/class-file-versions.txt์ ๋ฑ์ฌ๋ผ์ผ ํ๊ณ โ ๋ฏธ๋ฑ์ฌ๋ ํ์ด ์คํจ์ํจ๋คใ๋ฅผ ์ธ์ด๋ค โ โ ์ด PR ์ด ๋จผ์ ์ฐฉ์งํ๋ฉด #57 ์ ํ์ ์ด ์ ์ด ยซ์์ดยป ๊ทธ ํ์ฐจ๊ฐ red ๊ฐ ๋๋ค(ํด์ =python3 test-data/src/record-class-file-versions.py์ฌ์์ฑ). โ ํ ์คํธ ์ถฉ๋์ด 0 ์ด๋ผmergeable๋ก๋ ๋ณด์ด์ง ์๋ ์ข ๋ฅ๋ค. - [rustjava-adopt-link-stringconcatfactory-p0] โ
โ
**
StringConcatFactory.makeConcat๋ ๋งํฌํ๋ค โ ๋จ ยซ์ด์ ๋ ์ ์์ด ์ ์ ๊ฒ์ด ์๋๋คยป.** ์ฑํ ์ ์2026-09-16-link-stringconcatfactory#p0(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ ํ ๋์ ๋ณ๊ฒฝ:makeConcat์ฝ์ฌ์ดํธ๊ฐ ๊ฑฐ๋ถ ๋์ ์คํ๋๋ค. โ ์คํ๊ธฐ(concat_with_constants)๋ ํ ์ค๋ ์ ๋ฐ๋์๋ค. โ โ โ ์ ์์ ์ ์ ๊ฐ ยซ๊ฑฐ์งยป์ด๋ค(์ค์ธก javac 26.0.1 ยท ๊ฐ์ ์์คa + b):--release9 ยท 11 ยท 17 ยท 21 ยท 26 ์ ๋ถmakeConcatWithConstantsโ โ ์์ ํ ์คํธ๊ฐ ยซ์๋ยป ๊ฒฝ์ฐ์๋ ๊ทธ๋ ๋ค (๋ ์ํผ๊ฐ ยซ์๋ฆฌํ์์ ๋ ยท ๋ฆฌํฐ๋ด 0ยป์ผ ๋ฟ์ด๋ค).makeConcat์ ๋น๊ธฐ๋ณธ ๋ด๋ถ ํ๋๊ทธ-XDstringConcat=indy์์๋ง ๋์ค๊ณ ,-XDstringConcat=inline์StringBuilder๋ฅผ ๋ธ๋ค. โ โ **ใjavac ์ด ์์ ํ ์คํธ ์์ด ์ฐ๊ฒฐํ ๋ ์ด๋คใ๋, ใjavac ์ฐ์ถ๋ฌผ์ด ๋ ๋ง์ด ๋๋คใ๋ ๊ฑฐ์ง์ด๋ค โ โ ๊ธฐ๋ณธ javac ์ฐ์ถ๋ฌผ์ ์ด๋ฏธ ยซ์ ๋ถยป ๋งํฌ๋๊ณ ์์๋ค.** โ โ ๊ทธ๋๋ ํ ์ด์ ๋ฅผ ยซ๋ฐ๊ฟ์ยป ์ ๋๋ค(์ ์์ ๊ทผ๊ฑฐ๋ฅผ ๊ทธ๋๋ก ๋ฒ ๋ผ์ง ์์๋ค): โดโ ๋ง๋ค ์ ์๋ ํ์์ด๋ค โ ๊ทธ ํ๋๊ทธ๋ก ์ง์ ๋ง๋ค์๋ค. ์ด ๋ฆฌ๋์ง๊ฐldcํ๊ทธ ์ง์์ ์ ๋นํํ ๊ธฐ์ค (ใASM ์ด ์ค์ ๋ก ๋ธ๋คใ)๊ณผ โ ๊ฐ์ ๊ธฐ์ค์ด๋ค โต๋ฌธ์ํ๋ ๊ณต๊ฐ ์ง์ ์ ์ด๋ผ ๋ฐ์ดํธ์ฝ๋ ์์ฑ๊ธฐ๊ฐ ํํ ์ ์๋ค โถโ โ ์คํ๊ธฐ์ ยซ์ ๊ฒฝ๋กยป๊ฐ ํ์ ์๋ค โmakeConcat(n๊ฐ ์ธ์)โก ๋ ์ํผ๊ฐ\u{1}n๊ฐ์ธmakeConcatWithConstants๋ค โ ์ฝ์ฌ์ดํธ ์์ ์์ ์ธ์ ์๋ก ๋ ์ํผ๋ฅผ ํฉ์ฑํ๋ฉด ๋. โ ์ ์์ด ใa recipe-free path through the same executorใ๋ก ๋ณธ ๊ฒ๋ณด๋ค ๋ ์ธ๋ค. โ ์ค๊ณ โ ์ ์์ ใ์งง์ ๋ช ์ ๋ชฉ๋ก์ ์ ์งํ๋ผใ๋ฅผ ์ง์ผฐ๋ค: ์์ ํํ ๋๋ฟ ยท ๋ ์ง์คํธ๋ฆฌ ์๋ ยท โ ์ด๋ฆ๊ณผ ์์ ์๋ฅผ ยซ์ยป์ผ๋ก ๋งค์นญํ๋ค โ โ **#55 ๊ฐ ๋ฃ์ name ์ถ ๊ทผ์ ์คํจ(NotMakeConcatWithConstants)๊ฐ ยซ์ด์ ์๋คยป** (๊ทธ ํ์ผ์ ์ด๋ฆ๋งmakeConcat์ด๊ณ ์์ ์๋makeConcatWithConstants์ ๊ฒ์ด๋ผ ์ฌ์ ํ ๊ฑฐ๋ถ๋๋ค). โ ๋ ์ํผ ํฉ์ฑ์ ยซ์ฝ์ฌ์ดํธ๋ง๋คยป ํ๋ค โ ํ ๋ถํธ์คํธ๋ฉ ํญ๋ชฉ์ ์์ ์๊ฐ ๋ค๋ฅธ ์ฌ๋ฌ ์ฝ์ฌ์ดํธ๊ฐ ๊ณต์ ํ ์ ์์ด ํด์ ๋จ๊ณ์์ ๊ณ ์ ํ ์ ์๋ค(๊ทธ๋์LinkedFactory::{WithConstants, NoRecipe}๋ก ยซ์ธ์ยป๋ง ํ๋ค). โ โ ๊ฐ์ ๋์กฐ 4์ข โ ์ฒ์์ ยซ๋ยป์ด ์ด์๋จ์๊ณ , ๊ทธ๊ฒ์ด ์ด ํ์ฐจ์ ๊ตํ์ด๋ค: M1 ํํ ์ ๊ฑฐ โ KILLED ยท M2 ๋ ์ํผ ๊ธธ์ดrepeat(1)โ KILLED ยท โ M3 ์ ๊ฒ์ฌ๋ฅผ ยซ์ด๋ฆ๋งยป์ผ๋ก โ SURVIVED ยท โ M4 ใ์ ์ ์ธ์ ์์ใ ๊ฐ๋ ์ ๊ฑฐ โ SURVIVED. โ โ ์ง์ โฆ-p0-fix๊ฐ ์ธ์ด ใ์ฃฝ์๋ค โ ๊ทธ ๊ฐ์ง๊ฐ ยซ์ ๋ถยป ๋ฎ์๋คใ๊ฐ ยซ๋ด ์ ์ฝ๋ยป์ ๊ทธ๋๋ก ์ ์ฉ๋๋ค โ ์ถ๋ง๋ค ๊ทผ์ ์คํจ๋ฅผ ๋ํด(MakeConcatWrongDescriptor= ์์ ์๋ง ๋ค๋ฅด๊ณ ์ ์ ์ธ์ 0 ยทMakeConcatWithArgument= ์ด๋ฆยท์์ ์ ๋ง๊ณ ์ ์ ์ธ์ 1) โ 4์ข ์ ๊ฑด KILLED ๋ก ๋ง๋ค์๋ค. โ ํฝ์ค์ฒ๊ฐ ยซ์ถ๋ ฅยปํ๋ค(ab) โ โ ๋ ์ํผ๋ฅผ ํ๋ฆฐ ๊ธธ์ด๋ก ํฉ์ฑํด๋ ๋งํฌ๋๊ณ ์คํ๋๋ค. ๊ฐ์ ๋ฒ๋ฆฌ๋ฉด ๊ทธ ์ค๋ฅ๊ฐ ยซ์ ๋ณด์ธ๋คยป (M2 ๊ฐ ๊ทธ ์ฆ๊ฑฐ๋ค) โ ใ๋งํฌ๋๋คใ๊ฐ ์๋๋ผ ใ๋ฌด์์ด ์ฐ๊ฒฐ๋๋ใ๋ฅผ ๋จ์ธํ๋ค. โ ์๋ ๊ฒ: ๋งํฌ ์์ฉ ๋ฒ์๊ฐ ๋์ด์ก๋ค โ ใ์ฝ์ฌ์ดํธ ยซํ๋ยป๋ฅผ ๋งํฌํ๋คใ๊ฐ ์ด์ ๋์ด๋ค(์ ์์ด ๊ฒฝ๊ณ ํ ๊ทธ๋๋ก ยท ๋ช ์ ๋ชฉ๋ก์ผ๋ก ์ต์ ). โcargo test --all573 โ 574 / 0 failed / 1 ignored ยท ํฝ์ค์ฒ ์ฌ์์ฑ ๋ฉฑ๋ฑ ยท DoD 7์ค ์ ๊ฑด rc=0. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #59 ยท--merge(๋ฑ์ฌ repo ยทmerge_strategy: merge์ ์ธ๋ถ). ๊ฒ์ดํธโก approve ยท ํ3b04712e๋ถ์ด๋(์ฐฉ์ ์ค์ธก 2026-09-17T01:40:32Z) ยท โ **MERGEABLE/CLEANยท base ๋ค์ฒ์ง ยซ0ยป** โ ์ถฉ๋ ํด์ยทbase ๋น๊น ๋ ๋ค ๋ถ์. โ ํ์์ci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ 0(์ด ์ ์ฅ์์ ๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด. โ ๋๋ด์ ์ด ๊ธฐ๋ก ํ ์ค๋ฟ โ ์์ฅ(worklog ์ยทSTATEยทREPORT)์ ๊ตฌํ ํ์ฐจ๊ฐ ์ด๋ฏธ ์ค์๋ค. โ โ ์ฐฉ์ง ์์ ๊ณ ์ง โ ์ด ํ์ฐจ๊ฐ ยซ์.class3๊ฐยป๋ฅผ ๋ค์ฌ์จ๋ค(MakeConcatยทMakeConcatWithArgumentยทMakeConcatWrongDescriptor). ์ด๋ฆฐ PR #57(ci-pending)์ด ใ.class๋ฏธ๋ฑ์ฌ๋ ํ์ด ์คํจ์ํจ๋คใ(test-data/class-file-versions.txt)๋ฅผ ์ธ์ฐ๋ฏ๋ก, โ ์ด PR ์ด ๋จผ์ ์ฐฉ์งํ๋ฉด #57 ์ ํ์ ์ด ์ ์ด ยซ์์ดยป ๊ทธ ํ์ฐจ๊ฐ red ๊ฐ ๋๋ค(ํด์ =record-class-file-versions.py์ฌ์์ฑ). โ ํ ์คํธ ์ถฉ๋ 0 ์ด๋ผmergeable๋ก๋ ๋ณด์ด์ง ์๋๋ค โ ๊ฐ์ ๊ณ ์ง๊ฐ #60 ํ์ ์๋ ์๋ค(๊ทธ์ชฝ์ ๋ค๋ฅธ 3๊ฐ). - [rustjava-adopt-indy-fixture-jdk-pin-and-slot-accounting-p0-fix] โ
โ
ํ ํค์ ๊ฒฝ๋ก ๊ตฌ๋ถ์๋ฅผ ยซ๋ ๊ณณยป์์ ์ ๊ทํ โ ์๋์ฐ CI red ๋ฅผ ๊ณ ์ณค๋ค.
๊ฒ์ดํธโก request-changes ์น๊ณ(PR #57 ยท ํ
3061edb7ยท โci-presenceโCI_REDrc=1). โ ์ ํ ์ฝ๋ ๋ฌด์ ์ด ยท ์ค๊ณ ๋ฌด๋ณ๊ฒฝ (๊ฒ์์๊ฐ ใ์ค๊ณ๋ ์ณ๊ณ ์ธ ๋ฐฉํฅ ์ ๋ถ ์ค์ ๋ก ๋ฌธ๋คใ๋ก ํ์ธํ๋ค โ โ ๊ทธ ์ถ์ ๋ค์ ์ด์ง ์์๋ค). โ โ ๊ฒฐํจ์ ๋ชจ์:to_string_lossy()๊ฐ ์๋์ฐ์์indy\StringConcat.class๋ฅผ ๋ง๋๋๋ฐ ํ๋indy/โฆ๋ฅผ ๋ด๋๋ค โ โ ํ์ 36๊ฐ๊ฐ ยซ๋ฏธ๊ธฐ๋กยป๊ณผ ยซ์ ๋ น ๊ธฐ๋กยป์ ยซ๋์์ยป ๊ฑธ๋ฆฐ๋ค. โ ๋ฃจํธ 114๊ฐ๋ ํต๊ณผํ๋ฏ๋ก โ mac/linux ๋ก๋ ยซ์ ๋ยป ์ ๋ณด์ธ๋ค โ ๋ชจ์ ์ค์ธก 150 = ๋ฃจํธ 114 + ํ์ 36(๊ฒ์์ ์์ ์ผ์น). โ โ **ใ๋ ๊ณณใ์ด ๊ธ์๋ค**: โ ๊ฐ์ ๊ฒฐํจ์ด ๊ธฐ๋ก๊ธฐ(record-class-file-versions.py)์๋ ์์๋ค โ Rust ๋ง ๊ณ ์น๋ฉด โ ์๋์ฐ์์ ๊ธฐ๋กํ ํ๊ฐ ์ด๋ฒ์ mac/linux ๋ฅผ red ๋ก ๋ง๋ค๊ณ , โ CI ๊ฐ ๊ธฐ๋ก๊ธฐ๋ฅผ ์ ๋๋ ค ๊ทธ ์ถ์ ยซ์์ ์กฐ์ฉํ๋คยป. โ ๋์ ํจ๊ป ๊ณ ์ณค๋ค(Rust ๊ตฌ๋ถ์ ์ ๊ทํ ยท Pythonas_posix()). โ ํ ์์ฒด๋ ์ด๋ฏธ ์ฌ๋์์๋ค(์ญ์ฌ๋์ ํ 0 ์ค์ธก). โ โ โก๋ ยซ์ฝ๋ยป๊ฐ ์๋๋ผ ยซ์์ยป์๊ณ โ ๊ทธ ์ฌ์ด#55๊ฐ ๋จผ์ ์ฐฉ์งํด ยซํด์๋ ํํยป๋ก ๋ํ๋ฌ๋ค: base ๋ฅผ ๋น๊ธฐ๋ ํฝ์ค์ฒ 3๊ฐ๊ฐ โ ์ ํํ red ๋ก ์กํ๊ณ (NotFactoryDescriptorยทNotInvokeStaticFactoryยทNotMakeConcatWithConstants), โ ๊ณ ์น ๊ธฐ๋ก๊ธฐ๋ก ์ฌ๊ธฐ๋กํ๋ 150 โ 153 ยท diff ๊ฐ ์ ํํ 3์ค(๊ทธ ์ธ ๋ฌด๋ณ). โ โ ๊ธฐ๊ณ๊ฐ ์ค๊ณ๋๋ก ยซ์ก๊ณ ยป, ์ฒ๋ฐฉ์ด ยซํ ๋ช ๋ นยป์ด์๋ค๋ ์ค์ฆ์ด๋ค. โ ๋จ์ ํ์ ์ค์ธก:#56์ test-data ์ ์ด 0 ยท#58์test-data/src/verify-javac-fixtures.sh์คํฌ๋ฆฝํธ๋ฟ โ โ ๋ ๋ค ํ์ ์ํธ์์ฉํ์ง ์๋๋ค โ ์ฐฉ์ง ์์ ์ ์ฝ ์์. โ โข ์ค๊ธฐ ์ ์ :STATE.md์ ์ฐฉ์งํด ์๋ ใ#55 ๋ ์์ฅ 3ํ์ผ๋ง ๋ง์ง๋คใ๊ฐ ๊ฑฐ์ง์ด์๊ณ โ ๊ทธ ํ ์ค ๋๋ฌธ์ โก๊ฐ ๋ณด์ด์ง ์์๋ค โ ๊ทธ ์๋ฆฌ์ ๋ฐ์ฆ์ ๋ถ์๋ค. โ ๊ตํ: ใ์ด๋ ํ์ผ์ ๋ง์ง๋ใ๋ ยซPR ํ์ผ ๋ชฉ๋กยป์ผ๋ก ํ์ธํ๋ผ. โ โ ์ด ์ค๊ณ์ ยซ๋ณธ๋ ๋๊ฐยป๋ฅผ ์ด์ ์ ์ด ๋๋ค โ ใ๊ธฐ๋ก์ ์๋ ํฝ์ค์ฒ = redใ๋ ์๋๋ ์๊ฒฉํจ์ด๊ณ ๊ทธ ๋น์ฉ(ํฝ์ค์ฒ๋ฅผ ๋ํ๋ ํ์ฐจ๊ฐ ํ๋ฅผ ํจ๊ป ๋ง์ง๋ค)์ด ์ด๋์๋ ์์๋ค(์ค์ธก:AGENTS.md๊ด๋ จ ๋ฌธ์ฅ 0) โ โ **AGENTS.mdยงTesting Boundaries ์ ํ ์ค๋ก ๋จ๊ฒผ๋ค. โ ๊ฐ์ ๋์กฐ(โ): ์ ๊ทํ ํ ์ค์ ๋๋๋ฆฌ๋ฉด โ mac ์์๋**table_keys_use_forward_slashes_on_every_platform๊ฐ ์ง๋ค ยท ๋ณต์ green. โ โ ๊ทธ๋์ ยซ๋ฌธ์์ด ์นํยป์ผ๋ก ๊ตฌํํ๋ค โcomponents()join ์ด๋ฉด Unix ์์ ์ญ์ฌ๋์ ์ ๋ ฅ์ด ๊ทธ๋๋ก ํต๊ณผํด โ ๊ฐ์ ์ด mac ์์ ์ ์กํ๋ค(๋๊ฐ: Unix ํ์ผ๋ช ์ ์ง์ง ์ญ์ฌ๋์๋ ๋ฐ๋๋ค โ ํฝ์ค์ฒ์ ์๊ณ ํ๋ ์ฐ๋ฆฌ ๊ฒ์ด๋ค). โ Python ์ถ์ ์๋์ฐ ์์ด ์ค์ฆํ๋ค(PureWindowsPath:str()์ญ์ฌ๋์ โas_posix()์ฌ๋์). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #57 ยท--merge(๋ฑ์ฌ repo ยทmerge_strategy: merge์ ์ธ๋ถ). ๊ฒ์ดํธโก approve(โ-fix2์น๊ณ๋ถ) ยท โ ํ888d8821๋ถ์ด๋(์ฐฉ์ ์ค์ธก 2026-09-17T06:21:43Z ยทMERGEABLE/CLEANยท base ๋ค์ฒ์ง ยซ0ยป). โ โ ๊ฒ์ดํธโข์ด ยซ๋ ๋ฒยป ๋์๋ค โ ์ฒซ ํ์ฐจ๋ ยซ์ณ๊ฒยป ๋งํ๋ค: base ๋ฅผ ๋น๊ธฐ๋ฉด ์ด PR ์์ ์ ํ ํ ์คํธ๊ฐ red ์๋ค (ํ์ #59 ๊ฐ ๋ค์ฌ์จMakeConcat*3๊ฐ๊ฐ ํ์ ์์๋ค) โ ๋จธ์ง ํฐ์ผ์ ์ฝ๋๋ฅผ ๊ณ ์น์ง ์์ผ๋ฏ๋ก-fix2๋ก ๋๊ฒผ๊ณ , ๊ทธ ํ์ฐจ๊ฐ base ๋น๊น + ํ 3ํ(record-class-file-versions.py1ํ ยท ์ถ๊ฐ๋ง ยท ์ญ์ 0)์ ๋ฃ์ด ํ์๋ค. โ โ ์ด PR ์ด ์ธ์ด ๊ท์จ์ด ์ด PR ์ ์ฒ์ ์ ์ฉ๋ ์ฌ๋ก์ด๊ณ , ๊ฒ์ฌ๊ธฐ๋ฅผ ์ํํ์ง ์๊ณ ํ๋ฅผ ๊ณ ์ณ ํต๊ณผํ๋ค. โ ํ์์ci-presencerc=0 CI_GREEN ยท ์ด ํ์์์cargo test --test test_fixture_pins3/3 green(์ด PR ์ด ๋ง๋ ๊ทธ ์ถ). โ ๋๋ด์ ์ด ๊ธฐ๋ก ํ ์ค๋ฟ์ด๋ค โ ์์ฅ(worklog ์ยทSTATEยทREPORT)์ ๊ตฌํ ํ์ฐจ๊ฐ ์ด๋ฏธ ์ค์๋ค. โ ๋ฐฐํฌ 0(์ด ์ ์ฅ์์ ๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์์ PR 0๊ฑด ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด ยท ๋ก์ ํ๋ณ ๋๊ตฌ 0๊ฑด. โ โ ์ฐฉ์ง ์์ ๊ณ ์ง โ ์ด PR ์ด ์ธ์ด ๊ท์จ(ใ.class๋ฅผ ๋ํ๋ฉดtest-data/class-file-versions.txt์ ๊ฐ์ ์ปค๋ฐ์ผ๋ก ํ์ ๋ฃ๋๋ค ยท ๋ฏธ๋ฑ์ฌ ํฝ์ค์ฒ๋ ํ์ด ์คํจ์ํจ๋คใ)์ โ ์ด๋ฆฐ PR #60(์ ๊ท.class3๊ฐ)ยท#61(17๊ฐ)์ ยซ์๊ธ ์ ์ฉยป๋๋ค โ ๊ทธ์ชฝ์ด ํ์ ํ์ ๋ฃ์ง ์๊ณ ์ฐฉ์งํ๋ฉด main ์ด red ๊ฐ ๋๋ค. ํ ์คํธ ์ถฉ๋์ด ์์ดmergeable๋ก๋ ๋ณด์ด์ง ์๋ ์ข ๋ฅ๋ค. - [rustjava-adopt-indy-fixture-jdk-pin-and-slot-accounting-p0] โ
โ
**
test-data์ ์ฒด(150 ํด๋์ค)์ ํด๋์ค ํ์ผ ๋ฒ์ ์ ยซ๋๊ฒฐยปํ๋ค โ ยซํต์ผยป์ด ์๋๋ผ.** ์ฑํ ์ ์2026-09-16-indy-fixture-jdk-pin-and-slot-accounting#p0(worklog jsonadoptedProposals๊ธฐ๋ก). โ โ ์ ์์ ยซ๋น์ฉ ์ฐ์ ยป์ ๋ฐ๊ฟจ๋ค โ ๊ธฐ๊ฐ์ด ์๋๋ผ ยซ์ค๊ณ ๊ต์ฒดยป๋ค. ์ ์์ ใdecide the intended target per fixture or per directory โฆ recompiled โฆ โ The decision is the workใ๋ผ๋ฉฐ ํต์ผ์ ์ ์ ํ๋๋ฐ, ์ ์ ์ ์์ด ์ ์ ์ด๋์ ใa regenerated fixture cannot quietly start testing a different Java version's bytecode shapesใ = โ **ยซ๋๋ฆฌํํธ ํ์งยป๋ค. โ โ ๋ชฉํ๋ฅผ ยซ๋๊ฒฐยป๋ก ๋ฐ๊พธ๋ฉด ๊ทธ ใworkใ๊ฐ ํต์งธ๋ก ์ฌ๋ผ์ง๋ค**: ์ง๊ธ ๊ฐ์ ๊ธฐ๋กํ๊ณ ํผ์ ์์ง์ด๋ฉด red โ โ ์ฌ์ปดํ์ผ 0 ยท ๋ฐ์ดํธ ๋ณ๊ฒฝ 0 ยท ใ์ด๋ ํ๊น์ด ์ณ์๊ฐใ ๊ฒฐ์ ์์ฒด๊ฐ ๋ถ์. โ ๋๊ฐ๋ ์ ์งํ๊ฒ: ์ด ์ถ์ โ ์์์ ยซ๊ณ ์น์งยป ์๊ณ ยซ๊ตณํ๋คยป(๋ฃจํธ์ 52ยท65ยท66ยท68ยท70 ์ด ๊ทธ๋๋ก ๋จ๋๋ค). ๊ทธ๊ฒ์ด ์ณ์ ์ด์ ๋ โ ํต์ผ = ์ฌ์ปดํ์ผ = ๋ฐ์ดํธ ๋ณ๊ฒฝ = ใ๊ทธ ํฝ์ค์ฒ๊ฐ ๋ฌด์์ ์ํํ๋์งใ์ ๋ณ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์ด๊ณ (์ ์ ์์ ์ ๊ฒฝ๊ณ ), ๊ทธ ํ์ ์ ๋ณ ์ถ(ํ์ L) ์ผ๋ก ๋๊ฒผ๋ค. โ โ โ ์ด๋ฏธ ํํ๋ ์ถ์ด ยซ๋ยป ์์๊ณ , ๊ทธ ๋์ด ๋ชป ๋ฎ๋ ๊ณณ์ด ์ด ํ์ฐจ์ ๋์์ด์๋ค: โดtests/test_fixture_pins.rs๋test-data/indy๋ง โต์์ฑ๊ธฐ ์ฝ๋๊ฐ ์๊ธฐ ์ฐ์ถ๋ฌผ 16๊ฐ์ ๋ฒ์ ์ ์์ค์ ๋ฐ๋๋ค (make_ldc_fixtures.py์major=52+ ํญ๋ชฉ๋ณ ์ค๋ฒ๋ผ์ด๋) โ โ ๋จ๋ 132๊ฐ = ใ.java์์ค๊ฐ ์์ด ์์ ์ฌ์ปดํ์ผ ๊ฐ๋ฅํ ๊ฒใ์ด๊ณ , โ ๋ฃจํธ์ 66ร8 ยท 68ร1 ยท 70ร3 ์ด ๊ทธ ์ฌ๊ณ ๊ฐ ยซ์ด๋ฏธ ์ผ์ด๋ยป ์ง๋ฌธ์ด๋ค. โ ๋ง๋ ๊ฒ:test-data/class-file-versions.txt(150ํ + ๋จธ๋ฆฌ ์ฃผ์์ ใ์ด๊ฒ์ ํ๊น์ด ์๋๋ผ ๋๊ฒฐ์ด๋คใ) ยทtest-data/src/record-class-file-versions.py(๋จธ๋ฆฌ ์ฃผ์ ๋ณด์กด ยท ์์ผ๋ฉด ๊ฑฐ๋ถ ยท docstring ์ด ใ์คํจ๋ฅผ ์ ์ฌ์ฐ๋ ค๊ณ ๋๋ฆฌ์ง ๋ง๋ผใ๋ฅผ ๋ชป๋ฐ๋๋ค) ยท ํ ์คํธcommitted_fixtures_keep_their_recorded_class_file_version. โ โ ์ธ ๋ฐฉํฅ์ ยซ์ ๋ถยป ๊ฒ์ฌํ๋ค โ ์ด๊ฒ์ด ๊ธ์๋ค: โด๊ธฐ๋ก๊ณผ ๋ค๋ฆ โตโ ๊ธฐ๋ก์ ์๋ ์ ํฝ์ค์ฒ (โ ์์ผ๋ฉด ํ์ด ยซ์ตํธ์ธยป์ด ๋์ด ๋ด์ผ ์ถ๊ฐ๋๋ ํฝ์ค์ฒ๋ ์กฐ์ฉํ ๋ฏธ๋ณดํธ โ ์ด ์ ์ฅ์๊ฐ ๋ฐ๋ณตํด ์ก์ ๊ทธ ํํ์ ๋ณ์ข ) โถ์ ๋ น ๊ธฐ๋ก. โ ๊ฐ์ 3์ข ์ ๊ฑด red: M1Hello.class๋ฒ์ ๋ฐ์ดํธ65โ70(= ๋ค๋ฅธ JDK ์ฌ์์ฑ๊ณผ ๊ฐ์ ํ์) ยท M2 ๋ฏธ๊ธฐ๋ก.classํฌ์ ยท M3 ํ์๋ง ์๋ ํ โ ๋ณต์ green(test_fixture_pins2 passed). โ ์คํจ ๋ฌธ๋ฉด์ด ํ์ผยท๋ ๋ฒ์ ยทํด์ ๋ช ๋ น์ ํจ๊ป ๋งํ๋ค(Hello.class: recorded 65.0, found 70.0). โ ๊ธฐ๋ก๊ธฐ ๋ฉฑ๋ฑ(์ฌ์คํ ์ ํ ๋ฐ์ดํธ ๋์ผ) ยทcargo test --all572 โ 573 / 0 failed / 1 ignored ยท DoD 7์ค ์ ๊ฑด rc=0. โ ์๊ณ ๋จ๊ธด ๊ฐ: ์์ฑ๊ธฐ ์ฐ์ถ๋ฌผ 16๊ฐ๋ ์ด์ค ์ ๊ธ(์์ฑ๊ธฐ + ํ)์ด๋ค โ โ ์์ธ ๋ชฉ๋ก์ ๋๋ ๊ท์น๋ณด๋ค ยซ์ ๊ฑด ๋จ์ผ ๊ท์นยป์ด ๋ ์ฉ๋๋ค. - [rustjava-adopt-indy-fixture-jdk-pin-and-slot-accounting-p1] โ
โ
**ใ์ด๋ javac ์ด ๋ง๋ค์๋ใ๋ฅผ ยซ๊ธฐ๋กยป์์ ยซ๊ฒ์ฆยป์ผ๋ก ๋ฐ๊ฟจ๋ค.**
์ฑํ ์ ์
2026-09-16-indy-fixture-jdk-pin-and-slot-accounting#p1(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ ํ ์ฝ๋ ๋ฌด์ ์ด. โ โ ์ ์์ ๊ฒฐ๋ก ยซ๋ยป์ด ์ค์ธก์ผ๋ก ๋ฐ์ฆ๋๋ค โ ๊ทธ๋์ ์ ์์ด ยซ๋ถ๊ฐ๋ฅยปํ๋ค๊ณ ์ ์ ์ชฝ์ ๋ง๋ค์๋ค: โดใNothing offline can verify a recorded compiler version โฆ buys provenance, not enforcementใ โ โ ๊ฑฐ์ง: javac ์ ๊ฐ์ ์์คยทํ๋๊ทธยท์ปดํ์ผ๋ฌ์ ๊ฒฐ์ ์ ์ด๋ผ, ๊ธฐ๋ก๋ ๋๊ตฌ(javac 26.0.1 --release 21)๋ก ์ฌ๋น๋ํ๋ โ **test-data/indy์ 6๊ฐ๊ฐ ยซ๋ฐ์ดํธ ๋จ์๋ก ๋์ผยปํ๋ค. โ โ ๊ธฐ๋ก์ด ยซ์ฌํยป์ผ๋ก ๊ฒ์ฆ๋๋ค.** โตใ๊ฐ์ ๊ฐ๋ฅํ ์ถ์constant_pool.rs์ ์์ ๊ฐ์๋ฟ์ด๊ณ ํ ํฝ์ค์ฒ๋ง ๋ฎ๋๋คใ โ โ ๊ฑฐ์ง: โ javac ์ฐ์ถ indy ํฝ์ค์ฒ ยซ3/3ยป์ด ํ์ ๋จ์ธ ๋ณด์ โConstantKinds(MethodType 1ยทDynamic 3ยทMethodHandle 7ยทInvokeDynamic 3) ยทStringConcat(๋ถํธ์คํธ๋ฉ 4์ถ + ์ธ์๊ฐ ยซ๊ฐ๋ฆฌํค๋ ๊ฐยป"a\u{1}"+ โ ๋ฐ์ดํธ ์ฐฝ[15,6,0,35]ยท ใlayout changedใ๋ก ์คํจ) ยทLambda(LambdaMetafactory.metafactoryยท ์ธ์ 3 ยท โargs[0]==args[2]!=args[1]). โ ์ ์์ด ๋ ์ํ(ใํ๋ javac ์ enum switch ๋ฅผ condy ๋ก ๋ธ๋คใ)์ConstantKinds์ Dynamic 3 ์ด ์ด๋ฏธ ์ ๊ทธ๊ณ ์๋ค. โ ๋ง๋ ๊ฒ:test-data/src/verify-javac-fixtures.shโ โดโ--release๋ฅผ ํฝ์ค์ฒ ์์ ์ major โ 44 ์์ ์ฝ์ด โ ์ธ๋ถ ํ(ํ์ PR #57 ์ ๋ฒ์ ํ)์ ์์กดํ์ง ์๋๋ค(๋๊ธฐํํ ๊ฒ์ด ์๋ค ยท ๋ฏธ์ฐฉ์ง ์์กด๋ ์๋ค) โตโ ๋ช ์ํJAVAC๊ฐ ์ ๋๋ฉด ์กฐ์ฉํ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ๋ก ๋์ฒดํ์ง ์๊ณ rc=2 โ ใ๋ฌด์์ด ๊ฒ์ฆํ๋ใ๊ฐ ํ๋ ค์ง๋ฉด ์ ๋๋ค โถโ **ใ๋ชป ๋ง๋ค์๋คใ์ ใ๋ง๋ค์๋๋ฐ ๋ค๋ฅด๋คใ๋ฅผ ยซ๊ฐ๋ฅธ๋คยป** โ ํฉ์น๋ฉด ๋ฐ๊ฒฌ์ ๊ณผ์ฅํ๋ค. โ CI ์ ๋ฐฐ์ ํ์ง ยซ์์๋คยป:.github/workflows/rust.yml์ JDK ๊ฐ ์๊ณ PATH ์๋ ์๋ค โ JDK ๋ฅผ ์๊ตฌํ๋ ํ ์คํธ๋ โ ์ด๋์๋ ์คํจํ๊ฑฐ๋ ์ด๋์๋ ๊ฑด๋๋ด๋ค. ์ด๊ฑด ยซ์ฌ์์ฑํ์ ๋ ์ฌ๋์ด ๋๋ฆฌ๋ยป ๊ฒ์ฌ๋ค(doc ์ฃผ์์ ๋ช ์). โ โ ์คํจ๋ด ๋์ ๋จ๊ธด๋ค โ ์ด ํ์ฐจ๊ฐ ์ค์ ๋ก ๋ฐ์๋ค: โดcommand -v javac์ด macOS ์คํ (์คํ๋๋๋ฐ ใJDK ์์ใ)์ ๊ณ ๋ฅธ๋ค โ ๊ฒฝ๋ก๊ฐ ์๋๋ผ ์คํํด์ ํ๋ณํ๋ค โตโ **-sourcepath๋ฅผ ๋ฃ์๋ค๊ฐ ยซ๋ ๋๋น ์ก๋คยป** โtest-data/src์Exception.javaยทArray.javaยทMethod.java๊ฐ ์์ด javac ์ดException์ โ **java.lang.Exception์ด ์๋๋ผ ๊ทธ ํฝ์ค์ฒ๋ก** ํด์ํ๋ค (๋ฉ์ฉกํ ์ฌํ๋๋ ํ์ผ๋ค์ดincompatible types๋ก ๋ฌด๋์ก๋ค) โ ๋๋๋ฆฌ๊ณ ๊ทธ ๋๊ฐ(ํ์ ์ฐธ์กฐ ์์ค๋ ํ๋ก ์ฌ๋น๋ ๋ถ๊ฐ)๋ฅผ ๋ฐ๋ก ๋ณด๊ณ ํ๋ค. โ ๊ฐ์ ๋์กฐ: ์ปค๋ฐ๋ณธ ๋ง์ง๋ง 1๋ฐ์ดํธ ๋ฐ์ โ โ โ ๊ฐ์ง ยท ๋ณต์ โ 6 reproduced ยท ๋ช ์JAVAC๋ถ์ฌ โ โ rc=2 ใnothing was verifiedใ(ํต๊ณผ ์๋). โ โ ์ผ๋ฐํ โ ์์ผ ๋ณด๊ณ ยซ๋์จ ๊ฐยป๋ง ์ ์๋ค(๊ณ ์น์ง ์์๋ค): ๋ฃจํธsh โฆ test-dataโ 109 rebuilt ยท 104 ์ฌํ ยท โ 5 ์์ด ยท 3 ์ฌ๋น๋ ๋ถ๊ฐ. ์์ด 5๊ฑด =MonitorSemantics(+๋ด๋ถ 2) ยทNativeMethod(--release 8) ยทOddEven(--release 21). โ ์์ธ์ ๋จ์ ํ์ง ์๋๋ค โ ใ๋ค๋ฅธ ์ปดํ์ผ๋ฌใ์ ใ๋น๋ ๋ค ์์ค ์์ ใ์ด ๋ ๋ค ์ด ๊ด์ธก๊ณผ ๋ง๋๋ค. โ ๋ฒ์ ๋ฐ์ด๋ผ ํ์(M)์ผ๋ก ๋๊ฒผ๋ค. โ ๊ทธ๋๋ ์ ๋ ์ด์ : โ ์ ์์ด ๊ฑฑ์ ํ ๋๋ฆฌํํธ๊ฐ ยซ์ค์ฌยปํ๋ค๋ ์ฒซ ยซ์ง์ ยป ์ฆ๊ฑฐ๋ค(๊ทธ์ ๊น์ง๋ ๋ฒ์ ๋ถํฌ์์์ ์ถ๋ก ์ด์๋ค). โ ์ง์ ํ์ฐจ๊ฐ ยซ์ปค๋ฐํ์ง ์๊ธฐ๋กยป ํ ๊ฐ์ ํ๋ค์ค์ ๋ค๋ฅธ ์ข ๋ฅ๋ค โ ๊ทธ๊ฑด ์ ํ ์์ค๋ฅผ ์นํํด ์ฃฝ์ผ๋ฉด ํธ๋ฆฌ๋ฅผ ์ค์ผ์์ผฐ๊ณ , ์ด๊ฑด ์ฝ๊ณ ๋น๊ต๋ง ํ๋ค(์คํจํด๋ ํธ๋ฆฌ ๋ฌด๋ณ) โ ๊ทธ๋์ ๋จ๊ฒผ๋ค. โcargo test --all572 / 0 failed / 1 ignored(doc ์ฃผ์๋ง ๋ฐ๊ฟ ๋ถ๋ณ) ยท DoD 7์ค ์ ๊ฑด rc=0. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #58 ยท--merge(๋ฑ์ฌ repo ยทmerge_strategy: merge์ ์ธ๋ถ). ๊ฒ์ดํธโก approve ยท ํ38c02a2d๋ถ์ด๋(์ฐฉ์ ์ค์ธก 2026-09-17T00:27:39Z ยท ํ์์ci-presencerc=0 CI_GREEN). โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(REPORT.mdยทSTATE.md) โ ํ์ #55 ์ฐฉ์ง๋ถ๊ณผ ๊ฒน์ณค๊ณ ์ฝ๋ ํ์ผ ์ถฉ๋ 0. ํด์๋ ์ ๊ฑด ๋ณด์กดยทํฉ์งํฉยท์๊ฐ์: ์ด ํ์ฐจ(38c02a2d05:22)๊ฐ main ์ชฝ ์ต์ ํญ๋ชฉ(30a31bda04:04)๋ณด๋ค ๋ค๋ผ ์์ ์น์๋ค. โ ์ค ์์ค 0(์๋ฐฉํฅ) ยท ํฉ์งํฉ ๋ฐ ์ ๊ท์ค 0 ยท โ ๊ณ์ฝ 12 ์ฐฉ์ง diff numstat ํด์ ์ ํ ๋์ผ(6ํ์ผ ยท ํด์๋ฉด ๋ฐ ๋ณ๊ฒฝ 0). โ ๋ฐฐํฌ 0 โ ์ด ์ ์ฅ์์ ๋ฐฐํฌ ์ํฌํ๋ก๊ฐ ์๋ค(CI 2์ข + ์ค์ผ์ค 2์ข + PR ๋๊ธ 1์ข ) ยท ์์ PR 0๊ฑด ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด. โ โ ๊ฒ์ดํธโข 2ํ์ฐจ โ ํ์ #59 ๊ฐ ๊ทธ ์ฌ์ด ์ฐฉ์ง(66bc49e8)ํด base ๋ฅผ ๋ค์ ๋น๊ฒผ๋ค. ์ถฉ๋์ ๋ ์์ฅ 2ํ์ผ๋ฟ(์ฝ๋ ์ถฉ๋ 0). โ ์ด๋ฒ์ ์๊ฐ์์ด ยซ๋ค์งํ๋คยป โ main ์ชฝ ํญ๋ชฉ(3b04712e06:52)์ด ์ด ํ์ฐจ(38c02a2d05:22)๋ณด๋ค ๋ค๋ผ ์์ ์น์๋ค. โ ๋ ๋ฒ์ base ๋น๊น์ ๊ฑฐ์ณ๋ ์ด PR ์ ๊ธฐ์ฌ numstat ์ ๋ถ๋ณ(94/0๊ฒ์ฆ ์คํฌ๋ฆฝํธ ยท14/2ํ ํ ์คํธ ยท worklog 2๊ฑด). - [rustjava-adopt-cp-tag-passthrough-detectable-p1] โ
โ
ํ์ โ
ClassFileError์ ยซ์์ธยป์ ์ค์ ๊ฐ์ ์๋ค. ๋จ ์ ์์ ์ด๋ฆยท์ด์ ยท๋ฒ์๊ฐ ยซ์ ๋คยป ํ๋ ธ๋ค. ์ฑํ ์ ์2026-09-16-cp-tag-passthrough-detectable#p1(worklog jsonadoptedProposals๊ธฐ๋ก). ๋ฑ๋ง์ดDecide๋ค โ โ ์ฝ๋ ๋ณ๊ฒฝ์ ยซํ๋ฆฐ ์ฃผ์ ํ ๊ณณยป ์ ์ ๋ฟ ยท ๊ตฌํ์ ๋ฒ์๋ฅผ ๋ฐ๋ก์ก์ ํ์์ผ๋ก ๋๊ฒผ๋ค. โ โ โด์ญ์ฌ๊ฐ ๊ฑฐ์ง์ด๋ค:822504b๋error.rs๋ฅผ ยซ์๋ฅด์งยป ์๊ณ ยซ๋ง๋ค์๋คยป(new fileยท ์ง๊ธ๊ณผ ๋์ผํ 2๋ณํ)์ด๊ณ , ๊ทธ ์ด์ ClassInfo::parse๋Option<Self>(์คํจ์ ์ ๋ณด 0 ยท.unwrap()ํฌ์ฑ์ด)์๋ค โ โ ๊ทธ ์ปค๋ฐ์ ยซ๊ฐ์ ยป์ด์๋ค. โ โ **ใcarry a cause againใยทใrestoringใ์ ์ฑ๋ฆฝํ์ง ์๋๋ค โ ์ด ๋ฆฌ๋์ง์ ์์ธ์ด ์ค๋ ธ๋ ์๊ธฐ๋ ยซ์๋คยป.** โ โ โตใupstream ์ด ํด์ผ ํ๋คใ๋ ๊ฑฐ์ง:upstream/main๊ธฐ์ค 5์ปค๋ฐ ๋ค ยท ๊ทธ์ค ์ด ํ์ผ๋ค์ ๋ง์ง๋ ๊ฒ 0๊ฑด ยท upstream ์error.rs์ ์ด์ 1๊ฑด(์์ฑ) ๋ฟ(์ด crate ์์ ๊ฐ์ฅ ์์ ๋ ํ์ผ) ยท โ ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด crate ์์ ํฌ๊ฒ ๊ฐ๋ ธ๋ค (constant_pool.rs+211/โ6 ยทvalidation.rs+137/โ0 ยทattribute.rs+129/โ3 ยทopcode.rs+83/โ7). โปAGENTS.mdread-only ๋ upstream ์ผ๋ก ยซ๋ณด๋ด๋ ๊ฒยป ๊ธ์ง์ด์ง ๋ก์ปฌ ๋ณ๊ฒฝ ๊ธ์ง๊ฐ ์๋๋ค. โ โ โถ๋ฒ์๋ ํ๋ ธ๋ค โtarget: classfile/src/error.rs๋ 1ํ์ผ์ธ๋ฐ ํํํ๋ ยซ3์ธตยป์ด๋ค:InvalidFormat(์์ฐ 9๊ณณ) โClassDefinitionError::InvalidClassFile(From ์ด ์์ธ์ ๋ฒ๋ฆฐ๋ค) โ โ **"Invalid class file"ํ๋์ฝ๋ฉ 2๊ณณ**(src/runtime.rs:189ยทtest-utils/src/lib.rs:334). โ โ **error.rs๋ง ๊ณ ์น๋ฉด ยซ๊ด์ธก ๋ณํ 0ยป** โ ์๋ฌด๋ ์์ธ์ ๋ฃ์ง ์๊ณ ์๋ฌด๋ ์ฝ์ง ์๋, ์ด ์ ์ฅ์๊ฐ ๊ทํํ๋ ๊ทธ ํํ๋ค. โ โ ์ง์ง ๋น์ฉ์validate_class์ ยซ8ํญ||์ฌ์ฌยป์ ์ชผ๊ฐ๋ ๊ฒ์ด๋ค(์์ธ์ด ๊ฐ๋ฆฌ๋ ์ ์ผํ ์๋ฆฌ) โ โ ๊ทธ๊ฒ์ ์ด ํฐ์ผ์ด ๋ช ์์ ์ผ๋ก ๊ธ์งํ ๋ฆฌํฉํฐ(๊ณ์ฝ 3)๋ผ โ ์ฌ๊ธฐ์ ๊ตฌํํ์ง ์์๋ค. โ โ โ ๊ทธ๋ฐ๋ฐ ์ค๊ณ๋ ยซํ enum ๊ฑด๋ยป ์ด๋ฏธ ์ฆ๋ช ๋ผ ์๋ค โClassDefinitionError::UnsupportedFeature(&'static str)๊ฐ 5๊ณณ์์ ์ฐ์ด๋ฉฐ"ldc of a method handle"๊ฐ์ ๋ฌธ์ฅ์ ๋ธ๋ค โ โ ์ ๋ฐ๋ช ์ด ์๋๋ผ ยซ์ผ๊ด์ฑ ํ๋ณตยป์ด๊ณ ์ด๊ฒ์ด ใํ ๊ฐ ์๋คใ์ ๊ทผ๊ฑฐ๋ค. โ ์ด๋์ ๊ณผ์ฅํ์ง ์๋๋ค: kind-only ๋จ์ธ 8๊ณณ์ด ์์ธ์ ์ด๋ฆ ๋ถ๋ฅผ ์ ์๊ณ ์ฐธ์กฐ JVM ๊ฒฉ์ฐจ๊ฐ ์ค๋ค. โ ๊ทธ๋ฌ๋ ์ ์์ ใํฝ์ค์ฒ๋ณด๋ค ๊ฐํ ์๋ฌผ์ ใ๋ ยซ์ ๋ฐ๋งยป ์ฐธ โ ์์ธ์ ยซ์ด๋ ๊ฒ์ฌ๊ฐ ์ธ๋ ธ๋ยป, ํฝ์ค์ฒ๋ ยซ๊ทธ ๊ฒ์ฌ๊ฐ ๊ด์ธก ๊ฐ๋ฅํ๊ฐยป๋ฅผ ์ ๊ทผ๋ค. โ ์ฆ๊ฑฐ: ์ง์ -fix๊ฐ ์ฐพ์ ๊ตฌ๋ฉ(์ ์ 4์ถ ์ค 3์ถ ๋ฏธ๊ด์ธก)์ ๋งํฌ ์ถ์ด๋ผ โ ์์ธ์ ์ค์์ด๋ ์ ์กํ๋ค โ ๋์ฒด๊ฐ ์๋๋ผ ยซ๋ํ๊ธฐยป๋ค. โ ์ง๊ธ ๊ณ ์น ๊ฒ:tests/test_class_format.rs๋จธ๋ฆฌ ์ฃผ์ โ โ ์ ์์ด ๊ทผ๊ฑฐ๋ก ์ธ์ฉํ ๋ฐ๋ก ๊ทธ ๋ฌธ์ฅ์ด ๊ฑฐ์ง์ด์๋ค (ใcut 822504bใยทใRestoring it needs upstream variantsใ) โ ๊ทธ ์๋ฆฌ์์ ์ ์ ํ๋ค. โ ์ฐฉ์งํ ํธ๋ฆฌ๊ฐ ๊ฑฐ์ง์ ๋๋ฅด๋ฉด ๋ค์ ์ฌ๋์ด ๊ฐ์ ์ ์ ๋ก ๊ฐ์ ์ ์์ ๋ค์ ๋ง๋ ๋ค. โ ๋ ๋ฒ์งธ ์ธ๊ธ(ใClassFileError๊ฐ ํํํํ๋คใ)์ ์ฐธ์ด๋ผ ๊ฑด๋๋ฆฌ์ง ์์๋ค(๊ณผ์ ํธ์ง 0). โcargo test --all572 / 0 failed / 1 ignored(์ฃผ์๋ง ๋ฐ๊ฟ ๋ถ๋ณ) ยท DoD 7์ค ์ ๊ฑด rc=0. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #56 ยท--merge(๋ฑ์ฌ repo ยทmerge_strategy: merge์ ์ธ๋ถ). ๊ฒ์ดํธโก approve ยท ํ53ca3409๋ถ์ด๋(์ฐฉ์ ์ค์ธก 2026-09-17T00:42:56Z ยท ํ์์ci-presencerc=0 CI_GREEN). โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(REPORT.mdยทSTATE.md) โ ํ์ #55 ์ฐฉ์ง๋ถ๊ณผ ๊ฒน์ณค๊ณ ์ฝ๋ ํ์ผ ์ถฉ๋ 0. โ โ **tests/test_class_format.rs๋ ยซ์๋ ๋ณํฉยป๋๊ณ ๊ทธ๊ฒ์ ๋ฏฟ์ง ์๊ณ ์๋ค** โ ์์ธก ๋ธํ๊ฐ ๋ ๋ค ์ด์ ์๋ค (์ด์ชฝ 10/3 ยท main ์ธก 32/0 ยท ์ถ๊ฐยท์ญ์ ์ค ๋ค์ค์งํฉ ์ ๊ฑด ์ผ์น ยท ์ค์ํธ 14/14 green). ์์ฅ ํด์๋ ์ ๊ฑด ๋ณด์กดยทํฉ์งํฉยท์๊ฐ์: ์ด ํ์ฐจ(53ca340904:31)๊ฐ main ์ชฝ ์ต์ ํญ๋ชฉ(30a31bda04:04)๋ณด๋ค ๋ค๋ผ ์์ ์น์๋ค. โ ์ค ์์ค 0(์๋ฐฉํฅ) ยท ํฉ์งํฉ ๋ฐ ์ ๊ท์ค 0 ยท ๊ณ์ฝ 12 ์ฐฉ์ง diff numstat ํด์ ์ ํ ๋์ผ. โ ๋ฐฐํฌ 0(์ด ์ ์ฅ์์ ๋ฐฐํฌ ์ํฌํ๋ก ์์) ยท ์์ PR 0๊ฑด ยท ์ฃผ๊ธฐ ์๋ ์ปค๋ฐ 0๊ฑด. โ โ ๊ฒ์ดํธโข 2ํ์ฐจ โ ํ์ #59(66bc49e8)ยท#58(6e016a27)์ด ๊ทธ ์ฌ์ด ์ฐฉ์งํด base ๋ฅผ ๋ค์ ๋น๊ฒผ๋ค. ์ถฉ๋์ ๋ ์์ฅ 2ํ์ผ๋ฟ(์ฝ๋ ์ถฉ๋ 0). โ ์๊ฐ์์ด ์ด ํ์ฐจ๋ฅผ ยซ๋งจ ์๋ยป๋ก ๋ณด๋ธ๋ค(06:52 ยท 05:22 > 04:31) โ ใ๋ด ๊ฒ์ด ์ใ๊ฐ ์๋๋ผ ยซ์ฐ ์๊ฐยป์ด ๊ท์น์ด๋ค. โtests/test_class_format.rs๋ ๋ ๋ฒ ๋ค ์๋ ๋ณํฉ๋๊ณ ๋ ๋ฒ ๋ค ์๋ฐฉํฅ์ผ๋ก ์๋ค(์ด์ชฝ 10/3 ๋ถ๋ณ ยท main ๋ธํ ๋๋ฝ 0). - [rustjava-adopt-cp-tag-passthrough-detectable-p0-fix] โ
โ
์ ์ 4์ถ์ ยซ๊ฐ๊ฐยป ๊ด์ธก ๊ฐ๋ฅํ๊ฒ ํ๋ค โ ๊ฐ์ฌ์ ใ๊ณ ์น ๊ฒ์ด ์๋คใ๋ฅผ ์ ์ ํ๋ค.
๊ฒ์ดํธโก request-changes ์น๊ณ(PR #55 ยท ํ
ab13a3c7). โ ์ ํ ์ฝ๋ ๋ฌด์ ์ด โ ์๋ ๊ฒ์ ํฝ์ค์ฒ๋ค. โ โ ๋ฌด์์ด ํ๋ ธ๋: ์ง์ ๊ฐ์ฌ์ M7(ใ์ ์ 4์ถ ๊ฒ์ฌ ์ ๊ฑฐใ)์ ๋ค ๋น๊ต๋ฅผ โ ํ๊บผ๋ฒ์ ์ง์ด๋ค โ ๊ทธ red ๊ฐ ์ฆ๋ช ํ๋ ๊ฒ์ โ **ใ4์ถ ์ค ยซ์ ์ด๋ ํ๋ยป๊ฐ ๊ด์ธก๋๋คใ๋ฟ์ธ๋ฐ, ํ์ ์ ๊ทธ๊ฒ์ ใ์ด ๊ฐ์ง๋ ๋ฎ์ฌ ์๋คใ๋ก ์ฝ์๋ค. ๊ฒ์์๊ฐ ์ถ์ ํ๋์ฉ ์ง์ ์ฌ๋ โ kindยทnameยทdescriptor ๋ ยซ์ ์ค์ํธ green ์ธ ์ฑ๋กยป ์ด์๋จ์๋ค(class ์ถ๋ง ์ฃฝ์๋ค). โ ๊ทผ์ธ์ ํฝ์ค์ฒ์ ์๋ค โ ๊ทผ์ ์คํจ๊ฐNotStringConcatFactory(class ์ถ) ํ๋๋ฟ์ด๋ผ ๋๋จธ์ง ์ธ ๋น๊ต๋ ์ด๋ค ํ์ผ๋ ๊ด์ธก ๋ชป ํ๋ค. โ ์์ฑ๊ธฐ docstring ์ด ์ด๋ฏธ ๊ทธ ๋ฌธ์ฅ์ ์ ์ด ๋๋๋ฐ(ใWithout such a fixture the identity check is not observableใ) ํ ์ถ์๋ง ์ดํ๋ผ ์์๊ณ , ๊ฐ์ฌ๋ ๊ทธ๊ฒ์ ใ์ ํญํ๋คใ๋ก ๋ฎ์๋ค. โ โ ๊ฐ์ฌ ๋ฐฉ๋ฒ๋ก ์ ยซ์ญยป์ ๋จ๊ฒผ๋ค โ ์ด๊ฒ์ด ์ด ํ์ฐจ์ ์ง์ง ์ฐ์ถ๋ฌผ์ด๋ค**: ์ ํ์ ์ ใ์ฃฝ์ง ์์๋ค โ ํ ์คํธ๊ฐ ์ฝํ๋คใ์ ๋ํด โ โ **ใ์ฃฝ์๋ค โ ๊ทธ ๊ฐ์ง๊ฐ ยซ์ ๋ถยป ๋ฎ์๋คใ.** โ ๋ค์ถ ์ ์ด(A || B || C || D)๋ฅผ ํต์งธ๋ก ์ง์ฐ๋ ยซ๊ตต์ยป ๊ฐ์ ์ ยซ๊ฐ์ฅ ์ ๋ฎ์ธ ์ถยป์ด red ๋ฅผ ๋ด๊ณ ๋๋จธ์ง ์ถ์ ๋ํด์ ์๋ฌด ๋ง๋ ํ์ง ์๋๋ค โ โ ์ถ์ด ์ฌ๋ฟ์ธ ๊ฒ์ฌ๋ ยซ์ถ ํ๋์ฉยป ์ฐ๋ฌ๋ผ. โ ๋ง๋ ๊ฒ:make_indy_fixtures.py์bootstrap_kind(๊ธฐ๋ณธ 6 = ์ข ์ ํ๋์ฝ๋ฉ๊ฐ โ ๊ธฐ์กด ์ฐ์ถ๋ฌผ ๋ถ๋ณ) + ํฝ์ค์ฒ 3๊ฐ โNotMakeConcatWithConstants(name ยทmakeConcat์ ์ค์ฌํ๋ StringConcatFactory ๋ถํธ์คํธ๋ฉ) ยทNotFactoryDescriptor(descriptor ยท ๋์ varargs ๋ง ์ ๊ฑฐ โ ์ฌ์ ํ ์ ๋ฒํ ์์ ์) ยทNotInvokeStaticFactory(kind 7 = REF_invokeSpecial โ JVMS 4.4.8 ์ Methodref ์ ์ ๋ฒ). โ ์ ๋ค ยซ์ ๋ฒํ ํด๋์ค ํ์ผยป์ด๋ผ ์ ์ ๊ฒ์ฌ๊น์ง ๋๋ฌํ๋ค(์ค์ธก: ๋ท ๋คUnsupportedOperationException: invokedynamicยทClassFormatError์๋) โ ์๋ฅ๊ฐ ๋จผ์ ๊ฑฐ๋ถํ๋ฉด ๊ทธ ํฝ์ค์ฒ๋ ยซ๋ค๋ฅธ ์ด์ ยป๋ก ํต๊ณผํ๋ ๊ฒ์ด๊ณ ๊ทธ๊ฒ์ด ์ด ๋ฆฌ๋์ง๊ฐ ๊ณ ์น๋ ค๋ ํํ๋ค. โ ์ /ํ: kindยทnameยทdescriptor ๋จ๋ ์ญ์ SURVIVED(--all570/0/1 green) โ โ KILLED(์ ๊ท ํ ์คํธ) ยท class ์ถ ์ฌ์ ํ KILLED(์ด์ 2๊ฐ๋ฅผ ์ฃฝ์ธ๋ค โ ์ ์ปค๋ฒ๋ฆฌ์ง ์ ์ง) ยท ํ๊ท ํ๋ณธ 2์ข (BSM off-by-one ยทLdc2Warm ์ ๊ฑฐ) ์ฌ์ ํ KILLED. โtest_class_format11 โ 12 ยทcargo test --all --no-fail-fast570 โ 571 / 0 failed / 1 ignored ยท ํฝ์ค์ฒ ์ฌ์์ฑ ๋ฉฑ๋ฑ ยท DoD 7์ค rc=0. โ โ ํ๋ค์ค๊ฐ ์ค์ ๋ก ์ํนํธ๋ฆฌ๋ฅผ ์ค์ผ์์ผฐ๋ค โ ๋ฌ๋ ์๊ฐ ์ํ SIGKILL ๋กfinally๋ณต์์ด ์ ๋์ name ์ถ์ดfalse๋ก ๋จ์๊ณ , ๊ทธ ์ํ์ ์ธก์ 2๊ฑด์ด ์ค์ผ๋๋ค. โ ๊ณ์ฝ โก ์ ใ์นํ 1๊ฑด ๋จ์ธใ์ด ๋ค์ ์ถ์์ ยซ์ต์ปค 0๊ฑดยป์ผ๋ก ์ฆ์ ์ก์๋ค โ ๋ณต์ ํ 4์ถ ์ ๋ถ ์ฌ์ธก. โ โ ์ด ์ฌ๊ฑด์ด ใ์์ค๋ฅผ ์นํํ๋ ํ๋ค์ค๋ฅผ ์ปค๋ฐํ์ง ์๋๋คใ๋ ์ง์ ํ์ฐจ ๊ฒฐ์ ์ ยซ์ค์ฆยป์ด๋ค(์ฃฝ๋ ์๊ฐ ํธ๋ฆฌ๋ฅผ ์ค์ผ์ํจ๋ค). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #55 ยท--merge(๋ฑ์ฌ repo). ๊ฒ์ดํธโก approve(โ ์ด PR ์ ๊ฐ์ฌ 1ํ์ฐจ๊ฐ request-changes ๋ฅผ ๋ฐ๊ณ ์ด-fixํ์ฐจ๊ฐ ์น๊ณํด ํต๊ณผํ ๊ฒ์ด๋ค) ยท ํ30a31bda๋ถ์ด๋(์ฐฉ์ ์ค์ธก 20:30:58Z ยท ์๋ฐ ํ ์ฌ์กฐํ). โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(์ธก์ 20:31:08Z) โ ํ์ #53ยท#54 ์ฐฉ์ง๋ถ๊ณผ ๊ฒน์ณค๊ณtests/test_class_format.rs๋ ์๋ ๋ณํฉ๋๋ค. ํด์๋ ์ ๊ฑด ๋ณด์กดยทํฉ์งํฉยท์๊ฐ์: ์ด์ชฝ ๋ ํญ๋ชฉ(30a31bd04:04 ยทab13a3c02:28)์ด main ์ชฝ ๋(01:49 ยท 01:16)๋ณด๋ค ๋ค๋ผ ์์ ์น์๋ค. โ ์ค ์์ค 0 ยท ๋ถํยท์กฐ์ 0. โ โ ๊ณ์ฝ 12 ์์ ยซours ์ถ ๋ถ์ผ์นยป๊ฐ ๋ด๊ณ ๋ญ๊ฐ์ง ์์๋ค โ ์ค์ฒด๋ โ diff ์ ๋ ฌ artifact(๊ฐ์ 4์ค);ยท}ยท}ยท๋น ์ค์ด ๋ค๋ฅธ hunk ์ ๊ท์)์๊ณ , โ ์ ๋ ฌ ํ ๋ค์ค์งํฉ์ด ยซ์์ ํ ๋์ผยปํจ์ ๋ณด์ฌ ์์ธก ๋ธํ๊ฐ ๋ ๋ค ์ด์ ์์์ ํ์ธํ๋ค. โ โ ใhunk ๋ฌธ์์ด์ด ๋ค๋ฅด๋คใ๋ฅผ ๊ณง๋ฐ๋ก ใ๋ธํ๊ฐ ๋น ์ก๋คใ๋ก ์ฝ์ง ๋ง๋ผ โ ์ด ์ ์ฅ์์์ ๋ ๋ฒ์งธ๋ก ๋ง๋ ํํ๋ค. - [rustjava-adopt-cp-tag-passthrough-detectable-p0] โ
โ
๋ณ์ด ์ ํญ ๊ฐ์ฌ โ โ
๊ทธ ใ๊ณ ์น ๊ฒ์ด ์๋คใ๋ ยซํ ์๋ฆฌ์์ยป ๊ฑฐ์ง์ด์๋ค(์
-fix๊ฐ ์ ์ ). ์ฑํ ์ ์2026-09-16-cp-tag-passthrough-detectable#p0(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ฝ๋ ๋ณ๊ฒฝ ยซ0ยป. โ โ ๊ฒฐ๊ณผ:tests/test_class_format.rs์ ๋จ์ธ 11๊ฐ ยซ์ ๊ฑดยป์ด ์๊ธฐ๊ฐ ์ด๋ฆ ๋ถ์ธ ๊ฐ์ง์ ๊ฐ์ ์ ์ฃฝ๋๋ค (๊ฐ์ 10์ข ยท ํ๋ worklog). โ ใํต๊ณผํ์ง๋ง ์๋ฌด๊ฒ๋ ์ฌ์ง ์๋ ๋จ์ธใ์ โ ๋ ์๋ค. โ โ ์ค๊ฐ ํจ์ ์ ๋จ๊ธด๋ค โ ์ด ํ์ฐจ์์ ๊ฐ์ฅ ๊ฐ์ง ๊ธฐ๋ก์ด๋ค: 1์ฐจ ๊ฐ์ ๋ชฉ๋ก(M1~M7)์์ 3๊ฐ๊ฐ ์ด์๋จ์๊ณ , ๊ทธ๋ ใ์ฝํ ๋จ์ธ 3๊ฑด ๋ฐ๊ฒฌใ์ด๋ผ ์ ์์ผ๋ฉด ๊ฑฐ์ง ๋ณด๊ณ ์๋ค. ์ค์ ์์ธ์ โ ๋ด ๋ชฉ๋ก์ ๊ทธ ๊ฐ์ง๊ฐ ๋น ์ง ๊ฒ์ด์๋ค (ldc ๋ฏธ์ง์ arm ยท ํ์ค ์คํจ ๋งคํ ยท not-found ๊ฒฝ๋ก) โ M8ยทM9ยทM10 ์ ๋ํ๋ ์ ๋ถ ์ฃฝ์๋ค. โ โ **ใ์ฃฝ์ง ์์๋คใ๋ ยซํ ์คํธ๊ฐ ์ฝํ๋คยป์ ยซ๋ด๊ฐ ๊ทธ ๊ฐ์ง๋ฅผ ์ ๊ฑด๋๋ ธ๋คยป๋ฅผ ๊ตฌ๋ณํ์ง ๋ชปํ๋ค.** ๋ณ์ด ๊ฐ์ฌ๋ฅผ ํ๋ ๋ค์ ์ฌ๋์ ์ด๊ฒ๋ถํฐ ์์ฌํ๋ผ. โ โ โ ์ ์ ์ ์ ์ ๋ฐ์ฆ: ใseveral ... corrupting a referenced slot ofHello.classใ๋ ์ ์์ด ์ค๋ฆฐ ์ปค๋ฐ (eb8b4eb= PR #49) ์์ ์ ์ด๋ฏธ ๊ฑฐ์ง์ด๋ค โ ๊ทธ ํ์ผ์Hello.classํ์ 3๊ณณ์ ์ ๋จยท๋งค์ง ๋ฐ์ดํธยท๋ฌด์์ ๋ค๋ฌ๋ฆฌ์ด๊ณ โ ์ฐธ์กฐ ์ฌ๋กฏ์ ๋ฎ๋ ๊ฒ์ 0์ด๋ค(bytes[6..8]๋ฒ์ ๊ฐ์ ์ ์ค๋ฌผ ํฝ์ค์ฒ์ ์ ์ฉ๋๋ค). โ ใseveralใ์ โ ๊ทธ ํ์ฐจ๊ฐ ๋ฐฉ๊ธ ๊ณ ์น ยซ๊ทธ ํ๋ยป์ ์ผ๋ฐํ์๋ค. โ ๊ทธ๋๋ ๊ฐ์ฌ๋ ๊ฐํ๋ค โ ใ์๋คใ๋ฅผ ยซ์ฌ์ยป ์๋ ๊ฒ๊ณผ ยซ์ถ์ธกยปํ๋ ๊ฒ์ ๋ค๋ฅด๋ค. โ ๋๊ตฌ๋ฅผ ์ผ๋ถ๋ฌ ๋จ๊ธฐ์ง ์์๋ค: ๊ฐ์ ํ๋ค์ค๋ ์ ํ ์์ค ๋ฌธ์์ด์ ๋งค์นญํด ์นํํ๋ฏ๋ก ๋ฆฌํฉํฐ ๋ค โ ์กฐ์ฉํ ๊ทธ ๊ฐ์ ์ ๊ฑด๋๋ด๋ค โ โ ํ๋ค์ค ์์ฒด๊ฐ ใํต๊ณผํ์ง๋ง ์๋ฌด๊ฒ๋ ์ฌ์ง ์๋ใ ์ฐ์ถ๋ฌผ์ด ๋๋ค(์ด ์ ์์ด ์ฌ๋ฅํ๋ ๋ฐ๋ก ๊ทธ ํํ). ๋์ ๊ฐ์ ํ๋ฅผ ๋ฌธ์๋ก ๋จ๊ฒผ๋ค. โป๋ฐ์ดํฐ๋ฅผ ์ฝ๋scripts/survey-ldc-constant-tags.py๋ฅผ ๋จ๊ธด ํ๋จ๊ณผ ๊ฐ๋ฆฌ๋ ์ด์ ๊ฐ ์ด๊ฒ์ด๋ค(๊ทธ์ชฝ์ ์์ค๊ฐ ์๋๋ผ ํด๋์ค ํ์ผ์ ์ฝ์ด ๋ก์ง ์๋๋ค). โ ๊ฒฝ๊ณ: ๋ตํ ์ง๋ฌธ์ ใ๊ฐ ํ ์คํธ๊ฐ ยซ์๊ธฐ ๊ฐ์งยป ๊ฐ์ ์ ์ฃฝ๋๊ฐใ์ด์ง ใ์ด๋ค ๊ตฌ๋ฉ๋ ์๋คใ๊ฐ ์๋๋ค ยท ํฝ์ค์ฒ์ ์ ์ผ ๊ฒฐํจ์ฑ์ ๋ณ๋ ์ถ์ด๋ผ ์ ๋ดค๋ค(ํ์ ์ถ์ฒ) ยท ์งํ ์ค PR #53ยท#54 ์ ์ ํ ์คํธ 2๊ฐ๋ ๋ฒ์ ๋ฐ์ด๋ค (๊ฐ ํ์ฐจ๊ฐ ์๊ธฐ ๋ผ์ด๋์์ ์๋ฐฉํฅ ๊ฐ์ ๋์กฐ๋ฅผ ์ด๋ฏธ ๋ถ์๋ค). โcargo test --all570 / 0 failed / 1 ignored(27 ์ค์ํธ ์ ๊ฑด ํฉ์ฐ) ยท ๊ฐ์ 10์ข ์ ์ฉยท๋ณต์ ํ ์ํนํธ๋ฆฌ ์ฒญ๊ฒฐ ยท DoD 7์ค ์ ๊ฑด rc=0. - [rustjava-adopt-bound-bootstrap-method-attr-index-p1] โ
โ
๋ถํธ์คํธ๋ฉ ยซ์ ์ ์ธ์ยป ์ธ๋ฑ์ค๋ฅผ ๊ฒฝ๊ณ ๊ฒ์ฌํ๋ค โ ใ๊ฐ์ง๋๋ ํ์ ๋์ง ์๋ใ ์๋ฆฌ๋ฅผ ๋ซ์๋ค.
์ฑํ ์ ์
2026-09-16-bound-bootstrap-method-attr-index#p1(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ /ํ:UnsupportedOperationExceptionโ โClassFormatError. โ ์ฐธ์กฐ JVM(OpenJDK 26.0.1) โClassFormatError: argument_index 65535 has bad constant type. โ โ ์ ์์ ๊ธ์๋ ใํด์์ผ๋ก ํ๋ฅด์ง ๋ง๋ผใ์๋ค โattribute.rs๊ฐ ๊ธธ๊ฒ ์ ์ด ๋ ๊ทธ ํํด(๋๋ค ๋ณด์ ํด๋์ค๊ฐ ยซ๋ฏธ์ง์ยป โ ยซํ์ยป์ผ๋ก ๋๋์๊ฐ๋ ๊ฒ)๋ฅผ ๋ง๋ค์ง ์๋ ๊ฒ. ์งํจ ๋ฐฉ๋ฒ ๋: โด์ ์ด๊ฐcontains_keyํ๋๋ผ โ ํญ๋ชฉ์ ์ฝ์ง ์๋๋ค(ํ์ด๋ก๋๋ ์ข ๋ฅ๋ ์ ๋ณธ๋ค) โตโ ๊ทธ ์ฐจ์ด๋ฅผ ์ ์ด doc ์ ์ ์๋ค โ ์ ์์ด ใa future reader may not see the differenceใ๋ผ๊ณ ๊ฒฝ๊ณ ํ ๊ทธ ๋ ์๋ฅผ ์ํ ๊ฒ์ด๋ค. โ โ ๊ทธ๋ฆฌ๊ณ ยซ์ง์ผฐ๋คยป๋ฅผ ์ฃผ์ฅํ์ง ์๊ณ ์๋ค: BSM ์ ์ ์ธ์๋ฅผ ์ค์ ๋ก ๊ฐ์ง ํด๋์ค๋ค โLambdaยทConstantKindsโ โ ์ฌ์ ํUnsupportedOperationException: invokedynamic(๋ถ๋ณ) ยทStringConcatโ โ ์ฌ์ ํ ์คํ๋๋ค(a0ยท PR #48 ๋งํฌ ๊ฒฝ๋ก ์ ์). โ ํํด๋ ์ผ์ด๋์ง ์์๋ค. โ โ โ ์ค์ธก์ด ์ฒ๋ฐฉ์ ๋ฐ๊ฟจ๋ค โarguments๋ฅผ ์ฝ๋ ์ ํ ์ฝ๋๋jvm-bytecode/src/string_concat.rs:92ํ ๊ณณ๋ฟ์ด๊ณ , ๊ฑฐ๊ธฐ์๋ ์๋ชป๋ ์ธ๋ฑ์ค๋ฅผ โ **ยซ์กฐ์ฉํ ๋งํฌ ํฌ๊ธฐยป๋ก ์ฒ๋ฆฌํ๋ค(string_constant(...)?) โ โ ๊ฐ์ง๋ ๋๋๋ฐ ยซํ์ ยป๋์ง ์๋๋ค.** ๊ทธ๋์ ์ฒ๋ฐฉ์ด ใ๊ทธ๊ณณ ์์ ใ์ด ์๋๋ผ โ **ใํ์ค ์์ ๊ฑฐ๋ถใ๋ค(๊ทธ๊ณณ์ ๊ณ ์น๋ฉด ๊ทธ ์ฝ์ฌ์ดํธ ํ๋๋ง ๋ฌ๋ผ์ง๊ณ ํ์ผ์ ๊ณ์ ์ฐ๋ค). โ ์ ์์ ยซ์ ๋ฐยป๋ง ์๊ตฌํ๊ณ ๊ทธ ์ ๋ฐ๋ง ํ๋ค**: JVMS 4.7.23 ์ โด์ ํจ ์ธ๋ฑ์ค โตloadable constant ๋์ ์๊ตฌํ๋ค. โต๋ ยซ์ข ๋ฅยป ๊ฒ์ฌ๋ผ ๋ค๋ฅธ ๋ฌธ์ฅ์ด๊ณ ๋ํ๋ฉด ๋ค๋ฅธ ํฐ์ผ์ด๋ค โ ์ธ์๊ฐUtf8๋ฅผ ๊ฐ๋ฆฌํค๋ฉด ์ฌ์ ํ ํต๊ณผํ๋ค(์ ์ด doc ์ ๋ช ์ ยท ํ์ ์ถ์ฒ). โ ์ฐธ์กฐ JVM ์ ๋ฌธ๋ฉด(bad constant type)์ด ์ ํํ ๊ทธ โต์ ์ธ์ด๋ผ, โ ์ฐ๋ฆฌ๊ฐ ํ์ง ์์ ์ ๋ฐ์ ์ค์ค๋ก ๊ฐ๋ฆฌํจ๋ค. โ ํฝ์ค์ฒ:LdcDynamicBSMArgPastEnd.classโ ์์ฑ๊ธฐdynamic()์static_arguments=๋ฅผ ๋ํ๋ค(๊ธฐ์กดattr_index=์ ๊ฐ์ ๋ชจ์). โ ์ธ๋ฑ์ค๋ฅผ0xFFFF๋ก ๊ณ ๋ฅธ ๊ฒ์ โ **ยซ๋ถ์ฌยป๋ก๋ง ์คํจํ๊ฒ** ํ๊ธฐ ์ํด์๋ค โ ํ ยซ์ยป์ ์ข ๋ฅ ํ๋ฆฐ ํญ๋ชฉ์ ๊ฐ๋ฆฌํค๋ฉด โต์ถ๊ณผ ์์ฌ ํ ์คํธ๊ฐ ยซ์ด๋ฆ๊ณผ ๋ค๋ฅธ ์ด์ ยป๋ก ํต๊ณผํ๋ค. ๊ตฌ์กฐ ์ธก์ : ์ธ์[65535]ยท ํ ์ ํจ 1..19 ยท ์ฌ์์ฑ ๋ฉฑ๋ฑ(๊ธฐ์กด 11 ์ ๊ฑด ๋์ผ). โ ๊ฐ์ ์๋ฐฉํฅ: ํธ์ถ๋ถ ์ ๊ฑฐ red ยท ์ ์ด ๋ณธ๋ฌธtrue(์์ ํต๊ณผ) red ยท ์ ์ green. โcargo test --all571 / 0 failed / 1 ignored(27 ์ค์ํธ ์ ๊ฑด ํฉ์ฐ) ยท DoD 7์ค ์ ๊ฑด rc=0. โ ์๋ ๊ฒ โ ์คํ ์ฌ์ง๊ฐ ยซํ ์๋ฆฌยป ์๋ค: long/double ์ ์ฌ๋กฏ์ ๋ ๋จน๊ณ ๋์งธ ์ฌ๋กฏ์ ์ด ๋งต์ ์์ด ๊ทธ๊ฒ์ ๊ฐ๋ฆฌํค๋ ์ธ์๊ฐ ๊ฑฐ๋ถ๋๋ค. โ ๋งต์ ์ฐ์ฐ์ด ์๋๋ผ ์๋๋ ์ฝ๊ธฐ๋ค(๊ทธ ์ฌ๋กฏ์์๋ ์ด๋ค ์์๋ ์ ์ฌํ ์ ์๋ค โ JVMS 4.4.5) ยท ์ ์ด doc ์ ์ ์๋ค. โ ๋ฒ์:bootstrap_method_indices_resolve๋ฌด์ ์ด(๊ทธ๊ฒ์bootstrap_method_attr_indexํ ๋ฌธ์ฅ์ด๋ค) ยทattribute.rs๋ฌด์ ์ด(arguments๋ ์ฌ์ ํ ์์ ์ธ๋ฑ์ค โ ์ ์์ด ์งํค๋ผ๊ณ ํ ๊ทธ ์ค๊ณ) ยท ํ์ #p0๋ฌด์ ์ด. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #54 ยท--merge(๋ฑ์ฌ repo). ๊ฒ์ดํธโก 1ํ์ฐจ approve ยท ํ4d2820f3๋ถ์ด๋(18:04:52Z ยท ์๋ฐ ํ ์ฌ์กฐํ). โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(์ธก์ 18:05:01Z) โ ํ์ #53 ์ฐฉ์ง๋ถ๊ณผ ๊ฒน์ณค๊ณ , ํด์๋ ์ ๊ฑด ๋ณด์กดยทํฉ์งํฉยท์๊ฐ์ (4d2820f01:49:47 >f2c831701:16:29) ยท ์ค ์์ค 0 ยท ๋ถํยท์กฐ์ 0. โ โ ๊ณต์ ยซ์ฝ๋ยป 3ํ์ผ(validation.rsยทmake_ldc_fixtures.pyยทtest_class_format.rs)์ ยซ์ ๋ถ ์๋ ๋ณํฉยป๋๋ค โ โ ๊ทธ ํ์ฐจ๊ฐ ์ฐฉ์ ๋ ์ฝ์ ์์น๋ฅผ ์ผ๋ถ๋ฌ ๊ฐ๋ผ ๋ ๊ฒ(์ ์ด ํธ์ถ์bootstrap_method_indices_resolveยซ์ยป์ ยท ํ ์คํธ๋ฅผ ํ์ผ ยซ์ยป์ ยท ์์ฑ๊ธฐ ํญ๋ชฉ์ ๋ค๋ฅธ ์นธ์)์ด ์ฌ๊ธฐ์ ๊ฐ์ ํ๋ค. ๊ณ์ฝ 12 ๋ก ์๋ฐฉํฅ hunk ๋์ผ์ฑ ํ์ธ(3ํ์ผ ร 2์ถ ์ ๊ฑด ์ผ์น). โ โ ๊ฒ์ดํธโข ๊ณ์ฝ 2-cโ(์ฝ๋ ์ถฉ๋ = blocked)์ ๊ฑธ๋ฆฌ์ง ์์๋ค. โ ๋ณํฉ ๊ฒฐ๊ณผ๋ฅผ ยซ์๋ฏธยป๋ก๋ ํ์ธํ๋ค:validate_class์ฌ์ฌ์ ๋ ํ์ฐจ์ ์ ์ด๊ฐ ๋ ๋ค ์๋ค (โฆstatic_arguments_are_in_the_pool+at_most_one_bootstrap_methods_attribute) ยทcargo test --all572 (= main 570 +#p01 + ์ด ํ์ฐจ 1) โ ๋ ํ์ฐจ์ ํ ์คํธ๊ฐ ๋ชจ๋ ์ด์ ์๋ค. - [rustjava-adopt-bound-bootstrap-method-attr-index-p0] โ
โ
**
BootstrapMethods๋ฅผ ยซ๋ ๋ฒยป ์ ์ธํ ํด๋์ค๋ฅผ ๊ฑฐ๋ถํ๋ค โ ์์ ์ ํ์ ์์ด๋ค.** ์ฑํ ์ ์2026-09-16-bound-bootstrap-method-attr-index#p0(์ด์์ tower ํจ๋ ์ฑํ ยท worklog jsonadoptedProposals๊ธฐ๋ก). โ JVMS 4.7.23 = ์ต๋ ํ ๊ฐ. ์ข ์ ์๋find_map์ด ์ฒซ ํ๋ฅผ ์ฐ๊ณ ๋๋จธ์ง๋ฅผ ์กฐ์ฉํ ๋ฌด์ํ๋ค โ โ **bootstrap_method_attr_index๊ฐ ยซ์ด๋ ํยป์ ๋ํด ๊ฒฝ๊ณ ๊ฒ์ฌ๋๋์ง๊ฐ ์์์๊ณ ๊ทธ ์ฌ์ค์ด ์๋ฌด ๋ฐ๋ ๋๋ฌ๋์ง ์์๋ค. โ ์ /ํ**:UnsupportedOperationException(ใ์์ง ๋ชป ํ๋คใ) โ โClassFormatError(ใ์ด ํ์ผ์ด ๊นจ์ก๋คใ). โ โ ์ฐธ์กฐ JVM ์ด ๊ทผ๊ฑฐ๋ค(observable behavior ยท OpenJDK ์์ค ๋ฏธ์ฐธ์กฐ): OpenJDK 26.0.1 โClassFormatError: Multiple BootstrapMethods attributes in class fileยท โ ํ ํ๋์ง๋ฆฌ ๋์กฐ๊ตฐ์ rc=0 ๋ก๋. โ ๊ณ ์น ์๋ฆฌ ยซํ ๊ณณยป โvalidate_class์ ์ ์ดat_most_one_bootstrap_methods_attribute๋ฅผ ์ด์๋ค. โbootstrap_method_indices_resolve๋ฌด์ ์ด(๊ทธ doc ์ด ์ค์ค๋ก ใ์ธ๋ฑ์ค๊ฐ ์ค์ฌ ํญ๋ชฉ์ ๊ฐ๋ฆฌํค๋๊ฐใ๋ผ๋ ํ ๋ฌธ์ฅ์์ ์ ์ธํ๋ค โ ใํ๊ฐ ๋ช ๊ฐ์ธ๊ฐใ๋ ๋ค๋ฅธ ๋ฌธ์ฅ์ด๊ณ , ์ ์ด ๋ฃ์ผ๋ฉด ์ด๋ฆ๊น์ง ๋ฐ๊ฟ์ผ ํ๋ค) ยท โ ์ ๊ด์ฉ 0 (ํ๋ConstantValueยท๋ฉ์๋Code๊ฐ ์ด๋ฏธ ์ฐ๋ ๊ฐ์ ์ธ๊ธฐ ๋ชจ์ ๊ทธ๋๋ก). โ โ ํฝ์ค์ฒ๋ฅผ ยซ๊ฒฐํจ์ด ํ๋ยป๊ฐ ๋๊ฒ ์ง์๋ค โLdcDynamicDuplicateBSM.class= ๊ฐ์ ์ ํจํ ํ๋ฅผ ๋ฐ์ดํธ ๋์ผํ๊ฒ ๋ ๋ฒ. ์ด๋ ํ ํ๋ง ์์ด๋ ์ ์ ํ์ผ์ด๋ผ โ ๊ฑฐ๋ถ ์์ธ์ด ยซ๋์ด๋ผ๋ ์ฌ์คยป๋ก ๊ณ ์ ๋๋ค(๋์งธ๋ฅผ ๋ค๋ฅด๊ฒ ํ๋ฉด ๋ค๋ฅธ ๊ท์น์ด ๋จผ์ ๋ฌผ์ด ํ ์คํธ๊ฐ ยซ์ด๋ฆ๊ณผ ๋ค๋ฅธ ์ด์ ยป๋ก ํต๊ณผํ๋ค โ ์ด ์ ์ฅ์๊ฐ #49 ์์ ์ธ์ด ๊ทธ ๊ท์จ). ๊ตฌ์กฐ๋ฅผ ์ธก์ ํ๋ค: ์์ฑ['BootstrapMethods','BootstrapMethods']ยท ๋ ๋ณธ๋ฌธ ๋ฐ์ดํธ ๋์ผ True. โ โ ์ ์์ ํ ๋ฌธ์ฅ์ ยซ๊ณผํ๋คยป โ ใ์์ฑ๊ธฐ๊ฐ ๋ง๋ค ์ ์๋ ํฝ์ค์ฒ๊ฐ ํ์ํ๋คใ๋ ๊ฑฐ์ง์ด๊ณ โ 8์ค ๋ํผ๋ก ๋๋ค (์์ฑ ๋ชฉ๋ก์ด ๋น๋์ ๊ทธ๋๋ก ์ ๋ฌ๋๋ค). โ ๊ด์ธก์ ๋ง์๊ณ ยซ๋น์ฉ ์ถ์ ยป์ด ํ๋ ธ๋ค โ ๋ค์ ์ฌ๋์ด ๊ฐ์ ์ด์ ๋ก ๋ฏธ๋ฃจ์ง ์๊ฒ ์ ๋๋ค. โ ๊ฐ์ ๋์กฐ ์๋ฐฉํฅ: โดํธ์ถ๋ถ์์ ์ ์ด ์ ๊ฑฐ(= ์ ์ ์ด์ ์ํ) red โต์ ์ด ๋ณธ๋ฌธ์true(์์ ํต๊ณผ) ๋ก red ยท ์ ์ green. โ โต๊ฐ ์์ผ๋ฉด ใ๊ฒ์ฌ๊ฐ ์์๋ก ๋ญ๊ฐ์งใ ์ถ์ ๋ชป ์ก๋๋ค(โด๋ง์ผ๋ก๋ ํธ์ถ ์ญ์ ๋ง ์กํ๋ค). โcargo test --all571 / 0 failed / 1 ignored(27 ์ค์ํธ ์ ๊ฑด ํฉ์ฐ โ ๊ผฌ๋ฆฌ๋ง ์ธ์ง ์์๋ค) ยท ํฝ์ค์ฒ ์ฌ์์ฑ ๋ฉฑ๋ฑ(๊ธฐ์กด 11 ์ ๊ฑด ๋ฐ์ดํธ ๋์ผ ยท ์ ๊ท 1) ยท DoD 7์ค ์ ๊ฑด rc=0. โ ์๋ ๊ฒ: ์ง๊ธ๊น์ง ยซ๋ก๋๋๋ยป ํ์ผ ํ๋๊ฐ ๊ฑฐ๋ถ๋๋ค โ ๋ค๋ง ๊ทธ ํ์์ ์ด์ ์ด ์ ์ฅ์๊ฐ ์ฐ ๋๋ก javacยทkotlincยทscalacยทLombok ์ฐ์ถ๋ฌผ 5,479 ํด๋์ค์ 0์ด๊ณ ASM ์ผ๋ก๋ ยซ์ผ๋ถ๋ฌยป ๋ง๋ค์ด์ผ ๋์จ๋ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #53 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22โ ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํf2c83174๋ถ์ด๋(์ฐฉ์ ์ค์ธก 17:39:54Z ยท โ ์๋ฐ ํ ์ฌ์กฐํMERGEABLE/CLEAN). โ ์ถฉ๋ 0 ยท base ๋น๊น 0(merge-treerc=0) โ ์ด ๋ธ๋์น๊ฐorigin/main์์์ ๊ฐ๋ ธ๊ณ ๊ทธ ๋ค ์ฐฉ์งํ ํ์ ๊ฐ ์๋ค. โ ์ฌํ: ์ด ์ฐฉ์ง๊ฐ ํ์ #54(BSM ์ ์ ์ธ์)ยท#55(๋ณ์ด ๊ฐ์ฌ)์ base ๋ฅผ ๋ก๊ฒ ๋ง๋ ๋ค. โ **#54 ๋ ยซ์ฝ๋ ํ์ผ์ด ์๋ ๋ณํฉยป๋๋๋ก ๊ทธ ํ์ฐจ๊ฐ ์ฝ์ ์์น๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ๋ผ ๋๊ณ **(๊ทธ done ํ์ ์merge-tree์ค์ธก), #55 ๋ ์์ฅ 3ํ์ผ๋ง ๋ง์ง๋ค โ ๋ ํ์ ๋ชจ๋ ์ถฉ๋์ ์์ฅ ๊ณ์ด์ ๊ตญํ๋๋ค(๊ฒ์ดํธโข ๊ณ์ฝ 2-cโ ๋ฒ์). โ โ **[์ ์ 2026-09-17 ยทโฆ-jdk-pin-โฆ-p0-fix] ๋ฐ๋ก ์์ค์ ใ#55 ๋ ์์ฅ 3ํ์ผ๋ง ๋ง์ง๋คใ๋ ยซ๊ฑฐ์งยป์ด์๋ค.** ์ค์ธก:#55๋test-data/indy/์.class3๊ฐ๋ฅผ ์ถ๊ฐํ๊ณ ์์ฑ๊ธฐยทํ ์คํธ๋ ๋ง์ง๋ค โ โ ์์ฅ๋ง์ด ์๋๋ค. โ ๊ทธ ์ค๊ธฐ๊ฐ ยซ๋ฌดํดํ์ง ์์๋คยป โ ๊ฐ์ ์๊ธฐ#57(๋ฒ์ ๋๊ฒฐ ํ)์ด ใํฝ์ค์ฒ๊ฐ ๋๋ฉด ํ๋ ํจ๊ปใ๋ฅผ ์๊ตฌํ๋๋ฐ, โ **ใ#55 ๋ ์์ฅ๋งใ์ด๋ผ๊ณ ์ฝ์ผ๋ฉด ๊ทธ ์ํธ์์ฉ์ด ยซ๋ณด์ด์ง ์๋๋คยป.** ์ค์ ๋ก ๊ทธ ๋์ ํ ์คํธ ์ถฉ๋ 0์ธ๋ฐ ๋์ค์ ์ฐฉ์งํ๋ ์ชฝ์ด main ์ red ๋ก ๋ง๋ค์๋ค. โ โ ๊ตํ: ใ์ด๋ ํ์ผ์ ๋ง์ง๋ใ๋ ยซPR ํ์ผ ๋ชฉ๋กยป์ผ๋ก ํ์ธํ๋ผ โ ์์ฝ์์ ์ถ๋ก ํ์ง ๋ง๋ผ. - [rustjava-ldc-tags-15-16-17-real-world-generator-survey] โ
โ
**ใ๋ชป ์๋คใ๋ฅผ ยซ์๋คยป๋ก ๋ฐ๊ฟจ๋ค โ ASM ์ ํ๊ทธ 15/16/17 ์ ยซ๋ธ๋คยป.**
์ฑํ ์ ์
2026-09-16-ldc-tags-15-16-17#p2(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์กฐ์ฌ ํ์ฐจ ยท ํฌ๋ ์ดํธ ๋ฌด์ ์ด(ํ์ยทํ ์คํธ 0). โ โ ASM 9.7.1 = ๋ธ๋ค(์ค์ฆ) โvisitLdcInsn(Handle)ยท(Type.getMethodType)ยท(ConstantDynamic)15์ค๋ก ๋ง๋ ํด๋์ค์์{MethodHandle 1, MethodType 1, Dynamic 1}์ค์ธก. โ ์ ์ (๊ณต๊ฐ APIjavap)๊ณผ ๋์ (์ง์ ์์ฑ) ยซ๋ ๋คยป ์ก์๋ค. โ KotlinยทScalaยทLombok ์ฐ์ถ๋ฌผ = ์ด ํ๋ณธ์์ 0(5,479 ํด๋์ค ยท ldc 17,819 ์๋ฆฌ):kotlin-stdlib 2.0.21994/11,107 ยทkotlinx-coroutines 1.9.0826/1,791 ยทscala3-library 3.5.2583/651 ยทscala-library 2.13.152,889/3,755 ยทlombok 1.18.48 ร javac 26์ฐ์ถ๋ฌผ 2/2 ยท lombok ์๊ธฐ jar 183/507. โ โ ๊ทธ ยซ0ยป ์ ใ์ด ์์๋ฅผ ์ ์ด๋คใ๋ก ์ฝ์ง ๋ง๋ผ โ ๊ณ์ธก๊ธฐ์ ยซํ ์ธ๊ตฌ์กฐ์ฌยป๋ฅผ ๋ฐ๋ก ๋ฃ์ด ๊ฐ๋๋ค: ๊ฐ์ ์ฐ์ถ๋ฌผ ์์ ํ์ MethodHandleยทMethodType ์ด ๊ฐ๋ํ๋ค(scala-library 1,604 + 723 ยท scala3 310 + 143 ยท coroutines 68 + 59). โ โ ์ ๋ถ ยซ๋ถํธ์คํธ๋ฉ ์ธ์ยป์ด๊ณ ยซldcํผ์ฐ์ฐ์ยป๊ฐ ์๋๋ค โ javac ํํ๊ฐ ๊ทธ๋๋ก ์ฌํ๋๋ค. โ ํ๊ทธ 17(condy)์ ํ์๋ 0(์ฐ๋ฆฌ ํฉ์ฑ ํฝ์ค์ฒ์ ASM ์ฐ์ถ๋ฌผ๋ง ๊ฐ๋๋ค). โ โ ๊ณ์ธก๊ธฐ๋ฅผ ยซ๋์กฐ๊ตฐยป์ผ๋ก ๋จผ์ ๊ฒ์ฆํ๋ค โtest-data/์์ โ ์ฌ์ด ๋ ์์ฑ 8/8 ์ ์ค(LdcMethodHandleโ15 ยทLdcMethodTypeยทLdc2WMethodTypeโ16 ยท Dynamic 5โ17)์ด๊ณ , ใ๋ถ๊ฐ๋ฅ ํผ์ฐ์ฐ์ใ 1๊ฑด์ ์ค์ฐจ๊ฐ ์๋๋ผ โ ์ฌ์ด ๋ ์์ฑ(LdcUnknownTag= Module ์ ๊ฐ๋ฆฌํค๋ ๊ณ ์ ๋ถ๋) โ โ ์ค ์ค์ฐจ 0(์ ํ ํ์ฐจ ๊ณ์ธก๊ธฐ๋ 0.28%). โ ๋น์ฉ ์ ๊ฐ์ ์ ์ฒด: ํด์ฒด์ธ์ ์ค์นํ์ง ์์๋ค โ โ **ใ์ปดํ์ผ๋ฌ์ stdlib ์ ๊ทธ ์ปดํ์ผ๋ฌ ์์ ์ ์ฐ์ถ๋ฌผใ์ ์จ์ Maven Central jar 6๊ฐ(12.6MB) ๋ง์ผ๋ก ์์ฒ ํด๋์ค๋ฅผ ์๋ค. โ ๋๊ฐ = ์ข์**(์ปดํ์ผ๋ฌ๋น ยซํ ํ๋ก์ ํธยป)์ด๊ณ ๊ทธ๊ฒ์ ๊ฒฐ๋ก ์ ๋ฐ์๋ค. โ โ **ใ๋ชป ์๋คใ ์นธ์ ยซ๋น์ฐ์ง ์๊ณ ์ด๋ฆ ๋ถ์๋คยป: โดkotlincยทscalac ์ ํ๊น ํ์์ผ๋ก ๋ชฐ์ ๋ณธ ์ํ(๋ฏธ์ค์น) โตASM ์์ ์ ๋๊ตฌ๋ค**(ByteBuddyยทMockitoยทGroovyโฆ)์ด ๊ทธ API ๋ฅผ ์ค์ ๋ก ๋ถ๋ฅด๋์ง. โ ์ฌํ: ์ ํ ํ์ฐจ๊ฐ ใํฉ์ฑ ํฝ์ค์ฒ๋ผ javac ์ ์ ๋ธ๋คใ๋ก ์ ์งํ๊ฒ ๋ซ์ ๋ ์๋ฆฌ๊ฐ โ โ **ใ์ค๋ฌผ ์์ฑ๊ธฐ๊ฐ ๋ด๋ ํ์ใ์ผ๋ก ์น๊ฒฉ๋๋ค. ํ์ โฆ-bound-bootstrap-method-attr-index(PR #47 ์ฐฉ์ง)์ ๊ธด๊ธ๋๊ฐ ์ฌํ ์ถ์ธ๋๋ค. โ ๋๊ตฌ๋scripts/survey-ldc-constant-tags.py๋ก ยซ๋จ๊ฒผ๋คยป** โ ์ ํ ํ์ฐจ ๊ณ์ธก๊ธฐ๊ฐ ad hoc ์ด๋ผ ์ฌํ ๋ถ๊ฐ์๋ ๊ฒ์ด ์ด ํฐ์ผ์ด ์๊ธด ์ด์ ์ ์ ๋ฐ์ด๋ค(Acceptance ์ ใ๋ค์ ์ฌ๋์ด ๊ทธ๋๋ก ์ณ์ ๊ฐ์ ๋ตใ). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #52 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํfd05b9a4๋ถ์ด๋(์ฐฉ์ ์ค์ธก 15:14:25Z ยท ์๋ฐ ํ ์ฌ์กฐํCONFLICTING/DIRTY). โ ์์๋ฅผ ์ ๋๋ค(ํฐ์ผ ์ ์ฐจ 2): ๊ฐ์ ํ์ #51 ์ด ๋จผ์ ์ฐฉ์งํ๊ณ (1fe7d75) ๊ทธ๊ฒ์ด ์ด PR ์ base ๋ฅผ ํ๋ค์๋ค โ ์ด ํ์ฐจ๊ฐ ๊ทธ ๋ค๋ฅผ ์๋๋ค. ์ฐฉ์ง ํ ์ด repo ์ ์ด๋ฆฐ PR 0. โ ์ถฉ๋์STATE.mdยซํ๋ยป๋ฟ(์ธก์ 15:14:36Z) โREPORT.md๋ ์๋ ๋ณํฉ๋๊ณ ๋ฏฟ์ง ์๊ณ ์๋ค(๊ณ์ฝ 12): โ ์๋ฐฉํฅ hunk ๋์ผ(base..theirs==ours..mergedยทbase..ours==theirs..merged) ยท ์ค ์์ค 0 ยท ๋ถํยท์กฐ์ 0. ํด์ = ์ ๊ฑด ๋ณด์กดยทํฉ์งํฉยท์๊ฐ์(์ด ํ์ฐจfd05b9a20:53:17 >#51b10b0fd20:25:15) โ REPORT ์ต์ข ์์ survey โ methodhandlekind โ indy-fixture(์ค์ธก ํ์ธ). โ ๋ณํฉ ํ์์์ ๊ณ์ธก๊ธฐ๋ฅผ ๋ค์ ๋๋ ค ๋์กฐ๊ตฐ์ด ๊ทธ๋๋ก์์ ํ์ธํ๋ค โtest-data/148 ํด๋์ค ยท ldc 515 ยท ์ฌ์ด ๋ ์์ฑ 8/8({MethodHandle 1, MethodType 2, Dynamic 5}).cargo test --all570 ๋ถ๋ณ ยท DoD 7์ค rc=0. - [rustjava-methodhandlekind-placement-revisit-after-pr44] โ
โ
**
MethodHandleKind์์น ยซ์ฌ๊ฒฐ์ ยป โ ๋ต์ ใ๊ทธ๋๋ก ๋๋คใ.** ์ฑํ ์ ์2026-09-16-bootstrap-methods-and-method-handle#p2(worklog jsonadoptedProposals๊ธฐ๋ก). โ ๋ฑ๋ง์ดRe-decide๋ค โ ใ์๋์คใ๋ ์ ๋นํ ๋ต์ด๊ณ , ์ด ํ์ฐจ์ ๋ต์ด ๊ทธ๊ฒ์ด๋ค. ์ฝ๋ ๋ณ๊ฒฝ์ ํ๋จ๊ณผ ์ฌ๊ฐ ์กฐ๊ฑด์ doc ์ฃผ์์ ์ ์ ๊ฒ๋ฟ(ํ์ ยทimplยทlib.rsre-export ๋ฌด์ ์ด ยท ๊ณต๊ฐ API ๋ณํ 0 ยท ๋์ ๋ณ๊ฒฝ 0). โ โ ์ ์์ด ์ ์ ๋ฐฐ์น ์ฌ์ ยซ๋ยป ์ค ยซํ๋ยป๋ง ๋ง๋ฃ๋๋ค โ ๊ทธ ๊ตฌ๋ถ์ด ์ด ํ์ฐจ์ ์ ๋ถ๋ค: โตใํ์ ํ์ฐจ๊ฐconstant_pool.rs๋ฅผ ์ด์ด ๋๊ณ ์์๋คใ = โ ๋ง๋ฃ(PR #44MERGEDยท2026-09-16T02:13:39Zยท ๋จธ์ง์ปค๋ฐdc03593ยท โ ๊ทธ PR ํ์ผ ๋ชฉ๋ก์classfile/src/constant_pool.rs๊ฐ ์ค์ฌ) ยท โดใ์ ์ผํ ์๋น์๊ฐBootstrapMethods์์ฑ์ด๋คใ = โ ์ฌ์ ํ ์ฐธ(์ ์:MethodHandleRef::resolveํธ์ถ๋ถattribute.rs:116๋จ 1๊ณณยทresolve๋pub๋ ์๋๋ค ยทMethodHandleKind์ฝ๊ธฐ๋ ์ ๊ฑดbootstrap.method.kind๊ฒฝ์ ). โ โ ์ ์์ด ์ค์ค๋ก ๊ฑด ์กฐ๊ฑด์ด ์ด๋ฏธ ์ถฉ์กฑ๋๊ณ ๊ทธ ์กฐ๊ฑด์ด ยซdeclinedยป ๋ฅผ ๊ฐ๋ฆฌํจ๋ค โ ใโ(์ฝ์ฌ์ดํธ ๋งํฌ) ์ฐฉ์ง ยซํยป์ ์ ํ๋ผใ์ ๊ทธ โ ๊ฐ ์ค๋ PR #48 ๋ก ์ฐฉ์งํ๋๋ฐ โ ๊ทธ ์๋น์๋ง์ bootstrap.method.kind๋ก ์ฝ๋๋ค(jvm-bytecode/src/string_concat.rs:81). โ โ ๊ทธ๋ฌ๋ ๊ทธ escape ์ ์ ๊ธฐ๋์ง ์์๋ค โ ์ฝ๋์์ ยซ๋ ๋์ยป ์ด์ ๋ฅผ ์ฐพ์๋ค:constant_pool.rs๋ ์ด๋ฏธ CONSTANT_MethodHandle ์ ํด๋ ๊น์ด๋ฅผ ์ ํด ๋๋ค โConstantPoolReference::MethodHandle= โ ํผ์ฐ์ฐ์ 0 (๊ทธ ์๋ฆฌ ์ฃผ์: ใresolve ํ๋ ค๋ฉด ์๋ ๊ธฐ๊ตฌ๊ฐ ํ์ํ๊ณ ์ ์ผํ ์๋น์ verifier ๋ "not implemented" ๋ก ๋ฐ๊พผ๋คใ). โ โ ์ฎ๊ธฐ๋ฉด ยซ๊ฐ์ ์์์ ๋ ํด๋ ยป์ด ํ ํ์ผ์ ๋๋ํ ์์ ยซ๋ชจ์ยป์ผ๋ก ์ฝํ๋ค โ ์ด๋์ด ์์ ๋ ค๋ ์คํด๋ฅผ ํค์ด๋ค. โ ์๋ ๊ฒ์ ์จ๊ธฐ์ง ์๋๋ค: ใ์์ฑ ํ์ผ์ด ์์ ํ ํ์ ์ ๊ฐ๋๋คใ๋ ์คํด๋ ๋จ๋๋ค. ์ด๋์ด ์๋๋ผ ์ฃผ์์ผ๋ก ๊ฐ์๊ณ , โ ์ฌ๊ฐ ์กฐ๊ฑด์ ํจ๊ป ๋ฐ์๋ค โ ใ์ด ์์ฑ ยซ๋ฐยป์ ๋ฌด์ธ๊ฐ๊ฐ method handle ์ ํด๋ ํ๋ฉด ๋ค์ ์ด์ด๋ผใ(์ ๋ ฅ ํ๋ณดldcยท ์ง๊ธ์jvm-bytecode/src/verifier.rs:32๊ฐUnsupportedFeature๋ก ๋ตํ๋ค). โ ๋ถ๋ณ ์ฆ๋ช (์ด๋ 0์ด๋ผ ๊ฐ์ ๋์กฐ๊ฐ ์๋๋ผ ยซ๋ถ๋ณยป์ด ๊ทธ ์๋ฆฌ๋ฅผ ์ง๋ค):cargo test --all570 / 0 failed / 1 ignored = โ ์ง์ ํ์b3a20ae์ ๋์ผ ยทnumstat10+/0โ(โ ์ฝ์ ์๋์ด๋ฏ๋ก ใ์นํ์ธ๋ฐ ์ญ์ ํ 0์ด๋ฉด ์์ฌํ๋ผใ ๋นํด๋น โ ์ ์ธํด ๋๋ค) ยท โ ใ์ฎ๊ธฐ๊ธฐ ์ ์์น ์ฐธ์กฐ 0ใ ์ถ์ ํด๋น ์์(์ด๋์ด ์๋ค) ยท DoD 7์ค ์ ๊ฑด rc=0. โ ํ์ ์ ์ ์นด๋ 0 โ ใX ๊ฐ ์๊ธฐ๋ฉด ๋ค์ ์ด์ด๋ผใ๋ฅผ cockpit ์ด๋ฆฐ ์ถ์ฒ์ผ๋ก ๋์ฐ๋ฉด ์งํ ๋ถ๊ฐํ ์นด๋๊ฐ ์๊ตฌํ ๋จ๋๋ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #51 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํb10b0fdc๋ถ์ด๋(์ฐฉ์ ์ค์ธก 12:35:43Z ยท โ ์๋ฐ ํ ์ฌ์กฐํMERGEABLE/CLEAN). โ โ ๋ฐ๊ถ ์ฌ์ โ(CONFLICTING)๊ฐ ยซ์คํ๋์ง ์์๋คยป โ ์ค๋ ํ์ ์ (#48ยท#49ยท#50)์ด base ๋ฅผ ์ธ ๋ฒ ํ๋ค์๋๋ฐ๋ ์ด PR ์ ๊นจ๋ํ๋ค. ๊ทผ์ธ์ ๋ถ๊ธฐ ์์ ์ด๋ค: ์ด ๋ธ๋์น๋ #50 ์ฐฉ์ง๋ถ(b3a20ae) ยซ์ยป์์ ๊ฐ๋ ธ๊ณ , ๊ทธ ๋ค ์ฐฉ์งํ ํ์ ๊ฐ ์๋ค(๊ทธ ์ฌ์ด ์ด๋ฆฐ #52 ๋ ์์ง ๋ฏธ์ฐฉ์ง) โmerge-treerc=0 ยท ์ถฉ๋ ํด์ 0์ค. โ โ base ๋น๊น 0 ยท ํ ์ด๋์ ์์ฅ ๋๋ด 1๊ฑด๋ฟ์ด๋ค. โ ์ฌํ(์จ๊ธฐ์ง ์๋๋ค): ์ด ์ฐฉ์ง๊ฐ PR #52(โฆ-real-world-generator-surveyยท ๊ฒ์ดํธโก ๋๊ธฐ)์ base ๋ฅผ ๋ก๊ฒ ๋ง๋ ๋ค โ ์์ฅ 2ํ์ผ์ด ๊ฒน์น๋ค(์ฝ๋ ์์กด 0). ํด์๋ ๊ทธ์ชฝ ํ์ฐจ ๋ชซ์ด๊ณ ์ฌ๊ธฐ์ ๋ง์ง์ง ์์๋ค. - [rustjava-indy-fixture-jdk-pin-and-slot-accounting-test] โ
โ
์ํ ์์ ๋ โ indy ํฝ์ค์ฒ JDK ํ์ ยซ๊ฒ์ฌยป๋ก ๋ฐ๊ณ , ์ฌ๋กฏ ํ๊ณ๋ฅผ ํ์ ๋จ์์์ ์ง์ ๋ฌผ๊ฒ ํ๋ค.
์ฑํ ์ ์ ๋์ ํ ํ์ฐจ๊ฐ ๋ซ์๋ค(worklog json
adoptedProposals์ ๊ฑด ๊ธฐ๋ก):2026-09-16-cp-tags-16-17-execution-fixtures#p0ยท#p1. โ โ โ ํ์ ยซ๊ธฐ๋กยป์ด ์๋๋ผ ยซ๊ฒ์ฌยป๋ค โ ์ด repo ์rust-toolchain.toml๋ถ์ฌ ยท CIsetup-java0๊ฑด ยท PATH ์javac๋ถ์ฌ(์ค๋ฌผ์/opt/homebrew/opt/openjdk/bin/javac26.0.1, PATH ๋ฐ) โ โ ์ปดํ์ผ๋ฌ์๊ฒ ๋ฌป๋ ๊ฒ์ฌ๋ ์๋ฆฌ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๊ณ , ์ด ์ ์๋ ๊ฒ์ ์ปค๋ฐ๋ ๋ฐ์ดํธ๋ฟ์ด๋ค.tests/test_fixture_pins.rs๊ฐtest-data/indy์ javac ์ฐ์ถ๋ฌผ์ 65.0(=--release 21)์ ์๊ตฌํ๋ค. โ ํ ๊ฐ๊ณผ ๊ฐ์ ์ง์ ์ด ๊ฐ์ ํ์ผ์ด๋ผ ใ๊ธฐ๋กํ๋๋ฐ ๊ฒ์ฌ๊ฐ ๋ค๋ฅธ ๊ฐ์ ๋ณธ๋คใ๊ฐ ์ฑ๋ฆฝํ์ง ์๋๋ค. โ โ ํ ๋์์ ยซ.java์ง์ด ์๋ ๊ฒยป์ผ๋ก ๊ตฌ์กฐ์ ์ผ๋ก ๊ณจ๋๋ค โ ํ์ PR #48 ์ด ๊ฐ์ ๋๋ ํฐ๋ฆฌ์ ํฉ์ฑ ํฝ์ค์ฒ(NotStringConcatFactory.classยท major 52)๋ฅผ ๋ฃ๋๋ค โ โ ๋๋ ํฐ๋ฆฌ ์ ์ ํ์ด์์ผ๋ฉด #48 ์ฐฉ์ง ์๊ฐ red ์๋ค(๊ทธ ํ์ผ์ ์ค์ ๋ก ๋ฐ์ ๋ฒ์ ์ ์ฌ์ ํ์ธํ๋ค). ์ javac ํฝ์ค์ฒ๋.java๋ฅผ ๋ฃ๋ ์๊ฐ ์๋ ํธ์ ๋๋ค. โ ์๋ฐฉํฅ: ํ ๊ฐ ์ค๊ธฐ โ red ยท โ ์ค์ ์ฌ๊ณ ์ฌํ(javac26.0.1 ์--release์์ด โ major 70) โ red ยท โ ๊ฐ์ (๊ฒ์ฌ๋ฅผ ์์ ํต๊ณผ๋ก) โ ๊ทธ major 70 ํ์ผ์ด green โ red ์ ์ถ์ฒ๊ฐ ๊ฒ์ฌ์์ด ์ ๋ค. โป์ฌํ ์คํ ํฝ์ค์ฒ๋git checkout์๋ณต(status 0๊ฑด) โ โ ์ปค๋ฐ๋ ํฝ์ค์ฒ ์ฌ์์ฑ 0. โ โ โ ํ์ ์ ใ์ใ์ธ๋ฐ, ์ ์์ ์ ์ ๋ ยซ์ ๋ฐ๋งยป ์ฐธ์ด์๋ค โ ใ์ง์ ์ํ 0ใ์ ๊ฑฐ์ง์ด๋ค (long_must_fit_in_two_constant_pool_slots์ค์ฌ). โ ์ถ๊ฐํ๊ธฐ ์ ์ ๊ฐ์ ์ผ๋ก ยซ๋ฌด์์ด ์ ์กํ๋ยป๋ฅผ ์๋ค: โ Double ์ 1์นธ์ผ๋ก ๋ฐ๊พธ๋ฉด red ๋test_class๋จ 1๊ฑด(์ JVM ยท 40์ด)์ด๊ณ , ใlongยทdouble ๋งใ ์ถ(Integer ๋ฅผ 2์นธ์ผ๋ก)์ ์ค๋ฌผ ํด๋์ค ํ์ผ์ ํต์งธ๋ก ์ฝ๋ ์ํ์์๋ง ์กํ๋ค. โonly_long_and_double_consume_two_constant_pool_slots๋ฅผ ๋ฃ์ด ๊ฐ์ 3์ข ์ ๊ฑด์ 0.01์ด ํ์ ์ํ์ด ์ก๊ฒ ํ๋ค. โ ๊ณต๊ฐ APIparse_all์ ๊ฒฐ๊ณผ ์ธ๋ฑ์ค(1ยท2ยท4)๋ฅผ ๋ณด๋ฏ๋ก ๊ตฌํ ์ธ๋ถ์ ๊ฒฐํฉํ์ง ์๋๋ค. โ โ ๊ณ์ธก ํจ์ ์ ๋จ๊ธด๋ค โcargo test๋ ยซ์ฒซ ์คํจ ๋ฐ์ด๋๋ฆฌ์์ ๋ฉ์ถ๋คยป.--no-fail-fast์์ด ์ผ ์ฒซ ์ธก์ ์ ใ์ ๊ฑดtest_class1๊ฑด๋ง redใ๋ผ๋ ๊ณผ์๊ณ์์ด์๋ค. ๊ฐ์ ๋์กฐ๋ฅผ ์ธ๋ ํ์ฐจ๋ ๊ทธ ํ๋๊ทธ๋ฅผ ๋ฐ๋์ ๋ถ์ฌ๋ผ. โ ๋ฒ์:parse_all๊ตฌํ ๋ฌด์ ์ด ยท ํฝ์ค์ฒ ์ฌ์์ฑ 0 ยท ํ์ ์ ๋ฌด์ ์ด(โ ์ํ์tests/test_class_format.rs๊ผฌ๋ฆฌ๊ฐ ์๋๋ผ ์ ํ์ผ์ ๋์ด #48ยท#49 ์ ์ถฉ๋ 0 โ ๊ทธ ๋์ด ๊ทธ ํ์ผ ๊ผฌ๋ฆฌ๋ฅผ ๋ง์ง๋ค). โ ๋จ๊ธด ๊ฒ: ํ์ ๋ชฉํ ๋ฒ์ ์ ๊ณ ์ ํ์ง ์ปดํ์ผ๋ฌ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ณ ์ ํ์ง ์๋๋ค(javac 21ยท26 ๋ ๋ค 65.0) ยท ํ ๋ฒ์๋test-data/indy๋ฟ์ด๊ณ ๋ฃจํธ๋ 65ร61ยท52ร40ยท66ร8ยท70ร3ยท68ร1 ๋ก ๋ค์ฏ ๋ฒ์ ์ด ์์ฌ ์๋ค โ ๋ ๋ค ํ์ ์ถ์ฒ. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #50 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํeb4d296b๋ถ์ด๋(์ฐฉ์ ์ค์ธก 10:39Z ยท ์๋ฐ ํ ์ฌ์กฐํ). โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(์ธก์ 10:39:37Z) โ ๊ทธ ์ฌ์ด ํ์ ๋(#49ยท#48)์ด ์ฐฉ์งํ๋๋ฐ๋ ๊ทธ๋ ๋ค. โ โ ์ฝ๋ ํ์ผ์ ยซ์์ธก ๊ต์งํฉ์ด 0ยป ์ด์๋ค โ ์ด ํ์ฐจ๊ฐ ์ํ์tests/test_class_format.rs๊ผฌ๋ฆฌ๊ฐ ์๋๋ผ ์ ํ์ผ(tests/test_fixture_pins.rs)์ ๋ ์ค๊ณ ํ๋จ์ด ์ค์ ๋ก ๊ฐ์ ํ๋ค(#48ยท#49 ๋ ๋ ๋ค ๊ทธ ํ์ผ์ ๋ง์ก๋ค). โ ๊ณ์ฝ 12(์๋ ๋ณํฉ ์ฝ๋ ํ์ผ hunk ๋์กฐ)๋ โ ๋์ ์์ฒด๊ฐ ์์๋ค. ํด์ = ์ ๊ฑด ๋ณด์กดยทํฉ์งํฉยท์๊ฐ์(์ด ํ์ฐจ 17:47:55 > #49 16:20 > #48 15:46) ยท ์์ค 3์ค์ ์ ๊ฑด ์๋๊ฐ base ๋๋น ์ง์ด ์ค(#48ยท#49 ๊ฐ ๊ฐ์ ๋ซ์ ๊ตฌ๋ฉ์ ์ ๋ฌธ์ฅ) ยท ๋ถํยท์กฐ์ 0. โ โ โ ๊ทธ๋ฆฌ๊ณ ยซ์ค๊ณ ์ฃผ์ฅยป์ด ์ค๋ฌผ๋ก ๊ฒ์ฆ๋๋ค โ #48 ์ด ๊ฐ์ ๋๋ ํฐ๋ฆฌ์ ๋ฃ์ ํฉ์ฑ ํฝ์ค์ฒtest-data/indy/NotStringConcatFactory.class(major 52) ๊ฐ ๋ณํฉ ํ์์ ์ค์ ๋ก ๋ค์ด์๊ณ , โ **.java์ง์ด ์์ด ํ ๋์์์ ์๋ ์ ์ธ๋์ดindy_javac_fixtures_keep_the_pinned_class_file_versiongreen (๋๋จธ์ง 6๊ฐ๋ ์ ๋ถ.java์ง ๋ณด์ ยท major 65 = ํ ๋์). โ โ ใ๋๋ ํฐ๋ฆฌ ์ ์ ํ์ด์์ผ๋ฉด #48 ์ฐฉ์ง ์๊ฐ redใ๊ฐ ๊ฐ์ ์ด ์๋๋ผ ยซ์ง๊ธ ์ด ํธ๋ฆฌ์์ยป ํ์ธ๋ ์ฌ์ค์ด๋ค.** โcargo test --all570 / 0 failed / 1 ignored ยท DoD 7์ค ์ ๊ฑด rc=0 ยท--delete-branch๋ฏธ์ฌ์ฉ. - [rustjava-cp-tag-switch-passthrough-mutation-detectable] โ
โ
**ใ์ ์ ์๋ ํ๊ทธ๋ฅผ ๊ฑฐ๋ถํ๋คใ๋ ํ
์คํธ๊ฐ ๊ทธ๊ฒ์ ยซ์งํค์ง ์์๋คยป โ ์งํค๊ฒ ํ๋ค.**
์ฑํ ์ ์
2026-09-16-ldc-tags-15-16-17#p1(worklog jsonadoptedProposals๊ธฐ๋ก). โ ์ ํ ์ฝ๋ ๋ณ๊ฒฝ ยซ0ยป โ ๊ฐ์ ์ ์ค์ฆ์ฉ ์์์ด๊ณ ์ ๋ถ ๋๋๋ ธ๋ค(git status classfile/ jvm-bytecode/0๊ฑด์ผ๋ก ํ์ธ). โ โ ๋์ ์ ๋ฅผ ยซ๋จผ์ ยป ์ค์ฆํ๋ค(ํฐ์ผ โ): ํ๊ทธ switch ์_ => Err(...)๋ฅผ_ => Ok(Integer(0))๋ก ๊ฐ์ ํ๋ โ ๊ทธ ํ ์คํธ๋ ยซokยป ์๊ณ ์ค์ํธ์์ ๋ฌด๋ ๊ฒ์constant_pool::tests::tags_outside_the_accepted_set_are_still_rejected๋จ 1๊ฑด์ด์๋ค โ โ end-to-end ์ธต์๋ ๊ทธ ๊ฐ์ง๋ฅผ ๋ฌด๋ ๊ฒ์ด ยซ์์๋คยป(์ง์ ํ์ฐจ๊ฐ ใM5 ์ธต ์ด๊ธ๋จใ์ผ๋ก ๋จ๊ธด ๊ทธ๊ฒ). โ โ ๊ทผ์ธ โ ํ๋ณ ์คํ์ผ๋ก ์ขํ๋ค(์ถ์ธก ์๋): ์ ํ ์คํธ๋Hello.class์์ํ 1๋ฒ์ ํ๊ทธ๋ฅผ ๋ฎ๋๋ฐ ๊ทธ ์ฌ๋กฏ์ โ ์ฝ๋๊ฐ ์ฐธ์กฐํ๋ Methodref ๋ผ ๋ฎ๋ ์๊ฐ ํ์ผ์ด ์ฌ๋ฌ ๊ฒฝ๋ก๋ก ๋์์ ๊นจ์ง๋ค. ๊ทธ๋ฆฌ๊ณClassFileError๊ฐ ๋ชจ๋ ํ์ฑ ์คํจ๋ฅผ โ **ใInvalid class fileใ๋ก ํํํํ๋ฏ๋ก(๊ทธ ํ ์คํธ ํ์ผ์ด ์ค์ค๋ก ์ ์ด ๋ ์ฌ์ค) ๋จ์ธ์ด โ ใํ๊ทธ๊ฐ ๋ฏธ์ง๋ผ ๊ฑฐ๋ถใ์ ใํด๋์ค๊ฐ ๋ฌด๋์ ธ ๊ฑฐ๋ถใ๋ฅผ ๊ตฌ๋ณํ์ง ๋ชปํ๋ค.** โ ๋ฐ์ดํธ ์ด๊ธ๋จ(desync)์ ๊ทผ์ธ์ด ยซ์๋๋คยป โ 4๋ฐ์ดํธ๋ฅผ ์ ํํ ์๋นํ๋ ๊ฐ์ (B)์ผ๋ก๋ ์ฌ์ ํ green ์ด์๋ค. โ โ ๋ ๊ฐ์ค ์ค ํ๋๋ฅผ ์คํ์ผ๋ก ๊ธฐ๊ฐํ๋ค. โ โ ๊ทธ๋ฌ๋ฏ๋ก ์ฒ๋ฐฉ์ด ยซ๋จ์ธ ์กฐ์ด๊ธฐยป๊ฐ ์๋๋ค โ ๋ฌธ๋ฉด์ด ํํํด ์กฐ์ผ ๊ฒ์ด ์๋ค. ํฐ์ผ ๊ณ์ฝ 1 ์ด ์์ธกํ ๋๋ก โ ์ ๋ ฅ์ด ๊ทธ ๊ฐ์ง์ ยซ์ ์ผํ ๊ฒฐํจยป์ผ๋ก ๋๋ฌํ๊ฒ ๋ง๋ค์๋ค:test-data/cp/UnreferencedTag{13,14,19}.class(์์ฑ๊ธฐtest-data/src/cp/make_cp_fixtures.py์ ๊ท) = โ ์ฐธ์กฐ๋์ง ์๊ณ ยท ํ์ด๋ก๋ 0 ยท ์์ํ ยซ๋งจ ๋ยป ์ธ ์ํธ๋ฆฌ ํ๋. โ ์ธ ์ฑ์ง์ด ์ ๋ถ ๊ฐํ๋ค โ ๋งจ ๋ + ํ์ด๋ก๋ 0 ์ด๋ผ์ผ pass-through ๊ฐ์ ์ด โ **ยซ์ ์ ๋์ํ๋ยป ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๊ทธ๋์ผ ํ ์คํธ๊ฐ red ๊ฐ ๋๋ค(๊ทธ๋ ์ง ์์ผ๋ฉด ยซ๋ค๋ฅด๊ฒ ๊นจ์งยป ํ์ผ์ด ๋์ด ๋ green ์ด๋ค). โ โ ์ /ํ โ ๊ฐ์ ๊ฐ์ , ๋ค๋ฅธ ๊ฒฐ๊ณผ**: ์ = ๊ทธ ํ ์คํธ ok / ํ = โ red (์คํจ ๋ฌธ๋ฉดa tag that cannot appear in a class file must be rejected: ""โ โ ๋น ์ถ๋ ฅ = ํด๋์ค๊ฐ ยซ์ฑ๊ณต์ ์ผ๋ก ์คํยป๋๋ค). โ โ ๋ค๋ฅธ ๊ฐ์ง ๊ฐ์ (ํ๊ทธ 16 ๊ฑฐ๋ถ) โ 6 ํ ์คํธ red โ ์ค์ํธ๊ฐ ์ฌ์ ํ switch ์ ์ฒด๋ฅผ ์งํจ๋ค(์ด ํ์ฐจ๊ฐ ์ขํ์ง ์์๋ค). โcargo test --all568 / 0 failed / 1 ignored(โ ์ ๋ถ๋ณ โ ํ ์คํธ 1๊ฐ ยซ์นํยป) ยท DoD 7์ค ์ ๊ฑด rc=0 ยท ํฝ์ค์ฒ ์ฌ์์ฑ ๋ฉฑ๋ฑ. โ ๊ณ์ฝ 2โ ์ ์ ํ์ธ: ์ ํฝ์ค์ฒ(BadTag*)๋ฅผ ์ฐ๋ ๋ค๋ฅธ ํ ์คํธ 0๊ฑด ยทhello_class()ยทfixture()ํฌํผ๋ ์ฌ์ ํ 4ยท5ํ ์ฐ์ฌ ๊ณ ์ 0. โ ๊ณ์ฝ 2โ ์คํ: ์ ๋จ์ธ์ โ ์คํ์ด ๋์ง ์๋๋ค โ ํฝ์ค์ฒ๊ฐ ยซ์ ์ผํ ๊ฒฐํจยป๋ง ๊ฐ๋๋ก ์ง์ด์ ธ ์์ด ๋ค๋ฅธ ๋ณ๊ฒฝ์ด ์ด ํ ์คํธ๋ฅผ ํ๋ค ๊ฒฝ๋ก๊ฐ ์ข๋ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #49 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22โ ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํeb8b4eb6๋ถ์ด๋(์ฐฉ์ ์ค์ธก 09:03Z โ ๋ก์ปฌยท์๊ฒฉยทPR head ์ผ์น). โ โ ๊ทธ๋ฌ๋ ยซ์ถฉ๋ ํด์ยป๊ฐ ์ด ํ์ฐจ์ ๋ณธ์ฒด์๋ค โ ๊ฒ์ ยซ๋์คยป #47 ์ด ์ฐฉ์งํด PR ์ดCONFLICTING/DIRTY๊ฐ ๋๋ค. โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(์ธก์ 09:03:56Z ยทREPORT.mdยทSTATE.md์ ยซ๋งจ ์ ์ ํญ๋ชฉยป) โ ์ ํ PLAN ์ ์์ธก ใ์ฝ๋ ์ถฉ๋์ ์๋ค โ ํ์ผ์ด ๊ฐ๋ฆฐ๋คใ๊ฐ ๋ง์๋ค. ํด์ = ์ ๊ฑด ๋ณด์กดยทํฉ์งํฉยท์๊ฐ์(eb8b4eb16:20 >3b3667d14:45). โ โ **tests/test_class_format.rs๋ ยซ์๋ ๋ณํฉยป๋๊ณ ๊ทธ๊ฒ์ ๋ฏฟ์ง ์๊ณ ์๋ค**(๊ณ์ฝ 12): ์๋ฐฉํฅ hunk ๋์ผ์ฑ โbase..theirs๋ธํ ==ours..merged๋ธํ ยทbase..ours==theirs..merged๋ ๋ค ์ผ์น. โ โ ๊ทธ๋ฆฌ๊ณ ยซ์ค ์์ค 3๊ฑดยป์ ๋ฐ๊ฒฌํด ์ ๊ฑด ํด๋ช ํ๋ค โ ๋ ๋ค ์๋๊ฐ base ๋๋น ยซ์ง์ดยป ์ค์ด๋ค(deleted_by_other=True): โด์ฐ๋ฆฌ๊ฐ ๋จ๊ธด ใbootstrap_method_attr_index๋ ์ฌ์ ํ ๊ฒฝ๊ณ ๊ฒ์ฌ๋์ง ์๋๋คใ๋ฅผ โ **#47 ์ด ๊ทธ๊ฒ์ ๊ตฌํํ๋ฉฐ ๊ณ ์ณ ์ผ๋ค** โต#47 ์ด ๋จ๊ธด ใM5 ์ธต ์ด๊ธ๋จ โ pass-through ๊ฐ์ ์test_class_format์ด ๋ชป ์ก๋๋คใ๋ฅผ โ ์ด ํ์ฐจ๊ฐ ๋ซ์ผ๋ฉฐ ๊ณ ์ณ ์ผ๋ค. โ โ ์์ค์ด ์๋๋ผ ยซ๊ฐ์ ์๊ธฐ๊ฐ ๋ซ์ ๊ตฌ๋ฉ์ ๊ฐฑ์ ยปํ ๊ฒ์ด๊ณ , ๋ถํยท์กฐ์ ์ค์ 0์ด๋ค. โ ํด์ ์ธ ๋ณ๊ฒฝ 0 ยท--delete-branch๋ฏธ์ฌ์ฉ ยท ํ์ PR #48ยท#50 ์ ๋ง์ง์ง ์์๋ค(๊ฐ์ base ๋น๊น์ด ํ์ํ๋ค). - [rustjava-link-stringconcatfactory-makeconcatwithconstants] โ
โ
javac ์ ๋ฌธ์์ด
+๊ฐ ยซ์ค์ ๋ก ๋๋คยป โ โฃ-1 ์ โ ๋ฅผ ยซํ ์นธ๋งยป ๋ซ์๋ค. ์ฑํ ์ ์2026-09-16-bootstrap-methods-and-method-handle#p0(worklog jsonadoptedProposals๊ธฐ๋ก ยท ์ด ๋ฐฐ์น์ ์ ์ผํ L). โ PLAN ์ ํ์ ๊ฒ์ดํธ๋ฅผ ํ๋ค โreports/<id>.plan.md๋ฅผ ๋จผ์ ๋ด๊ณ ๊ฐ์ ํ์ฐจ์์ ์ฐฉ์ํ๋ค(ํ์ฅ: PLAN ์ ํต์ง ํ ์ฆ์ ์ฐฉ์). โ โ ์ /ํ๋ฅผ ยซ์คํยป์ผ๋ก ๊ฐ๋๋ค: ์ =UnsupportedOperationException: โฆ invokedynamicโ โ ๊ทธ๊ฒ๋defineClassํ๋ ์์์ ๋ฌ๋ค (= ์คํ์ ๋๋ฌ์กฐ์ฐจ ๋ชป ํ๋ค) / ํ = โ **a0์ถ๋ ฅ ํ ์ ์ ์ข ๋ฃ**(test-data/StringConcat.txt์ ๋ฐ์ดํธ ๋์กฐ). โ โ ์ด ํฐ์ผ์ L ์ ๋ฌธ์์ด ์ ํฉ์ด ์๋๋ผ ยซ์ด๋์ ์๋๊ฐยป์๋ค โ ๊ทธ ์ฌ์ค์ ์ฌ๊ธฐ ๋ฐ๋๋ค.BootstrapMethods๋ ํด๋์ค ์์ฑ์ธ๋ฐInterpreter::run(jvm, code_attribute, args, return_type)์ โ ๋ฉ์๋์Code๋ง ๋ฐ๋๋ค โ โ ์คํ ์์ ์ ๋ถํธ์คํธ๋ฉ ํ ์ด๋ธ์ ๋ฟ์ ๊ธธ์ด ยซ์๋คยป. โ ๋์ ยซ๋คยป ์ฅ ์ ์ผํ ์๋ฆฌClassDefinitionImpl::from_classfile์์ ์ ์ ์์ ์ ๋ด๋ ค์ด๋ค (Opcode::Invokedynamicโ โOpcode::InvokedynamicStringConcat). โ **Interpreter::run์๊ทธ๋์ฒ ๋ถ๋ณ**(ํธ์ถ๋ถ 0๊ณณ ๋ณ๊ฒฝ). โ ์์๊ฐ ์ค๊ณ๋ค โ ๋ด๋ ค์ฐ๊ธฐ๋ฅผ verifier ยซ์ยป์ ๋๋ค โ โ verifier ๋ฅผ ํ ์ค๋ ๊ณ ์น์ง ์์๋ค: ใ๊ทธ๋๊น์งInvokedynamic์ผ๋ก ๋จ์ ์๋ ๊ฒ = ์ฐ๋ฆฌ๊ฐ ๋งํฌํ์ง ์๋ ๋ถํธ์คํธ๋ฉใ์ด ๊ทธ๋๋ก ๊ฑฐ๋ถ ๊ท์น์ด ๋๋ค. โ โ **java.lang.invoke๋ฅผ ยซ์ธ์ฐ์ง ์์๋คยป** โMethodHandleยทCallSite0์ค(๊ทธ ๋๋ ํฐ๋ฆฌ๋ ์ฌ์ ํ ๋ถ์ฌ). ํฉํ ๋ฆฌ์ ๊ณ์ฝ์ด ยซ๋ฌธ์์ด ํ ํ๋ฆฟยป์ด๋ผ ๋ ์ํผ๋ฅผ ์ง์ ๊ฑธ์ผ๋ฉด ๋๊ณ , โ ๊ทธ๊ฒ์ด ใํ ํธ์ถ ์ง์ ใ๊ณผ ใ๋งํฌ ๊ธฐ๊ตฌใ๋ฅผ ๊ฐ๋ฅด๋ ์ ์ด๋ค. ๊ฐโ๋ฌธ์์ด์ ๋ฐํ์์String.valueOf๋ฅผjvm.invoke_static์ผ๋ก ๋ถ๋ฅธ๋ค(nullยทtoStringยท๋ถ๋์์ ์์์ด ํ ์๋ฆฌ์ ๋จ๋๋ค). โ โ โ **ใ์ ๋ถ ์ด์ด ๋ฒ๋ฆฐใ ๋ณ๊ฒฝ๊ณผ ๊ตฌ๋ณ๋๋ ์ถ์ ยซ๋ง๋ค์ดยป ๋ฃ์๋ค โ ์ด๊ฒ์ด ์ด ํ์ฐจ์์ ๊ฐ์ฅ ๊ฐ์ง ์ค์ธก์ด๋ค.** ์ธ์์ kindยทclassยทnameยทdescriptor 4์ถ ์์ ์ผ์น์ธ๋ฐ, โ ๊ทธ ๊ฒ์ฌ๋ฅผ ์ง์๋ ๊ธฐ์กด ํฝ์ค์ฒ๊ฐ ยซ์ ๋ถ greenยป ์ด์๋ค:LambdaยทConstantKinds๋ ์ ์ ์ธ์๊ฐ String ์ด ์๋๋ผ โ ์ ์ ๊ฒ์ฌ์ ๋๋ฌํ๊ธฐ ยซ์ ยป์ ๋ค๋ฅธ ์ด์ ๋ก ๊ฑธ๋ฆฐ๋ค. โ โ ์ ์ ๊ฒ์ฌ๊ฐ ์๋ฌด ํ ์คํธ์๋ ๋ฌผ๋ ค ์์ง ์์๋ค(= ์ง์๋ ์๋ฌด๋ ๋ชจ๋ฅธ๋ค). ๊ทธ๋์ โ ๊ทผ์ ์ค๋ต ํฝ์ค์ฒ๋ฅผ ์๋ก ๋ง๋ค์๋ค:NotStringConcatFactory(test-data/src/indy/make_indy_fixtures.pyยท โ ์์ ํด๋์ค ํ ์ถ๋ง ๋ค๋ฅด๊ณ kindยท์ด๋ฆยท์์ ์ยทString ์ ์ ์ธ์๋ ์ ๋ถ ์ผ์น) โ โ ์ค์ง ์ ์ ๊ฒ์ฌ๋ง์ด ๊ทธ๊ฒ์ ๊ฑฐ๋ถํ ์ ์๋ค. โ ๊ฐ์ 2์ข (์๋ฐฉํฅ): โด๋งํฌ ๋๊ธฐ โtest_class(์ถ๋ ฅ ๋์กฐ) +test_only_the_string_concat_bootstrap_is_linkedred โต๋ฌด์ฐจ๋ณ ๋งํฌ(4์ถ ์ ๊ฑฐ) โ โ ๊ทผ์ ์ค๋ต์ด ๋งํฌ๋ผ red โ โ ๊ทธ ํฝ์ค์ฒ๋ฅผ ๋ฃ๊ธฐ ยซ์ ยป์๋ ์ด ๊ฐ์ ์ด green ์ด์๋ค. โcargo test --all568 / 0 failed / 1 ignored(โ ์ ๋ถ๋ณ โ ํ ์คํธ 1๊ฐ ยซ์นํยป + ํฝ์ค์ฒ 1์ ์ถ๊ฐ) ยท DoD 7์ค ์ ๊ฑด rc=0 ยท โmake_indy_fixtures.py์ฌ์์ฑ ๋ฉฑ๋ฑ(๊ธฐ์กด indy ํฝ์ค์ฒ ๋ณ๊ฒฝ 0). โ โ ์๋ ๊ฒ โ ์ํ์ ยซ์ข ๋ฅยป๊ฐ ๋ฐ๋์๋ค: ์ข ์ = ใ์ ๋๋คใ(๊ฑฐ๋ถ) โ ์ ๊ท = โ **ใ์๋ชป ๋ ์ ์๋คใ.** โ ํ์๊ฐ ๋ ๋์๋ค โ ๊ทธ๋์ ํ์ ์ ใ๊ฑฐ๋ถ๋์ง ์๋๋คใ๊ฐ ์๋๋ผ โ ์ถ๋ ฅ๊ฐ ๋์กฐ๋ก ์ก์๋ค(test_class์.txt๊ท์ฝ). โ ๋ฒ์ ์๋ ฅ์ ์ ์ผ๋ก ๋ง์๋ค โmakeConcatยทLambdaMetafactoryยทcondy ๋ ๋ฌด์ ์ด์ด๊ณ ํ์ ์ถ์ฒ์ผ๋ก ๋๊ฒผ๋ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #48 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22โ ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ0113b0a6๋ถ์ด๋(์ฐฉ์ ์ค์ธก 10:12Z). โ โ ์ฐฉ์ง ์ ์ ยซํ์ ๋ยป์ด ๋จผ์ ๋ค์ด์ ์์๋ค โ#47(14:45) ยท#49(16:20)๊ฐ ์ด๋ฏธ main ์ด๋ผ ์ด PR ์CONFLICTING/DIRTY์๋ค. โ ์ถฉ๋์ ์์ฅ 2ํ์ผ๋ฟ(์ธก์ 10:12:58Z) โ ์ ํ PLAN ์ ใ์ฝ๋ ์ถฉ๋์ ์๋ค โ ํ์ผ์ด ๊ฐ๋ฆฐ๋คใ๊ฐ โ ํ์ ๊ฐ ยซ๋ยป๋ก ๋์ด๋ ๋ค์๋ ์ ์ง๋๋ค. โ โ ํด์๋ ยซ์๊ฐ์ ๋ผ์๋ฃ๊ธฐยป๋ค โ ํ์ชฝ์ ํต์งธ๋ก ์น๋ ๊ฒ์ด ์๋์๋ค: main ์ด ์ด๋ฏธ [#49, #47] ์์ผ๋ก ๊ฐ๊ณ ์์ด ์ด ํ์ฐจ(15:46)๋ฅผ โ ๊ทธ ยซ์ฌ์ดยป์ ๋ฃ์๋ค(theirs[:i] + ours + theirs[i:]). โ ์ต์ข ์์ #49 โ #48 โ #47. โ โ **tests/test_class_format.rs๋ ์๋ ๋ณํฉ๋๊ณ , ๊ทธ๊ฒ์ ๋ฏฟ์ง ์๊ณ ยซ์ค ๋จ์ยป๋ก ์๋ค**(๊ณ์ฝ 12): ๋น์ด์์ง ์์ ์ค ๊ธฐ์ค ์์ค 35๊ฑด์ด ์ ๊ฑด ยซ์๋๊ฐ base ๋๋น ์ง์ด ์คยป(๊ฐ์ ์๊ธฐ๊ฐ ๋ซ์ ๊ตฌ๋ฉ์ ์ ๋ฌธ์ฅ) ยท ๋ถํยท์กฐ์ 0. โ โ #49 ๊ฐ ํ๊ทธ ํ ์คํธ๋ฅผ ๋ค์ ์ง์ ๊ฒ๊ณผ ์ด ํ์ฐจ๊ฐ StringConcat ์ฃผ์์ ๊ณ ์ณ ์ด ๊ฒ์ด ๋ ๋ค ์ด์ ์๋ค. โ ํด์ ์ธ ๋ณ๊ฒฝ 0 ยท--delete-branch๋ฏธ์ฌ์ฉ ยท ํ์ #50(๊ฒ์ดํธโก ๋๊ธฐ)์ ๋ง์ง์ง ์์๋ค โ ๊ทธ์ชฝ์ ์๊ธฐ base ๋ฅผ ๋น๊ธด๋ค. - [rustjava-bound-bootstrap-method-attr-index] โ
โ
**
bootstrap_method_attr_index๊ฐ ยซ์ค์ฌํ๋ยป ๋ถํธ์คํธ๋ฉ ๋ฉ์๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค โ ใํ์ใ์ ๋์ฐพ์๋ค.** ์ฑํ ์ ์ ๋์ ํ ํ์ฐจ๊ฐ ๋ซ์๋ค(worklog jsonadoptedProposals์ ์ ๊ฑด ๊ธฐ๋ก):2026-09-16-bootstrap-methods-and-method-handle#p1ยท2026-09-16-ldc-tags-15-16-17#p0โ โ ์๋ก ๋ค๋ฅธ ํ์ฐจ๊ฐ ยซ๋ ๋ฆฝ์ผ๋กยป ๊ฐ์ ๊ฒฐํจ์ ๋ฟ์๋ค(๊ทธ๋์ ์ด๊ด์ด ๋์ ํฉ์ณ ๋ฐ๊ถํ๋ค). โ ์ /ํ:UnsupportedOperationException(ใ์ด ๋ฐํ์์ด ์์ง ๋ชป ํ๋คใ) โ โClassFormatError(ใ์ด ํ์ผ์ด ๊นจ์ก๋คใ). โ JVMS ๊ทผ๊ฑฐ: 4.4.10(Dynamic/InvokeDynamic ์bootstrap_method_attr_index๋BootstrapMethods์bootstrap_methods๋ฐฐ์ด์ ๋ํ ยซ์ ํจํ ์ธ๋ฑ์คยป์ฌ์ผ ํ๋ค) ยท 4.7.23(๊ทธ ์์๋ฅผ ๊ฐ์ง ํด๋์ค๋ ๊ทธ ์์ฑ์ ยซ๊ฐ์ ธ์ผยป ํ๋ค). โ ์ฐธ์กฐ JVM: OpenJDK 26 ์ ๋ถ์ฌ ํ์์ClassFormatError: Missing BootstrapMethods attribute๋ฅผ ๋ธ๋ค. โ โ ๋ ์ถ์ด ยซํ ์ ์ดยป๋ค โ ๋ถ๊ธฐ๋ฅผ ๋๋ก ๋ง๋ค์ง ์์๋ค(ํฐ์ผ ๊ณ์ฝ 1): ์์ฑ ๋ถ์ฌ = ยซํญ๋ชฉ 0๊ฐ์ง๋ฆฌ ํยป๋ผ ์ด๋ค ์ธ๋ฑ์ค๋ ๋ชป ๊ฐ๋ฆฌํจ๋ค โbootstrap_method_count.is_some_and(|count| (index as usize) < count)ํ ์ค์ด ๋์ ๋ค ๋ฌธ๋ค. โ ์๋ฆฌ =validate_class์bootstrap_method_indices_resolveโvalidate_constant_pool์ด ์๋ ์ด์ ๋ โ ํ๊ณผ ยซํด๋์ค ์์ฑยป์ ๋ ๋ค ์ฅ ์ ์ผํ ์๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด๊ณ , ๊ทธ ๊ต์ฐจ๊ฐ ์ด ๊ฒ์ฌ๊ฐ ์ฌํ ์๋ ์ด์ ์๋ค (๊ทธ ์๋ฆฌ์ ๋ก์ ์ฃผ์์ด ์ค์ค๋ก ๊ทธ๋ ๊ฒ ์ ๊ณ ใ์ํ๋ ํ์ฐจ์ ๋งก๊ธด๋คใ๊ณ ํ๋ค โ โ ์ด ํ์ฐจ๊ฐ ๊ทธ ํ์ฐจ๋ค). โ ์ ์๋ฌ ํ์ 0 โ ๊ธฐ์กดClassFileError::InvalidFormat์ ์ ์๋ค(๊ณ์ฝ 2โ: ๋๋ฆฌ๋ ๋์ ์ ์ ์ ์์ผ๋ฉด ๊ทธ์ชฝ์ด ๋ซ๋ค). โ ํฝ์ค์ฒ +1(LdcDynamicBSMIndexPastEnd= 1ํญ๋ชฉ ํ์ ์ธ๋ฑ์ค 1) โ โ ์์ฑ๊ธฐ๋ฅผ ํตํด์๋ง ๋ง๋ค ์ ์๋ค(ํ๋ฅผ ์ฐ๋ ์๋ฆฌ๊ฐ ๊ฑฐ๊ธฐ๋ฟ). โ ์ฌ์์ฑ ๋ฉฑ๋ฑ ํ์ธ: ๊ธฐ์กด 10๊ฐ ๋ฐ์ดํธ ๋ถ๋ณ ยท ์ ๊ท 1๊ฐ๋ง ์ถ๊ฐ. โ โ ๊ฐ์ 3์ข โfalseํ๋๋ก๋ โโ ๊ฐ ยซ๊ฒน์น๋คยป(๊ทธ๋์ ์ ์ ๋๋ ธ๋ค): ์์trueโ ์ ํ ์คํธ red(โโ) ยท ์์falseโ 24 ํ ์คํธ red(โโ ํผ์ฌ) ยท โ ๋ด๋ถ ์ ์ด๋งfalseโ 8 ํ ์คํธ red(์ ๊ฑด dynamic ๋ณด์ ํด๋์ค = โ)์ด๊ณtest_helloยทtest_switchยทtest_odd_evenยทtest_superclass๋ green(= โ ๋ฌด์ํฅ) โ โ ๋ ์ถ์ด ์ค์ ๋ก ๊ฐ๋ ธ๋ค. โcargo test --all568 / 0 failed / 1 ignored(โ ์ ๋ถ๋ณ โ ํ ์คํธ๋ฅผ ยซ์นํยปํ๋ค. ์๋ก๋ ์ ๋ณด์ด๋ฏ๋ก ๊ฐ์ ์ผ๋ก ๋ฌผ์๋ค) ยท DoD 7์ค ์ ๊ฑด rc=0. โ โ ๋จ๊ธด ๊ฒ:BootstrapMethods์ค๋ณต ์ ์ธ์ ์ฌ์ ํ ๊ฑฐ๋ถํ์ง ์๋๋ค(JVMS 4.7.23 ์ ยซ์ต๋ 1๊ฐยป ยท ์ง๊ธ์find_map์ด ์ฒซ ๊ฒ๋ง ๋ณธ๋ค) โ โ ์ด ํ์ฐจ ๋ฒ์ ๋ฐ์ด๊ณ ํ์ ์ถ์ฒ์ ์ ์๋ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #47 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ3b3667d6๋ถ์ด๋(๋๋ด ์ ์ค์ธก โ ๋ก์ปฌยท์๊ฒฉยทPR headยท๋ฆฌ๋ทฐ ์ค2 4๊ฐ ์ผ์น) ยทci-presencerc=0 CI_GREEN ยทmergeableMERGEABLE/CLEAN ยท ์์ PR 0๊ฑด ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0(์ฐฉ์ง diff 8ํ์ผ ยท.github/workflows/6๊ฐ ์ ๊ฑด deploy ์ดํ 0๊ฑด). โ โ ๋ฌถ์ง ยซ๋ชปํยป ์ด์ ๊ฐ ์ด ๋ฆฌ๋์ง์ ์ฐ๋ฌผ์ด๋ค โrustjava๋ upstream ๋๊ธฐ ๋ฑ์ฌ๋ผ ๋ฌถ์ ๊ฒฝ๋ก์merge_strategy:๋ฅผ ๋ด์ ํ์ผ์ด ์๊ณ , ๊ทธ๋ฌ๋ฉดbin/queue-lint๊ฒ์ฌ22 ์ ์งํ STOP ๋ ๋ฐฉ์ด์ ์ด ยซ๋ ๋คยป ์ฌ๋ผ์ง๋ค (orch-upstream-sync-repos-cannot-bundle-gate3-ever). โ ๋ณ-mergeํฐ์ผ์ด ๊ทธ ยซ์ ์ธ์ ๋ด์ ํ์ผยป์ด๋ค. โ โ ํ์ ยซ๋ยป์ด ์ด๋ ค ์๋ค โ ์ด ์ฐฉ์ง๊ฐ ๊ทธ ๋์ ๊นฌ๋ค: #48(StringConcatFactory๋งํฌ ยท ๊ฒ์ดํธโก ๋๊ธฐ) ยท #49(์์ํ ํ๊ทธ pass-through ๊ฐ์ ํ์ง). โ ์ ๋คtests/test_class_format.rs+ ์์ฅ 2ํ์ผ์ ๋ง์ง๋ค (์ฝ๋ ํ์ผ์ ๊ฐ๋ฆฐ๋ค โ ๊ธฐ๋ฅ ์์กด 0). โ โ ๊ทธ ๋์ ๊ฐ์ base ๋น๊ธฐ๊ธฐ๊ฐ ํ์ํ๋ค โ ํด์๋ ๊ทธ์ชฝ ํ์ฐจ ๋ชซ์ด๊ณ ์ฌ๊ธฐ์ ๋ง์ง์ง ์์๋ค. - [rustjava-invokedynamic-bootstrapmethods-and-methodhandle] โ
โ
**
BootstrapMethods๋ฅผ ยซ๊ตฌ์กฐยป๋ก ์ฝ๋๋ค โ โฃ-1 ์ โ ๋ฅผ ๋ซ์๋ค. โ ์ฝ์ฌ์ดํธ ๋งํฌ 0์ค.** ์ฑํ ์ ์2026-09-16-cp-tags-15-18-parse#p0(worklog jsonadoptedProposals์ ๊ธฐ๋ก). โ **AttributeInfo::BootstrapMethods(Vec<u8>)โVec<BootstrapMethod>** ยท ์ ๊ท ๊ณต๊ฐ ํ์ 3์ข (BootstrapMethodยทMethodHandleRefยทMethodHandleKind9์ข ) โ โ ์ ๋ถclassfile/src/attribute.rsํ ํ์ผ. โ โ **ใMethodHandle ๊ฒฐ์ ใ์ ยซ๊ฒฝ๊ณยป๋ฅผ ์ด๋ฆ์ผ๋ก ์ ์๋ค โ โ ใ์ ๋ถ ๋๋คใ๊ฐ ์๋๋ค**(โฃ-1 ์ 7ํญ๋ชฉ์ผ๋ก ๋ฐ์๋ค). ์์ง: ๋๋ ๊ฒ์ ํด๋์คํ์ผ์ ์ ํ (์ข ๋ฅยทํด๋์คยท์ด๋ฆยท์์ ์) ํด๋ ๋ฟ์ด๊ณ , โ **java.lang.invoke๋ฐํ์ ํด๋์ค๋ ยซ0๊ฐยป๋ค** (์ค์ธก:rustjava-runtime/src/classes/java/์invoke๋๋ ํฐ๋ฆฌ ๋ถ์ฌ ยทledger-grep์ฐธ์กฐ 0๊ฑด) โMethodHandle๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ. โ โ ์ด ํ์ฐจ์ ๊ธ์ = ยซ์ ์ ์ธ์๋ฅผ ํ์ง ์๋๋คยป โ โ ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ยซ์ธก์ ยปํ๋ค(M3). ใ์ธ๋ฑ์ค๋ฅผConstantPoolReference๋ก ํ์ด๋ผใ๋ ์์ฐ์ค๋ฌ์ด ๋ค์ ์ค์ธ๋ฐ,LambdaMetafactory.metafactory์ ์ธ์๊ฐ MethodTypeยทMethodHandleยทMethodType ์ด๋ผ โ ๋๋ค๊ฐ ๋ ํด๋์ค๊ฐ ยซํ์ฑยป์์ ์ฃฝ๋๋ค โjava.lang.UnsupportedOperationException: โฆ invokedynamicโ โ **java.lang.ClassFormatError: Invalid class file** (= ์ง์ ๋ ํ์ฐจ๊ฐ ๋ง๋ ใํ์ โ ๋ฏธ์ง์ใ ๊ตฌ๋ถ์ ์์ค). โ M3 ์์StringConcat์ ยซ๊ทธ๋๋ก greenยป ์ด๋ค โ โ โ ์ธ์๊ฐ String ํ๋๋ฟ์ธ ํฝ์ค์ฒ๋ง์ผ๋ก๋ ์ด ํ๊ท๊ฐ ยซ์ ๋ณด์ธ๋คยป. ๊ทธ๋์ ํฝ์ค์ฒtest-data/indy/Lambda.class๋ฅผ ์๋ก ๋ฃ์๋ค. โ ๊ฐ์ 4์ข ์ ๊ฑด red ยท ๋ณต์ green: M1num_bootstrap_arguments๋ฅผ u8 ๋ก(ํ๋ ํญ 1๊ฐ) ยท M2bootstrap_method_ref์ธ๋ฑ์ค +1 ยท โ M3 ์ ์ ์ธ์ ํด์ ๊ฐ์ (์) ยท M4 verifier ๋ถ๊ธฐ ์ ๊ฑฐ โ โpanicked at jvm-bytecode/src/interpreter.rs:631(ํธ์คํธ abort). โ โ **todo!()๋ ยซ์ฌ์ ํ ๋๋ฌ ๋ถ๊ฐยป์ด๊ณ ๊ทธ๊ฒ์ ยซ์ธก์ ยปํ๋ค**(์ถ๋ก ์๋) ยท โverifier.rsยทinterpreter.rs๋ฌด์ ์ด. โ ๋จ์ธ๋ง๋ค ๋ฌด๋ ์ถ์ ๋ถ์๋ค: ๊ตฌ์กฐ = ํ๋ ์ ์ ๋จ์ธ(์นด์ดํธ๋ง ์ฌ๋ฉด M1ยทM2 ๋ฅผ ํต๊ณผํ๋ค) ยท ์ธ์ ์ธ๋ฑ์ค =Lambda๋ ์ธต(classfile ํ์ค + end-to-end ๋ฌธ์ฅ) ยท ์ข ๋ฅ ์งํฉ = 0ยท10ยท255 red ยท โ ์ง์ง๊ธฐ๋ ยซ๋ด๊ฐ ์๋๋ผvalidation.rs๊ฐ ์ง๋คยป๋ ์ฃผ์ฅ๊น์ง ํ ์คํธ๋ก ์ ๊ฐ๋ค(kind 1ยท4ยท9 red โ kind 5 green โ ๊ณตํํ์ง ์์). โ ๋ก์ ์ฃผ์ ์ ์ ์ ์ (ledger-grep -rn 'BootstrapMethods'๋ก ์ธ์ด ๋ซ์๋ค):constant_pool.rs(ใstill kept as raw bytesใ) ยทvalidation.rs(ใunparsed byte blob ์ด๋ผ ๊ฒฝ๊ณ ์ง์ ๊ฒ์ด ์๋คใ โ ์ด์ ์๋๋ฐ ์ด ํจ์๊ฐ ๋ชป ๋ณธ๋ค๋ก ์ฌ์ ๊ต์ฒด). โ ์ฌ๋ฃ ๊ตฌ์ (์๋ฃ ์ ยทREPORT ํ์ ์ถ์ฒ)์ ๊ทธ๋๋ก ๋๋ค. โcargo test --all558 โ 562 / 0 failed / 1 ignored(์ ๊ท 4 ยท โ ๊ฐ์ 0) ยท DoD 7์ค ์ ๊ฑด rc=0. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #45 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ992dfa53๋ถ์ด๋(๋๋ด ์ ์ค์ธก โ PR head ์ ๋ฐ์ดํธ ์ผ์น) ยทci-presencerc=0 CI_GREEN(6์ ์ ๊ฑด pass) ยท ์์ PR 0๊ฑด(head ๋ธ๋์นfeat/rustjava-bootstrap-methods๊ธฐ์ค) ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0(์ฐฉ์ง diff 13ํ์ผ์origin/main...HEAD๋ก ๋๊ณ ,.github/workflows/6๊ฐ ์ค deployยทpublishยทreleaseยทwrangler ์ดํ 0๊ฑด โ coverage/CI/schedule/dependabot ๋ฟ์ด๋ค). โ โ ์ฐฉ์ง ์์ โ ํ์ PR ์ด ยซ๋ยป ๋จ๋๋ค: #44(ldcํ๊ทธ 15ยท16ยท17 ยท-fix์น๊ณ ์นํ) ยท #46(ํ๊ทธ 16ยท17 ์คํ ํฝ์ค์ฒ). โ ์ฝ๋ ์ถฉ๋์ ์์ ๊ฒ์ด๋ค(#44-fix ๋validation.rs๋ณธ๋ฌธ ยท #46 ์constant_pool.rs๋จ์ ํ ์คํธ ยท ์ด ํ์ฐจ๋attribute.rs) โ โ ๊ทธ๋ฌ๋ ์์ฅ 2ํ์ผ(STATE.mdยทREPORT.md) ์ต์๋จ์ ์ด ์ฐฉ์ง ๋ค์ ๊ฒน์น๋ค โ โ ๊ทธ ๋์ด ํฉ์งํฉ ํด์๋ฅผ ์ง๋ค. โปvalidation.rs๋ ์ด ํ์ฐจ(์ฃผ์ 1๋ธ๋ก)์ #44-fix(validate_class๋ณธ๋ฌธ+์ ํจ์)๊ฐ ๋ค๋ฅธ ํํฌ๋ผ ์๋ ๋ณํฉ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋, ํด์ ์ฃผ์ฒด๋ ๋ค์ ์ฐฉ์งํ๋ ์ชฝ์ด๋ค. - [rustjava-ldc-tags-15-16-17-still-malformed] โ
โ
**
ldcํ๊ทธ 15ยท16ยท17 ๋ ยซ๋ฏธ์ง์ยป์ด๋ผ๊ณ ๋งํ๋ค โ โ โฃ-2 ๋ฅผ ๋ซ์๋ค.** โ ์ /ํ ์คํ ์ถ๋ ฅ:ClassFormatError: Invalid class fileโ โUnsupportedOperationException: Unsupported class file feature: ldc of a method handle(/method type/dynamically-computed constant). โ ์ง์ ํ์ฐจ์ ยซ๊ฐ์ ๊ด์ฉยป์ ์ผ๋ค(ํ์ฑ โ verifier ๊ฑฐ๋ถ) โ ์ ๊ด์ฉ์ ๋ง๋ค์ง ์์๋ค(ํฐ์ผ โ ). โ โ โช ํ์ ์ด ยซ๋ยป๋ก ๊ฐ๋ ธ๋ค โ ์ด ํ์ฐจ์ ํต์ฌ์ด๋ค: โ์ฌํ๋๋ค(4์ข ์ ๊ฑดMalformed) โโ javac ์ ๊ทธ ํํ๋ฅผ ยซ๋ด์ง ์๋๋คยป โ ใ์ฌํ ๋ถ๊ฐใ๊ฐ ์๋๋ผ ยซ์ธก์ ๋ ๋ถ์ฌยป๋ค. JDK ์์ฒด jmods 27,902 ํด๋์ค ยทldc/ldc_w/ldc2_w1,252,714 ์๋ฆฌ ยท โ 0๊ฑด (โ ๊ณ์ธก๊ธฐ๋ฅผ ๋์กฐ๊ตฐ์ผ๋ก ๊ฒ์ฆ: ๊ฐ์ corpus ์์ String 1,176,232 ยท Integer 23,292 ยท Long 20,006 โฆ ๋ฅผ ๋์ฐพ์๊ณ ๋์ฝ๋ ๋๋ฆฌํํธ 0.28%) ยท--release 21/25/26+preview๋ก ๋ฌธ์์ด์ฐ๊ฒฐยท๋๋คยท๋ฉ์๋์ฐธ์กฐยท๋ ์ฝ๋ยทsealed/enum/pattern switch ๋ฑ 14์ข โ ํ๊ทธ 15ยท16 ์ โ ๋ถํธ์คํธ๋ฉ ยซ์ธ์ยป๋ก๋ง ๋ฑ์ฅํ๊ณ ํ๊ทธ 17 ์ 0 ยท ์ด repotest-data/127ํด๋์ค 500์๋ฆฌ 0๊ฑด. โ โ โ ํฝ์ค์ฒ๋ ยซํฉ์ฑยป์ด๊ณ 3๊ณณ(์์ฑ๊ธฐยทํ ์คํธยทworklog)์ ๊ทธ๋ ๊ฒ ์ ์๋ค. โ **ใํ๋ฒํ ์ฝ๋์์ ๋์จ๋คใ๋ก ์ ์ง ์์๋ค.** โ ๋ชป ์ฐ ์ถ๋ ์ ๋๋ค: ASMยทKotlin ๋ฅ ์๋ํํฐ jar corpus ๋ ์ด ๋จธ์ ์ 0๊ฐ($HOMEยท.m2ยท.gradleยท.ivy2ยทCellar ์ ์) โ ๋ฏธ์ธก์ . โ ๊ทธ๋ผ์๋ ๊ณ ์น ์ ๋นํ๋ ยซ๋๋ฌ์ฑยป์ด ์๋๋ผ ยซ์ธ์ ์ฑยป์ด๋ค โ ๊ทธ ์ ์ด โฃ-1(invokedynamic์คํ)์ด ํ์๋ก ํ ๋ฐ๋ก ๊ทธ ์์๋ค์ด๋ค. โ โ ์ฐธ์กฐ JVM ์ด ๊ทผ๊ฑฐ๋ค(AGENTS.mdํ์ฉ ์ถ = observable behavior ยท OpenJDK ์์ค ๋ฏธ์ฐธ์กฐ): OpenJDK 26.0.1 ์ด ์์ฑ ํฝ์ค์ฒ 4์ข ์ ์ ๋ถ ๋ก๋ยท์คํํ๋ค โ โ **ใ๋ชป ์ฝ๋ ํ์ผใ์ด ์๋๋ผ ใ๋ชป ํ๋ ํ์ผใ์์ด ์ ๋ค. โ โ ๊ทธ ์ฐธ์กฐ JVM ์ด ๋ด ํฝ์ค์ฒ๋ฅผ ยซ๋ ๋ฒยป ๋ฐ๋ คํ๊ณ ๊ทธ๊ฒ์ด ๋ถ์ ์ฐ์ถ๋ฌผ์ด๋ค** โ ํ๊ทธ 17 ์ major โฅ 55 ํ์ ยทDynamic์BootstrapMethods์์ฑ ํ์(JVMS 4.7.23). โ ์ฐ๋ฆฌvalidation.rs๋ ยซ๋ ๋คยป ๊ฒ์ฌํ์ง ์๋๋ค(โฃ-2 ์ ๋จ๊ฒผ๋ค). โ ๋๊ฐ(โก) ๋ฏธ์ง๋ถ์ ยซ์์ฑ ๋์กฐ๊ตฐยป์ผ๋ก ๋ณด์๋ค:ldc2_w์ MethodType(JVMS 6.5 ์๋ฐ) ยทldc๋์์ด ํ๊ทธ 19 โ โ ๋ ๋ค ์ฌ์ ํClassFormatError(์ฐธ์กฐ JVM ๋ ๊ฐ๊ฐ VerifyErrorยทClassFormatError). โป์ฐ๋ฆฌ๋ ํ์ฑ ์์ ์ ๋์ด phylum ์ด ๋ค๋ฅด๋ค โ ๋จ์ธํ์ง ์์๋ค. โ ๊ฐ์ 5์ข : M1 verifier ์ ๋ถ๊ธฐ ์ ๊ฑฐ โ โpanicked at jvm-bytecode/src/interpreter.rs:1063(ํธ์คํธ abort = ์ง์ ํ์ฐจ๊ฐtodo!()์์ ์ฐ ๊ฒ๊ณผ ๊ฐ์ ํํ) ยท M2from_constant_pool์๋ณต ยท M3 opcode ๋ถ๊ธฐ ์๋ณต ยท M4ldc2_wํ์ฅ โ ์ ๊ฑด red ยท ๋ณต์ green. โ โ M5 ๋ ยซ๋ด ํ ์คํธ๊ฐ ๋ชป ์ก์๋คยป โ ์จ๊ธฐ์ง ์๋๋ค: ์์ํ ํ๊ทธ switch ๋ฅผ pass-through ๋ก ๋ง๋ค์ด๋tests/test_class_format.rs๋ ์ ๊ฑด green(๋ดLdcUnknownTag๋ ยซ์ธ์ ํ ์ด์ ยป๋ก ํต๊ณผํ๋ค). ์ค์ ๋ก ๋ฌด๋ ๊ฒ์ โ ์ง์ ํ์ฐจ์classfile::constant_pool::tests::tags_outside_the_accepted_set_are_still_rejected๋ค. โ โ ์ถ์ ์ ๊ฒจ ์์ผ๋ ยซ๋ด๊ฐ ๋จ์ธํ ์ธตยป์ด ์๋๋ค. โcargo test --all558 โ 560 / 0 failed / 1 ignored(์ ๊ท 2 ยท โ ๊ฐ์ 0) ยท DoD 7์ค(= ํ๋ฆฌํฐ ๊ฒ์ฌ๊ธฐ ๊ธฐ์ค ๋ช ๋ น 6๊ฐ) ์ ๊ฑด rc=0 ยท โverifier.rs์Invokedynamic์ค ๋ฌด์ ์ด ยท โinterpreter.rs๋ฌด์ ์ด(git diff --stat๋ถ์ฌ). โ โ **[-fix ํ์ฐจ 2026-09-16 ยท ๊ฒ์ดํธโกrequest-changes์น๊ณ] โ ์ด ํ์ฐจ๊ฐ ยซ๊ตฌ๋ฉ์ ๋ง๋ค์๋คยป โ ๊ฒ์์๊ฐ ๋ง๋ค์ด์ ์๊ณ , ๋ด๊ฐ ์ฌํํ๋ค.** โ ๋ํ ์์ฉ์งํฉ์ด ยซ์ฐ์ฐํ ๋ฐฑ์คํฑยป์ ๋์ฒด ์์ด ๊ฑท์ด๋๋ค โ ์ฐธ์กฐ JVM ยซ๋ยป ๋ชป ์ฝ๋ ํ์ condy 2์ข ์ด ใ๋ฏธ์ง์ใ์ด๋ผ ๋ตํ๋ค (LdcDynamicOldMajorํ๊ทธ 17 @ major 52 ยทLdcDynamicNoBSMBSM ๋ถ์ฌ). โ beforeab872b7๋ ๋ ๋คClassFormatError์๋ค โ ๋ด๊ฐ ๊ฒฉ๋ฆฌ worktree ๋ก ์ฌ์ธก. โ โ ๊ทธ ์ฌ์ธก์์ ยซ๊ณ์ธก ํจ์ ยป์ ํ๋ ๋ฐ์๋ค โ ์ ์ด ๋๋ค: ๋ ์ํฌํธ๋ฆฌ๊ฐCARGO_TARGET_DIR๋ฅผ ๊ณต์ ํ๋ฉด cargo ๊ฐ ๋ก์ ํ ์คํธ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๊ทธ๋๋ก ๋งํฌํด โ ์ ๋ฐ๋ ๋ต(before ๊ฐ ใ๋ฏธ์ง์ใ)์ ์ค๋ค. ๊นจ๋ํ ํ๊น์ผ๋ก ๋ค์ ์ฌ์์ผClassFormatError๊ฐ ๋์๋ค. โ โ worktree ๊ฐ ์ธก์ ์ ํ๊น ๋๋ ํฐ๋ฆฌ๋ฅผ ยซ๋ถ๋ฆฌยปํ๊ณ , ๋น๋ ๊ฒฐ๊ณผ์ ๊ทธ ํ๋ณธ์ ๋ฌธ์์ด์ด ์๋์งstrings๋ก ํ์ธํ๋ผ. โ ๊ณ ๋ฅธ ๊ฐ๋ = โ major ๋ฒ์ ์ถ(validation.rs+28์ค ยท ์์ฑ ํ์ฑ 0 ยทattribute.rs๋ฌด์ ์ด โ PR #45 ์ ๊ฒน์น์ง ์๋๋ค). โ โ ๊ฒ์์์ 1ํ์ ยซ4ํ ํยป๋ก ๋ํ๋ค โ ์ถ์ธก์ด ์๋๋ผ ์ค์ธก์ด ์์ผฐ๋ค: ๊ฐ์ ๊ฒฐํจ์ด ํ๊ทธ 15ยท16 ์๋ ์์๋ค(major 50 ์ค์ธก). โ 15ยท16ยท18 โฅ 51 ยท 17 โฅ 55(JVMS 4.4). โ ๋๊ฐ 0: jmods 27,902 ํด๋์ค ์๋ฐ 0 (โ ๊ทธ corpus ๋ ์ ๋ถ major 69ยท70 ์ด๋ผ โฅ51 ํ์ ์ํํ์ง ๋ชปํ๋ค โ ์จ๊ธฐ์ง ์๋๋ค). โ ์๋ฐฉํฅ: M1 ์ ๊ฒ์ฌ ์ ๊ฑฐ โ ใํ์ใ ์ถ 2 red(์์ฑ 4์ข ์ ok) ยท โ M2 ใ์ ๋ถ ํ์์ผ๋ก ๋๋๋ฆฌ๊ธฐใ(์์ฉ์งํฉ ์๋ณต) โ โ ์์ฑ 4์ข red โ โ ๋๋๋ฆฌ๊ธฐ๋ ํต๊ณผ ๋ฐฉ๋ฒ์ด ์๋๋ค(Acceptance โถ) ยท ๋ณต์ green ยทgit diff --stat์ผ๋กopcode.rs์๋ณต ํ์ธ. โ ํฝ์ค์ฒ +4(LdcTag13ยทLdcTag14ยทLdcDynamicOldMajorยทLdcDynamicNoBSM) โ โ ๊ฒ์์๊ฐ ใํ๊ทธ 13ยท14 ๋ก๋ ๊ตฌ์ฑ ๋ถ๊ฐใ๊ฐ ๊ฑฐ์ง์์ ๋ง๋ค์ด์ ๋ณด์๋ค(๊ฐ์_ => Errํ ์ค์ด 19 ์๋ ์ ์ฉ๋๋ฏ๋ก ์๊ธฐ ์ฆ๊ฑฐ๋ก ์๊ธฐ๋ฅผ ๋ฐ์ฆํ๋ค). โ Acceptance ๋ฌธ๋ฉด์ ๊ธ์ ๊ทธ๋๋ก ๋ฎ๋๋ค. โ ๋จ๋ ๋์ญ = 1(LdcDynamicNoBSM) ยท โ ๋ฌธ์ ์ ์ 3๊ฑด(0.28% ๋ ยซ์ํยป์ด ์๋๋ผ ยซํ์ง ๊ฐ๋ฅ ์ค๋์ฝ๋ ๊ด์ธก์นยป ยท DoD ์ ํต์ผ ยท jmod 68๊ฐ). โcargo test --all560 โ 562 / 0 / 1(์ ๊ท 2 ยท ๊ฐ์ 0). โ โ **[-fix2 ํ์ฐจ] ๊ฒ์ดํธโก approve ์ธ๋ฐ โCONFLICTING์ด๋ผ ๊ฒ์ดํธโข๋ก ๋ชป ๊ฐ๋ค โ ํ์ #45 ๊ฐ ยซ๊ฐ์ ํ์ผ ๊ผฌ๋ฆฌยป์ ์ฐฉ์งํ๋ค.**git merge origin/main(โ ๋ฆฌ๋ฒ ์ด์คยทforce-push 0)์ผ๋ก base ๋ฅผ ๋น๊ธฐ๊ณ 3ํ์ผ์ ํด์ํ๋ค. โ ์ ํ ๋ก์ง ๋ณ๊ฒฝ 0. โtests/test_class_format.rsโ โ ์์ชฝ์ ยซ๋ ๋คยป(์ด ๋ฆฌ๋์ง 4ํ ์คํธ + #45 ์test_lambda_โฆยท ํฝ์ค์ฒ๊ฐtest-data/ldc/*โLambda.class๋ก ๋ฌ๋ผ ๊ฐ์ญ 0). โREPORT.mdยทSTATE.md์๋ฃ ์ โ #45 ๊ธฐ๋ก์ ์์, ๋ด ๊ธฐ๋ก์ ๋ค์(์์ ํฉ์งํฉ ยท ์ญ์ 0). โโ **STATE.mdใ๋ค์ใ ์ ํญ๋ชฉ 2 ๋ ยซํฉ์งํฉยป์ด ๋ต์ด ์๋์๋ค โ ์จ๊ธฐ์ง ์๋๋ค.** ๋ ๋ค ๋จ๊ธฐ๋ฉด ๋ชจ์๋๋ ใ2.ใ๊ฐ ๋ ๊ฐ(๋ซํ โ ์ฌ์ ํ ์ด๋ฆผ) ์๊ธด๋ค. โ ๊ทธ๋ฐ๋ฐ ์ด๊ฑด ยซ๋ด ํ๋จยป์ด ์๋๋ผ ยซ์ค์ธกยป์ผ๋ก ๋๋ฌ๋ค:origin/main์ชฝ ๊ทธ ๋ธ๋ก์ โ ๋จธ์ง๋ฒ ์ด์คab872b7์ ๋ฐ์ดํธ ๋์ผ์ด๊ณ (#45 ์ ๊ธฐ๋ก์ด ยซ์๋๋คยป โ ์์ ์๋ฌธ์ด๋ค) โ approve ํe9151acf๊ฐ ์ด๋ฏธ ๊ทธ 5์ค์ ์ง์ด ์ํ๋ค(grep -cxF์ ๊ฑด 0). โ โ ๋จธ์ง๊ฐ ยซ์น์ธ๋ ์ญ์ ยป๋ฅผ ๋ฐ๋์ ๋ฟ ์๋ก ์ง์ด ์ค์ด 0 ์ด๋ค. โ #45 ๊ฐ ยซ์ค์ ๋ก ๋ํยป 1์ค(ํญ๋ชฉ 1 ๊ผฌ๋ฆฌ โverifier.rs๋ฌด์ ์ด ์ค์ธก)์ ๋ณด์กดํ๋ค. โclassfile/src/validation.rsยทconstant_pool.rs๋ ์๋ ๋ณํฉ(์ถฉ๋ ์๋ โ #45 ์์ธก ์ ์ค). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #44 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก-fix2ํ์ฐจ approve ยท ํb5f268c0๋ถ์ด๋(๋๋ด ์ ์ค์ธก โ ๋ก์ปฌยท์๊ฒฉยทPR headยท๋ฆฌ๋ทฐ ์ค2 4๊ฐ ์ผ์น) ยทci-presencerc=0 CI_GREEN(3๊ฑด ์ ๊ฑด ์๋ฃยท์ฑ๊ณต) ยทmergeableMERGEABLE/CLEAN ยทmerge-tree์ถฉ๋ 0 ยท ์์ PR 0๊ฑด(head ๋ธ๋์นfeat/rustjava-ldc-tags-15-16-17๊ธฐ์ค) ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0(์ฐฉ์ง diff 20ํ์ผ์origin/main...HEAD๋ก ๋๊ณ ,.github/workflows/6๊ฐ ์ ๊ฑด deployยทpublishยทreleaseยทwranglerยทpages ์ดํ 0๊ฑด). โ โ ์ด ๋ฆฌ๋์ง์-merge๋ ยซ๋ ๋ฒ ๋ ๋ยป๋๋ค โ 1์ฐจ(โฆ-fix-merge)๋ ๋ก์ heade9151acf๊ธฐ์ค์ด๋ผhold:๊ฐ ๊ฑธ๋ ค ํ์ ๋ค์ด๊ฐ์ง ๋ชปํ๊ณ (queue-lint ๊ฒ์ฌ26), 2์ฐจ(โฆ-fix2-merge)๊ฐ ์ headb5f268c0๋ก ๋ ๋๋ผ ์ด ์ฐฉ์ง๋ฅผ ๋๋ค. โ ๊ทธhold:๊ฐ ๊ฐ์ ํ๋ค โ ๋ก์ ๋ ๋๋ณธ์ด ๊ทธ๋๋ก ๋์์ผ๋ฉด ๊ฒ์ดํธโข์ดCONFLICTING์ผ๋ก ์ฐ๋ค. โ โ ํ์ #46 ์ด ยซ์์ง ์ด๋ ค ์๋ค(head72db4923ยท ๊ฒ์ดํธโขblocked(ci-pending)์ฌ๋ฐฐ์ฐจ ์ค) โ โ ์ด ์ฐฉ์ง๊ฐ ๊ทธ PR ์tests/test_class_format.rs๊ผฌ๋ฆฌ์ ์์ฅ 2ํ์ผ์ ยซ๋ค์ยป ์ถฉ๋์ํจ๋ค โ ๊ทธ์ชฝ์ base ๋น๊ธฐ๊ธฐ๊ฐ ํ ๋ฒ ๋ ํ์ํ๋ค. โ โ ๊ตฌ์กฐ์ ๊ทผ์ธ์ ๋จ๋๋ค โ ๋ค PR(#43ยท#45ยท#44ยท#46)์ด ๊ฐ์ ํ์ผ์ ยซ๊ผฌ๋ฆฌยป์ ํ ์คํธ๋ฅผ ๋ง๋ถ์ธ๋ค. ํ์ผ์ ๊ฐ๋ฅด๊ฑฐ๋ ํ ์คํธ๋ฅผ ๋ชจ๋๋ก ์ชผ๊ฐ์ง ์๋ ํ ๋ค์ ํ์ฐจ๋ ๊ฐ์ ์๋ฆฌ์์ ์ถฉ๋ํ๋ค(๊ณ ์น์ง ์๊ณ ์ ๋๋ค). - [rustjava-cp-tags-16-17-execution-fixtures] โ
โ
javac ์ ํ๊ทธ 17(condy)์ ยซ๋ธ๋คยป โ ์ง์ ํ์ฐจ์ ใ๋ชป ์ฐพ์๋คใ๋ฅผ ๋ค์ง์๋ค.
.rs๋ฐํ์ 0์ค. ์ฑํ ์ ์2026-09-16-cp-tags-15-18-parse#p2(worklog jsonadoptedProposals์ ๊ธฐ๋ก). โ โ ์ง์ ํ์ฐจ ๊ธฐ๋ก ์ ์ ์ด ์๋๋ผ ยซ์น๊ณยป๋ค โ ๊ทธ ํ์ฐจ๋ ใjavac ๊ฐ ๊ทธ ๋์ ๋ด๋ ํ๋ฒํ ์ฝ๋๋ฅผ ์ฐพ์ง ๋ชปํ๋คใ๊ณ โ ์ ์งํ๊ฒ ์ ์๋ค(๊ฑฐ์ง ๋จ์ธ์ด ์๋๋ค). โ โ ์ด ํ์ฐจ๊ฐ ์ฐพ์๋ค. โ ํ๊ทธ 17 ์ ์ฐ์ถ ์กฐ๊ฑด(์ด ์์ฅ์ ์ฒ์ ๋ฐ๋๋ค): โ **switch์ case ๋ผ๋ฒจ์ด ยซ์ ๊ทํ๋ enum ์์ยป์ด๊ณ ์ ํ์๊ฐ enum ์ด ์๋ ๋**(JEP 441). javac ์ด ๊ฐ ์์๋ฅผjava/lang/Enum$EnumDesc๋ก ๊ธฐ์ ํ๋ฉฐConstantBootstraps.invokecondy ๋ฅผ ๋ธ๋ค. โ ํ๋ฒํ enum switch ๋, sealed ์ธํฐํ์ด์ค pattern switch ๋ ยซ0ยป ์ด๋ค(๋ ๋ค ์ค์ธก โ ๊ทธ ๋๋ง ๋ณด๊ณ ใjavac ์ condy ๋ฅผ ์ ๋ธ๋คใ๋ก ๋ซ์ผ๋ฉด ํ๋ฆฐ๋ค). โ โ ํฌ์๋๋ฅผ ์๋ค: OpenJDK 26 ์์ฒด jmods 27,902 ํด๋์ค ์ค ํ๊ทธ 17 ๋ณด์ = ยซ1ยป(jdk/jpackage/internal/PackageBuilderยท 3ํญ๋ชฉ) โ ํ๊ทธ 16 ์ 1,747 ํด๋์ค ยท 8,434 ํญ๋ชฉ. โ โ 16 ์ ํํ๊ณ 17 ์ ยซ์ฌ์ค์ ์๋คยป โ ๊ทธ๋์ ์ค๋ฌผ ํฝ์ค์ฒ๊ฐ ๊ฐ์ ํ๋ค. โ ํฝ์ค์ฒtest-data/indy/ConstantKinds.class(javac--release 21ยท ์์ค ๋๋ด) โ โ ํ ํ์ผ์ด ๋ค ํ๊ทธ๋ฅผ ์ ๋ถ ๋ธ๋ค (MethodHandle 7 ยท MethodType 1 ยท Dynamic 3 ยท InvokeDynamic 3). โ ์ฐธ์กฐ JVM ์ด ๋๊น์ง ์คํํ๋ค(h3ยท rc=0). โ โ ์ ์์ด ์์ธกํ ์คํจ ํํ๊ฐ ยซ์ค์ฌํ๋คยป โ ๊ทธ๊ฒ์ ์ธก์ ํ ๊ฒ์ด ์ด ํ์ฐจ์ ๊ฐ์ด๋ค. ์ ์ ๋ฌธ๋ฉด: ใ์คํ์ ์ค์๊ฐ ๋จ์ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ณ ์ค๋ฌผ์์๋ง ๋๋ฌ๋๋ ํํ๊ฐ ์ด ํ์์์ ๊ฐ๋ฅํ๋คใ. โ โ ๊ฐ๋ฅํ๋ค:parse_all์is_double_entry์Dynamic(๋๋MethodType)์ ๋ํ๋ฉด โ ๊ฒฉ๋ฆฌ ๋จ์ ํ ์คํธparses_method_handle_family_tags๋ ยซokยป(๊ทธ๊ฒ์parse_tagged๋ฅผ ์ง์ ๋ถ๋ฅธ๋ค)์ธ๋ฐ โ ์ค๋ฌผ ํ์ ์ ํญ๋ชฉ์ด ๋ฐ๋ คClassFormatError๋ก ์ฃฝ๋๋ค. โ โ ์๋ฐฉํฅ โ ์ถ๋ ฅ์ผ๋ก: โํฝ์ค์ฒ ํ ์คํธ ์ ๊ฑฐ + ๊ฐ์ ๊ฐ์ โ ์ ์ค์ํธ โ 558 passed / 0 failed(green) = โ ๊ทธ ์ถ์ ๋ฌด๋ ๊ฒ์ด ์๋ฌด๊ฒ๋ ์์๋ค โํฝ์ค์ฒ ๋ณต์ + ๊ฐ์ ๊ฐ์ โ โ 2์ธต red(constant_pool๋จ์ + end-to-endClassFormatError: Invalid class file) ยท ๋ณต์ green. โ ๋จ์ธ๋ง๋ค ๋ฌด๋ ์ถ: ใ์คํ์ด ๋ฏธ์ง์์ด๋ผ ๋งํ๋คใ = end-to-end ยท โ **ใํฝ์ค์ฒ๊ฐ ๊ทธ ํ๊ทธ๋ฅผ ยซ์ค์ ๋ก ๊ฐ๊ณ ์๋คยปใ =constant_pool.rs๋จ์ ๊ณ์** (์ด๊ฒ์ด ์์ผ๋ฉด javac ํ์ฌ๋ฆผ์ผ๋ก condy ๊ฐ ์ฌ๋ผ์ ธ๋ end-to-end ๋ ์ด๋ก์ธ ์ฑ ์๋ฌด๊ฒ๋ ๋จ์ธํ์ง ์๋๋ค). โ ํ๊ทธ 15 ๋ ์ด ํ์ฐจ ๋ชซ์ด ์๋๋ค(ํ์ rustjava-ldc-tags-15-16-17-still-malformed) โ ๊ฒน์น๋ ๋จ์ธ์ ์ฐ์ง ์์๋ค. โcargo test --all558 โ 560 / 0 failed / 1 ignored(์ ๊ท 2 ยท โ ๊ฐ์ 0) ยท DoD 7์ค ์ ๊ฑด rc=0 ยท โverifier.rsยทinterpreter.rs๋ฌด์ ์ด ยท โBootstrapMethodsํ์ฑ 0์ค(ํ์ L ํฐ์ผ ๋ชซ). โ โ **[-fix ํ์ฐจ] ๊ฒ์ดํธโข๊ฐblocked(code-file-conflict)๋ก ์ฐ๋ค โ ํ์ #45 ๊ฐ ยซ๊ฐ์ ํ์ผ ๊ผฌ๋ฆฌยป์ ์ฐฉ์งํ๋ค.**git merge origin/main(โ ๋ฆฌ๋ฒ ์ด์คยทforce-push 0)์ผ๋ก base ๋ฅผ ๋น๊ธฐ๊ณ 3ํ์ผ์ ํฉ์งํฉ์ผ๋ก ํด์ํ๋ค:tests/test_class_format.rs(โ ๋ ํ ์คํธ๋ฅผ ๋ ๋ค โ ํฝ์ค์ฒ๊ฐConstantKinds.classโLambda.class๋ก ๋ฌ๋ผ ๊ฐ์ญ 0) ยทREPORT.mdยทSTATE.md(๋จผ์ ์ฐฉ์งํ #45 ๊ธฐ๋ก์ ์์, ๋ด ๊ธฐ๋ก์ ๋ค์). โ ์ ํ ๋ก์ง ๋ณ๊ฒฝ 0 ยท โconstant_pool.rs๋ ์๋ ๋ณํฉ(์ถฉ๋ ์๋). โ โ ํด์๊ฐ ๋ง๋ ยซ์ ๊ตฌ๋ถ ๋น ์คยป 1๊ณณ์ REPORT.md ์์ ๋ณต์ํ๋ค โ=======๋ง์ปค๊ฐ ๊ทธ ๊ตฌ๋ถ ์ญํ ์ ํ๊ณ ์์๋ค(์ด repo ์์ ๋ ๋ฒ์งธ๋ค). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #46 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). โ โ ์ด ๋ฆฌ๋์ง์ ๊ฒ์ดํธโข์ ยซ๋ ๋ฒยป์ด๋ค โ 1ํ์ฐจ(โฆ-execution-fixtures-merge)๊ฐblocked(2-cโcode-file-conflictยทtests/test_class_format.rs)๋ก ์์ ๋จธ์ง 0 ยท ๋๋ด 0 ์ด์๊ณ , ๊ทธ๊ฒ์ด-fix(base ๋น๊ธฐ๊ธฐ)๋ฅผ ๋ณ์๋ค. โ ๊ทธ ๊ฑฐ๋ถ๊ฐ ์ณ์๋ค. ๊ฒ์ดํธโก -fix ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ25bb796f๋ถ์ด๋(๋๋ด ์ ์ค์ธก โ ๋ก์ปฌยท์๊ฒฉยทPR head 4๊ฐ ์ผ์น) ยทci-presencerc=0 CI_GREEN(3๊ฑด ์ ๊ฑด ์๋ฃยท์ฑ๊ณต) ยท ์์ PR 0๊ฑด(head ๋ธ๋์นfeat/rustjava-cp-tags-16-17-fixtures๊ธฐ์ค) ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0(์ฐฉ์ง diff 10ํ์ผ์origin/main...HEAD๋ก ๋๊ณ ,.github/workflows/6๊ฐ ์ ๊ฑด deployยทpublishยทreleaseยทwranglerยทpages ์ดํ 0๊ฑด). โ โ ์ฐฉ์ง ์์ โ ํ์ #44 ๊ฐ ยซ๋ค์ยป ๊ฒน์น๋ค(ldcํ๊ทธ 15ยท16ยท17 ยท-fix+-fix2์นํ). โ **#44 ๋ ์ด ์ฐฉ์ง ์ง์ ๊น์งorigin/main = 20a6aa21์ base ๋ก ํฉ์งํฉํ์ผ๋ฏ๋ก**, ์ด ์ปค๋ฐ์ด ๋ค์ด๊ฐ๋ฉด ๊ทธ์ชฝtests/test_class_format.rs๊ผฌ๋ฆฌ์ ์์ฅ 2ํ์ผ์ด ๋ค์ ์ถฉ๋ํ๋ค โ โ **#44 ๋ base ๋น๊ธฐ๊ธฐ ํ์ฐจ๊ฐ ํ ๋ฒ ๋ ํ์ํ๋ค.** โ โ ๊ตฌ์กฐ์ ๊ทผ์ธ์ ๋จ๋๋ค โ ๋ค PR(#43ยท#45ยท#46ยท#44)์ด ๊ฐ์ ํ์ผ์ ยซ๊ผฌ๋ฆฌยป์ ํ ์คํธ๋ฅผ ๋ง๋ถ์ธ๋ค. ํ์ผ์ ๊ฐ๋ฅด๊ฑฐ๋ ํ ์คํธ๋ฅผ ๋ชจ๋๋ก ์ชผ๊ฐ์ง ์๋ ํ ๋ค์ ํ์ฐจ๋ ๊ฐ์ ์๋ฆฌ์์ ์ถฉ๋ํ๋ค(๊ณ ์น์ง ์๊ณ ์ ๋๋ค). โ โ **[-fix2 ํ์ฐจ] ์ ใ๊ฒ์ดํธโข ์ฐฉ์งใ ๋ธ๋ก์ ยซ์์ธกยป์ด์๊ณ ๋ฐฉํฅ์ด ๋ฐ๋๋ก ์คํ๋๋ค โ ์ ์ ํ๋ค.** ๊ทธ ๋ธ๋ก์ ใ#46 ์ด ๋จผ์ ์ฐฉ์งํด #44 ๋ฅผ ๊นฌ๋คใ๋ก ์ ์๋๋ฐ, ์ค์ ๋ก๋ โ **#44 ๊ฐ ๋จผ์ ์ฐฉ์ง(dc03593)ํด #46 ์ ๊นผ๋ค** (๊ฒ์ดํธโข 2ํ์ฐจ๊ฐblocked/code-file-conflict). โ ํ๋ฆฐ ๊ฒ์ ยซ๊ตฌ์กฐยป๊ฐ ์๋๋ผ ยซ์์ยป๋ค โ ใ๊ฐ์ ํ์ผ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋ ๋ PR ์ค ๋์ค ์ชฝ์ด base ๋น๊ธฐ๊ธฐ๋ฅผ ์น๋ฅธ๋คใ๋ ๊ทธ๋๋ก ์ฐธ์ด์๋ค. โ ์ด ํ์ฐจ๊ฐ ๊ทธ ๊ฐ์ ์น๋ ๋ค:git merge origin/main(โ ๋ฆฌ๋ฒ ์ด์คยทforce-push 0)์ผ๋ก base(dc03593)๋ฅผ ๋น๊ธฐ๊ณ 3ํ์ผ ํฉ์งํฉ. โtests/test_class_format.rsโ โ **#44 ์ 4ํ ์คํธ๋ฅผ ยซ์ ๋ถยป ๋ฐ์๋ค์๋ค**(โฆmethod_handle_familyโฆยทโฆillegal_constantโฆยทโฆbelow_its_minimum_class_file_versionโฆยทโฆno_bootstrap_methods_attributeโฆ) + ๋ดโฆevery_method_handle_family_tagโฆ+ #45 ์โฆlambda_class_reportsโฆโ ํ์ผ test fn 7 โ 11. โREPORT.mdยทSTATE.mdโ ์ฐฉ์ง๋ถ์ ์์, ๋ด ๊ธฐ๋ก์ ๋ค์. โ **STATE.md๋ ยซ์์ชฝ์ด ๊ฐ์ ๊ผฌ๋ฆฌ 1์คยป์ ๊ณต์ ํด** ๊ทธ ์ค์ด ์ถฉ๋๋ฉด ยซ๋ฐยป์ผ๋ก ์ ํ๋ค(๋จธ์ง ํ ํ๋ฆฟ 2-cโ ๊ฐ ๊ฒฝ๊ณ ํ ๋ฐ๋ก ๊ทธ ํ์) โ โ ๊ผฌ๋ฆฌ๋ฅผ ์์ชฝ์ ๋ณต์ ํด ๋ ๋ธ๋ก์ ๊ฐ์ ๋ซ์๋ค. โ ์ ํ ๋ก์ง ๋ณ๊ฒฝ 0 ยทclassfile/src/constant_pool.rs๋ ์๋ ๋ณํฉ(์ถฉ๋ ์๋). โ โ ๊ทธ๋ฆฌ๊ณ ์ด๋ฒ์ ยซ๋ค์ ๊ฒน์น ยป ํ์ ๊ฐ ์๋ค โ RustJava ์ด๋ฆฐ PR ์ #46 ํ๋๋ฟ์ด๋ค(์ค์ธก). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #46 ยท--merge(๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). โ โ โ ์ด ๋ฆฌ๋์ง์ ๊ฒ์ดํธโข์ ยซ์ธ ๋ฒยป์ด์๋ค โ ๊ทธ ์ฌ๋ฃ๋ฅผ ๋จ๊ธด๋ค: 1์ฐจโฆ-execution-fixtures-mergeblocked(code-file-conflictยท #45 ์ฐฉ์ง) โ-fixbase ๋น๊ธฐ๊ธฐ ยท 2์ฐจโฆ-fix-mergeblocked ร2(ci-pending์๋ ์ฌ๋ฐฐ์ฐจ 2ํ โ green โ ๊ทธ ๋คcode-file-conflictยท #44 ์ฐฉ์ง) โ-fix2base ๋น๊ธฐ๊ธฐ ยท 3์ฐจ(์ด ํ์ฐจ) ์ฐฉ์ง. โ 1ยท2์ฐจ์ ใํด์๋ฅผ ์๋ํ์ง ์๊ณ blockedใ๊ฐ ๋ ๋ค ์ณ์๋ค โ ๊ฒ์ดํธโข์ด ๊ฒ์ดํธโก๋ฅผ ์ผํค์ง ์๊ฒ ํ ๊ฐ์ด๋ค. โ โ ๊ทผ์ธ์ ยซ์์ปค ํ๋จยป์ด ์๋๋ผ ยซ๋ฐฐ์ดยป์ด์๋ค(์ด๊ด์ด ์์ฅ์ ์์ธ): ๊ฐ์ ํ์ผ์ ๋ฌด๋ ํ์ PR ๋์ ๊ฒ์ดํธโข๋ฅผ ๋์์ ์ด๋ฉด โ ๋จผ์ ์ฐฉ์งํ๋ ์ชฝ์ด ๋๋จธ์ง๋ฅผ ยซ๋ฐ๋์ยป ๊นฌ๋ค โ ํ๋ฅ ์ด ์๋๋ผ ๊ตฌ์กฐ๋ค. โ ๊ท์จ = ใ๊ฐ์ ํ์ผ์ ๋ฌด๋ ํ์ PR ์ ๊ฒ์ดํธโข๋ ์ง๋ ฌ๋ก ์ฐ๋คใ. ๊ฒ์ดํธโก-fix2ํ์ฐจ approve ยท ํ02628dbe๋ถ์ด๋(๋๋ด ์ ์ค์ธก โ ๋ก์ปฌยท์๊ฒฉยทPR headยท๋ฆฌ๋ทฐ ์ค2 4๊ฐ ์ผ์น) ยทci-presencerc=0 CI_GREEN ยทmergeableMERGEABLE/CLEAN ยท ์์ PR 0๊ฑด ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0(์ฐฉ์ง diff 10ํ์ผ ยท.github/workflows/6๊ฐ ์ ๊ฑด deploy ์ดํ 0๊ฑด). โ ์ฐฉ์ง ํ ๊ฒ์ฆ:tests/test_class_format.rsํ ์คํธ 11๊ฐ(๊ธฐ์กด 5 + ์ด ํ์ฐจ 1 + #44 ์ 4 + #45 ์ 1) ยทcargo test --all568 ์์ ์ค์ง ์์(=562(origin/main) + 2(#46) + 4(#44)๊ฐ์ฐ ๊ฒ์ฆ๊ฐ). - [rustjava-cp-tags-15-18-parse-and-honest-diagnosis] โ
โ
javac 9+ ํด๋์ค๊ฐ ยซํ์ยป์ด ์๋๋ผ ยซ๋ฏธ์ง์ยป์ด๋ผ๊ณ ๋งํ๋ค โ โ
์คํ์ 0์ค.
โ
์ /ํ ์คํ ์ถ๋ ฅ:
ClassFormatError: Invalid class fileโ โUnsupportedOperationException: Unsupported class file feature: invokedynamic. ํฝ์ค์ฒtest-data/indy/StringConcat.class=System.out.println("a" + args.length);ํ ์ค(javac --release 21ยท major 65). โ โ ํฐ์ผ โ ์ ๊ธ์ ์ง๋ชฉ์ด ยซํ ์นธ ๋ชจ์๋๋คยป โ ์ด ํ์ฐจ์ ๊ฐ์ฅ ๊ฐ์ง ์ฐ์ถ๋ฌผ์ด๋ค. ์์ํ ํ๊ทธ 15~18 ์ ์ ๋ถ ์ด๋ ค ๋ ์ฑclassfile/src/opcode.rs์0xba๋ถ๊ธฐ(map_res(โฆ, |_| Err(())))๋ง ์ ํ๋ณธ์ผ๋ก ๋๋๋ฆฌ๋ฉด ํฝ์ค์ฒ๋ โ ๋ค์Malformed๋ก ์ฃฝ๋๋ค(๊ฐ์ M3) โ โ ํ์ ์์ ์ ยซ๋ยป์ด๊ณ ํฐ์ผ์ ยซํ๋ยป๋ฅผ ์ ์๋ค. โ ๋ถํ ํ๋จ ์์ฒด๋ ยซ์ง์ง๋๋คยป(โช) โ ใ๊ฑฐ๋ถ โ ์ง์ใ ์์ ์นธ์ด ํ๋ ๋ ์๋ค๋ ๊ฒ์ ๋ง๊ณ , ๊ทธ ์นธ์ ๋ด์ฉ์ด ํ ํญ๋ชฉ ๋์๋ค. โ โ **todo!()๋ฏธ๋๋ฌ์ ยซ์ธก์ ยปํ๋ค โ ์ถ๋ก ์ด ์๋๋ค**(โชโ): verifier ์Opcode::Invokedynamic(_)๋ถ๊ธฐ๋ง ์ผ์ ์ ๊ฑฐํ๋ฉด โpanicked at jvm-bytecode/src/interpreter.rs:631: not yet implemented(ํธ์คํธ abort) โ ํ ํธ๋ฆฌ๋ ๊ฒ์คํธ ์์ธ(M4). โ โ ๊ทธtodo!()์ ํฝ์ค์ฒ ์ฌ์ด์ ์ ๊ฒ์ ยซ์ ํํ verifier ํ ์คยป์ด๊ณ , ๊ทธ๊ฒ์ด ์ ์๋ค(์ ์ผ ์ง์ ์ from_classfile์ ๋ ๋ฒ์งธ ๋ฌธ์ฅ). โ โ ๋๊ฐ๋ฅผ ์น๋ฅด์ง ์์๋ค(โก):parse_tagged์_ =>๋ถ๊ธฐ ๋ถ๋ณ ยทvalidate_constant_pool์ ์ ํ๊ทธ 3์ข ์ ํฉ์ฑ ๊ฒ์ฌ ์ถ๊ฐ(JVMS 4.4.8). โ ๊ธฐ์กด ํ๊ท ํ ์คํธ๊ฐ ยซํ๊ทธ 18 = ๋ฏธ์ง์ยป์ ์ฌ๋ก๋ก ์ฐ๊ณ ์์๋ค โ ์ด ํ์ฐจ๊ฐ ๊ทธ๊ฒ์ ์ง์ํ๊ฒ ๋ง๋ค์์ผ๋ฏ๋ก 13ยท14ยท19 ๋ก ๋ฐ๊ฟ ๊ฐ์ ๋จ์ธ์ ์ ์งํ๋ค. โ ๊ฐ์ 4์ข ์ ๊ฑด red(M1 ํ๊ทธ15 ์ ๊ฑฐ ยท M2 ํ๊ทธ18 ์ ๊ฑฐ ยท M30xba์๋ณต ยท M4 verifier ๋ถ๊ธฐ ์ ๊ฑฐ) ยท ๋ณต์ green. โcargo test --all554 โ 558 / 0 failed / 1 ignored(์ ๊ท 4 ยท โ ๊ฐ์ 0) ยท DoD 6์ข rc=0 ยท โ **interpreter.rs๋ฌด์ ์ด**(git diff --stat๋ถ์ฌ). โ **BootstrapMethods๋ฅผ ยซํ์ฑํ์ง ์์๋คยป** โ ์ด๋ฏธVec<u8>๋ก ๋ฐ์ ๋๊ณ ์๊ณ , ๊ทธ ์ธ๋ฑ์ค๋ฅผ ์ญ์ฐธ์กฐํ๋ ์ฝ๋๊ฐ ์ด ํ์ฐจ์ ์๋ค (verifier ๊ฐ ์ ์ ์์ ์ ๋์ผ๋ฏ๋ก ๋งํฌ๊ฐ ์ผ์ด๋์ง ์๋๋ค).ConstantPoolReference::InvokeDynamic์ด ์ธ๋ฑ์ค๋ฅผ ์๋ฌธ ๊ทธ๋๋ก ๋ ๋ค. โ ์ ๊ท ๊ด์ธก 1๊ฑด:ldc๋ก ์ค๋ฆฐ ํ๊ทธ 15ยท16ยท17 ์ โ ์ฌ์ ํMalformed๋ค(โฃ-2) โ ๊ฐ์ ์ข ๋ฅ์ ๊ฑฐ์ง๋ง์ด ํ ์๋ฆฌ ๋ ๋จ์ ์๋ค. โ ์๊ณ ๋จ๊ธด ์ก์:rustfmt๊ฐConstantPoolItem์ ๊ธฐ์กด ๋ณํ 6๊ฐ๋ฅผ ์ฌ๋ฌ ์ค๋ก ํผ์ณค๋ค(์ ๋ณํ์ดstruct_variant_width35 ๋ฅผ ๋๊ฒจ enum ์ ์ฒด๊ฐ ํ์ฅํ). ํ๋ ์ด๋ฆ์ ์ค์ด๋ฉด ํผํ์ง๋ง JVMS ์ฉ์ด๋ฅผ ๋ฒ๋ฆฌ๊ฒ ๋์ด ๋ฐ์๋ค์๋ค. - [rustjava-test-class-parallel-and-scratch-isolation] โ
โ
๋ณ๋ ฌํ์ ยซ์จ์ ์ ์ ยป๋ฅผ ํ
์คํธ ์์ค์ ๋ชป๋ฐ์๋ค โ โ
๊ฒฉ๋ฆฌ๋ ยซ๋ฃ์ง ์์๋คยป.
์ฑํ ์ ์
2026-09-12-null-guard-file-io-fixture#p0. โ ๋ณ๊ฒฝ =tests/์ฃผ์ 2๊ณณ๋ฟ(์ฝ์ ๋ง ยท ๋ฐํ์ยทํฝ์ค์ฒ ๋ฌด์ ์ด). โ 1์์๊ฐ ยซ๊ตฌํยป์ด ์๋๋ผ ยซํ๋จยป์ด์๋ค โ ์ ์ ์์ ์ด ใ์ค๋ ์ป๋ ๊ฒ์ด ์๋คใ๋ก ์ ๋ณดํ๊ณ ํฐ์ผ์ด ์ฌํ์ ์ ์์ผฐ๋ค. โ โ ์ ๋ณด๋ ์ณ๋ค. โ โ ๊ทธ๋ฌ๋ ์ ์์ด ์ ์ ๋ฅผ ยซํ๋ยป๋ก ์ ์ ๊ฒ์ ํ๋ ธ๋ค โ ์ค์ธกํ๋ ยซ์ ยป์ด๋ค: โดtest_class๊ฐ ๊ทธ ๋ฐ์ด๋๋ฆฌ์ ์ ์ผํ ํ ์คํธ ํจ์ โตโ **tests/test_real_jvm.rs๊ฐ ยซ๊ฐ์test-data/๋ฅผ ์ํยปํ๋๋ฐ#[ignore]** โถcargo test๊ฐ ํ ์คํธ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฐจ ์คํ(์คํ ๋ก๊ทธ๋ก ํ์ธ). โ โต๊ฐ ์ ์์ด ๋ชฐ๋๋ ยซ๊ฐ์ฅ ์์ยป ์ ์ ๋ค โ#[ignore]ํ ์ค์ ์ง์ฐ๋ฉด ๊ฐ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋๋ ํจ์๊ฐ ๋์ด ๋๋ค (์ค๋์ โถ ๋์ ๋ฌดํดํ๋ โcargo nextest๋ฅ๋ก ์ฎ๊ธฐ๋ฉด ๊ทธ ๋ฐฉ์ด๊ฐ ์ฌ๋ผ์ง๋ค). โ ๊ธฐ๋ก์ ยซํ ์คํธ๊ฐ ์ฝ๋ ์๋ฆฌยป์ ๋๋ค(๊ณ์ฝ 2):test_class์ํ ํจ์ ์(์ธ ์ ์ + ๊นจ์ง๋ฉด ๋ฌด์์ด ์ผ์ด๋๋์ง + ๋ณ๋ ฌํ ์ ํ ์กฐ๊ฑด) ยทtest_real_jvm์#[ignore]๋ฐ๋ก ์(๊ทธ ์์ฑ์ด ๋ง๊ณ ์๋ ๊ฒ) โ โ ๋ณ๋ ฌํํ๋ ค๋ ์ฌ๋์ด ยซ๋ฐ๋์ ์ฌ๋ยป ๋ ์๋ฆฌ๋ค. โ ๋์กฐ์ ยซ์์ยป(Acceptance ๊ฐ ํ์ฉํ ๊ฒฝ๋ก) โ ๋ชจ์ ๋ณ๋ ฌ์ ์ธ์ฐ๋ ค๋ฉด ๊ณ์ฝ 3 ์ด ๊ธ์งํ ๋ณ๋ ฌํ๋ฅผ ๋จผ์ ํด์ผ ํด ์ต์ง ํฝ์ค์ฒ๋ฅผ ๋ง๋ค์ง ์์๋ค. โcargo test --all554 / 0 / 1(์ ์ฒด ์คํ) ยท DoD 7์ข rc=0. โ ๋ฐฉ์ด๋ ยซ์ฃผ์ยป์ด์ง ๊ธฐ๊ณ ๊ฐ์ ๊ฐ ์๋๋ค โ ์๊ณ ๊ณ ๋ฅธ ๊ฐ์ด๊ณ (๊ด์ฉ๋ง ๋๊ณ ์งํฌ ์ถ์ด ์๋ค), ๋ณ๋ ฌ ๋ฌ๋ ๋์ ํ์ฐจ๊ฐ ์ ํ ์กฐ๊ฑด์ผ๋ก ํจ๊ป ์ง๋ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #42 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ8f8443ea๋ถ์ด๋(ํด์ยท๋๋ด ์ ์ค์ธก) ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. โ ์ฐฉ์ ์CONFLICTINGโ PR #40ยท#41 ์ ์ฐฉ์ง๋ก ์์ฅ 2ํ์ผ์ด ๊ฒน์ณค๋ค(โ ์ฝ๋ ์ถฉ๋ 0) ยท ํฉ์งํฉ ํด์(์๋ฐฉํฅ ์์ค 0 ยท ํญ๋ชฉ ๋ฐ์ดํธ ๋์ผ). โ โ ์ง์ ํ์ฐจ๊ฐ ๋จ๊ธด ยซ๋ง์ปค=๊ตฌ๋ถ์ ยป ๊ท์จ์ด ๊ณง๋ฐ๋ก ๊ฐ์ ํ๋ค โ ํด์ ยซ์ /ํยป ๊ฒฝ๊ณ๋ฅผ ์ธ์ด ์ด ํ์ฐจ๊ฐ ๋ง๋ ๊ฒฐ์ 1๊ณณ์ ์ฐพ์ ๋ณต์ํ๊ณ , โ ์ ์ฌ 4๊ณณ์ ๊ทธ๋๋ก ๋๋ค(๊ณ์ฝ 7). โ ํด์ ํ ๊ฒฝ๊ณ ๊ฒฐ์ 4 = ์ ์ฌ ๊ทธ๋๋ก ยท ์ ๊ท 0. โ โ ์ด ์ฐฉ์ง๋ก ์ด๋ฆฐ PR ์ด ยซ0ยป ์ด ๋๋ค โ null ๊ฐ๋ ์ถ(๊ฐ์ฌ โ ๊ท๊ฒฉ ์ผ๋ถ โ ํ์ผ IO โ zip โ net)๊ณผ ๊ทธ ๋ถ์ฐ๋ฌผ์ด ์ ๋ถ ๋ซํ๋ค. - [rustjava-fixture-subclassing-abstract-runtime-classes] โ
โ
๊ฒ์คํธ ์๋ธํด๋์ฑ์ ยซ๋๋คยป โ
java/net๊ฐ๋ 2๊ณณ์ ์ ๊ฐ๋ค(.rs0์ค). ์ฑํ ์ ์2026-09-12-null-guard-spec-triage#p1. ํฝ์ค์ฒtest-data/NullNetGuards(2์ผ์ด์ค). โ ์ด ํฐ์ผ์ ยซ์กฐ์ฌยป๊ฐ 1์์์๋ค โ ์ ์ ์์ ์ด ใ์ ๋๋ฉด ๊ทธ ์ฌ์ค์ด ์ฐ์ถ๋ฌผใ์ด๋ผ ์ ์๋ค. โ โ ํ์ = ยซ๋๋คยป. โ ์ค์ธก:URLStreamHandler๋ฅผ ์์ํด ์ถ์openConnection(URL)๋ง ๊ตฌํํ ์ค์ฒฉ ํด๋์ค๋กprotected setURL(...)ํธ์ถ โ ์ธ์คํด์คํยท๋๋ฌยทNPE ์ ๋ถ ๊ด์ธก.JarURLConnection๋super(null)+ ์ถ์getJarFile()๊ตฌํ์ผ๋ก ๊ฐ์ ํํ๊ฐ ์ ๋ค. โ โ ์ ๋ก๊ฐ ์ด๋ฏธ ์์๋ค โ ๊ธฐ์กด ํฝ์ค์ฒ๊ฐClassLoader(๋ฐํ์ ์ ๊ณต ํด๋์ค)๋ฅผ ์์ํ๋ค โ โ ์ง์ง ๋ฏธํ์ธ์ ใ๋ฐํ์ ํด๋์ค ์์ใ์ด ์๋๋ผ ยซ์ถ์ +protected์ง์ ์ ยป ์กฐํฉ๋ฟ์ด์๋ค(์กฐ์ฌ ์ ์ ๋ฅผ ์ขํ์ด์ผ ๋ ์๋ค). โ ์ ๊ทผ ์ ์ด๋ ์ฅ์ ๊ฐ ์๋์๋ค(์ด ๋ฐํ์์ ์ ๊ทผ ํ๋๊ทธ ๋ฏธ๊ฐ์ ) โ ๋งํ ์ ์๋ ํด๋์ค ๋งํฌยท์ถ์ ๋ฉ์๋ ๊ตฌํ์ด ํต๊ณผํ๋ค. โ โ ์๋ฐฉํฅ โ ยซ์ /ํยป๊ฐ ๋ค์งํ๋ค: ํฝ์ค์ฒ๋ฅผ ์ผ์ ์ ๊ฑฐํ๋ฉด ๋ ๊ฐ์ ์ด ๋ ๋ค green(์ ์ ๊น) โ ํฝ์ค์ฒ๊ฐ ์์ผ๋ฉด ๋ ๋ค RED(class_instance.rs:108) ยท ๋ณต์ ok. โcargo test --all554 / 0 / 1(์ ์ฒด ์คํ) ยท DoD 7์ข rc=0 ยท โ.rs๋ฌด์ ์ด ยท ๋ฐํ์ ๊ธฐ๋ฅ ์ถ๊ฐ 0(๊ณ์ฝ 3ยท๋์ ์ โ). โ ๊ฐ์ฌ ์ ๋ถ๋ณ(N 1,175 ยท M 25 ยท K 11) โ ๋น์ฐํ๋ค: ์ด ํ์ฐจ๋ ๊ฐ๋๋ฅผ ๋ํ์ง ์๊ณ ์ํ๋ง ๋ํ๋ค. โ ๋ฏธ์ปค๋ฒ ๋๋จธ์ง 1๊ณณ(ZipFile.getInputStream)์ ๋์ด๋ค์ด์ง ์์๋ค(๋์ ์ โ) โ ํ์ PR #40 ๋ชซ์ด๊ณ ํ์ผ์ด ๊ฒน์น์ง ์๋๋ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #41 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ5bedc1bb๋ถ์ด๋(ํด์ยท๋๋ด ์ ์ค์ธก) ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. โ ์ฐฉ์ ์CONFLICTINGโ PR #40 ์ด ๋จผ์ ์ฐฉ์งํด ์์ฅ 2ํ์ผ ์ต์๋จ์ด ๊ฒน์ณค๋ค(โ ์ฝ๋ ์ถฉ๋ 0 โ 2-cโ ์น์ธ ๋ฒ์). ํฉ์งํฉ์ผ๋ก ํด์(์ค ๋จ์ ์๋ฐฉํฅ ์์ค 0 ยท ํญ๋ชฉ ๋ฐ์ดํธ ๋์ผ). โ ํด์๊ฐ ๋ง๋ ยซ์ ๊ตฌ๋ถ ๋น ์คยป 1๊ณณ์ ๋ณต์ํ๋ค โ=======๋ง์ปค๊ฐ ๊ตฌ๋ถ ์ญํ ์ ํ๊ณ ์์๋ค. โ ๊ฐ์ ํํ์ ยซ์ ์ฌยป ๊ฒฐ์ 4๊ณณ(2026-08-24 ๊น์ง ๊ฑฐ์ฌ๋ฌ ๊ฐ๋ค)์ ยซ์๋์ง ์์๋คยป(๊ณ์ฝ 7 โ ์ด๊ด ์น๊ณ ์์ฌ). โ โ ์ด ์ฐฉ์ง๋ก null ๊ฐ๋ ์ถ์ ยซ๋ฏธ์ปค๋ฒยป๊ฐ ยซ0ยป ์ด ๋๋ค(#40 ์ 1๊ณณ + ์ด ํ์ฐจ 2๊ณณ์ด ๋ง์ง๋ง์ด์๋ค). - [rustjava-zip-output-stream-minimal-for-fixture-reachability] โ
โ
**
ZipFile.getInputStream๊ฐ๋๋ฅผ ์ ๊ฐ๋ค โ ๊ทธ๋ฐ๋ฐ โZipOutputStream์ ยซ๋ง๋ค์ง ์์๋คยป(๋ฐํ์ 0์ค).** ์ฑํ ์ ์2026-09-12-null-guard-spec-triage#p0. ํฝ์ค์ฒtest-data/ZipGuards. โ โ ์ ์์ ยซ๊ทผ์ธ ์ง๋จยป์ด ํ๋ ธ๋ค โ ใ๊ทผ์ธ์ZipOutputStream๋ถ์ฌใ์์ผ๋,ZipFile์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด โ zip ์ด ยซํ๋ ์์ผ๋ฉดยป ๋๊ณ ๊ทธ๊ฒ์ ยซ๋ฐํ์์ด ๋ง๋คยป ํ์๊ฐ ์๋ค. โ ๊ตฌํ 0์ค. โ ํฐ์ผ์ด ์ด ๊ฒฐ๋ง์ ๋ฏธ๋ฆฌ ํ์ฉํ๋ค(๋์ ์ โ: ใ๋ค๋ฅธ ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด ๋ฐํ์์ ๊ตฌํํ์ง ์๋ ๊ฒ์ด ๋ ์ผ ๋ตใ). โ โ ๋ ์ผ ๊ฒฝ๋ก๋ฅผ ยซ๋ ๋จ๊ณยป ๋ด๋ ค๊ฐ๋ค: โด๋ฏธ๋ฆฌ ๋ง๋ zip ์ ์ปค๋ฐํ๋ ์๋ณต ์ฑ๋ฆฝ โZipOutputStream๋ถ์ ํ๋ช โตโ ๊ทธ๋ฐ๋ฐ ์ ๋ฐ์ด๋๋ฆฌ์กฐ์ฐจ ๋ถ์ โtest-data/test.jar๊ฐ ์ด๋ฏธ ์๊ณ jar ์ zip ์ด๋ค โ ์์ziptest.zip์ ์ง์ ๋ค(์ถ๊ฐ ๋ฐ์ด๋๋ฆฌ 0). โ ์์นด์ด๋ธ ยซ๋ด์ฉยป์ ์์กดํ์ง ์๋๋ค โgetEntry๋ฅผ ๋ถ๋ฅด์ง ์๊ณ ์ด๋ฆฌ๊ธฐ๋ง ํ๋ฉด ๋๋ค(๊ฒฐํฉ๋๋ฅผ ์ผ๋ถ๋ฌ ๋ฎ์ท๋ค). โ โ ์๋ฐฉํฅ: ์ฐฉ์ ์ ๊ฐ์ ๊ฐ์ ์ด โ green(์ ์ ๊น) โ ์ด ํ์ฐจ ๋ค โ red(class_instance.rs:108ํธ์คํธ abort) ยท ๋ณต์ ok. โcargo test --all554 / 0 / 1(์ ์ฒด ์คํ) ยท DoD 7์ข rc=0 ยท โ.rs๋ฌด์ ์ด ยท deflateยทZipEntry๋ฉํ ๋ฌด์ ์ด(๊ณ์ฝ 3). โ ๋จ์ ํ๊ณ๋ ยซ๋ค๋ฅธ ์ถยป์ด๋ค โ ๊ฒ์คํธ๊ฐ zip ์ ยซ์ฐ๋ยป ๊ฒฝ๋ก๋ ์ฌ์ ํ ์๋ค. ๊ทธ๊ฒ์ด ํ์ํด์ง๋ ๊ฒ์ ใ๊ฒ์คํธ๊ฐ zip ์ ๋ง๋ ๋คใ๋ ์๊ตฌ๊ฐ ์๊ธธ ๋์ด์ง ๊ฐ๋ ์ ๊ธ ๋๋ฌธ์ด ์๋๋ค. โ ๋ถ์ ๊ด์ธก(๊ณ ์น์ง ์์๋ค):ZipFile.close()๊ฐ ๋ฏธ๋ฑ์ฌ๋ผ ํฝ์ค์ฒ ์ดํ์ดNoSuchMethodError๋ฅผ ๋ง์๋ค โ ํ์ ์ ์. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #40 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํc7874993๋ถ์ด๋(๋๋ด ์ ์ค์ธก) ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. โ ํ์ PR #41ยท#42 ๊ฐ ์ด ์ฐฉ์ง๋ก ์์ฅ 2ํ์ผ์์ ์ถฉ๋ํ๋ค โ ๊ณ์ฝ 2-c ์ ยซ์ ์ยป ํํ(์ฝ๋ ์ถฉ๋ 0 ยท ์ ๋ค.rs๋ฌด์ ์ด). ๊ทธ ๋ ํ์ฐจ๊ฐ base ๋น๊น + ํฉ์งํฉ์ผ๋ก ํด์ํ๋ค. - [rustjava-null-guard-fixture-for-file-backed-io] โ
โ
ํ์ผ ๊ธฐ๋ฐ IO ๊ฐ๋ 6๊ณณ์ ยซํ๊ท๋ก ๋ฌถ์๋คยป โ
.rs๋ณ๊ฒฝ 0. ์ฑํ ์ ์2026-09-11-null-guard-audit-and-io-buffer-guards#p1. ํฝ์ค์ฒtest-data/NullFileIoGuards(7์ผ์ด์ค = 6๊ณณ + โ ์ ๋ฆฌ ๋จ์ธ 1). โ โ **ใ๊ฐ๋๊ฐ ์๋คใ์ ใ๊ฐ๋๊ฐ ์ ๊ฒจ ์๋คใ๋ ๋ค๋ฅธ ๋ฌธ์ฅ์ด๋ค** โ ๊ทธ 6๊ณณ์ ๊ฐ๋๊ฐ ๋ค์ด๊ฐ ๋ค์๋ ์ง์๋ ์๋ฌด๋ ๋ชจ๋ฅด๋ ์ํ์๋ค (ํฝ์ค์ฒ๊ฐ ์ด์ ์๋ ํ์ผ ํธ๋ค์ ๋ง๋ค ์ ์์๋ค). โ โ ์ฐ์ถ๋ฌผ์ ยซ๊ฐ๋ยป๊ฐ ์๋๋ผ ยซ๊ฐ๋๋ฅผ ์งํค๋ ์ํยป์ด๋ค. โ ์ ์(๋ด๊ฐ ์ ๋ค ยท ํธ๋ฆฌb50d7d0c):FileInputStream.read([BII)ยทFileOutputStream.write([BII)ยทRandomAccessFile์read([B)ยทread([BII)ยทwrite([B)ยทwrite([BII)= 6 (๊ฐ๋ ์ ๋ฌด๋ ์์ค ยท ์ํ ์ ๋ฌด๋ ๊ฐ์ ์ผ๋ก ยซ์ธก์ ยป). โ โ ๊ฐ์ ๋์กฐ๋ฅผ ยซ์๋ฆฌ๋ง๋คยป ํ๋ค โ 6/6 ์ ๊ฑด red(ํ ์๋ฆฌ๋ก ์ผ๋ฐํํ์ง ์์๋ค). ๋งค ํ์ฐจ ๋ค ํธ๋ฆฌ ๋ณต์ ํ์ธ. โ โ ์ ๋ฆฌ๋ฅผ ยซ์ํ์ ์ผ๋ถยป๋ก ๋ง๋ค์๋ค โ ๋์์delete()ํexists()๋ฅผ ์ถ๋ ฅํ๊ณ ๊ธฐ๋๊ฐ์ดgone์ด๋ผ โ ์คํฌ๋์น ํ์ผ์ด ๋จ์ผ๋ฉด ๊ทธ ์์ฒด๋ก ์ํ์ด ์ง๋ค(์ฌ๋์ด ๋ฐ๋ก ๋ณผ ํ์๊ฐ ์๋ค). ์คํ ํ ์์ฌ 0. โ ํ๋ค๋ฆผ 0(๊ณ์ฝ 5):SKIPยทcommand -vยทOS ๋ถ๊ธฐยท์ ๋๊ฒฝ๋ก ์ ๊ฑด 0 ยท โ 3ํ ์ฌ์คํ ๋์ผ. โcargo test --all554 / 0 / 1(์ ์ฒด ์คํ ยท ๊ณ์ ๋ถ๋ณ์ด ๋ง๋ค) ยท DoD 7์ข rc=0 ยท ๊ธฐ์กด ํฝ์ค์ฒ ๊ฐ์ 0. โ ์๊ณ ๋จ๊ธด ๊ฒ: ์ด ํฝ์ค์ฒ๊ฐ ยซํ์ผ์ ์ฐ๋ ์ฒซ ์ํยป์ด๊ณ ๊ณ ์ ์ด๋ฆ์ ์ด๋ค โtest_class๋ฅผ ๋ณ๋ ฌํํ๋ฉด ์ถฉ๋ํ๋ค (์ค๋์ ํ ํจ์๊ฐ ์ํํ๋ฏ๋ก ๋ฌดํด). โ.gitignore์ ๋ฃ์ง ์์๋ค โ ๋ฃ์ผ๋ฉด ใ๋จ์๋ ์ ๋ณด์ธ๋คใ๊ฐ ๋์ด ์ ๋จ์ธ์ด ๋ฌด๋ ฅํด์ง๋ค. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #39 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ1270ff93๋ถ์ด๋(๋๋ด ์ ์ค์ธก) ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. โ โ ์ฐฉ์ ์CONFLICTING์ด์๋ค โ ๊ทธ๋ฌ๋ ยซ์ ์ยป์ด๋ค(๊ณ์ฝ 2-c): PR #38 ์ด ๋จผ์ ์ฐฉ์งํดSTATE.mdยทREPORT.md์ต์๋จ์ด ๊ฒน์ณค๋ค. โ ์ฝ๋ ์ถฉ๋ ยซ0ยป(์์ฅ 2ํ์ผ ๋ฐ ์ถฉ๋ 0 โ 2-cโ ์น์ธ ๋ฒ์) ยท ํด์ = ํฉ์งํฉ(์์ชฝ ํญ๋ชฉ ์ ๊ฑด ๋ณด์กด ยท ์ค ๋จ์ ์๋ฐฉํฅ ์์ค 0). โ โ ๊ทธ ํด์ ์ค์ ยซ๋ด๊ฐ ์ ํ์ฐจ์ ๋ธ ๊ฒฐํจยป์ ์ฐพ์ ๊ณ ์ณค๋ค โ #38 ๋จธ์ง ํ์ฐจ๊ฐ ๊ฒ์ดํธโข ๋ธ๋ก์- [ํค๋ ยซ์ยป์ ๋ผ์## ์๋ฃ๋ฐ๋ก ๋ฐ์ ๋ ์์๋ค(origin/main ์ ์ด๋ฏธ ๊ทธ ํ์). ํฉ์งํฉ ๋ค์๋ ๊ทธ๊ฒ์ด โ **#39 ํญ๋ชฉ์ ๊ผฌ๋ฆฌ์ฒ๋ผ ์ฝํ** ๋ ๋๋นด๋ค. โ #38 ํญ๋ชฉ ยซ์ยป์ผ๋ก ์ฎ๊ฒผ๋ค(๋ค๋ฅธ ํญ๋ชฉ์ ๊ฒ์ดํธโข ๊ธฐ๋ก๊ณผ ๊ฐ์ ์๋ฆฌ). โ ์ถฉ๋ hunk ์theirs์ชฝ์ด ๋ฐ๋ก ๊ทธ ๋ธ๋ก์ด๋ผ ยซํด์ยป์ ์ผ๋ถ๋ค. - [rustjava-null-guard-spec-triage-for-constructor-and-collection-params] โ
โ
๋จ์ 20๊ณณ์ ยซJDK ๊ท๊ฒฉยป์ผ๋ก ์ผ๋ถํ๊ณ ยซ๋ฏธ์ถฉ์กฑยป๋ง ๋ซ์๋ค โ ์ฐ์ถ๋ฌผ์ ๊ฐ๋๊ฐ ์๋๋ผ ยซ๋ถ๋ฅยป๋ค.
์ฑํ ์ ์
2026-09-11-null-guard-audit-and-io-buffer-guards#p0. โ ์ ์ํ ์ ๋ณธ =docs/worklog/2026-09-12-null-guard-spec-triage.md(์ฌ๊ธฐ์ ๋ค์ ์ฐ์ง ์๋๋ค). โ ์ผ๋ถ: โNPE ์๋ฌด 11 ยท โnull ํฉ๋ฒ 1 ยท โ๊ท๊ฒฉ ์ ํฉ ๊ฒ์คํธ ์ฝ๋๋ก๋ ๋๋ฌ ๋ถ๊ฐ 8(= ๋ด๊ฐ ๋ค์ ์ผ 20). โ โ โ 11 ์ค ยซ๊ฐ๋๋ 9ยป ๋ค โPattern.matchesยทsplit์ ๊ท๊ฒฉ์ NPE ์๋ฌด์ด๋ ๋ฐํ์์ด ์ด๋ฏธ NPE ๋ฅผ ๋์ง๋ค(๊ฐ์ฌ์ ์๋์ ์คํ์ด์๋ค) โ ๊ฐ๋๋ฅผ ๋ฃ์ผ๋ฉด ์ฃฝ์ ์ฝ๋๋ค. โ **ใโ = ๊ฐ๋ใ๊ฐ ์๋๋ผ ใโ ์ด๋ฉด์ ยซ๋ฏธ์ถฉ์กฑยป์ผ ๋๋งใ์ด๋ค. โ ๊ท๊ฒฉ ๊ทผ๊ฑฐ๋ ยซ๊ด์ธกยป์ด๋ค** โAGENTS.md๊ฐ OpenJDK ์์ค ์ฐธ์กฐ๋ฅผ ๊ธ์งํ๋ฏ๋ก(src.zip๋ก์ปฌ ์ค์ฌํ๋ ์ด์ง ์์๋ค) ํ์ฉ ์ถ์ธ observable behavior ๋ก ์ฐธ์กฐ JVM(OpenJDK 26.0.1) ์ ๊ฐ์ ํธ์ถ์ ๋ฃ์ด ์๋ค. โ ๋๊ฐ๋ฅผ ์ ๋๋ค: ์ธก์ ํ๋ณธ 26 โ ํ๊น 8 โ null ๊ณ์ฝ ๋ถ๋ณ์ด๋ผ๋ ๊ฐ์ ์ด๊ณ , ๋ฐ์ฆ๋๋ฉด โ/โ ๊ฐ ํ๋ค๋ฆฐ๋ค. โ โ โ ๋ ยซ๋๋ฌ ๋ถ๊ฐยป๊ฐ ์๋๋ผ ยซ๊ท๊ฒฉ ์ ํฉ ๊ฒ์คํธ ์ฝ๋๋ก๋ ๋๋ฌ ๋ถ๊ฐยป๋ค โ ์ด ๋ฐํ์์ ์ ๊ทผ ํ๋๊ทธ๋java.*๊ธ์ง๋ ๊ฐ์ ํ์ง ์๋๋ค(์ค์ธก 0๊ฑด) โ ์์ผ๋ก ๋ง๋ ๋ฐ์ดํธ์ฝ๋๋ package-private ๋ฉค๋ฒ๋ฅผ ๋ถ๋ฅผ ์ ์๋ค. โ ๊ทธ ํ์ ์ ์จ๊ธฐ์ง ์์๋ค. โ ์ฐฉ์ ยซ์ ยป ๋ฐํ์ ์ค์ธก์ด ๋ถ๋ฅ๋ฅผ ๊ฐ๋๋ค(์ฌ์ดํธ๋ณ ๊ฐ๋ณ ํฝ์ค์ฒ 8ํ): 6๊ณณ ํธ์คํธ abort โPattern2๊ณณ ์ด๋ฏธ NPE. โ ๊ฐ๋๋ณ ์ปค๋ฒ๋ฆฌ์ง๋ ์ธก์ (9๊ณณ ๋จ์ผ ๊ฐ์ ): 6 red ยท 3 green โ ๋ฏธ์ปค๋ฒ 3์ ใํ ์คํธ ๋ฏธ์์ฑใ์ด ์๋๋ผ โ ํฝ์ค์ฒ ๋๋ฌ ๋ถ๊ฐ (JarURLConnectionยทURLStreamHandler๋ABSTRACTยทZipFile.getInputStream์ZipOutputStream๋ถ์ฌ๋ก zip ์ ๋ชป ๋ง๋ ๋ค). โ ๊ฐ์ฌK20 โ 11 โ โ ๊ทธ 11 ์ ยซ๋ฏธํด๊ฒฐยป๋ก ์ฝ์ง ๋ง๋ผ(โ1 + โ8 + ์คํ2 โ ๊ท๊ฒฉ์ ๋ซ์ ๊ฒ 0). โcargo test --all554 / 0 / 1(์ ์ฒด ์คํ) ยท DoD 7์ข rc=0 ยท โโ ๋ฌด์ ์ด(diff ์ ๊ทธ ํ์ผ 0). โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #38 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ934b3944๋ถ์ด๋(๋๋ด ์ ์ค์ธก) ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. โ ๊ฒ์ minor 5๊ฑด์ ยซ๊ณ ์น์ง ์์๋คยป(๊ณ์ฝ 7 โ ์ด๊ด ์น๊ณ): โดโ ์ด๋จธ๋ฆฌ ใ๊ท๊ฒฉ์ด ยซ์๊ตฌยปใ๊ฐ 6์๋ฆฌ ์ค 3์๋ฆฌ(readUTFยทFileInputStream(File)ยทJarURLConnection(URL))์์ Java 8 Javadoc ๋ณด๋ค ๊ฐํ๋ค(๊ทธ ์๋ฆฌ ๊ทผ๊ฑฐ๋ ยซ๊ด์ธก๋ ๊ตฌํ ๊ฑฐ๋ยป์ด๋ค โ โ ์ฒ๋ถ์ ๋ถ๋ณ: ํ ๊ฑฐ๋์ด ํธ์คํธ abort ๋ผ ์ด๋ ์ถ์ผ๋ก๋ ์ค๋ต์ด๊ณ ํ์ฐจ๊ฐ ๊ทผ๊ฑฐ๋ฅผ ยซ๊ด์ธกยป์ด๋ผ ๋ณธ๋ฌธ์ ์ ์ธํ๋ค) โตFileURLHandlerโ ๊ทผ๊ฑฐ์ ยซ์ค๋์ ํธ์ถ๋ถยป ๋ ผ๊ฑฐ๊ฐ ์์๋ค โถโโ ์ฌ์ ๊ฐ ์ฝ๋์ ์๋ค(worklog ์๋ง โ ํนํurl.rs์handler๋ โ ๋ค์ ํ์ฐจ๊ฐ ยซ๋น ์ง ๊ฐ๋ยป๋ก ์ค์ธํด ๋ฃ์ผ๋ฉด ๊ทธ ์์ฒด๊ฐ ๊ท๊ฒฉ ์๋ฐ์ด๋ค) โทํ์ PR #39 ์ ์์ฅ 2ํ์ผ์ด ๊ฒน์น๋ค โธ์์ปค ํธ๋ฆฌ ๋ฏธ์ปค๋ฐ ์์ฌ. โ โ โท๋ ์ด ํ์ฐจ๊ฐ ยซ์ฒ๋ถยปํ๋ค โ ์๋ ใ์ฐฉ์ง ์์ใ ์ฐธ์กฐ. - [rustjava-null-guard-audit-remaining-runtime-entrypoints] โ
โ
๋ฐํ์ ์ ์ฒด๋ฅผ ยซ์ธ๊ณ ยป(๊ฐ์ฌ) ๊ทธ์ค ยซ๋ฐ์ดํฐ ์ ์ก ๋ฒํผยป 18๊ณณ์ ๊ฐ๋๋ฅผ ๋ฃ์๋ค.
์ฑํ ์ ์
2026-09-11-null-guard-string-init-and-arraycopy#p0. ํฝ์ค์ฒtest-data/NullBufferGuards13์ผ์ด์ค(๊ฐ๋ 12/18 ์ปค๋ฒ โ โ 18๊ณณ ์ ๊ฑด ๋จ์ผ ๊ฐ๋ ๊ฐ์ ์ผ๋ก ยซ์ธก์ ยป). โ โ ๊ฐ์ฌ ํ โ ์ฌ์ธก 2026-09-12 ยท โ ํธ๋ฆฌ ๋ณ๊ธฐ(์ ๋ณธ =scripts/audit-null-guards.py): base6da7d66f= N 1,175 ยท M 52 ยท K 38 โ head = N 1,175 ยท M 34 ยท K 20 โ ฮM = ฮK = 18(์๊ธฐ์ ํฉ). โ โ **[๊ฒ์ดํธโก R2 ์ ์ ] ์ปค๋ฐํ ์คํฌ๋ฆฝํธ๊ฐ M ์ ยซ2 ๋ฎ๊ฒยป ์ ๋ค**(50/32 ๋ก ์ ๊ณ ) โfn์ ๊ท์์ด ์ด๋ฆ ๋ค(๋ฅผ ์ฆ์ ์๊ตฌํ๊ณ ์ ๋๋ฅผpub/async๋ก๋ง ๋ฐ์ โ ์ ๋ค๋ฆญ fnยทpub(crate)/pub(super)์ ์ธ 34๊ฐ๊ฐ ํต์งธ๋ก ์ ๋ณด์๋ค. โ ๊ณ ์น ๋ค ์ธ ํธ๋ฆฌ ร ์ธ ๋ ๋ฆฝ ๊ตฌํ์ด ์ ๊ฑด ์ผ์นํ๋ค(์๋). โ โ ๊ทธ๋ฆฌ๊ณ K ๊ฐ ๋ฌด์ฌํ๋ ๊ฒ์ ยซ์ค๊ณ๊ฐ ์๋๋ผ ์ดยป์ด๋ค โ ๋๋จผ fn 2๊ฑด์ด ์ฐ์ฐํas_proto๋ฏธ๋ฑ์ฌ์์ ๋ฟ์ด๊ณ , ์ ๋ค๋ฆญยทpub(crate)์ง์ ์ ์ด ํ๋๋ผ๋ ๋ฑ์ฌ๋์ผ๋ฉด K ๊ฐ ์กฐ์ฉํ ๋ฎ์์ ธ โ ์ด ๊ฐ์ฌ๊ฐ ใ๋ซํ๋คใ๊ณ ๋ตํ์ ๊ฒ์ด๋ค. โ ๊ทธ ยซ๋๋จผ ๊ตฌ๊ฐยป์ ์คํฌ๋ฆฝํธ docstring ์ ๋ฐ์๋ค. โ โ **[๊ฒ์ดํธโก F1 ์ ์ ] ์ดํ์ด ์ ์ ใM 58 ยท K 46ใ์ ยซ๋ค๋ฅธ ํธ๋ฆฌยป์ ์๋ค** โeaad8e9c(= ์ ํ 9๊ณณ ํ์ฐจ ยซ์ด์ ยป main)์์ ์ฌ๊ณ ๋ผ๋ฒจ๋ง6da7d66f๋ก ๋ฌ์๋ค. โ โ **46 โ 18 = 28 โ 20** ์ด๋ผ๋ ์ฐ์ ๋ชจ์์ด ๊ทธ ํผ์ ์ ์ฆ์์ด์๊ณ , ๊ฒ์์๊ฐ ๊ทธ๊ฒ์ผ๋ก ์ก์๋ค. โ ์ด ์ ์ฅ์๊ฐ ๋ฐ๋ณตํด ๊ทํํ ใbase ๋ฅผ ๋ณ๊ธฐํ์ง ์์ผ๋ฉด ์๊ฐ ์์ธ๋คใ์ ๊ต๊ณผ์์ ์ฌํ์ด๋ค โ โ ๊ทธ๋์ ์ด์ ๋ ํธ๋ฆฌ๋ฅผ ๋๋ํ ์ ๋๋ค. โ ํ์ ์ ์ด๋ฅผ ์ ์ด ๋๋ค(ใ๋ณด์ํ๋ใ ๊ธ์ง): sink =jvm/src/jvm.rs๊ฐ&Box<dyn ClassInstance>/impl AsClassInstance๋ก ๋ฐ๋ 17๊ฐ ๋ฉ์๋ (array_lengthยทload_arrayยทstore_arrayยทget_fieldยทput_fieldยทinvoke_virtualยทinvoke_specialยทmonitor_*โฆ) โ ๊ทธ ์ธ์์&p/&mut p๋ก ๋๊ธฐ๋ฉด Deref/DerefMut ๊ฐ ๊ฐ์ ๋๋ค. โ โ ๊ณ์ธก๊ธฐ๋ฅผ ยซ๋จผ์ ๊ฒ์ฆยปํ๋ค โ ๊ทธ๋ฆฌ๊ณ ์ดํ์ด ํ๋ ธ๋ค. ์ ํ ํ์ฐจ๊ฐ ๋ซ์ 9๊ณณ์ ์ ๋ต์ง๋ก ์ผ์ ๊ฐ๋ ์ /ํ ํธ๋ฆฌ์ ๊ฐ์ ์๋ฅผ ๋๋๋ฐ ์ดํ์ 3/9 ๋ง ๋์ฐพ์๋ค(๊ทผ์ธ = ์ ๊ท์์"\n"+src์ ๋๋ฆฌ๊ณ ์ธ๋ฑ์ค๋ฅผsrc์ ์ ์ฉํ off-by-one โ ๊ดํธ ์ค์บ์ด ํ ์นธ ๋ฐ๋ ธ๋ค). ๊ณ ์น ๋ค 8/9. โ ๋จ์ 1๊ฑด(init_with_string)์Self::value_rangeยซ์ยป์์ deref ํ๋ค โ โ โ ์ด ๊ณ์ธก์ ์ ์ฐจ๊ฐ(interprocedural)์ ๋ชป ๋ณธ๋ค โ ๊ทธ๋์ K ๋ ยซํํยป์ด๋ค. โ ๊ฒ์์์ ใ899 ์ค 560 ยท ์ํ๊ฐใ๊ณผ ๋ฐฉํฅ์ด ๋ฐ๋๋ค: ๊ทธ์ชฝ์ fn ๋จ์ ํฌ๋ฃจ๋ ์ค์บ(์ํ), ์ด์ชฝ์ sink ํ์ + ์ ์ฐจ๋ด(ํํ). โ โ ์ธ ๋ฒ์งธ ํจ๋ impl ์ ์ฐพ์๋ค โDeref(:108)ยทDerefMut(:114) ์ธ์AsClassInstance::as_class_instance(as_deref().unwrap())๊ฐ ์๋ค(monitor ๊ณ์ด์ด ๊ทธ ๊ฒฝ๋ก๋ค). โ ๋ฒ์๋ฅผ ยซ์ข๊ฒยป ๊ณจ๋๋ค โ ใ์ ๋ถ ๊ณ ์ณ๋ผใ๊ฐ ์๋๋ค:java/io๋ฐ์ดํฐ ์ ์ก(read/write ๋ฒํผ) +String.getChars18๊ณณ. โ โ ์์ฑ์๋ฅ๋ฅผ ยซ์ผ๋ถ๋ฌยป ๋บ๋ค โ ์ผ๊ด ๊ฐ๋๊ฐ ยซํ๋ฆฌ๋ยป ์๋ฆฌ๊ฐ ์ค์ฌํ๋ค:URL(context, spec, handler)๋ JDK ๊ท๊ฒฉ์ handler == null ์ด ยซํฉ๋ฒยป(๊ธฐ๋ณธ ํธ๋ค๋ฌ๋ฅผ ์ฐ๋ผ๋ ๋ป)์ด๋ค. โ โ ์์ฌ 20๊ฑด์ ยซ๊ฐ๋๋ฅผ ๋ฃ์์งยป๊ฐ ์๋๋ผ ยซnull ์ด ํฉ๋ฒ์ธ์งยป๋ฅผ ๊ท๊ฒฉ์ผ๋ก ๋จผ์ ๊ฐ๋ ค์ผ ํ๋ค โ ํ์์ ๋ณธ์ฒด๊ฐ ๊ทธ๊ฒ์ด๋ค. โ ๊ฐ์ ๋์กฐ ์๋ฐฉํฅ ยท 4์ข : โด18๊ณณ ์ ๊ฑด ๋๋๋ฆผ โtest_classFAILED โต๋จ์ผ ๊ฐ๋(get_chars(dst))๋ง ์ ๊ฑฐ โ FAILED โถreader.rs read(buf)๋ง ยท โทwriter.rs write_chars(chars)๋ง ์ ๊ฑฐ โ ๊ฐ๊ฐ FAILED โ ๋ณต์ ์ ๊ฑด ok. โ โ **[๊ฒ์ดํธโก R1 ์ ์ โ ๊ทผ์ธ ์์ ์ด ยซ๋ค์งํยป ์์๋ค]** ์ข ์ ๋ฌธ์์ ใInputStreamReader๊ฐ ์ค๋ฒ๋ผ์ด๋ํด์ base ์ ๋ฟ์ง ๋ชปํ๋คใ์๋๋ฐ โ ์ ๋ฐ๋๋ค โ ์ค๋ฒ๋ผ์ด๋๊ฐ ยซ์์ด์ยป base ์ ๋ฟ๋๋ค. ์ค์ธก:InputStreamReader๋read๋ฅผ([CII)I๋ก๋ง ๋ฑ์ฌํ๊ณReader๊ฐ([C)I๋ฅผ ๋ฑ์ฌํ๋ค(OutputStreamWriter/Writer๋ ๊ฐ์ ํ์) โ 1์ธ์ ํธ์ถ์Reader::read๋ก ํด์๋๋ค. โ โ ๊ทธ๋์ ๊ทธ๋ ๋ํ ์ค์ฒฉ ํด๋์ค 2์ผ์ด์ค๋ ยซ์ด๋ฏธ ๋ฎ์ธ ๊ฐ๋ยป๋ฅผ ๋ ๋ฎ์๊ณ ์ปค๋ฒ๋ฆฌ์ง๋ 10/18 ๊ทธ๋๋ก์๋ค(๊ฒ์ ์ง์ ์ด ์ณ๋ค) โ ๊ทธ 2์ผ์ด์ค๋ฅผ ยซ์ง์ ๋คยป. โ ๋์ ยซ๋ฏธ๋ฑ์ฌ ์์ ์ยป๋ฅผ ๊ฒจ๋ด๋ค โread(char[],int,int)ยทwrite(char[],int,int)3์ธ์ ํธ์ถ์ด ๊ทธ ๋ ๊ฐ๋์ ๋ฟ๋ ์ ์ผํ ๊ฒฝ๋ก๋ค. โ โ ํ์ ์ถ์ ยซํด๋์ค ์ด๋ฆยป์ด ์๋๋ผ ยซ์์ ์ + ๋ฑ์ฌ ์์นยป๋ค(๊ฒ์๊ฐ ์ค ๊ทธ ์ถ์ ๊ทธ๋๋ก ์ผ๋ค). โ โ ๊ทธ๋ฆฌ๊ณ ์ด๋ฒ์ ยซ์ถ๋ก ยป์ด ์๋๋ผ ยซ18๊ณณ ์ ๊ฑด ๋จ์ผ ๊ฐ๋ ๊ฐ์ ยป์ผ๋ก ์๋ค โ โ 12/18 ยท ๋ฏธ์ปค๋ฒ 6(์ ๋ถ ํ์ผ ํธ๋ค ํ์๋ถ ยท ๋ชฉ๋ก์ worklog). โ โ **[๊ฒ์ดํธโก F4]String.getChars๊ฐ๋๋ฅผ ยซ๋ฒ์ ๊ฒ์ฌ ๋คยป๋ก ์ฎ๊ฒผ๋ค โ ยซ์ ํยป์ด๋ค.** JDK ๋ ๋ฒ์๋ฅผ ๋จผ์ ๋ณด๋ฏ๋ก ยซ์๋ชป๋ ๋ฒ์ + null dstยป ๋ฉด SIOOBE ๊ฐ ์ด๊ธด๋ค. ์ดํ ์์น๋ ๊ทธ ์ ํ๋ฅผ NPE ๋ก ๋ค์ง์๋ค(๊ณ์ฝ 4 ใ๋์ ์๋ฏธ๋ฅผ ๋ฐ๊พธ์ง ๋ง๋ผใ ์๋ฐ). โ ํฝ์ค์ฒ์ ์ ํ ์ ๊ธ ์ผ์ด์ค๋ฅผ ๋ฃ์๊ณ , ๊ฐ๋๋ฅผ ์ ์์น๋ก ๋๋๋ฆฌ๋ฉด ๊ทธ ์ผ์ด์ค๊ฐ red ๋ค(๊ฐ์ โธ). โcargo test --all554 / 0 / 1(โ ์ ์ฒด ์คํ ยท ์ฆ๊ฐ 0 ์ด ๋ง๋ค โtest_class๋ ํฝ์ค์ฒ๋ฅผ ํ ํจ์๊ฐ ์ํํ๋ค) ยท DoD 7์ข rc=0. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #37 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 3ํ์ฐจ ๋ง์ approve(์ดํ โ-fixโ-fix2) ยท ํ77dec927๋ถ์ด๋(๋๋ด ์ ์ค์ธก) ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. โ โ ๋ฐ๋ ค ์ ์ด ์ ๋ถ ยซ์ยป์๋ค โ F1(๋ ํธ๋ฆฌ ํผ์ ยท K 46โ38) ยท R2(์คํฌ๋ฆฝํธ๊ฐ M ์ 2 ๋ฎ๊ฒ) ยท R1(์ปค๋ฒ๋ฆฌ์ง ๊ทผ์ธ ์ญ์ ยท 10โ12). โ โ ์ด ๋ฆฌ๋์ง๊ฐ ๋จ๊ธด ๊ท์จ: ใ๊ฐ์ฌ ํ์ฐจ๋ ยซ๊ณ์ธก๊ธฐยป๋ถํฐ ์ ๋ต์ง๋ก ๊ฒ์ฆํ๋ผใ(๊ทธ ๊ฒ์ฆ์ด off-by-one ๊ณผ ๋๋จผ ๊ตฌ๊ฐ์ ๊ฐ๊ฐ ์ก์๋ค). โ ๊ฒ์์๊ฐ ยซ๋ ๋ฆฝ ์ฌ๊ตฌํ + ํ ๋จ์ ๋์นญ์ฐจ 0ยป ๋ก ์ธ ํธ๋ฆฌ๋ฅผ ์ฌํํ๊ณ ,da3727c(์์ ์ )์์ ๋ ๊ฐ๋๊ฐ green ์์ ๋์กฐ๊ตฐ์ผ๋ก ํ์ธํ๋ค. โ ๊ฒ์ minor 3๊ฑด์ ์ด ํ์ฐจ๊ฐ ยซ๊ณ ์น์ง ์์๋คยป(๊ณ์ฝ 7 โ ์ด๊ด ์น๊ณ ํ์ ): โ.gitignore์__pycache__๋ถ์ฌ โ์PARAM์ต์ปค๊ฐOption<ClassInstanceRef<โฆ>>๊ฐ์ ์ค์ฒฉ ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ธ์ง ์๋๋ค โ โ ๊ฒ์ ์ค์ธก ยซํ์ฌ 0๊ฑดยป(๊ธฐ๋กํด ๋๋ค ยท ๋ค์ ํ์ฐจ๊ฐ ๋ค์ ์ฌ์ง ์๋๋ก) โ๊ฐ์ฌ ์คํฌ๋ฆฝํธ CI ๋ฏธ๋ฐฐ์ (= ์ ์ธ๋ ์ ํ์ด์ง ๊ฒฐํจ ์๋). โ โ **[๊ฒ์ดํธโก F5] ๊ฐ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ยซ์ปค๋ฐํ๋คยป โ ์ดํ์ ใ๋ฐฐ์ ์๋ ๊ฒ์ฌ๊ธฐ๋ ๋ก๋๋คใ ํ๋จ์ ๋ค์ง๋๋ค.** ๊ทผ๊ฑฐ: โ ์์ฑ์๊ฐ ์๊ธฐ ์๋ฅผ ๊ต์ฐจ๊ฒ์ฆํ ์๋จ์ด ์์ด F1 ์ด ๋ฌ๋ค.scripts/audit-null-guards.py(โ CI ๋ฏธ๋ฐฐ์ = ์ ๊ธ์ด ์๋๋ผ ๊ฐ์ฌ). - [rustjava-null-guard-string-init-and-arraycopy-p0] โ
โ
null ์ธ์ 8๊ฒฝ๋ก์ ยซํธ์คํธ abortยป ๋ฅผ
NullPointerException์ผ๋ก ๋ฐ๊ฟจ๋ค. ์ฑํ ์ ์2026-09-11-s5-duplicate-issuance-stale-next-close#p0. โ ๊ฐ๋ 9๊ณณ(string.rs7 ยทsystem.rs2) ยท ํฝ์ค์ฒtest-data/NullArgGuards9์ผ์ด์ค. โ ์ ์์ ใ8๊ฒฝ๋กใ๋ผ ํ๋๋ฐ ์ค์ธก์ ยซ9๊ณณยป์ด๋ค โSystem.arraycopy๊ฐsrcยทdest๋ ๋ค ๋ซ๋ ค ์์๊ณ (์ ์ยทSTATE โข-2 ๋src๋ง ์ ๋ค) ๊ทธ ๋์ ๋ค๋ฅธ ์ธ์๋ค. โ ๋๊ฐ = ์์์ ๊ฐ๊น๋ค(์ ์ ๋ฌธ๋ฉด ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ๋ ์ฌํ์ธ): upstream ๊ด์ฉ๊ตฌ(์ง์ ๋ถis_null())๋ฅผ ๊ทธ๋๋ก ์ผ๊ณ ์ฝ์ ๋ง(--numstat์ญ์ ํ 0 ยท ์นํ ์๋) ยท โ ์๋ฏธ ๋ณ๊ฒฝ 0 โ ๊ฐ๋ ยซ์ยป์์ ํจ๋ํ๋ ์ ๋ ฅ๋ง ์์ธ๋ก ๋ฐ๋๋ค(์ ์ ์ ๋ ฅ์ ๋๋ฌ ๊ฒฝ๋ก๊ฐ ๋์ผ). โ โ ๊ฐ์ ๋์กฐ๋ก ๊ณตํํ์ง ์์์ ์ฆ๋ช ํ๋ค โ ๊ฐ๋ ์ ๊ฑด ๋๋๋ฆฌ๋ฉดtest_classFAILED (called Option::unwrap() on a None valueatjvm/src/class_instance.rs:108= STATE โก ๊ฐ ์ง๋ชฉํClassInstanceRef::deref๊ทธ ์๋ฆฌ) โ ๊ฐ๋ ๋ณต์ ์ ok. โcargo test --all554 / 0 / 1 โ โ ์ฆ๊ฐ 0 ์ด๊ณ ๊ทธ๊ฒ์ด ๋ง๋ค:test_class๋ ํฝ์ค์ฒ๋ฅผ ยซํ ํ ์คํธ ํจ์ยป๊ฐ ์ํํ๋ฏ๋ก ํฝ์ค์ฒ๊ฐ ๋์ด๋ ๊ณ์๋ ๋ถ๋ณ์ด๋ค. โ ํฝ์ค์ฒ ์ปดํ์ผ =javac --release 8(major 52 = ๊ธฐ์กด ํฝ์ค์ฒ์ ๋์ผ ยท โinvokedynamicยทCP ํ๊ทธ 15~18 0๊ฑด โ javac 9+ ํจ์ ์ ํผํ๋ค). โ ์ปดํ์ผ์ ยซ์คํฌ๋์นยป์์ ํ๋ค โtest-data/์์ ์น๋ฉด ๊ทธ ๋๋ ํฐ๋ฆฌ์Exception.class๊ฐjava.lang.Exception์ ๊ฐ๋ ค compile error ๊ฐ ๋๋ค(์ค์ธก). โ โ STATE โข-2 ์ ใ์ ํจ ์์กด 2๊ฑดใ์ด ๋ซํ๋ค ยท โก์ ยซ๊ฐ๋ ์์ 7๊ฑดยป ํ๋ ์ ๊ฑด ๋ซํ๋ค. โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #36 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก 1ํ์ฐจ approve(๋ฐ๋ ค 0) ยท ํ9ba6db48๋ถ์ด๋(๋๋ด ์ ์ค์ธก) ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ์ฐฉ์ง diff 9ํ์ผ(.rs2 ยท ํฝ์ค์ฒ 3 ยท ์์ฅ 4) ยท โ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. โ โ ๊ฒ์์๊ฐ ยซ์๊ธฐ ์๋ฆฌยป์์ ๊ฐ์ ์ ๋ค์ ์๊ณ , ํ์ฐจ๋ณด๋ค ๊ฐํ ๊ฒฐ๊ณผ๋ฅผ ๋๋ค โ ๊ฐ๋๋ฅผ 1๊ฐ์ฉ ๋นผ๋ ํฝ์ค์ฒ๊ฐ ๋ฌธ๋ค (A:system.rsdest๋ง ์ ๊ฑฐ โclass_instance.rs:114DerefMutยท B:init_with_string_buffer๋ง ์ ๊ฑฐ โ:108Deref). โ โ ์ ๋ณธ๋ฌธ์ด:108์ ์ ์ผ ์ง์ ์ฒ๋ผ ์ธ์ฉํ ๊ฒ์ ๋ถ์ ํํ๋ค โ ์ถ์ด ๋(Deref/DerefMut)์ด๋ค(๊ฒ์ minor ยท ๋ฌธ๋ฉด์ ์ฌ๋ฃ๋ก ๋ณด์กด). โ ๊ฒ์ ๋ถ์ ์ค์ธก 1๊ฑด:ClassInstanceRef์ธ์๋ฅผ ๋ฐ๋ fn 899๊ฐ ์ค 560๊ฐ๊ฐ ๊ทธ ์ธ์์is_null()๊ฐ๋๊ฐ ์๋ค(โ ์ํ๊ฐ โ ๋๋ถ๋ถ null ์ด ์ ๋ฟ๊ฑฐ๋ deref ํ์ง ์๋๋ค) โ ํ์rustjava-null-guard-audit-remaining-runtime-entrypoints(P3)์ ใ์ด๊ฑฐ๊ฐ ์๋๋ผ ์ธ๋ ๊ฒใ์ ๊ทผ๊ฑฐ๊ฐ ์๊ฒผ๋ค. - [rustjava-upstream-sync-s5-java12-api] โ
โ
์ค๋ณต ๋ฐ๊ถ ํ์ โ S5 ๋ ยซ์ด๋ฏธ ์ฐฉ์งยป๋ค(๋์ ์ โ ๊ฒฝ๋ก ยท
status: blocked). ์ค์ธก(2026-09-11):c4665b0์origin/main์ ์กฐ์ ยท PR #21 MERGED(2026-09-03T22:12:43Z ยท ๋จธ์ง์ปค๋ฐa0b5d3c) โ ๊ฐ์ ์ผ์rustjava-upstream-sync-s5-with-remeasured-conflicts๊ฐ ์ด๋ฏธ ์์ฃผํ๋ค. S6(#22)ยทS7(#23)ยทS8(#24)๋ ์ฐฉ์งํดmerge-base=bd42427ยท behind 1(2ce4717ยท dependabot encoding_rs 0.8.35โ0.8.40 ยท ์๊ณ 20 ๋ฏธ๋ง โ ๋๊ธฐ ํ์ฐจ ๋ถ์). โ ๊ทผ์ธ = ์ด ํ์ผ## ๋ค์์ด ใ๋ค์์ S5ใ์ธ ์ฑ 8์ผ ๋ก์ LANE_IDLE ์ฒ๋ฐฉ(ใSTATE.md ์ ยซ๋ค์ยป์ ์ฝ์ด๋ผใ)์ด ๊ทธ๊ฒ์ ์ฝ์๋ค โ ์๋ โข ์ ์ด ๊ฒฝ๊ณ ํ ใ์ด๋ฏธ ๋๋ ์ผ์ ๊ฐ๋ฆฌํค๋ฉดใ ํํ์ โ ๋ ๋ฒ์งธ ์ฌํ์ด๋ค. โ ์ด ํ์ฐจ๊ฐ## ๋ค์ยท์งํ์ค์ ์ค๋ ๊ฐ์ผ๋ก ๋ซ์๋ค(์ฝ๋ 0์ค ยท ๋ฌธ์ ์ ์ฉ). โ -fix ํ์ฐจ(๊ฒ์ดํธโก F1): ์ดํ PR #35 ๊ฐ ยซ2์ผ ๋ก์ ๋ก์ปฌmainยป์์ ์๋ คCONFLICTINGโ โ ์ด ํ์ฐจ๊ฐ ๊ณ ์น๋ ๋ณ(๋ก์ ๊ฒ์ ์ฝ๋๋ค)์ ์์ ์ด ๋ฐ์๋ค.origin/main๋จธ์ง๋ก ์ฌํด์(#33ยท#34 ํญ๋ชฉ ๋ณด์กด ยท force-push 0). โ -fix2 ํ์ฐจ(๊ฒ์ดํธโก F1-โถ): ใ์ ์ฐจ๋ฅผ ์ด๋ป๊ฒ ๊ณ ์ณค๋๊ฐใ๊ฐ ํ์ ์๋ง ์์ด ๋ฐ๋ ค โ โ ๋ค์ ์ธ์ ์ด ์ฝ๋ ์๋ฆฌ(AGENTS.mdยงGit Workflow)์ 2์ค์ ๋ฐ์๋ค: โ๋ธ๋์น๋origin/main์์ ์๋ฅธ๋ค(๋ก์ปฌmain์ ์ ๋์ ์์กดํ์ง ์๋ ํํ) โPR ์คํ ์งํmergeable์กฐํ. โ ๊ทผ์ธ ์ ์ : ๊ทธ repo ๋ ์ด๋ฏธ ใsync localmainใ์ MANDATORY ๋ก ์ ๊ณ ์์๋ค โ ์ง์ง ๊ทผ์ธ์ ยซํํ ์กฐํญ์ ์กฐํํ์ง ์์ ๊ฒยป. โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #35 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์ง์ด๋ค). ๊ฒ์ดํธโก approve ยท ํc980ef0d๋ถ์ด๋(๋๋ด ์ ์ค์ธก) ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ์ฐฉ์ง diff 5ํ์ผ ์ ๊ฑด ๋ฌธ์ ยท โ ์ด ์ ์ฅ์ ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0 ยท.rs0์ค. - [rustjava-upstream-sync-squash-defeats-convergence] โ
๊ฒ์ดํธโข ์ฐฉ์ง โ PR #18
--merge(2026-08-27T08:47:35Z).-s ours๊ณ๋ณด ๋ณต์ + ใ์ค์ฟผ์๊ฐ ์กฑ๋ณด๋ฅผ ์ ๋๋คใ ํ์ . ์์ธ =docs/upstream-sync-approach.md. โป๊ตฌ ยซPR ๋๊ธฐยป ๊ธฐ์ฌ ํ๊ธฐ(2026-09-11 ์ ๋ฆฌ). - [rustjava-upstream-sync-s4] โ
๊ฒ์ดํธโข ์ฐฉ์ง โ PR #17 MERGED(2026-08-27T01:28:44Z ยท ์ค์ฟผ์ โ ๊ทธ ๊ณ๋ณด ์ ๋จ์ #18 ์ด ๋ณต์).
์ปท
3296139๋จธ์ง ยท ์ถฉ๋ 2 ํด์ ยทtest_timer์ฌ๋ฐฑ 500โ2000ms(ยซํ๊ทยป ์๋ ๋จ์ ๋ถ๋ณ ยท ์ฌ๋ฃ๋ ์๋ โ ์ ). โป๊ตฌ ยซPR ๋๊ธฐยป ๊ธฐ์ฌ ํ๊ธฐ(2026-09-11 ์ ๋ฆฌ). - [rustjava-coverage-workflow-codecov-token-red] โ
๊ฒ์ดํธโข ์ฐฉ์ง โ PR #12 MERGED(2026-08-17T05:34:32Z).
fail_ci_if_error: false๋ก coverage ์์ red ํด์. โป๊ตฌ ยซPR ๋๊ธฐยป ๊ธฐ์ฌ ํ๊ธฐ(2026-09-11 ์ ๋ฆฌ). - [rustjava-parity-unknown-tool-step-red-decision] โ
**ใ
CHECK_TOOLSยทSETUP_TOOLS๋ ยซ๋คยป ๋ฐ์ธ ๋๊ตฌ๋ฅผ ๋ถ๋ฅด๋ CI step ์ FAILใ๋ก ์ ํ๊ณ ์งํ.** ์ฑํ =2026-09-08-parity-axis-a-tool-name#p0ยท ์ ํ์ง โ ์กฐ๊ฑด๋ถ(๋ฑ๋ก์ ํ ์ค โ โยทโ ๋ฒ๋ฆฐ ์ด์ ๋ ยง4 โบ). โ โ ๋ฐ๊ถ ์๊ฒฌ์ ์ ์ ๊ฐ ๋ฐ์ฆ๋๋ค โ ใ๋ชฉ๋ก ๋ฐ 0ใ์ด ์๋๋ผ 1(git config โฆ์ ์ ) โ โ ๋ฌด์กฐ๊ฑด red ๋ฉด ์ฒซ๋ ๋ถํฐ ์์์ฑ. โ ์ง์ ๊ฐ์- run: npm test๊ฐ rc=0 โ rc=1 ยท ๋ฐ๋ ๊ฐ์ ยท์ฐํ 4์ข red ยท โ ๋ฑ๋ก ๊ฒฝ๋ก ๋ ๋ค ํตํ๋ค(N4ยทN5) ยท โ ์์์ฑ 0. โ ์ ํ ์ ์ด ๋ฌด์์:git diff --numstat f133cd30= 33 0(์ถ๊ฐ๋ง). โ ์ ์ํฌํ๋กยท์ ์ก 0 ยท.rs0์ค. โ ์ง์ ํ์ฐจ๊ฐ ์ผํจdocs/upstream-sync-approach.mdยง5 ์ ๋ชฉ ๋ณต๊ตฌ(๋ด๊ฐ ๋ธ ๊ฒฐํจ์ด๋ค). โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #34 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์๋๋ค). โci-presencerc=0 CI_GREEN ยท ํ ๋ฌด์ด๋ ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. - [rustjava-parity-lock-axis-a-classify-by-tool-name] โ
ํ๋ฆฌํฐ ๋ฝ ์ถ A ์ ์์ ํ์ ์ ใ
if:๊ฐ ์๋๊ฐใ โ ใ์ด๋ ๋๊ตฌ๋ฅผ ๋ถ๋ฅด๋๊ฐใ(CHECK_TOOLS = cargoยทpython3)๋ก ๊ต์ฒด. ์ฑํ =2026-09-07-โฆ-parser-axis-design#p0. โ โ ์ง์ ๊ฐ์ (cargo test --all์if:์๋๋ก + DoD ์ค ์ญ์ )์ด rc=0 โ rc=1 ยท ๋ฐ๋ ๊ฐ์ ยท์ฐํ 3์ข red ยท โ ์์์ฑ 0(๋ฌดํด ํธ์ง 4์ข green). โ ์ถ A ์์ 6 โ 6 ๋ถ๋ณ โ ์์ฆ์ด ์๋๋ผ ยซ๊ฐ์ 6๊ฐ๋ฅผ ๋ค๋ฅธ ์ ์ด๋กยป ์ก๋๋ค. โ **ใcargo ํ๋ใ๋ก ์ขํ์ง ์์ ์ด์ ๋ ์๋ค**: 6 ์ค cargo 4 ยท python3 2 โ ์ขํ๋ฉด ์ปค๋ฒ๋ฆฌ์ง 33% ์์ค. โ ์ค๊ณ ๋ฌธ์ ๋ฌธ๋ฉด 1๊ฑด ์ ์ โ ใif:๋ฅผ ๋ถ์ด๋ฉด greenใ์ ์งง์๋ค. ๋ถ์ด๊ธฐ๋ง ํ๋ฉด red ์ด๊ณ , DoD ์ค๊น์ง ์ง์์ผ green ์ด๋ค. โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #33 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๋ถ๋ชจ 2๊ฐ๋ฅผ 1๊ฐ๋ก ์ ์ด ๊ณ๋ณด๋ฅผ ์๋๋ค). โci-presencerc=0 CI_GREEN ยท ํ ๋ฌด์ด๋ ยท ์์ PR 0๊ฑด ยท ๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ โ ๋ฐฐํฌ 0. - [rustjava-parity-lock-per-repo-parser-axis-design] โ
ํ๋ฆฌํฐ ๋ฝ์ repo ๋ณ ยซํ์ ์ถยป ์ค๊ณ โ ๊ฒฐ๋ก : ๊ณต์ฉ ํ์๋ฅผ ๋ง๋ค์ง ์๊ณ ยซ๊ณต์ฉ ๊ณ์ฝยป๋ง ๋จ๊ธด๋ค.
์ฑํ ์ ์
2026-09-04-parity-sibling-repo-survey#p2. โ ํ์ repo ํ์ผ ํธ์ง 0 ยท ๊ฒ์ฌ๊ธฐ ๋ณธ์ฒด ๋ณ๊ฒฝ 0 ยท ๋ฐ๊ถ 0 ยท ์ธก์ ํธ๋ฆฌ = ๊ฐ repoorigin/main. โ โ ์ ์ ๊ฐ ๋ฌด๋์ก๋ค โwie๊ฐ ์ ์ ยซ๋ค์๋ ยป(2026-09-05) ์ค์ค๋ก ํฌํ ํ๊ณ (wie_cli/tests/dod_ci_parity.rs+tests/support/dod_ci_parity.rsยท ์ญ์ ๋check-parity-lock-wired.mjs๊ฐ ๋ฌธ๋ค) ๊ทธ ํฌํ ์ด โ~โ ๋ฅผ ์ฐ๋ฆฌ๋ณด๋ค ๋ซ๊ฒ ํ์๋ค. โ ์ ์ 5์ถ ํ์ = 3ํ์ธ ยท 1๋ถ๋ถ๋ฐ์ฆ(๋ค์ค ์ํฌํ๋ก = ํ์ ์๊ตฌ๊ฐ ์๋๋ผ ยซ๋ฒ์ ๊ฒฐ์ ยป) ยท 1์ ์ (qts ์ถ B ๋ ยซ๋ถ์ฌยป๊ฐ ์๋๋ผ ยซํดํยป โ ์์ 1๊ฐ์ธ๋ฐ DoD ๊ฐ ์นจ๋ฌต). โ qts ๋ ์งํฉ ์๋ฑ ๋ฝ ์์ฒด๊ฐ ํ๋ฆฐ ๋๊ตฌ๋ค โmake testโCI ๋ง์ปค 3์ก ยทgo๋ก์ปฌ ์กฐ๊ฑด๋ถ skipโCI ๊ฒฝ์ฑ ๊ฒ์ดํธ๋ผ ์ด๊ธ๋จ์ด ์ ๋นํ๋ค. โ โ ์ด ์ ์ฅ์์ ์ ๋ณต ์์์ฑ: ์ถ A ๋ฅผif:๋ก ๋ถ๋ฅํ๋๋ฐ ์ง๊ธ ์กฐ๊ฑด๋ถ step ์ด ์ ์ ์ด๋ผ ยซ์ฐ์ฐํยป ์ณ๋ค โcargo test --all์if:์๋๋ก ์ฎ๊ธฐ๋ฉด ์กฐ์ฉํ green ์ด๋ค(wie ๋ ๊ทธ ์ด๋์ ์ด๋ฏธ ํ repo). โ ํ์ โด. โ โ ๊ฒ์ดํธโข ์ฐฉ์ง โ PR #32 ยท--merge(๋ฑ์ฌ repo ยท ์ค์ฟผ์๋ ๊ณ๋ณด๋ฅผ ์ ๋๋ค). ๊ฒ์ดํธโก approve ยท ํbd4c6da5๋ถ์ด๋ ยทci-presencerc=0 CI_GREEN ยท ์์ PR 0๊ฑด ยท ์ฐฉ์ง diff 5ํ์ผ ์ ๊ฑด ๋ฌธ์ โ ๋ฐฐํฌ 0(๋ฐฐํฌ ์ํฌํ๋ก 0๊ฐ). - [rustjava-upstream-behind-measure-scheduled-workflow] โ
โ
**
behind๋ฅผ ยซ์ฌ๋ยป ์๋ฆฌ ์ ์ค โ.github/workflows/upstream-behind.yml.** ์ฑํ ์ ์2026-09-04-upstream-sync-cadence-decision#p0. โ ์๊ณ๋ ์ ํด์ก๋๋ฐ(behind โฅ 20ยท PR #29 ์ฐฉ์ง) โ ์ฌ๋ ์ฃผ์ฒด๊ฐ ์์๋ค (git grep -lI 'rev-list --count' origin/main -- .github/ scripts/โ 0๊ฑด). โ ์ฃผ๊ธฐ = ์ฃผ 1ํ(cron: "17 6 * * 1") โ ์ ๋ก(rust-audit์ผ๊ฐ)๋ฅผ ๋ฒ ๋ผ์ง ์๊ณ ์๊ณ ๋๋ฌ ์๋๋ก ์ ๋นํํ๋ค: behind 20 ๋๋ฌ ์ค์ 44์ผ ยท โ ์ต์ 9์ผ โ โ 7 < 9 ๋ผ ํ ์ฃผ๊ธฐ ๋๊ฒ ๋ชป ๋์น๋ค ยท ์ผ๊ฐ์ 7๋ฐฐ ๋น์ฉ์ ํ๋จ ๊ฐ์น 0. โ โ ์๋ฆผ = โ Job Summary + annotation ยท ยซํญ์ greenยป โ โ ์ทจํฅ์ด ์๋๋ผ ์ค์ธก์ผ๋ก ๊ณจ๋๋ค: โred ๋ ์ฌ๊ธฐ์ ์ ๋ฃ๋๋ค(์ ๋กrust-audit์ต๊ทผ 20 run ์ค 19 failure ์ธ๋ฐ โ ๋์ ํฐ์ผ 0๊ฑด) ยท ์์ฝ red ๋ โ main tip check-run ์ ๋ถ์ด(์ค์ธก8c1238b5์auditfailure 7๊ฑด) ๊ฒ์ดํธโข์ ใ์ฐฉ์ง๋ณธ greenใ ์ฝ๊ธฐ๋ฅผ ํ๋ฆฐ๋ค (โ ๋จ PR ์ ๋ง์ง ์๋๋ค โ PR head ์ sha ๊ฐ ๋ค๋ฅด๋ค) ยท โ์ด์๋ โ ์ด fork ๊ฐ issues ๋นํ์ฑ์ด๋ผ ยซ๋ถ๊ฐยป. โ โ โ ๊ฐ ยซ๋จ์ ๊ฒยป์ด๊ณ ๊ทธ ยซ์๋์ฑยป์ ์๊ณ ๊ณจ๋๋ค โ โ ์ฌ๊ฐ ์กฐ๊ฑด์ด ๊ทธ ๋๊ฐ๋ฅผ ยซ์ฐ๋คยป (ใbehind โฅ 20์ด 7์ผ ์ด์์ธ๋ฐ ํ์ฐจ ๋ฏธ๊ฐ์ใ ยท ์ธ๋ ๋ช ๋ นยท์ค๋์ ๊ฐ์ ยง5-B โ ์ ๋ฐ์๋ค). โ ํ ๋ฒ ๋๋ ค ์ค๋์ ๊ฐ: โ behind0ยทmerge-basebd42427= upstream HEAD โ ์๊ณ ๋ฏธ๋ง. โ upstream ๋ฐ์ 0(remote ์ถ๊ฐ + fetch ๋ฟ ยทpermissions: contents: read) ยท โ ์๋ ๋ฐ๊ถ 0 ยท โ ์๊ณ 20 ๋ฌด์ ์ด ยท โbin/healthcheckยทorchestrator ๋ฌด์ ์ด ยทscripts/๋ฌด์ ์ด(ํ๋ฆฌํฐ rc=0) ยท.rs0์ค ยท S9 ๋ฏธ๊ฐ์. โ ๊ฒ์ดํธโข ์๋ฃ: PR #31 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repo). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ์ฐฉ์ง ํ ยซ์ํฌํ๋ก๋ฅผ ์ค์ ๋ก ๋๋ คยป ํ์ธํ๋ค โ ๊ตฌํ ํ์ฐจ๊ฐ ใ๋ณธ๋ฌธ ๋ช ๋ น๋ง ํ์ ๊ณ ์ํฌํ๋ก ์์ฒด๋ ๋ชป ๋๋ ธ๋คใ๊ณ ์์ธํ ๊ทธ ๊ตฌ๋ฉ์ด๋ค. ๊ฒฐ๊ณผ๋ ํ์ ์ฐธ์กฐ. โ ๊ฒ์ดํธโก 1ํ์ฐจ approve โ ๋ฐ๋ ค 0. - [rustjava-worklog-absence-machine-enforcement-decision] โ
โ
์ํฌ๋ก๊ทธ ยซ๋ถ์ฌยป๋ฅผ ๊ธฐ๊ณ๋ก ์ก์์ง ยซํ์ ยป โ ๊ฒฐ๋ก : ์ง๊ธ์ ยซ๋ฃ์ง ์๋๋คยป.
์ฑํ ์ ์
2026-09-04-worklog-mandate-and-local-gate#p0. โ **scripts/check-worklog-json.py๋ฌด์ ์ด**(6์ถ ๋ฌดํ๊ท ยท rc=0) ยท.rs0์ค ยท ๊ณผ๊ฑฐ backfill 0 ยท qts ์ ๊ธยทupstream ๋ฆฌ๋์งยทํ๋ฆฌํฐ ๊ฒ์ฌ๊ธฐ ๋ฌด์ ์ด. โ โ ๊ทผ๊ฑฐ๋ ยซ์ฌ์ ๋ฑ๋ก๋ ๋ ์๊ณยป๊ฐ ยซ๋ ๋คยป ๋ฐํํ์ง ์์๋ค๋ ๊ฒ ํ๋๋ค โ ์๋ฌดํ ํ์ฐจ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ ยซ์ ยป์AGENTS.md์ ๋ฑ๋กํ๊ณ , โ ๊ทธ ๋ฌธ์๊ฐ ์ ํ ์ฌ์ธก ์์ (ใ2026-09-04 ์ดํ ์ด ๋ฒ์งธ ์ฐฉ์ง ํ์ฐจใ)์ ์ค์ ๋ก ๋๋ฌํ๋ค(์ค์ธก 11). โ โ ๋ฏธ์์ฑ: ์ฐฝb3a4cf4..origin/mainfirst-parent 15๊ฑด ์ค 1๊ฑด(6.7%) โ ์๊ณ โฅ2 ๋ฏธ๋ฌ. โ ๊ทธ 1๊ฑด์ ๊ท์ฝ๋ณด๋ค ๋จผ์ ๊ฐ๋ผ์ง PR #13(createdAt2026-08-23 โ ๊ท์ฝ ์ฐฉ์ง 2026-08-26 ยท โ ์ธ์ฉ์ด ์๋๋ผ ์ค์ธก) โ โ ๊ท์ฝ์ ยซ์ ์ ์์๋ยป ํ์ฐจ๋ง ๋ณด๋ฉด 0 / 14 = 100%. โ โ ์ด๋ฆฐ ์นด๋:.json15 ยท proposals 26 โ disposed 13 = โ 13(๊ธฐ์ค์ 5) โ ์๊ณ <5 ๋ฏธ๋ฌ(โ ์๋ฌด๊ฐ ์นด๋๋ฅผ ๋๋ ธ๋ค). โ โ ์ฝ์ ์ ์จ๊ธฐ์ง ์๋๋ค: โคใ100%ใ๋ ๋จ์ผ ์งํ ์ฃผ์ฒด์ ์ต๊ด์ผ ์ ์๋ค(๋ฆฌ๋์ง๋ 13๊ฐ๋ก ๊ฐ๋ ธ์ผ๋ git author ๊ฐ ํ๋๋ค) โฅ์ ๋ณธ ์ ์ด๊ฐ ๋์จํ๋ค(ใ๋ง์ก๋คใ๋ ์ ์ํฌ๋ก๊ทธ ํ ์ค ์ถ๊ฐ๋ ํต๊ณผ โ ์๊ฒฉ ์ ์ด๋ก ์ฌ๋ ์ด๋ฒ ์ฐฝ์ ๊ฐ์ 14) โฆ์คํจ๋ ์ฌ์ ํ ์กฐ์ฉํ๋ค โ ใ์ํ์ด ์๋คใ๊ฐ ์๋๋ผ ใ์๊ณ๊ฐ ์์ง ๋ฐํํ์ง ์์๋คใ์ด๋ค. โ ์ฌ๊ฐ ์กฐ๊ฑด + ์ธ๋ ๋ช ๋ น + ์ค๋์ ๊ฐ1์AGENTS.mdยงRound Worklog ์ ๋ฐ์๋ค(2 ์ด์์ด๋ฉด ์ฌ๊ฐ ยท โ ์๊ฒฉ ์ ์ด). โ ์ฌ๊ฐํ๋ฉด ๋ง๋ค ๊ฒ๋ ๋ฏธ๋ฆฌ ์ ์๋ค: baseline sha ๊ธ์ง ยท โ PR diff ๋ก ยซ์กฐ๊ฑด๋ถยป ํ์ (REPORT ํ์ ์ถ์ฒ์ ๋ง์ก์ผ๋ฉด ์ ์ ํ์) ยท ์ ์ ์ฐธ์์createdAt์ผ๋ก(โ ์ ๋ชฉยท๋ผ๋ฒจ ๊ธ์ง) ยท ๊ธฐ์กด 6์ถ ๋ณด์กด. โ ์ธก์ ํจ์ 1๊ฑด ๊ธฐ๋ก: ใํ์ฐจ = ๋ถ๋ชจ 2๊ฐใ๋ก ์ธ๋ฉด ์ค์ฟผ์ ์ฐฉ์ง๋ฅผ ๋์น๋ค(๊ทธ ์ ์ด๋ก๋ 12/12 ยท ์ ๋ณธ ์ ์ด๋ก 15/1). โ ๊ฒ์ดํธโข ์๋ฃ: PR #30 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ๊ฒ์ดํธโก 1ํ์ฐจ approve โ ๋ฐ๋ ค 0. โ ์ฐฉ์ง๋ก ใ์ฌ๊ฐ ์กฐ๊ฑดใ์ดAGENTS.md์ ์ด์ ์๋ค: ์๊ฒฉ ์ ์ด ๊ฐ์ด 2 ์ด์์ด๋ฉด ๋ค์ ์ฐ๋ค(์ค๋ 1). - [rustjava-upstream-sync-cadence-decision] โ
โ
upstream ๋๊ธฐ ยซ์ ๊ธฐ ์ถยป ํ์ โ ๊ฒฐ๋ก : โ ๊ฒฉ์ฐจ ๊ธฐ๋ฐ
behind โฅ 20. ์ฑํ ์ ์2026-09-04-sync-contract-stale-assets-decision#p0. โ ์ ์ค 0(๊ฒ์ฌ๊ธฐยทํฌ๋ก ยท์ํฌํ๋ก) ยท.rs0์ค ยท โ S9 ๋ฏธ๊ฐ์(behind 0). โ โ ์ ์์ ์ ์ (ใ๋ฒ์ด์ง ๋ค์ ๋ฐ์ผ๋ฉด ํจ์ฌ ๋น์ธ๋คใ)๋ฅผ ยซ๋จผ์ ์ฌ์ยป ๋ฐ์ฆํ๋ค: ํ์ฐจ ์ปค๋ฐ ์ โ ์ถฉ๋์ ์๊ด๊ณ์ โ ๋ถํธ๊ฐ ยซ์ยป. โ โ **[๊ฒ์ดํธโก ์ ์ ] ์ดํ ํ๋ baseยท(๋ธํ/๋์ ) ๋ณ๊ธฐ๊ฐ ์์ด ๊ธฐ์ค์ด ์์ฌ ์์๋ค** โ ์ ๋ณธ์ ยซ๋์ ยป์ผ๋ก ํต์ผํด ์ฌ๊ณ์ฐ: A ์ดํ r=โ0.169ยทํฉ28 ยท B S4 ์ ์ r=โ0.134ยทํฉ30 ยท โ C ์ ๋ณธ r=โ0.155ยทํฉ33(37์ปค๋ฐ โ 14 โ 8์ปค๋ฐ โ 19). โ ์ธ ์ด ๋ชจ๋ ๋ถํธ๊ฐ ์ โ ํ์ ๋ถ๋ณ ยท โ r ์ n=8 ๋น๋ฌด์์ ํ๋ณธ์ด๋ผ ยซ๋ถํธ ํ์ ยป์ผ๋ก๋ง ์ด๋ค. โ ๋์ ์ถฉ๋๋ ํฌํํ๋ค: ๊ณ ์ base ์์ 7์ปค๋ฐ 16 โ 33์ปค๋ฐ 19(26์ปค๋ฐ ๋ ๋ฒ๋ ค๋ +3). โ โ ์ถฉ๋์ ๋ง๋ ๊ฒ์ ยซ๋ช ๊ฐ ์๋๊ฐยป๊ฐ ์๋๋ผ ยซ๋ฌด์์ด ์๋๊ฐยป(์ฐ๋ฆฌ ํฌํฌ ์ง์ 3๊ณณ + ๊ฐ๋ช ์ค์ ๊ฐ์ ์ฌ๊ฑด). โ ๊ทธ๋ฐ๋ฐ ๊ฒฐ๋ก ์ด ใ์๋ฌด๊ฒ๋ ์ ํ๋คใ๊ฐ ๋์ง๋ ์์๋ค โ ๋ฐ์ฆ๋ ๊ฒ์ ยซ๋น์ฉ์ด ๊ฒฉ์ฐจ์ ๋น๋กํ๋คยป๋ ๊ธฐ์ ์ด๊ณ , ใ์๋ฌด๋ ์ฑ๊ธฐ์ง ์๋๋คใ๋ ์ํ์ ๊ทธ๋๋ก ์ฐธ์ด๋ค. โ ์ถ์ ๋๋ ์๊ณ๋ฅผ ํฌํ์ ยซ๋คยป์ ๋์๋ค. โ ์๊ฐ ๊ธฐ๋ฐ ๊ธฐ๊ฐ: upstream ์ด 37% ์ ์ฃผ์ ์ปค๋ฐ 0(12๊ฐ์ 144์ปค๋ฐ/51์ฃผ ยท ์ค์ 1/์ฃผ)์ด๋ผ ์๊ฐ ์ถ์ โ behind 0 ์ธ๋ฐ ํ์ฐจ๋ฅผ ์ฌ๋ ยซ๋น ํ์ฐจยป ๋ฅผ ๋ง๋ค๊ณ , ํ์ฐจ ์ค๋ฒํค๋(ํฐ์ผ 3๊ฑด)๊ฐ ๊ณ ์ ์ด๋ผ ์์ฃผ ๋ฐ์ผ๋ฉด ์ด๋น์ฉ์ด ๋๋ค. โ ์ฌ๊ฑด ๊ธฐ๋ฐ ๊ธฐ๊ฐ: S3 ์ถฉ๋ ๋ธํ +9(๋์ 11 ยท base S2 ์ฐฉ์ง๋ณธ ยท merge-baseaf4f6f8)๋ upstream ยซ์ ๊ทยป ํ์ผ์์, S8 ๋์ 8 ยท ๋ธํ +8(base3fb08a8ยท merge-baseba5797b)์ ์ ํธ๋ฆฌ ๊ฐ๋ช ์์ ์๋ค โ ๊ฒฝ๋ก ํธ๋ฆฌ๊ฑฐ๊ฐ ๋๋ถ๋ถ์ ๋์น๋ค. โ ์๊ณ 20 ๊ทผ๊ฑฐ: ์๋๋ก๋ 7์ปค๋ฐ ํฌํ์ , ์๋ก๋ 33 ์ด ๋ฏธ์ธก์ ๊ตฌ์ญ ์ ๊ตฌ. โ โ **[์ ์ ] ์ดํ์ ใ์ค์ ๋ก ์ํ ๋ ๊ฐใ์ ยซ์ง์ ๋คยป** โ ๊ทธ๊ฒ์ ์ด ํ์ ์์ ์ด ยซ๊ธ์งํยป ๋ ๋ฒ(8ํ์ฐจ๋ฅผ ๊ฒฉ์ฐจ์ ๋น์ฉ์ผ๋ก ์ฝ๋ ๊ฒ)์ด๋ผ ์๊ธฐ๋ชจ์์ด์๋ค. โ โ **ใ20ใ์ ๋ฐด๋(733) ์์์ ยซ๊ณ ๋ฅธยป ์๋ค** โ ๋ฐด๋๋ ์ค์ธก์ด๊ณ ๊ทธ ์ ๋์ ์ด8ํ** ยท ํ์ฐจ๋น ์ถฉ๋(์ ๋ณธ ๋์ ) ์ค์ 2.5 ยท ๊ฒ์ดํธโก ์ฌ์ดํด 8ํ์ฐจ ์ค 7ํ๊ฐ 1. โ ๋ฐฉ์์ = ๊ธฐ๊ณ๊ฐ ยซ์ฌ๊ณ ยป ์ฌ๋(์ด๊ด)์ด ยซ๋ฐ๊ถยป โ ์ฌ๋ ์๋ฆฌ ๊ถ๊ณ ๋ ์ด repo ์ ์์ฝ ์ํฌํ๋ก(์ ๋ก16โ17โ17โ17โ19๋ก ํํํ๋ค. ์ค์ธก ๋๋ฌ ์ค์ 44์ผ(โ ์์ ์ธ์ฉ ๊ธ์ง โ ์ฌ์ธก 41์ผ ยท ์ฐฝ ์ ์ ยฑ3์ผ ยท ๊ฒฐ๋ก ์ํฅ 0) โ **์ฐ 6rust-audit.yaml), ๋์bin/healthcheck๋ orchestrator ์๊ด์ด๋ผ ๋ณ๊ฑด. โ ๊ตฌํ์ ์ด ํ์ฐจ๊ฐ ํ์ง ์์๋ค. โ ์ฌ์ธก์ ์กฐ๊ฑด(3ํ์ฐจ ๋ค ยท ์ถฉ๋ ์ค์ โฅ5 ๋ฉด ์๊ณ ๋ด๋ฆฌ๊ณ ยท ๋๋ฌ ๊ฐ๊ฒฉ โค14์ผ์ด๋ฉด ์ฌ๋ฆฐ๋ค)์ ยง5-B ์ ์ค๋์ ๊ฐ๊ณผ ํจ๊ป ๋ฐ์๋ค. โ โ **ใ์ค๋๋๋คใ๋ ์ฌ๊ฐ ์ฌ์ ๊ฐ ์๋๋ค โ ์ด ์ถ์ ยซ์๊ฐยป์ด ์๋๋ผ ยซ๊ฒฉ์ฐจยป๋ก ์ด๋ฆฐ๋ค.** โ ๊ฒ์ดํธโข ์๋ฃ: PR #29 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ๊ฒ์ดํธโก 3ํ์ฐจ ๋ง์ approve(์ดํ โ fix โ fix2) โ โ ๋ฐ๋ ค ๋์ด ๋ชจ๋ ยซ์๋ฅผ ์ด๋ป๊ฒ ์ ์๋๊ฐยป์๋ค: โดbaseยท(๋ธํ/๋์ ) ๋ณ๊ธฐ ์์ด ๊ธฐ์ค์ ์์๋ค โต๊ทธ ์ ์ ์ด ยซํยป์๋ง ๋ฟ๊ณ ยซ์ฐ๋ฌธยทsummaryยป๋ก ์ ํ๋์ง ์์๋ค. โ โ **ใํ๋ฅผ ๊ณ ์ณค๋ค๊ณ ๋ฌธ์๊ฐ ๊ณ ์ณ์ง ๊ฒ์ด ์๋๋คใ๊ฐ ์ด ๋ฆฌ๋์ง๊ฐ ๋จ๊ธด ๊ท์จ์ด๋ค. โ ๋ถ๋ชจ #27ยท#28 ์ฐฉ์ง๋ก ๋ ๋ฒCONFLICTING์ด ๋๊ณ ๊ทธ๋๋ง๋ค ๋จธ์ง๋ก ํด์ํ๋ค(๋ง์ง๋ง์REPORT.md1๊ฑด) โ โ ์ถฉ๋ ์ค์๋pull_request๊ฒ์ฌ๊ฐ ยซ๊ตฌ์กฐ์ ์ผ๋กยป ๋ชป ๋๋ค**(๊ฒ์ฌ 1๊ฑด โ 10๊ฑด์ผ๋ก ํ์ฆ). - [rustjava-dod-ci-parity-sibling-repo-survey] โ
โ
ํ์ repo(
wieยทqts) ํ๋ฆฌํฐ ๋ฝ ํ์์ฑ ยซ์กฐ์ฌ+ํ์ ยป โ ๋ ๋ค ยซโ ์กฐ๊ฑด๋ถ ํ์ยป. ์ฑํ ์ ์2026-09-04-dod-ci-parity-lock#p1. โ ์ฝ๊ธฐ ์ ์ฉ(ํ์ repogitยทPRยทํ์ผ ์์ 0 ยทgh api /contents๋ก๋ง ์ฝ์๋ค) ยท ๊ตฌํ 0. โ โ ๊ฒ์ฌ๊ธฐ๋ ยซํฌํ ๋ถ๊ฐยป๋ค โwie๋ DoD ์ ๋ณธ์ดAGENTS.md์ด๊ณ 4๋ฒ์งธ ๊ฒ์ดํธ(cargo test)๊ฐ โ **if:๋ก ๊ฐ๋ฆฐ 2 step + ๋ธ๋ก ์ค์นผ๋ผ๋ผ ์ฐ๋ฆฌ ํ์์ ใ์กฐ๊ฑด๋ถ = ์ ์ธใ๊ฐ โ ๊ฑฐ์ง red** ๋ฅผ ๋ง๋ ๋ค ยทqts๋ DoD ๊ฐmakeํ๊น ์ด๋ฆ(Makefile ๊ฐ์ ์ธต)์ด๊ณ โ toolchain ๋งคํธ๋ฆญ์ค๊ฐ ์์ด ์ถ B ๊ฐ ์ฑ๋ฆฝํ์ง ์์ผ๋ฉฐgitleaks๋ โ action ์ด๋ผ ์ด๋คrun:ํ์๋ ๋ชป ๋ณธ๋ค. โ โ ๊ทธ๋ฐ๋ฐ ์ด๊ธ๋จ์ ยซ๋ ๋ค ์ค์ฌยปํ๋ค โ ์ด๋ ฅ์ผ๋ก ์๋ค:wierust.yml์คํจ 34๊ฑด ์ ์ ์ค โ beta ์ ์์๋ง ์คํจํ clippy 9๊ฑด(26%) ์ธ๋ฐ four gates ์cargo +beta๊ฐ ์๋ค(๋ฌธ์์ดbeta๊ท๋ฒ ๋ฌธ์ 0๊ฑด) ยทqtsci.yml์ต๊ทผ ์คํจ 60๊ฑด ์ ์ ์ค โ **uv run ruff format --check .ยซ๋งยป ์คํจ 10๊ฑด(17%)** ์ธ๋ฐmake lint๋ ์ ์น๋ค (๋ฌธ์์ดformat๊ท๋ฒ ๋ฌธ์ 0๊ฑด). โ โ ๋จผ์ ํ ์ผ์ ๋ฝ์ด ์๋๋ผ ยซ๊ฐ ํ ์คยป โ ๊ทธ ๋ค์์ด ํฌํ ์ด๋ค. ๋ค์ ํฐ์ผ 3๊ฑด(T1ยทT2ยทT3)์ ์ถ๊ณผ ํฉ๊ฒฉ์ ๋ง ์ ์๋ค(๋ฐ๊ถ์ ์ด๊ด ๋ชซ). โ โ ์ผ๋ฐ ์ฌ์ค: ์ธ repo ๊ฐ ์ ๋ถ ์ด ์ด๊ธ๋จ์ ๊ฐ๊ณ ์์๊ณ ์ด๊ธ๋ ์๋ฆฌ๊ฐ ์ ๋ถ ๊ท๋ฒ ๋ฌธ์์ ์์๋ค โ ใ์ฌ๋์ด ๋ฌธ์๋ฅผ ์ต์ ์ผ๋ก ์ ์งํ๋คใ๊ฐ ์ธ repo์์ ๊ฐ๊ฐ ์คํจํ๋ค. โ ์ด repo ๊ฒ์ฌ๊ธฐยทrust.ymlยทDoD ๋ธ๋ก ๋ฌด์ ์ด ยท.rs0์ค. โ ๊ฒ์ดํธโข ์๋ฃ: PR #28 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repo). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ๋ถ๋ชจ #27 ์ฐฉ์ง๋กCONFLICTING์ด ๋๊ณ ยซํด์ ํ์ฐจยป๊ฐ ๋ณ๋๋ก ๋์๋ค โ ์ถฉ๋STATE.md1๊ฑด ยท โ ํ๋จ ํ์ hunk 0(๋ ํ๋ณธ 16์ค ์ค 15์ค ๋ฐ์ดํธ ๋์ผ ยท ์ฐจ์ด๋ ยซ์ฐฉ์ง ์ํยป๋ฟ) ยท ์น์ธ ๋ด์ฉ ๋ฌด์ ์ด ยท โ โ ๊ฒ์ฌ ยซ1๊ฑด โ 10๊ฑดยป ์ ๊ฑด ์ฑ๊ณต(์ถฉ๋ ์ค์๋pull_requestํธ๋ฆฌ๊ฑฐ๊ฐ ยซ๊ตฌ์กฐ์ ์ผ๋กยป ๋ชป ๋๋ค โ ๊ทธ ๊ธฐ์ ์ด ํด์๋ก ํ์ฆ๋๋ค). โ ์ฌ๊ฒ์ ์ด๊ด์ด ยซ๊ฑด๋๋ด๋คยป๋ก ํ์ (์ ๊ฒ์ดํธโก ํ5c2ed7bcยท ํด์ ํ head8ab6bb16). - [rustjava-dod-ci-parity-cross-product-decision] โ
โ
ํ๋ฆฌํฐ ๋ฝ ยซ๊ต์ฐจ๊ณฑยป ํ์ฅ ยซํ์ ยป โ ๊ฒฐ๋ก : ๋ํ์ง ยซ์๋๋คยป.
์ฑํ ์ ์
2026-09-04-dod-ci-parity-lock#p0. โ ๊ฒ์ฌ๊ธฐ ๋ก์ง ๋ณ๊ฒฝ 0 ยท.rs0์ค ยทrust.yml๋ฌด์ ์ด ยท DoD ๋ธ๋ก ๋ฌด์ ์ด. โ ๋น์ฉ์ ยซ๋จผ์ ยป ์๋ค(์ถ์ 0): ๋ฌด๋ณ๊ฒฝ ์ฌ์คํ 19s โ 38s = 2.00ร โ โ ์์ค 1์ค ํธ์ง ํ 89s โ 326s = 3.66ร. โ โ ์ ์ ๋ฌธ๋ฉด์ ใ๋ ๋ฐฐใ๋ ยซ๋ฌด๋ณ๊ฒฝยป์์๋ง ์ฐธ์ด๊ณ ํ์ฐจ๊ฐ ๊ฒช๋ ์ผ์ด์ค๋ 3.66๋ฐฐ๋ค. ์ง๋ฐฐํญ =cargo +beta test --all215s(๊ฐ์ ํธ์ง์์ stable test 66s ์ 3.3๋ฐฐ) ยท ์ฝ๋ 1ํ +171s. โ ๋์ด ์๋ ๋น์ฉ ๋: โดrustfmt๊ฐ beta ์ ๋ฏธ์ค์น๋ผcargo +beta fmt๋ ์ค๋ ๊ทธ๋๋ก rc=1 โตโ ํด์ฒด์ธ ๊ต๋ ์ถ์ถ์ ยซ์๋คยป(beta 3์ค ์งํ stable clippy 2s ยท test 25s) โ ์๊ฐ์ด ์๋๋ผ ๋์คํฌ๋ฅผ ์ด๋ค(target46G). โ ์ค์ต์ ยซ๋ฐ๋กยป ์๋ค: CI ์๋ง ์๋ ์กฐํฉ 3๊ฐ(fmt@betaยทwasm32 clippy@betaยทtest@beta)๋ก ๋น์ด ์์ง ์์ง๋ง, โ โ **rust.yml์ด๋ ฅ 76 run(์ฑ๊ณต 73 ยท ์คํจ 3) ์ ์ ๋ถํด์์ ๊ทธ 3๊ฐ๊ฐ ยซ์๋กยป ์ก์์ ์ฌ๊ฑด์ ยซ0๊ฑดยป** ์ด๋ค โ ์ด ์ ์ฅ์์ beta ์ ์ฉ ์คํจ๋ ์ ๊ฑดcargo clippy --all์ด๊ณ ๊ทธ ์ค์ DoD ๊ฐ ์ด๋ฏธ+beta๋ก ๋ฎ๋๋ค (๋๋จธ์ง 1๊ฑด์ fmt ์ธ๋ฐ 6์ ์ ๊ฑด ์คํจ๋ผ stable ์ด ์ก๋๋ค). โ โ **+237s/ํ์ฐจ๋ฅผ ๋ด๊ณ ์ป๋ ๊ฒ์ด 0.** โ ๋ถ๋ถ ํ์ฅ(fmt@beta๋ง ยท +3s)๋ ๊ธฐ๊ฐ โ ์ด๋ ฅ 0๊ฑด ยท beta rustfmt ๋ฏธ์ค์น๊ฐ ๊ธฐ๋ณธ ยท ๋ถ๋ถ ๊ต์ฐจ๊ณฑ์ ๋ชจ๋ธ ๋ณ๊ฒฝ ์๊ตฌ. โ ์ฌ๊ฐ ์กฐ๊ฑด + ์ธ๋ ๋ช ๋ น + ์ค๋์ ๊ฐ0์docs/upstream-sync-approach.mdยง4 ์ ๋ฐ์๋ค (ใcargo clippy --allยซ์ด์ธยป step ์ด beta ์ ์์๋ง ์คํจํ run ์ด 1๊ฑด์ด๋ผ๋ ์๊ธฐ๋ฉด ๋ค์ ์ฐ๋คใ). โ ๊ฒ์ฌ๊ธฐ docstring ์๋ง ๊ฒฐ์ ํฌ์ธํฐ 1๋ธ๋ก(๊ทธ ํ์ผ์ด ใWidening โฆ is a decisionใ์ด๋ผ ์ ๊ณ ๊ฒฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ชฐ๋๋ค). โ ๊ฒ์ดํธโข ์๋ฃ: PR #27 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋). โ ์ด๋ฒ์ ยซ๋ ๊ฒนยป์ผ๋ก ๊ฐ์ ๋๋ค: โด๋ฑ์ฌ repo(contracts/upstream-sync-repos.conf:22) โตโ ์์ PR #28 ์ด ์ด ๋ธ๋์น ยซ์์ยป ์นํ ์๋ค (git merge-base --is-ancestor 204f98be <#28 ๋ธ๋์น>= YES) โ ์ค์ฟผ์ํ๋ฉด ๊ทธ ์ปค๋ฐ๋ค์ด ์ฌ์์ฑ๋ผ #28 ์ด ๊นจ์ง๋ค. โ ๋จ #28 ์ base ๋main์ด๋ผ ๋ธ๋์น ์๋ฉธ๋ก ๋ซํ์ง๋ ์๋๋ค(rippleํ ์ฌ๊ณ ์ ๋ค๋ฅธ ํ์). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ์ฐฉ์ง ํ ๋ฐ์ฌ์ค:origin/main..upstream/main= 0 ์ ์ง. - [rustjava-local-dod-vs-ci-matrix-mechanical-check] โ
โ
๋ก์ปฌ DoD โ
rust.ymlยซ๊ธฐ๊ณ ๋์กฐยป ์ ์ค โscripts/check-dod-ci-parity.py+ CI jobdod_parity. โ 5ํ์ฐจ ๋ฆฌ๋์ง์ ์์๋ฅผ ยซ์ฌ๋ ์ยป์์ ๋บ๋ค. โ โ ์ค๊ณ ์ ์ฝ์ ๋จผ์ ์ง์ผฐ๋ค โ ยซ๋ก์ ๋ฌธ์์ด ์ค์บ๋ยป๋ฅผ ๋ง๋ค์ง ยซ์์๋คยป. ๊ฒ์ดํธโก ๊ฒ์์๊ฐ ์ค์ธก์ผ๋ก ใF1 ์ ยซ์ยป๊ฐ ์๋๋ผ ยซ๋งยป์ด๋ผ ๋ฌธ์์ด ๊ฒ์ฌ๊ธฐ๋ก๋ ์ ์กํ๋คใ๋ฅผ ์ธ์ ๊ธฐ ๋๋ฌธ์ด๋ค. โ ๋ฌธ์์ ยซ๋ฌธ์ฅยป์ด ์๋๋ผ โ ๋ฌธ์๊ฐ ํ๋ฆฌ๋ ยซ์์ธยป(๋ ์งํฉ์ด ๊ฐ๋ฆฐ ๊ฒ)์ ์ก๋๋ค โCLAUDE.mdDoD ์ฝ๋๋ธ๋ก๊ณผrust.yml์ ๊ฐ๊ฐ ํ์ฑํด ๋์นญ์ฐจ๋ฅผ ๋ธ๋ค(โ ์ ๋ณธ ์์น๋ ๋ฌธ์๊ฐ ์๋๋ผ ์คํฌ๋ฆฝํธ ์์ ๋ฐํ ์๋ค ยท ๊ณ์ฝ 3). โ ์ถ์ ๋: A=๋ช ๋ น ์งํฉ ยท B=toolchain ์งํฉ(strategy.matrix.rustโcargo +<tc>์ ๋). โ ์ค๋ ๋์นญ์ฐจ 0 โ ๊ณ์ฝ 2 ๋๋ก ๊ฒฝ๊ณ ๊ฐ ์๋๋ผ rc=1(๋ง๋๋ค) ๋ก ๋ฐฐ์ ํ๋ค. โ ๊ฒ์ฌ๊ธฐ๊ฐ ์๊ธฐ ์ค์ ยซ์์ชฝ์ยป ๋ฃ๋๋ค โ CI job ๊ณผ DoD ๋ธ๋ก ๋ ๋คpython3 scripts/check-dod-ci-parity.py๋ผ โ ์๊ธฐ ์กด์ฌ๋ฅผ ์๊ธฐ๊ฐ ๊ฐ์ ํ๋ค. โ DoD ๋ 6์ค โ 7์ค. โ โ ๊ฐ์ 5๊ฑด ์ ๊ฑด red ยท ๋ฌด๊ฐ์ green(DoD ์ค ์ ๊ฑฐ ยท CI- run:์ถ๊ฐ ยท ๋งคํธ๋ฆญ์ค nightly ์ถ๊ฐ ยท DoD+beta์ ๊ฑฐ ยทrust-toolchain.toml์ ์ค) โ โ ๊ณตํํ์ง ์๋ค. โ ์นจ๋ฌตํ์ง ์๋๋ค: ์ฑ๊ณต์๋ ใ๋ช ๋ น N๊ฐ ยท toolchain N๊ฐ๋ก ยซ๋ ๋ค ์ผ์นยปใ๋ฅผ ์ฐ๊ณ , โ ๋ชป ๋ณด๋ ๊ฒ(์กฐ๊ฑด๋ถ step = OS ์ถ ยท ๋ ์ถ์ ยซ๊ต์ฐจ๊ณฑยป์ผ๋ก ๋ณด์ง ์๋ ๊ฒ)๋ ๊ทธ ์๋ฆฌ์์ ํจ๊ป ์ฐ๋๋ค. โ ๊ต์ฐจ๊ณฑ ๋ฏธ์ ์ฉ์ ๊ฒฐํจ์ด ์๋๋ผ 2026-09-04 ๊ฒฐ์ ์ด ยซ๊ณ ๋ฅธ ๊ฐยป์ด๋ค(cargo +beta test= ๋ ๋ฒ์งธ toolchain ์ ๋ฉด ์ฌ๋น๋ ยท lint ๋ฅผ ์ง๋ ์ถ์ clippy ๋ฟ) โ ๋ํ๋ ๊ฒ์ ยซ์ ๊ฒฐ์ ยป์ด๋ค. โ **ยง4 ์ ์ ธ ๋ ํ ๋ง์ ยซ์ง์ ๋คยป** โ ๊ฐ์ ์ ์ด๊ฐ ๋ ๋ฒ์ด๋ฉด ๋ค์ ์ฌ๋์ด ํ์ชฝ๋ง ๊ณ ์น๋ค(์ ๋ณธ = ์คํฌ๋ฆฝํธ). โ C7โ(ใ๊ทธ ์ถ์ ๋๋ฆฌ๋ ๊ฒ์ด ์ฌ๋์ด๋คใ)๊ฐ ๋ซํ๋ค ยท โ(OS ์ถ)๋ ๊ทธ๋๋ก ์ด๋ ค ์๋ค. โ.rs๋ณ๊ฒฝ 0 ยทallow9๊ณณ ๋ฌด์ ์ด ยท upstream ๋ฌด์ ์ด. โ ๊ฒ์ดํธโข ์๋ฃ: PR #26 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repo). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ์ฐฉ์ง ํ ๋ฐ์ฌ์ค ํ์ธ:origin/main..upstream/main= 0 ์ ์ง(์ค์ฟผ์์์ผ๋ฉด ๊ณ๋ณด๊ฐ ์ ํ ๋ค์ ๋ฒ์ด์ง๋ค) ยท โ **origin/main์์ ์ ์ค jobdod_paritysuccess** ํ์ธ. - [rustjava-sync-contract-standing-clause-for-our-assets-going-stale] โ
**ใ์ฐ๋ฆฌ ์์ฐ์ด ๋ก๋๋คใ ์์ ์กฐํญ
ยซํ์ ยป โ ๊ฒฐ๋ก : โ
โ
๋ฃ์ง ยซ์๋๋คยป. ๋์ ยซ๊ตฌ๋ฉ ํ๋ยป(๋ก์ปฌ DoD ๊ฐ CI ๋งคํธ๋ฆญ์ค๋ฅผ ์ฌํํ์ง ์๋ ๊ฒ)๋ฅผ ๋ง์๋ค.**
โ
์ฝ๋(
.rs) ๋ณ๊ฒฝ 0 ยท ๊ท๋ฒ ๋ฌธ์ 2 + ๊ธฐ๋ก ๋ฌธ์ 4. โ ๋จผ์ ์ ๋ค(๋ชฉ๋ก ๋ฌธ์ํ๋ก ์์ํ์ง ์์๋ค): ์์ฐ 8๊ฑด์ ๋์ฐ๋ณ์ด๋ก ๊นจ๋จ๋ ค ๋ฌด์์ด ์ก๋์ง ์๋ค โ ๊ฒฝ๋ก ๋ฌธ์์ดยทsetProperty์์ ์ยทcharset ๋ผ์ฐํ ยทClassFormatError๋จ์ ์cargo testRED ยท ์๋ span ์ clippy RED ยทdouble_must_useallow ๋ ๊นจ์ ธ๋ ๋ฌดํด ยท ์ํฌ๋ก๊ทธ ์คํฌ๋ฆฝํธ๋ ๋ก์ปฌ+CI ๋ ๋ค. โ โ โ **[๊ฒ์ดํธโก ์ ์ ] ใ์๋ฌด๊ฒ๋ ์์ใ์ ยซ1๊ฐยป๊ฐ ์๋๋ผ ยซ2๊ฐยป(โก CI--excludeยท โฆdouble_must_useallow) โ ์ดํ์ด โฆ์ ยซ๋นํ์คยป ์๋ฆฌ(์ค๋ณต crate-level attribute 1๊ณณ)์์ ์ฌ ใ๋ฌดํดใ๋ก ์ ์๊ณ , โ 9๊ณณ ์ ๊ฑด ์ญ์ ๋ก ์ฌ์ธก์ ํ๋ฉด stable 0 ยท โ beta RED**(rc=101 ยท ์ง๋จ 6๊ฑด)์ด๋ผ โฆ์ ๊ทธ๋ฌผ๋ CI ๋ง์ด๋ค. โ ใ1๊ฐ๋ฉด ๊ทธ ํ๋๋ฅผ ๊ณ ์ณ๋ผใ ๊ท์น์ ์ ์ฉ๋์ง ์๋๋ค. โ ๊ฒฐ๋ก ์ ๊ทธ๋๋ก ใ๋ฃ์ง ์๋๋คใ์ด๋ ๋ ผ๊ฑฐ๋ฅผ ๋ค์ ์ธ์ ๋ค: โก์ โฆ์ ยซํ ๊ทผ์ธ์ ๋ ์ผ๊ตดยป์ด๋ค โ โ ๋ก์ปฌ DoD ๊ฐ CI ยซ๋งคํธ๋ฆญ์คยป๋ฅผ ์ฌํํ์ง ์๋๋ค(โก = ๋น ์ง- run:์ค = target ์ถ ยท โฆ = ๋น ์ง toolchain ์ถ). โ ๊ทผ์ธ ํ๋๋ฅผ ๊ณ ์น๋ ๋ ๋ค ๊ทธ๋ฌผ์ ์ป์๋ค(DoD ์cargo +beta clippy์ถ๊ฐ โ โฆ์ด ๋ก์ปฌ์์ RED(rc=101 ยท ์ง๋จ 6๊ฑด)๋ก ์กํ๋ค). โ โ ๊ทผ์ธ์ ใ์์ฐ ๋ชฉ๋ก์ด ์๋คใ๊ฐ ์๋์๋ค โ โ ๋ก์ปฌ DoD ๊ฐ CI ๊ฒ์ฌ 5์ข ์ค ยซwasm32 clippyยป ํ ์ค์ ๋น ๋จ๋ ธ๊ณ ๊ทธ ์ค์ด ๊ทธ ์์ฐ์ด ์ฌ๋ ์ ์ผํ ์๋ฆฌ๋ค. โCLAUDE.mdDoD ๊ฐ ์ด์ โ CI ๋ช ๋ น 5์ค + toolchain ์ถ 1์ค = ยซ6์คยป์ ์ถ์ฝ ์์ด ์ฃ๋๋ค(โ [๊ฒ์ดํธโก ์ ์ ] ใ5์คใ์ ๊ณ์ ยซ1ยป ์์ ์๋ค โ ๋น ์ง ๊ฒ์ ยซ์ค ํ๋ยป๊ฐ ์๋๋ผ ยซ๋ ์ถยป์ด์๋ค). โ โ **[ํ์ ์ ์ ] ๊ทธ ยซ6์คยป๋ ๋ก์๋ค โ ํ๋ฆฌํฐ ๊ฒ์ฌ๊ธฐ๊ฐ ๋ํด์ ธ ยซ7์คยป์ด๋ค.** โ โ ์ด์ ์ค ์๋ฅผ ๋ฌธ์ฅ์ ์ ์ง ์๋๋ค:scripts/check-dod-ci-parity.py(CI jobdod_parity)๊ฐ DoD ์ฝ๋๋ธ๋ก๊ณผrust.yml์ ๊ฐ๊ฐ ํ์ฑํด ๋์นญ์ฐจ๋ฅผ ๋ธ๋ค. โ ๊ทธ๋ฆฌ๊ณ โก๋ ยซ์กฐ์ฉํยป ์คํจํ์ง๋ ์๋๋ค(excluded package(s) not found+ ๋น๋ ์คํจ) โ ๋ฌธ์ ๋ ์นจ๋ฌต์ด ์๋๋ผ ๋ฆ์์ด๋ค. โ ์ฌ๊ฐ ์กฐ๊ฑด์ ยซ์ถ ๋ยป์ด๋ค(์ ์ ): ์ถโ- run:์ค ยท โ ์ถโก toolchain ๋งคํธ๋ฆญ์ค โ ์ธ๋ ๋ช ๋ น ๋ ๋ค ยง4 ์ ๋ฐ์๋ค. โ ์ค๋์ ๊ฐ = ์ถโ 0 ยท ์ถโก 0(์ฐฉ์ ์ ์ถโ 5 ยท ์ถโก 1). โ ์ธ ๋์ฐ๋ณ์ด(beta ์ ๊ฑฐยทnightly ์ถ๊ฐยท- run:์ถ๊ฐ)๋ก โ ๊ฐ ์ถ์ด ยซ์๊ธฐ ์๋ฆฌยป์์๋ง ๋ฐ์ํจ์ ์ค์ธกํ๋ค. โ C7 ๊ณ ์ง: DoD ๋ธ๋ก ยซ๊ฐ์ ยป๊ณผ OS ์ถ 3์ข ์ ์ด ๋์กฐ๊ฐ ๋ชป ์ก๋๋ค. โ โ โ **[๊ฒ์ดํธโก 2์ฐจ ์ ์ ยท fix2] ใ๊ณ ์ณค๋ค๊ณ ยซ์ ๊ณ ยปํ ๊ฒ์ด ์ฐ์ถ๋ฌผ์ ๋จ์ ์์๋คใ โ ๋ ๊ฑด.** โดใ๋ค์ฏ โ ์ฌ์ฏใ ํต์ผ์ด โ 4์๋ฆฌ ์ค 1์๋ฆฌ๋ง ๋๋ค โต์ํฌ๋ก๊ทธ.jsonverification์ด โ diff ์ ํ ์ค๋ ์์ด ์ฒ ํ๋ ๋ผ๋ฒจ(ใbeta ๋ ok โ ๊นจ์ ธ๋ ๋ฌดํดใ)์ ยซ๊ฒ์ฆ ๊ธฐ๋กยป ํ๋์ ๊ทธ๋๋ก ์ฃ๊ณ ์์๋ค. โ ์ ๋ฌธ ๊ฒ์์ผ๋ก ๋ฐ๋ ค ๋ฐ์์ ยซ๋ยป ์ฐพ์๋ค: ใCI ๋ช ๋ น 5์คใ ํ์ ์ 6์๋ฆฌ ยท ์ํฌ๋ก๊ทธ ์ฌ๊ฐ ์กฐ๊ฑด ๋ธ๋ก์ด ยซ์ถโ ๋งยป ์ค์ ๊ฒ ยท ์ํฌ๋ก๊ทธ ๊ฒ์ฆ ํ์+betaํ์ด ์๋ ๊ฒ. โ โ ์ ๊ฑด ๋๊ธฐ + ๋ง๊ฐ ์ ์ฐจ 3์ค์ ยง4 ์ ๊ท์จ๋ก ๋ฐ์๋ค. โ โ โ **[๊ฒ์ดํธโก 3์ฐจ ์ ์ ยท fix3] โด์ ๋ผ๋ฒจ ใbeta error 7ใ์ด ยซ๊ฑฐ์งยป์ด์๋ค โ ์ฐฉ์ง๋ณธ ยซ18์๋ฆฌยป ์ ๊ฑด ์ ์ .** ์ค์ธก(9๊ณณ ์ญ์ โcargo fmt --allโ beta clippy): โ rc=101 ยทdouble_must_use์ง๋จ ยซ6ยป๊ฑด (์ ๊ฑดjvm/src/jvm.rs:140ยท404ยท438ยท779ยท791ยท1016) ยท cargo ์์ฝ ์ค์ด ใdue to 6 previous errorsใ๋ผ ๋งํ๋ค. โ **ใ7ใ์grep -c '^error'(์ง๋จ 6 + ์์ฝ ์ค 1)์ ๊ฐ์ด๊ณ ๊ทธ ํ๋๊ฐ ๋ด๊ฑด ์ ์๊ฐ ์๋์๋ค โ โ ํํด ๋ฌธ์ฅ ์ฒ ํ.** โ **ใ6ใ์ ยซํํยป์ด๋ค** โjvm-bytecode๊ฐjvm์ ์์กดํด jvm ์ด ๊นจ์ง๋ฉด ๊ทธ ํฌ๋ ์ดํธ๋ ๋ฆฐํธ๋์ง ์๋๋ค. โต์์กด 4๊ฑด(์ํฌ๋ก๊ทธ ใ๋ฌธ์ 2ํ์ผใ 2์๋ฆฌ ยท jsontitleยท ใ์ฑํ ์ ์ ๋ใ 3์๋ฆฌ) + โ PR ์ ๋ชฉ๊น์ง ๋๊ธฐ. โถโ **ยซ5๊ฑด์งธยป๋ฅผ ์ค์ค๋ก ์ฐพ์๋ค**(changes[0]) โ โ ํํฐ ๊ฑธ๋ฆฐ sweep ์ด ยซ๊ฑฐ์ง 0ยป์ ๋๊ธฐ ๋๋ฌธ์ด๊ณ (zsh ๋จ์ด๋ถํ ), ๊ทธ ๊ตํ์ ยง4 ๋ง๊ฐ ์ ์ฐจ 4๋ฒ์ผ๋ก ๋ฐ์๋ค. โ ๊ฒ์ดํธโข ์๋ฃ: PR #25 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repocontracts/upstream-sync-repos.conf:22). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ๊ฒ์ดํธโก 5ํ์ฐจ ๋ง์ approve(์ดํ โ fix โ fix2 โ fix3) โ โ โ ๋ฐ๋ ค ๋ท์ด ์ ๋ถ ยซ๋ด์ฉยป์ด ์๋๋ผ ยซ์ ๊ณ ํ ๊ฒ โ ์ฐ์ถ๋ฌผยป์ ์ด๊ธ๋จ์ด์๋ค(๊ณ์ ยท ์ ๋ผ๋ฒจ ยท ์์กด ์๋ฆฌ). โ ๊ทธ ๋๊ฐ๋กdocs/upstream-sync-approach.mdยง4 ์ โ ๋ง๊ฐ ์ ์ฐจ 4์ค์ด ๋จ์๋ค(์ฐฉ์ง๋ณธ ์ ๋ฌธ ๊ฒ์ ยท ๋ถ๋ชจ = ํ์ผ ร ํ๋ ยท ํ์ ์ ยท โ ํํฐ ๊ฑธ๋ฆฐ ๊ฒ์์ ยซ๊ฑฐ์ง 0ยป). โ ๋จ์ minor ํ๋(F1 ยท ์ํฌ๋ก๊ทธ.md:54์ ใCI ๊ฒ์ฌ ยซํ ์คยปใ)๋ ์ด ํ์ฐจ๊ฐ ยซ๊ณ ์น์ง ์์๋คยป โ ๋ค์์ ๊ทธ ํ์ผ์ ๋ง์ง๋ ํ์ฐจ๊ฐ ยง4(:90)์ ยซ๊ฐ์ ํ์งยป๋ฅผ ๋ฌ๋ฉด ๋ซํ๋ค. - [rustjava-upstream-sync-s8-rename-sweep-decision] โ
โ
upstream ์ปท
bd42427(๊ฐ๋ช ์ค์ ยท 12์ปค๋ฐ) ๋จธ์ง โ โ โ โmerge-baseba5797bโbd42427ยท behind โ 12 โ 0** ยท ๋ถ๋ชจ 2๊ฐ โ โ โ upstream ์ ยซ์์ ํยป ๋ฐ๋ผ์ก์๋ค. ์ฐฉ์ ์ฌ์ธก์ (์ ์์): ๋์ 8 ยท ๋ธํ +8(base3fb08a8ยท merge-baseba5797b) โ ใ์ฌ์ 8 ์ด์๋คใ. โ ๊ฐ๋ช ๋์ํ(upstream ์ด๋ ฅ ์ค์ธก ยท A/D 0 ยท ์ ๊ฑด R):java_runtimeโ**rustjava-runtime(2ํ ยท 379๊ฑด R079) ยทtest_dataโtest-data(243 R083) ยทjvm_rustโjvm-bytecodeยทjava_class_protoโjvm-class-protoยทjava_constantsโjvm-typesยทtest_utilsโtest-utils. โ โ modify/delete = ยซ0๊ฑดยป** โ ๋๋ ค์ํ ํํ๊ฐ ์ ๋์๋ค. git ์ดCONFLICT (file location)+AU๋ก ์ฐ๋ฆฌ ๊ณ ์ 6๊ฑด์ ์ ๊ฒฝ๋ก๋ก ์ด๋ฏธ ์ฎ๊ฒจ ๋๊ณ ์ด๋ ํ์ธ๋ง ์๊ตฌํ๋ค โ ์ฒ๋ถ ใ๊ฐ๋คใ ์ ๊ฑด ยท โ **origin/main๋ธ๋กญ ๋์กฐ๋ก 6๊ฑด ยซ๋ฐ์ดํธ ๋์ผยป ํ์ธ** ยท โ ํฝ์ค์ฒ 5 โ 5. โ โ ๊ฐ๋ช ์ด ยซ์ฐ๋ฆฌ ์์ฐ 2๊ฑดยป์ ๋ก๊ฒ ๋ง๋ค์๋ค(5ํ์งธ ยท ๋์์ ์ฒ์ โ CIยท๊ฒฝ๋ก):rust.yml์--exclude test_utils(์ ํฌ๋ ์ดํธ๋ช โ wasm32 ์ red ยท ์ค์ธก rc=101โ0) โtest-utilsยทtests/test_class_format.rs์"test_data/"4๊ณณ โtest-data/. โ ๋ ๋ค ยซ์ฐ๋ฆฌ ํ์ผยป์ด๋ผ ์ถฉ๋์ด ๋ ์ ์๋ค. โ **Cargo.lockํ๊ฐ ์ฐจ๋จ**:--theirs+build ๊ฐtracing0.1.44 โ 0.1.41(=PR #4 ์ธํ๋ฆฌ์ฆ ๋๋๋ฆผ) ยทtracing-subscriberยทsyn๋ ๋ด๋ ธ๋ค โ S5 ์ฒ๋ฐฉ(main lock ์์ ์ฌ์์ฑ)์ผ๋ก ๋ด๋ ค๊ฐ ๊ฒ 0. green: stable 4์ข + beta 2์ข rc=0 ยท 554/0/1(baseline 554 ยท ์ฆ๊ฐ 0 ์ด๊ณ ๋ง๋ค โ upstream ๋ 547โ547). โ ๊ฒ์ดํธโข ์๋ฃ: PR #24 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repo). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ โ โ ์ด ์ฐฉ์ง๊ฐ ยซ์บ ํ์ธ ์ข ๋ฃยป๋ค โ 2026-08-16 ์ฐฉ์ ์ behind 33 โ ์ค๋ ยซ0ยป. S1~S8 ์ปท ์กฐ์ 8/8. โ ๋ค์ ๋๊ธฐ๋ ยซ๊ณํ๋ ์ปทยป์ด ์๋๋ผ ยซupstream ์ด ์์ง์ผ ๋ยป๋ค โ ์ ๊ธฐ ์ถ ์ฌ๋ถ๋ ๋ณ๊ฑด ํ์ (์ํฌ๋ก๊ทธproposals[1]). - [rustjava-upstream-sync-s7-and-fix-the-conflict-count-format] โ
upstream ์ปท
ba5797b(๊ฐ์ ๋์คํจ์น ํด์ ยท 1์ปค๋ฐ ยท 319ํ์ผ) ๋จธ์ง โ ์ถฉ๋ 1 ํด์ + โ **ยง5 ใ์ถฉ๋ ์ใ ์ ๋ณธ ์์์ ยซ๋ธํ/๋์ ยป ์ถ์ ๋ฃ์๋ค.** โ **merge-base95ebc5cโba5797bยท behind 13 โ 12 ยท ๋ถ๋ชจ 2๊ฐ** โ โ โ ๊ณํ 7ํ์ฐจ(S1~S7) ์์ฃผ. ์ฐฉ์ ์ฌ์ธก์ (์ ์์): ์ปทba5797b= ๋์ 1 ยท ๋ธํ +1(base3e02f8cยท merge-base95ebc5c). โ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-basec4665b0โ95ebc5cยท behind 24 โ 13 ยท ๋จธ์ง์ปค๋ฐ ๋ถ๋ชจ 2๊ฐ**(๊ณ๋ณด ๋ณด์กด).cargo test --all554 passed / 0 failed / 1 ignored(S5 427 โ +127) ยท stable 4์ข + โ beta 2์ข rc=0. โ โ **ใS6 ์ ์ถฉ๋ 0ใ ์์ธก์ ยซ๋ธํยป์๋ค โ ใํ ๊ฒ์ด ์๋คใ๊ฐ ์๋๋ค.** ๊ทธ 0 ์ ์ base8c1238b์์ ์ฐ ยซ์๋ก ๋ํ๋ ํ์ผ ์ยป(๋์ 3 โ 3)์ด๊ณ , ์ฐฉ์ ์ฌ์ธก์ ์ ์ basea0b5d3c(merge-basec4665b0)์์ โ ๋์ 1์ด๋ค.string.rs๋ S5 ์ ์ค๊ณ ํ๋จ์ผ๋ก ์ฐ๋ฆฌ ๋ถ๊ธฐ(+8/โ28)๊ฐ ๋จ์ upstream ์ด ๋ง์ง ๋๋ง๋ค(+402/โ121) ๊ณ์ ์ด๋ฆฐ๋ค. โ โ **ยง5 ์ ํ ์ค ๋ณดํฐ๋ค: base ์ ยซํจ๊ปยป ยซ๋ธํ์ธ๊ฐ ๋์ ์ธ๊ฐยป๋ ๋ฐํ๋ผ.** ํด์ = import ๋ธ๋ก ํฉ์งํฉ(์ฐ๋ฆฌcharset::Charset+ upstreamFormatterยทLocaleยทregex) ยทCharset๋ผ์ฐํ 4๊ณณ ์์กด ยทdecode_str/encode_str์ฌ์ ์ 0. โ โ ๊ณ์ฝ4โ ์ ๋ ์ด ยซ์ถฉ๋ 0์ผ๋ก ๋ค์ด์จยป ํ์ 1๊ฑด์ ยซํ ์คํธ ์ ์ยป ์ก์๋ค โ ์ด ํํ ยซ์ธ ๋ฒ์งธยป: upstream ์ ๊ท ํ์ผjava/util/regex/test_pattern_syntax_exception.rs๊ฐSystem.setProperty๋ฅผ)Ljava/lang/Object;๋ก 3๊ณณ ๋ถ๋ฅธ๋ค โ ์์ ์๋งString์ผ๋ก(S5 ์ ํ๋ฆฝ๋ ์ฒ๋ถ๊ณผ ๋์ผ). โ ์ ๋ก S3 3๊ฑด โ S5 5๊ณณ โ S6 3๊ณณ โ ๋งค ํ์ฐจ ยซ์ ํ์ผยป๋ก ์ฌ์ ์ ๋๋ค. โ ๊ฒ์ดํธโข ์๋ฃ: PR #22 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repo). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ์ฐฉ์ง๋ก base ๊ฐ ๋ ๋ฐ๋์๋ค โ ยง5 ์ ใS7 ์ ์ถฉ๋ 1(thread.rs)ใ์ ยซ๋ค์ ์ฌ์ผ ํ๋คยป(baseยท๋ธํ/๋์ ๋ณ๊ธฐ). โ ๋จ์ ๊ตฌ๋ฉ(๊ฒ์์ ์ง์ ): ยง5 ยซ์์ ๊ท์นยป ์ ์ ์ ๋ณธ ์์(:268)์ ์์ง<์>(base ยท merge-base)๋ฟ์ด๊ณ , ยซ๋ธํ/๋์ ยป ์ถ์ S6 ์ฐฉ์ง ๊ธฐ๋ก(:444) ์์๋ง ์๋ค โ โ ๋ค์ ยง5 ๊ฐฑ์ ํ์ฐจ๊ฐ ์ ๋ณธ ์์์ ํ ์ค ์ฌ๋ ค์ผ ํ๋ค. - [rustjava-upstream-sync-s5-with-remeasured-conflicts] โ
upstream ์ปท
c4665b0(#190 Java 1.2 API ํ์ฅ) ๋จธ์ง โ ์ถฉ๋ 3 ํด์. โ **merge-base3296139cโc4665b0ยท behind 30 โ 24 ยท ๋จธ์ง์ปค๋ฐ ๋ถ๋ชจ 2๊ฐ**(๊ณ๋ณด ๋ณด์กด).cargo test --all427 passed / 0 failed / 1 ignored(S4 261 โ +166) ยท green 4์ข rc=0. โ ์ฐฉ์ ์ ์ฌ์ธก์ (ยง5 ์์ ๊ท์น ยท base ๋น์ main1983d9fยท merge-base3296139c)์ด ์ฌ์ธก์ ํ์ ์ผ์น. โ โ ์์ธก 3๊ฑด ์ค 2๊ฑด ์ ์ค ยท 1๊ฑด ๋ฐ์ฆ: โดCargo.lock์ฌ์์ฑ โตstring.rs์ค๊ณ ํ๋จ์ด ๋ง์์ผ๋ ยซํํยป๊ฐ ๋ฌ๋๋ค โ upstream ์ดcopyValueOf2์ข ์ ์ ์คํ๋ฉฐdecode_str/encode_strํ๋ฅผ ยซ๋์ด๋ ธ๋๋ฐยป 4๊ฐ ํธ์ถ๋ถ๋ ์๋๋ณํฉ์ผ๋ก ์ฐ๋ฆฌCharset๋ผ์ฐํ ์ ์ ์งํ๋ค โ ์ ๊ท API ๋ ์ทจํ๊ณ ํ๋ ๋ฒ๋ ธ๋ค(์ ๊ทธ๋ฌ๋ฉด dead code โ S3 ์๋ฃ์กฐ๊ฑด ์๋ฐ). โถtest_timer.rsโ **ใ๋์น๊ธฐใ ์์ธก์ด ๋ฐ์ฆ๋๋ค** โ upstream ์ด ๋ฒฝ์๊ณ ํ ์คํธ 2๊ฑด์ manual clock + monitor notification ๊ธฐ๋ฐ ๊ฒฐ์ ์ฑ ์ค์ํธ 12๊ฑด์ผ๋ก ๋์ฒดํ๋ค โupstream ์ฑํ. โ โ S4 ๊ฐ ๋จ๊ธด ใ์ฐ๋ฆฌ ํ ์คํธ์ ์๊ฐ ์์กดใ ๋ณ ์ถ์ ์๋ฉธํ๋ค โ ๋ฐ๊ถํ์ง ๋ง๋ผ(2000ms ๊ทผ๊ฑฐ๋ ยง5 ์ฐฉ์ง ๊ธฐ๋ก์ ๋ณด์กด). โ โ ์ถฉ๋ ยซ๋ชฉ๋ก์ ์๋ยป ํ์ 1๊ฑด โ ยง4 ๊ฐ ๊ฒฝ๊ณ ํ ํํ๊ฐ ์ค์ ๋ก ๋ฌ๋ค: upstream ์ ๊ท io ํ ์คํธ 3ํ์ผ 5๊ณณ์ดSystem.setProperty๋ฅผ)Ljava/lang/Object;๋ก ๋ถ๋ฅด๋๋ฐ ์ฐ๋ฆฌ๋ PR #5 ์์ JDK ๊ท๊ฒฉ๋๋ก)Ljava/lang/String;์ด๋ผ โ ์ถฉ๋ ๋ง์ปค 0์ค์ธ๋ฐNoSuchMethodError3๊ฑด. ์์ ์๋ง ๋ง์ท๋ค(โtest_booleanยทtest_integerยทtest_long์ด ์ ํ์ฐจ์ ์ด๋ฏธ ๊ฐ์ ์ฒ๋ถ์ ๋ฐ์๋ค ยทProperties.setProperty์ Object ๋ฐํ์ JDK ๊ท๊ฒฉ์ ์ณ์ ๋ฌด์ ์ด). โ ๊ฒ์ดํธโข ์๋ฃ: PR #21 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repo). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. โ ์ฐฉ์ง๋ก base ๊ฐ ๋ฐ๋์๋ค โ ยง5 ์ ใS6 ์ ์ถฉ๋ 0 ยท S7 ์ ์ถฉ๋ 1ใ์ ยซ๋ค์ ์ฌ์ผ ํ๋คยป (ยง5 ์์ ๊ท์น: ์ถฉ๋ ์๋ฅผ ์ ์ ๋๋ base ๋ฅผ ๋ฐ๋์ ๋ณ๊ธฐํ๋ผ). - [rustjava-upstream-sync-remeasure-s5-s7-and-lock-restore-basis] โ
**PR #18 ์ฐฉ์ง ยซ๋คยป ๊ธฐ์ค์ผ๋ก S5~S7 ์ฌ์ธก์
- ใ์ถฉ๋ ์์ base ๋ณ๊ธฐใ๋ฅผ ยง5 ์์ ๊ท์น์ผ๋ก ์ฑํ.** โ
์ฝ๋ ๋ณ๊ฒฝ 0 ยท ๋ฌธ์ ์ ์ฉ.
์ธ base ๋ณ๊ธฐ: ๊ฐ์ ์ปท
ba5797b๊ฐ 19(๊ณํ03438b0) ยท 112(๋ณต์ ์ 3a59776) ยท 4(๋ณต์ ํ8c1238b) โ โ 28๋ฐฐ ์ฐจ์ด. base ์๋ ์ถฉ๋ ์๋ ๊ฒ์ฆ ๋ถ๊ฐ๋ค. โ ์ ์ถฉ๋(๋ณต์ ํ): S5 +3 ยท S6 +0 ยท S7 +1. โ S5 ๋ ใ์ถฉ๋ 0 ๋ฌผ๋ใ์ด ์๋๋ค โ ๊ทธ 3๊ฑด์Cargo.lock(์ฌ์์ฑ) ยทstring.rs(โ ์ค๊ณ ํ๋จ) ยทtest_timer.rs(S4 ๊ฐ ๋ฃ์ 2000ms ์ฌ๋ฐฑ)์ด๊ณ โ โ ์ ๋ถ upstream ์ด ์๋๋ผ ยซ์ฐ๋ฆฌ๊ฐ ์ ํ์ฐจ์ ๋จ๊ธด ๋ก์ปฌ ๋ถ๊ธฐยป๊ฐ ๋ง๋ ๋ค. โ **ใ์์ธก์ ํํใ์ด S7 ์์ ์ฒ์ ๊นจ์ก๋ค**(์์ธก +3 โ โ+2 ยท โ+1) โCargo.lock์ด์ค ๊ณ์ ยทclass_format_error.rs๊ฒฝ๋ก ์ค๊ธฐ ยท โ ๊ทธ ํ์ผ๊ณผthrowable.rs๋ ๋ค ยซ์ฐ๋ฆฌ ์ชฝยป์ด3296139์ ๋ฐ์ดํธ ๋์ผ์ด๋ผ upstream ๋ณ๊ฒฝ(+4/โ3 ยท +81/โ29)์ด ๊นจ๋์ด ์ ์ฉ๋๋ค(S3 ๊ฐ ์๋ ด์์ผฐ๋ค). โ โ **[2026-09-04 ์ ์ ] ์ดํ์ดclass_format_error.rs๋ฅผ ใupstream ๋ณ๊ฒฝ 0ใ์ผ๋ก ์ ์ ๊ฒ์ ยซ๊ฑฐ์งยป์ด๊ณ ยซ0 ์ธ ์ชฝ์ด ๋ฐ๋ยป์๋ค** โdiff 3296139 ba5797b= +4/โ3 ยทdiff 3296139 origin/main= 0์ค(๋ธ๋กญ0dbd369a). โ โ **ใupstream ์ด ์ ๊ฑด๋๋ฆฐ๋คใ๊ฐ ์๋๋ผ ยซ์ฐ๋ฆฌ๊ฐ ์๋๋ ์๊ฐ ์ถฉ๋ํ๋คยป** ์ด๋ค. โ ๋ถ์ ๋ฐ๊ฒฌ โ S8 ์ด ํ์ํ๊ณ ๋จ์ ๊ฒ ์ค ์ ์ผ ํฌ๋ค:ba5797b..upstream/main12์ปค๋ฐ ยท โ ๋์ 11(+7) ยทjava_runtime/โrustjava-runtime/ยทtest_data/โtest-data/๊ฐ๋ช ์ค์์ด๋ผ ์ฐ๋ฆฌ ํฝ์ค์ฒ์ ๊ฝํ๋ค. โ ๊ฒ์ดํธโข ์๋ฃ: PR #19 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋ ยท ๋ฑ์ฌ repo). โ ์ฐฉ์ง ยซ์ ยปREPORT.mdยทSTATE.md์์น ์ถฉ๋ 2๊ฑด์ ํฉ์งํฉ์ผ๋ก ํด์ํ๋ค(PR #20 ์ด ๋จผ์ ์ฐฉ์ง ยท ์ฝ๋ ์ถฉ๋ 0). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ.
- ใ์ถฉ๋ ์์ base ๋ณ๊ธฐใ๋ฅผ ยง5 ์์ ๊ท์น์ผ๋ก ์ฑํ.** โ
์ฝ๋ ๋ณ๊ฒฝ 0 ยท ๋ฌธ์ ์ ์ฉ.
์ธ base ๋ณ๊ธฐ: ๊ฐ์ ์ปท
- [rustjava-worklog-mandate-decision-and-local-gate] โ
์ํฌ๋ก๊ทธ ์์ฑ์ DoD ยซ์๋ฌดยป๋ก ๊ฒฐ์ + ํ์ ์ ๊ธ์
๋ก์ปฌ DoD 4๋ฒ์งธ ๋ช
๋ น์ผ๋ก ํธ์
. โ
์ฝ๋ ๋ณ๊ฒฝ 0 ยท ์ ๋๊ตฌ 0 ยท CI ์ํฌํ๋ก ๋ฌด์ ์ด.
โ
๋จผ์ ์๋ค: ๊ท์ฝ ์ฐฉ์ง(
b3a4cf4ยท 2026-08-26) ์ดํ ์ฐฉ์ง 4ํ์ฐจ ์ค 3๊ฑด(75%) ์์ฑ ยท ์ ์ผํ ๋ฏธ์์ฑ(PR #13)์ ๋ถ๋ชจ๊ฐ ์ ํํb3a4cf4๋ผ ๊ท์ฝ์ ์ ์ ์์๋ค(์ ์ ์์๋ ํ์ฐจ๋ง 3/3). โ โ ๊ด์ธก์ด ๋์๋ฐ๋ ์๋ฌดํํ ์ด์ = ์คํจ๊ฐ ยซ์กฐ์ฉํ๊ณ ์ ๊ธ ์ ์๋คยป โ ์ ๊ธ์ ์กด์ฌํ๋.json๋ง ๊ฒ์ฌํ๋ฏ๋ก(๋น์๊ธ ์ค๊ณ) ์์ ์ ์ด ํ์ฐจ๋ red 0 ยท ์นด๋๋ง 0 ์ด๋ค. ํ๋ณธ 3๊ฑด ยท ์ ๊ฑด ๊ฐ์ ๋ฆฌ๋์ง. โ ๋๋๋ฆด ์(AGENTS.mdยงRound Worklog ยท ์ธก์ ๋ช ๋ น ๋๋ด): 10ํ์ฐจ ์ฐฉ์ง ์์ ์ฌ์ธก์ โ โ๋ฏธ์์ฑ โฅ 2 โ ๋ฌธ์์ ๋นผ๊ฑฐ๋ ๊ธฐ๊ณ ๊ฐ์ ๋ก โ์ด๋ฆฐ ์นด๋ < 5 โ ์๋ฌด ์ฌ๊ฒํ . โ **cargo test์์ผ๋ก ์ ๋ฃ์๋ค**:serde_json์ดCargo.lock์ ๋ถ์ฌ(์ ์์กด์ฑ + 6์ ๋น๋) ยทpython3shell-out ์ python ์๋ ๋จธ์ ์์ ์คํ red โ ใ์คํ 0ใ ์ ๋ ์กฐ๊ฑด ์๋ฐ. ๋๊ฐ = +0.10s(3๋ช ๋ น warm ํฉ๊ณ 60.2s ๋๋น +0.17% ยท ์์ ์บ์ ํ์ฐจ 9.36s ๋๋น +1.1%). โ ๊ฒ์ดํธโข ์๋ฃ: PR #20 โ โ โ **--merge์ฐฉ์ง**(โ--squash์๋.rustjava๋upstream-sync-repos.conf๋ฑ์ฌ repo ๋ผ ์ค์ฟผ์๊ฐ ๊ณ๋ณด๋ฅผ ์ง์ด๋ค โ #11ยท#13ยท#16ยท#17 ์ด ๊ทธ ํํ์๋ค). ๋จธ์ง์ปค๋ฐ sha ๋ ํ์merged:์ฐธ์กฐ. - [rustjava-upstream-sync-s3] upstream ์ปท
822504b(#180 ์ค๋ฅ ๋ถ๋ฅ) ๋จธ์ง โ ์ถฉ๋ 11 ํด์. โ S2(PR #13) ๋ธ๋์น ยซ์์ยป ์์๋ค โ ๋น์main์ S2 ๊ฐ ์์ด base ๋ฅผmain์ผ๋ก ์ก์ผ๋ฉด S2 ์ ์ถฉ๋ 5๊ฑด์ ๋ค์ ๋ง๋๊ธฐ ๋๋ฌธ์ด๋ค. โ ๊ฒ์ดํธโข ์๋ฃ: PR #16 ์ค์ฟผ์ ๋จธ์ง โ main4bb796d(2026-08-26). โ โ ์ฐฉ์ ์ ใupstream ์กฐ์ ๋ฌด์์์ด๋ผ-s ours๋ถํ์ใ๋ก ์ ์๋๋ฐ, ยซ์ถ์ ํ๋ ๋์ณค๋คยป โ #13 ์ด ์ค์ฟผ์๋ก ์ฐฉ์งํ์ upstream ์กฐ์(822504b)์ ๊ทธ๋๋ก์ธ๋ฐorigin/main๊ณผ์ ์กฐ์์ด ๋๊ฒผ๋ค (merge-base=b3a4cf4ยท11ef501์ด ์กฐ์ ์๋) โ main ๊ณผ 6์ถฉ๋(์์ฅ 1 + ์ฝ๋ 5, ๋ด์ฉ์ ์ ๋ถ ๋์ผ). โ ๊ฒ์ดํธโข์ดgit merge -s ours --no-ff 11ef501(ํธ๋ฆฌ ๋ฌด๋ณ๊ฒฝ ์ค์ธก)๋ก ๋ณต์ํด ์ถฉ๋ 0์ผ๋ก ๋ง๋ค์๋ค. โ ๊ตํ: ์กฐ์์ ยซupstream ์ถยป๊ณผ ยซorigin/main ์ถยป ๋์ด๋ค. ์ค์ฟผ์๊ฐ ๋๋ ๊ฒ์ ํ์๋ค. - [rustjava-upstream-sync-s2] upstream ์ปท
af4f6f8(#177 CLDC 1.1) ๋จธ์ง โ ์ถฉ๋ 5 ํด์. โ PR #11 ์ด ์ค์ฟผ์ ๋จธ์ง๋ผ upstream ์กฐ์์ด ๋๊ฒจ ์์๋ค โ-s ours๋ก1f356ae๋ฅผ ๋ถ๋ชจ๋ก ๊ธฐ๋กํด ๋ณต์ํ ๋ค ๋จธ์งํ๋ค(ํธ๋ฆฌ ๋ฌด๋ณ๊ฒฝ). ๋ณต์ ์ ์ถฉ๋ 15 โ ๋ณต์ ํ 5. โ ๊ฒ์ดํธโข ์๋ฃ: PR #13 ์ค์ฟผ์ ๋จธ์ง โ main11ef501(2026-08-26). โ ์ฐฉ์ง ์ base ๋ฅผmain์ผ๋ก ๋น๊ฒจ #14(beta clippy)๋ฅผ ๋ค์ฌ์ CI red ๋ฅผ ํ์๋ค(ํeaa5668rc=1 CI_RED โdf3b04arc=0 CI_GREEN). - [rustjava-worklog-json-proposals-convention] ํ์ฐจ ์ํฌ๋ก๊ทธ
docs/worklog/.md+.jsonํ ์ ๊ท์ฝ ์ด์. โ ๊ฒ์ดํธโข ์๋ฃ: PR #15 ์ค์ฟผ์ ๋จธ์ง โ mainb3a4cf4. - [rustjava-ci-beta-clippy-double-must-use-red] beta clippy
double_must_use13๊ฑด red ํด์. โ ๊ฒ์ดํธโข ์๋ฃ: PR #14 ์ค์ฟผ์ ๋จธ์ง โ maindde85ce. - [rustjava-claude-md-prune]
CLAUDE.mdํ๋ฃฌ(autonomous-sop ์ญ์ + Goal/Constraints/DoD ์ ์ค). โ ๊ฒ์ดํธโข ์๋ฃ: PR #8 ์ค์ฟผ์ ๋จธ์ง โ main00bddf3(2026-08-18). โป๊ตฌํ ใ์ข์ด ์คใ ๊ธฐ์ฌ๋ ํ๊ธฐ. - [rustjava-upstream-sync-s1-tracing-cut-1f356ae] upstream ์ปท
1f356ae๋จธ์ง(์ถฉ๋ 2 ํด์ ยท tracing ์ถ ยทSystem.setProperty์์ ์ ํ์ 1๊ฑด ์ถ๊ฐ ์ฒ๋ฆฌ). โ ๊ฒ์ดํธโข ์๋ฃ: PR #11 ์ค์ฟผ์ ๋จธ์ง โ main6bfe97c(2026-08-17). โป์๊ฒฉ ๋ธ๋์น๋ repo ์ค์ deleteBranchOnMerge=true๋ก ์๋ ์ญ์ ๋จ. - [rustjava-runtime-time-todo-impl] RuntimeImpl ์๊ฐ API
todo!()3๊ฑด ์ ๊ฑฐ(now/sleep/yield) + test_utilsr#yield๊ตฌํ + tokiotimeํผ์ฒ ์ถ๊ฐ + ํ๊ท ์ ๊ธ ํฝ์ค์ฒ(test_data/TimeApi). โ ๊ฒ์ดํธโข ์๋ฃ: PR #2 ์ค์ฟผ์ ๋จธ์ง โ main13ab950(2026-07-23), ๋ธ๋์น ์ ๋ฆฌ ์๋ฃ. - [rustjava-classfile-parse-error-propagation] ํด๋์คํ์ผ ํ์ฑ ์คํจ๋ฅผ ํจ๋ ๋์
java.lang.ClassFormatError๋ก ์ ํ(์ ๋จ/๋งค์ง ๋ถ์ผ์น/๋ฏธ์ง์ ์์ํ ํ๊ทธ ๊ตฌ๋ถ). โ ๊ฒ์ดํธโข ์๋ฃ: PR #3 ์ค์ฟผ์ ๋จธ์ง โ main549b9eb(2026-07-23), ๋ธ๋์น ์ ๋ฆฌ ์๋ฃ. - [rustjava-tracing-attributes-pin-removal]
#[tracing::instrument]1๊ฑด์ ์๋ span ์ผ๋ก ๋์ฒด,tracing-attributes์ํ ํ ์ ๊ฑฐ(tracing 0.1.41โ0.1.44 ์ธํ๋ฆฌ์ฆ), wasm32 clippy CI ์ปค๋ฒ๋ฆฌ์ง ๊ต์ . โ ๊ฒ์ดํธโข ์๋ฃ: PR #4 approve ํ0a19f38ํ์ธ โ main ์ถฉ๋ ํด์(docs-only) ํ ์ค์ฟผ์ ๋จธ์ง(2026-07-23), ๋ธ๋์น ์ ๋ฆฌ ์๋ฃ. - [rustjava-unsupported-charset-exception] ๋ฏธ์ง์ charset
unimplemented!()ํจ๋ 3์ง์ ์java.io.UnsupportedEncodingException(์ ์ค) throw ๋ก ์ ํ, StringโInputStreamReader ์ง์ charset ์ ๊ณต์ฉcharset::Charset์ผ๋ก ์ผ์น(ISO-8859-1/US-ASCII ๊ฐ Reader ์์๋ ๋์). ๋ถ์:System.setProperty๋ฐํ ์๊ทธ๋์ฒ JDK ๊ท๊ฒฉํ(ObjectโString, jvm ๋ถํธ์คํธ๋ฉ ํฌํจ),Throwable.getMessage()์ ์ค, ํฝ์ค์ฒtest_data/UnsupportedCharset. โ ๊ฒ์ดํธโข ์๋ฃ: PR #5 approve ํdd9fcdfํ์ธ(์ดํ ์ด๋๋ถ์ ๋ฌธ์ํ๋ main ๋๊ธฐํ ๋จธ์ง 3๊ฑด๋ฟ, diff-of-diffs ๋ก ์ฝ๋ ๋์ผ์ฑ ๊ฒ์ฆ) โ ์ค์ฟผ์ ๋จธ์ง(2026-07-23), ๋ธ๋์น ์ ๋ฆฌ ์๋ฃ. - [2026-07-25-rustjava-branch-hygiene] ์๊ฒฉ ์์กด ๋ธ๋์น 2๊ฑด ํ์ . โ
dependabot/cargo/tracing-attributes-0.1.31โ PR #4 ๋กtracing-attributes์์กด ์์ฒด๊ฐ ์๋ฉธ(Cargo.toml/lock ์ ๋ฌด)ํด ํจ์น ๋์ ๋ผ์ธ ๋ถ์ฌ โ origin ์์ ์ญ์ ์๋ฃ. โกwie-ktf-hardeningโ 12์ปค๋ฐ ์ค 8๊ฑด์ด upstream/main ์ ์ค์ฟผ์ ๋ฐ์/๋์ฒด(#174~#182), 4๊ฑด ์ ํจ ์์กด โ ํผ์ฌ ํ์ ์ผ๋ก ๋ณด์กด, ์ปค๋ฐ๋ณ ํ์ ํ๋ฅผ ์ด๊ด์ ์ ์ถ(์ฝ๋ ๋ณ๊ฒฝ 0).
โช๊ท์น โ โ
์ด ์ ์ ยซ์นด๋ ref + ์ ํ๊ด๊ณ + ์นด๋ ๋ฐ ํญ๋ชฉยป๋ง ์ ๋๋ค(2026-09-23 ๊ฒฐ์ ยท โฆ-adopt-p1)
โ
ํญ๋ชฉ์ ์ ๋ถ ref(<worklog>#pN) ๋๋ PR ๋ฒํธ๋ก ์ ๋๋ค โ ใ๋ค์ ์ค์์
= Xใ ๊ฐ์ ์ฐ๋ฌธ ์ง๋ชฉ ๊ธ์ง. ํ ์ผ์ ๋ณธ๋ฌธ์ ์นด๋(docs/worklog/*.json)๊ฐ ๊ฐ๋๋ค.
โ
๋ซํ ํ์ = ๊ทธ ref ๊ฐ ์ด๋ worklog ์ adoptedProposals/declinedProposals ์ ์๋ค(PR ์ state) โ ํ ์ค๋น ์กฐํ 1ํ๋ก ๋๋๋ค. ๋ซํ ์ค์ ๋ซ๋ ํ์ฐจ๊ฐ ์ง์ด๋ค.
โ
์นด๋ ยซ์ด๋ฆผยป์ tower ์ ์ด(โฆ โ injected)๋ก ์ธ์ง ๋ง๋ผ โ ์ด ๋ ์ธ์ ๊ทธ ์ ์ด๋ก 0์ด๋ค(์ฃผ์
= ๋ฐ๊ถ ์์ฒญ์ผ ๋ฟ ์ฐฉ์ง๊ฐ ์๋๋ค). ์ฌ๊ธฐ ์ ์ด๋ ์ ์ฒด โ adopted โ declined ๋ค.
- ์ ํ ์ฌ์ฌ(์นด๋๊ฐ ํํ ๋ชป ํ๋ ์ ์ผํ ๊ฒ):
2026-09-17-link-lambdametafactory#p1(๊ฒฐ์ ) โ#p0(์ด๋ํฐ) โjava.lang.invokeํจํค์ง(์นด๋ ์์ ยท ๊ทผ๊ฑฐ =rustjava-runtime/src/classes/java/lang/invoke๋ถ์ฌ) โ2026-09-17-string-concat-recipe-arity#p1. - ์์ ์์:
2026-09-18-bootstrap-argument-index-and-tag#p0(queue/rustjava๋ฐ๊ถ๋จ) ยท2026-09-24-unraisable-error-variant#p0ยท2026-09-12-zip-getinputstream-guard-lock#p0ยท2026-09-12-test-class-scratch-premise#p0. - ์นด๋ ๋ฐ: PR #81 โ
CONFLICTING(2026-09-23 ์๋ฐ ํ ์ฌ์กฐํ) ยท ์ถฉ๋ ํด์ ์ ํ.
---- ์ดํ โช(2026-09-23 ์ ์ ์ฌ์ธก ํ)ยทโ ~โค ๋ ์ฌ๋ฃ๋ค. โ **ใ๋ค์ใ์ผ๋ก ์ฝ์ง ๋ง๋ผ** ----
โ
โ
โ
์ด ์ ์ด ์๊ธฐ ๊ท์จ(ใ๋ซํ๋ ์ฆ์ ๋ซ์๋ผใ)์ ยซ์ธ ๋ฒยป ์ด๊ฒผ๋ค โ โดโข-0 โฆclaude-md-prune-disposition(2026-08-27 ํด์)์ด
์ต์ฐ์ ์ ๋จ์ ๋ ์ธ์ด ์กฐ์ฉํด์ก๊ณ โตโ ์ ใ๋ค์์ S5ใ๊ฐ 8์ผ ๋ก์ ์ฑ ๋จ์ 2026-09-11 ์ค๋ณต ๋ฐ๊ถ์ ๋ง๋ค์๊ณ
โถ๊ทธ ์๋ฆฌ๋ฅผ ๊ณ ์น๋ฉฐ โ ์ ๊ผฌ๋ฆฌ๋ฅผ ใ๋ค์ ์ค์์
= โข์ null-guardใ๋ก ๋ฐ๊ฟจ๋๋ฐ ๊ทธ null-guard ๋ ๊ฐ์ ๋ ์ด๋ฏธ ๋ซํ ์์๋ค
โ โ
**LANE_IDLE rustjava 1088๋ถ**(2026-09-23 13:41 ยท ํ 0 ยท running 0). โ
๋ค ๋ฒ์งธ๋ฅผ ๋ง๋ค์ง ๋ง๋ผ โ ๋ซ์ผ๋ฉด ๊ทธ ํด์ ์ฌ๊ธฐ์ ์ง์๋ผ.
โ
๋ซํ ๊ฒ์ ยซ์ธก์ ยป์ผ๋ก ํ์ธํ๋ค(git merge-base --is-ancestor <sha> origin/main ยท ์ ๊ฑด ANCESTOR):
| โ ~โค ๊ฐ ใ๋ค์ใ์ด๋ผ ๋ถ๋ฅด๋ ๊ฒ | ๋ซ์ ์ปค๋ฐ | ํ์ |
|---|---|---|
| โ ๊ผฌ๋ฆฌ ใ๋ค์ ์ค์์ = โข์ null-guardใ | 6da7d66f |
โ ๋ซํ โ ์ง๋ชฉ ์์ฒด๊ฐ ๋ก์๋ค |
โก wie-ktf-hardening ์์กด 2๊ฑด(arraycopyยทString.<init>) |
6da7d66f |
โ ์ ๊ฑด ๋ซํ โ ์ ํจ ์์กด 0 |
โข-1 rustjava-upstream-sync-s5โฆs8 |
(S5~S8 ์ ๊ฑด ์ฐฉ์ง) | ๋ซํ |
โข-2 rustjava-null-guard-string-init-and-arraycopy |
6da7d66f |
๋ซํ |
โข-3 / โฃ-1 โ ์ ใmakeConcat ๋จ์ใ |
e94cfe91(#60 ๋ฆฌ๋์ง) |
โ
๋ซํ โ jvm-bytecode/src/string_concat.rs ์ FACTORY_NAME_NO_RECIPE |
โฃ-1 โ ์ ใLambdaMetafactory ๋ฐํ์ ๋จ์ใ |
8c7b473f |
โ
๋ซํ โ jvm-bytecode/src/lambda.rs ยท Opcode::InvokedynamicLambda |
โฃ-2 ์ ใโ
๋จ๋ ๋์ญ = 1 ยท LdcDynamicNoBSMใ |
d9f45ebf |
โ
๋ซํ โ validation.rs ์ bootstrap_method_indices_resolve |
โฃ-3 InputStreamReader ๋์ฝ๋ ๊ฒฝ๊ณ |
์๋ ์ฐธ์กฐ | โ
์ ๋ฐ์ด ํ๋ ธ๋ค โ ์ฌ๋ฃ์ ใ์ํ์ฑ
์ โ ๋ก ๋ค์ด์จ๋คใ๋ ๋ค์ด์๊ณ (ํ๋ endOfInput ์ค์ฌ), ๊ทธ๋ฌ๋ EUC-KR ์ถ์ ๊นจ์ง ์ฑ์๋ค |
โ ์ด๋ ค ์์์ ยซ๊ทผ๊ฑฐ์ ํจ๊ปยป ์ ๋๋ค(ใPR ์ ๋ชฉยท๊ฐ์ค์ผ๋ง ๋ณด๊ณ ์ผ๋ค๊ฐ ๋ ๋ค ํ๋ฆฐใ ์ ๋ก๊ฐ ์ด ๋ ์ธ์ ์๋ค):
- โ
โ
**
java.lang.invokeํจํค์ง โ ์ฌ์ ํ ยซ0ยป(โฃ-1 โ ์ ยซ๋ง์ง๋งยป ์นธ). ๊ทผ๊ฑฐ =ls rustjava-runtime/src/classes/java/lang/์invoke๋ถ์ฌ(๋๋ ํฐ๋ฆฌ 0 ยท ํ์ผ 0). โ ๋งํฌ๋ ์ฝ์ฌ์ดํธ๋ฅผ opcode ๋ก ๋ด๋ ค์จ์ ๋๊ณ ์๊ณ (string_concat.rsยทlambda.rs),MethodHandle/MethodType/CallSite๊ฐ์ฒด๋ ์์ง ๋ง๋ค ์ ์๋ค. ์ด๋ฆฐ ์นด๋๊ฐ ๊ทธ ์ถ์ ์ ๋ถ์ด ์๋ค โ2026-09-17-link-lambdametafactory#p0(M ยท ์ด๋ํฐ๋ฅผ ๋ฐ์ฑ๋ถํฐ ๋ํ๋ผ) ยท#p1(S ยท ๋๋ค ํด๋์ค๋ฅผ ๋ฆฌํ๋ ์ ์ ๋ณด์ผ์ง ยซ๊ฒฐ์ ยป) ยท2026-09-17-string-concat-recipe-arity#p1(S ยท ์ ํ =java.lang.invoke์ค์ฌ). โ ์์๋#p1(๊ฒฐ์ ) โ#p0(์ด๋ํฐ) โ ํจํค์ง** โ ๊ฒฐ์ ์ด ํจํค์ง์ ํฌ๊ธฐ๋ฅผ ์ ํ๋ค. 2026-09-18-bootstrap-argument-index-and-tag#p0(S) โ ์ง์ ์ฐฉ์ง1ec83a14(#73)์ ์น๊ณ. ใ์ด๋ฏธ ์์ ๋ ์๋ฅผ ๋ฒ๋ฆฌ๋ใ ๋๋จธ์งvalidation.rs๊ท์น์ ์ผ๋ค. โ ๊ณ์ ํ์ฐจ๋ผ ์ํ 0 ์ด๊ณ ๋ค์ ์ง๋จ ํ์ฐจ์ ํฌ๊ธฐ๋ฅผ ์ ํ๋ค.2026-09-12-zip-getinputstream-guard-lock#p0(S) ยท2026-09-12-test-class-scratch-premise#p0(M) โ ๋ฐํ์/ํ ์คํธ ์ถ. ์ด ๋์ โ ~โค ์ด๋์๋ ์ ํ ์์ง ์์๋ค โ โ **ใ๋ค์ใ์ ์ ๋ณธ์ ์ด ์ ์ด ์๋๋ผdocs/worklog/*.json์ ์ด๋ฆฐ ์นด๋**์์ ์ ์ด ๋๋ค (2026-09-23 ์ค์ธก ์ด๋ฆฐ ์นด๋ 30๊ฑด ยท ๊ทธ์ค upstream ์บ ํ์ธยทํ์ repo(wieยทqts) ๊ฒ์ด 11๊ฑด์ด๋ผ ์ด ๋ ์ธ์ด ์น ์ ์๋ ๊ฒ์ ๊ทธ๋ณด๋ค ์ ๋ค).- โ
๊ฒ์ดํธโข ๋ฏธ์ฐฉ์ง 1๊ฑด: PR #81(
feat/rustjava-sorted-findings) โ โmergeable=CONFLICTINGยทmergeStateStatus=DIRTY(2026-09-23 ์๋ฐ ํ ์ฌ์กฐํ). ์ถฉ๋ ํด์๊ฐ ์ ํ์ด๋ค. โ ์ด๋ฆฐ PR ์ ์ด 1๊ฑด๋ฟ์ด๋ค(โค์ ํ๋ ๋ก์๋ค).
โ
โฃ-3 ์ ์ด ํ์ฐจ๊ฐ ๋ซ์๋ค โ InputStreamReader ์ EUC-KR ๊ฒฝ๊ณ. ์ฌ๋ฃ๋ ใ๋์ฝ๋๋ฅผ read ๋ง๋ค ์๋ก ๋ง๋ ๋ค = ๊ฒฝ๊ณ ์ ์คใ์ด๋ผ๊ณ ๋ง
์ ๊ณ ใโ ๋ก ์ํ์ฑ
์ด ๋ค์ด์ค๋ ๋ค์ ์ฌ๋ผใ๊ณ ๋จ๊ฒผ๋๋ฐ, ์ฌ ๋ณด๋ ์ํ์ฑ
์ ๋ ์ถ ์ค ยซํ๋ยป๋ง ์ณ์๋ค:
UTF-8 ์ ์ญ์ฃผ์ฌ(์ฐ์ ๋ฐ์ดํธ 0x80..=0xbf ๊ฐ ์ ๋ ๋ฐ์ดํธ์ ์๋ก์๋ผ ์ฑ๋ฆฝ)๋ก ์ณ๊ณ ํ
์คํธ๋ก๋ ์ ๊ฒจ ์์๋๋ฐ,
EUC-KR ์ ใ๋ง์ง๋ง ๋ฐ์ดํธ >= 0x81 ์ด๋ฉด ํ ๋ฐ์ดํธ ๋ณด๋ฅใ์๋ค โ โ
EUC-KR ์ ํํ ๋ฐ์ดํธ๋ ์ ๋ ๋ฒ์(0x81..=0xfe)์ ยซ๊ฒน์น๋คยป
โ ์์ฑ๋ ์์ ํํ ๋ฐ์ดํธ๋ ๋ณด๋ฅ๋ผ ๊ทธ ์์ ์ ๋ ๋ฐ์ดํธ๊ฐ ํ๋ก ๋จ๊ณ , ๋งค read ๋ง๋ค ์๋ก ๋ง๋๋ ๋์ฝ๋๊ฐ ๊ทธ๊ฒ์ ์๊ธฐ ์ํ๋ก ์ผ์ผ ๋ฒ๋ ธ๋ค.
์ค์ธก = "12345678ํ"(EUC-KR 10๋ฐ์ดํธ) โ โ
**"12345678\u{FFFD}"**. ์ฒ๋ฐฉ์ ์ ๋ฐฉ ์ฃผ์ฌ(์ ๋๋ฉด 2, ์๋๋ฉด 1)์ด๊ณ ํ
์คํธ 3ํ์์ผ๋ก ์ ๊ฐ๋ค.
โ (์ต์ฐ์ ์ด ยซ์๋๊ฒ ๋๋คยป) upstream ๋๊ธฐํ โ โ โ **[2026-09-11 ๊ฐฑ์ ] ์บ ํ์ธ ยซ์ข ๋ฃยป. ๋๊ธฐ ํ์ฐจ๋ฅผ ์ด์ง ๋ง๋ผ.**
โ
์ค์ธก(2026-09-11): S5(#21)ยทS6(#22)ยทS7(#23)ยทS8(#24) ์ ๊ฑด --merge ์ฐฉ์ง ยท merge-base origin/main upstream/main = bd42427 ยท behind 1(2ce4717 ยท dependabot encoding_rs bump) ยท ahead 87 ยท ์ด๋ฆฐ PR 0.
โ
behind 1 < ์๊ณ 20(PR #29 ํ์ ) โ ๋ค์ ๋๊ธฐ๋ ยซ๊ณํ๋ ์ปทยป์ด ์๋๋ผ ์๊ณ ๋๋ฌ ์๋ค โ ์ฌ๋ ์ฃผ์ฒด๋
์ฃผ 1ํ .github/workflows/upstream-behind.yml(PR #31)์ด๊ณ , ๊ธฐ๊ณ๊ฐ ์ฌ๊ณ ์ฌ๋(์ด๊ด)์ด ๋ฐ๊ถํ๋ค.
โ
โ
๊ตฌํ ใ๋ค์์ S5ใ๋ 8์ผ ๋ก์ ์ฑ ์ด ์ ์ ๋จ์ 2026-09-11 ์ค๋ณต ๋ฐ๊ถ(rustjava-upstream-sync-s5-java12-api ยท
blocked)์ ๋ง๋ค์๋ค โ โข ์ ใ์ด๋ฏธ ๋๋ ์ผ์ ๊ฐ๋ฆฌํค๋ฉด ๋ ์ธ์ด ์กฐ์ฉํด์ง๋ค ยท ๋ซํ๋ ์ฆ์ ๋ซ์๋ผใ์ ๋ ๋ฒ์งธ ์ฌํ.
โ โ
๋ค์ ์ค์์
= โข์ null-guard ํฐ์ผ(โ ์ ๋ค๋ผ๋ ์ ํ ์กฐ๊ฑด์ด ์ด์ ์ถฉ์กฑ๋๋ค).
โ
โ
**[2026-09-23 ๋ซ์] ๊ทธ ์ง๋ชฉ์ ยซ์ฐ์ธ ๋ ์ด๋ฏธ ๋ก์ ์์๋คยป** โ โข-2 ๋ ๊ฐ์ 2026-09-11 ์ โฆ-p0 ๋ก ๋ซํ๋ค(6da7d66f).
โ
์ด ํ ์ค์ด ์ธ ๋ฒ์งธ ์ฌ๋ฐ์ด๊ณ LANE_IDLE 1088๋ถ์ ๊ทผ์ธ์ด๋ค. ์ด์ ์๋ ํ๋ณด๋ โช ๋ธ๋ก์ ์๋ค.
---- ์ดํ ์ฌ๋ฃ(S4 ํ์ฐจ ์ค์ธก ยท ํ์ด๋จธ ์ฌ๋ฐฑ ๊ทผ๊ฑฐ โ ๋จ์ ๋ถ๋ณ์ด๋ผ ๋ณด์กด) ----
S4 ์ค์ธก(2026-08-27): ์ฐฉ์ ์ merge-base origin/main upstream/main = โ
**62cf0c6(์ต์ด ๊ณตํต์กฐ์) ยท
1f356aeยทaf4f6f8ยท822504b ๊ฐ origin/main ์ ์กฐ์ ์ ๊ฑด NO โ โ
์ค์ฟผ์ 3ํ๊ฐ ์กฑ๋ณด๋ฅผ ์์ ์ผ๋ก ๋๋๋ ธ๋ค.**
โ ์ฒซ ์กฐ์น git merge -s ours --no-ff 822504b โ merge-base 822504b ๋ณต์.
โ
๋ฌดํด์ฑ์ ๊ทผ๊ฑฐ๋ ยซgit diff --stat origin/main HEAD ๋น ์ถ๋ ฅยป์ด ยซ์๋๋คยป โ -s ours ๋ ์ ์์ ์ฐ๋ฆฌ ํธ๋ฆฌ๋ฅผ
์ ์งํ๋ฏ๋ก ๊ทธ ์ถ๋ ฅ์ ํญ์ ์ฐธ์ด๊ณ ์๋ฌด๊ฒ๋ ์ฆ๋ช
ํ์ง ์๋๋ค. ๊ทผ๊ฑฐ๋ โ
**--diff-filter=D 0 + ์๋ฐฉํฅ ์ ๋ฌธ ๋์กฐ๋ค.
โ
์ถฉ๋ 20 โ 2**(java/lang/thread.rs ยท jvm/src/jvm.rs).
green ์ ๊ฑด rc=0 ยท cargo test --all 261 passed / 0 failed / 1 ignored(S3 216 โ +45).
โ
โ
ํ์ด๋จธ ํ
์คํธ ์ฌ๋ฐฑ 1๊ฑด โ โ
ยซํ๊ทยป๊ฐ ์๋๋ค. ์ ํ๋ณธ์ ใupstream ํ๊ท๋ฅผ ๋ค์ฌ์๋คใ ์์ ์ ยซํ๋ ธ๋คยป.
test_timer_periodic ์ โ
์ปท ์ด์ ๋ถํฐ 500ms ์ฐฝ์์ ๊ธฐ๋ 10ํ ๋๋น 3~4ํ๋ง ๋๋ ๋ง์ฑ ๊ฒฝ๊ณ ํ
์คํธ๋ค.
โ
โ
์ธก์ ์กฐ๊ฑด์ ยซ์์ง ๋ง๋ผยป โ ์ ํ๋ณธ์ด ํ๋ฆฐ ์ด์ ๊ฐ ๊ทธ๊ฒ์ด๋ค(๋จ๋
๊ฒฐ๊ณผ์ ๋ณ๋ ฌ ๊ฒฐ๊ณผ๋ฅผ ๋๋ํ ๋์๋ค).
์กฐ๊ฑด์ ๋ง์ถ ๊ต๋ ์คํ ์ค์ธก:
| ์กฐ๊ฑด | 4bb796d(์ปท ์ ) |
3296139(์ปท ํ) |
|---|---|---|
| ๋จ๋ ์คํ ยท ๊ต๋ 10ํ | 3 3 3 3 4 4 4 4 3 4 ยท mean 3.5 |
4 3 4 3 4 3 4 3 4 3 ยท mean 3.5 |
| ์ ์ค์ํธ ๋ณ๋ ฌ ยท ๊ต๋ 8ํ | 4 4 4 4 3 4 3 4 |
4 3 3 6 4 4 4 4 |
โ โ
๋ ์กฐ๊ฑด ์ด๋์๋ ์ฐจ์ด๊ฐ ์๋ค. ใ1ํ์ 110150msใ๋ ์ปท์ด ๋ง๋ ๊ฐ์ด ์๋๋ผ ์์ชฝ ๊ณตํต์ ๊ธฐ์กด ๊ฐ์ด๋ค.
โ
์ฌ๋ฃ๊ฐ ๊ทธ ์์ฒด๋ก ๋ฐ์ฆ์ด๋ค: upstream ์ด ๊ฐ์ ์๋ฆฌ๋ฅผ ๋ํ 895d67d(2025-08-20)ยทad8b477(2025-10-04)๋
โ
๋ ๋ค ์ด๋ฏธ origin/main ์ ์กฐ์์ด๊ณ , ๊ทผ์ธ์ผ๋ก ์ง๋ชฉํ๋ e557673(GlobalRef)์ 2026-07-18 ์ด๋ค
โ โ
์ง๋ชฉ๋ ์ปค๋ฐ๋ณด๋ค ยซ11๊ฐ์ ์์ยป ์ด๋ฏธ ๋ง์ฑ flaky ์๋ค.
์ฒ๋ถ์ ๊ทธ๋๋ก๋ค(sleep 500 โ 2000ms ยท run_count > 2 ๋ถ๋ณ ยท #[ignore] 0 ยท ์ญ์ 0) โ ์ฑ๊ฒฉ๋ง ์ ์ ํ๋ค:
โ
**ใ๊ฐ๋ฆฌ๋ ์ฌ๋ฐฑใ์ด ์๋๋ผ ยซ๋ง์ฑ ๊ฒฝ๊ณ ํ
์คํธ์ ์ ์ ์ฌ๋ฐฑ์ ์ค ๊ฒยป์ด๋ค.**
โ
๋๊ฐ: ๊ฐ๋๊ฐ ๋ด๋ ค๊ฐ๋ค โ red ๋ฌธํฑ 1ํ์ ~167ms โ ~667ms(์ฝ 4๋ฐฐ ๋ํ). ใ5.6๋ฐฐ ์ ํใ๋ ์ฌ์ ํ red,
ใ2.4๋ฐฐ ์ ํใ๋ ์ด์ ํต๊ณผํ๋ค. ๊ทธ ์ํ์ ํ
์คํธ ์ฃผ์์ ๋ฐ์๋ค.
โ
~~**ใ์์ธก์ ํํใ์ด ์ด์ 3ํ ์ฐ์ ์ค์ธก๋๋ค**~~ โ โ
โ
**[2026-09-03 ์ ์ ] ํํ์ ยซ์ ๋์ ์ด์ง ์๋คยป โ S7 ์์ ์ฒ์ ๊นจ์ก๋ค**
(์์ธก +3 โ ์ค์ธก ๊ณํ๊ธฐ์ค +2 ยท ๋ณต์ ํ +1). ์ด๊ณผ๋ ยซ์ฐ๋ฆฌ ๋ก์ปฌ ๋ถ๊ธฐยป๊ฐ ๋ง๋ค๊ณ (S5 0โ+3),
๋ฏธ๋ฌ์ ยซ์ ํ์ฐจ๊ฐ ์๋ ด์์ผ์ยป ๋๋ค(S3 ๊ฐ upstream ์ค๋ฅ ๋ถ๋ฅ๋ฅผ ์ฑํํด throwable.rs ์ถฉ๋์ด ์ฌ๋ผ์ก๋ค).
โ โ
ํฐ์ผ size/timeout ์ ์ฌ์ ํ ํํ ์ชฝ์ผ๋ก ์ก๋, ใํํ์ด๋คใ๋ฅผ ๊ทผ๊ฑฐ๋ก ์ฐ์ง ๋ง๋ผ.
โ
**thread.rs ๋ S1ยทS3ยทS4 ยซ์ธ ํ์ฐจ ์ฐ์ยป ์ถฉ๋ํ๋ค โ upstream ์ด ThreadStartProxy::call ์ ๋ฐ๋ณต ์ฌ์์ฑํ๊ธฐ ๋๋ฌธ์ด๋ค.
โ
โ
[2026-09-03 ์ ์ ] ใS5~S7 ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ก์๋ผใ๋ ยซ์ ๋ฐยป ๋ง์๋ค** โ ์ค์ธก์ S5ยทS6 ์ ์ถฉ๋ํ์ง ์๊ณ S7 ์์๋ง ๋ค์ ์ด๋ฆฐ๋ค.
ํด์ ์ ๋ต์ ๋ถ๋ณ์ด๋ค:
upstream ๋ณธ๋ฌธ์ ๋ผ๋๋ก ์ทจํ๊ณ #[tracing::instrument] ํ ์ค๋ง PR #4 ์ ์๋ span ์ผ๋ก ์นํํ๋ค.
โกwie-ktf-hardening ์์กด๋ถ โ โ
โ
**[2026-09-23 ๋ซ์] 2๊ฑด โ ยซ0ยป. ์ด ์ ์ ์ฒด๊ฐ ์ฌ๋ฃ๋ค.**
โ
์๋ ํ์ ใ์ ํจ ์์กดใ ๋ ํ(System.arraycopy null ๊ฐ๋ ยท String.<init> null ๊ฐ๋)์ ๋ ๋ค 6da7d66f ๋ก ๋ซํ๊ณ
๊ทธ ์ฌ์ค์ด ํ ์์ ์ด๋ฏธ ์ ํ ์์๋๋ฐ โ
์ ์ ๋ชฉ๋ง ใ2๊ฑดใ์ผ๋ก ๋จ์ ๋ค์ ์ฌ๋์ด ์์กด์ด ์๋ค๊ณ ์ฝ๊ฒ ๋ผ ์์๋ค.
โ โ
์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ด ์ด๊ธ๋๋ฉด ์ ๋ชฉ์ ๊ณ ์ณ๋ผ โ ๋ณธ๋ฌธ๋ง ๊ณ ์น๋ฉด ๋ชฉ์ฐจ๋ง ๋ณด๋ ๋ค์ ํ์ฐจ๊ฐ ์๋๋ค.
---- ์ดํ ์ฌ๋ฃ(2026-08-15 ์ฌํ์ ๋น์ ๊ธฐ์ฌ) ----
โ
์ ํ ํ์ธ ์ข
๊ฒฐ: upstream agent/runtime-api-gaps(6309d47)๋ ๋ฏธ๋จธ์ง๊ฐ ์๋๋ค โ
PR #190 ๋ก 2026-07-25 04:59Z ์ค์ฟผ์ ๋จธ์ง(๋จธ์ง์ปค๋ฐ c4665b0, +33,109/โ1,040)๋๊ณ
๊ทธ๋์ ๋ธ๋์น๊ฐ upstream ์์ ์ญ์ ๋๋ค. ์ฆ ใ์ผํค๋์งใ๋ ์ด์ upstream/main ์ ์ง์ ๋ฌป๋๋ค.
ํญ๋ชฉ๋ณ ํ์ (์ ๋ถ upstream/main ํธ๋ฆฌ ์ค์ธก):
| ํญ๋ชฉ | upstream/main ํ์ฌ | ํ์ |
|---|---|---|
Timer.schedule(TimerTask;J)V 1ํ์ฑ |
timer.rs schedule_once ์กด์ฌ |
์ผํด โ ๋ฌดํจ |
StringBuffer.insert(ILjava/lang/String;) |
insert_string ์กด์ฌ |
์ผํด โ ๋ฌดํจ |
StringBuffer.append([CII) nullโNPE |
null ๊ฐ๋ + ๋ฒ์ ๊ฐ๋๊น์ง ์กด์ฌ | ์ผํด โ ๋ฌดํจ |
ByteArrayInputStream.<init>([B) null ๊ฐ๋ |
is_null() ๊ฐ๋ ์กด์ฌ(be77dc6) |
์ผํด โ ๋ฌดํจ |
Class.forName null/not-found ๊ฐ๋ |
๋ ๋ค ์กด์ฌ | ์ผํด โ ๋ฌดํจ |
Integer.byteValue()/shortValue() |
java/lang/Number ๊ฐ ๊ตฌํ ์ ๊ณต, Integer ๊ฐ ์์(#176) |
์ผํด โ ๋ฌดํจ |
System.arraycopy null ๊ฐ๋ |
srcยทdest ๋ ๋ค ยท 2026-09-11) |
|
String.<init>([B) / ([C) null ๊ฐ๋ |
โ
์ ํจ ์์กด 2๊ฑด์ ํ๊ดด๋ ฅ ๊ทผ๊ฑฐ(์ถ์ ์๋): ClassInstanceRef::deref ๊ฐ
self.instance.as_ref().unwrap() ์ด๋ผ null ์ฐธ์กฐ๋ฅผ ๋๊ธฐ๋ฉด Rust ํจ๋ = ํธ์คํธ ํ๋ก์ธ์ค abort๋ค
(jvm/src/class_instance.rs). System::arraycopy ๋ jvm.load_array(&src, โฆ),
String::init_with_byte_array/init_with_char_array ๋ jvm.array_length(&value) ๋ก ๊ณง์ฅ deref ํ๋ค.
โ
โ
ํ์ ํธ์ถ๋ถ ยซ์ ์ยป(2026-08-16 ์ฌ์ค์ธก ยท java/lang/String ์ <init> ์ค๋ฒ๋ก๋ 10๊ฑด ์ ๊ฑด ๋์กฐ).
๊ฐ๋๊ฐ ์์ด์ null ์ ๋๊ธฐ๋ฉด ํธ์คํธ abort ์ธ ๊ฒ์ด 7๊ฑด์ด๋ค:
<init> ์์ ์ |
๊ตฌํ | null ์ด ๋ฟ๋ ์๋ฆฌ | ๊ฐ๋ |
|---|---|---|---|
([B)V |
init_with_byte_array |
jvm.array_length(&value) |
์์ |
([C)V |
init_with_char_array |
jvm.array_length(&value) |
์์ |
([BII)V |
init_with_partial_byte_array |
jvm.load_array(&value, โฆ) |
์์ |
([BLjava/lang/String;)V |
init_with_byte_array_charset |
jvm.array_length(&value) |
์์ |
([BIILjava/lang/String;)V |
init_with_partial_byte_array_charset |
jvm.load_array(&value, โฆ) |
charset_name ๋ง ๊ฒ์ฌ ยท value ์์ |
(Ljava/lang/String;)V |
init_with_string |
value_range โ jvm.get_field(this, โฆ) |
์์ |
(Ljava/lang/StringBuffer;)V |
init_with_string_buffer |
jvm.invoke_virtual(&value, "toString", โฆ) |
์์ |
([CII)V |
init_with_partial_char_array |
โ | โ ์์ |
(II[C)V |
init_with_shared_char_array |
โ | โ ์์ |
()V |
init_empty |
์ธ์ ์์ | ํด๋น ์์ |
โ
**get_field/invoke_virtual ๋ &Box<dyn ClassInstance> ๋ฅผ ๋ฐ๋๋ค** โ ๋ฐฐ์ด ์ธ์๋ง์ ๋ฌธ์ ๊ฐ ์๋๋ค.
โ โ
๊ฐ๋๊ฐ ยซ์ง์ด ์ ๋ง๋ยป ๊ฒ์ด ํต์ฌ์ด๋ค: ([CII)ยท(II[C) ๋ง ๋งํ ์๊ณ [B ๊ณ์ด์ ์ ๋ถ ๋ซ๋ ค ์๋ค.
โป์ ์ญ ์๋ฆฌ๋ ๋ถ๊ฐ โ Deref ๋ Result ๋ฅผ ๋ชป ๋๋ ค์ค๋ค. upstream ๋ฐฉ์(์ง์
๋ถ is_null() ๊ฐ๋)์ด ์ ๋ต์ด๋ค.
โข๋ค์ ํ์ฐจ ๋ฐ๊ถ ํ๋ณด(์ฐ์ ์์ ์) โ โ
โ
**[2026-09-23] 1ยท2ยท3 ยซ์ ๊ฑด ํด์ยป. ๋ฐ๊ถ ํ๋ณด ยซ0ยป โ ์ฌ๋ฃ๋ค.**
โ
โ
0๋ฒ ํญ๋ชฉ(rustjava-pr8-claude-md-prune-disposition)์ ยซํด์๋จยป โ 2026-08-27 S3 ํ์ฐจ๊ฐ ๋ซ์๋ค.
๊ตฌํ์ ใreports/rustjava-claude-md-prune.review.md ๊ฐ ์๋ค โ ๊ฒ์ดํธโก๊ฐ ์์ ๋์ง ์๊ณ ์ข์ดใ๋ฅผ
๊ทผ๊ฑฐ๋ก ์ด ํญ๋ชฉ์ ์ต์ฐ์ ์ ๋๋๋ฐ, ๊ทธ ๊ทผ๊ฑฐ๊ฐ ๋ ๋ค ์ฌ์ค์ด ์๋๊ฒ ๋๋ค(์ค์ธก):
Jun025/RustJava#8= โ **MERGED**(mergedAt2026-08-18T19:26:08Z ยท ๋จธ์ง์ปค๋ฐ00bddf3). headfeat/rustjava-claude-md-prune๋ ๋จธ์ง์ ํจ๊ป ์ญ์ ๋๋ค(git ls-remote --heads origin์์กด 0).reports/rustjava-claude-md-prune.review.md์ค์ฌ(2026-08-19 03:42) ยท ์น๊ณ-fix๋ฆฌ๋์ง์.done.md/.review.md๋ ๋ ๋ค ์ค์ฌ โ โ ๊ฒ์ดํธโก๋ ๋์๊ณ 3๊ฒ์ดํธ๋ฅผ ์์ฃผํ๋ค.- ใํ
main์CLAUDE.md์ ๊ทธ ๋ณ๊ฒฝ์ด ์๋คใ๋ ํด์ โorigin/main์CLAUDE.md์## Goal์ ์ด ์ค์ฌํ๋ค(= ํ๋ฃฌ ํ๋ณธ์ด ์ ๋ณธ). โ ๊ตํ: ์ด ์ ์ด ยซ์ด๋ฏธ ๋๋ ์ผยป์ ์ต์ฐ์ ์ผ๋ก ๊ฐ๋ฆฌํค๋ฉด ๋ ์ธ์ด ์กฐ์ฉํด์ง๋ค โ ์ค์ ๋ก ๋ฐ๊ถ์ด ๋ฉ์ถ ์ฑ 18์๊ฐ(LANE_IDLE rustjava)์ด ์ง๋ฌ๋ค. ใ๋ค์ใ ์ ํญ๋ชฉ์ ๋ซํ๋ ์ฆ์ ๋ซ์๋ผ.
โ ์ฌ๋ถ์ฌ๋ ์์(์ 0๋ฒ์ด ๋น ์ง๊ณ 1โ3 ์ด ํ ์นธ์ฉ ์ฌ๋ผ์จ๋ค):
โ โ โ **[2026-09-11] ํด์ โ S5~S8 ์ ๊ฑด ์ฐฉ์ง**(โ ์ฐธ์กฐ). โ ๋ฐ๊ถํ์ง ๋ง๋ผ โ 2026-09-11 ์ ์ค์ ๋ก ์ค๋ณต ๋ฐ๊ถ๋๋ค(rustjava-upstream-sync-s5โฆ-s7rustjava-upstream-sync-s5-java12-apiยท blocked).โ โ โ **[2026-09-11] ํด์ โrustjava-null-guard-string-init-and-arraycopyโฆ-p0๋ก ์ฐฉ์ํด ๊ฐ๋ 9๊ณณ + ํฝ์ค์ฒ 9์ผ์ด์ค๋ก ๋ซ์๋ค**(์๋ฃ ์ ์ฐธ์กฐ). โ ๋ฐ๊ถํ์ง ๋ง๋ผ. โ ์๋ ๋ฒ์ ์์ ์ ์ฌ๋ฃ๋ค โ ๋จ โ **ใ๊ฐ๋ ์์ 7๊ฑดใ์ ยซ8๊ณณยป์ด์๋ค**:System.arraycopy์dest๊ฐsrc์ ๋ณ๊ฐ๋ก ๋ซ๋ ค ์์๊ณ ์ด ์ ์ด ๊ทธ๊ฒ์ ยซ1๊ฑดยป์ผ๋ก ์ ๋ค. ๋ค์์ ์ด๋ฐ ํ๋ฅผ ์ธ ๋ ์ธ์ ๋จ์๋ก ์ธ๋ผ. ---- ์ดํ ์ฌ๋ฃ ---- โ โ ์ ๋ค์ฌ์ผ ํ๋ค โ โ ๊ทผ๊ฑฐ ์ ์ (2026-08-16): ์ ํ ์ด์ ๋string.rs๊ฐ ์ถฉ๋ ๋ชฉ๋ก์ ์๊ธฐ ๋๋ฌธ์ด๋ค. โ **system.rs๋ ์ถฉ๋ ๋ชฉ๋ก์ ยซ์๋คยป**(merge-tree์ถ๋ ฅ์์Auto-merging๋ง ์๊ณCONFLICT์ค์ด ์๋ค) โ ๊ตฌํ์ด ๋ ํ์ผ ๋ค ์ถฉ๋์ด๋ผ๊ณ ์ ์ ๊ฒ์ ์ค๋ฅ์ด๋ ์ถฉ๋ ํด์ ๋์์ผ๋ก ์ก์ง ๋ง๋ผ.- ๋ฒ์:
System.arraycopy+ โก์ ํ์์ ๊ฐ๋ ์์ 7๊ฑด ์ ๋ถ (([B)ยท([C)ยท([BII)ยท([BLjava/lang/String;)ยท([BIILjava/lang/String;)ยท(Ljava/lang/String;)ยท(Ljava/lang/StringBuffer;)). - ์ฌํ:
System.arraycopy(null,0,dst,0,0)ยทnew String((byte[])null)ยทnew String((char[])null)ยทnew String((byte[])null,0,0)ยทnew String((byte[])null,"UTF-8")ยทnew String((byte[])null,0,0,"UTF-8")ยทnew String((String)null)ยทnew String((StringBuffer)null)โ ์ ๋ถ ํ์ฌ ํจ๋, ๊ธฐ๋NullPointerException. - ์๋ฃ ์ ์: 8์ผ์ด์ค ํฝ์ค์ฒ ์ ๊ธ + 3์ข
green. โ
๊ฐ๋ ์คํ์ผ์ upstream ๊ธฐ์กด ๋ฐฉ์(์ง์
๋ถ
is_null())์ ๋ง์ถ๋ค.
- ๋ฒ์:
โ โ โ **[2026-09-16] ์ ๋ฐ ํด์ โ ยซํ์ โ ๊ฑฐ๋ถยป ์นธ์ ๋ซ์๋ค** (rustjava-invokedynamic-cp-tags-15-18-supportrustjava-cp-tags-15-18-parse-and-honest-diagnosisยท ์๋ฃ ์ ยทdocs/worklog/2026-09-16-cp-tags-15-18-parse.md). โ ํ๊ทธ 15~18 ํ์ฑ ยซ๋งยป์ผ๋ก๋ ์ ๋๋ค โclassfile/src/opcode.rs์0xba๋ถ๊ธฐ๊ฐ opcode ํ์ฑ์์ ๋ฌด์กฐ๊ฑด ์คํจํด ๊ทธ๋๋กMalformed๋ก ์ด์ด์ก๋ค(๊ฐ์ M3 ์ด ๊ทธ ์๋ฆฌ์์ ์ฆ๋ช ). โ โ **ใํ ํฐ์ผ์ผ๋ก ๋ฌถ๋๋คใ๋ ยซ์ธ ์นธยป์ด์๋ค**: โ์์ํ ํ๊ทธ โopcode0xbaโ์คํ. โโ ์ฐฉ์ง ยท โ ๋ฏธ์ฐฉ์. โ **todo!()๋ ๋๋ฌํ์ง ์๋๋ค โ ์ธก์ ํ๋ค**(verifier ๋ถ๊ธฐ๋ง ๋นผ๋ฉดinterpreter.rs:631ํธ์คํธ abort ยท ๋ฃ์ผ๋ฉด ๊ฒ์คํธ ์์ธ). โ โ **[2026-09-16 ๊ฐฑ์ ] ์นธ์ ยซ์ ยป์ด ์๋๋ผ ยซ๋ทยป์ด์๋ค** โrustjava-ldc-tags-15-16-17-still-malformed๊ฐ โโฒldc๊ณ์ด์ด ๊ทธ ์์๋ฅผ ยซ์ง์ยป ๋๋ฅผ ๋ซ์๋ค(โ ๋ ์์ํ ํ์ฑ์ด๊ณ ์ด๊ฒ์ opcode ์์ฉ์ด๋ค โ0xba์ ๊ฐ์ ํํ์ ๋ณ ์นธ). โ โ โโโฒโ ์ฐฉ์ง ยท โ ๋ฏธ์ฐฉ์. โ ๋จ์ ๊ฒ์ โฃ ์ 1๋ฒ ํญ๋ชฉ๋ฟ์ด๋ค. ---- ์ดํ ์ฌ๋ฃ ---- โ **ใํ ํฐ์ผ์ผ๋ก ๋ฌถ๋ ์ด์ ใ๊ฐ 2026-08-16 ๋ก ๋ฐ๋์๋ค.** ๊ตฌํ ๋ ผ๊ฑฐ(ใํ์๋ง ๊ณ ์น๋ฉด ์ธํฐํ๋ฆฌํฐ๊ฐtodo!()๋ก ์ฃฝ๋๋คใ)๋ โ โ ๋จธ์ง ๋ค ์ฑ๋ฆฝํ์ง ์๋๋ค โ upstream ์ดjvm_rust/src/verifier.rs๋ก ํจ๋ ์ถ์ ์ด๋ฏธ ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์ด๋ค(โฃ ์ฐธ์กฐ). ๊ทธ๋ฆฌ๊ณ โข์ โ ๋ค์ ๋๋ ํฐ์ผ์ด๋ค. โ โ ์ ๋ ผ๊ฑฐ: โ ๋จธ์ง ๋ค ๋จ๋ ๊ฒ์ ใ๊น๋ํ ๊ฑฐ๋ถใ์์ ใ์ค์ ์ง์ใ์ผ๋ก ์ฌ๋ฆฌ๋ ์ผ์ด๊ณ , ๊ทธ๊ฒ์ ํ์(ํ๊ทธ 15~18 ์์ฉ) ์์ด๋ ์์์กฐ์ฐจ ๋ชป ํ๊ณ , ๋ถํธ์คํธ๋ฉ ์คํ(verifierยท์ธํฐํ๋ฆฌํฐ) ์์ด๋ ๋๋์ง ์๋๋ค โ โ ๋ ๋์ด ยซ๊ฐ์ ๊ธฐ๋ฅ ํ๋ยป์ ์๋ค๋ผ์ ํ ํฐ์ผ์ด๋ค(๊ตฌํ์ฒ๋ผ ใ์ด๋ ์ชฝ๋ง ๊ณ ์น๋ฉด ๋ฐ๋์ชฝ์์ ์ฃฝ๋๋คใ๊ฐ ์๋๋ค).- โ
์ฐฉ์ ์ ํ์: โ ๋จธ์ง ๋ค
jvm_rust/src/{verifier,error}.rs์classfile/src/constant_pool.rs์ ์ค์ ์ฐฉ์ง ์ํ๋ฅผ ๋ค์ ์ฌ๋ผ.jvm_rust/src/class_definition.rs๋ ์ถฉ๋ 17ํ์ผ์ ์ด๋ฏธ ๋ค์ด ์๋ค โ ์ฆ โ ์ด ๋ฐ๋์ ์๋๋ ์๋ฆฌ๋ค. - โ ๋ฒ์ ์ถ์ ๊ถ๊ณ ๋ถ๋ณ: ํฌ๋ฉด ใํ์ ํ๊ทธ ์์ฉ + ๋ช ํํ ๋ฏธ์ง์ ์์ธใ๊น์ง๋ก ์๋ฅธ๋ค.
- โ
์ฐฉ์ ์ ํ์: โ ๋จธ์ง ๋ค
โ
โ
**[2026-09-16 ๊ฐฑ์ ] ์๋ ์ ์ ยซํ๊ทธ 1518 ์ด ์๋คยปยทยซํฌ๋ ์ดํธ ๊ฒฝ๋ก 18 ์ ํ์ฑ๋๋ค(์๋ 1๋ฒ). ์ด์ ์๋ ๊ฒ์ ๋์ฝ๋ ์ถ(3๋ฒ)๋ฟ์ด๋ค.jvm_rust/ยป ๋ ยซ๋ก์๋คยป โ ์ฌ๋ฃ๋ก ์ฝ์ด๋ผ.**
๊ฒฝ๋ก๋ jvm-bytecode/src/ ๋ก ๊ฐ๋ช
๋๊ณ , ํ๊ทธ 15
- โ
โ
**
invokedynamicยซ์คํยป โ โ ์ฐฉ์ง ยท โ ๋จ์ ๊ฒ์ โ ยซ์ฝ์ฌ์ดํธ ๋งํฌยป๋ฟ**(โ โข-3 ์ โ ์นธ). โ โ **[2026-09-16 ๊ฐฑ์ ยทrustjava-invokedynamic-bootstrapmethods-and-methodhandle] โ ๋ฅผ ๋ซ์๋ค.**AttributeInfo::BootstrapMethods๊ฐVec<u8>โVec<BootstrapMethod>(JVMS 4.7.23 ๊ตฌ์กฐ) ยทMethodHandleRef(MethodHandleKind9์ข +FieldMethodref)๋ก CONSTANT_MethodHandle ์ ยซํด๋ ยปํ๋ค. โ โ **ใ๊ฒฐ์ ใ์ ยซ๊ฒฝ๊ณยป๋ฅผ ์ด๋ฆ์ผ๋ก ์ ๋๋ค โ ใ๋๋คใ๋ก ์ฝ์ง ๋ง๋ผ**: ๋๋ ๊ฒ์ ํด๋์คํ์ผ์ ์ ํ (์ข ๋ฅยทํด๋์คยท์ด๋ฆยท์์ ์)๋ฅผ ๊บผ๋ด๋ ๊ฒ๋ฟ์ด๋ค. โ ์ ๋๋ ๊ฒ(์ ๋ถ ์ด๋ฆ์ผ๋ก): โดํด๋์ค ๋ก๋ 0 โต๋ฉค๋ฒ ์กฐํ 0(๊ทธ ๋ฉ์๋๊ฐ ์ค์ฌํ๋์ง ์๋ฌด๋ ์ ๋ณธ๋ค) โถ์ ๊ทผ ๊ฒ์ฌ 0(JVMS 5.4.3.5) ยท โทโ **java.lang.invoke๋ฐํ์ ํด๋์ค๊ฐ ยซ0๊ฐยป๋ค**(์ค์ธก:rustjava-runtime/src/classes/java/์invoke๋๋ ํฐ๋ฆฌ ๋ถ์ฌ ยท ๋ฌธ์์ด ์ฐธ์กฐ 0๊ฑด) โMethodHandleยซ๊ฐ์ฒดยป๋ ๋ง๋ค ์ ์๋ค ยท โธ์ข ๋ฅโ๋์ ์ง์ง๊ธฐ๋validation.rs๊ฐ ์ง๋ค(ํ์๋ ์ผ๋ถ๋ฌ ์ค๋ณตํ์ง ์๋๋ค โ ํ ์คํธ๋ก ์ ๊ฐ๋ค) ยท โนDynamic/InvokeDynamic์bootstrap_method_attr_index๋ โ **[2026-09-16 ๋ซํ ยทrustjava-bound-bootstrap-method-attr-index] ๊ฒฝ๊ณ ๊ฒ์ฌ๋๋ค**(๋ถ์ฌ = 0ํญ๋ชฉ ํ๋ก ํจ๊ป ๋ฌธ๋ค) ยท โบโ ๋ถํธ์คํธ๋ฉ ยซ์ ์ ์ธ์ยป๋ ยซ์ธ๋ฑ์ค ๊ทธ๋๋กยป ๋๋ค(์๋ โ ). โ โ โบ ์ด ์ด ํ์ฐจ์ ๊ธ์๋ค โ ใ์ธ๋ฑ์ค๋ฅผConstantPoolReference๋ก ํ์ด๋ผใ๋ ยซํ๊ทยป๋ค(M3 ๋ก ์ธก์ ):LambdaMetafactory.metafactory์ ์ธ์๋ MethodTypeยทMethodHandleยทMethodType ์ด๋ผ ํด์์ ๊ฐ์ ํ๋ฉด โ ๋๋ค๊ฐ ๋ ๋ชจ๋ ํด๋์ค๊ฐ ยซํ์ฑยป์์ ์ฃฝ์ดClassFormatError: Invalid class file๋ก ๋๋์๊ฐ๋ค (= ์ง์ ๋ ํ์ฐจ๊ฐ ๋ง๋ ใํ์ โ ๋ฏธ์ง์ใ ๊ตฌ๋ถ์ ๊ทธ๋๋ก ์๋๋ค). โtest-data/indy/Lambda.class๊ฐ ๊ทธ ์ถ์ ยซ๋ ์ธตยป์์ ๋ฌธ๋ค.โ ๋ฏธ์ฐฉ์(= โ):โ โ **[2026-09-23 ์ฌ์ธก] ์ ์ค ยซ๋์ด ๋ซํ๋คยป** โmakeConcatWithConstants๋ ๋งํฌ๋๋ค โ ๋จ์ ๊ฒ์makeConcatยทLambdaMetafactory๋ฐํ์ ยทjava.lang.invokeํจํค์ง ์ ์ค.makeConcat=string_concat.rs์FACTORY_NAME_NO_RECIPE(e94cfe91๋ฆฌ๋์ง) ยทLambdaMetafactory=jvm-bytecode/src/lambda.rs+Opcode::InvokedynamicLambda(8c7b473f). โ ๋จ์ ๊ฒ์java.lang.invokeํจํค์ง ยซํ๋ยป๋ค(์ค์ธก:rustjava-runtime/src/classes/java/lang/์invoke๋ถ์ฌ) โ โช-1 ๋ก ์ฎ๊ฒผ๋ค. โ โ ์ฐฉ์ ์ ์ค์ธก ์๋ฌด โ ยซ๊ทธ๋๋ก ์ ํจยปํ๋ค:verifier.rs์Opcode::Invokedynamic(_)๋ถ๊ธฐ๋ฅผ ์ธ์ ๋บ์ง๊ฐ ๊ทธ ํ์ฐจ์ ๊ฒ์ดํธ๋ค. ๊ทธ๊ฒ์ ๋นผ๋ฉดinterpreter.rs:631์todo!()๊ฐ ๋๋ฌ ๊ฐ๋ฅํด์ง๋ค โ โ 2026-09-16 ์ ยซ๋ ๋ฒยป ์ธก์ ๋๋ค (ํ๊ทธ ํ์ฐจ M4 ยท ์ด ํ์ฐจ M4: ๋ถ๊ธฐ ์ ๊ฑฐ ์panicked at jvm-bytecode/src/interpreter.rs:631ํธ์คํธ abort โ ํ ํธ๋ฆฌ๋ ๊ฒ์คํธ ์์ธ). โ โ ๋ถ๊ธฐ ์ ๊ฑฐ์ ์ธํฐํ๋ฆฌํฐ ๊ตฌํ์ ยซ๊ฐ์ ์ปค๋ฐยป์ด์ด์ผ ํ๋ค. ๋ฐ๋ก ํ๋ฉด ๊ทธ ์ฌ์ด์ ํธ์คํธ abort ๊ฐ ์ฐ๋ค. โ ์ด ํ์ฐจ๋ ๊ทธ ๋ถ๊ธฐ๋ฅผ ยซ๊ฑด๋๋ฆฌ์ง ์์๋คยป(git diff --stat jvm-bytecode/src/verifier.rs๋น ์ถ๋ ฅ). - โ
โ
**[๋ซํ 2026-09-16 ยท
rustjava-ldc-tags-15-16-17-still-malformed]ldcํ๊ทธ 15ยท16ยท17 โ ยซ๋ฏธ์ง์ยป์ด๋ผ๊ณ ๋งํ๋ค.** ์ง๋จ์ดClassFormatError: Invalid class fileโUnsupportedOperationException: Unsupported class file feature: ldc of a โฆ. โ ํ์ ์ ยซ๋ยป์ด๋ค โ ํ๋๋ก ์ ์ง ๋ง๋ผ: โ์ฌํ๋๋ค โโ javac ์ ๊ทธ ํํ๋ฅผ ๋ด์ง ์๋๋ค(์ธก์ ๋ ๋ถ์ฌ โ JDK jmods 27,902 ํด๋์ค ยทldc1,252,714 ์๋ฆฌ ยท 0๊ฑด ยท--release 21/25/26+preview14์ข ์์ค 0๊ฑด). โ โ ํฝ์ค์ฒ๋ ยซํฉ์ฑยป์ด๋ค(test-data/src/ldc/make_ldc_fixtures.pyยท 6์ข ). โ ๊ทธ๋ ๊ฒ ์ ์๋ค โ ใํ๋ฒํ ์ฝ๋ใ๋ก ์ ์ง ๋ง๋ผ. โ ์ ๋นํ๋ ยซ๋๋ฌ์ฑยป์ด ์๋๋ผ ยซ์ธ์ ์ฑยป์ด๋ค: ๊ทธ ์ ์ด โฃ-1 ์ด ํ์๋ก ํ ๋ฐ๋ก ๊ทธ ์์๋ค์ด๋ค. โ ์ฐธ์กฐ JVM ์ด ์์ฑ 4์ข ์ ์ ๋ถ ๋ก๋ยท์คํํ๋ค โ ใ๋ชป ์ฝ๋ ํ์ผใ์ด ์๋์ด ์ค์ธก์ผ๋ก ์ ๋ค. โ โ **[๊ฐฑ์ 2026-09-16 ยท-fixยท ๊ฒ์ดํธโก request-changes] ์ ใ๋จ๊ธด ๊ฒ โดใ์ ยซ๋ฏธ๊ฒ์ฌยป๊ฐ ์๋๋ผ ยซ์ค์งยป์ด์๋ค โ ์ด ํ์ฐจ๊ฐ ๋ง๋ ๊ตฌ๋ฉ์ด๋ค.** โ ์์ฉ์งํฉ์ ๋ํ๋ฉด์ ยซ์ฐ์ฐํ ๋ฐฑ์คํฑยป์ ๋์ฒด ์์ด ๊ฑท์ด๋๋ค: ์ ์๋Dynamic โ None โ opcode ํ์ฑ ์คํจ๋ผ์ ์ฐธ์กฐ JVM ยซ๋ยป ๋ชป ์ฝ๋ ํ์ condy ๊ฐClassFormatError๋ก ๋๊ฒผ๋๋ฐ, ๋ํ ๋ค โ **ใ๋ฏธ์ง์ใ์ด๋ผ๊ณ ๋ตํ๋ค** โ โ ์ด ๋ฆฌ๋์ง์ ๋ฌธ์ฅ(ใ๋ชป ยซ์ฝ๋ยป ํ์ผ์ด ์๋๋ผ ๋ชป ยซํ๋ยป ํ์ผ์ด๋คใ)์ด ์ ํํ ๋ฐ๋๋ก ๋ค์งํ ๋์ญ์ด๋ค. โ ๊ณต์ ํ๊ฒ: before ๊ฐ ์ณ์๋ ๊ฒ์ ยซ๊ฒ์ฌํด์ยป๊ฐ ์๋๋ค โ ๊ฒ์ฌ๋ ์ ์ด์ ์์๋ค. ๊ทธ๋๋ ์ปค๋ฒ๋ฆฌ์ง ์ญ์ ๋ค. โ โ ๊ณ ๋ฅธ ๊ฐ๋ = โ ยซmajor ๋ฒ์ ์ถยป(validation.rs์constant_pool_tags_fit_the_class_file_versionยท ์์ฑ ํ์ฑ 0). โ ๊ทธ๋ฆฌ๊ณ ์ด ํ์ฐจ๊ฐ ใ๊ฒ์์์ 1ํใ์ ยซ4ํ ํยป๋ก ๋ํ๋ค โ ์ค์ธก์ด ์์ผฐ๋ค: ๊ฐ์ ๊ฒฐํจ์ด ํ๊ทธ 15ยท16 ์๋ ์์๋ค (major 50 ์์ldc of a method handle/method typeโ ์ฐธ์กฐ JVM ์Class file version does not support constant tag 15/16). โ ํ = 15ยท16ยท18 โฅ 51 ยท 17 โฅ 55(JVMS 4.4). โ ๋๊ฐ ยซ0ยป: OpenJDK 26 jmods 27,902 ํด๋์ค ์ค ์๋ฐ 0 (โ ๋จ ๊ทธ corpus ๋ ์ ๋ถ major 69ยท70 ์ด๋ผ โฅ51 ํ์ ยซ์ํํ์ง ๋ชปํ๋คยป โ ์จ๊ธฐ์ง ์๋๋ค) ยท ์ด repotest-data์๋ฐ์ ์ด ํ์ฐจ๊ฐ ๋ง๋ ํฝ์ค์ฒ 1๊ฑด๋ฟ. โ โ **[2026-09-23 ๋ซ์] ์๋ ใ๋จ๋ ๋์ญ = ยซ1ยปใ์ ยซ0ยป ์ด๋ค** โd9f45ebf(rustjava-bound-bootstrap-method-attr-index)์validation.rs::bootstrap_method_indices_resolve๊ฐ ใ์์ฑ ๋ถ์ฌ = 0ํญ๋ชฉ ํใ๋ก ๊ทธ ์นธ์ ํจ๊ป ๋ฌผ์๋ค(๊ทธ ํ์ฐจ worklog ์ ํ โํ์ดrejected). โ ๊ทธ ํ์ฐจ๊ฐ ๋ซ์๋๋ฐ ์ด ์ ์ด ์ ์ง์์ก๋ค โ โช ๋ธ๋ก์ ใ์ธ ๋ฒ ์ด๊ฒผ๋คใ์ ๊ฐ์ ๊ณ๊ธ์ด๋ค. ---- ์ดํ ์ฌ๋ฃ ---- โ โ ๋จ๋ ๋์ญ = ยซ1ยป:LdcDynamicNoBSM(bootstrap_method_attr_index๊ฐ ๊ฐ๋ฆฌํค๋BootstrapMethods๊ฐ ์๋ค) โ ์ฐธ์กฐ JVM ์Missing BootstrapMethods attribute์ธ๋ฐ ์ฐ๋ฆฌ๋ ์ฌ์ ํ ใ๋ฏธ์ง์ใ์ด๋ค. โ ๊ทธ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ ์์ฑ ํ์ฑ์ด ์ ๋ง๋ก ํ์ํ๋ฏ๋ก โฃ-1(PR #45 ๋ฆฌ๋์ง) ๋ชซ์ด๋ค โ โ ํฝ์ค์ฒ์ ํ ์คํธ๋ก ยซํ์ฌ ๋ตยป์ ์ ๊ฐ ๋์ผ๋ ๊ทธ ํ์ฐจ๊ฐ ๋ซ์ผ๋ฉด ๊ทธ ๋จ์ธ์ด ยซ์๋๋ฝ๊ฒยป ์ง๋ค. โ ๋จ๊ธด ๊ฒ ๋ ๋: โตโ M5 ์ธต ์ด๊ธ๋จ: โ **[2026-09-16 ๋ซํ ยทrustjava-cp-tag-switch-passthrough-mutation-detectable] ์ด์ test_class_format์ด ยซ์ก๋๋คยป**(ํฝ์ค์ฒ๋ฅผ ยซ์ ์ผํ ๊ฒฐํจยป์ผ๋ก ๋ค์ ์ง์๋ค โ ์ข ์ ์ ์ฐธ์กฐ๋๋ Methodref ์ฌ๋กฏ์ ๋ฎ์ด ยซ๋ค๋ฅธ ์ด์ ยป๋ก ํต๊ณผํ๋ค) โถ์๋ํํฐ ์์ฑ๊ธฐ corpus ๋ฏธ์ธก์ (์ด ๋จธ์ ์ jar 0๊ฐ). โ InputStreamReader ๋์ฝ๋ โ ์๋ ์ฌ๋ฃ ์ ์ ์งธ ํญ๋ชฉ ๊ทธ๋๋ก ์ด์ ์๋ค(๋ณ๊ฑด).โ โ **[2026-09-23 ๋ซ์] ใ๊ทธ๋๋ก ์ด์ ์๋คใ๋ ์ ๋ฐ๋ง ์ฐธ์ด์๋ค โ ์ฌ ๋ณด๋ ๋ ์ถ ์ค ยซํ๋ยป๋ง ๊นจ์ ธ ์์๋ค.** ์ฌ๋ฃ๊ฐ ์๊ตฌํ ใโ ์ดํ ์ํ๋ฅผ ๋ค์ ์ฌ๋ผใ๋ฅผ ์ค์ ๋ก ํ๋ค: ์ํ์ฑ ์ ๋ค์ด์๋ค(ํ๋endOfInput์ค์ฌ ยท UTF-8 ์ญ์ฃผ์ฌ ์ค์ฌ ยท ๊ทธ ์ถ์test_input_stream_reader_preserves_split_multibyte_and_buffered_eof๋ก ์ด๋ฏธ ์ ๊ฒจ ์์๋ค). โ ๊นจ์ ธ ์๋ ๊ฒ์ EUC-KR ์ถ์ด๊ณ โ ํ ์คํธ๊ฐ 0๊ฑด์ด๋ผ ์๋ฌด๋ ๋ชฐ๋๋ค. ๊ทผ์ธ = ใ๋ง์ง๋ง ๋ฐ์ดํธ >= 0x81 ์ด๋ฉด ๋ณด๋ฅใ์ธ๋ฐ EUC-KR ํํ ๋ฐ์ดํธ๋ ์ ๋ ๋ฒ์์ ๊ฒน์ณ์ ์์ฑ๋ ์๋ ๋ณด๋ฅ๋ผ ๊ทธ ์ ๋๊ฐ ํ๋ก ๋จ๊ณ , read ๋ง๋ค ์๋ก ๋ง๋๋ ๋์ฝ๋๊ฐ ๊ทธ๊ฒ์ ์ผ์ผฐ๋ค. โ ์ ๋ฐฉ ์ฃผ์ฌ๋ก ๊ณ ์น๊ณ 3ํ์์ ์ ๊ฐ๋ค(์ด ํ์ฐจ). โ **ใ๋์ฝ๋๋ฅผ read ๋ง๋ค ์๋ก ๋ง๋ ๋คใ๋ ๊ตฌ์กฐ ์์ฒด๋ ๊ทธ๋๋ก๋ค** โencoding_rs::Decoder๋ฅผ ์๋ฐ ํ๋์ ๋ด์ ์ ์์ด ยซ๋ณด๋ฅ ํด๋ฆฌ์คํฑยป์ด ์ค๊ณ๋ค. โ ๊ทธ๋์ ๋ค์ฏ์งธ charset ์ ๋ํ๋ฉด ์ด ํจ์ ์ด ๋์ด์๋๋ค(โช ์๋ ๋น).
---- ์ดํ ์ฌ๋ฃ(2026-08-16 ๊ธฐ์ฌ ยท ํฌ๋ ์ดํธ ๊ฒฝ๋กยทํ๊ทธ ์์ ์ ๋ก์๋ค) ----
- โ
jvm_rust/src/interpreter.rsOpcode::Invokedynamic(_) => todo!()๋ origin/mainยทupstream/main ์์ชฝ์ ๊ทธ๋๋ก ์ด์ ์๋ค โ โ ๋ฌธ์์ด๋ก๋ ์ฐธ์ด์ง๋ง ยซ๋๋ฌ ๊ฐ๋ฅ์ฑยป์ด ๋ค๋ฅด๋ค (2026-08-16 ์ ์ . ๊ตฌํ์ ์ฌ๊ธฐ์ ๋ฉ์ถฐ ยซ์์ชฝ ๋์ผยป๋ก ์ฝ์๋๋ฐ ํ๋ ธ๋ค). โ โ upstream ์๋jvm_rust/src/verifier.rs๊ฐ ์๋ก ์๊ณ (origin ์๋ ์๋ค), ๊ฑฐ๊ธฐ์Opcode::Invokedynamic(_)๋ฅผ ๋ง๋๋ฉดClassDefinitionError::UnsupportedFeature("invokedynamic")๋ก ๊ฑฐ๋ถํ๋ค. ์ดverify๋jvm_rust/src/class_definition.rs๊ฐ ํด๋์ค ์ ์ ์์ ์ ๋ถ๋ฅด๋ฏ๋ก, upstream ์์๋ โ ์ธํฐํ๋ฆฌํฐ์todo!()์ ๋ฟ๊ธฐ ์ ์ ๊น๋ํ ์ค๋ฅ๋ก ๋๊ธด๋ค. ๋ฐฉ์ฆ: ๊ฐ์ ํ ์คํธ๊ฐ origin ์test_invokedynamic_consumes_reserved_bytes, upstream ์ โtest_invokedynamic_is_rejected๋ก ์ด๋ฆ๋ถํฐ ๋ฐ๋์ด ์๋ค(classfile/src/opcode.rs). โ โ โ โ ๋จธ์ง๊ฐ ๋๋๋ฉด ยซํจ๋ ์ถยป์ ์๋ฉธํ๋ค. ๋จ๋ ๊ฒ์ ยซ๊ฑฐ๋ถยป โ ยซ์ค์ ์ง์ยป ์ด๋ค. โปrustjava-classfile-parse-error-propagation์ด ์ด ์ถ์ ์ฒ๋ฆฌํ๋ค๋ ํต์ค์ ์ฌ์ ํ ๊ฑฐ์ง์ด๋ค โ ๊ทธ ํฐ์ผ์ ํด๋์คํ์ผ ํ์ฑ ๊ฒฝ๋ก๋ง ๊ณ ์ณค๊ณ ์ธํฐํ๋ฆฌํฐยทverifier ์ ๋ฌด๊ดํ๋ค. - โ
javac 21 ์ต๋ช
๋ด๋ถ ํด๋์ค "Malformed class file": ๋ฏธํด๊ฒฐ. ์์ธ ํ๋ณด๊ฐ ์ขํ์ก๋ค โ
classfile/src/constant_pool.rs์ ํ๊ทธ ๋ถ๊ธฐ๊ฐ originยทupstream ๋ชจ๋ 1~12 ๊น์ง๋ฟ์ด๊ณ 15(MethodHandle)ยท16(MethodType)ยท17(Dynamic)ยท18(InvokeDynamic) ๋ถ๊ธฐ๊ฐ ์๋ค. javac 9+ ๋ ๋ฌธ์์ด+์ฐ๊ฒฐ์กฐ์ฐจ invokedynamic ์ผ๋ก ๋ธ๋ค. โ STATE ๊ตฌํ์ ใํ๊ทธ 1518 ์๋ใ์ ๊ทผ๊ฑฐ ์์ด ๋ฐฐ์ ํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. โ ์ด ์ ๋ฐ์ โ ๋จธ์ง ๋ค์๋ ๊ทธ๋๋ก ๋จ๋๋ค โ verifier ๋ ํ์ฑ์ด ๋๋ ๋ค์ ๋๋๋ฐ, ํ๊ทธ 1518 ์ ํ์ฑ ๋จ๊ณ์์ ๋จผ์ ๋งํ๋ค. ์ invokedynamic ์ถ๊ณผ ํ ํฐ์ผ(๋ธ๋ฆฌํ โข)์ผ๋ก ๋ฌถ๋ ๊ทผ๊ฑฐ๊ฐ ์ด๊ฒ์ด๋ค. - โ
InputStreamReader ๋์ฝ๋: origin/main ์์ ๋ฏธํด๊ฒฐ(read ๋ง๋ค
Charset::resolve(...).new_stream_decoder()๋ก ์๋ก ๋ง๋ ๋ค).rustjava-unsupported-charset-exception์ด ๊ณ ์น ๊ฒ์ ๋ฏธ์ง์ charset ํจ๋์ด์ง ๊ฒฝ๊ณ ์ ์ค์ด ์๋๋ค โ ๋ณ๊ฐ ๊ฒฐํจ์ด๋ค. โป๋จ upstream ์ ์ํ์ฑ ์ ๊ฐ๊ณ ์๋ค(endOfInputํ๋ + UTF-8 lead-byte ์ญ์ฃผ์ฌ ยท EUC-KR>=0x81ํ๋๋ฐฑ). โ โ ์ ๋จธ์ง๋ก ํจ๊ป ๋ค์ด์จ๋ค. ๋ณ๊ฑด ๋ฐ๊ถ ์ ์ โ ์ดํ ์ํ๋ฅผ ๋ค์ ์ฌ๋ผ.
โค์ด์ ๋ฉ๋ชจ โ โ 2026-08-27 S3 ๊ฒ์ดํธโข ์ค์ธก์ผ๋ก ๊ต์ฒด(๊ตฌํ ใ์ด๋ฆฐ PR = #13 ํ๋ใ๋ ๋ก์๋ค)
โ
โ
**[2026-09-23 ๊ฐฑ์ ] ์๋ ํ๋ ยซ๋ก์๋คยป โ #16 ์ ๋จธ์ง๋๊ณ ์ง๊ธ ์ด๋ฆฐ PR ์ ยซ#81 ํ๋ยป๋ค**
(gh pr list -R Jun025/RustJava --state open โ feat/rustjava-sorted-findings ยท โ
์๋ฐ ํ ์ฌ์กฐํ mergeable=CONFLICTINGยทDIRTY).
โ
**ใ์ด๋ฆฐ PR = 1๊ฑดใ์ด๋ผ๋ ์๋ง ์ฐ์ฐํ ๋ง์์** ์ด ํ๊ฐ 27์ผ๊ฐ ์ ๊ณ ์ณ์ก๋ค โ โ
์๊ฐ ๊ฐ๋ค๊ณ ๋ด์ฉ์ด ๊ฐ์ ๊ฒ์ด ์๋๋ค.
---- ์ดํ ์ฌ๋ฃ(2026-08-27 ์ค์ธก) ----
โ
์ด๋ฆฐ PR = 1๊ฑด(gh pr list -R Jun025/RustJava --state open):
| PR | ๋ธ๋์น | ์ํ | ์์ฅ |
|---|---|---|---|
#16 [rustjava-upstream-sync-s3] |
feat/rustjava-upstream-sync-s3 |
OPEN ยท โ
๊ฒ์ดํธโก approve(ํ 3cf944d) ยท ๊ฒ์ดํธโข ์งํ ์ค |
.done.mdยท.review.md ๋ ๋ค ๆ |
[rustjava-upstream-sync-s2] |
โ | โ
MERGED(2026-08-26T21:51:38Z โ main 11ef501) |
3๊ฒ์ดํธ ์์ฃผ |
| โ | MERGED(โ 00bddf3 ยท dde85ce ยท b3a4cf4) |
์์ฃผ |
โ
โ
์คํ PR ์ ๋ค๋ฃฐ ๋ ๋ฐ๋์ ๊ธฐ์ตํ ๊ฒ(2026-08-27 ์ค์ฌ๊ณ ๊ธ ๊ทผ์ ): #16 ์ base ๊ฐ
feat/rustjava-upstream-sync-s2 ์๊ณ ์ด ์ ์ฅ์๋ deleteBranchOnMerge=true ๋ค โ โ
**#13 ์ ๊ทธ๋ฅ ๋จธ์งํ์ผ๋ฉด
#16 ์ด base ์๋ฉธ๋ก ์๋ CLOSED ๋ ์๋ฆฌ์๋ค(reopen ๋ถ๊ฐ). S2 ๊ฒ์ดํธโข์ด ๋จธ์ง ยซ์ ยป์
gh pr edit 16 --base main ์ผ๋ก ์ ์ ์ฌํ๊นํด ๋ง์๋ค. โ โ
์คํ PR ์ ๋ถ๋ชจ ๋จธ์ง ยซ์ ยป์ ์์ base ๋ฅผ ์ฎ๊ฒจ๋ผ.**
โ
์๊ฒฉ ๋ธ๋์น(git ls-remote --heads origin ยท 2026-08-27 ์ค์ธก) = 3๊ฑด:
main ยท feat/rustjava-upstream-sync-s3(PR #16 ์ head) ยท wie-ktf-hardening.
| ๋ธ๋์น | ์ฑ๊ฒฉ | ์ฒ๋ถ |
|---|---|---|
feat/rustjava-upstream-sync-s3 |
PR #16 ์ head โ ๊ฒ์ดํธโข ์งํ ์ค | ๋จธ์ง์ ํจ๊ป ์๋ ์ญ์ (deleteBranchOnMerge) |
wie-ktf-hardening |
๋ณด์กด ํ์ (2026-07-25) | ์ โก๋ก ์์กด ๊ฐ์น๊ฐ 2๊ฑด๊น์ง ์ค์๋ค โ ๋ธ๋ฆฌํ โข-2 ๊ฐ ๊ทธ 2๊ฑด์ ์ ๋ธ๋์น๋ก ์ฎ๊ฒจ ์ฌ์ผ๋ฉด โ ๋ณด์กด ๊ทผ๊ฑฐ๊ฐ ์๋ฉธํ๋ค |
โ ๋ค์์ S4 / ๋ค์์ S5 โ โ
โ
**[2026-09-11 ๊ฐฑ์ ] S8 ๊น์ง ์ ๊ฑด ์ฐฉ์ง โ ๋๊ธฐ ์บ ํ์ธ ์ข
๋ฃ**(โ ์ฐธ์กฐ).
behind 1 ยท ์ด๋ฆฐ PR 0 ยท ์๊ฒฉ ๋ธ๋์น = main ยท wie-ktf-hardening. ๋ค์ ์ค์์
= โข์ null-guard.
- โ
PR ๋ฐ๊ถ ์
--repo Jun025/RustJava๋ช ์(2026-07-22 upstream ์ค๋ฐํ ์ฌ๊ณ ์ฌ๋ฐ ๋ฐฉ์ง). - โ upstream ๋ฐ์ (PRยท์ด์ยท์ฝ๋ฉํธยทpush)์ ํฐ์ผ์ด ๋ช ์ ํ๊ฐํ ๋๋ง. ๊ธฐ๋ณธ์ ์กฐํ๋ฟ.