Skip to content

Latest commit

ย 

History

History
1854 lines (1808 loc) ยท 262 KB

File metadata and controls

1854 lines (1808 loc) ยท 262 KB

STATE

โ˜…๋™๊ฒฐ โ€” 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 ๋Š” ์œ„์น˜ ์—†์Œ. ClassFileError 24โ†’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ยทload unwrap 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.rs publish ์˜ 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/main c654ae2e). โ˜…์ „์ˆ˜: 13 ์ค‘ 11์ด ํ‘œ๋ฅผ ๊ฑธ์œผ๋ฉฐ ๋ฉˆ์ถ˜ ์œ„์น˜๋ฅผ ์ฅ๊ณ  ์žˆ์—ˆ๋‹ค(pool 3 ยท field 3 ยท method 3 ยท interface 1 ยท class attribute 1) ยท this_class/super_class 2๊ฐœ๋Š” ๊ฐ€๋ฆฌํ‚ฌ ๊ณณ ์—†์Œ โ†’ InvalidFormat ์œ ์ง€. โ˜…๋ฉˆ์ถค ๊ธฐ์ค€: enum ์€ ยซ๊ทœ์น™ยป์ด ์•„๋‹ˆ๋ผ ยซํ‘œ ์ข…๋ฅ˜ยป๋กœ๋งŒ ์ž๋ž€๋‹ค โ‡’ InvalidFormatAt { cause, location: Location } 1๋ณ€์ข… + Location 5์ข…. 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.py rc 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, aborting rc 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 anonymous FAILED โ†” ๊ณ ์นจ โ†’ 5/5 ยท 12 ยท 0 ok. โ˜…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 recursed ok โ†” extend 2์ค„ ์ œ๊ฑฐ โ†’ 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 fmt rc 0. โ˜…ํ•ด์†Œ ์—ฌ๋ถ€ ์„ ํ–‰ ํ™•์ธ โ€” scripts/ยทrust.yml ์ตœ์ข… ์ปค๋ฐ‹์€ 35f34797(๊ทธ ์ˆ˜์ • ์ž์‹ ). โ˜…์ •์ ์„ ๊ณ ๋ฅธ ์ด์œ : ๋‘ PYTHONHASHSEED ์žฌ์‹คํ–‰์€ โ˜…ํšŒ์ฐจ๋‹น ์•ฝ ์ ˆ๋ฐ˜ ๋ˆˆ์„ ๊ฐ๊ณ (ํ•ด์‹œ ์ˆœ์„œ = ์ •๋ ฌ ์ˆœ์„œ๋ฉด ๋ฌด์ฆ์ƒ), assert sorted ๋Š” ๋‹ค๋ฅธ ๊ณณ์˜ ์ƒˆ ์ถœ์ฒ˜๋ฅผ ๋ชป ์žก๋Š”๋‹ค(์ œ์•ˆ ์ž์‹ ์˜ ์•ฝ์  ๊ธฐ์ˆ ). โ˜…์–‘๋ฐฉํ–ฅ 2ร—2(์ œํ’ˆ ํ˜ธ์ถœ๋ถ€): M1 check-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_classes 6๊ฐœ์— String ์—†์Œ ยท from_rust_class ๋Š” ์ด๋ฆ„์„ [B(nameBytes) ๋กœ ๋„ฃ๋Š”๋‹ค โ‡’ ์ฒ˜์Œ ํ•„์š”ํ•œ ๊ณณ์€ ํ”„๋กœํผํ‹ฐ ๋ฃจํ”„. โ˜…์ž๋ฆฌ: ํ”„๋กœํผํ‹ฐ ๋ฃจํ”„ ์•ž(๊ธฐ์กด NoClassDefFoundError ํ™•์ธ์€ ๊ทธ ๋’ค๋ผ String ํ˜•์ƒ์—” ๋Šฆ๋‹ค) ยท ๊ด€์šฉ์€ ๋™์ผ(๋กœ๋”์— ์ง์ ‘ ์งˆ์˜ ํ›„ resolve โ€” bare resolve_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์ค„) ยท .rs 0์ค„. โ˜…์žฌํ˜„: origin/main ํŒ๋ณธ ยท PYTHONHASHSEED=random 10ํšŒ โ†’ ์ˆœ์„œ 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.yml 5์žก ์ค‘ 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 โ€ฆelse 460์ž๋ฆฌ๊ฐ€ ์กฐ์šฉํžˆ ์ƒœ๋‹ค(๊ทธ๋ž˜์„œ ๊ทธ ์•ˆ์„ ๋ฒ„๋ ธ๋‹ค). โ˜…๋Œ€๊ฐ€: ์‹คํŒจ ์‹œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์˜ˆ์™ธ๊ฐ€ ์˜จ๋‹ค โ‡’ ํด๋ž˜์Šค๋กœ ๋ถ„๊ธฐํ•˜๋Š” ์ œํ’ˆ 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. โ˜…์ˆœ์ˆ˜ ์ธก์ • ยท .rs 0์ค„ ยท scripts/ 0์ค„. โ˜…์ˆ˜: bare exception( 847 = ์ •์˜ 1 + ๋ฆฌํ„ฐ๋Ÿด 846 + ๊ทธ ๋ฐ– ๋ฆฌํ„ฐ๋Ÿด 0 + โ˜…๋น„๋ฆฌํ„ฐ๋Ÿด 0 โ‡’ ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ๋ณด๋Š” ์ง‘ํ•ฉ = ์‹ค์ œ ํ˜ธ์ถœ๋ถ€ ์ง‘ํ•ฉ(์ง€๊ธˆ์€ ์ผ์น˜). โ˜…โ˜…์ˆ ์–ด๋ฅผ ๊ฐˆ๋ผ์•ผ ๋‹ต์ด ๋งž๋Š”๋‹ค โ€” exception( ๋ถ€๋ถ„์ผ์น˜๊ฐ€ assert_exception( ๋“ฑ ๋‹ค๋ฅธ ํ•จ์ˆ˜ 8์ข… 41์ž๋ฆฌ(์ฒซ ์ธ์ž๊ฐ€ jvm)๋ฅผ ์“ธ์–ด๋‹ด๋Š”๋‹ค. ์•ˆ ๊ฐˆ๋ž์œผ๋ฉด โ˜…M=33 ์ด๋ผ๋Š” ํ‹€๋ฆฐ ๋‹ต์ด์—ˆ๋‹ค. โ˜…์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ˆ ์–ด๋ฅผ ์‹œํ—˜ํ–ˆ๋‹ค: ๋Œ€์กฐ๊ตฐ = ํ•œ ์ค„ ๋ฆฌํ„ฐ๋Ÿด๋งŒ ์„ธ๋ฉด 812 = ๊ฒ€์‚ฌ๊ธฐ ์ดˆํŒ ์ˆ˜์™€ ์ •ํ™•ํžˆ ์ผ์น˜ ยท ๊ฐœ์•… ์ฃผ์ž…(๋ณ€์ˆ˜ยทformat!ยทconstยทraw string) โ†’ ์ „๊ฑด nonliteral 0โ†’4, ๋น„-java ๋ฆฌํ„ฐ๋Ÿด โ†’ literal_other 0โ†’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=2 cannot 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(e53b2142 6 ยท 514d5b08 6 ยท 56bb54fa 20). โ˜…์žƒ๋Š” ๊ฒƒ: ์–•์€ ํŠธ๋ฆฌ ์ˆ˜๋™ ์‹คํ–‰์€ ์ด์ œ ๋นจ๊ฐ• ยท ํ‘œ์‹œ/๋ฉด์ œ ํ˜ธ์ถœ๊นŒ์ง€ ์ผ๊ด„ raise ๋ผ ๋” ์ž์ฃผ ๋ฉˆ์ถ˜๋‹ค ยท โ˜…preflight ๋Š” ยซ์–•์Œยป๋งŒ ๋ณธ๋‹ค(๋ถ€๋ถ„ ํด๋ก ์€ ๋‚จ์•˜๋‹ค) ยท F8 ใ€Œ0ใ€์˜ ์ธ๊ณผ๋Š” ๋ฏธ์ฆ๋ช…. โ˜….rs 0๊ฑด ยท ์ˆ ์–ดยทํ•„ํ„ฐ ํญ ๋ฌด์ ‘์ด‰ ยท ์ข…๋ฃŒ์ฝ”๋“œ๋Š” ๊ธฐ์กด 2 ์žฌ์‚ฌ์šฉ. โ˜…PR ์€ #71 ์— ์Œ“์—ฌ ์žˆ๋‹ค(๊ฒ€์‚ฌ๊ธฐ๊ฐ€ main ์— ์—†๋‹ค) โ€” ๊ณ„์•ฝ 5 ์žฌ์ง€์ • ํ•„์š”.
  • [rustjava-lock-every-named-exception-class-is-loadable-fix] โ˜…โ˜…๊ฒ€์‚ฌ๊ธฐ์˜ ยซ๊ฑฐ์ง“ ์ดˆ๋กยป 2๊ฑด + ยซ๊ฑฐ์ง“ ๋นจ๊ฐ•ยป 1๊ฑด ์ •์ •(๊ฒŒ์ดํŠธยฒ ๋ฐ˜๋ ค ์Šน๊ณ„ ยท PR #72). โ˜…F1 ์งง์€ ์ด๋ฆ„ ์ถฉ๋Œ(FormatterยทJarURLConnection 2์Œ) โ‡’ ํ•œ์ชฝ ๋“ฑ์žฌ๋ฅผ ์ง€์›Œ๋„ ์ „ rc=0(๊ฑฐ์ง“ ์ดˆ๋ก) โ†’ ํ›„ rc=1. ํ‚ค๋ฅผ (๋ชจ๋“ˆ,ํƒ€์ž…,ํ•จ์ˆ˜) ๋กœ. โ˜…F2 ์ค„ ๋‹จ์œ„ ์Šค์บ”์ด ๋‹ค์ค‘ ์ค„ ํ˜ธ์ถœ์„ ๋ชป ๋ด„ โ‡’ ์ „ rc=0(์•ˆ ๋ณด์ž„) โ†’ ํ›„ rc=1. โ˜…846 โˆ’ 34 = 812 ๋กœ ๊ฒ€์ˆ˜์ž ์ˆ˜์™€์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ–ˆ๋‹ค. โ˜…F3 list_proto 3๊ฑด ๋ˆ„๋ฝ + ํ•œ 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-bytecode From) โ€” arm ์ถ”๊ฐ€๋ฟ, 14๊ทœ์น™ ๋ฌด๋ณ€. โ˜…ํƒ€์ž… ยซ์•ˆ ์ปค์กŒ๋‹คยป(Copyยทํฌ๊ธฐ ๋ถˆ๋ณ€ ์‹œํ—˜) ยท โ˜…๋ฉ”์‹œ์ง€ ๋ฌธ๋ฉด์ด ๋ฐ”๋€Œ์–ด ๋‹จ์–ธ 2๊ณณ์ด ๋ฐ”๋€๋‹ค. โ˜…-p classfile 16 passed(์ „ 13) ยท test_class_format 22 ยท --all rc=0.
  • [rustjava-lock-every-named-exception-class-is-loadable] โ˜…โ˜…์ด๋ฆ„์œผ๋กœ ๋ถ€๋ฅด๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค๊ฐ€ ยซ์‹ค์„ ์ˆ˜ ์žˆ๋Š”ยป ๊ฒƒ์ธ๊ฐ€ โ€” ๋Œ€์กฐ ํ•œ ์ž๋ฆฌ. ์ฑ„ํƒ ์ œ์•ˆ 2026-09-17-string-concat-recipe-arity#p0(worklog json ๊ธฐ๋ก). โ˜…์ „์ œ ํ™•์ธ(์ฝ”๋“œ): jvm/src/jvm.rs:943-950 new_class(...).await.unwrap() โ‡’ ๋ชป ์‹ฃ๋Š” ์ด๋ฆ„์€ throw ๊ฐ€ ์•„๋‹ˆ๋ผ ํŒจ๋‹‰. โ˜…์ž๊ธฐ ์ฐธ์กฐ โ€” :842 ๊ฐ€ ๋ถ€์žฌ๋ฅผ exception("java/lang/NoClassDefFoundError") ๋กœ ๋ณด๊ณ ํ•œ๋‹ค. โ˜…๋ฒ ์ด์Šค๋ผ์ธ 0(โ˜…๊ฒŒ์ดํŠธยฒ ์ •์ • ํ›„): exception( ๋ฆฌํ„ฐ๋Ÿด 43 ๊ณ ์œ  / 846 ํ˜ธ์ถœ๋ถ€ โ†” ๋“ฑ์žฌ 268(as_proto 265 + list_proto 3). โ˜…์ดˆํŒ์˜ 41/812/263 ์€ ์ „๋ถ€ ๊ณผ์†Œ์˜€๋‹ค(๋‹ค์ค‘ ์ค„ 34 ยท list_proto 3 ยท ์งง์€ ์ด๋ฆ„ ์ถฉ๋Œ). โ˜…์ œ์•ˆ์˜ ใ€Œ72ใ€๋Š” ์—ฌ์ „ํžˆ ์žฌํ˜„ ์•ˆ ๋จ. โ˜…์‹ค์„ ์ˆ˜ ์žˆ๋Š” ์ง‘ํ•ฉ = ๋“ฑ์žฌ๋ถ„ ยท โ˜…์ดˆํŒ์˜ ใ€Œ๋ฏธ๋“ฑ์žฌ 5๊ฑดใ€์€ ํ‹€๋ ธ๋‹ค โ€” ์‹ค์ œ ๋ฏธ๋“ฑ์žฌ ยซ0ยป(name: 268 = ๋“ฑ์žฌ 268). โ˜…์–‘๋ฐฉํ–ฅ: ํ˜„ ์ƒํƒœ rc=0 ยท โ˜…BootstrapMethodError ๋“ฑ์žฌ ์ œ๊ฑฐ โ†’ rc=1(์‹ค์ œ ํŒจ๋‹‰ ์‚ฌ๋ก€ ์žฌํ˜„) ยท ํ”„๋กœํ†  ์ด๋ฆ„ ์˜คํƒ€ โ†’ rc=1 ยท โ˜…ํ•ด์„ ๋ถˆ๊ฐ€ ๋“ฑ์žฌ โ†’ rc=2(๋ชป ์Ÿ€๋‹ค ยท fail-closed) ยท CI step ์ œ๊ฑฐ โ†’ dod_parity rc=1. โ˜…๋ชป ๋ณด๋Š” ๊ฒƒ: ๋Ÿฐํƒ€์ž„ ์กฐ๋ฆฝ ์ด๋ฆ„ ์•ˆ ๋ณด์ž„(๋ฐ”๋‹ฅ์ด์ง€ ์ฆ๋ช… ์•„๋‹˜) ยท exception( ๋งŒ ยท ์ดˆ๊ธฐํ™” ์‹คํŒจ ํ†ต๊ณผ. โ˜…์žƒ๋Š” ๊ฒƒ: DoD 6โ†’7(~1์ดˆ ยท ์ดˆํŒ 32.7์ดˆ๋Š” target/ ๊ฐ€์ง€์น˜๊ธฐ๋กœ ํ•ด์†Œ) ยท โ˜….unwrap() ๋ฌด์ ‘์ด‰(์ „ํ™˜์€ ๋ฒ”์œ„ ๋ฐ–). โ˜…--all rc=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..8c7b473f 83๋จธ์ง€): ์ดˆํŒ 8๊ฑด/19์ •์˜ โ†’ ํ™•์žฅ๋ณธ 10๊ฑด/26์ •์˜. โ˜…๋Š˜์–ด๋‚œ ๊ฒƒ์€ 7์ •์˜(514d5b08 6 + 37ea5a13 1)์ด๊ณ  โ˜…์ง„์งœ 4 ยท ์˜คํƒ 3. โ˜…์‹œ๊ฐ„์€ ยซ์œ ์˜ํ•œ ์ฆ๊ฐ€ ์—†์Œยป์ด๋‹ค(ํŒ๋ณธ ์ฐจ โ‰ˆ0.8s/๋จธ์ง€ โ†” ๊ฐ™์€ ํŒ๋ณธ ์žฌ์‹คํ–‰ ํŽธ์ฐจ 2.6๋ฐฐ ยท ์ˆ˜ ์ถœ์ฒ˜ = ๊ฒŒ์ดํŠธโ‘ก ๊ฒ€์ˆ˜ ์‹ค์ธก ยท โ˜…์žฌ์ธก ์•ˆ ํ•จ). โ˜…ใ€Œ๋А๋ฆฌ์ง€ ์•Š์•˜๋‹คใ€๋Š” ํ‹€๋ ธ๋‹ค โ€” wide ๋Š” narrow ์˜ ์ƒ์œ„์ง‘ํ•ฉ์ด๋ผ ๋” ์‹ธ์งˆ ์ˆ˜ ์—†๋‹ค. โ˜…์žƒ๋Š” ๊ฒƒ: ๋ณธ๋ฌธ๋งŒ ๋นˆ ๊ฒฝ์šฐยท๋ฆฌ๋„ค์ž„์„ ๋ชป ๊ฐ€๋ฅธ๋‹ค ยท trailer ๋Š” ์šฐํšŒ๋กœ์ด๊ณ  ์ด๋ฆ„์ด ๊ธ€์ž ๊ทธ๋Œ€๋กœ ๋Œ€์กฐ๋œ๋‹ค ยท โ˜…โ˜…์ƒˆ red ๊ณ„๊ธ‰ โ€” main ์—๋„ ์žˆ๋Š” ์ •์˜๋ฅผ ์ง€์šด ๋ธŒ๋žœ์น˜๋Š” ๋‹ค์Œ base ๋‹น๊น€์—์„œ red ๊ฐ€ ๋œ๋‹ค(์‹ค๋ก€ 37ea5a13 ยท 7 ์ค‘ 3). โ˜…--all 583/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์ธต์„ ๊ฑด๋„ˆ target 5ํŒŒ์ผ/4ํฌ๋ ˆ์ดํŠธ(classfileยทjvm-bytecodeยทRustJavaยทtest-utils โ€” โ˜…์ธต 3 โ†” ํฌ๋ ˆ์ดํŠธ 4: ๊ฒฝ๊ณ„ ์ธต์ด ๋‘ ํฌ๋ ˆ์ดํŠธ์— ๊ฑธ์นœ๋‹ค) ยท InvalidFormat ์„ ๋„“ํžˆ๋ฉด ์ƒ์„ฑ 17 + ๋งค์น˜ 11 ์ด๋ผ ์ƒˆ variant ๋ฅผ ๊ณ ๋ฅด๊ณ  ๋‘ ๊ฐˆ๋ž˜์˜ ๋Œ€๊ฐ€๋ฅผ ์ ์—ˆ๋‹ค). โ˜…์„ค๊ณ„ ์ œ์•ฝ ๊ธฐ๋ก โ€” ClassFileError ๋Š” Copy(ํŒŒ์ผ 4 ยท ํฌ๋ ˆ์ดํŠธ 2 ์˜์กด) ยท ์ •์ ์‚ฌ์œ +u16+u8 ๋กœ ๊นจ์ง€ ์•Š๊ณ  ๋œ๋‹ค. โ˜…์žƒ๋Š” ๊ฒƒ: main ์€ #67 ์ฐฉ์ง€๊นŒ์ง€ ๋ฐ‹๋ฐ‹ํ•œ ์ฑ„(๊ทœ์น™ ์ด๋ฆ„์กฐ์ฐจ ์—†๋‹ค) ยท ์ด ํšŒ์ฐจ๊ฐ€ ์ „๋‹ฌํ•œ ๊ฒƒ์€ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ์ˆœ์„œ๋‹ค. โ˜…--all 583/0/1(๋ถˆ๋ณ€ ยท base 8c7b473f).
  • [rustjava-adopt-test-data-version-freeze-uniform-target-p0] โ˜…โ˜…๋ฃจํŠธ fixture ๋ฅผ ํ•œ target ์œผ๋กœ ๋ชจ์„ ๊ฒƒ์ธ๊ฐ€ โ€” ยซ๋ชจ์œผ์ง€ ์•Š๋Š”๋‹คยป. ์ฑ„ํƒ ์ œ์•ˆ 2026-09-17-test-data-version-freeze#p0(worklog json ๊ธฐ๋ก). โ˜…์ฝ”๋“œ 0ํ–‰ ยท ์žฌ์ปดํŒŒ์ผ 0 ยท .class 0 ๋ณ€๊ฒฝ โ€” ์‚ฐ์ถœ๋ฌผ = docs/test-data-target-policy.md. โ˜…๋ถ„ํฌ 114๊ฑด ยท 52ร—40 ยท 65ร—62 ยท 66ร—8 ยท 68ร—1 ยท 70ร—3(fixture ์ž์‹ ์—์„œ ์ฝ์Œ). โ˜…โ˜…์–‘๋ฐฉํ–ฅ: โ’œ๋ฒ„์ „์ด ๋‹ต โ€” StringBuilder 3๊ฑด์„ 21 ๋กœ ์žฌ์ปดํŒŒ์ผ โ†’ โ˜…indy ์ƒ๊ธฐ๊ณ  StringBuilder ์‚ฌ๋ผ์ง(โ˜…StringConcat ์ด ๋ฃจํŠธ์˜ ์œ ์ผํ•œ indy) ยท ThreadInterruption access$ร—10 โ†’ 0 + NestMembers(JEP 181) โ’์•„๋ฌด ๋ฒ„์ „์ด๋‚˜ โ€” 20๊ฑด ์ค‘ โ˜…16๊ฑด ๋ช…๋ น ์‹œํ€€์Šค ์™„์ „ ๋™์ผ. โ˜…๊ทธ ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ๋‹ค๋ฅธ ๋ฐ ์—†๋‹ค โ€” ์ƒ์„ฑ๊ธฐ ์‚ฐ์ถœ 64๊ฑด์—์„œ StringBuilder 0 ยท access$ 0. โ˜…์ด์œ : ์ œ์•ˆ์˜ ์ด๋“(ใ€Œ์ˆซ์ž ํ•˜๋‚˜๋กœ ์˜ˆ์ธกใ€)์ด ๋’ค์ง‘ํžŒ๋‹ค โ€” 52 ๋Š” ใ€Œ์ „-indyยท์ „-nestmateใ€๋ผ๋Š” ๋œป์„ ์‹ค์ œ๋กœ ๊ฐ–๊ณ , ํŽด๋ฉด ๊ทธ ๊ตฌ๋ถ„์ด ์‚ฌ๋ผ์ง€๋ฉฐ ์œ ์ผํ•œ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ์ง€์›Œ์ง„๋‹ค. โ˜…์žƒ๋Š” ๊ฒƒ: ๋น„๊ท ์ผ ์ž”์กด(์‹ ๊ทœ target ๊ทœ์น™ ๋ฏธ์ˆ˜๋ฆฝ) ยท 16๊ฑด์€ ๊ทธ๋Œ€๋กœ ยท โ˜…๋ณธ ๊ฒƒ์€ 40 ์ค‘ 20 ยท NativeMethod ์ฐจ์ด๋Š” ๋ฏธ๊ทœ๋ช…. โ˜…--all 583/0/1(๋ถˆ๋ณ€ ยท base 8c7b473f โ€” ์•ž ํšŒ์ฐจ์˜ 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๊ฑด = ์ œ์•ˆ์ด ๋ฏธํ•ด๊ฒฐ๋กœ ์ ์€ ๋ณ„ ์ถ• ยท ๋„“ํžˆ์ง€ ์•Š์•˜๋‹ค) ยท ํŒ์ •์ด ํ•œ ์†์„ฑ ์œ ๋ฌด์— ๊ฑธ๋ฆฐ๋‹ค. โ˜…--all 579/0/1(๋ถˆ๋ณ€) ยท check-dod-ci-parity OK.
  • [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_class 8ํ•ญ || โ†’ ๊ทœ์น™๋งˆ๋‹ค if. โ˜…โ˜…์‚ฌ์œ ๋ฅผ ๊ฟฐ์ž ยซํ‰ํ‰ํ•œ ์˜ค๋ฅ˜๊ฐ€ ๊ฐ€๋ฆฌ๋˜ ๊ฒƒ ๋‘˜ยป์ด ๋‚˜์™”๋‹ค**: โ‘ดํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋А ์ธต์ด ๊ฑฐ๋ถ€ํ•˜๋Š”์ง€๋ฅผ ํ‹€๋ฆฌ๊ฒŒ ๋ฏฟ์—ˆ๋‹ค(๊ฒ€์ฆ ์•„๋‹Œ ํŒŒ์„œ) โ‡’ โ˜…๋‹จ์–ธ์„ ์‹ค์ธก์— ๋งž์ท„๋‹ค โ‘ต์ˆ ์–ด ์ด๋ฆ„์ด ๋‚ก์•„ ์žˆ์—ˆ๋‹ค(ใ€Œin_the_poolใ€์ธ๋ฐ ์ ์žฌ ๊ฐ€๋Šฅ์„ฑ๊นŒ์ง€ ๋ณธ๋‹ค) โ‡’ ์‚ฌ์œ ๋Š” ๊ทœ์น™๋Œ€๋กœ, โ˜…์ด๋ฆ„์€ ์•ˆ ๋ฐ”๊ฟจ๋‹ค(๋ฆฌํŒฉํ„ฐ ๊ธˆ์ง€). โ˜…์–‘๋ฐฉํ–ฅ โ€” ์„ธ ์ธต ์ „๋ถ€ ๊ฐœ์•…: M1 ๊ฒฝ๊ณ„ ยท M2 From ์ด ์‚ฌ์œ  ๋ฒ„๋ฆผ ยท M3 ๋‘ ์‚ฌ์œ ๋ฅผ ํ•œ ๋ฌธ์ž์—ด๋กœ ์ ‘์Œ(โ˜…์žก๋Š” ๊ฒƒ์€ contains :450(dedup ์ œ๊ฑฐ๋กœ 452โ†’450) โ€” ์ดˆํŒ์ด ๊ท€์†ํ•œ dedup ๋‹จ์–ธ์€ ์ƒ์ˆ˜ ๋Œ€ ์ƒ์ˆ˜๋ผ ๊ณตํ—ˆํ–ˆ๊ณ  ๊ฑท์–ด๋ƒˆ๋‹ค) ยท ๋ณต์› 17/0. โ˜…โ˜…๋Œ€๊ฐ€: โ˜…๋งˆ์ง€๋ง‰ ํ™‰์ด ๋‘ ๋ฒˆ ์“ฐ์—ฌ ์žˆ๊ณ  test-utils ์‚ฌ๋ณธ์€ ยซ๋ฌด๊ฒ€์ฆยป(๊ฐœ์•…ํ•ด๋„ 579/0 ยท ํ•ฉ์น˜์ง€ ์•Š๊ณ  ๋ณด๊ณ ) ยท ์‚ฌ์œ ๊ฐ€ ๋ฌธ์ž์—ด์ด๋ผ ๊ฐ™์€ ๋ฌธ๊ตฌ ์ค‘๋ณต์„ ๋ง‰๋Š” ๊ฒƒ์ด ์—†๋‹ค ยท โ˜…PR #66 ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜(์ถฉ๋Œ์€ ๊ธฐ๊ณ„์ ). โ˜…--all 578 โ†’ 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_pins 3/0 ยท --all 581/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 ยท --all 583/0/1 ยท DoD 7๋ช…๋ น rc=0. โ˜…๊ทธ ํšŒ์ฐจ๋Š” ใ€Œ์ฐฉ์ง€ ๊ธˆ์ง€ โ€” ๊ฒŒ์ดํŠธโ‘ก ์žฌ๊ฒ€์ด ๋จผ์ €ใ€๋กœ ๋๋‚ฌ๊ณ , โ˜…๊ทธ ์žฌ๊ฒ€์ด approve ๋กœ ๋‹ซํ˜”๋‹ค(์•„๋ž˜). โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #61 ยท --merge(๋“ฑ์žฌ repo contracts/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-presence rc=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(๋“ฑ์žฌ repo contracts/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-presence rc=0 CI_GREEN ยท ์ž์‹ PR 0๊ฑด ยท ๋ฐฐํฌ 0(๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ ์—†์Œ) ยท ์ฃผ๊ธฐ ์ž๋™ ์ปค๋ฐ‹ 0๊ฑด ยท ๋ผ์ด๋ธŒ ์‹คํ–‰ ์ฃผ์ฒด ์—†์Œ. โ˜…โ˜…๊ณ ์ง€(๋น„์ฐจ๋‹จ ยท ์ด ํšŒ์ฐจ๊ฐ€ ๊ณ ์น˜์ง€ ์•Š๋Š”๋‹ค ยท base ๋ฅผ ยซ๋‘ ๋ฒˆยป ๋‹น๊ธด ๋’ค ์žฌ์ธก): ํ˜•์ œ ํšŒ์ฐจ๊ฐ€ ๋ณ‘๋ ฌ๋กœ ๋“ค์—ฌ์˜จ ํ”ฝ์Šค์ฒ˜ โ˜…10์žฅ์ด ๊ฐ์‚ฌ ๋ฒ”์œ„ ๋ฐ–์ด๋‹ค โ€” test-data/indy/RecipeWants{AConstant,FewerArguments,MoreArguments}.class 3์žฅ(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 json adoptedProposals ๊ธฐ๋ก). โ˜…์ œํ’ˆ ์ฝ”๋“œ 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) ยท --all 576/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 ๋ฐ– โ€” ์‹ ๊ณ ). โ˜…--all 579/0/1 ยท ๋ฒ„์ „ ํ‘œ +7ํ–‰ ยท DoD 7๋ช…๋ น rc=0. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #66 ยท --merge(๋“ฑ์žฌ repo contracts/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-presence rc=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(๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22 ยท ํ‹ฐ์ผ“ merge_strategy: merge ์„ ์–ธ๋ถ„ โ‡’ โ˜…๊ณ„๋ณด ๋ณด์กด). ๊ฒŒ์ดํŠธโ‘ก approve ยท ํ•€ c0413f81 โ†” ์ฐฉ์ˆ˜ ์‹œ PR head ๋™์ผ(๋ถˆ์ด๋™) ยท โ˜…**MERGEABLE/CLEAN ยท base ๋’ค์ฒ˜์ง ยซ0ยป** โ‡’ ์ถฉ๋Œ ํ•ด์†Œยทbase ๋‹น๊น€ ๋‘˜ ๋‹ค ๋ถˆ์š”. โ˜…ํ•€์—์„œ ci-presence rc=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 json adoptedProposals ๊ธฐ๋ก) ยท โ˜…์ œํ’ˆ Rust 0์ค„. โ˜…์กฐ์‚ฌ ํšŒ์ฐจ๊ฐ€ ใ€Œ๋ชป ์Ÿ€๋‹คใ€๋กœ ๋น„์›Œ ๋‘” ์นธ์„ ์ฑ„์› ๋‹ค โ€” ์ข…์ „ ์ถ•์€ stdlib(ํ˜ธํ™˜์„ฑ์šฉ ์ปดํŒŒ์ผ)์ด๋ผ ใ€Œ์ด ์ฝ”ํผ์Šค์—์„œ 0ใ€๊ณผ ใ€Œ์ด ๊ธฐ๋Šฅ๋“ค์—์„œ 0ใ€์ด ๋‹ฌ๋ž๋‹ค. โ˜…kotlinc 2.4.20 โ†’ 0 ยท scalac 3.9.0 โ†’ 0. โ˜…โ˜…ํ’€ ์ˆ˜์น˜๊ฐ€ ๊ทธ 0 ์„ ์ฝ์„ ๊ฐ’์œผ๋กœ ๋งŒ๋“ ๋‹ค(Kotlin MH 7ยทMT 6 ยท Scala 11ยท6 = indy ๊ฐ€ ์‹ค์ œ๋กœ ๋Œ์•˜๋‹ค) โ‡’ ใ€Œ์•ˆ ์ผ๋‹คใ€๊ฐ€ ์•„๋‹ˆ๋ผ ใ€Œ์ผ๋Š”๋ฐ ldc ์ž๋ฆฌ์— ์•ˆ ์˜จ๋‹คใ€. โ˜…ํƒœ๊ทธ 17 ์€ ํ’€์—๋„ 0 โ‡’ โ˜…์ด ํ˜•์ƒ๋“ค์—์„œ๋Š” ๋‘ ์ปดํŒŒ์ผ๋Ÿฌ ๋‹ค condy ๋ฅผ ์•ˆ ๋‚ธ๋‹ค(ํ•œ์ •์€ ๋‚˜๋จธ์ง€ ์ˆ˜์™€ ๊ฐ™๋‹ค โ€” ์ปดํŒŒ์ผ๋Ÿฌ๋‹น ํ”„๋กœ๊ทธ๋žจ 1๊ฐœ). โ˜…์–‘๋ฐฉํ–ฅ: ์–‘์„ฑ ๋Œ€์กฐ๊ตฐ test-data/ldc โ†’ {MH 1, MT 2, Dynamic 7} โ‡’ ใ€Œ์Šค์บ๋„ˆ๊ฐ€ ๋ชป ๋ณธ๋‹คใ€ ๋ฐฐ์ œ ยท ์˜ค์ฐจ๋ง‰๋Œ€ 0.00%. โ˜…์ œ์•ˆ์˜ ๊ฐ’ ์ „์ œ๊ฐ€ ๋ถ€๋ถ„์ ์œผ๋กœ ๊ฑฐ์ง“์ด์—ˆ๋‹ค โ€” openjdk 26 ์€ 2026-07-22 ๋ถ€ํ„ฐ ์„ค์น˜๋ผ ์žˆ์—ˆ๋‹ค(INSTALL_RECEIPT time = 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.py 4๊ตฌ์—ญ ์ถฉ๋Œใ€์€ -p1-fix ๊ฐ€ 14:10 0f06b93f ๋กœ ํ•ฉ์ง‘ํ•ฉ ํ•ด์†Œํ–ˆ๊ณ  ๊ฒŒ์ดํŠธโ‘ก๊ฐ€ 15:43 ๊ทธ head ๋ฅผ approve ํ–ˆ๋‹ค. ๋ฐœ๊ถŒ ๊ทผ๊ฑฐ(12:12 blocked ํšŒ์‹ )๊ฐ€ ๊ทธ ์‚ฌ์ด ๋‚ก์€ ๊ฒƒ์ด๋‹ค. โ˜…์žฌ๋ฐœ ๋ถˆ๊ฐ€๋„ ํ™•์ธ โ€” ๋’ค์ง„ 9์ปค๋ฐ‹ ์ค‘ ๊ทธ ํŒŒ์ผ์„ ๋งŒ์ง„ ๊ฒƒ 0๊ฑด. โ˜…ํ•ฉ์ง‘ํ•ฉ์ด ์ง„์งœ์ธ์ง€ ๋‹ค์‹œ ์Ÿ€๋‹ค: ์ƒ์„ฑ๊ธฐ ์žฌ์‹คํ–‰์ด 10ํ”ฝ์Šค์ฒ˜ ๋ฐ”์ดํŠธ ๋ถˆ๋ณ€(์–‘์ชฝ ๊ฐ€์กฑ์„ ํ•œ ์ƒ์„ฑ๊ธฐ๊ฐ€ ๋‚ธ๋‹ค) ยท โ˜…์–‘๋ฐฉํ–ฅ ๊ฐœ์•… โ€” ours ์‚ฐ์ถœ๋ฌผ๋งŒ ์น˜์šฐ๋ฉด ours ๋งŒ red ยท theirs ๋งŒ ์น˜์šฐ๋ฉด theirs 2๊ฑด๋งŒ red โ‡’ ใ€Œ์„ ํƒใ€์ด ์•„๋‹ˆ๋‹ค. โ˜…์‹ค์ œ๋กœ ๋‚จ์•„ ์žˆ๋˜ ๊ฒƒ์€ ๋ถ€์ฑ„๋‹ค: ๋‹น๊ธฐ๋ฉด #57 ์˜ ํ‘œ๊ฐ€ ๋“ค์–ด์™€ ์ด PR ํ”ฝ์Šค์ฒ˜ 3๊ฐœ๊ฐ€ ๋ฏธ๋“ฑ์žฌ โ‡’ ์ƒ์„ฑ๊ธฐ๋กœ 3ํ–‰(โ˜…์‚ญ์ œ 0) ๋“ฑ์žฌ. โ˜…์›์žฅ 2ํŒŒ์ผ ํ•ฉ์ง‘ํ•ฉยท์‹œ๊ฐ„์ˆœ ยท --all 578/0/1 ยท DoD 7๋ช…๋ น rc=0. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #60 ยท --merge(๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22 ยท ํ‹ฐ์ผ“ merge_strategy: merge ์„ ์–ธ๋ถ„ โ‡’ โ˜…๊ณ„๋ณด ๋ณด์กด). ๊ฒŒ์ดํŠธโ‘ก approve(๋ฆฌ๋‹ˆ์ง€ ์ตœ์‹  ํšŒ์‹  โ€ฆ-p1-fix2.review.md) ยท ํ•€ 632c6b06 โ†” ์ฐฉ์ˆ˜ ์‹œ PR head ๋™์ผ(๋ถˆ์ด๋™) ยท โ˜…**MERGEABLE/CLEAN ยท base ๋’ค์ฒ˜์ง ยซ0ยป** โ‡’ ์ถฉ๋Œ ํ•ด์†Œยทbase ๋‹น๊น€ ๋‘˜ ๋‹ค ๋ถˆ์š”(์•ž ํšŒ์ฐจ๊ฐ€ ์ด๋ฏธ ๋‹น๊ฒผ๋‹ค). โ˜…ํ•€์—์„œ ci-presence rc=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 json adoptedProposals ๊ธฐ๋ก). โ˜…์ œํ’ˆ ๋™์ž‘ ๋ณ€๊ฒฝ ์žˆ์Œ. โ˜…์ œ์•ˆ์ด ์ ์€ ์œ„ํ—˜์„ ๋จผ์ € ์Ÿ€๋‹ค(ใ€Œํ‹€๋ฆฌ๋ฉด ๋žŒ๋‹ค๊ฐ€ ์ „๋ถ€ corruptใ€): ํƒœ๊ทธ ๊ฒ€์‚ฌ๋Š” payload ๋ฅผ ์ฝ์ง€ ์•Š์œผ๋ฏ€๋กœ attribute.rs ์„ค๊ณ„์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š๊ณ , โ˜…์ปค๋ฐ‹๋œ ํด๋ž˜์Šค ํŒŒ์‹ฑ์ด ์ „/ํ›„ ยซ144/12 ๋™์ผยป(์ƒˆ๋กœ ๊ฑฐ๋ถ€ 0). โ˜…OpenJDK 26 ์€ ๊ฐ™์€ ํŒŒ์ผ์„ ClassFormatError: argument_index 4 has bad constant type ๋กœ ๊ฑฐ๋ถ€ํ•œ๋‹ค. โ˜…์•ˆ ํ•˜๋ฉด: ๋ง์ปค์—์„œ UnsupportedOperationException โ€” ใ€ŒํŒŒ์†ใ€์„ ใ€Œ๋ฏธ์ง€์›ใ€์ด๋ผ ๋งํ•˜๊ฒŒ ๋œ๋‹ค. โ˜…๊ฐœ์•… 2์ข… red(์กด์žฌ๋งŒ ๋˜๋Œ๋ฆฌ๊ธฐ ยท โ˜…์ง‘ํ•ฉ์— Utf8 ํ•œ ์นธ ์ถ”๊ฐ€) ยท --all 575/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 ยท --all 578/0/1 ยท ํ”ฝ์Šค์ฒ˜ ์žฌ์ƒ์„ฑ ๋ฉฑ๋“ฑ(ํ˜•์ œ #59 ์ƒ์„ฑ๊ธฐ์™€ ํ•ฉ์นœ ๋’ค์—๋„ ๋ฐ”์ดํŠธ ๋ถˆ๋ณ€).
  • [rustjava-adopt-link-stringconcatfactory-p2] โ˜…โ˜…**LambdaMetafactory.metafactory ๋งํฌ โ€” ๋žŒ๋‹คยท๋ฉ”์„œ๋“œ ์ฐธ์กฐ๊ฐ€ ยซ๋ˆ๋‹คยป.** ์ฑ„ํƒ ์ œ์•ˆ 2026-09-16-link-stringconcatfactory#p2(worklog json adoptedProposals ๊ธฐ๋ก). โ˜…์ œํ’ˆ ๋™์ž‘ ๋ณ€๊ฒฝ ์žˆ์Œ (๋žŒ๋‹ค ํฌํ•จ ํด๋ž˜์Šค: ์ ์žฌ ๊ฑฐ๋ถ€ โ†’ ์‹คํ–‰). โ˜…jvm/ ๋ฌด์ ‘์ด‰ ยท java.lang.invoke 0์ค„. โ˜…โ˜…์ œ์•ˆ์˜ ใ€Œ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 --all 573 โ†’ 576 / 0 failed / 1 ignored ยท LambdaKinds 10์ค„์ด OpenJDK 26.0.1 ๊ณผ ์ผ์น˜ ยท DoD 7๋ช…๋ น rc=0 ยท ํ”ฝ์Šค์ฒ˜ ์žฌ์ƒ์„ฑ ๋ฉฑ๋“ฑ.
  • [rustjava-adopt-link-stringconcatfactory-p1] โ˜…โ˜…๋ ˆ์‹œํ”ผ๊ฐ€ ์ฝœ์‚ฌ์ดํŠธ์™€ ์–ด๊ธ‹๋‚  ๋•Œ โ€” ์ œ์•ˆ์˜ ใ€Œ์‹ธ๊ณ  ์˜ณ๋‹คใ€๊ฐ€ ๋‘ ๊ฒน์œผ๋กœ ๊ฑฐ์ง“์ด์—ˆ๋‹ค. ์ฑ„ํƒ ์ œ์•ˆ 2026-09-16-link-stringconcatfactory#p1(worklog json adoptedProposals ๊ธฐ๋ก). โ˜…์ œํ’ˆ ๋™์ž‘ ๋ณ€๊ฒฝ ์žˆ์Œ. โ˜…์ œ์•ˆ์˜ ์ฒ˜๋ฐฉ์€ ๊ธฐ๊ฐ(classfile/validation.rs/ClassFormatError) โ€” โ˜…OpenJDK 26.0.1 ์— ํ”ฝ์Šค์ฒ˜ 3์ข…์„ ์ง์ ‘ ๋Œ๋ฆฐ ์‹ค์ธก์ด ๊ทผ๊ฑฐ๋‹ค: ์ „๊ฑด BootstrapMethodError(์›์ธ StringConcatException) ยท ํ”„๋ ˆ์ž„ linkCallSite = ๋งํฌ ์‹œ์  ยท ClassFormatError ์•„๋‹˜. โ˜…โ˜…์‹ค์ œ๋กœ ๊นจ์ ธ ์žˆ๋˜ ๋‘˜: โ‘ดjava/lang/BootstrapMethodError ๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์—†์–ด์„œ ๊ทธ ๊ฐ€์ง€๊ฐ€ ๋˜์ง€๋Š” ๋Œ€์‹  jvm.rs:948 unwrap ์—์„œ ํŒจ๋‹‰ํ–ˆ๋‹ค(ํ”ฝ์Šค์ฒ˜ 0 ์ด๋ผ ์•„๋ฌด๋„ ๋ฐŸ์€ ์ ์ด ์—†๋‹ค) โ‘ต๊ฒ€์‚ฌ๊ฐ€ ๋ถ€์กฑ๋ถ„๋งŒ ๋ด์„œ ๋ ˆ์‹œํ”ผ๊ฐ€ ์งง์œผ๋ฉด ๋‚จ๋Š” ์ธ์ž๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ํ‹€๋ฆฐ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค(rc=0). โ‡’ ์ƒ๋“ฑ ๊ฒ€์‚ฌ ยท ๋ณ€ํ™˜ ์ „ 1ํšŒ ยท ์ธ์ž/์ƒ์ˆ˜ ๋‘ ์ถ•. โ˜…๋ณ€ํ™˜ ์ „์ธ ์ด์œ : String.valueOf ๊ฐ€ ์‚ฌ์šฉ์ž toString() ์„ ๋Œ๋ฆฌ๋ฏ€๋กœ, ๋จผ์ € ๋ณ€ํ™˜ํ•˜๋ฉด ๊ทธ ์˜ˆ์™ธ๊ฐ€ ์ง„๋‹จ์„ ๋ฎ๋Š”๋‹ค. โ˜…๊ฐœ์•… 4์ข… ์ „๊ฑด red(M1 ๊ฒ€์‚ฌ ์ œ๊ฑฐ ยท M2 !=โ†’> ยท M3 ์ƒ์ˆ˜ ์ถ• ์ œ๊ฑฐ ยท โ˜…M4 ํด๋ž˜์Šค ๋“ฑ๋ก ์ œ๊ฑฐ โ†’ ํŒจ๋‹‰ ์žฌํ˜„) ยท cargo test --all 573 โ†’ 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-presence rc=0 CI_GREEN ยท ์ž์‹ PR 0๊ฑด ยท ๋ฐฐํฌ 0(์ด ์ €์žฅ์†Œ์— ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ ์—†์Œ) ยท ์ฃผ๊ธฐ ์ž๋™ ์ปค๋ฐ‹ 0๊ฑด. โ˜…๋™๋ด‰์€ ์ด ๊ธฐ๋ก ํ•œ ์ค„๋ฟ โ€” ์›์žฅ(worklog ์ŒยทSTATEยทREPORT)์€ ๊ตฌํ˜„ ํšŒ์ฐจ๊ฐ€ ์ด๋ฏธ ์‹ค์—ˆ๋‹ค. โ˜…โ˜…์ฐฉ์ง€ ์ˆœ์„œ ๊ณ ์ง€ โ€” ์ด ํšŒ์ฐจ๊ฐ€ ยซ์ƒˆ .class 3๊ฐœยป๋ฅผ ๋“ค์—ฌ์˜จ๋‹ค(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 json adoptedProposals ๊ธฐ๋ก). โ˜…์ œํ’ˆ ๋™์ž‘ ๋ณ€๊ฒฝ: makeConcat ์ฝœ์‚ฌ์ดํŠธ๊ฐ€ ๊ฑฐ๋ถ€ ๋Œ€์‹  ์‹คํ–‰๋œ๋‹ค. โ˜…์‹คํ–‰๊ธฐ(concat_with_constants)๋Š” ํ•œ ์ค„๋„ ์•ˆ ๋ฐ”๋€Œ์—ˆ๋‹ค. โ˜…โ˜…โ“’ ์ œ์•ˆ์˜ ์ „์ œ๊ฐ€ ยซ๊ฑฐ์ง“ยป์ด๋‹ค(์‹ค์ธก javac 26.0.1 ยท ๊ฐ™์€ ์†Œ์Šค a + b): --release 9 ยท 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 --all 573 โ†’ 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-presence rc=0 CI_GREEN ยท ์ž์‹ PR 0๊ฑด ยท ๋ฐฐํฌ 0(์ด ์ €์žฅ์†Œ์— ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ ์—†์Œ) ยท ์ฃผ๊ธฐ ์ž๋™ ์ปค๋ฐ‹ 0๊ฑด. โ˜…๋™๋ด‰์€ ์ด ๊ธฐ๋ก ํ•œ ์ค„๋ฟ โ€” ์›์žฅ(worklog ์ŒยทSTATEยทREPORT)์€ ๊ตฌํ˜„ ํšŒ์ฐจ๊ฐ€ ์ด๋ฏธ ์‹ค์—ˆ๋‹ค. โ˜…โ˜…์ฐฉ์ง€ ์ˆœ์„œ ๊ณ ์ง€ โ€” ์ด ํšŒ์ฐจ๊ฐ€ ยซ์ƒˆ .class 3๊ฐœยป๋ฅผ ๋“ค์—ฌ์˜จ๋‹ค(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_RED rc=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 ๊ตฌ๋ถ„์ž ์ •๊ทœํ™” ยท Python as_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.py 1ํšŒ ยท ์ถ”๊ฐ€๋งŒ ยท ์‚ญ์ œ 0)์„ ๋„ฃ์–ด ํ’€์—ˆ๋‹ค. โ‡’ โ˜…์ด PR ์ด ์„ธ์šด ๊ทœ์œจ์ด ์ด PR ์— ์ฒ˜์Œ ์ ์šฉ๋œ ์‚ฌ๋ก€์ด๊ณ , ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์™„ํ™”ํ•˜์ง€ ์•Š๊ณ  ํ‘œ๋ฅผ ๊ณ ์ณ ํ†ต๊ณผํ–ˆ๋‹ค. โ˜…ํ•€์—์„œ ci-presence rc=0 CI_GREEN ยท ์ด ํ˜•์ƒ์—์„œ cargo test --test test_fixture_pins 3/3 green(์ด PR ์ด ๋งŒ๋“  ๊ทธ ์ถ•). โ˜…๋™๋ด‰์€ ์ด ๊ธฐ๋ก ํ•œ ์ค„๋ฟ์ด๋‹ค โ€” ์›์žฅ(worklog ์ŒยทSTATEยทREPORT)์€ ๊ตฌํ˜„ ํšŒ์ฐจ๊ฐ€ ์ด๋ฏธ ์‹ค์—ˆ๋‹ค. โ˜…๋ฐฐํฌ 0(์ด ์ €์žฅ์†Œ์— ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ ์—†์Œ) ยท ์ž์‹ PR 0๊ฑด ยท ์ฃผ๊ธฐ ์ž๋™ ์ปค๋ฐ‹ 0๊ฑด ยท ๋‚ก์Œ ํŒ๋ณ„ ๋„๊ตฌ 0๊ฑด. โ˜…โ˜…์ฐฉ์ง€ ์ˆœ์„œ ๊ณ ์ง€ โ€” ์ด PR ์ด ์„ธ์šด ๊ทœ์œจ(ใ€Œ.class ๋ฅผ ๋”ํ•˜๋ฉด test-data/class-file-versions.txt ์— ๊ฐ™์€ ์ปค๋ฐ‹์œผ๋กœ ํ–‰์„ ๋„ฃ๋Š”๋‹ค ยท ๋ฏธ๋“ฑ์žฌ ํ”ฝ์Šค์ฒ˜๋Š” ํ•€์ด ์‹คํŒจ์‹œํ‚จ๋‹คใ€)์€ โ˜…์—ด๋ฆฐ PR #60(์‹ ๊ทœ .class 3๊ฐœ)ยท#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 json adoptedProposals ๊ธฐ๋ก). โ˜…โ˜…์ œ์•ˆ์˜ ยซ๋น„์šฉ ์‚ฐ์ •ยป์„ ๋ฐ”๊ฟจ๋‹ค โ€” ๊ธฐ๊ฐ์ด ์•„๋‹ˆ๋ผ ยซ์„ค๊ณ„ ๊ต์ฒดยป๋‹ค. ์ œ์•ˆ์€ ใ€Œ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: M1 Hello.class ๋ฒ„์ „ ๋ฐ”์ดํŠธ 65โ†’70(= ๋‹ค๋ฅธ JDK ์žฌ์ƒ์„ฑ๊ณผ ๊ฐ™์€ ํ˜•์ƒ) ยท M2 ๋ฏธ๊ธฐ๋ก .class ํˆฌ์ž… ยท M3 ํ‘œ์—๋งŒ ์žˆ๋Š” ํ–‰ โ‡’ ๋ณต์› green(test_fixture_pins 2 passed). โ˜…์‹คํŒจ ๋ฌธ๋ฉด์ด ํŒŒ์ผยท๋‘ ๋ฒ„์ „ยทํ•ด์†Œ ๋ช…๋ น์„ ํ•จ๊ป˜ ๋งํ•œ๋‹ค(Hello.class: recorded 65.0, found 70.0). โ˜…๊ธฐ๋ก๊ธฐ ๋ฉฑ๋“ฑ(์žฌ์‹คํ–‰ ์‹œ ํ‘œ ๋ฐ”์ดํŠธ ๋™์ผ) ยท cargo test --all 572 โ†’ 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 json adoptedProposals ๊ธฐ๋ก). โ˜…์ œํ’ˆ ์ฝ”๋“œ ๋ฌด์ ‘์ด‰. โ˜…โ˜…์ œ์•ˆ์˜ ๊ฒฐ๋ก  ยซ๋‘˜ยป์ด ์‹ค์ธก์œผ๋กœ ๋ฐ˜์ฆ๋๋‹ค โ€” ๊ทธ๋ž˜์„œ ์ œ์•ˆ์ด ยซ๋ถˆ๊ฐ€๋Šฅยปํ•˜๋‹ค๊ณ  ์ ์€ ์ชฝ์„ ๋งŒ๋“ค์—ˆ๋‹ค: โ‘ดใ€Œ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 --all 572 / 0 failed / 1 ignored(doc ์ฃผ์„๋งŒ ๋ฐ”๊ฟ” ๋ถˆ๋ณ€) ยท DoD 7์ค„ ์ „๊ฑด rc=0. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #58 ยท --merge(๋“ฑ์žฌ repo ยท merge_strategy: merge ์„ ์–ธ๋ถ„). ๊ฒŒ์ดํŠธโ‘ก approve ยท ํ•€ 38c02a2d ๋ถˆ์ด๋™(์ฐฉ์ˆ˜ ์‹ค์ธก 2026-09-17T00:27:39Z ยท ํ•€์—์„œ ci-presence rc=0 CI_GREEN). โ˜…์ถฉ๋Œ์€ ์›์žฅ 2ํŒŒ์ผ๋ฟ(REPORT.mdยทSTATE.md) โ€” ํ˜•์ œ #55 ์ฐฉ์ง€๋ถ„๊ณผ ๊ฒน์ณค๊ณ  ์ฝ”๋“œ ํŒŒ์ผ ์ถฉ๋Œ 0. ํ•ด์†Œ๋Š” ์ „๊ฑด ๋ณด์กดยทํ•ฉ์ง‘ํ•ฉยท์‹œ๊ฐ„์ˆœ: ์ด ํšŒ์ฐจ(38c02a2d 05:22)๊ฐ€ main ์ชฝ ์ตœ์‹  ํ•ญ๋ชฉ(30a31bda 04:04)๋ณด๋‹ค ๋’ค๋ผ ์œ„์— ์–น์—ˆ๋‹ค. โ˜…์ค„ ์†Œ์‹ค 0(์–‘๋ฐฉํ–ฅ) ยท ํ•ฉ์ง‘ํ•ฉ ๋ฐ– ์‹ ๊ทœ์ค„ 0 ยท โ˜…๊ณ„์•ฝ 12 ์ฐฉ์ง€ diff numstat ํ•ด์†Œ ์ „ํ›„ ๋™์ผ(6ํŒŒ์ผ ยท ํ•ด์†Œ๋ฉด ๋ฐ– ๋ณ€๊ฒฝ 0). โ˜…๋ฐฐํฌ 0 โ€” ์ด ์ €์žฅ์†Œ์— ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์—†๋‹ค(CI 2์ข… + ์Šค์ผ€์ค„ 2์ข… + PR ๋Œ“๊ธ€ 1์ข…) ยท ์ž์‹ PR 0๊ฑด ยท ์ฃผ๊ธฐ ์ž๋™ ์ปค๋ฐ‹ 0๊ฑด. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข 2ํšŒ์ฐจ โ€” ํ˜•์ œ #59 ๊ฐ€ ๊ทธ ์‚ฌ์ด ์ฐฉ์ง€(66bc49e8)ํ•ด base ๋ฅผ ๋‹ค์‹œ ๋‹น๊ฒผ๋‹ค. ์ถฉ๋Œ์€ ๋˜ ์›์žฅ 2ํŒŒ์ผ๋ฟ(์ฝ”๋“œ ์ถฉ๋Œ 0). โ˜…์ด๋ฒˆ์—” ์‹œ๊ฐ„์ˆœ์ด ยซ๋’ค์ง‘ํ˜”๋‹คยป โ€” main ์ชฝ ํ•ญ๋ชฉ(3b04712e 06:52)์ด ์ด ํšŒ์ฐจ(38c02a2d 05: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 json adoptedProposals ๊ธฐ๋ก). ๋‚ฑ๋ง์ด 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.md read-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 --all 572 / 0 failed / 1 ignored(์ฃผ์„๋งŒ ๋ฐ”๊ฟ” ๋ถˆ๋ณ€) ยท DoD 7์ค„ ์ „๊ฑด rc=0. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #56 ยท --merge(๋“ฑ์žฌ repo ยท merge_strategy: merge ์„ ์–ธ๋ถ„). ๊ฒŒ์ดํŠธโ‘ก approve ยท ํ•€ 53ca3409 ๋ถˆ์ด๋™(์ฐฉ์ˆ˜ ์‹ค์ธก 2026-09-17T00:42:56Z ยท ํ•€์—์„œ ci-presence rc=0 CI_GREEN). โ˜…์ถฉ๋Œ์€ ์›์žฅ 2ํŒŒ์ผ๋ฟ(REPORT.mdยทSTATE.md) โ€” ํ˜•์ œ #55 ์ฐฉ์ง€๋ถ„๊ณผ ๊ฒน์ณค๊ณ  ์ฝ”๋“œ ํŒŒ์ผ ์ถฉ๋Œ 0. โ˜…โ˜…**tests/test_class_format.rs ๋Š” ยซ์ž๋™ ๋ณ‘ํ•ฉยป๋๊ณ  ๊ทธ๊ฒƒ์„ ๋ฏฟ์ง€ ์•Š๊ณ  ์Ÿ€๋‹ค** โ€” ์–‘์ธก ๋ธํƒ€๊ฐ€ ๋‘˜ ๋‹ค ์‚ด์•„ ์žˆ๋‹ค (์ด์ชฝ 10/3 ยท main ์ธก 32/0 ยท ์ถ”๊ฐ€ยท์‚ญ์ œ์ค„ ๋‹ค์ค‘์ง‘ํ•ฉ ์ „๊ฑด ์ผ์น˜ ยท ์Šค์œ„ํŠธ 14/14 green). ์›์žฅ ํ•ด์†Œ๋Š” ์ „๊ฑด ๋ณด์กดยทํ•ฉ์ง‘ํ•ฉยท์‹œ๊ฐ„์ˆœ: ์ด ํšŒ์ฐจ(53ca3409 04:31)๊ฐ€ main ์ชฝ ์ตœ์‹  ํ•ญ๋ชฉ(30a31bda 04: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(--all 570/0/1 green) โ†’ โ˜…KILLED(์‹ ๊ทœ ํ…Œ์ŠคํŠธ) ยท class ์ถ• ์—ฌ์ „ํžˆ KILLED(์ด์ œ 2๊ฐœ๋ฅผ ์ฃฝ์ธ๋‹ค โ‡’ ์˜› ์ปค๋ฒ„๋ฆฌ์ง€ ์œ ์ง€) ยท ํšŒ๊ท€ ํ‘œ๋ณธ 2์ข…(BSM off-by-one ยท Ldc2W arm ์ œ๊ฑฐ) ์—ฌ์ „ํžˆ KILLED. โ˜…test_class_format 11 โ†’ 12 ยท cargo test --all --no-fail-fast 570 โ†’ 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 ๋Š” ์ž๋™ ๋ณ‘ํ•ฉ๋๋‹ค. ํ•ด์†Œ๋Š” ์ „๊ฑด ๋ณด์กดยทํ•ฉ์ง‘ํ•ฉยท์‹œ๊ฐ„์ˆœ: ์ด์ชฝ ๋‘ ํ•ญ๋ชฉ(30a31bd 04:04 ยท ab13a3c 02: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 json adoptedProposals ๊ธฐ๋ก). โ˜…์ฝ”๋“œ ๋ณ€๊ฒฝ ยซ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 of Hello.classใ€๋Š” ์ œ์•ˆ์ด ์‹ค๋ฆฐ ์ปค๋ฐ‹ (eb8b4eb = PR #49) ์‹œ์ ์— ์ด๋ฏธ ๊ฑฐ์ง“์ด๋‹ค โ€” ๊ทธ ํŒŒ์ผ์˜ Hello.class ํŒŒ์ƒ 3๊ณณ์€ ์ ˆ๋‹จยท๋งค์ง ๋ฐ”์ดํŠธยท๋ฌด์†์ƒ ๋“ค๋Ÿฌ๋ฆฌ์ด๊ณ  โ˜…์ฐธ์กฐ ์Šฌ๋กฏ์„ ๋ฎ๋Š” ๊ฒƒ์€ 0์ด๋‹ค(bytes[6..8] ๋ฒ„์ „ ๊ฐœ์•…์€ ์‹ค๋ฌผ ํ”ฝ์Šค์ฒ˜์— ์ ์šฉ๋œ๋‹ค). โ‡’ ใ€Œseveralใ€์€ โ˜…๊ทธ ํšŒ์ฐจ๊ฐ€ ๋ฐฉ๊ธˆ ๊ณ ์นœ ยซ๊ทธ ํ•˜๋‚˜ยป์˜ ์ผ๋ฐ˜ํ™”์˜€๋‹ค. โ˜…๊ทธ๋ž˜๋„ ๊ฐ์‚ฌ๋Š” ๊ฐ’ํ–ˆ๋‹ค โ€” ใ€Œ์—†๋‹คใ€๋ฅผ ยซ์žฌ์„œยป ์•„๋Š” ๊ฒƒ๊ณผ ยซ์ถ”์ธกยปํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค. โ˜…๋„๊ตฌ๋ฅผ ์ผ๋ถ€๋Ÿฌ ๋‚จ๊ธฐ์ง€ ์•Š์•˜๋‹ค: ๊ฐœ์•… ํ•˜๋„ค์Šค๋Š” ์ œํ’ˆ ์†Œ์Šค ๋ฌธ์ž์—ด์„ ๋งค์นญํ•ด ์น˜ํ™˜ํ•˜๋ฏ€๋กœ ๋ฆฌํŒฉํ„ฐ ๋’ค โ˜…์กฐ์šฉํžˆ ๊ทธ ๊ฐœ์•…์„ ๊ฑด๋„ˆ๋›ด๋‹ค โ‡’ โ˜…ํ•˜๋„ค์Šค ์ž์ฒด๊ฐ€ ใ€Œํ†ต๊ณผํ•˜์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ์žฌ์ง€ ์•Š๋Š”ใ€ ์‚ฐ์ถœ๋ฌผ์ด ๋œ๋‹ค(์ด ์ œ์•ˆ์ด ์‚ฌ๋ƒฅํ•˜๋Š” ๋ฐ”๋กœ ๊ทธ ํ˜•ํƒœ). ๋Œ€์‹  ๊ฐœ์•… ํ‘œ๋ฅผ ๋ฌธ์„œ๋กœ ๋‚จ๊ฒผ๋‹ค. โ€ป๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” scripts/survey-ldc-constant-tags.py ๋ฅผ ๋‚จ๊ธด ํŒ๋‹จ๊ณผ ๊ฐˆ๋ฆฌ๋Š” ์ด์œ ๊ฐ€ ์ด๊ฒƒ์ด๋‹ค(๊ทธ์ชฝ์€ ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ์–ด ๋‚ก์ง€ ์•Š๋Š”๋‹ค). โ˜…๊ฒฝ๊ณ„: ๋‹ตํ•œ ์งˆ๋ฌธ์€ ใ€Œ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ยซ์ž๊ธฐ ๊ฐ€์ง€ยป ๊ฐœ์•…์— ์ฃฝ๋Š”๊ฐ€ใ€์ด์ง€ ใ€Œ์–ด๋–ค ๊ตฌ๋ฉ๋„ ์—†๋‹คใ€๊ฐ€ ์•„๋‹ˆ๋‹ค ยท ํ”ฝ์Šค์ฒ˜์˜ ์œ ์ผ ๊ฒฐํ•จ์„ฑ์€ ๋ณ„๋„ ์ถ•์ด๋ผ ์•ˆ ๋ดค๋‹ค(ํ›„์† ์ถ”์ฒœ) ยท ์ง„ํ–‰ ์ค‘ PR #53ยท#54 ์˜ ์ƒˆ ํ…Œ์ŠคํŠธ 2๊ฐœ๋Š” ๋ฒ”์œ„ ๋ฐ–์ด๋‹ค (๊ฐ ํšŒ์ฐจ๊ฐ€ ์ž๊ธฐ ๋ผ์šด๋“œ์—์„œ ์–‘๋ฐฉํ–ฅ ๊ฐœ์•… ๋Œ€์กฐ๋ฅผ ์ด๋ฏธ ๋ถ™์˜€๋‹ค). โ˜…cargo test --all 570 / 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 json adoptedProposals ๊ธฐ๋ก). โ˜…์ „/ํ›„: 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 --all 571 / 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 ์ฐฉ์ง€๋ถ„๊ณผ ๊ฒน์ณค๊ณ , ํ•ด์†Œ๋Š” ์ „๊ฑด ๋ณด์กดยทํ•ฉ์ง‘ํ•ฉยท์‹œ๊ฐ„์ˆœ (4d2820f 01:49:47 > f2c8317 01: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 --all 572 (= main 570 + #p0 1 + ์ด ํšŒ์ฐจ 1) โ‡’ ๋‘ ํšŒ์ฐจ์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ ์‚ด์•„ ์žˆ๋‹ค.
  • [rustjava-adopt-bound-bootstrap-method-attr-index-p0] โ˜…โ˜…**BootstrapMethods ๋ฅผ ยซ๋‘ ๋ฒˆยป ์„ ์–ธํ•œ ํด๋ž˜์Šค๋ฅผ ๊ฑฐ๋ถ€ํ•œ๋‹ค โ€” ์ž„์˜ ์„ ํƒ์„ ์—†์•ด๋‹ค.** ์ฑ„ํƒ ์ œ์•ˆ 2026-09-16-bound-bootstrap-method-attr-index#p0(์šด์˜์ž tower ํŒจ๋„ ์ฑ„ํƒ ยท worklog json adoptedProposals ๊ธฐ๋ก). โ˜…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 --all 571 / 0 failed / 1 ignored(27 ์Šค์œ„ํŠธ ์ „๊ฑด ํ•ฉ์‚ฐ โ€” ๊ผฌ๋ฆฌ๋งŒ ์„ธ์ง€ ์•Š์•˜๋‹ค) ยท ํ”ฝ์Šค์ฒ˜ ์žฌ์ƒ์„ฑ ๋ฉฑ๋“ฑ(๊ธฐ์กด 11 ์ „๊ฑด ๋ฐ”์ดํŠธ ๋™์ผ ยท ์‹ ๊ทœ 1) ยท DoD 7์ค„ ์ „๊ฑด rc=0. โ˜…์žƒ๋Š” ๊ฒƒ: ์ง€๊ธˆ๊นŒ์ง€ ยซ๋กœ๋“œ๋˜๋˜ยป ํŒŒ์ผ ํ•˜๋‚˜๊ฐ€ ๊ฑฐ๋ถ€๋œ๋‹ค โ€” ๋‹ค๋งŒ ๊ทธ ํ˜•์ƒ์€ ์–ด์ œ ์ด ์ €์žฅ์†Œ๊ฐ€ ์žฐ ๋Œ€๋กœ javacยทkotlincยทscalacยทLombok ์‚ฐ์ถœ๋ฌผ 5,479 ํด๋ž˜์Šค์— 0์ด๊ณ  ASM ์œผ๋กœ๋„ ยซ์ผ๋ถ€๋Ÿฌยป ๋งŒ๋“ค์–ด์•ผ ๋‚˜์˜จ๋‹ค. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #53 ยท --merge(๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22 โ€” ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก 1ํšŒ์ฐจ approve(๋ฐ˜๋ ค 0) ยท ํ•€ f2c83174 ๋ถˆ์ด๋™(์ฐฉ์ˆ˜ ์‹ค์ธก 17:39:54Z ยท โ˜…์›Œ๋ฐ ํ›„ ์žฌ์กฐํšŒ MERGEABLE/CLEAN). โ˜…์ถฉ๋Œ 0 ยท base ๋‹น๊น€ 0(merge-tree rc=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/ ์— .class 3๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒ์„ฑ๊ธฐยทํ…Œ์ŠคํŠธ๋„ ๋งŒ์ง„๋‹ค โ‡’ โ˜…์›์žฅ๋งŒ์ด ์•„๋‹ˆ๋‹ค. โ˜…๊ทธ ์˜ค๊ธฐ๊ฐ€ ยซ๋ฌดํ•ดํ•˜์ง€ ์•Š์•˜๋‹คยป โ€” ๊ฐ™์€ ์‹œ๊ธฐ #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 json adoptedProposals ๊ธฐ๋ก). โ˜…์กฐ์‚ฌ ํšŒ์ฐจ ยท ํฌ๋ ˆ์ดํŠธ ๋ฌด์ ‘์ด‰(ํŒŒ์„œยทํ…Œ์ŠคํŠธ 0). โ˜…โ˜…ASM 9.7.1 = ๋‚ธ๋‹ค(์‹ค์ฆ) โ€” visitLdcInsn(Handle)ยท(Type.getMethodType)ยท(ConstantDynamic) 15์ค„๋กœ ๋งŒ๋“  ํด๋ž˜์Šค์—์„œ {MethodHandle 1, MethodType 1, Dynamic 1} ์‹ค์ธก. โ˜…์ •์ (๊ณต๊ฐœ API javap)๊ณผ ๋™์ (์ง์ ‘ ์ƒ์„ฑ) ยซ๋‘˜ ๋‹คยป ์žก์•˜๋‹ค. โ˜…KotlinยทScalaยทLombok ์‚ฐ์ถœ๋ฌผ = ์ด ํ‘œ๋ณธ์—์„œ 0(5,479 ํด๋ž˜์Šค ยท ldc 17,819 ์ž๋ฆฌ): kotlin-stdlib 2.0.21 994/11,107 ยท kotlinx-coroutines 1.9.0 826/1,791 ยท scala3-library 3.5.2 583/651 ยท scala-library 2.13.15 2,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(๋“ฑ์žฌ repo contracts/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. ํ•ด์†Œ = ์ „๊ฑด ๋ณด์กดยทํ•ฉ์ง‘ํ•ฉยท์‹œ๊ฐ„์ˆœ(์ด ํšŒ์ฐจ fd05b9a 20:53:17 > #51 b10b0fd 20:25:15) โ‡’ REPORT ์ตœ์ข… ์ˆœ์„œ survey โ†’ methodhandlekind โ†’ indy-fixture(์‹ค์ธก ํ™•์ธ). โ˜…๋ณ‘ํ•ฉ ํ˜•์ƒ์—์„œ ๊ณ„์ธก๊ธฐ๋ฅผ ๋‹ค์‹œ ๋Œ๋ ค ๋Œ€์กฐ๊ตฐ์ด ๊ทธ๋Œ€๋กœ์ž„์„ ํ™•์ธํ–ˆ๋‹ค โ€” test-data/ 148 ํด๋ž˜์Šค ยท ldc 515 ยท ์‹ฌ์–ด ๋‘” ์–‘์„ฑ 8/8({MethodHandle 1, MethodType 2, Dynamic 5}). cargo test --all 570 ๋ถˆ๋ณ€ ยท DoD 7์ค„ rc=0.
  • [rustjava-methodhandlekind-placement-revisit-after-pr44] โ˜…โ˜…**MethodHandleKind ์œ„์น˜ ยซ์žฌ๊ฒฐ์ •ยป โ€” ๋‹ต์€ ใ€Œ๊ทธ๋Œ€๋กœ ๋‘”๋‹คใ€.** ์ฑ„ํƒ ์ œ์•ˆ 2026-09-16-bootstrap-methods-and-method-handle#p2(worklog json adoptedProposals ๊ธฐ๋ก). โ˜…๋‚ฑ๋ง์ด Re-decide ๋‹ค โ€” ใ€Œ์•„๋‹ˆ์˜คใ€๋„ ์ •๋‹นํ•œ ๋‹ต์ด๊ณ , ์ด ํšŒ์ฐจ์˜ ๋‹ต์ด ๊ทธ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ ๋ณ€๊ฒฝ์€ ํŒ๋‹จ๊ณผ ์žฌ๊ฐœ ์กฐ๊ฑด์„ doc ์ฃผ์„์— ์ ์€ ๊ฒƒ๋ฟ(ํƒ€์ž…ยทimplยทlib.rs re-export ๋ฌด์ ‘์ด‰ ยท ๊ณต๊ฐœ API ๋ณ€ํ™” 0 ยท ๋™์ž‘ ๋ณ€๊ฒฝ 0). โ˜…โ˜…์ œ์•ˆ์ด ์ ์€ ๋ฐฐ์น˜ ์‚ฌ์œ  ยซ๋‘˜ยป ์ค‘ ยซํ•˜๋‚˜ยป๋งŒ ๋งŒ๋ฃŒ๋๋‹ค โ€” ๊ทธ ๊ตฌ๋ถ„์ด ์ด ํšŒ์ฐจ์˜ ์ „๋ถ€๋‹ค: โ‘ตใ€Œํ˜•์ œ ํšŒ์ฐจ๊ฐ€ constant_pool.rs ๋ฅผ ์—ด์–ด ๋‘๊ณ  ์žˆ์—ˆ๋‹คใ€ = โ˜…๋งŒ๋ฃŒ(PR #44 MERGED ยท 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 --all 570 / 0 failed / 1 ignored = โ˜…์ง์ „ ํ˜•์ƒ b3a20ae ์™€ ๋™์ผ ยท numstat 10+/0โˆ’(โ˜…์‚ฝ์ž… ์˜๋„์ด๋ฏ€๋กœ ใ€Œ์น˜ํ™˜์ธ๋ฐ ์‚ญ์ œํ–‰ 0์ด๋ฉด ์˜์‹ฌํ•˜๋ผใ€ ๋น„ํ•ด๋‹น โ€” ์„ ์–ธํ•ด ๋‘”๋‹ค) ยท โ˜…ใ€Œ์˜ฎ๊ธฐ๊ธฐ ์ „ ์œ„์น˜ ์ฐธ์กฐ 0ใ€ ์ถ•์€ ํ•ด๋‹น ์—†์Œ(์ด๋™์ด ์—†๋‹ค) ยท DoD 7์ค„ ์ „๊ฑด rc=0. โ˜…ํ›„์† ์ œ์•ˆ ์นด๋“œ 0 โ€” ใ€ŒX ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹ค์‹œ ์—ด์–ด๋ผใ€๋ฅผ cockpit ์—ด๋ฆฐ ์ถ”์ฒœ์œผ๋กœ ๋„์šฐ๋ฉด ์ง‘ํ–‰ ๋ถˆ๊ฐ€ํ•œ ์นด๋“œ๊ฐ€ ์˜๊ตฌํžˆ ๋‚จ๋Š”๋‹ค. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #51 ยท --merge(๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22). ๊ฒŒ์ดํŠธโ‘ก 1ํšŒ์ฐจ approve(๋ฐ˜๋ ค 0) ยท ํ•€ b10b0fdc ๋ถˆ์ด๋™(์ฐฉ์ˆ˜ ์‹ค์ธก 12:35:43Z ยท โ˜…์›Œ๋ฐ ํ›„ ์žฌ์กฐํšŒ MERGEABLE/CLEAN). โ˜…โ˜…๋ฐœ๊ถŒ ์‚ฌ์œ  โ“’(CONFLICTING)๊ฐ€ ยซ์‹คํ˜„๋˜์ง€ ์•Š์•˜๋‹คยป โ€” ์˜ค๋Š˜ ํ˜•์ œ ์…‹(#48ยท#49ยท#50)์ด base ๋ฅผ ์„ธ ๋ฒˆ ํ”๋“ค์—ˆ๋Š”๋ฐ๋„ ์ด PR ์€ ๊นจ๋—ํ–ˆ๋‹ค. ๊ทผ์ธ์€ ๋ถ„๊ธฐ ์‹œ์ ์ด๋‹ค: ์ด ๋ธŒ๋žœ์น˜๋Š” #50 ์ฐฉ์ง€๋ถ„(b3a20ae) ยซ์œ„ยป์—์„œ ๊ฐˆ๋ ธ๊ณ , ๊ทธ ๋’ค ์ฐฉ์ง€ํ•œ ํ˜•์ œ๊ฐ€ ์—†๋‹ค(๊ทธ ์‚ฌ์ด ์—ด๋ฆฐ #52 ๋Š” ์•„์ง ๋ฏธ์ฐฉ์ง€) โ‡’ merge-tree rc=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 ๋ถ€์žฌ ยท CI setup-java 0๊ฑด ยท PATH ์— javac ๋ถ€์žฌ(์‹ค๋ฌผ์€ /opt/homebrew/opt/openjdk/bin/javac 26.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 ยท โ˜…์‹ค์ œ ์‚ฌ๊ณ  ์žฌํ˜„(javac 26.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์ดˆ ํŒŒ์„œ ์‹œํ—˜์ด ์žก๊ฒŒ ํ–ˆ๋‹ค. โ˜…๊ณต๊ฐœ API parse_all ์˜ ๊ฒฐ๊ณผ ์ธ๋ฑ์Šค(1ยท2ยท4)๋ฅผ ๋ณด๋ฏ€๋กœ ๊ตฌํ˜„ ์„ธ๋ถ€์— ๊ฒฐํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค. โ˜…โ˜…๊ณ„์ธก ํ•จ์ •์„ ๋‚จ๊ธด๋‹ค โ€” cargo test ๋Š” ยซ์ฒซ ์‹คํŒจ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ๋ฉˆ์ถ˜๋‹คยป. --no-fail-fast ์—†์ด ์„ผ ์ฒซ ์ธก์ •์€ ใ€Œ์ „๊ฑด test_class 1๊ฑด๋งŒ 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(๋“ฑ์žฌ repo contracts/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_version green (๋‚˜๋จธ์ง€ 6๊ฐœ๋Š” ์ „๋ถ€ .java ์ง ๋ณด์œ  ยท major 65 = ํ•€ ๋Œ€์ƒ). โ‡’ โ˜…ใ€Œ๋””๋ ‰ํ„ฐ๋ฆฌ ์ „์ˆ˜ ํ•€์ด์—ˆ์œผ๋ฉด #48 ์ฐฉ์ง€ ์ˆœ๊ฐ„ redใ€๊ฐ€ ๊ฐ€์ •์ด ์•„๋‹ˆ๋ผ ยซ์ง€๊ธˆ ์ด ํŠธ๋ฆฌ์—์„œยป ํ™•์ธ๋œ ์‚ฌ์‹ค์ด๋‹ค.** โ˜…cargo test --all 570 / 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 json adoptedProposals ๊ธฐ๋ก). โ˜…์ œํ’ˆ ์ฝ”๋“œ ๋ณ€๊ฒฝ ยซ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 --all 568 / 0 failed / 1 ignored(โ˜…์ˆ˜ ๋ถˆ๋ณ€ โ€” ํ…Œ์ŠคํŠธ 1๊ฐœ ยซ์น˜ํ™˜ยป) ยท DoD 7์ค„ ์ „๊ฑด rc=0 ยท ํ”ฝ์Šค์ฒ˜ ์žฌ์ƒ์„ฑ ๋ฉฑ๋“ฑ. โ˜…๊ณ„์•ฝ 2โ’œ ์ „์ˆ˜ ํ™•์ธ: ์˜› ํ”ฝ์Šค์ฒ˜(BadTag*)๋ฅผ ์“ฐ๋˜ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ 0๊ฑด ยท hello_class()ยทfixture() ํ—ฌํผ๋Š” ์—ฌ์ „ํžˆ 4ยท5ํšŒ ์“ฐ์—ฌ ๊ณ ์•„ 0. โ˜…๊ณ„์•ฝ 2โ’ ์˜คํƒ: ์ƒˆ ๋‹จ์–ธ์€ โ˜…์˜คํƒ์ด ๋Š˜์ง€ ์•Š๋Š”๋‹ค โ€” ํ”ฝ์Šค์ฒ˜๊ฐ€ ยซ์œ ์ผํ•œ ๊ฒฐํ•จยป๋งŒ ๊ฐ–๋„๋ก ์ง€์–ด์ ธ ์žˆ์–ด ๋‹ค๋ฅธ ๋ณ€๊ฒฝ์ด ์ด ํ…Œ์ŠคํŠธ๋ฅผ ํ”๋“ค ๊ฒฝ๋กœ๊ฐ€ ์ข๋‹ค. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #49 ยท --merge(๋“ฑ์žฌ repo contracts/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 ์˜ ์˜ˆ์ธก ใ€Œ์ฝ”๋“œ ์ถฉ๋Œ์€ ์—†๋‹ค โ€” ํŒŒ์ผ์ด ๊ฐˆ๋ฆฐ๋‹คใ€๊ฐ€ ๋งž์•˜๋‹ค. ํ•ด์†Œ = ์ „๊ฑด ๋ณด์กดยทํ•ฉ์ง‘ํ•ฉยท์‹œ๊ฐ„์ˆœ(eb8b4eb 16:20 > 3b3667d 14: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 json adoptedProposals ๊ธฐ๋ก ยท ์ด ๋ฐฐ์น˜์˜ ์œ ์ผํ•œ 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ยทCallSite 0์ค„(๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๋ถ€์žฌ). ํŒฉํ† ๋ฆฌ์˜ ๊ณ„์•ฝ์ด ยซ๋ฌธ์ž์—ด ํ…œํ”Œ๋ฆฟยป์ด๋ผ ๋ ˆ์‹œํ”ผ๋ฅผ ์ง์ ‘ ๊ฑธ์œผ๋ฉด ๋˜๊ณ , โ˜…๊ทธ๊ฒƒ์ด ใ€Œํ•œ ํ˜ธ์ถœ ์ง€์ ใ€๊ณผ ใ€Œ๋งํฌ ๊ธฐ๊ตฌใ€๋ฅผ ๊ฐ€๋ฅด๋Š” ์„ ์ด๋‹ค. ๊ฐ’โ†’๋ฌธ์ž์—ด์€ ๋Ÿฐํƒ€์ž„์˜ 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_linked red โ‘ต๋ฌด์ฐจ๋ณ„ ๋งํฌ(4์ถ• ์ œ๊ฑฐ) โ†’ โ˜…๊ทผ์ ‘ ์˜ค๋‹ต์ด ๋งํฌ๋ผ red โ€” โ˜…๊ทธ ํ”ฝ์Šค์ฒ˜๋ฅผ ๋„ฃ๊ธฐ ยซ์ „ยป์—๋Š” ์ด ๊ฐœ์•…์ด green ์ด์—ˆ๋‹ค. โ˜…cargo test --all 568 / 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(๋“ฑ์žฌ repo contracts/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 json adoptedProposals ์— ์ „๊ฑด ๊ธฐ๋ก): 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 --all 568 / 0 failed / 1 ignored(โ˜…์ˆ˜ ๋ถˆ๋ณ€ โ€” ํ…Œ์ŠคํŠธ๋ฅผ ยซ์น˜ํ™˜ยปํ–ˆ๋‹ค. ์ˆ˜๋กœ๋Š” ์•ˆ ๋ณด์ด๋ฏ€๋กœ ๊ฐœ์•…์œผ๋กœ ๋ฌผ์—ˆ๋‹ค) ยท DoD 7์ค„ ์ „๊ฑด rc=0. โ˜…โ˜…๋‚จ๊ธด ๊ฒƒ: BootstrapMethods ์ค‘๋ณต ์„ ์–ธ์€ ์—ฌ์ „ํžˆ ๊ฑฐ๋ถ€ํ•˜์ง€ ์•Š๋Š”๋‹ค(JVMS 4.7.23 ์€ ยซ์ตœ๋Œ€ 1๊ฐœยป ยท ์ง€๊ธˆ์€ find_map ์ด ์ฒซ ๊ฒƒ๋งŒ ๋ณธ๋‹ค) โ€” โ˜…์ด ํšŒ์ฐจ ๋ฒ”์œ„ ๋ฐ–์ด๊ณ  ํ›„์† ์ถ”์ฒœ์— ์ ์—ˆ๋‹ค. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #47 ยท --merge(๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22 ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก 1ํšŒ์ฐจ approve(๋ฐ˜๋ ค 0) ยท ํ•€ 3b3667d6 ๋ถˆ์ด๋™(๋™๋ด‰ ์ „ ์‹ค์ธก โ€” ๋กœ์ปฌยท์›๊ฒฉยทPR headยท๋ฆฌ๋ทฐ ์ค„2 4๊ฐ’ ์ผ์น˜) ยท ci-presence rc=0 CI_GREEN ยท mergeable MERGEABLE/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 json adoptedProposals ์— ๊ธฐ๋ก). โ˜…**AttributeInfo::BootstrapMethods(Vec<u8>) โ†’ Vec<BootstrapMethod>** ยท ์‹ ๊ทœ ๊ณต๊ฐœ ํƒ€์ž… 3์ข… (BootstrapMethod ยท MethodHandleRef ยท MethodHandleKind 9์ข…) โ€” โ˜…์ „๋ถ€ 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: M1 num_bootstrap_arguments ๋ฅผ u8 ๋กœ(ํ•„๋“œ ํญ 1๊ฐœ) ยท M2 bootstrap_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 --all 558 โ†’ 562 / 0 failed / 1 ignored(์‹ ๊ทœ 4 ยท โ˜…๊ฐ์†Œ 0) ยท DoD 7์ค„ ์ „๊ฑด rc=0. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #45 ยท --merge(๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22 ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก 1ํšŒ์ฐจ approve(๋ฐ˜๋ ค 0) ยท ํ•€ 992dfa53 ๋ถˆ์ด๋™(๋™๋ด‰ ์ „ ์‹ค์ธก โ€” PR head ์™€ ๋ฐ”์ดํŠธ ์ผ์น˜) ยท ci-presence rc=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_w 1,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 ยท ์ด repo test-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!() ์—์„œ ์žฐ ๊ฒƒ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ) ยท M2 from_constant_pool ์›๋ณต ยท M3 opcode ๋ถ„๊ธฐ ์›๋ณต ยท M4 ldc2_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 --all 558 โ†’ 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 ยท LdcDynamicNoBSM BSM ๋ถ€์žฌ). โ˜…before ab872b7 ๋Š” ๋‘˜ ๋‹ค 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 --all 560 โ†’ 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(๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22 ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก -fix2 ํšŒ์ฐจ approve ยท ํ•€ b5f268c0 ๋ถˆ์ด๋™(๋™๋ด‰ ์ „ ์‹ค์ธก โ€” ๋กœ์ปฌยท์›๊ฒฉยทPR headยท๋ฆฌ๋ทฐ ์ค„2 4๊ฐ’ ์ผ์น˜) ยท ci-presence rc=0 CI_GREEN(3๊ฑด ์ „๊ฑด ์™„๋ฃŒยท์„ฑ๊ณต) ยท mergeable MERGEABLE/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)๋Š” ๋‚ก์€ head e9151acf ๊ธฐ์ค€์ด๋ผ hold: ๊ฐ€ ๊ฑธ๋ ค ํ์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ–ˆ๊ณ (queue-lint ๊ฒ€์‚ฌ26), 2์ฐจ(โ€ฆ-fix2-merge)๊ฐ€ ์ƒˆ head b5f268c0 ๋กœ ๋ Œ๋”๋ผ ์ด ์ฐฉ์ง€๋ฅผ ๋ƒˆ๋‹ค. โ˜…๊ทธ hold: ๊ฐ€ ๊ฐ’์„ ํ–ˆ๋‹ค โ€” ๋‚ก์€ ๋ Œ๋”๋ณธ์ด ๊ทธ๋Œ€๋กœ ๋Œ์•˜์œผ๋ฉด ๊ฒŒ์ดํŠธโ‘ข์ด CONFLICTING ์œผ๋กœ ์„ฐ๋‹ค. โ˜…โ˜…ํ˜•์ œ #46 ์ด ยซ์•„์ง ์—ด๋ ค ์žˆ๋‹ค(head 72db4923 ยท ๊ฒŒ์ดํŠธโ‘ข 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 json adoptedProposals ์— ๊ธฐ๋ก). โ˜…โ˜…์ง์ „ ํšŒ์ฐจ ๊ธฐ๋ก ์ •์ •์ด ์•„๋‹ˆ๋ผ ยซ์Šน๊ณ„ยป๋‹ค โ€” ๊ทธ ํšŒ์ฐจ๋Š” ใ€Œjavac ๊ฐ€ ๊ทธ ๋‘˜์„ ๋‚ด๋Š” ํ‰๋ฒ”ํ•œ ์ฝ”๋“œ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹คใ€๊ณ  โ˜…์ •์งํ•˜๊ฒŒ ์ ์—ˆ๋‹ค(๊ฑฐ์ง“ ๋‹จ์–ธ์ด ์•„๋‹ˆ๋‹ค). โ‡’ โ˜…์ด ํšŒ์ฐจ๊ฐ€ ์ฐพ์•˜๋‹ค. โ˜…ํƒœ๊ทธ 17 ์˜ ์‚ฐ์ถœ ์กฐ๊ฑด(์ด ์›์žฅ์— ์ฒ˜์Œ ๋ฐ•๋Š”๋‹ค): โ˜…**switch ์˜ case ๋ผ๋ฒจ์ด ยซ์ •๊ทœํ™”๋œ enum ์ƒ์ˆ˜ยป์ด๊ณ  ์„ ํƒ์ž๊ฐ€ enum ์ด ์•„๋‹ ๋•Œ**(JEP 441). javac ์ด ๊ฐ ์ƒ์ˆ˜๋ฅผ java/lang/Enum$EnumDesc ๋กœ ๊ธฐ์ˆ ํ•˜๋ฉฐ ConstantBootstraps.invoke condy ๋ฅผ ๋‚ธ๋‹ค. โ˜…ํ‰๋ฒ”ํ•œ 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-end ClassFormatError: 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 --all 558 โ†’ 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(๋“ฑ์žฌ repo contracts/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-presence rc=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(๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22 ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). โ˜…โ˜…โ˜…์ด ๋ฆฌ๋‹ˆ์ง€์˜ ๊ฒŒ์ดํŠธโ‘ข์€ ยซ์„ธ ๋ฒˆยป์ด์—ˆ๋‹ค โ€” ๊ทธ ์‚ฌ๋ฃŒ๋ฅผ ๋‚จ๊ธด๋‹ค: 1์ฐจ โ€ฆ-execution-fixtures-merge blocked(code-file-conflict ยท #45 ์ฐฉ์ง€) โ†’ -fix base ๋‹น๊ธฐ๊ธฐ ยท 2์ฐจ โ€ฆ-fix-merge blocked ร—2(ci-pending ์ž๋™ ์žฌ๋ฐฐ์ฐจ 2ํšŒ โ†’ green โ†’ ๊ทธ ๋’ค code-file-conflict ยท #44 ์ฐฉ์ง€) โ†’ -fix2 base ๋‹น๊ธฐ๊ธฐ ยท 3์ฐจ(์ด ํšŒ์ฐจ) ์ฐฉ์ง€. โ˜…1ยท2์ฐจ์˜ ใ€Œํ•ด์†Œ๋ฅผ ์‹œ๋„ํ•˜์ง€ ์•Š๊ณ  blockedใ€๊ฐ€ ๋‘˜ ๋‹ค ์˜ณ์•˜๋‹ค โ€” ๊ฒŒ์ดํŠธโ‘ข์ด ๊ฒŒ์ดํŠธโ‘ก๋ฅผ ์‚ผํ‚ค์ง€ ์•Š๊ฒŒ ํ•œ ๊ฐ’์ด๋‹ค. โ˜…โ˜…๊ทผ์ธ์€ ยซ์›Œ์ปค ํŒ๋‹จยป์ด ์•„๋‹ˆ๋ผ ยซ๋ฐฐ์—ดยป์ด์—ˆ๋‹ค(์ด๊ด„์ด ์›์žฅ์— ์ž์ธ): ๊ฐ™์€ ํŒŒ์ผ์„ ๋ฌด๋Š” ํ˜•์ œ PR ๋‘˜์˜ ๊ฒŒ์ดํŠธโ‘ข๋ฅผ ๋™์‹œ์— ์—ด๋ฉด โ˜…๋จผ์ € ์ฐฉ์ง€ํ•˜๋Š” ์ชฝ์ด ๋‚˜๋จธ์ง€๋ฅผ ยซ๋ฐ˜๋“œ์‹œยป ๊นฌ๋‹ค โ€” ํ™•๋ฅ ์ด ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ๋‹ค. โ‡’ ๊ทœ์œจ = ใ€Œ๊ฐ™์€ ํŒŒ์ผ์„ ๋ฌด๋Š” ํ˜•์ œ PR ์˜ ๊ฒŒ์ดํŠธโ‘ข๋Š” ์ง๋ ฌ๋กœ ์—ฐ๋‹คใ€. ๊ฒŒ์ดํŠธโ‘ก -fix2 ํšŒ์ฐจ approve ยท ํ•€ 02628dbe ๋ถˆ์ด๋™(๋™๋ด‰ ์ „ ์‹ค์ธก โ€” ๋กœ์ปฌยท์›๊ฒฉยทPR headยท๋ฆฌ๋ทฐ ์ค„2 4๊ฐ’ ์ผ์น˜) ยท ci-presence rc=0 CI_GREEN ยท mergeable MERGEABLE/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 --all 568 ์—์„œ ์ค„์ง€ ์•Š์Œ(= 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 ์ œ๊ฑฐ ยท M3 0xba ์›๋ณต ยท M4 verifier ๋ถ„๊ธฐ ์ œ๊ฑฐ) ยท ๋ณต์› green. โ˜…cargo test --all 554 โ†’ 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_width 35 ๋ฅผ ๋„˜๊ฒจ 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 --all 554 / 0 / 1(์ „์ฒด ์‹คํ–‰) ยท DoD 7์ข… rc=0. โ˜…๋ฐฉ์–ด๋Š” ยซ์ฃผ์„ยป์ด์ง€ ๊ธฐ๊ณ„ ๊ฐ•์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค โ€” ์•Œ๊ณ  ๊ณ ๋ฅธ ๊ฐ’์ด๊ณ (๊ด€์šฉ๋งŒ ๋Š˜๊ณ  ์ง€ํ‚ฌ ์ถ•์ด ์—†๋‹ค), ๋ณ‘๋ ฌ ๋Ÿฌ๋„ˆ ๋„์ž… ํšŒ์ฐจ๊ฐ€ ์„ ํ–‰ ์กฐ๊ฑด์œผ๋กœ ํ•จ๊ป˜ ์ง„๋‹ค. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #42 ยท --merge(๋“ฑ์žฌ repo ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก 1ํšŒ์ฐจ approve(๋ฐ˜๋ ค 0) ยท ํ•€ 8f8443ea ๋ถˆ์ด๋™(ํ•ด์†Œยท๋™๋ด‰ ์ „ ์‹ค์ธก) ยท ci-presence rc=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๊ณณ์„ ์ž ๊ฐ”๋‹ค(.rs 0์ค„). ์ฑ„ํƒ ์ œ์•ˆ 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 --all 554 / 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-presence rc=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 --all 554 / 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-presence rc=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 --all 554 / 0 / 1(์ „์ฒด ์‹คํ–‰ ยท ๊ณ„์ˆ˜ ๋ถˆ๋ณ€์ด ๋งž๋‹ค) ยท DoD 7์ข… rc=0 ยท ๊ธฐ์กด ํ”ฝ์Šค์ฒ˜ ๊ฐ์†Œ 0. โ˜…์•Œ๊ณ  ๋‚จ๊ธด ๊ฒƒ: ์ด ํ”ฝ์Šค์ฒ˜๊ฐ€ ยซํŒŒ์ผ์„ ์“ฐ๋Š” ์ฒซ ์‹œํ—˜ยป์ด๊ณ  ๊ณ ์ • ์ด๋ฆ„์„ ์“ด๋‹ค โ‡’ test_class ๋ฅผ ๋ณ‘๋ ฌํ™”ํ•˜๋ฉด ์ถฉ๋Œํ•œ๋‹ค (์˜ค๋Š˜์€ ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ˆœํšŒํ•˜๋ฏ€๋กœ ๋ฌดํ•ด). โ˜….gitignore ์— ๋„ฃ์ง€ ์•Š์•˜๋‹ค โ€” ๋„ฃ์œผ๋ฉด ใ€Œ๋‚จ์•„๋„ ์•ˆ ๋ณด์ธ๋‹คใ€๊ฐ€ ๋˜์–ด ์œ„ ๋‹จ์–ธ์ด ๋ฌด๋ ฅํ•ด์ง„๋‹ค. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #39 ยท --merge(๋“ฑ์žฌ repo ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก 1ํšŒ์ฐจ approve(๋ฐ˜๋ ค 0) ยท ํ•€ 1270ff93 ๋ถˆ์ด๋™(๋™๋ด‰ ์ „ ์‹ค์ธก) ยท ci-presence rc=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 โ†” Pattern 2๊ณณ ์ด๋ฏธ NPE. โ˜…๊ฐ€๋“œ๋ณ„ ์ปค๋ฒ„๋ฆฌ์ง€๋„ ์ธก์ •(9๊ณณ ๋‹จ์ผ ๊ฐœ์•…): 6 red ยท 3 green โ€” ๋ฏธ์ปค๋ฒ„ 3์€ ใ€Œํ…Œ์ŠคํŠธ ๋ฏธ์ž‘์„ฑใ€์ด ์•„๋‹ˆ๋ผ โ˜…ํ”ฝ์Šค์ฒ˜ ๋„๋‹ฌ ๋ถˆ๊ฐ€ (JarURLConnectionยทURLStreamHandler ๋Š” ABSTRACT ยท ZipFile.getInputStream ์€ ZipOutputStream ๋ถ€์žฌ๋กœ zip ์„ ๋ชป ๋งŒ๋“ ๋‹ค). โ˜…๊ฐ์‚ฌ K 20 โ†’ 11 โ€” โ˜…๊ทธ 11 ์„ ยซ๋ฏธํ•ด๊ฒฐยป๋กœ ์ฝ์ง€ ๋งˆ๋ผ(โ’1 + โ’ž8 + ์˜คํƒ2 โ‡’ ๊ทœ๊ฒฉ์ƒ ๋‹ซ์„ ๊ฒƒ 0). โ˜…cargo test --all 554 / 0 / 1(์ „์ฒด ์‹คํ–‰) ยท DoD 7์ข… rc=0 ยท โ’โ’ž ๋ฌด์ ‘์ด‰(diff ์— ๊ทธ ํŒŒ์ผ 0). โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #38 ยท --merge(๋“ฑ์žฌ repo ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก 1ํšŒ์ฐจ approve(๋ฐ˜๋ ค 0) ยท ํ•€ 934b3944 ๋ถˆ์ด๋™(๋™๋ด‰ ์ „ ์‹ค์ธก) ยท ci-presence rc=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/NullBufferGuards 13์ผ€์ด์Šค(๊ฐ€๋“œ 12/18 ์ปค๋ฒ„ โ€” โ˜…18๊ณณ ์ „๊ฑด ๋‹จ์ผ ๊ฐ€๋“œ ๊ฐœ์•…์œผ๋กœ ยซ์ธก์ •ยป). โ˜…โ˜…๊ฐ์‚ฌ ํ‘œ โ€” ์žฌ์ธก 2026-09-12 ยท โ˜…ํŠธ๋ฆฌ ๋ณ‘๊ธฐ(์ •๋ณธ = scripts/audit-null-guards.py): base 6da7d66f = 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.getChars 18๊ณณ. โ˜…โ˜…์ƒ์„ฑ์ž๋ฅ˜๋ฅผ ยซ์ผ๋ถ€๋Ÿฌยป ๋บ๋‹ค โ€” ์ผ๊ด„ ๊ฐ€๋“œ๊ฐ€ ยซํ‹€๋ฆฌ๋Š”ยป ์ž๋ฆฌ๊ฐ€ ์‹ค์žฌํ•œ๋‹ค: URL(context, spec, handler) ๋Š” JDK ๊ทœ๊ฒฉ์ƒ handler == null ์ด ยซํ•ฉ๋ฒ•ยป(๊ธฐ๋ณธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์“ฐ๋ผ๋Š” ๋œป)์ด๋‹ค. โ‡’ โ˜…์ž”์—ฌ 20๊ฑด์€ ยซ๊ฐ€๋“œ๋ฅผ ๋„ฃ์„์ง€ยป๊ฐ€ ์•„๋‹ˆ๋ผ ยซnull ์ด ํ•ฉ๋ฒ•์ธ์ง€ยป๋ฅผ ๊ทœ๊ฒฉ์œผ๋กœ ๋จผ์ € ๊ฐ€๋ ค์•ผ ํ•œ๋‹ค โ€” ํ›„์†์˜ ๋ณธ์ฒด๊ฐ€ ๊ทธ๊ฒƒ์ด๋‹ค. โ˜…๊ฐœ์•… ๋Œ€์กฐ ์–‘๋ฐฉํ–ฅ ยท 4์ข…: โ‘ด18๊ณณ ์ „๊ฑด ๋˜๋Œ๋ฆผ โ†’ test_class FAILED โ‘ต๋‹จ์ผ ๊ฐ€๋“œ(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 --all 554 / 0 / 1(โ˜…์ „์ฒด ์‹คํ–‰ ยท ์ฆ๊ฐ 0 ์ด ๋งž๋‹ค โ€” test_class ๋Š” ํ”ฝ์Šค์ฒ˜๋ฅผ ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ˆœํšŒํ•œ๋‹ค) ยท DoD 7์ข… rc=0. โ˜…โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #37 ยท --merge(๋“ฑ์žฌ repo ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก 3ํšŒ์ฐจ ๋งŒ์— approve(์ดˆํŒ โ†’ -fix โ†’ -fix2) ยท ํ•€ 77dec927 ๋ถˆ์ด๋™(๋™๋ด‰ ์ „ ์‹ค์ธก) ยท ci-presence rc=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.rs 7 ยท system.rs 2) ยท ํ”ฝ์Šค์ฒ˜ test-data/NullArgGuards 9์ผ€์ด์Šค. โ˜…์ œ์•ˆ์€ ใ€Œ8๊ฒฝ๋กœใ€๋ผ ํ–ˆ๋Š”๋ฐ ์‹ค์ธก์€ ยซ9๊ณณยป์ด๋‹ค โ€” System.arraycopy ๊ฐ€ srcยทdest ๋‘˜ ๋‹ค ๋šซ๋ ค ์žˆ์—ˆ๊ณ (์ œ์•ˆยทSTATE โ‘ข-2 ๋Š” src ๋งŒ ์…Œ๋‹ค) ๊ทธ ๋‘˜์€ ๋‹ค๋ฅธ ์ธ์ž๋‹ค. โ˜…๋Œ€๊ฐ€ = ์—†์Œ์— ๊ฐ€๊น๋‹ค(์ œ์•ˆ ๋ฌธ๋ฉด ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›๋˜ ์žฌํ™•์ธ): upstream ๊ด€์šฉ๊ตฌ(์ง„์ž…๋ถ€ is_null())๋ฅผ ๊ทธ๋Œ€๋กœ ์ผ๊ณ  ์‚ฝ์ž…๋งŒ(--numstat ์‚ญ์ œํ–‰ 0 ยท ์น˜ํ™˜ ์•„๋‹˜) ยท โ˜…์˜๋ฏธ ๋ณ€๊ฒฝ 0 โ€” ๊ฐ€๋“œ ยซ์•žยป์—์„œ ํŒจ๋‹‰ํ•˜๋˜ ์ž…๋ ฅ๋งŒ ์˜ˆ์™ธ๋กœ ๋ฐ”๋€๋‹ค(์ •์ƒ ์ž…๋ ฅ์€ ๋„๋‹ฌ ๊ฒฝ๋กœ๊ฐ€ ๋™์ผ). โ˜…โ˜…๊ฐœ์•… ๋Œ€์กฐ๋กœ ๊ณตํ—ˆํ•˜์ง€ ์•Š์Œ์„ ์ฆ๋ช…ํ–ˆ๋‹ค โ€” ๊ฐ€๋“œ ์ „๊ฑด ๋˜๋Œ๋ฆฌ๋ฉด test_class FAILED (called Option::unwrap() on a None value at jvm/src/class_instance.rs:108 = STATE โ‘ก ๊ฐ€ ์ง€๋ชฉํ•œ ClassInstanceRef::deref ๊ทธ ์ž๋ฆฌ) โ†” ๊ฐ€๋“œ ๋ณต์› ์‹œ ok. โ˜…cargo test --all 554 / 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-presence rc=0 CI_GREEN ยท ์ž์‹ PR 0๊ฑด ยท ์ฐฉ์ง€ diff 9ํŒŒ์ผ(.rs 2 ยท ํ”ฝ์Šค์ฒ˜ 3 ยท ์›์žฅ 4) ยท โ˜…๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ 0๊ฐœ โ‡’ ๋ฐฐํฌ 0. โ˜…โ˜…๊ฒ€์ˆ˜์ž๊ฐ€ ยซ์ž๊ธฐ ์ž๋ฆฌยป์—์„œ ๊ฐœ์•…์„ ๋‹ค์‹œ ์Ÿ€๊ณ , ํšŒ์ฐจ๋ณด๋‹ค ๊ฐ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ƒˆ๋‹ค โ€” ๊ฐ€๋“œ๋ฅผ 1๊ฐœ์”ฉ ๋นผ๋„ ํ”ฝ์Šค์ฒ˜๊ฐ€ ๋ฌธ๋‹ค (A: system.rs dest ๋งŒ ์ œ๊ฑฐ โ†’ class_instance.rs:114 DerefMut ยท B: init_with_string_buffer ๋งŒ ์ œ๊ฑฐ โ†’ :108 Deref). โ‡’ โ˜…์œ„ ๋ณธ๋ฌธ์ด :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 local mainใ€์„ MANDATORY ๋กœ ์ ๊ณ  ์žˆ์—ˆ๋‹ค โ‡’ ์ง„์งœ ๊ทผ์ธ์€ ยซํ˜„ํ–‰ ์กฐํ•ญ์„ ์กฐํšŒํ•˜์ง€ ์•Š์€ ๊ฒƒยป. โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #35 ยท --merge(๋“ฑ์žฌ repo ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์ง€์šด๋‹ค). ๊ฒŒ์ดํŠธโ‘ก approve ยท ํ•€ c980ef0d ๋ถˆ์ด๋™(๋™๋ด‰ ์ „ ์‹ค์ธก) ยท ci-presence rc=0 CI_GREEN ยท ์ž์‹ PR 0๊ฑด ยท ์ฐฉ์ง€ diff 5ํŒŒ์ผ ์ „๊ฑด ๋ฌธ์„œ ยท โ˜…์ด ์ €์žฅ์†Œ ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ 0๊ฐœ โ‡’ ๋ฐฐํฌ 0 ยท .rs 0์ค„.
  • [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 ยท .rs 0์ค„. โ˜…์ง์ „ ํšŒ์ฐจ๊ฐ€ ์‚ผํ‚จ docs/upstream-sync-approach.md ยง5 ์ œ๋ชฉ ๋ณต๊ตฌ(๋‚ด๊ฐ€ ๋‚ธ ๊ฒฐํ•จ์ด๋‹ค). โ˜…๊ฒŒ์ดํŠธโ‘ข ์ฐฉ์ง€ โ€” PR #34 ยท --merge(๋“ฑ์žฌ repo ยท ์Šค์ฟผ์‹œ๋Š” ๋ถ€๋ชจ 2๊ฐœ๋ฅผ 1๊ฐœ๋กœ ์ ‘์–ด ๊ณ„๋ณด๋ฅผ ์žƒ๋Š”๋‹ค). โ˜…ci-presence rc=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-presence rc=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 ยท ์ธก์ • ํŠธ๋ฆฌ = ๊ฐ repo origin/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-presence rc=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 ์— audit failure 7๊ฑด) ๊ฒŒ์ดํŠธโ‘ข์˜ ใ€Œ์ฐฉ์ง€๋ณธ greenใ€ ์ฝ๊ธฐ๋ฅผ ํ๋ฆฐ๋‹ค (โ˜…๋‹จ PR ์€ ๋ง‰์ง€ ์•Š๋Š”๋‹ค โ€” PR head ์™€ sha ๊ฐ€ ๋‹ค๋ฅด๋‹ค) ยท โ’ž์ด์Šˆ๋Š” โ˜…์ด fork ๊ฐ€ issues ๋น„ํ™œ์„ฑ์ด๋ผ ยซ๋ถˆ๊ฐ€ยป. โ‡’ โ˜…โ’ ๊ฐ€ ยซ๋‚จ์€ ๊ฒƒยป์ด๊ณ  ๊ทธ ยซ์ˆ˜๋™์„ฑยป์„ ์•Œ๊ณ  ๊ณจ๋ž๋‹ค โ€” โ˜…์žฌ๊ฐœ ์กฐ๊ฑด์ด ๊ทธ ๋Œ€๊ฐ€๋ฅผ ยซ์žฐ๋‹คยป (ใ€Œbehind โ‰ฅ 20 ์ด 7์ผ ์ด์ƒ์ธ๋ฐ ํšŒ์ฐจ ๋ฏธ๊ฐœ์‹œใ€ ยท ์„ธ๋Š” ๋ช…๋ นยท์˜ค๋Š˜์˜ ๊ฐ’์„ ยง5-B โ’  ์— ๋ฐ•์•˜๋‹ค). โ˜…ํ•œ ๋ฒˆ ๋Œ๋ ค ์˜ค๋Š˜์˜ ๊ฐ’: โ˜…behind 0 ยท merge-base bd42427 = upstream HEAD โ‡’ ์ž„๊ณ„ ๋ฏธ๋งŒ. โ˜…upstream ๋ฐœ์‹  0(remote ์ถ”๊ฐ€ + fetch ๋ฟ ยท permissions: contents: read) ยท โ˜…์ž๋™ ๋ฐœ๊ถŒ 0 ยท โ˜…์ž„๊ณ„ 20 ๋ฌด์ ‘์ด‰ ยท โ˜…bin/healthcheckยทorchestrator ๋ฌด์ ‘์ด‰ ยท scripts/ ๋ฌด์ ‘์ด‰(ํŒŒ๋ฆฌํ‹ฐ rc=0) ยท .rs 0์ค„ ยท 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) ยท .rs 0์ค„ ยท ๊ณผ๊ฑฐ backfill 0 ยท qts ์ž ๊ธˆยทupstream ๋ฆฌ๋‹ˆ์ง€ยทํŒŒ๋ฆฌํ‹ฐ ๊ฒ€์‚ฌ๊ธฐ ๋ฌด์ ‘์ด‰. โ˜…โ˜…๊ทผ๊ฑฐ๋Š” ยซ์‚ฌ์ „ ๋“ฑ๋ก๋œ ๋‘ ์ž„๊ณ„ยป๊ฐ€ ยซ๋‘˜ ๋‹คยป ๋ฐœํ™”ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ ํ•˜๋‚˜๋‹ค โ€” ์˜๋ฌดํ™” ํšŒ์ฐจ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ธฐ ยซ์ „ยป์— AGENTS.md ์— ๋“ฑ๋กํ–ˆ๊ณ , โ˜…๊ทธ ๋ฌธ์„œ๊ฐ€ ์ •ํ•œ ์žฌ์ธก ์‹œ์ (ใ€Œ2026-09-04 ์ดํ›„ ์—ด ๋ฒˆ์งธ ์ฐฉ์ง€ ํšŒ์ฐจใ€)์— ์‹ค์ œ๋กœ ๋„๋‹ฌํ–ˆ๋‹ค(์‹ค์ธก 11). โ˜…โ’œ ๋ฏธ์ž‘์„ฑ: ์ฐฝ b3a4cf4..origin/main first-parent 15๊ฑด ์ค‘ 1๊ฑด(6.7%) โ€” ์ž„๊ณ„ โ‰ฅ2 ๋ฏธ๋‹ฌ. โ˜…๊ทธ 1๊ฑด์€ ๊ทœ์•ฝ๋ณด๋‹ค ๋จผ์ € ๊ฐˆ๋ผ์ง„ PR #13(createdAt 2026-08-23 โ†” ๊ทœ์•ฝ ์ฐฉ์ง€ 2026-08-26 ยท โ˜…์ธ์šฉ์ด ์•„๋‹ˆ๋ผ ์‹ค์ธก) โ‡’ โ˜…๊ทœ์•ฝ์„ ยซ์•Œ ์ˆ˜ ์žˆ์—ˆ๋˜ยป ํšŒ์ฐจ๋งŒ ๋ณด๋ฉด 0 / 14 = 100%. โ˜…โ’ ์—ด๋ฆฐ ์นด๋“œ: .json 15 ยท 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 ์•„๋‹˜ ยท ๋“ฑ์žฌ repo contracts/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(๊ฒ€์‚ฌ๊ธฐยทํฌ๋ก ยท์›Œํฌํ”Œ๋กœ) ยท .rs 0์ค„ ยท โ˜…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-base af4f6f8)๋Š” upstream ยซ์‹ ๊ทœยป ํŒŒ์ผ์—์„œ, S8 ๋ˆ„์  8 ยท ๋ธํƒ€ +8(base 3fb08a8 ยท merge-base ba5797b)์€ ์ „ ํŠธ๋ฆฌ ๊ฐœ๋ช…์—์„œ ์™”๋‹ค โ‡’ ๊ฒฝ๋กœ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์„ ๋†“์นœ๋‹ค. โ˜…์ž„๊ณ„ 20 ๊ทผ๊ฑฐ: ์•„๋ž˜๋กœ๋Š” 7์ปค๋ฐ‹ ํฌํ™”์ , ์œ„๋กœ๋Š” 33 ์ด ๋ฏธ์ธก์ • ๊ตฌ์—ญ ์ž…๊ตฌ. โ˜…โ˜…**[์ •์ •] ์ดˆํŒ์˜ ใ€Œ์‹ค์ œ๋กœ ์•„ํŒ ๋˜ ๊ฐ’ใ€์€ ยซ์ง€์› ๋‹คยป** โ€” ๊ทธ๊ฒƒ์€ ์ด ํŒ์ • ์ž์‹ ์ด ยซ๊ธˆ์ง€ํ•œยป ๋…๋ฒ•(8ํšŒ์ฐจ๋ฅผ ๊ฒฉ์ฐจ์˜ ๋น„์šฉ์œผ๋กœ ์ฝ๋Š” ๊ฒƒ)์ด๋ผ ์ž๊ธฐ๋ชจ์ˆœ์ด์—ˆ๋‹ค. โ˜…โ˜…**ใ€Œ20ใ€์€ ๋ฐด๋“œ(733) ์•ˆ์—์„œ ยซ๊ณ ๋ฅธยป ์ˆ˜๋‹ค** โ€” ๋ฐด๋“œ๋Š” ์‹ค์ธก์ด๊ณ  ๊ทธ ์•ˆ ๋ˆ„์ ์ด 16โ†’17โ†’17โ†’17โ†’19 ๋กœ ํ‰ํ‰ํ•˜๋‹ค. ์‹ค์ธก ๋„๋‹ฌ ์ค‘์•™ 44์ผ(โ˜…์ƒ์ˆ˜ ์ธ์šฉ ๊ธˆ์ง€ โ€” ์žฌ์ธก 41์ผ ยท ์ฐฝ ์ •์˜ ยฑ3์ผ ยท ๊ฒฐ๋ก  ์˜ํ–ฅ 0) โ‡’ **์—ฐ 68ํšŒ** ยท ํšŒ์ฐจ๋‹น ์ถฉ๋Œ(์ •๋ณธ ๋ˆ„์ ) ์ค‘์•™ 2.5 ยท ๊ฒŒ์ดํŠธโ‘ก ์‚ฌ์ดํด 8ํšŒ์ฐจ ์ค‘ 7ํšŒ๊ฐ€ 1. โ˜…๋ฐฉ์•„์‡  = ๊ธฐ๊ณ„๊ฐ€ ยซ์žฌ๊ณ ยป ์‚ฌ๋žŒ(์ด๊ด„)์ด ยซ๋ฐœ๊ถŒยป โ€” ์žฌ๋Š” ์ž๋ฆฌ ๊ถŒ๊ณ ๋Š” ์ด repo ์˜ ์˜ˆ์•ฝ ์›Œํฌํ”Œ๋กœ(์„ ๋ก€ rust-audit.yaml), ๋Œ€์•ˆ bin/healthcheck ๋Š” orchestrator ์†Œ๊ด€์ด๋ผ ๋ณ„๊ฑด. โ˜…๊ตฌํ˜„์€ ์ด ํšŒ์ฐจ๊ฐ€ ํ•˜์ง€ ์•Š์•˜๋‹ค. โ˜…์žฌ์ธก์ • ์กฐ๊ฑด(3ํšŒ์ฐจ ๋’ค ยท ์ถฉ๋Œ ์ค‘์•™ โ‰ฅ5 ๋ฉด ์ž„๊ณ„ ๋‚ด๋ฆฌ๊ณ  ยท ๋„๋‹ฌ ๊ฐ„๊ฒฉ โ‰ค14์ผ์ด๋ฉด ์˜ฌ๋ฆฐ๋‹ค)์„ ยง5-B ์— ์˜ค๋Š˜์˜ ๊ฐ’๊ณผ ํ•จ๊ป˜ ๋ฐ•์•˜๋‹ค. โ˜…โ˜…**ใ€Œ์˜ค๋ž˜๋๋‹คใ€๋Š” ์žฌ๊ฐœ ์‚ฌ์œ ๊ฐ€ ์•„๋‹ˆ๋‹ค โ€” ์ด ์ถ•์€ ยซ์‹œ๊ฐ„ยป์ด ์•„๋‹ˆ๋ผ ยซ๊ฒฉ์ฐจยป๋กœ ์—ด๋ฆฐ๋‹ค.** โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #29 โ€” โ˜…โ˜…**--merge ์ฐฉ์ง€**(โ˜…--squash ์•„๋‹˜ ยท ๋“ฑ์žฌ repo contracts/upstream-sync-repos.conf:22). ๋จธ์ง€์ปค๋ฐ‹ sha ๋Š” ํšŒ์‹  merged: ์ฐธ์กฐ. โ˜…๊ฒŒ์ดํŠธโ‘ก 3ํšŒ์ฐจ ๋งŒ์— approve(์ดˆํŒ โ†’ fix โ†’ fix2) โ€” โ˜…๋ฐ˜๋ ค ๋‘˜์ด ๋ชจ๋‘ ยซ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์—ˆ๋Š”๊ฐ€ยป์˜€๋‹ค: โ‘ดbaseยท(๋ธํƒ€/๋ˆ„์ ) ๋ณ‘๊ธฐ ์—†์ด ๊ธฐ์ค€์„ ์„ž์—ˆ๋‹ค โ‘ต๊ทธ ์ •์ •์ด ยซํ‘œยป์—๋งŒ ๋‹ฟ๊ณ  ยซ์‚ฐ๋ฌธยทsummaryยป๋กœ ์ „ํŒŒ๋˜์ง€ ์•Š์•˜๋‹ค. โ‡’ โ˜…**ใ€Œํ‘œ๋ฅผ ๊ณ ์ณค๋‹ค๊ณ  ๋ฌธ์„œ๊ฐ€ ๊ณ ์ณ์ง„ ๊ฒƒ์ด ์•„๋‹ˆ๋‹คใ€๊ฐ€ ์ด ๋ฆฌ๋‹ˆ์ง€๊ฐ€ ๋‚จ๊ธด ๊ทœ์œจ์ด๋‹ค. โ˜…๋ถ€๋ชจ #27ยท#28 ์ฐฉ์ง€๋กœ ๋‘ ๋ฒˆ CONFLICTING ์ด ๋๊ณ  ๊ทธ๋•Œ๋งˆ๋‹ค ๋จธ์ง€๋กœ ํ•ด์†Œํ–ˆ๋‹ค(๋งˆ์ง€๋ง‰์€ REPORT.md 1๊ฑด) โ€” โ˜…์ถฉ๋Œ ์ค‘์—๋Š” pull_request ๊ฒ€์‚ฌ๊ฐ€ ยซ๊ตฌ์กฐ์ ์œผ๋กœยป ๋ชป ๋ˆ๋‹ค**(๊ฒ€์‚ฌ 1๊ฑด โ†’ 10๊ฑด์œผ๋กœ ํ™•์ฆ).
  • [rustjava-dod-ci-parity-sibling-repo-survey] โ˜…โ˜…ํ˜•์ œ repo(wieยทqts) ํŒŒ๋ฆฌํ‹ฐ ๋ฝ ํ•„์š”์„ฑ ยซ์กฐ์‚ฌ+ํŒ์ •ยป โ€” ๋‘˜ ๋‹ค ยซโ’ž ์กฐ๊ฑด๋ถ€ ํ•„์š”ยป. ์ฑ„ํƒ ์ œ์•ˆ 2026-09-04-dod-ci-parity-lock#p1. โ˜…์ฝ๊ธฐ ์ „์šฉ(ํ˜•์ œ repo gitยท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: ํŒŒ์„œ๋„ ๋ชป ๋ณธ๋‹ค. โ˜…โ˜…๊ทธ๋Ÿฐ๋ฐ ์–ด๊ธ‹๋‚จ์€ ยซ๋‘˜ ๋‹ค ์‹ค์žฌยปํ•œ๋‹ค โ€” ์ด๋ ฅ์œผ๋กœ ์Ÿ€๋‹ค: wie rust.yml ์‹คํŒจ 34๊ฑด ์ „์ˆ˜ ์ค‘ โ˜…beta ์…€์—์„œ๋งŒ ์‹คํŒจํ•œ clippy 9๊ฑด(26%) ์ธ๋ฐ four gates ์— cargo +beta ๊ฐ€ ์—†๋‹ค(๋ฌธ์ž์—ด beta ๊ทœ๋ฒ” ๋ฌธ์„œ 0๊ฑด) ยท qts ci.yml ์ตœ๊ทผ ์‹คํŒจ 60๊ฑด ์ „์ˆ˜ ์ค‘ โ˜…**uv run ruff format --check . ยซ๋งŒยป ์‹คํŒจ 10๊ฑด(17%)** ์ธ๋ฐ make lint ๋Š” ์•ˆ ์นœ๋‹ค (๋ฌธ์ž์—ด format ๊ทœ๋ฒ” ๋ฌธ์„œ 0๊ฑด). โ‡’ โ˜…๋จผ์ € ํ•  ์ผ์€ ๋ฝ์ด ์•„๋‹ˆ๋ผ ยซ๊ฐ ํ•œ ์ค„ยป โ€” ๊ทธ ๋‹ค์Œ์ด ํฌํŒ…์ด๋‹ค. ๋‹ค์Œ ํ‹ฐ์ผ“ 3๊ฑด(T1ยทT2ยทT3)์˜ ์ถ•๊ณผ ํ•ฉ๊ฒฉ์„ ๋งŒ ์ ์—ˆ๋‹ค(๋ฐœ๊ถŒ์€ ์ด๊ด„ ๋ชซ). โ˜…โ˜…์ผ๋ฐ˜ ์‚ฌ์‹ค: ์„ธ repo ๊ฐ€ ์ „๋ถ€ ์ด ์–ด๊ธ‹๋‚จ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๊ณ  ์–ด๊ธ‹๋‚œ ์ž๋ฆฌ๊ฐ€ ์ „๋ถ€ ๊ทœ๋ฒ” ๋ฌธ์„œ์— ์—†์—ˆ๋‹ค โ€” ใ€Œ์‚ฌ๋žŒ์ด ๋ฌธ์„œ๋ฅผ ์ตœ์‹ ์œผ๋กœ ์œ ์ง€ํ•œ๋‹คใ€๊ฐ€ ์„ธ repo์—์„œ ๊ฐ๊ฐ ์‹คํŒจํ–ˆ๋‹ค. โ˜…์ด repo ๊ฒ€์‚ฌ๊ธฐยทrust.ymlยทDoD ๋ธ”๋ก ๋ฌด์ ‘์ด‰ ยท .rs 0์ค„. โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #28 โ€” โ˜…โ˜…**--merge ์ฐฉ์ง€**(โ˜…--squash ์•„๋‹˜ ยท ๋“ฑ์žฌ repo). ๋จธ์ง€์ปค๋ฐ‹ sha ๋Š” ํšŒ์‹  merged: ์ฐธ์กฐ. โ˜…๋ถ€๋ชจ #27 ์ฐฉ์ง€๋กœ CONFLICTING ์ด ๋๊ณ  ยซํ•ด์†Œ ํšŒ์ฐจยป๊ฐ€ ๋ณ„๋„๋กœ ๋Œ์•˜๋‹ค โ€” ์ถฉ๋Œ STATE.md 1๊ฑด ยท โ˜…ํŒ๋‹จ ํ•„์š” hunk 0(๋‘ ํŒ๋ณธ 16์ค„ ์ค‘ 15์ค„ ๋ฐ”์ดํŠธ ๋™์ผ ยท ์ฐจ์ด๋Š” ยซ์ฐฉ์ง€ ์ƒํƒœยป๋ฟ) ยท ์Šน์ธ ๋‚ด์šฉ ๋ฌด์ ‘์ด‰ ยท โ˜…โ˜…๊ฒ€์‚ฌ ยซ1๊ฑด โ†’ 10๊ฑดยป ์ „๊ฑด ์„ฑ๊ณต(์ถฉ๋Œ ์ค‘์—๋Š” pull_request ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ยซ๊ตฌ์กฐ์ ์œผ๋กœยป ๋ชป ๋ˆ๋‹ค โ€” ๊ทธ ๊ธฐ์ „์ด ํ•ด์†Œ๋กœ ํ™•์ฆ๋๋‹ค). โ˜…์žฌ๊ฒ€์€ ์ด๊ด„์ด ยซ๊ฑด๋„ˆ๋›ด๋‹คยป๋กœ ํŒ์ •(์› ๊ฒŒ์ดํŠธโ‘ก ํ•€ 5c2ed7bc ยท ํ•ด์†Œ ํ›„ head 8ab6bb16).
  • [rustjava-dod-ci-parity-cross-product-decision] โ˜…โ˜…ํŒŒ๋ฆฌํ‹ฐ ๋ฝ ยซ๊ต์ฐจ๊ณฑยป ํ™•์žฅ ยซํŒ์ •ยป โ€” ๊ฒฐ๋ก : ๋„“ํžˆ์ง€ ยซ์•Š๋Š”๋‹คยป. ์ฑ„ํƒ ์ œ์•ˆ 2026-09-04-dod-ci-parity-lock#p0. โ˜…๊ฒ€์‚ฌ๊ธฐ ๋กœ์ง ๋ณ€๊ฒฝ 0 ยท .rs 0์ค„ ยท rust.yml ๋ฌด์ ‘์ด‰ ยท DoD ๋ธ”๋ก ๋ฌด์ ‘์ด‰. โ˜…๋น„์šฉ์„ ยซ๋จผ์ €ยป ์Ÿ€๋‹ค(์ถ”์ • 0): ๋ฌด๋ณ€๊ฒฝ ์žฌ์‹คํ–‰ 19s โ†’ 38s = 2.00ร— โ†” โ˜…์†Œ์Šค 1์ค„ ํŽธ์ง‘ ํ›„ 89s โ†’ 326s = 3.66ร—. โ‡’ โ˜…์ œ์•ˆ ๋ฌธ๋ฉด์˜ ใ€Œ๋‘ ๋ฐฐใ€๋Š” ยซ๋ฌด๋ณ€๊ฒฝยป์—์„œ๋งŒ ์ฐธ์ด๊ณ  ํšŒ์ฐจ๊ฐ€ ๊ฒช๋Š” ์ผ€์ด์Šค๋Š” 3.66๋ฐฐ๋‹ค. ์ง€๋ฐฐํ•ญ = cargo +beta test --all 215s(๊ฐ™์€ ํŽธ์ง‘์—์„œ stable test 66s ์˜ 3.3๋ฐฐ) ยท ์ฝœ๋“œ 1ํšŒ +171s. โ˜…๋ˆ์ด ์•„๋‹Œ ๋น„์šฉ ๋‘˜: โ‘ดrustfmt ๊ฐ€ beta ์— ๋ฏธ์„ค์น˜๋ผ cargo +beta fmt ๋Š” ์˜ค๋Š˜ ๊ทธ๋Œ€๋กœ rc=1 โ‘ตโ˜…ํˆด์ฒด์ธ ๊ต๋Œ€ ์ถ•์ถœ์€ ยซ์—†๋‹คยป(beta 3์ค„ ์งํ›„ stable clippy 2s ยท test 25s) โ€” ์‹œ๊ฐ„์ด ์•„๋‹ˆ๋ผ ๋””์Šคํฌ๋ฅผ ์“ด๋‹ค(target 46G). โ˜…์‹ค์ต์€ ยซ๋”ฐ๋กœยป ์Ÿ€๋‹ค: 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 job dod_parity. โ˜…5ํšŒ์ฐจ ๋ฆฌ๋‹ˆ์ง€์˜ ์ƒ์ˆ˜๋ฅผ ยซ์‚ฌ๋žŒ ์†ยป์—์„œ ๋บ๋‹ค. โ˜…โ˜…์„ค๊ณ„ ์ œ์•ฝ์„ ๋จผ์ € ์ง€์ผฐ๋‹ค โ€” ยซ๋‚ก์€ ๋ฌธ์ž์—ด ์Šค์บ๋„ˆยป๋ฅผ ๋งŒ๋“ค์ง€ ยซ์•Š์•˜๋‹คยป. ๊ฒŒ์ดํŠธโ‘ก ๊ฒ€์ˆ˜์ž๊ฐ€ ์‹ค์ธก์œผ๋กœ ใ€ŒF1 ์€ ยซ์ˆ˜ยป๊ฐ€ ์•„๋‹ˆ๋ผ ยซ๋งยป์ด๋ผ ๋ฌธ์ž์—ด ๊ฒ€์‚ฌ๊ธฐ๋กœ๋„ ์•ˆ ์žกํžŒ๋‹คใ€๋ฅผ ์„ธ์› ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. โ‡’ ๋ฌธ์„œ์˜ ยซ๋ฌธ์žฅยป์ด ์•„๋‹ˆ๋ผ โ˜…๋ฌธ์„œ๊ฐ€ ํ‹€๋ฆฌ๋Š” ยซ์›์ธยป(๋‘ ์ง‘ํ•ฉ์ด ๊ฐˆ๋ฆฐ ๊ฒƒ)์„ ์žก๋Š”๋‹ค โ€” CLAUDE.md DoD ์ฝ”๋“œ๋ธ”๋ก๊ณผ 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 ยท allow 9๊ณณ ๋ฌด์ ‘์ด‰ ยท upstream ๋ฌด์ ‘์ด‰. โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #26 โ€” โ˜…โ˜…**--merge ์ฐฉ์ง€**(โ˜…--squash ์•„๋‹˜ ยท ๋“ฑ์žฌ repo). ๋จธ์ง€์ปค๋ฐ‹ sha ๋Š” ํšŒ์‹  merged: ์ฐธ์กฐ. โ˜…์ฐฉ์ง€ ํ›„ ๋ฐ˜์‚ฌ์‹ค ํ™•์ธ: origin/main..upstream/main = 0 ์œ ์ง€(์Šค์ฟผ์‹œ์˜€์œผ๋ฉด ๊ณ„๋ณด๊ฐ€ ์ ‘ํ˜€ ๋‹ค์‹œ ๋ฒŒ์–ด์ง„๋‹ค) ยท โ˜…**origin/main ์—์„œ ์‹ ์„ค job dod_parity success** ํ™•์ธ.
  • [rustjava-sync-contract-standing-clause-for-our-assets-going-stale] โ˜…**ใ€Œ์šฐ๋ฆฌ ์ž์‚ฐ์ด ๋‚ก๋Š”๋‹คใ€ ์ƒ์‹œ ์กฐํ•ญ ยซํŒ์ •ยป โ€” ๊ฒฐ๋ก : โ˜…โ˜…๋„ฃ์ง€ ยซ์•Š๋Š”๋‹คยป. ๋Œ€์‹  ยซ๊ตฌ๋ฉ ํ•˜๋‚˜ยป(๋กœ์ปฌ DoD ๊ฐ€ CI ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์žฌํ˜„ํ•˜์ง€ ์•Š๋˜ ๊ฒƒ)๋ฅผ ๋ง‰์•˜๋‹ค.** โ˜…์ฝ”๋“œ(.rs) ๋ณ€๊ฒฝ 0 ยท ๊ทœ๋ฒ” ๋ฌธ์„œ 2 + ๊ธฐ๋ก ๋ฌธ์„œ 4. โ˜…๋จผ์ € ์…Œ๋‹ค(๋ชฉ๋ก ๋ฌธ์„œํ™”๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์•˜๋‹ค): ์ž์‚ฐ 8๊ฑด์„ ๋Œ์—ฐ๋ณ€์ด๋กœ ๊นจ๋œจ๋ ค ๋ฌด์—‡์ด ์žก๋Š”์ง€ ์Ÿ€๋‹ค โ€” ๊ฒฝ๋กœ ๋ฌธ์ž์—ดยทsetProperty ์„œ์ˆ ์žยทcharset ๋ผ์šฐํŒ…ยทClassFormatError ๋‹จ์ •์€ cargo test RED ยท ์ˆ˜๋™ span ์€ clippy RED ยท double_must_use allow ๋Š” ๊นจ์ ธ๋„ ๋ฌดํ•ด ยท ์›Œํฌ๋กœ๊ทธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋กœ์ปฌ+CI ๋‘˜ ๋‹ค. โ‡’ โ˜…โ˜…**[๊ฒŒ์ดํŠธโ‘ก ์ •์ •] ใ€Œ์•„๋ฌด๊ฒƒ๋„ ์—†์Œใ€์€ ยซ1๊ฐœยป๊ฐ€ ์•„๋‹ˆ๋ผ ยซ2๊ฐœยป(โ‘ก CI --exclude ยท โ‘ฆ double_must_use allow) โ€” ์ดˆํŒ์ด โ‘ฆ์„ ยซ๋น„ํ•˜์ค‘ยป ์ž๋ฆฌ(์ค‘๋ณต 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.md DoD ๊ฐ€ ์ด์ œ โ˜…CI ๋ช…๋ น 5์ค„ + toolchain ์ถ• 1์ค„ = ยซ6์ค„ยป์„ ์ถ•์•ฝ ์—†์ด ์‹ฃ๋Š”๋‹ค(โ˜…[๊ฒŒ์ดํŠธโ‘ก ์ •์ •] ใ€Œ5์ค„ใ€์€ ๊ณ„์ˆ˜ ยซ1ยป ์‹œ์ ˆ ์ˆ˜๋‹ค โ€” ๋น ์ง„ ๊ฒƒ์€ ยซ์ค„ ํ•˜๋‚˜ยป๊ฐ€ ์•„๋‹ˆ๋ผ ยซ๋‘ ์ถ•ยป์ด์—ˆ๋‹ค). โ˜…โ˜…**[ํ›„์† ์ •์ •] ๊ทธ ยซ6์ค„ยป๋„ ๋‚ก์•˜๋‹ค โ€” ํŒŒ๋ฆฌํ‹ฐ ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ๋”ํ•ด์ ธ ยซ7์ค„ยป์ด๋‹ค.** โ‡’ โ˜…์ด์ œ ์ค„ ์ˆ˜๋ฅผ ๋ฌธ์žฅ์— ์ ์ง€ ์•Š๋Š”๋‹ค: scripts/check-dod-ci-parity.py(CI job dod_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์ž๋ฆฌ๋งŒ ๋๋‹ค โ‘ต์›Œํฌ๋กœ๊ทธ .json verification ์ด โ˜…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์ž๋ฆฌ ยท json title ยท ใ€Œ์ฑ„ํƒ ์ œ์•ˆ ๋‘˜ใ€ 3์ž๋ฆฌ) + โ˜…PR ์ œ๋ชฉ๊นŒ์ง€ ๋™๊ธฐ. โ‘ถโ˜…**ยซ5๊ฑด์งธยป๋ฅผ ์Šค์Šค๋กœ ์ฐพ์•˜๋‹ค**(changes[0]) โ€” โ˜…ํ•„ํ„ฐ ๊ฑธ๋ฆฐ sweep ์ด ยซ๊ฑฐ์ง“ 0ยป์„ ๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ณ (zsh ๋‹จ์–ด๋ถ„ํ• ), ๊ทธ ๊ตํ›ˆ์„ ยง4 ๋งˆ๊ฐ ์ ˆ์ฐจ 4๋ฒˆ์œผ๋กœ ๋ฐ•์•˜๋‹ค. โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #25 โ€” โ˜…โ˜…**--merge ์ฐฉ์ง€**(โ˜…--squash ์•„๋‹˜ ยท ๋“ฑ์žฌ repo contracts/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-base ba5797b โ†’ bd42427 ยท behind โ˜…12 โ†’ 0** ยท ๋ถ€๋ชจ 2๊ฐœ โ‡’ โ˜…โ˜…upstream ์„ ยซ์™„์ „ํžˆยป ๋”ฐ๋ผ์žก์•˜๋‹ค. ์ฐฉ์ˆ˜ ์žฌ์ธก์ •(์‹  ์„œ์‹): ๋ˆ„์  8 ยท ๋ธํƒ€ +8(base 3fb08a8 ยท merge-base ba5797b) โ€” ใ€Œ์žฌ์„œ 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 ๊ฐ€ tracing 0.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-base 95ebc5c โ†’ ba5797b ยท behind 13 โ†’ 12 ยท ๋ถ€๋ชจ 2๊ฐœ** โ‡’ โ˜…โ˜…๊ณ„ํš 7ํšŒ์ฐจ(S1~S7) ์™„์ฃผ. ์ฐฉ์ˆ˜ ์žฌ์ธก์ •(์‹  ์„œ์‹): ์ปท ba5797b = ๋ˆ„์  1 ยท ๋ธํƒ€ +1(base 3e02f8c ยท merge-base 95ebc5c). โ˜…string.rs ๋Š” ์ง‘ํ•ฉ์—์„œ ๋น ์กŒ๋‹ค(S6 ํ•ด์†Œ ๋’ค upstream ๋ฌด์ ‘์ด‰) โ‡’ โ˜…๋ˆ„์ ์€ ์ค„์–ด๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. โ˜…โ˜…**thread.rs ๋Š” ยซ์ง๊ตยป์˜€๋‹ค** โ€” upstream(+23/โˆ’10)์€ invoke_virtual ์— ยซ์„ ์–ธ ํด๋ž˜์Šคยป ์ธ์ž๋ฅผ ๋”ํ•˜๊ณ  ์šฐ๋ฆฌ(+50/โˆ’42, ์˜๋ฏธ 3์ค„ + ๋“ค์—ฌ์“ฐ๊ธฐ)๋Š” ๊ทธ ํ˜ธ์ถœ๋“ค์„ ๊ฐ์‹ธ๋Š” ์ˆ˜๋™ span(PR #4)์ด๋‹ค โ‡’ ์šฐ์—ด ํŒ์ • ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ผˆ๋Œ€๋กœ upstream ์ƒˆ ์ธ์ž 3๊ณณ์„ ์–น์—ˆ๋‹ค(S1ยทS3ยทS4 ์™€ ๊ฐ™์€ ์ „๋žต ยท 4ํšŒ์งธ). โ˜…โ˜…**ใ€Œ์ถฉ๋Œ 0์œผ๋กœ ๋“ค์–ด์˜จใ€ ํŒŒ์† 4ํšŒ์งธ ยท โ˜…์ถ•์€ ยซ์ฒ˜์Œยป: upstream ์ด ยซ๊ณต์šฉ API ์‹œ๊ทธ๋‹ˆ์ฒ˜ยป๋ฅผ ๋ฐ”๊ฟ” โ˜…์šฐ๋ฆฌ ๊ณ ์œ  ํ…Œ์ŠคํŠธ 5๊ณณ์ด ๊ตฌ์‹ 4์ธ์ž๋กœ ๋‚จ์•„ ์ปดํŒŒ์ผ ์‹คํŒจ(E0061ร—5). ์šฐ๋ฆฌ ์ค„์ด๋ผ ์ถฉ๋Œ์ด ยซ๋‚  ์ˆ˜๊ฐ€ ์—†๋‹คยป โ‡’ โ˜…์•ž ์„ธ ๋ฒˆ(์‹ ๊ทœ ํŒŒ์ผ)๊ณผ ยซ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅยป์ด๊ณ , ์žก์€ ๊ฒƒ์€ ยซ์ปดํŒŒ์ผยป์ด๋‹ค.** upstream ๊ด€์šฉ๊ตฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์ฑ„ํƒ(&x.class_definition().name() ยท "java/lang/String") ยท ๋‹จ์–ธ ๋ฌด์ ‘์ด‰. green: stable 4์ข… + beta 2์ข… rc=0 ยท 554 / 0 / 1(baseline 554 โ†’ โ˜…์ฆ๊ฐ 0 ์ด๊ณ  ๊ทธ๊ฒƒ์ด ๋งž๋‹ค โ€” upstream ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜๋„ 547 โ†’ 547 = ์Šค์œ•์ด์ง€ ์ถ”๊ฐ€๊ฐ€ ์•„๋‹ˆ๋‹ค) ยท #[ignore] 1 โ†’ 1 ยท ๋‹จ์–ธ ์‚ญ์ œ 0. โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #23 โ€” โ˜…โ˜…**--merge ์ฐฉ์ง€**(โ˜…--squash ์•„๋‹˜ ยท ๋“ฑ์žฌ repo). ๋จธ์ง€์ปค๋ฐ‹ sha ๋Š” ํšŒ์‹  merged: ์ฐธ์กฐ. โ˜…โ˜…S1~S7 ์ปท ์กฐ์ƒ 7/7 โ‡’ S4 ์˜ ใ€Œ์ „๊ฑด NO(์Šค์ฟผ์‹œ 3ํšŒ๊ฐ€ ์กฑ๋ณด๋ฅผ ์›์ ์œผ๋กœ)ใ€ ๋ฐ˜๋Œ€ํŽธ์„ ์ฝ”๋“œ ํšŒ์ฐจ 3์—ฐ์†์œผ๋กœ ์ง€์ผฐ๋‹ค. โ˜…๋‚จ์€ behind 12 ๋Š” ยซ๊ฐœ๋ช… ์Šค์œ•ยป ๊ตฌ๊ฐ„์ด๊ณ  S8 ๋ชซ(์ด๊ด„ ๋ณด๋ฅ˜๋ถ„ โ€” ์ด ํšŒ์ฐจ๋Š” ์ง‘ํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค).
  • [rustjava-upstream-sync-s6-cut-95ebc5c] โ˜…upstream ์ปท 95ebc5c(regexยทFormatterยทLocale ยท 11์ปค๋ฐ‹) ๋จธ์ง€ โ€” ์ถฉ๋Œ 1 ํ•ด์†Œ. โ˜…**merge-base c4665b0 โ†’ 95ebc5c ยท behind 24 โ†’ 13 ยท ๋จธ์ง€์ปค๋ฐ‹ ๋ถ€๋ชจ 2๊ฐœ**(๊ณ„๋ณด ๋ณด์กด). cargo test --all 554 passed / 0 failed / 1 ignored(S5 427 โ†’ +127) ยท stable 4์ข… + โ˜…beta 2์ข… rc=0. โ˜…โ˜…**ใ€ŒS6 ์ƒˆ ์ถฉ๋Œ 0ใ€ ์˜ˆ์ธก์€ ยซ๋ธํƒ€ยป์˜€๋‹ค โ€” ใ€Œํ’€ ๊ฒƒ์ด ์—†๋‹คใ€๊ฐ€ ์•„๋‹ˆ๋‹ค.** ๊ทธ 0 ์€ ์˜› base 8c1238b ์—์„œ ์žฐ ยซ์ƒˆ๋กœ ๋‚˜ํƒ€๋‚œ ํŒŒ์ผ ์ˆ˜ยป(๋ˆ„์  3 โ†’ 3)์ด๊ณ , ์ฐฉ์ˆ˜ ์žฌ์ธก์ •์€ ์ƒˆ base a0b5d3c(merge-base c4665b0)์—์„œ โ˜…๋ˆ„์  1์ด๋‹ค. string.rs ๋Š” S5 ์˜ ์„ค๊ณ„ ํŒ๋‹จ์œผ๋กœ ์šฐ๋ฆฌ ๋ถ„๊ธฐ(+8/โˆ’28)๊ฐ€ ๋‚จ์•„ upstream ์ด ๋งŒ์งˆ ๋•Œ๋งˆ๋‹ค(+402/โˆ’121) ๊ณ„์† ์—ด๋ฆฐ๋‹ค. โ‡’ โ˜…**ยง5 ์— ํ•œ ์ค„ ๋ณดํƒฐ๋‹ค: base ์™€ ยซํ•จ๊ป˜ยป ยซ๋ธํƒ€์ธ๊ฐ€ ๋ˆ„์ ์ธ๊ฐ€ยป๋„ ๋ฐํ˜€๋ผ.** ํ•ด์†Œ = import ๋ธ”๋ก ํ•ฉ์ง‘ํ•ฉ(์šฐ๋ฆฌ charset::Charset + upstream Formatterยท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-base 3296139c โ†’ c4665b0 ยท behind 30 โ†’ 24 ยท ๋จธ์ง€์ปค๋ฐ‹ ๋ถ€๋ชจ 2๊ฐœ**(๊ณ„๋ณด ๋ณด์กด). cargo test --all 427 passed / 0 failed / 1 ignored(S4 261 โ†’ +166) ยท green 4์ข… rc=0. โ˜…์ฐฉ์ˆ˜ ์‹œ ์žฌ์ธก์ •(ยง5 ์ƒ์‹œ ๊ทœ์น™ ยท base ๋‹น์‹œ main 1983d9f ยท merge-base 3296139c)์ด ์žฌ์ธก์ • ํ‘œ์™€ ์ผ์น˜. โ˜…โ˜…์˜ˆ์ธก 3๊ฑด ์ค‘ 2๊ฑด ์ ์ค‘ ยท 1๊ฑด ๋ฐ˜์ฆ: โ‘ดCargo.lock ์žฌ์ƒ์„ฑ โ‘ตstring.rs ์„ค๊ณ„ ํŒ๋‹จ์ด ๋งž์•˜์œผ๋‚˜ ยซํ˜•ํƒœยป๊ฐ€ ๋‹ฌ๋ž๋‹ค โ€” upstream ์ด copyValueOf 2์ข…์„ ์‹ ์„คํ•˜๋ฉฐ 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์ค„์ธ๋ฐ NoSuchMethodError 3๊ฑด. ์„œ์ˆ ์ž๋งŒ ๋งž์ท„๋‹ค(โ˜…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/main 12์ปค๋ฐ‹ ยท โ“’ ๋ˆ„์  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: ์ฐธ์กฐ.
  • [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์…€ ๋นŒ๋“œ) ยท python3 shell-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 ์Šค์ฟผ์‹œ ๋จธ์ง€ โ†’ main 4bb796d(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 ์Šค์ฟผ์‹œ ๋จธ์ง€ โ†’ main 11ef501(2026-08-26). โ˜…์ฐฉ์ง€ ์ „ base ๋ฅผ main ์œผ๋กœ ๋‹น๊ฒจ #14(beta clippy)๋ฅผ ๋“ค์—ฌ์™€ CI red ๋ฅผ ํ’€์—ˆ๋‹ค(ํ•€ eaa5668 rc=1 CI_RED โ†’ df3b04a rc=0 CI_GREEN).
  • [rustjava-worklog-json-proposals-convention] ํšŒ์ฐจ ์›Œํฌ๋กœ๊ทธ docs/worklog/ .md+.json ํ•œ ์Œ ๊ทœ์•ฝ ์ด์‹. โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #15 ์Šค์ฟผ์‹œ ๋จธ์ง€ โ†’ main b3a4cf4.
  • [rustjava-ci-beta-clippy-double-must-use-red] beta clippy double_must_use 13๊ฑด red ํ•ด์†Œ. โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #14 ์Šค์ฟผ์‹œ ๋จธ์ง€ โ†’ main dde85ce.
  • [rustjava-claude-md-prune] CLAUDE.md ํ”„๋ฃฌ(autonomous-sop ์‚ญ์ œ + Goal/Constraints/DoD ์‹ ์„ค). โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #8 ์Šค์ฟผ์‹œ ๋จธ์ง€ โ†’ main 00bddf3(2026-08-18). โ€ป๊ตฌํŒ ใ€Œ์ขŒ์ดˆ ์ค‘ใ€ ๊ธฐ์žฌ๋Š” ํ๊ธฐ.
  • [rustjava-upstream-sync-s1-tracing-cut-1f356ae] upstream ์ปท 1f356ae ๋จธ์ง€(์ถฉ๋Œ 2 ํ•ด์†Œ ยท tracing ์ถ• ยท System.setProperty ์„œ์ˆ ์ž ํŒŒ์† 1๊ฑด ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ). โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #11 ์Šค์ฟผ์‹œ ๋จธ์ง€ โ†’ main 6bfe97c(2026-08-17). โ€ป์›๊ฒฉ ๋ธŒ๋žœ์น˜๋Š” repo ์„ค์ • deleteBranchOnMerge=true ๋กœ ์ž๋™ ์‚ญ์ œ๋จ.
  • [rustjava-runtime-time-todo-impl] RuntimeImpl ์‹œ๊ฐ„ API todo!() 3๊ฑด ์ œ๊ฑฐ(now/sleep/yield) + test_utils r#yield ๊ตฌํ˜„ + tokio time ํ”ผ์ฒ˜ ์ถ”๊ฐ€ + ํšŒ๊ท€ ์ž ๊ธˆ ํ”ฝ์Šค์ฒ˜(test_data/TimeApi). โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #2 ์Šค์ฟผ์‹œ ๋จธ์ง€ โ†’ main 13ab950(2026-07-23), ๋ธŒ๋žœ์น˜ ์ •๋ฆฌ ์™„๋ฃŒ.
  • [rustjava-classfile-parse-error-propagation] ํด๋ž˜์ŠคํŒŒ์ผ ํŒŒ์‹ฑ ์‹คํŒจ๋ฅผ ํŒจ๋‹‰ ๋Œ€์‹  java.lang.ClassFormatError ๋กœ ์ „ํŒŒ(์ ˆ๋‹จ/๋งค์ง ๋ถˆ์ผ์น˜/๋ฏธ์ง€์› ์ƒ์ˆ˜ํ’€ ํƒœ๊ทธ ๊ตฌ๋ถ„). โ˜…๊ฒŒ์ดํŠธโ‘ข ์™„๋ฃŒ: PR #3 ์Šค์ฟผ์‹œ ๋จธ์ง€ โ†’ main 549b9eb(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 ๋‹ค.

  1. ์„ ํ–‰ ์‚ฌ์Šฌ(์นด๋“œ๊ฐ€ ํ‘œํ˜„ ๋ชป ํ•˜๋Š” ์œ ์ผํ•œ ๊ฒƒ): 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.
  2. ์ˆœ์„œ ์—†์Œ: 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.
  3. ์นด๋“œ ๋ฐ–: PR #81 โ€” CONFLICTING(2026-09-23 ์›Œ๋ฐ ํ›„ ์žฌ์กฐํšŒ) ยท ์ถฉ๋Œ ํ•ด์†Œ ์„ ํ–‰.

---- ์ดํ•˜ โ“ช(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 ์ œ๋ชฉยท๊ฐœ์„ค์ผ๋งŒ ๋ณด๊ณ  ์ผ๋‹ค๊ฐ€ ๋‘˜ ๋‹ค ํ‹€๋ฆฐใ€ ์„ ๋ก€๊ฐ€ ์ด ๋ ˆ์ธ์— ์žˆ๋‹ค):

  1. โ˜…โ˜…**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(์–ด๋Œ‘ํ„ฐ) โ†’ ํŒจํ‚ค์ง€** โ€” ๊ฒฐ์ •์ด ํŒจํ‚ค์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•œ๋‹ค.
  2. 2026-09-18-bootstrap-argument-index-and-tag#p0(S) โ€” ์ง์ „ ์ฐฉ์ง€ 1ec83a14(#73)์˜ ์Šน๊ณ„. ใ€Œ์ด๋ฏธ ์†์— ๋“  ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š”ใ€ ๋‚˜๋จธ์ง€ validation.rs ๊ทœ์น™์„ ์„ผ๋‹ค. โ˜…๊ณ„์ˆ˜ ํšŒ์ฐจ๋ผ ์œ„ํ—˜ 0 ์ด๊ณ  ๋‹ค์Œ ์ง„๋‹จ ํšŒ์ฐจ์˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•œ๋‹ค.
  3. 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๊ฑด์ด๋ผ ์ด ๋ ˆ์ธ์ด ์น  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๊ทธ๋ณด๋‹ค ์ ๋‹ค).
  4. โ˜…๊ฒŒ์ดํŠธโ‘ข ๋ฏธ์ฐฉ์ง€ 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 ๊ฐ€๋“œ ๋ถ€์žฌ โ†’ โ˜…ํ•ด์†Œ(์•„๋ž˜ 7๊ฑด ์ „๋ถ€ ยท 2026-09-11) ์œ ํšจ ์ž”์กด โ†’ ๋‹ซํž˜

โ˜…์œ ํšจ ์ž”์กด 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**(mergedAt 2026-08-18T19:26:08Z ยท ๋จธ์ง€์ปค๋ฐ‹ 00bddf3). head feat/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 ์ด ํ•œ ์นธ์”ฉ ์˜ฌ๋ผ์˜จ๋‹ค):

  1. rustjava-upstream-sync-s5 โ€ฆ -s7 โ†’ โ˜…โ˜…**[2026-09-11] ํ•ด์†Œ โ€” S5~S8 ์ „๊ฑด ์ฐฉ์ง€**(โ‘  ์ฐธ์กฐ). โ˜…๋ฐœ๊ถŒํ•˜์ง€ ๋งˆ๋ผ โ€” 2026-09-11 ์— ์‹ค์ œ๋กœ ์ค‘๋ณต ๋ฐœ๊ถŒ๋๋‹ค(rustjava-upstream-sync-s5-java12-api ยท blocked).
  2. rustjava-null-guard-string-init-and-arraycopy โ†’ โ˜…โ˜…**[2026-09-11] ํ•ด์†Œ โ€” โ€ฆ-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())์— ๋งž์ถ˜๋‹ค.
  3. rustjava-invokedynamic-cp-tags-15-18-support โ†’ โ˜…โ˜…**[2026-09-16] ์ ˆ๋ฐ˜ ํ•ด์†Œ โ€” ยซํŒŒ์† โ†’ ๊ฑฐ๋ถ€ยป ์นธ์„ ๋‹ซ์•˜๋‹ค** (rustjava-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 ์ด ๊ทธ ์ž๋ฆฌ์—์„œ ์ฆ๋ช…). โ‡’ โ˜…**ใ€Œํ•œ ํ‹ฐ์ผ“์œผ๋กœ ๋ฌถ๋Š”๋‹คใ€๋Š” ยซ์„ธ ์นธยป์ด์—ˆ๋‹ค**: โ’œ์ƒ์ˆ˜ํ’€ ํƒœ๊ทธ โ’opcode 0xba โ’ž์‹คํ–‰. โ’œโ’ ์ฐฉ์ง€ ยท โ’ž ๋ฏธ์ฐฉ์ˆ˜. โ˜…**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 ์ด ์—†๋‹คยปยทยซํฌ๋ ˆ์ดํŠธ ๊ฒฝ๋กœ jvm_rust/ยป ๋Š” ยซ๋‚ก์•˜๋‹คยป โ€” ์‚ฌ๋ฃŒ๋กœ ์ฝ์–ด๋ผ.** ๊ฒฝ๋กœ๋Š” jvm-bytecode/src/ ๋กœ ๊ฐœ๋ช…๋๊ณ , ํƒœ๊ทธ 1518 ์€ ํŒŒ์‹ฑ๋œ๋‹ค(์•„๋ž˜ 1๋ฒˆ). ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์€ ๋””์ฝ”๋” ์ถ•(3๋ฒˆ)๋ฟ์ด๋‹ค.

  1. โ˜…โ˜…**invokedynamic ยซ์‹คํ–‰ยป โ€” โ’œ ์ฐฉ์ง€ ยท โ˜…๋‚จ์€ ๊ฒƒ์€ โ’ ยซ์ฝœ์‚ฌ์ดํŠธ ๋งํฌยป๋ฟ**(โ‡ โ‘ข-3 ์˜ โ’ž ์นธ). โ˜…โ˜…**[2026-09-16 ๊ฐฑ์‹  ยท rustjava-invokedynamic-bootstrapmethods-and-methodhandle] โ’œ ๋ฅผ ๋‹ซ์•˜๋‹ค.** AttributeInfo::BootstrapMethods ๊ฐ€ Vec<u8> โ†’ Vec<BootstrapMethod>(JVMS 4.7.23 ๊ตฌ์กฐ) ยท MethodHandleRef(MethodHandleKind 9์ข… + 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 ๊ฐ€ ๊ทธ ์ถ•์„ ยซ๋‘ ์ธตยป์—์„œ ๋ฌธ๋‹ค. โ˜…๋ฏธ์ฐฉ์ˆ˜(= โ’): makeConcatWithConstants ๋Š” ๋งํฌ๋๋‹ค โ€” ๋‚จ์€ ๊ฒƒ์€ makeConcat ยท LambdaMetafactory ๋Ÿฐํƒ€์ž„ ยท java.lang.invoke ํŒจํ‚ค์ง€ ์‹ ์„ค. โ˜…โ˜…**[2026-09-23 ์žฌ์ธก] ์…‹ ์ค‘ ยซ๋‘˜์ด ๋‹ซํ˜”๋‹คยป** โ€” 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 ๋นˆ ์ถœ๋ ฅ).
  2. โ˜…โ˜…**[๋‹ซํž˜ 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 ํด๋ž˜์Šค ยท ldc 1,252,714 ์ž๋ฆฌ ยท 0๊ฑด ยท --release 21/25/26+preview 14์ข… ์†Œ์Šค 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 ํ–‰์„ ยซ์‹œํ—˜ํ•˜์ง€ ๋ชปํ•œ๋‹คยป โ€” ์ˆจ๊ธฐ์ง€ ์•Š๋Š”๋‹ค) ยท ์ด repo test-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๊ฐœ).
  3. โ˜…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.rs Opcode::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 ๋‘˜ ๋‹ค ๆœ‰
#13 [rustjava-upstream-sync-s2] โ€” โ˜…MERGED(2026-08-26T21:51:38Z โ†’ main 11ef501) 3๊ฒŒ์ดํŠธ ์™„์ฃผ
#8 ยท #14 ยท #15 โ€” 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)์€ ํ‹ฐ์ผ“์ด ๋ช…์‹œ ํ—ˆ๊ฐ€ํ•  ๋•Œ๋งŒ. ๊ธฐ๋ณธ์€ ์กฐํšŒ๋ฟ.