[rustjava-adopt-reject-duplicate-bootstrap-methods-p0] fix(classfile): 단일값 클래스 속성의 「개수 규칙」 — 진짜 JVM 이 거부하는 다섯에만 - #66
Merged
Conversation
…: 단일값 클래스 속성의 «개수 규칙» — 진짜 JVM 이 거부하는 다섯에만, 버전 게이트로
added 2 commits
September 18, 2026 01:49
…main 당김 — 원장 2파일 합집합 해소 충돌은 `STATE.md`·`REPORT.md` 상단 삽입 두 곳뿐(제품 코드 0). 양쪽 항목 전건 보존·시간순 합집합. 보존 증명: HEAD 추가 8/14줄 소실 0 · main 추가 11/11줄 소실 0 · 양측 삭제줄 부활 0 · 기여 불변 `--numstat` 양방향 정확 일치(14/0·8/0 ↔ 11/0·11/0).
Jun025
pushed a commit
that referenced
this pull request
Sep 17, 2026
…n 재당김 — 원장 2파일 합집합 해소(2회차) PR #66 착지로 base 가 다시 낡아 같은 원장 2파일에서 재충돌(계약 2-c 가 「상시」로 규정한 형태). 충돌 = `STATE.md`·`REPORT.md` 상단 삽입뿐 · 제품 코드 0. 보존 증명: HEAD 추가 24/46줄 소실 0 · main 추가 12/14줄 소실 0 · 양측 삭제줄 부활 0 · 기여 불변 `--numstat` 양방향 정확 일치. 동봉 고지는 재측값(범위 밖 픽스처 3 → 10장)으로 갱신.
Jun025
pushed a commit
that referenced
this pull request
Sep 18, 2026
…— 코드 2파일을 «각자 한 일»로 합친다 게이트③ 계약 2-c⒝ 로 머지 회차가 풀 수 없던 충돌 4파일(원장 2 + 코드 2)을 해소한다. base 뒤처짐 25 · 승인(pin acada3c)의 내용은 무접촉. ★충돌의 정체: 두 쪽이 «같은 함수에 각자 다른 일»을 했다. · ours(#67) = validate_class 의 8항 || 사슬을 «규칙마다 if» 로 쪼개 사유를 달았다(호출부 재구성) · theirs(#66, 착지) = 마지막 항의 술어 자체를 «일반화»했다 (at_most_one_bootstrap_methods_attribute → at_most_one_of_each_single_class_attribute, BootstrapMethods 는 그 판별자 3번으로 «포함»된다) ⇒ 한쪽을 취하면 다른 쪽이 죽는다. ours 의 구조를 취하되 마지막 항을 theirs 의 일반화 술어로 바꿨다. ★사유 문면도 규칙에 맞췄다(「multiple BootstrapMethods attributes」 → 「a single-valued class attribute appears more than once」) — 이 PR 자신의 교리 그대로다: 「규칙이 넓어지면 이름이 아니라 사유가 문면을 맞춘다」. 그 결과 ours 의 시험 단정도 같은 문면으로 따라갔다. ★tests/test_class_format.rs 는 theirs 판본에 ours 의 세 hunk(주석 2 + 새 시험 1)를 얹었다. ours 의 새 시험이 원래 붙어 있던 앵커를 theirs 가 지웠기 때문에 git 이 꼬리를 접었다. 함수 22개 = base 16 − theirs 제거 2 + theirs 추가 7 + ours 추가 1. ★삭제줄은 «부모별로» 판정했다(일괄 계약 금지): · theirs 에 있었는데 결과에 없는 것 = 두 파일 모두 «0» · ours 쪽 3건은 전부 «의도»다 — at_most_one_bootstrap_methods_attribute 는 theirs 가 일반화해 흡수했고, 지워진 시험 2개는 #61 회차가 «LambdaMetafactory 는 링크되지 않는다» 단언이 거짓이 되어 일부러 없앤 것으로 이미 main 에 반영돼 있다. 원장 2파일은 양쪽 다 남기기(합집합) · 기여 불변 --numstat 양방향 정확 일치. cargo test --all 584/0/1(해소 전 main 583 + 이 PR 의 새 시험 1) · 양측 핵심 시험 전건 ok.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
채택 제안
2026-09-16-reject-duplicate-bootstrap-methods#p0— 제목이 「Decide whether …」,이 회차가 지는 것은 판정이다. 제안은 「아무도 읽지 않는 속성엔 답이 «아니오»일 수 있다」고 추측했다.
판정: 다섯에 «예». 그리고 제안의 값 전제가 거짓이었다
제안의 기준만으로는 «아니오»가 나온다 — 기존 검사가 적은 기준(「중복이 하류에서 임의의 선택을
관측 가능하게 만드는가」)에 해당하는 속성은 소비자 전수 실측상
BootstrapMethods하나뿐이다.판정을 바꾼 것은 진짜 JVM 이다. OpenJDK 26.0.1 에 한 속성씩 물었다(런처 메시지는 원인을 가리므로
Class.forName으로 진단문을 받았다):SourceFile·InnerClasses·SourceDebugExtension·BootstrapMethodsClassFormatError: Multiple … attributesNestHost·NestMembersClassFormatErrorNestHostSynthetic⇒ 「오늘 로드되는 파일을 더 거부한다」는 그 다섯에 «거짓» — 그 파일들은 진짜 JVM 에서도 안 열린다.
그래서 «표»이고 «버전 게이트»다
아래 두 줄이 통제군 픽스처로 고정돼 있다 — 버전 게이트를 빼면
NestHost@52가,Synthetic을 넣으면그쪽이 red 가 된다(M1·M2).
양방향
M1 게이트 제거 → 통제군 red · M2
Synthetic추가 → 통제군 red ·M3
SourceFile한 칸 제거 → 그 픽스처만 red · M4 호출부 원복 → 다섯 red · 복원 17/0.대가
Synthetic배제는 JVM 하나의 행동에 걸려 있다.attribute.rs를 만졌다**(제안 target 은validation.rs뿐):SourceDebugExtension파싱 팔 한 줄로기존 dead variant 를 살렸다 — 없으면 중복이
Unknown에 섞여 구별 불가다.cargo test --all578 → 579 / 0 failed / 1 ignored · 버전 표 +7행 · DoD 7명령 rc=0.