Skip to content

[rustjava-adopt-indy-fixture-jdk-pin-and-slot-accounting-p0] test(fixtures): test-data 전체의 클래스 파일 버전을 「동결」한다 [rustjava-adopt-indy-fixture-jdk-pin-and-slot-accounting-p0-fix2] - #57

Merged
Jun025 merged 5 commits into
mainfrom
pin/rustjava-test-data-version-freeze
Sep 17, 2026

Conversation

@Jun025

@Jun025 Jun025 commented Sep 16, 2026

Copy link
Copy Markdown
Owner

채택 제안 2026-09-16-indy-fixture-jdk-pin-and-slot-accounting#p0.
커밋된 픽스처 150개의 <major>.<minor> 를 표에 기록하고 ★혼자 움직이면 red 가 되게 했다.

★★제안의 «비용 산정»을 바꿨다 — 기각이 아니라 «설계 교체»

제안 tradeoff: 「pinning means first deciding the intended target … any fixture recompiled to match would change bytes …
★The decision is the work」 — 즉 통일을 전제한다.
그런데 제안이 산 것으로 적은 이득은 「a regenerated fixture cannot quietly start testing a different Java version's shapes」
= ★**«드리프트 탐지»**이지 «통일»이 아니다.

⇒ ★목표를 «동결»로 바꾸면 그 「work」가 통째로 사라진다: 지금 값을 기록하고 혼자 움직이면 red.
★재컴파일 0 · 바이트 변경 0 · 「어느 타깃이 옳은가」 결정 불요.

★대가를 숨기지 않는다: 이 축은 ★섞임을 «고치지» 않고 «굳힌다». 통일하려면 재컴파일해야 하고
★재컴파일은 바이트를 바꿔 그 픽스처가 «무엇을 시험하는지»를 바꾼다(제안 자신의 경고) ⇒ 별 축(후속 L)으로 넘겼다.

ⓐ·ⓑ 재측 — 그리고 «누가 이미 덮고 있나»

디렉터리 지금(재측)
루트 52×40 · 65×62 · 66×8 · 68×1 · 70×3
ldc / indy / cp / 기타 52×7·55×6 / 52×1·65×6 / 52×3 / 52×12·65×1

총 150. 제안의 수(65×61 등)는 그 사이 픽스처가 늘어 65 가 62 로 움직였다 — 형태는 그대로.
★이미 핀하는 축이 둘: test_fixture_pins.rs(indy 만) · 생성기 코드(자기 산출물 16개의 버전을 소스에 박는다).
⇒ ★남는 132개 = 「.java 소스가 있어 손수 재컴파일 가능한 것」이고, ★루트의 66·68·70 이 그 사고가 «이미 일어난» 지문이다.

★세 방향을 «전부» 검사한다 — 급소

방향 없으면
기록과 다름 드리프트를 못 잡는다(본래 목적)
★기록에 없는 픽스처 ★핀이 «옵트인»이 되어 내일 추가분이 조용히 미보호
파일 없는 유령 기록 표가 썩어 「무엇이 보호되는지」를 못 믿는다

개악 3종 전건 red · 복원 green:
M1 Hello.class 버전 바이트 65→70(다른 JDK 재생성과 같은 형상) → Hello.class: recorded 65.0, found 70.0 ·
M2 미기록 .class 투입 · M3 유령 행. ★실패 문면이 파일·두 버전·해소 명령을 함께 말한다.

검증

기록기 멱등(재실행 시 표 바이트 동일) · cargo test --all --no-fail-fast 572 → 573 passed / 0 failed / 1 ignored
(27 스위트 전건 합산) · test_fixture_pins 소요 0.04s(파일당 8바이트만 읽는다) · DoD 7명령 rc=0.

★알고 남긴 값: 생성기 산출물 16개는 이중 잠금(생성기 + 표)이다 —
★예외 목록을 두는 규칙보다 «전건 단일 규칙»이 덜 썩는다.

jun0 added 2 commits September 17, 2026 04:50
…tures): test-data 전체의 클래스 파일 버전을 동결한다

제안은 「타깃을 정해 통일하라」를 전제하고 그 결정을 the work 라 불렀지만, 정작 산 이득은
드리프트 탐지다. 목표를 동결로 바꾸면 그 비용이 통째로 사라진다 — 재컴파일 0, 바이트 변경 0,
어느 타깃이 옳은가라는 결정 자체가 불요.

