From 9575bc9d2a4ed8cef31b05ede21059174af5c91a Mon Sep 17 00:00:00 2001 From: jun0 Date: Mon, 21 Sep 2026 15:25:36 +0900 Subject: [PATCH] =?UTF-8?q?docs(worklog):=20=EC=B6=94=EC=B2=9C=20=ED=9B=84?= =?UTF-8?q?=EC=86=8D=EC=9E=91=EC=97=85=202=EA=B1=B4=20=EA=B8=B0=EA=B0=81?= =?UTF-8?q?=20=E2=80=94=20=EB=B3=B4=EB=93=9C=EC=97=90=EC=84=9C=20=EB=82=B4?= =?UTF-8?q?=EB=A6=AC=EB=90=98=20=EA=B8=B0=EB=A1=9D=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=82=B4=EB=A6=AC=EC=A7=80=20=EC=95=8A=EB=8A=94=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 운영자 지시(2026-09-21 우선순위 정리)에 따라 이 repo 의 열린 제안 4건 중 검사기 다듬기 축 2건을 declinedProposals 로 닫는다. 제품 코드 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 ★«선언»이고 «삭제»가 아니다 — proposals[] 원소 삭제 0. ref 가 0-기반 #pN 이라 원소를 지우면 뒤 제안의 ref 가 조용히 바뀐다. 서식은 선례 2026-09-17-ldc-asm-regeneration-declined.json 그대로. 실측: 소비자 파생식(open = 전체 − adopted − declined − injected − dismissed) 재현 → open 4 → 2 · 남기기로 한 둘 그대로 열림 · ref 총수 99 불변. 되살리기: 그 json 의 declinedProposals[] 에서 해당 ref 줄을 빼면 다시 열린다. Co-Authored-By: Claude Opus 5 --- REPORT.md | 9 +++ STATE.md | 6 ++ ...26-09-21-prune-low-priority-followups.json | 43 +++++++++++ ...2026-09-21-prune-low-priority-followups.md | 76 +++++++++++++++++++ 4 files changed, 134 insertions(+) create mode 100644 docs/worklog/2026-09-21-prune-low-priority-followups.json create mode 100644 docs/worklog/2026-09-21-prune-low-priority-followups.md diff --git a/REPORT.md b/REPORT.md index dbb02acc..0ab9400d 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,4 +1,13 @@ # REPORT +## [2026-09-21] 추천 후속작업 **2건 기각** — 보드에서 내리되 기록에서 내리지 않는다 (rustjava-prune-declined-followup-proposals-2026-09-21) +- 무엇을: 운영자 지시(2026-09-21 「우선순위 낮은 작업은 추천 목록에서 정리하라」)에 따라 이 repo 의 열린 제안 **4건 중 2건**을 `declinedProposals` 로 닫았다. ★**제품 코드 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`. +- ★★**«선언»이고 «삭제»가 아니다** — `proposals[]` 원소는 **하나도 지우지 않았다**. ref 가 `#p<0-기반 인덱스>` 라 원소를 지우면 **뒤 제안의 ref 가 조용히 다른 것을 가리킨다.** 서식은 이 repo 의 선례(`2026-09-17-ldc-asm-regeneration-declined.json`)를 그대로 따랐다 — 새 서식 발명 0. +- ★**검증은 세서 했다**: 소비자 파생식 `open = 전체 − adopted − declined − injected − dismissed`(`~/tower/bin/cockpitd.js`)를 그대로 재현 — ★**open 4 → 2** · ★**남기기로 한 둘이 그대로 열림**(과잉 차단 0) · ★**ref 총수 99 불변**(인덱스 밀림 0). `python3 scripts/check-worklog-json.py` **rc 0**. ※`injected`·`dismissed` 는 tower 원장에 있어 **이 repo 만 세면 32 가 나온다** — 명령 전문은 worklog 에 있다. +- ★**되살리는 법**: `docs/worklog/2026-09-21-prune-low-priority-followups.json` 의 `declinedProposals[]` 에서 그 ref 줄을 **빼면** 다시 열린다. +- ★**대가**: 기각이 **제안이 든 파일이 아닌 제3 파일**에 적히므로 그 워크로그만 연 사람은 닫힌 표시를 못 본다(관용구의 성질). 두 제안이 가리킨 사실 자체는 각 docstring 에 **그대로 남는다**. +- 검증: DoD 10명령 rc 0. ★**후속 추천 0건**(이 회차가 새 카드를 낳으면 지시에 어긋난다). 상세 = `docs/worklog/2026-09-21-prune-low-priority-followups.{md,json}`. + ## [2026-09-20] `[Ljava/lang/String;` 오버플로 — ★**원인을 찾았고, 지난 회차 기재가 «틀렸다»** (rustjava-error-path-string-array-hiding-overflows-stack-p1) - 무엇을: 채택 제안 `2026-09-20-error-path-class-closure#p1`(★**조사 회차** — 제품 코드 **0줄**). cap 20 에서 `stack overflow, aborting`(rc 134)을 **재현**하고 원인을 규명했다. - ★★**결론 — 지난 회차의 원인 기재 「its recursion does not come back through the loader, so the cap cannot end it」은 «반증»됐다.** 매 턴 로더로 **돌아오고**, cap 이 **끝낸다** — 살아남은 전 실행에서 `asked = cap + 1`(= `[C` 와 **같은 모양**). 넘치는 이유는 모양이 아니라 ★**턴당 비용**이다. diff --git a/STATE.md b/STATE.md index 27af920e..dc5dadad 100644 --- a/STATE.md +++ b/STATE.md @@ -7,6 +7,12 @@ (둘 다 이것보다 오래됐고 MERGEABLE/CONFLICTING 처분이 이미 걸려 있다). 겹침은 전부 **append 형 합집합**이라 해소는 기계적이다) ## 완료 +- [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`. + ★★**«선언»이고 «삭제»가 아니다** — `proposals[]` 원소 삭제 **0**(지우면 0-기반 `#pN` 이 밀려 **다른 제안의 ref 가 바뀐다**). 서식은 선례 `2026-09-17-ldc-asm-regeneration-declined.json` 그대로. + ★**실측**: 소비자 파생식 재현 → **open 4 → 2** · 남기기로 한 둘 **그대로 열림**(과잉 차단 0) · **ref 총수 99 불변** · `check-worklog-json.py` **rc 0**. + ★**되살리기**: 그 json 의 `declinedProposals[]` 에서 ref 줄을 빼면 다시 열린다. - [rustjava-error-path-string-array-hiding-overflows-stack-p1] ★★**`[Ljava/lang/String;` 오버플로의 원인 — 지난 회차 기재가 «틀렸다».** 채택 제안 `2026-09-20-error-path-class-closure#p1` · ★**조사 회차 · 제품 코드 0줄**. ★**재현**: cap 20 · 기본 스택 → `stack overflow, aborting` rc **134**. ★★**반증**: 「로더로 안 돌아와 cap 이 못 끝낸다」는 **거짓** — 살아남은 전 실행에서 `asked = cap+1`(= `[C` 와 같은 모양). 원인은 ★**턴당 비용**. diff --git a/docs/worklog/2026-09-21-prune-low-priority-followups.json b/docs/worklog/2026-09-21-prune-low-priority-followups.json new file mode 100644 index 00000000..91c3e646 --- /dev/null +++ b/docs/worklog/2026-09-21-prune-low-priority-followups.json @@ -0,0 +1,43 @@ +{ + "schema": "worklog/v1", + "date": "2026-09-21", + "taskId": "rustjava-prune-declined-followup-proposals-2026-09-21", + "summary": "Disposition round, no code. Closed the two open follow-up proposals that ask the pipeline to refine its own checkers, on the 2026-09-21 operator instruction to clear low-priority work off the recommendation board so the Battle Monster play axis is not queued behind it. The two proposals about runtime behaviour (Jvm::exception's missing floor, whether Jvm::new may panic) are deliberately left open. Declining here is a declaration, not a deletion: the proposals[] elements stay exactly where they are, because that array's 0-based index is the ref.", + "decision": "decline 2026-09-19-nonliteral-blind-spot-is-reported-not-gated#p0 and 2026-09-20-lock-script-output-order#p0; leave 2026-09-20-string-array-hiding-overflows-stack#p0 and 2026-09-20-name-the-missing-bootstrap-class#p0 open", + "declineReason": "2026-09-21 운영자 지시 — 배틀몬스터 플레이 집중을 위한 우선순위 정리. Not a judgement that either proposal is wrong: both are checker-refinement work (a product/test split in the exception-name report; a tuple-unpack hole in the output-order lock), and neither is a defect a user can reach. They are being taken off the board, not off the record.", + "revert": "Remove the ref from declinedProposals[] in this file and it is open again on the next scan — the proposal body was never touched. Delete both refs to restore the 2026-09-21 board exactly.", + "measurements": { + "open_before": 4, + "open_after": 2, + "declined_here": 2, + "left_open": 2, + "proposals_elements_removed": 0, + "proposal_bodies_edited": 0, + "new_proposals": 0, + "product_lines_changed": 0, + "open_predicate": "open = proposals - adopted - declined - injected - dismissed (cockpitd.js collectProposals/scanRepoSimple); injected/dismissed come from ~/tower/data/{injected,dismissed}.json, so a repo-local count alone reads 32, not 4" + }, + "verification": [ + "baseline reproduced the number the ticket quotes: replicating the consumer's predicate over this tree plus tower's two ledgers gives open 4, and names exactly the 4 refs the ticket lists as 2-to-close + 2-to-keep", + "after: open 2, and the two remaining refs are the two the ticket says to keep (2026-09-20-string-array-hiding-overflows-stack#p0, 2026-09-20-name-the-missing-bootstrap-class#p0) - the keep set was counted, not assumed, so over-pruning would show", + "no ref drift: the full ref list derived from proposals[] indices is byte-identical before and after (99 refs both ways), because nothing was removed from any proposals[] array", + "schema lock: python3 scripts/check-worklog-json.py rc 0", + "full DoD block rc 0" + ], + "changes": [ + "docs/worklog/2026-09-21-prune-low-priority-followups.{md,json}: this disposition", + "REPORT.md, STATE.md: the round record", + "no code, and no edit to either proposal's own worklog file" + ], + "issues": [ + "Declining is recorded in a third file rather than in the file that carries the proposal, following this repo's existing idiom (2026-09-17-ldc-asm-regeneration-declined.json declines a 2026-09-16 proposal). The cost is that a reader opening the proposal's own worklog sees no sign it was closed; the consumer is the only thing that joins them.", + "The output-order lock's named hole stays open in the docstring of scripts/check-script-output-order.py, and the exception-name report still does not say product vs test. Both remain true after this round; what changed is that neither is on the board asking to be picked up.", + "The open count depends on tower's injected.json and dismissed.json, which live outside this repo. A future reader re-measuring here alone will get 32 and think this round did nothing - the predicate is recorded above for that reason." + ], + "adoptedProposals": [], + "declinedProposals": [ + "2026-09-19-nonliteral-blind-spot-is-reported-not-gated#p0", + "2026-09-20-lock-script-output-order#p0" + ], + "proposals": [] +} diff --git a/docs/worklog/2026-09-21-prune-low-priority-followups.md b/docs/worklog/2026-09-21-prune-low-priority-followups.md new file mode 100644 index 00000000..1b257561 --- /dev/null +++ b/docs/worklog/2026-09-21-prune-low-priority-followups.md @@ -0,0 +1,76 @@ +# 2026-09-21 — 추천 후속작업 **2건 기각** (rustjava-prune-declined-followup-proposals-2026-09-21) + +운영자 지시(2026-09-21): 「주요도가 낮은 작업들은 미진행 … 불필요하거나 우선순위가 낮은 작업들은 +추천 작업 목록에서 삭제해 정리해 달라」. ★**닫을 목록은 총괄이 골랐고 이 회차는 고르지 않았다.** + +**제품 코드 0줄.** 판단을 기록하는 회차이고, 제안 본문을 다시 쓰는 회차가 아니다. + +--- + +## 1. 무엇을 닫았고 무엇을 남겼나 + +| ref | 처분 | 무엇을 요구하는 제안인가 | +|---|---|---| +| `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` | **남김** | `Jvm::exception` 에 바닥을 — 런타임 재귀 | +| `2026-09-20-name-the-missing-bootstrap-class#p0` | **남김** | `Jvm::new` 가 패닉해도 되는가 — 런타임 결정 | + +★**「틀렸다」고 닫는 것이 아니다.** 둘 다 실측 위에 서 있고 둘 다 오늘 참이다. +닫는 이유는 하나다 — ★**둘 다 파이프라인이 자기 검사기를 다듬는 일이고, 사용자가 닿는 결함이 아니다.** + +## 2. ★«선언»이지 «삭제»가 아니다 + +`proposals[]` 의 원소는 **하나도 건드리지 않았다.** ref 는 `#p<0-기반 인덱스>` 라 +원소를 지우면 ★**뒤 원소의 ref 가 조용히 다른 제안을 가리킨다.** +⇒ 기각은 별 파일의 `declinedProposals[]` 에 **ref 를 적는 것**으로 한다. + +★**이 서식은 이 repo 에 이미 있다** — `2026-09-17-ldc-asm-regeneration-declined.json` 이 +2026-09-16 의 제안을 같은 방식으로 기각했다. 새 서식을 만들지 않았다. + +## 3. ★되살리는 법 (한 줄) + +> `docs/worklog/2026-09-21-prune-low-priority-followups.json` 의 `declinedProposals[]` 에서 +> 그 ref 줄을 **빼면** 다음 스캔에서 다시 열린다. 제안 본문은 손대지 않았으므로 원상 그대로다. + +## 4. 검증 — ★주장하지 않고 **셌다** + +소비자의 파생식은 `open = 전체 − adopted − declined − injected − dismissed` 이고 +(`~/tower/bin/cockpitd.js` 의 `collectProposals`/`scanRepoSimple`), +`injected`·`dismissed` 는 **tower 의 원장 두 파일**에 있다. +★**그래서 이 repo 만 세면 32 가 나오고 4 가 나오지 않는다** — 재현하려면 그 둘을 함께 읽어야 한다. + +```sh +python3 - <<'PY' +import json,glob,os +inj=json.load(open(os.path.expanduser('~/tower/data/injected.json'))) +dis=json.load(open(os.path.expanduser('~/tower/data/dismissed.json'))) +refs=[];disp=set() +for f in sorted(glob.glob('docs/worklog/*.json')): + d=json.load(open(f));b=os.path.basename(f)[:-5] + for i,_ in enumerate(d.get('proposals',[])): refs.append(f"{b}#p{i}") + disp.update(d.get('adoptedProposals',[]));disp.update(d.get('declinedProposals',[])) +op=[r for r in refs if r not in disp and r not in inj and r not in dis] +print("refs",len(refs),"open",len(op)); [print(" ",r) for r in op] +PY +``` + +| | refs(전체) | open | 열린 ref | +|---|---|---|---| +| 착수 전 | **99** | ★**4** | nonliteral#p0 · lock-script-output-order#p0 · string-array#p0 · name-the-missing#p0 | +| 착수 후 | ★**99**(불변) | ★**2** | ★**string-array#p0 · name-the-missing#p0** — 남기기로 한 바로 그 둘 | + +★**닫는 쪽만 세지 않았다** — 남기는 둘이 **그대로 열려 있음**을 같은 명령으로 확인했다(과잉 차단 0). +★**refs 총수 99 불변**이 「인덱스가 밀리지 않았다」의 직접 증거다. + +★**스키마 검사기는 이 repo 에 «있다»**: `scripts/check-worklog-json.py`(CI 잡 `worklog_json` + DoD 4번째 줄). +`declinedProposals` 의 원소가 `#p` 를 포함하는 ref 인지까지 본다 — 돌렸고 **rc 0**. + +## 5. ★남는 빚 — 숨기지 않는다 + +- 기각을 **제안이 든 파일이 아니라 제3 파일**에 적는다(repo 관용구 그대로). ⇒ 제안의 워크로그만 연 + 사람은 그것이 닫혔다는 표시를 **못 본다**. 둘을 잇는 것은 소비자뿐이다. +- 두 제안이 가리킨 사실은 **그대로 남는다** — 출력순서 잠금의 구멍은 그 docstring 에, + 제품/테스트 미구분은 그 보고에. 바뀐 것은 **보드에 올라와 있느냐**뿐이다. +- open 수가 **repo 밖 원장 2개에 의존한다**. 나중에 여기서만 다시 재면 **32** 가 나온다 — + 그래서 위에 파생식과 명령을 통째로 적었다.