Skip to content

[rustjava-adopt-cp-tag-passthrough-detectable-p1] docs(classfile): 「원인」을 실을 값은 있다 — 제안의 역사·책임·범위를 바로잡는다 - #56

Merged
Jun025 merged 5 commits into
mainfrom
decide/rustjava-classfile-error-cause
Sep 17, 2026
Merged

Jun025 merged 5 commits into
mainfrom
decide/rustjava-classfile-error-cause

Conversation

@Jun025

@Jun025 Jun025 commented Sep 16, 2026

Copy link
Copy Markdown
Owner

채택 제안 2026-09-16-cp-tag-passthrough-detectable#p1. 낱말이 Decide 다
⇒ ★코드 변경은 «틀린 주석 한 곳» 정정뿐이고 산출물은 판정과 근거다.

판정

★할 값이 있다. 단 제안의 «이름·이유·범위»가 셋 다 틀렸으므로 그대로 집행하면 안 된다.
★여기서 구현하지 않는다 — 제대로 하려면 validate_class 의 8항 || 사슬을 쪼개야 하고, 그것은 이 티켓이 금지한 리팩터다.

ⓒ 제안의 «역사»가 거짓이다 — 두 겹으로

제안의 말 실측
「carry a cause again」·「(cut 822504b)」 ★822504b 는 error.rs 를 «자르지» 않고 «만들었다»(new file · 지금과 동일한 2변형)
「Restoring…」 ★그 이전 ClassInfo::parse 는 Option<Self> — 실패에 정보 0(.unwrap() 투성이) ⇒ 그 커밋은 ★**«개선»이었다**
「needs upstream changes … fork … read-only」 ★upstream/main 기준 5커밋 뒤, 그중 이 파일들을 만지는 것 0건 · upstream 의 error.rs 접촉은 1건(생성) 뿐 · ★우리는 이미 이 crate 에서 constant_pool.rs +211/−6 · validation.rs +137/−0 · attribute.rs +129/−3 · opcode.rs +83/−7 로 갈렸다

※AGENTS.md 의 read-only 규율은 upstream 으로 «보내는 것» 을 금할 뿐, 로컬 변경을 금하지 않는다.

ⓑ 그런데 설계는 «한 enum 건너» 이미 증명돼 있다 — 이것이 「할 값 있다」의 근거

