Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions REPORT.md
Original file line number Diff line number Diff line change
@@ -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 가 `<basename>#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` 와 **같은 모양**). 넘치는 이유는 모양이 아니라 ★**턴당 비용**이다.
Expand Down
6 changes: 6 additions & 0 deletions STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` 와 같은 모양). 원인은 ★**턴당 비용**.
Expand Down
43 changes: 43 additions & 0 deletions docs/worklog/2026-09-21-prune-low-priority-followups.json
Original file line number Diff line number Diff line change
@@ -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": []
}
76 changes: 76 additions & 0 deletions docs/worklog/2026-09-21-prune-low-priority-followups.md
Original file line number Diff line number Diff line change
@@ -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 는 `<basename>#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** 가 나온다 —
그래서 위에 파생식과 명령을 통째로 적었다.
Loading