Skip to content

docs: 「우리 자산이 낡는다」 상시 조항 판정 — 넣지 않고 로컬 DoD 가 CI 매트릭스를 재현하지 않던 «두 축»을 막았다 [rustjava-sync-contract-standing-clause-for-our-assets-going-stale] - #25

Merged
Jun025 merged 5 commits into
mainfrom
feat/rustjava-sync-contract-stale-assets-decision
Sep 4, 2026

Conversation

@Jun025

Copy link
Copy Markdown
Owner

운영자 채택 제안 (2026-09-04-upstream-sync-s6#p1 · …-s7#p1)에 대한 결정이다.
코드 변경 0 · 문서 2파일(CLAUDE.md · docs/upstream-sync-approach.md).

★결정문

상시 조항을 «넣지 않는다».
대신 «그물이 없던 자리 하나»를 막는다 — CLAUDE.md §DoD 가 CI 명령 5줄을 «축약 없이 그대로» 싣는다.

★먼저 «셌다» — 목록 문서화로 시작하지 않았다 (계약 1)

자산 8건을 ★돌연변이로 깨뜨려(추론 0) 무엇이 잡는지 쟀다:

#자산돌연변이★그물
픽스처 경로 문자열test-data/test_data/cargo testRED
CI --exclude test-utilstest-utilstest_utils★★없음(CI 만)
setProperty 서술자StringObjectcargo testRED
charset 라우팅Charset::resolve 우회cargo testRED
수동 span.instrument(span) 삭제clippyRED
ClassFormatError 종류 단정Throwablecargo testRED
double_must_use allowallow 삭제stable·beta 둘 다 ok ⇒ ★깨져도 무해
워크로그 잠금 경로스크립트 이동로컬 DoD CI 둘 다

⇒ ★★**「아무것도 없음」은 «1개»** ⇒ 계약대로 1개면 조항이 아니라 «그 하나를 고치는 것»이 처방.

★★그 1개도 «조용히» 실패하지 않는다 — 처방이 더 좁아졌다

warning: excluded package(s) `test_utils` not found in workspace
error: could not compile `tokio` (lib) ← rc≠0

⇒ ★문제는 «침묵»이 아니라 «늦음»(push 후 CI 에서만).
⇒ ★★근인은 「자산 목록이 없다」가 아니라 «로컬 DoD 가 CI 검사 한 줄을 빠뜨렸다»:

검사 수
CI(rust.yml)5(★wasm32 clippy 포함)
로컬 DoD(종전)4

빠진 하나가 정확히 wasm32 줄이고 ★그 줄이 --exclude <크레이트 이름> 이 사는 «유일한» 자리다.

사료 — 「세 번」·「두 방향」 확정, 결론은 «한 조항으로 못 덮는다» (계약 2)

회차방향잡은 것
S3·S5·S6⑴신규/판본 교체테스트 · 정독
S7⑵공용 API 변경★컴파일
S8⑶개명★CI 만 / 테스트

⇒ ★잡는 그물이 각각 다르다 ⇒ 조항으로 덮으면 이미 그물이 있는 다섯 자리에까지 사람 확인을 얹는다.

적은 «자리» (계약 3⒞ — 워크로그에만 적지 않았다)

자리무엇을
CLAUDE.md §DoDCI 5줄 verbatim + 「축약하지 마라」와 S8 실사고
docs/upstream-sync-approach.md §4결정문 · 돌연변이 표 · 사료 표 · 재개 조건과 세는 명령

★★재개 조건 + 세는 명령 + 오늘의 값 (계약 4)

CI 검사 중 로컬 DoD 에 없는 것이 «1건이라도» 생기면 다시 연다.

세는 명령은 §4 에 박았다. 착수 시 5 → ★오늘 0.
★1 이상이 되면 ⑴그 줄을 DoD 에 넣거나 ⑵못 넣는 이유를 적고 재검토 —
★**「조항이 필요하다」로 바로 가지 말고 그때도 «먼저 세라».**

계약 5 — CI 크레이트 이름은 ★S8 이 이미 고쳤다

rust.yml:55 = --exclude test-utils ⇒ ★이 회차는 그 파일 무접촉.
★**「고쳤으니 조항 결정을 건너뛴다」로 가지 않았다** — 둘은 다른 층이다(증상 1건 ↔ 늦게 드러난 경로).

green (계약 6)

CI 5줄을 워크플로 문면 그대로 실행 — 전건 rc=0 · cargo test --all554 / 0 / 1
(baseline 동수 · 새 red 0) · ★돌연변이 전부 복구(워킹트리는 문서 2파일만).

경계

upstream 동기 회차 «새로 열지» 않았다(behind 0 · S9 없음) · 포크 정책 무접촉 ·
★「목록 통째 문서화」로 시작하지 않았다 · 머지 0 · force-push 0 · 리베이스 0 ·
main 직접 push 0 · 시크릿 0 · 코드(.rs) 변경 0.

jun0 added 3 commits September 4, 2026 13:14
…ontract-standing-clause-for-our-assets-going-stale]
★먼저 셌다(목록 문서화로 시작하지 않았다): 자산 8건을 돌연변이로 깨뜨려 무엇이 잡는지 실측 —
경로 문자열·setProperty 서술자·charset 라우팅·ClassFormatError 단정은 cargo test RED ·
수동 span 은 clippy RED · double_must_use allow 는 깨져도 무해 · 워크로그 스크립트는 로컬+CI 둘 다.
⇒ 「아무것도 없음」은 1개(CI 워크플로의 --exclude 크레이트 이름) ⇒ 계약대로 조항이 아니라 그 하나를 고쳤다.
★그 1개도 조용히 실패하지 않는다(excluded package(s) not found + 빌드 실패) ⇒ 문제는 침묵이 아니라 늦음이고,
근인은 「자산 목록이 없다」가 아니라 「로컬 DoD 가 CI 5종 중 wasm32 clippy 한 줄을 빠뜨렸다」였다 —
그 줄이 그 자산이 사는 유일한 자리다. ⇒ CLAUDE.md DoD 가 CI 5줄을 축약 없이 그대로 싣는다.
★사료: S3·S5·S6=신규/판본 교체(테스트) · S7=공용 API(컴파일) · S8=개명(CI만/테스트)
⇒ 셋은 같은 형태가 아니고 잡는 그물이 다르다 ⇒ 조항 하나로 덮으면 이미 그물이 있는 다섯 자리에
사람 확인을 얹게 된다.
★재개 조건: 「CI 검사 ∖ 로컬 DoD」가 1건이라도 생기면 다시 연다 · 세는 명령을 §4 에 박았다 ·
오늘의 값 0(착수 시 5). CI 5줄 문면 그대로 전건 rc=0 · 554/0/1(새 red 0) · 코드 변경 0.
…anding-clause-for-our-assets-going-stale]
★게이트② request-changes 승계. 실측 규율(먼저 세고·돌연변이로 재고·재개 조건에 세는 법과 값을 박는다)은
그대로 두고, 검수자가 짚은 두 결함을 고쳤다.
C1 — ⑦행 「깨져도 무해」는 거짓이었다. 근인은 돌연변이를 «비하중» 자리에 넣은 것이다: 초판은
interpreter.rs:1(같은 파일 함수별 allow 에 가려진 중복) 한 곳만 지웠고 jvm.rs 에 7곳이 남아 있었다.
세 갈래 재측정(각 회 cargo fmt 정규화): ①interpreter.rs:1 만 → beta 0(초판 재현) ②jvm.rs:2 만 → beta 0
③★9곳 전건 → stable 0 · ★beta error 7. ⇒ ⑦의 그물은 «CI 만»이고 ②와 같은 칸이다 ⇒ ★계수 = 2.
★후속 추천 3번(「allow 를 지워도 통과한다」)을 철회했다 — 그대로 두면 다음 회차가 beta 3셀을 빨갛게 만든다.
C2 — 처방·재개 조건이 «매트릭스 차원»에 안 닿았다. rust: [stable,beta] 를 [stable] 로 줄여도
[stable,beta,nightly] 로 늘려도 종전 명령은 0 이었다(양성대조 - run: 1줄 추가는 1).
⇒ ⒜DoD 에 cargo +beta clippy 추가(5줄 → 6줄 · CI 는 6셀 = toolchain 2 × OS 3 이고 repo 에
rust-toolchain.toml 이 없어 맨 cargo 는 stable 1개다) ⒝재개 조건에 축② «toolchain 매트릭스 대조» 추가.
세 돌연변이 재실측: beta 제거 → 축② 0(★옳다 — 술어가 CI ∖ DoD 라 DoD 가 더 엄격한 건 구멍이 아니다) ·
nightly 추가 → 축② 1 · - run: 추가 → 축① 1 ⇒ 각 축이 자기 자리에서만 반응한다.
★결론은 그대로 「조항을 넣지 않는다」이나 논거를 다시 세웠다: ②와 ⑦은 다른 자산이 아니라
«한 근인의 두 얼굴»(로컬 DoD 가 CI 매트릭스를 재현하지 않는다)이고, 근인 하나를 고치니 둘 다 그물을 얻었다.
「조항이 여럿이면?」도 기각했다(세 방향 중 둘은 이미 기계가 지키는 자리다).
C3 adoptedProposals 세 ref · C4 「제안 2 ↔ 검수 1」 차 해소(2가 맞다) · C5 다섯→여섯 통일 + 세는 명령 ·
C7 고지(DoD 블록 개악과 OS 축 3종은 이 대조가 못 잡는다).
검증: 새 DoD 6줄 전건 rc=0 · cargo test --all 554/0/1(새 red 0) · allow 9곳 무접촉 · .rs 변경 0.
게이트② request-changes(C1·C2) 승계. 본체(계수 2 · 근인 하나 · 축 둘 · 결론) 무접촉.
C1 — 「다섯 → 여섯」이 4자리 중 1자리만 됐다. 나머지 3자리(REPORT.md · 워크로그
.md · .json issues[2])를 여섯으로 통일하고 세는 법(8행 − 「CI 만」 2행 = 6)을 병기.
두 파일 안의 자기모순(.md:78↔:93 · json issues[2]↔issues[1])도 닫았다.
C2 — 워크로그 .json verification 이 diff 에 한 줄도 없이 철회된 라벨(「beta 도 ok
— 깨져도 무해」)을 실은 채였다. ⑦ 정정 표지(다른 4파일과 같은 형식) · 근인 대조를
축 둘로 · 축② 착수값 1 · cargo +beta clippy 실행 기록을 넣었다.
전문 검색이 반려 밖에서 더 찾은 것: 「CI 명령 5줄」 파생 수 6자리 · 워크로그 재개
조건 코드블록이 축① 만 실은 것 · 워크로그 검증 표에 +beta 행이 없던 것. 전건 동기.
규율: 「고쳤다」를 쓰기 전에 세라 — 마감 절차 3줄을 approach.md §4 에 박았다.
검증: DoD 6줄 전건 rc=0 · cargo test --all 554/0/1(새 red 0) · 축① 0 · 축② 0 ·
.rs 변경 0 · allow 9곳 무접촉.
[rustjava-sync-contract-standing-clause-for-our-assets-going-stale]
@Jun025Jun025 changed the title docs: 「우리 자산이 낡는다」 상시 조항 판정 — 넣지 않고 DoD 의 CI 검사 누락 1건을 막았다 [rustjava-sync-contract-standing-clause-for-our-assets-going-stale]docs: 「우리 자산이 낡는다」 상시 조항 판정 — 넣지 않고 로컬 DoD 가 CI 매트릭스를 재현하지 않던 «두 축»을 막았다 [rustjava-sync-contract-standing-clause-for-our-assets-going-stale]Sep 4, 2026
jun0 added 2 commits September 4, 2026 17:10
게이트② request-changes(C1·C2) 승계. 판정·본체·대조표 분모는 무접촉.
C1 — 직접 재측정(9곳 삭제 → cargo fmt --all → cargo +beta clippy --all -D warnings):
rc=101 · double_must_use 진단 6건(전건 jvm/src/jvm.rs:140·404·438·779·791·1016) ·
cargo 요약 줄 「due to 6 previous errors」. 「7」은 grep -c '^error'(진단 6 + 요약 줄 1)
의 값이고 그 필드가 내건 정의가 아니었다. 착지본 18자리 전건 정정(CLAUDE.md 1 ·
approach.md 3 · REPORT.md 3 · STATE.md 2 · 워크로그 .md 3 · json 6) + 화해 문장
(「101 은 lint 건 · 7 은 크레이트별 error 수」) 철회. 「7 이 맞다」고 재주장하지 않는다.
덧붙임: 6 은 하한이다 — jvm-bytecode 가 jvm 에 의존해 jvm 이 깨지면 린트되지 않는다.
C2 — 잔존 4건: 워크로그 「문서 2파일」 2자리 → 6파일(규범 2 + 기록 4) · json title 을
계수 2 문면으로 · 「채택 제안 둘/2건」 3자리를 셋으로 맞추고 s8#p0 열거. PR 제목도
계수 2 문면으로 고쳤다(착지 subject 에 남는다).
5건째를 스스로 찾았다 — changes[0]. 필터 걸린 sweep 이 거짓 0 을 냈기 때문이고
(zsh 가 따옴표 없는 $F 를 단어분할하지 않아 grep 이 파일을 못 열고 죽었다),
그 교훈을 approach.md §4 마감 절차 4번으로 박았다: 파일은 인자로 나열하고,
필터 없이 총계를 낸 뒤 한 건씩 정정 기록인가 잔존인가를 눈으로 갈라라.
검증: DoD 6줄 전건 rc=0 · cargo test --all 554/0/1(새 red 0) · 축① 0 · 축② 0 ·
.rs 변경 0 · allow 9곳 무접촉.
[rustjava-sync-contract-standing-clause-for-our-assets-going-stale]
…anding-clause-for-our-assets-going-stale]
STATE.md 진행중 → 완료(게이트③ PR #25 · --merge · 등재 repo · 게이트② 5회차 만에 approve ·
반려 넷이 전부 「신고한 것 ↔ 산출물」의 어긋남이었고 그 대가로 §4 마감 절차 4줄이 남았다 ·
남은 minor F1 은 이 회차가 고치지 않았음을 명시) + worklog .json 게이트③ 집행 1줄
(동봉 전 head 가 핀과 일치했음 · fetch 를 먼저 쳐 거짓 일치를 막았음). 코드 변경 0.
@Jun025
Jun025 merged commit 7b2dcc4 into mainSep 4, 2026
9 checks passed
@Jun025
Jun025 deleted the feat/rustjava-sync-contract-stale-assets-decision branch September 4, 2026 09:18
Sign up for freeto 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

@Jun025