Skip to content

[rustjava-count-symbols-dropped-from-second-parent-on-resolution] test(ci): 충돌 해소가 떨어뜨린 정의를 센다 [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix] [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix2] [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix3] - #71

Merged
Jun025 merged 6 commits into
mainfrom
feat/rustjava-merge-drop-check
Sep 18, 2026

Conversation

@Jun025

@Jun025 Jun025 commented Sep 17, 2026

Copy link
Copy Markdown
Owner

채택 제안 2026-09-17-union-restores-silently-dropped-makeconcat#p0. ★제품 코드 0줄 — 검사기 1개 + 의도 규약 + 기존 rust.yml 에 잡 하나(새 워크플로 파일 0).

ⓑ 먼저 — 이미 덮는 축이 «없다»는 것을 실행으로 확인했다

origin/main 에 손실을 재구성하고 기존 축을 전부 돌렸다:

손실 트리에서
생성기 실행 rc=0
audit-fixture-single-defect.py rc=0(23건)
test_class_format / test_fixture_pins 21 / 3 passed
check-dod-ci-parity · git status · 충돌 마커 rc=0 · 0줄 · 0

아무것도 잡지 못한다.왜 조용한지도 알아냈다: 손실은 떨어진 이름들이 자기완결일 때만 조용하고(아니면 AttributeError 로 시끄럽게 죽는다), 충돌의 한쪽을 통째로 택하는 것이 정확히 그 자기완결 슬라이스를 떨어뜨리는 것이다.

ⓐ「3건」→ ★4건 · ⓒ 정의 범위는 실제 4건에서 거꾸로

LINKED · MAKECONCAT_DESCRIPTOR · def make_concat_call_site · ★method fieldref.
★넷째가 class Pool 안의 메서드「최상위」만 보면 4 중 3만 잡는다 ⇒ 한 단계 중첩까지 본다.

ⓓ 스쿼시

이 repo 는 등재 repo 라 --merge 착지지만, 겨냥하는 것은 브랜치 내부 base 당김 머지(사고 둘 다 그것)라 착지 방식과 무관하다. 부모 1개 범위 → 0 merge(s) · rc=0.

의도와 사고를 가르는 것 — 커밋 trailer

Dropped-from-theirs: Pool.fieldref -- superseded by the new pool builder
Dropped-from-theirs: * -- recorded as a merged ancestor only

자기 커밋 하나만 면제하므로 「영구 목록이 검사기를 무력화한다」가 구조적으로 불가능하다.

★설계를 한 번 갈아엎었다 — 개악 시험이 내 검사기의 구멍을 잡았다

초판의 구조적 면제(「트리 == 부모1 이면 -s ours」)가 ★theirs 를 통째로 버린 머지까지 삼켜 rc=0 이 됐다. 그게 이 검사기의 존재 이유인 실패다 ⇒ 면제를 선언(*)으로 교체. 양방향을 안 돌렸으면 끈 채로 착지했다.

합격선 — 양방향 전건

결과
⒜ 개악 rc=1 · 이름을 말한다
⒝ 정상 rc=0
⒞ trailer rc=0 · 지우면 rc=1
ⓓ 스쿼시 rc=0
실사고 손으로 찾은 분할과 동일(생성기 4 사고 + .rs 2 의도)

⒟ 오탐 — 세었다

최근 200커밋·머지 83건8건 red · 정의 19개(9.6%) · 4.4초/머지 ⇒ PR 당 0~9초. CI 는 origin/main..HEAD 만 보므로 과거 8건이 main 을 red 로 만들지 않는다.

잃는 것

이름은 남고 본문이 비어진 경우는 못 잡는다 · 리네임·이동을 소실과 구별 못 한다 · trailer 는 우회로다(더 조이지 않은 것이 판단이다) · DoD 블록에도 들어가 로컬에도 시간이 붙는다.

cargo test --all 583/0/1(불변) · check-dod-ci-parity 명령 7개 일치(CI 잡을 늘렸으므로 DoD 블록도 같이 고쳤다).

jun0 added 2 commits September 18, 2026 08:48
…t(ci): 충돌 해소가 떨어뜨린 정의를 센다

채택 제안 2026-09-17-union-restores-silently-dropped-makeconcat#p0. 제품 코드 0줄 —
검사기 1개 + 의도 규약 + 기존 rust.yml 에 잡 하나(새 워크플로 파일 0).

ⓑ 를 먼저 쟀다(이 게이트가 티켓을 끝낼 수 있었다): origin/main 에 손실을 재구성해 기존 축을 전부
돌렸더니 생성기 rc=0 · 단일결함 감사 rc=0(23) · test_class_format 21 · test_fixture_pins 3 ·
파리티 rc=0 · git status 0줄 · 충돌 마커 0 ⇒ 아무것도 못 잡는다.
★왜 조용한지를 정확히 알아냈다: 손실은 떨어진 이름들이 서로 자기완결일 때만 조용하고, 충돌의
한쪽을 통째로 택하는 것이 바로 그 자기완결 슬라이스를 떨어뜨리는 것이다.

ⓐ 제안의 「3건」을 다시 세니 4건이다(LINKED · MAKECONCAT_DESCRIPTOR · make_concat_call_site ·
method fieldref). ⓒ 넷째가 클래스 «안»의 메서드라 「최상위」만 보면 4 중 3만 잡는다 ⇒ 한 단계
중첩까지 본다. ⓓ 이 repo 는 --merge 착지지만 겨냥하는 것은 브랜치 내부 base 당김이라 착지 방식과
무관하다(부모 1개 범위 → 0 merge(s), rc=0).

의도/사고 분리는 커밋 trailer 다: Dropped-from-theirs: <name> -- <why>. 자기 커밋 하나만
면제하므로 「영구 목록이 검사기를 무력화한다」가 구조적으로 불가능하다.

★설계를 한 번 갈아엎었다: 초판의 「트리 == 부모1 이면 -s ours 로 보고 건너뛴다」 구조 면제가
개악 시험에서 theirs 를 통째로 버린 머지까지 삼켜 rc=0 이 됐다 — 그게 이 검사기의 존재 이유인
실패다. 면제를 선언(* 와일드카드)으로 교체했다.

양방향 전건: 개악 rc=1 + 이름을 말한다 · 정상 rc=0 · trailer rc=0, 지우면 rc=1 · 스쿼시 rc=0 ·
실사고에서 손으로 찾은 것과 같은 분할(생성기 4 사고 + .rs 2 의도)을 기계가 낸다.

오탐을 세었다: 최근 200커밋·머지 83건 소급 → 8건 red · 정의 19개(9.6%) · 4.4초/머지.
CI 는 origin/main..HEAD 만 보므로 과거 8건이 main 을 red 로 만들지 않는다.

잃는 것: 이름은 남고 본문이 비어진 경우는 못 잡는다 · 리네임·이동을 소실과 구별 못 한다 ·
trailer 는 우회로다 · DoD 블록에도 들어가 로컬 실행에도 시간이 붙는다.

CI 잡을 늘렸으므로 CLAUDE.md DoD 블록도 같이 고쳤다 — 파리티 락이 명령 7개로 둘 다 일치를 답한다.
cargo test --all 583/0/1(불변).
… test(ci): 필터를 넓히고 면제 예시를 «작동하는» 형식으로 고친다

게이트② 반려 2건. 제품 코드 0행.

① 필터가 좁아 «둘째 사고»를 삼켰다. 초판은 theirs 가 건드린 파일만 봤고 그 근거로 「only files the
merged-in branch actually changed can have lost its work」라 적었는데, 이 repo 자신의 둘째 사고가
그 문장을 반증한다 — 514d5b0e53b214 와 같은 넷을 떨어뜨렸는데 초판은 「0 file(s) examined」
rc=0 으로 통과시켰다. 해소가 «상대가 건드리지도 않은» 파일을 되돌리는 것이야말로 이 검사기의 존재
이유인데 그것을 못 봤다.
⇒ 술어를 「theirs 가 바꾼 파일 ∪ 머지가 바꾼 파일」로 넓혔다. 이제 두 사고 둘 다 rc=1 · 6정의다.
★좁힌 채 두지 않은 이유: 좁은 필터를 정당화하던 문장이 거짓이므로 그대로 두면 「없는 보장을 있다고
적는」 형태가 된다 — 이 리니지가 #67 의 F1 에서 정확히 그것으로 반려됐다.
대가는 숨기지 않았다: 83머지 소급 8건/19정의 → 10건/45정의(게이트② 실측 · 다시 재지 않았다).
늘어난 것에 진짜 사고 1건이 들어 있지만 읽을 것과 trailer 도 는다. Scope 문단에 그대로 적었다.

② docstring 의 유일한 작동 예시가 작동하지 않았다. `Pool.fieldref` 라 적혀 있는데 검사기는
`method fieldref` 를 내보내고 «글자 그대로» 대조한다 ⇒ 예시대로 적은 사람은 면제에 실패한다.
합성 머지로 양방향 확인했다: 출력에서 복사한 이름은 rc=0, 예쁜 형식은 rc=1.
예시를 출력 형식으로 고치고 ★「이름은 검사기 출력에서 글자 그대로 복사해야 한다」를 계약에 박았다
— 예시만 고치면 다음 형식이 또 갈린다. 전 이력 1,286커밋에 trailer 0건이라 깨진 기존 등재는 없다.

재확인: 스쿼시(부모 1개) rc=0 · 정상 머지 rc=0 · 이 PR 범위 rc=0 · DoD 문서축 전건 rc=0.
@Jun025 Jun025 changed the title [rustjava-count-symbols-dropped-from-second-parent-on-resolution] test(ci): 충돌 해소가 떨어뜨린 정의를 센다 [rustjava-count-symbols-dropped-from-second-parent-on-resolution] test(ci): 충돌 해소가 떨어뜨린 정의를 센다 [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix] Sep 18, 2026
jun0 added 2 commits September 18, 2026 15:22
…] merge origin/main — 원장 2파일 합집합(theirs 원문 보존 · ours 최신이라 맨 위)
…] docs: 45 를 내 구현에서 다시 재 26 으로 고치고 늘어난 7정의를 하나씩 판정한다
@Jun025 Jun025 changed the title [rustjava-count-symbols-dropped-from-second-parent-on-resolution] test(ci): 충돌 해소가 떨어뜨린 정의를 센다 [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix] [rustjava-count-symbols-dropped-from-second-parent-on-resolution] test(ci): 충돌 해소가 떨어뜨린 정의를 센다 [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix] [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix2] Sep 18, 2026
…] docs: 「0 file(s) examined」를 실측 4 로 고치고 「느리지 않았다」를 노이즈 서술로 바꾼다
@Jun025 Jun025 changed the title [rustjava-count-symbols-dropped-from-second-parent-on-resolution] test(ci): 충돌 해소가 떨어뜨린 정의를 센다 [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix] [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix2] [rustjava-count-symbols-dropped-from-second-parent-on-resolution] test(ci): 충돌 해소가 떨어뜨린 정의를 센다 [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix] [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix2] [rustjava-count-symbols-dropped-from-second-parent-on-resolution-fix3] Sep 18, 2026
…] merge origin/main — 승인된 3파일 합집합(DoD 두 줄 · 원장 상단)
@Jun025
Jun025 merged commit fd571cb into main Sep 18, 2026
12 checks passed
@Jun025
Jun025 deleted the feat/rustjava-merge-drop-check branch September 18, 2026 13:49
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