diff --git a/REPORT.md b/REPORT.md index d1d3d7e9..88a17a90 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,4 +1,10 @@ # REPORT +## [2026-09-23] `## 다음` 은 «ref 목록»으로 남긴다 — 카드로 옮기면 할 일이 0으로 보인다 (rustjava-2026-09-23-stale-next-pointer-and-euc-kr-boundary-adopt-p1) +- 무엇을: `STATE.md` `## 다음` 머리에 규칙 3줄을 박고 절을 한 번 재작성했다 — 항목은 카드 ref·PR 번호만, 선행 사슬 1개, 카드 밖 항목(PR #81) 1개. 종전 ⓪ 블록은 사료로 내렸다. +- 왜: 세 번 낡았고 세 번 다 «지목을 쓴 회차 ≠ 닫은 회차»였다(규칙 「닫히는 즉시」는 08-27 부터 있었다). 카드 전면 이전(⒞)은 tower 술어로 이 레인 열린 카드가 **0**(32건 전건 injected)이라 정본이 「할 일 없음」을 말하게 돼 기각. +- 사용자 영향: 없음(문서). 낡은 줄이 생겨도 줄당 조회 1회(`adoptedProposals` 에 있나)로 보인다. +- 후속 추천: 총괄 몫 1건 — 주입됐으나 이름 일치 티켓이 없는 RustJava 카드 11건 처분 확인(상세 = `docs/worklog/2026-09-23-next-section-canon-decision.md`). + ## [2026-09-23] `## 다음` 이 세 번째로 낡았고, 그 밑에서 EUC-KR 한 글자가 조용히 사라지고 있었다 (rustjava-next-slice-and-stale-next-pointer) - 무엇을: `STATE.md` `## 다음` 의 모든 「다음 후보」를 `git merge-base --is-ancestor` 로 **전수 재측**해 **8건 중 7건이 이미 닫혀 있음**을 확인하고 사료로 접었으며, 살아 있는 후보만 새 `⓪` 블록에 올렸다. 재측 과정에서 유일하게 «열려 있던» 항목(④-3 `InputStreamReader` 디코더)이 실제 결함임이 드러나 **그 자리에서 고쳤다**. - 왜: `LANE_IDLE rustjava`(2026-09-23 · ★**1088분** 조용 · 큐 0 · running 0). 근인은 워커가 아니라 **발권**이었고, 발권이 멈춘 이유는 `## 다음` 의 최우선 항목이 **이미 끝난 일**을 가리켰기 때문이다. ★**이 절이 그 병을 스스로 두 번 기록해 놓고 세 번째를 냈다** — 2026-09-11 에 「다음 실작업 = ③의 null-guard」로 고쳐 쓴 그 null-guard 가 **같은 날 이미 닫혀 있었다**(`6da7d66f`). diff --git a/STATE.md b/STATE.md index 6e4748b0..2462b7dc 100644 --- a/STATE.md +++ b/STATE.md @@ -7,6 +7,7 @@ (둘 다 이것보다 오래됐고 MERGEABLE/CONFLICTING 처분이 이미 걸려 있다). 겹침은 전부 **append 형 합집합**이라 해소는 기계적이다) ## 완료 +- [rustjava-2026-09-23-stale-next-pointer-and-euc-kr-boundary-adopt-p1] `## 다음` 정본 결정 = ⒝ 얇은 층(ref + 선행 사슬 + 카드 밖 항목만 · 산문 지목 금지). ⒞ 기각 근거 = tower 술어로 열린 카드 0(32건 전건 injected). 채택 `2026-09-23-stale-next-pointer-and-euc-kr-boundary#p1`. 상세 `docs/worklog/2026-09-23-next-section-canon-decision.md`. - [rustjava-prune-declined-followup-proposals-2026-09-21] ★**추천 후속작업 2건 기각** — 운영자 지시(2026-09-21 우선순위 정리). ★제품 코드 **0줄** · 새 제안 **0** · 검사기/CI 신설 **0**. ★**닫은 둘**(검사기 다듬기 축): `2026-09-19-nonliteral-blind-spot-is-reported-not-gated#p0` · `2026-09-20-lock-script-output-order#p0`. ★**남긴 둘**(런타임 축): `2026-09-20-string-array-hiding-overflows-stack#p0` · `2026-09-20-name-the-missing-bootstrap-class#p0`. @@ -1510,7 +1511,20 @@ ## 다음 -### ⓪살아 있는 후보 — ★★**[2026-09-23 전수 재측] 이 블록«만» 읽어라. ①~⑤ 는 사료다.** +### ⓪규칙 — ★**이 절은 «카드 ref + 선행관계 + 카드 밖 항목»만 적는다**(2026-09-23 결정 · `…-adopt-p1`) + +★**항목은 전부 ref(`#pN`) 또는 PR 번호로 적는다 — 「다음 실작업 = X」 같은 산문 지목 금지.** 할 일의 본문은 카드(`docs/worklog/*.json`)가 갖는다. +★**닫힘 판정 = 그 ref 가 어느 worklog 의 `adoptedProposals`/`declinedProposals` 에 있다**(PR 은 `state`) — 한 줄당 조회 1회로 끝난다. 닫힌 줄은 **닫는 회차가** 지운다. +★**카드 «열림»은 tower 술어(`… − injected`)로 세지 마라** — 이 레인은 그 술어로 **0**이다(주입 = 발권 요청일 뿐 착지가 아니다). 여기 술어는 `전체 − adopted − declined` 다. + +1. **선행 사슬**(카드가 표현 못 하는 유일한 것): `2026-09-17-link-lambdametafactory#p1`(결정) → `#p0`(어댑터) → `java.lang.invoke` 패키지(카드 없음 · 근거 = `rustjava-runtime/src/classes/java/lang/invoke` **부재**) → `2026-09-17-string-concat-recipe-arity#p1`. +2. **순서 없음**: `2026-09-18-bootstrap-argument-index-and-tag#p0` · `2026-09-20-name-the-missing-bootstrap-class#p0`(둘 다 `queue/rustjava` 발권됨) · `2026-09-20-string-array-hiding-overflows-stack#p0` · `2026-09-12-zip-getinputstream-guard-lock#p0` · `2026-09-12-test-class-scratch-premise#p0`. +3. **카드 밖**: PR **#81** — `CONFLICTING`(2026-09-23 워밍 후 재조회) · 충돌 해소 선행. + +---- 이하 ⓪(2026-09-23 전수 재측 판)·①~⑤ 는 사료다. ★**「다음」으로 읽지 마라** ---- + + +### ⓪-사료 — 2026-09-23 전수 재측 판(위 ⓪규칙으로 대체됨) ★★★**이 절이 자기 규율(「닫히는 즉시 닫아라」)을 «세 번» 어겼다** — ⑴③-0 `…claude-md-prune-disposition`(2026-08-27 해소)이 최우선에 남아 레인이 조용해졌고 ⑵①의 「다음은 S5」가 8일 낡은 채 남아 2026-09-11 **중복 발권**을 만들었고 @@ -1554,7 +1568,6 @@ EUC-KR 은 「마지막 바이트 >= 0x81 이면 한 바이트 보류」였다 ⇒ **완성된 쌍**의 후행 바이트도 보류돼 그 쌍의 선두 바이트가 홀로 남고, 매 read 마다 새로 만드는 디코더가 그것을 **자기 상태로 삼켜** 버렸다. 실측 = `"12345678한"`(EUC-KR 10바이트) → ★**`"12345678\u{FFFD}"`**. 처방은 전방 주사(선두면 2, 아니면 1)이고 테스트 3형상으로 잠갔다. ----- 이하 ①~⑤ 는 사료다. ★**「다음」으로 읽지 마라** ---- ### ①(최우선이 «아니게 됐다») upstream 동기화 — ★★**[2026-09-11 갱신] 캠페인 «종료». 동기 회차를 열지 마라.** diff --git a/docs/worklog/2026-09-23-next-section-canon-decision.json b/docs/worklog/2026-09-23-next-section-canon-decision.json new file mode 100644 index 00000000..f5485bbc --- /dev/null +++ b/docs/worklog/2026-09-23-next-section-canon-decision.json @@ -0,0 +1,13 @@ +{ + "date": "2026-09-23", + "taskId": "rustjava-2026-09-23-stale-next-pointer-and-euc-kr-boundary-adopt-p1", + "summary": "STATE.md「## 다음」의 정본 결정 — ⒝ 얇은 층(카드 ref + 선행관계 + 카드 밖 항목만). 산문 지목 금지 · 닫힘 = adopted/declined 조회 1회.", + "decision": "b-thin-layer", + "options": { + "a-keep-hand-maintained": "재발 3회/27일 · 규칙「닫히는 즉시」가 08-27 부터 있었는데 2회 더 깨짐 · LANE_IDLE 1088분 · 중복 발권 1. 잃는 것 0.", + "b-thin-layer": "절이 44줄 → 본문 3항목(ref 9 · 사슬 1 · PR 1). 닫힘 판정이 줄당 조회 1회. 잃는 것: 산문 근거(카드·사료로 이동). 낡을 수는 여전히 있다 — 다만 낡음이 '조회 1회로 보인다'.", + "c-cards-only": "tower 술어로 열린 카드 0(32건 전건 injected) ⇒ 정본이 '할 일 없음'을 말한다. 잃는 것: 선행 사슬 1(노드 4), 카드 밖 항목 1(PR #81), 주입됐으나 이름 일치 티켓이 없는 카드 가시성." + }, + "adoptedProposals": ["2026-09-23-stale-next-pointer-and-euc-kr-boundary#p1"], + "proposals": [] +} diff --git a/docs/worklog/2026-09-23-next-section-canon-decision.md b/docs/worklog/2026-09-23-next-section-canon-decision.md new file mode 100644 index 00000000..d4169845 --- /dev/null +++ b/docs/worklog/2026-09-23-next-section-canon-decision.md @@ -0,0 +1,31 @@ +# 2026-09-23 — `## 다음` 정본 결정 (rustjava-2026-09-23-stale-next-pointer-and-euc-kr-boundary-adopt-p1) + +채택: `2026-09-23-stale-next-pointer-and-euc-kr-boundary#p1`. 결정 = **⒝ 얇은 층**. + +## 반증 먼저 +- ⒜ 세 재발은 같은 형태(닫힌 항목이 절에 남음)인가 — **예**, 그리고 형태가 하나 더 좁혀진다: ★**지목을 쓴 회차 ≠ 닫은 회차**. + ③번 실측: `6521c79f`(09-11 10:58)가 「다음 실작업 = ③의 null-guard」를 **썼고**, `6da7d66f`(09-11 17:22 · #36)가 그 일을 **닫으면서 절을 안 건드렸다**. + ⇒ 사료의 「쓰인 날 이미 낡아 있었다」는 부정확하다 — 쓸 때는 옳았고 **6시간 뒤** 낡았다. +- ⒝ 규정이 있었나 — **있었다**. 「닫히는 즉시 닫아라」가 `4bb796de`(2026-08-27)부터 STATE.md 에 있다. 이후 2회 더 깨졌다. + 안 지켜진 이유 = 닫는 회차의 티켓은 `## 다음` 을 모른다(티켓 본문에 없다). 반면 카드는 발권 티켓이 `adoptedProposals` 기록을 **명시 요구**해 닫는 회차가 알고 닫는다. + +## 비교 +| 선택지 | 비용 | 잃는 것 | +|---|---|---| +| ⒜ 현행(손 갱신) | 재발 3회/27일 · 최근 1회 `LANE_IDLE` 1088분 · 중복 발권 1 | 0 | +| ⒝ 얇은 층 | 절 1회 재작성 · 본문 3항목(ref 9 · PR 1) | 산문 근거(사료로 이동) · 낡음 자체는 남되 줄당 조회 1회로 보인다 | +| ⒞ 카드 정본 · 절 폐지 | 0 | ★tower 술어 열린 카드 **0**(전 32건 injected)이라 정본이 「할 일 없음」을 말함 · 선행 사슬 1(노드 4) · 카드 밖 항목 1(PR #81) | + +⒞가 결정적으로 탈락한 이유: `open = 전체 − adopted − declined − injected − dismissed`(wie 회차 술어) 로 재면 이 레인 **0**(전체 102 · adopted 67 · declined 3 · injected 32 · dismissed 0). +`− injected` 를 빼면 **32**. 그 32 중 이 레인이 칠 수 있는 이름을 15개 조회하니 이름 일치 티켓이 있는 것 **4**(queued 2 · 미완 2), **없는 것 11** +(예: `link-lambdametafactory#p0/#p1` 주입 09-17 21:58 → `directives/processed/` 로 처리됐는데 `tasks/` 에 그 ref 문자열 0). +⇒ 카드만 두면 이 11건은 어디에도 안 보인다. ※이름 기반 조회라 다른 이름 티켓은 못 잡는다 — 「없다」가 아니라 「이름 일치 0」. + +## 재측(⑵) +새 ⓪ 의 ref 8개 전건: origin/main `docs/worklog/*.json` 의 adopted/declined 에 **0회** ⇒ 전건 열림. `java.lang.invoke` 디렉터리 부재(0). PR #81 `OPEN`·`CONFLICTING`(워밍 후 재조회). + +## 총괄 몫(발권 측 · 이 레인은 무접촉) +- 주입(`injected`)되고 `directives/processed/` 로 간 RustJava 카드 중 이름 일치 티켓이 없는 11건의 처분 확인 — tower 가 이미 숨겼으므로 발권도 기각 기록도 없으면 조용히 사라진다. + +## 후속 +없음(새 제안 0 · 검사기 0).