ClassDefinitionError::UnsupportedFeature(&'static str) 가 5곳에서 쓰이며 "ldc of a method handle" 같은 문장을 낸다.
⇒ ★**새 발명이 아니라 «일관성 회복»**이고 모양도 자명하다(InvalidFormat(&'static str)).

이득 — 과장하지 않는다

kind-only 단언 8곳이 원인을 이름 부를 수 있고, 참조 JVM 격차가 준다(OpenJDK 는
Multiple BootstrapMethods attributes… · argument_index 65535 has bad constant type — 우리는 전부 Invalid class file).
★그러나 「픽스처보다 강한 자물쇠」는 «절반만» 참이다: 원인은 «어느 검사가 울렸나», 픽스처는 «그 검사가 관측 가능한가»를 잠근다.
★증거
: 직전 -fix 가 찾은 구멍(신원 4축 중 3축 미관측)은 링크 축이라 ★원인을 실었어도 안 잡혔다 ⇒ 대체가 아니라 «더하기».

비용 — target 이 1파일인데 평탄화는 «3층»이다

ClassFileError::InvalidFormat            (생산 9곳: validation 6 · class 3)
  → ClassDefinitionError::InvalidClassFile   (From impl 이 원인을 «버린다»)
    → jvm.exception(…, "Invalid class file")  ← ★하드코딩 2곳(src/runtime.rs:189 · test-utils/src/lib.rs:334)

⇒ ★**error.rs 만 고치면 관측 변화가 «0»** — 아무도 넣지 않고 아무도 읽지 않는, 이 저장소가 규탄하는 그 형태다.
★진짜 비용은 validate_class 의 8항 사슬 분해(원인이 갈리는 유일한 자리)이고 ★이 티켓이 금지한 리팩터다.
⇒ 범위를 바로잡아 후속 제안으로 넘겼다(⑴~⑸ · 「⑴만 하면 관측 변화 0 · ⑷ 없이 하면 평탄함이 «이사»할 뿐」까지 명시).

지금 고친 것 — 틀린 주석 한 곳

tests/test_class_format.rs 머리 주석이 ★제안이 근거로 인용한 바로 그 문장이고 거짓이었다.
⇒ 그 자리에서 정정했다 — ★착지한 트리가 거짓을 나르면 다음 사람이 같은 전제로 같은 제안을 다시 만든다.
★두 번째 언급(「ClassFileError 가 평탄화한다」)은 참이라 건드리지 않았다(과잉 편집 0).

검증

cargo test --all --no-fail-fast 572 passed / 0 failed / 1 ignored(27 스위트 전건 합산 · 주석만 바꿔 불변) · DoD 7명령 rc=0.

…을 실을 값은 있다 — 제안의 역사·책임·범위를 바로잡는다

낱말이 Decide 다. 판정은 「할 값 있다」이지만 제안의 세 전제가 틀렸다.

역사: 822504b 는 error.rs 를 자르지 않고 만들었다. 그 이전 ClassInfo::parse 는 Option 을
돌려줘 실패에 정보가 0 이었다 — 그 커밋은 개선이었고, 「again」·「restore」는 성립하지 않는다.

책임: upstream 이 막고 있지 않다. 우리는 5커밋 뒤이고 그중 이 파일들을 만지는 것은 0건이며,
우리 fork 는 이미 이 crate 에서 +560 줄 갈렸다. read-only 규율은 보내는 것을 금할 뿐이다.

범위: target 이 1파일인데 평탄화는 3층이다. error.rs 만 고치면 관측 변화가 0 이고, 진짜 비용은
validate_class 의 8항 || 사슬을 쪼개는 것 — 이 티켓이 금지한 리팩터다. 그래서 구현하지 않고
범위를 바로잡아 후속으로 넘긴다.

제안이 근거로 인용한 주석이 거짓이었으므로 그 자리에서 고쳤다.
jun0 added 4 commits September 17, 2026 09:46
… 형제 #55 착지분과의 충돌 2파일 합집합 해소

충돌은 원장 2파일(REPORT.md·STATE.md)뿐이고 코드 파일 충돌 0.
tests/test_class_format.rs 는 자동 병합됐고 양측 델타가 «둘 다» 살아 있음을 확인했다
(이쪽 10/3 · main 측 32/0 · 추가·삭제줄 다중집합 전건 일치).
원장은 전건 보존·합집합·시간순 — 이 회차(53ca340 04:31)가 main 쪽 최신 항목(30a31bd 04:04)보다 뒤라 위에 온다.
… 형제 #59·#58 착지분과의 충돌 2파일 합집합 해소

충돌은 원장 2파일뿐이고 코드 파일 충돌 0.
tests/test_class_format.rs 는 또 자동 병합됐고 양방향으로 쟀다(이쪽 10/3 불변 · main 델타 누락 0).
시간순: main 쪽 두 항목(3b04712 06:52 · 38c02a2 05:22)이 이 회차(53ca340 04:31)보다 뒤라 위에 온다.
@Jun025
Jun025 merged commit 42e99a7 into main Sep 17, 2026
10 checks passed
@Jun025
Jun025 deleted the decide/rustjava-classfile-error-cause branch September 17, 2026 02:43
Jun025 pushed a commit that referenced this pull request Sep 17, 2026
#59·#58·#56 착지분 흡수

충돌 3파일: 원장 2(REPORT·STATE)는 합집합·시간순(이 회차 09:06 > main 최신 06:52 ⇒ 위),
make_indy_fixtures.py 는 형제 두 회차의 «각자 추가»라 합집합으로 합쳤다
(#59 의 fieldref·MAKECONCAT_DESCRIPTOR·make_concat_call_site·LINKED +
 이 PR 의 method_type·method_handle·METAFACTORY_*·lambda_near_miss·METAFACTORY_FIXTURES).
★검증: 재생성 후 기존 픽스처 «바이트 변동 0» — 두 생성기가 둘 다 살아 있다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant