Skip to content

[2026-09-19-partial-clone-blob-vs-absence-p0] fix(scripts): 머지 드롭 검사기의 출력 순서를 고정한다 — 두 회차를 diff 할 수 있게 - #83

Merged
Jun025 merged 1 commit into
mainfrom
feat/rustjava-merge-drops-deterministic-order
Sep 19, 2026
Merged

Jun025 merged 1 commit into
mainfrom
feat/rustjava-merge-drops-deterministic-order

Conversation

@Jun025

@Jun025 Jun025 commented Sep 19, 2026

Copy link
Copy Markdown
Owner

채택 제안 2026-09-19-partial-clone-blob-vs-absence#p0 — "Sort the checker's findings so two runs can be compared".

문제 — 재현했다

scripts/check-merge-dropped-symbols.py 가 같은 결과를 회차마다 다른 순서로 찍어, 두 회차를 diff 하면 ★없는 차이가 보였다.

origin/main 판본 · 범위 e53b2142^..e53b2142(8머지 · 6드롭 · rc 1) · PYTHONHASHSEED=random 10회:

서로 다른 순서
origin/main(전) ★2종(6회 / 4회)
이 PR(후) ★1종
되돌리면(개악) ★2종
복원 ★1종

차이는 ★경로 블록의 선후 하나뿐이다.

★제안의 «진단»은 정확하지 않았다 — 그래서 고치는 «자리»가 달라진다

제안은 「findings 가 set 에 모인다」고 했으나 ⑴findings 는 list 이고 ⑵한 경로 «안»의 이름은 이미 sorted() 였다.
파일의 set 4개를 전수로 보면 출력 순서에 닿는 것은 ★**changed(경로 집합) 하나뿐**이다.

set 출력 순서에 닿나
symbols() 의 found 아니오 — sorted() 가 소비
excused() 의 names 아니오 — 멤버십 검사뿐
theirs_symbols - … 아니오 — 이미 sorted()
★**check() 의 changed** ★예

⇒ 「print site 에서 정렬」은 우연히 맞는 처방이었다. ★출처에서 정렬했다 — findings 는 check() 가 반환도 하므로, main() 에서 정렬하면 찍는 것만 결정적이고 반환값은 여전히 해시 순서다.

바꾼 것 — 수로

5파일 +136/−1 · 그중 코드는 1파일 +9/−1(★동작 1줄 + 주석 8줄) · .rs 0줄.

for path in sorted(filter(None, changed)):

★찾은 것은 그대로다: 출력 15줄 동일 · 집합으로 정렬하면 완전 일치 · rc 1 불변.

★대가 — 「잃는 것이 없다」로 적지 않는다

  • 순회 순서라는 성질을 없앴다(읽는 곳은 없다).
  • ★★아무도 잠그지 않는다. 이 repo 엔 scripts/ 용 테스트 하네스가 없다(test*.py 0개). 비결정성을 되돌려 놓고 재니 파이썬 검사기 4종 전건 rc 0 · cargo fmt --check rc 0 ⇒ ★이 계급에 대한 그물은 «0»이고, 이 수정은 규칙이 아니라 습관이다. 하네스는 1줄보다 큰 결정이라 후속 제안으로 남겼다.
  • 나머지 검사기 3종은 같은 계급으로 감사하지 않았다(같은 후속 제안 범위).

DoD — 9명령 전건 rc=0

fmt 0 · clippy 0 · +beta clippy 0(★91크레이트 콜드 컴파일 · 16m14s — 캐시만이 아니다) · wasm32 0 ·
cargo test 0(★585 passed / 0 failed / 28 targets) · worklog_json 0 · dod_parity 0(명령 8 · toolchain 2 둘 다 일치) ·
named_exception 0 · merge_drops 0.
※clippy(stable)는 0크레이트 컴파일(전부 캐시) — 이 회차는 Rust 0줄이라 그것이 정합이고, toolchain 축은 beta 콜드 컴파일이 실제로 검증했다.

worklog 쌍 docs/worklog/2026-09-19-merge-drops-deterministic-order.{md,json} · adoptedProposals 에 2026-09-19-partial-clone-blob-vs-absence#p0 기록.

…의 출력 순서를 고정한다 — 두 회차를 diff 할 수 있게

채택 제안 `2026-09-19-partial-clone-blob-vs-absence#p0`
("Sort the checker's findings so two runs can be compared").

문제: 같은 결과를 회차마다 다른 순서로 찍어, 두 회차를 diff 하면 ★없는 차이가 보였다.
재현(origin/main 판본 · e53b214^..e53b214 · 8머지 6드롭 rc1 · PYTHONHASHSEED=random 10회):
서로 다른 순서 2종(6회/4회) — 차이는 경로 블록의 선후 하나뿐이다.

★제안의 «진단»은 부정확했고, 그래서 고치는 자리가 달라진다:
제안은 「findings 가 set 에 모인다」고 했으나 findings 는 list 이고, 한 경로 «안»의 이름은
이미 sorted() 였다. 파일의 set 4개를 전수로 보면 출력 순서에 닿는 것은 changed(경로 집합)
하나뿐이다. ⇒ 「print site 에서 정렬」은 우연히 맞는 처방이었다.

★그래서 «출처»에서 정렬한다 — findings 는 check() 가 반환도 하므로, main() 에서 정렬하면
찍는 것만 결정적이고 반환값은 여전히 해시 순서다.

양방향(제품 호출부 · 사본 아님): 전 2종 ↔ 후 1종 ↔ 되돌리면 2종 ↔ 복원 1종.
★찾은 것은 그대로다: 출력 15줄 동일 · 집합으로 정렬하면 완전 일치 · rc 1 불변.

★대가를 숨기지 않는다: ⒜순회 순서라는 성질을 없앴다(읽는 곳은 없다)
⒝★아무도 잠그지 않는다 — scripts/ 테스트 하네스 0(test*.py 0개)이고, 비결정성을
되돌려 놓고 재니 파이썬 검사기 4종 전건 rc 0 · cargo fmt rc 0 ⇒ 이 계급의 그물은 «0»이다.
하네스는 1줄보다 큰 결정이라 후속 제안으로 남겼다.

DoD 9명령 전건 rc=0 (cargo test 585 passed / 0 failed / 28 targets ·
clippy-beta 는 91크레이트 콜드 컴파일 16m14s).
@Jun025
Jun025 merged commit 750d30d into main Sep 19, 2026
12 checks passed
@Jun025
Jun025 deleted the feat/rustjava-merge-drops-deterministic-order branch September 19, 2026 14:24
Jun025 added a commit that referenced this pull request Sep 25, 2026
… 닫는다 (#101)

[rustjava-pr81-disposition-after-pr83-landed] docs: PR #81 을 #83 중복으로 닫는다
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