대가는 섞임을 고치지 않고 굳힌다는 것이다. 통일은 재컴파일이고 재컴파일은 그 픽스처가 무엇을
시험하는지를 바꿀 수 있어(제안 자신의 경고) 별 축으로 넘겼다.

세 방향을 전부 검사한다: 기록과 다름 · 기록에 없는 새 픽스처(없으면 핀이 옵트인이 되어 내일
추가분이 조용히 미보호) · 유령 기록. 개악 3종 전건 red · 복원 green · 기록기 멱등.
…(fixtures): 표 키의 경로 구분자를 두 곳에서 정규화한다

윈도우에서 to_string_lossy() 가 indy\StringConcat.class 를 만드는데 표는 indy/… 를 담는다. 하위
36개가 「미기록」과 「유령 기록」에 동시에 걸리고 루트 114개는 통과하므로 mac/linux 로는 보이지 않는다.

같은 결함이 기록기에도 있었다. Rust 만 고치면 윈도우에서 기록한 표가 이번엔 mac/linux 를 red 로
만들고, CI 가 기록기를 안 돌려 그 축은 영영 조용하다. 그래서 둘을 함께 고쳤다.

개악이 mac 에서도 잡히도록 components() 대신 문자열 치환으로 구현했다 — 전자는 Unix 에서
역슬래시 입력을 그대로 통과시킨다.

형제 #55 가 먼저 착지해 순서 문제는 해소된 형태로 나타났다: base 를 당기니 픽스처 3개가 정확히
red 로 잡혔고 고친 기록기로 재기록하니 150 → 153, diff 가 정확히 3줄이다.

STATE.md 의 「#55 는 원장 3파일만 만진다」는 거짓이었고 그 오기 때문에 그 상호작용이 보이지
않았다 — 정정했다. 설계의 본래 대가(픽스처를 더하면 표도 함께)는 AGENTS.md 에 한 줄로 남겼다.
jun0 added 2 commits September 17, 2026 09:54
…(state): 게이트③ 착지 기록 동봉 (PR #57 · --merge)
…ge origin/main + 표 3행 — 형제 #59 픽스처를 이 PR 이 책임진다

게이트③ 회차가 «옳게» 막힌 자리를 푼다. base 를 당기면 이 PR 자신의 핀 테스트가 실패했다:
#59 가 들여온 MakeConcat·MakeConcatWithArgument·MakeConcatWrongDescriptor 가 표에 없었다.
검사기가 옳게 물은 것이므로 완화하지 않고 표를 고쳤다.

★표 갱신을 «이 머지 커밋 안»에 둔 이유: 이 PR 이 세운 AGENTS.md 규율이
「.class 를 더하거나 재생성하면 «같은 커밋에» 표를 고쳐라」다. 그 셋을 들여오는 것이 이 머지이므로
같은 커밋이 그 규율에 맞다.

record-class-file-versions.py 1회 · diff = 3 0(★추가만 · 삭제 0) ⇒ 기존 156행 중 바뀐 것 없음
= 픽스처 재생성 0. 원장 2파일 충돌은 합집합·시간순(이 회차 06:16 은 #59 06:52 아래 · #58 05:22 위).
@Jun025 Jun025 changed the title [rustjava-adopt-indy-fixture-jdk-pin-and-slot-accounting-p0] test(fixtures): test-data 전체의 클래스 파일 버전을 「동결」한다 [rustjava-adopt-indy-fixture-jdk-pin-and-slot-accounting-p0] test(fixtures): test-data 전체의 클래스 파일 버전을 「동결」한다 [rustjava-adopt-indy-fixture-jdk-pin-and-slot-accounting-p0-fix2] Sep 17, 2026
…s(state): 게이트③ 착지 기록 갱신 (핀 888d882 · 2회차)
@Jun025
Jun025 merged commit 26db563 into main Sep 17, 2026
10 checks passed
@Jun025
Jun025 deleted the pin/rustjava-test-data-version-freeze branch September 17, 2026 06:37
Jun025 pushed a commit that referenced this pull request Sep 17, 2026
…이 세운 버전 표에 이 PR 의 픽스처 25행을 등재한다
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