Skip to content

Commit 9575bc9

Browse files
jun0claude
andcommitted
docs(worklog): 추천 후속작업 2건 기각 — 보드에서 내리되 기록에서 내리지 않는다
운영자 지시(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 <noreply@anthropic.com>
1 parent 2bc24f4 commit 9575bc9

4 files changed

Lines changed: 134 additions & 0 deletions

File tree

‎REPORT.md‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
# REPORT
2+
## [2026-09-21] 추천 후속작업 **2건 기각** — 보드에서 내리되 기록에서 내리지 않는다 (rustjava-prune-declined-followup-proposals-2026-09-21)
3+
- 무엇을: 운영자 지시(2026-09-21 「우선순위 낮은 작업은 추천 목록에서 정리하라」)에 따라 이 repo 의 열린 제안 **4건 중 2건**을 `declinedProposals` 로 닫았다. ★**제품 코드 0줄 · 새 제안 0 · 검사기/CI 신설 0.**
4+
- ★**닫은 둘**(둘 다 **검사기 다듬기**이고 사용자가 닿는 결함이 아니다): `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`.
5+
- ★★**«선언»이고 «삭제»가 아니다** — `proposals[]` 원소는 **하나도 지우지 않았다**. ref 가 `<basename>#p<0-기반 인덱스>` 라 원소를 지우면 **뒤 제안의 ref 가 조용히 다른 것을 가리킨다.** 서식은 이 repo 의 선례(`2026-09-17-ldc-asm-regeneration-declined.json`)를 그대로 따랐다 — 새 서식 발명 0.
6+
- ★**검증은 세서 했다**: 소비자 파생식 `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 에 있다.
7+
- ★**되살리는 법**: `docs/worklog/2026-09-21-prune-low-priority-followups.json` 의 `declinedProposals[]` 에서 그 ref 줄을 **빼면** 다시 열린다.
8+
- ★**대가**: 기각이 **제안이 든 파일이 아닌 제3 파일**에 적히므로 그 워크로그만 연 사람은 닫힌 표시를 못 본다(관용구의 성질). 두 제안이 가리킨 사실 자체는 각 docstring 에 **그대로 남는다**.
9+
- 검증: DoD 10명령 rc 0. ★**후속 추천 0건**(이 회차가 새 카드를 낳으면 지시에 어긋난다). 상세 = `docs/worklog/2026-09-21-prune-low-priority-followups.{md,json}`.
10+
211
## [2026-09-20] `[Ljava/lang/String;` 오버플로 — ★**원인을 찾았고, 지난 회차 기재가 «틀렸다»** (rustjava-error-path-string-array-hiding-overflows-stack-p1)
312
- 무엇을: 채택 제안 `2026-09-20-error-path-class-closure#p1`(★**조사 회차** — 제품 코드 **0줄**). cap 20 에서 `stack overflow, aborting`(rc 134)을 **재현**하고 원인을 규명했다.
413
- ★★**결론 — 지난 회차의 원인 기재 「its recursion does not come back through the loader, so the cap cannot end it」은 «반증»됐다.** 매 턴 로더로 **돌아오고**, cap 이 **끝낸다** — 살아남은 전 실행에서 `asked = cap + 1`(= `[C` 와 **같은 모양**). 넘치는 이유는 모양이 아니라 ★**턴당 비용**이다.

‎STATE.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
(둘 다 이것보다 오래됐고 MERGEABLE/CONFLICTING 처분이 이미 걸려 있다). 겹침은 전부 **append 형 합집합**이라 해소는 기계적이다)
88

99
## 완료
10+
- [rustjava-prune-declined-followup-proposals-2026-09-21] ★**추천 후속작업 2건 기각** — 운영자 지시(2026-09-21 우선순위 정리). ★제품 코드 **0줄** · 새 제안 **0** · 검사기/CI 신설 **0**.
11+
★**닫은 둘**(검사기 다듬기 축): `2026-09-19-nonliteral-blind-spot-is-reported-not-gated#p0` · `2026-09-20-lock-script-output-order#p0`.
12+
★**남긴 둘**(런타임 축): `2026-09-20-string-array-hiding-overflows-stack#p0` · `2026-09-20-name-the-missing-bootstrap-class#p0`.
13+
★★**«선언»이고 «삭제»가 아니다** — `proposals[]` 원소 삭제 **0**(지우면 0-기반 `#pN` 이 밀려 **다른 제안의 ref 가 바뀐다**). 서식은 선례 `2026-09-17-ldc-asm-regeneration-declined.json` 그대로.
14+
★**실측**: 소비자 파생식 재현 → **open 4 → 2** · 남기기로 한 둘 **그대로 열림**(과잉 차단 0) · **ref 총수 99 불변** · `check-worklog-json.py` **rc 0**.
15+
★**되살리기**: 그 json 의 `declinedProposals[]` 에서 ref 줄을 빼면 다시 열린다.
1016
- [rustjava-error-path-string-array-hiding-overflows-stack-p1] ★★**`[Ljava/lang/String;` 오버플로의 원인 — 지난 회차 기재가 «틀렸다».** 채택 제안 `2026-09-20-error-path-class-closure#p1` · ★**조사 회차 · 제품 코드 0줄**.
1117
★**재현**: cap 20 · 기본 스택 → `stack overflow, aborting` rc **134**.
1218
★★**반증**: 「로더로 안 돌아와 cap 이 못 끝낸다」는 **거짓** — 살아남은 전 실행에서 `asked = cap+1`(= `[C` 와 같은 모양). 원인은 ★**턴당 비용**.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"schema": "worklog/v1",
3+
"date": "2026-09-21",
4+
"taskId": "rustjava-prune-declined-followup-proposals-2026-09-21",
5+
"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.",
6+
"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",
7+
"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.",
8+
"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.",
9+
"measurements": {
10+
"open_before": 4,
11+
"open_after": 2,
12+
"declined_here": 2,
13+
"left_open": 2,
14+
"proposals_elements_removed": 0,
15+
"proposal_bodies_edited": 0,
16+
"new_proposals": 0,
17+
"product_lines_changed": 0,
18+
"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"
19+
},
20+
"verification": [
21+
"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",
22+
"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",
23+
"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",
24+
"schema lock: python3 scripts/check-worklog-json.py rc 0",
25+
"full DoD block rc 0"
26+
],
27+
"changes": [
28+
"docs/worklog/2026-09-21-prune-low-priority-followups.{md,json}: this disposition",
29+
"REPORT.md, STATE.md: the round record",
30+
"no code, and no edit to either proposal's own worklog file"
31+
],
32+
"issues": [
33+
"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.",
34+
"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.",
35+
"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."
36+
],
37+
"adoptedProposals": [],
38+
"declinedProposals": [
39+
"2026-09-19-nonliteral-blind-spot-is-reported-not-gated#p0",
40+
"2026-09-20-lock-script-output-order#p0"
41+
],
42+
"proposals": []
43+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# 2026-09-21 — 추천 후속작업 **2건 기각** (rustjava-prune-declined-followup-proposals-2026-09-21)
2+
3+
운영자 지시(2026-09-21): 「주요도가 낮은 작업들은 미진행 … 불필요하거나 우선순위가 낮은 작업들은
4+
추천 작업 목록에서 삭제해 정리해 달라」. ★**닫을 목록은 총괄이 골랐고 이 회차는 고르지 않았다.**
5+
6+
**제품 코드 0줄.** 판단을 기록하는 회차이고, 제안 본문을 다시 쓰는 회차가 아니다.
7+
8+
---
9+
10+
## 1. 무엇을 닫았고 무엇을 남겼나
11+
12+
| ref | 처분 | 무엇을 요구하는 제안인가 |
13+
|---|---|---|
14+
| `2026-09-19-nonliteral-blind-spot-is-reported-not-gated#p0` | ★**기각** | 예외 이름 보고에 «제품/테스트» 구분을 더하라 — 검사기 다듬기 |
15+
| `2026-09-20-lock-script-output-order#p0` | ★**기각** | 출력순서 잠금의 «튜플 언패킹» 구멍을 메워라 — 검사기 다듬기 |
16+
| `2026-09-20-string-array-hiding-overflows-stack#p0` | **남김** | `Jvm::exception` 에 바닥을 — 런타임 재귀 |
17+
| `2026-09-20-name-the-missing-bootstrap-class#p0` | **남김** | `Jvm::new` 가 패닉해도 되는가 — 런타임 결정 |
18+
19+
★**「틀렸다」고 닫는 것이 아니다.** 둘 다 실측 위에 서 있고 둘 다 오늘 참이다.
20+
닫는 이유는 하나다 — ★**둘 다 파이프라인이 자기 검사기를 다듬는 일이고, 사용자가 닿는 결함이 아니다.**
21+
22+
## 2. ★«선언»이지 «삭제»가 아니다
23+
24+
`proposals[]` 의 원소는 **하나도 건드리지 않았다.** ref 는 `<basename>#p<0-기반 인덱스>` 라
25+
원소를 지우면 ★**뒤 원소의 ref 가 조용히 다른 제안을 가리킨다.**
26+
⇒ 기각은 별 파일의 `declinedProposals[]` 에 **ref 를 적는 것**으로 한다.
27+
28+
★**이 서식은 이 repo 에 이미 있다** — `2026-09-17-ldc-asm-regeneration-declined.json` 이
29+
2026-09-16 의 제안을 같은 방식으로 기각했다. 새 서식을 만들지 않았다.
30+
31+
## 3. ★되살리는 법 (한 줄)
32+
33+
> `docs/worklog/2026-09-21-prune-low-priority-followups.json` 의 `declinedProposals[]` 에서
34+
> 그 ref 줄을 **빼면** 다음 스캔에서 다시 열린다. 제안 본문은 손대지 않았으므로 원상 그대로다.
35+
36+
## 4. 검증 — ★주장하지 않고 **셌다**
37+
38+
소비자의 파생식은 `open = 전체 − adopted − declined − injected − dismissed` 이고
39+
(`~/tower/bin/cockpitd.js` 의 `collectProposals`/`scanRepoSimple`),
40+
`injected`·`dismissed` 는 **tower 의 원장 두 파일**에 있다.
41+
★**그래서 이 repo 만 세면 32 가 나오고 4 가 나오지 않는다** — 재현하려면 그 둘을 함께 읽어야 한다.
42+
43+
```sh
44+
python3 - <<'PY'
45+
import json,glob,os
46+
inj=json.load(open(os.path.expanduser('~/tower/data/injected.json')))
47+
dis=json.load(open(os.path.expanduser('~/tower/data/dismissed.json')))
48+
refs=[];disp=set()
49+
for f in sorted(glob.glob('docs/worklog/*.json')):
50+
d=json.load(open(f));b=os.path.basename(f)[:-5]
51+
for i,_ in enumerate(d.get('proposals',[])): refs.append(f"{b}#p{i}")
52+
disp.update(d.get('adoptedProposals',[]));disp.update(d.get('declinedProposals',[]))
53+
op=[r for r in refs if r not in disp and r not in inj and r not in dis]
54+
print("refs",len(refs),"open",len(op)); [print(" ",r) for r in op]
55+
PY
56+
```
57+
58+
| | refs(전체) | open | 열린 ref |
59+
|---|---|---|---|
60+
| 착수 전 | **99** | ★**4** | nonliteral#p0 · lock-script-output-order#p0 · string-array#p0 · name-the-missing#p0 |
61+
| 착수 후 | ★**99**(불변) | ★**2** | ★**string-array#p0 · name-the-missing#p0** — 남기기로 한 바로 그 둘 |
62+
63+
★**닫는 쪽만 세지 않았다** — 남기는 둘이 **그대로 열려 있음**을 같은 명령으로 확인했다(과잉 차단 0).
64+
★**refs 총수 99 불변**이 「인덱스가 밀리지 않았다」의 직접 증거다.
65+
66+
★**스키마 검사기는 이 repo 에 «있다»**: `scripts/check-worklog-json.py`(CI 잡 `worklog_json` + DoD 4번째 줄).
67+
`declinedProposals` 의 원소가 `#p` 를 포함하는 ref 인지까지 본다 — 돌렸고 **rc 0**.
68+
69+
## 5. ★남는 빚 — 숨기지 않는다
70+
71+
- 기각을 **제안이 든 파일이 아니라 제3 파일**에 적는다(repo 관용구 그대로). ⇒ 제안의 워크로그만 연
72+
사람은 그것이 닫혔다는 표시를 **못 본다**. 둘을 잇는 것은 소비자뿐이다.
73+
- 두 제안이 가리킨 사실은 **그대로 남는다** — 출력순서 잠금의 구멍은 그 docstring 에,
74+
제품/테스트 미구분은 그 보고에. 바뀐 것은 **보드에 올라와 있느냐**뿐이다.
75+
- open 수가 **repo 밖 원장 2개에 의존한다**. 나중에 여기서만 다시 재면 **32** 가 나온다 —
76+
그래서 위에 파생식과 명령을 통째로 적었다.

0 commit comments

Comments
 (0)