#613 리뷰에서 제가 「그물이 없다」고 적었는데 틀렸습니다. 그물은 있습니다.
# ai-service/tests/test_manual_source_propagates.py:98
def test_the_server_javadoc_lists_the_same_codes() -> None:
codes = set(typing.get_args(ExtractionWarning.model_fields["code"].annotation))
listed = re.search(r"\{@code ExtractionWarning\}\((.*?)\)", text, re.S) # ← 서버 javadoc
# 집합으로 같음을 요구한다 — 부분열 통과와 반대 방향 누락을 둘 다 닫았다
제가 server/ 안에서만 찾았습니다. 대조가 python 쪽에 있는데 java 쪽을 뒤졌으니 0건이 나왔습니다.
실측으로 그물이 사는 것도 확인했습니다.
javadoc 목록에서 NARROWING_REFUSED 를 지운다 → 1 failed
❗그런데 한 방향은 안 돌아갑니다 — 트리거입니다
그 대조가 ai-service 스위트에 있고, CI 가 그 모듈이 떴을 때만 돕니다.
ci.yml:181 ai=false; hit '^(ai-service/|contracts/|data/|web/src/lib/survey\.ts$)' && ai=true
실측:
ai-service/app/schemas.py 를 고친다 ai-service=true → 대조가 돈다 ✅
AiServiceClient.java javadoc 만 고친다 ai-service=FALSE → 안 돈다 ❗
즉 Literal 을 고치는 쪽은 잡히고, javadoc 을 고치는 쪽은 안 잡힙니다. javadoc 에서 코드 하나를 지우거나 오타를 내면 초록으로 머지되고, 읽는 사람은 낼 수 없는 코드나 아홉 개짜리 목록을 믿습니다. 그 두 벌이 갈릴 뻔한 사건이 이미 있었습니다(#444 리뷰 — 아홉 vs 열).
#521 과 같은 모양입니다 — 문면 표(errorText.ts)를 tsc 가 잡는데 서버만 고치는 사람은 npm run build 를 안 돌려서 웹 빌드만 빨간 채로 머지됐던 그 자리입니다. 여기는 「돌리는 사람」이 아니라 CI 판별이 같은 일을 합니다.
어떻게 고칠까 — 대조를 server 쪽으로 한 벌 옮기는 쪽이 낫다고 봅니다
두 안입니다.
ⓐ ci.yml 의 ai-service 판별에 AiServiceClient.java 를 더한다
한 줄이다. 대신 그 파일을 고칠 때마다 python 스위트 전체가 돈다 —
자주 고치는 파일이라 값에 비해 비싸다
ⓑ server 쪽에 대조를 두고 `schemas.py` 를 선언된 입력으로 만든다 ◀ 이쪽
build.gradle inputs.file('../ai-service/app/schemas.py')
ci.yml server_extra 에 같은 경로 (CiServerFilterMirrorsGradleInputsTest 가 대조)
→ schemas.py 를 고치면 server=true, javadoc 을 고쳐도 server=true — **양방향 다 돈다**
ⓑ 는 이 레포에 이미 있는 모양입니다. scoring_thresholds.yaml·app/rubrics/·survey.ts 가 같은 방식으로 server 스위트에 물려 있습니다.
python 쪽 대조는 지우지 않습니다 — server/ 없이 받은 환경에서 조용히 통과하도록 만들어 둔 갈래가 있어서, 그쪽은 그쪽 조건에서 돕니다.
범위
server/src/test/.../AiServiceWarningCodesMirrorTest(가칭) — Literal 목록과 javadoc 목록을 집합으로 대조
server/build.gradle — inputs.file('../ai-service/app/schemas.py')
.github/workflows/ci.yml — server_extra 에 같은 경로 (안 걸면 CiServerFilterMirrorsGradleInputsTest 가 빨개진다)
#613 이 목록을 10 → 12 로 늘립니다. 그 PR 을 막을 이유는 아니고(그쪽은 양쪽을 같이 고치므로 대조가 도는 방향입니다) 이 일은 그 뒤에 올려 숫자를 맞춥니다.
관련: #613 · #444(두 벌이 갈릴 뻔한 사건) · #521(같은 모양의 트리거 결함) · #285(입력 선언 ↔ ci.yml 대조)
#613리뷰에서 제가 「그물이 없다」고 적었는데 틀렸습니다. 그물은 있습니다.제가
server/안에서만 찾았습니다. 대조가 python 쪽에 있는데 java 쪽을 뒤졌으니 0건이 나왔습니다.실측으로 그물이 사는 것도 확인했습니다.
❗그런데 한 방향은 안 돌아갑니다 — 트리거입니다
그 대조가
ai-service스위트에 있고, CI 가 그 모듈이 떴을 때만 돕니다.실측:
즉
Literal을 고치는 쪽은 잡히고, javadoc 을 고치는 쪽은 안 잡힙니다. javadoc 에서 코드 하나를 지우거나 오타를 내면 초록으로 머지되고, 읽는 사람은 낼 수 없는 코드나 아홉 개짜리 목록을 믿습니다. 그 두 벌이 갈릴 뻔한 사건이 이미 있었습니다(#444리뷰 — 아홉 vs 열).#521과 같은 모양입니다 — 문면 표(errorText.ts)를 tsc 가 잡는데 서버만 고치는 사람은npm run build를 안 돌려서 웹 빌드만 빨간 채로 머지됐던 그 자리입니다. 여기는 「돌리는 사람」이 아니라 CI 판별이 같은 일을 합니다.어떻게 고칠까 — 대조를 server 쪽으로 한 벌 옮기는 쪽이 낫다고 봅니다
두 안입니다.
ⓑ 는 이 레포에 이미 있는 모양입니다.
scoring_thresholds.yaml·app/rubrics/·survey.ts가 같은 방식으로 server 스위트에 물려 있습니다.python 쪽 대조는 지우지 않습니다 —
server/없이 받은 환경에서 조용히 통과하도록 만들어 둔 갈래가 있어서, 그쪽은 그쪽 조건에서 돕니다.범위
server/src/test/.../AiServiceWarningCodesMirrorTest(가칭) —Literal목록과 javadoc 목록을 집합으로 대조server/build.gradle—inputs.file('../ai-service/app/schemas.py').github/workflows/ci.yml—server_extra에 같은 경로 (안 걸면CiServerFilterMirrorsGradleInputsTest가 빨개진다)#613이 목록을 10 → 12 로 늘립니다. 그 PR 을 막을 이유는 아니고(그쪽은 양쪽을 같이 고치므로 대조가 도는 방향입니다) 이 일은 그 뒤에 올려 숫자를 맞춥니다.관련:
#613·#444(두 벌이 갈릴 뻔한 사건) ·#521(같은 모양의 트리거 결함) ·#285(입력 선언 ↔ ci.yml 대조)