@kaydash9999/banker-plugins 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +21 -0
- package/README.md +61 -19
- package/codex/manifest.json +7 -0
- package/codex/transform-matrix.md +8 -0
- package/package.json +1 -1
- package/skills/cleansing-memory/SKILL.md +150 -0
- package/skills/interval-report/SKILL.md +266 -0
- package/skills/refresh-readme/SKILL.md +222 -0
- package/skills/summary-wiki/SKILL.md +276 -0
- package/skills/ultra-interview/SKILL.md +232 -0
- package/skills/update-banker/SKILL.md +235 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: interval-report
|
|
3
|
+
description: "(banker) 장기 수행의 중간 보고를 docs/intermission.md 로 만들고 계획된 작업이 끝날 때까지 갱신. 시작 시각은 date 로 실측해 파일에 영속하고, ETA 는 단일 숫자 대신 범위+확신 라벨로 낸다. 'interval-report'/'중간 보고'/'진행 상황 보고'/'intermission' 시 사용."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# interval-report: 장기 수행 중간 보고 (docs/intermission.md)
|
|
7
|
+
|
|
8
|
+
장기 수행은 사람에게 보이지 않는다. 사용자는 지시를 넣고 나면 지금 어디쯤인지, 언제 끝나는지, 그동안 무슨 일이 있었는지 알 방법이 없다.
|
|
9
|
+
이 스킬은 그 공백을 `docs/intermission.md` 파일 하나로 메우고, **계획된 작업이 끝날 때까지 그 파일을 갱신한다.**
|
|
10
|
+
읽는 사람이 전체 trajectory 를 한 번에 파악할 수 있어야 한다. 그게 이 파일의 유일한 존재 이유다.
|
|
11
|
+
|
|
12
|
+
여기서 오작동의 대가는 느린 진행이 아니라 **거짓 보고**다. 시각을 추측하면 elapsed 가 허구가 되고, 자신감 있는 단일 숫자 ETA 를 뱉으면 사용자가 그걸 믿고 계획을 세운다.
|
|
13
|
+
그래서 아래의 실측 규칙과 ETA 정직성 규칙은 보고의 매끄러움보다 우선한다. 답변은 한글(기술 토큰·경로·명령은 영문).
|
|
14
|
+
|
|
15
|
+
**런타임:** 외부 도구·프레임워크 의존이 없다. 필요한 것은 `date` 와 파일 쓰기뿐이라 Claude Code(OMC)·Codex CLI(OMX) 양쪽에서 동일하게 동작한다.
|
|
16
|
+
|
|
17
|
+
- **시각의 출처는 `date` 하나다.** 두 런타임 모두 컨텍스트에 시:분 시각이 없다. 이건 직접 관측된 사실이고, 매번 셸에서 실측하는 **유일한 근거**다.
|
|
18
|
+
- **ultragoal 이 있으면 읽고, 없어도 동작한다**(아래 "ultragoal 관계").
|
|
19
|
+
- **자가 트리거는 설치하지 않는다.** 이 스킬은 호출되면 동작한다(아래 "When NOT to use").
|
|
20
|
+
|
|
21
|
+
## When to use
|
|
22
|
+
- 사용자 지시 하나가 여러 단계·긴 시간으로 늘어나, 중간에 사람이 상태를 볼 수 없는 수행.
|
|
23
|
+
- 자리를 비운 사용자가 돌아와 그동안의 trajectory 를 한 번에 파악해야 할 때.
|
|
24
|
+
- 진행 중 사용자가 알아야 할 일이 생겼는데(가정이 깨짐, 외부 대기, 예상 밖 발견) 지금 당장 물을 만큼은 아닐 때.
|
|
25
|
+
- 사용자가 `interval-report`/`중간 보고`/`진행 상황 보고`/`intermission` 이라고 할 때.
|
|
26
|
+
|
|
27
|
+
## When NOT to use
|
|
28
|
+
- **단발 작업.** 한 번에 끝나는 일에 보고 파일을 세우면 파일 관리가 작업보다 비싸다.
|
|
29
|
+
- **상태의 원본 저장소로.** 이 스킬은 렌더러지 원장이 아니다. 진행 상태의 원본이 필요하면 `ultragoal` 이다.
|
|
30
|
+
- **컨텍스트 임계 감지·자동 발화.** statusLine·hook 으로 스스로 발화하려 들지 마라. **그 영역은 `smart-compact` 소유다.** 트리거 메커니즘을 복제하지도, 설치하지도 않는다. interval-report 는 호출되면 동작하고, 갱신 시점은 아래 "3. 갱신 리듬" 이 정한다.
|
|
31
|
+
- **compaction 직전 준비.** 그건 `ready-compact` 다. 이름이 비슷해 헷갈리지만 하는 일이 다르다.
|
|
32
|
+
|
|
33
|
+
| | interval-report | ready-compact |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| 계기 | **연속**(작업이 끝날 때까지 갱신) | 이벤트 1회성(compaction 직전) |
|
|
36
|
+
| 독자 | **사람** | 다음 세션의 에이전트 |
|
|
37
|
+
| 산출물 | `docs/intermission.md`(자급식 보고서) | 붙여넣기용 resume 프롬프트 |
|
|
38
|
+
| 담는 것 | trajectory 전체(시작·경과·잔여·이벤트) | 휘발성 맥락(다음 한 수) |
|
|
39
|
+
| 시간 | **핵심**(실측·영속·ETA) | 범위 밖 |
|
|
40
|
+
|
|
41
|
+
둘은 같은 세션에서 공존한다. 경쟁하지 않는다. 보고서가 있다고 resume 프롬프트를 생략하지 말고, 그 반대도 마찬가지다.
|
|
42
|
+
|
|
43
|
+
## 측정 범위 (여기가 틀리면 나머지 숫자가 전부 틀린다)
|
|
44
|
+
|
|
45
|
+
측정 대상은 세션 전체가 아니라 **마지막 사용자 지시로 시작된 현재 수행분**이다.
|
|
46
|
+
|
|
47
|
+
> **시작 시각 = 마지막으로 사용자가 대화·지시한 시점.**
|
|
48
|
+
|
|
49
|
+
- 세션은 며칠을 살아 있을 수 있고 그중 대부분은 사용자가 자리에 없던 시간이다. 세션 시작을 기준으로 잡으면 elapsed 는 "이 지시가 얼마나 걸리고 있나" 가 아니라 "이 터미널이 얼마나 오래 열려 있나" 를 재게 된다. 후자는 아무도 궁금해하지 않는다.
|
|
50
|
+
- 사용자가 **새 지시**를 넣으면 그것이 새 수행분이다. 시작 시각을 새로 찍고 보고서를 새로 연다.
|
|
51
|
+
- 사용자의 개입이 지시가 아니라 **승인·답변**(예: "응", "그렇게 해", "1번으로")이면 수행분은 이어진다. 시작 시각을 옮기지 마라.
|
|
52
|
+
- 애매하면 **옮기지 않는 쪽**을 택한다. 두 실수의 대가가 대칭이 아니다. 옮기는 실수는 elapsed 를 낙관 쪽으로 붕괴시키고, 안 옮기는 실수는 비관 쪽으로 어긋난다. 보고서에서는 낙관 편향이 더 나쁘다.
|
|
53
|
+
|
|
54
|
+
## 시간 메커닉
|
|
55
|
+
|
|
56
|
+
### 실측
|
|
57
|
+
```bash
|
|
58
|
+
date +%s # epoch 초. 산술은 이 값으로만.
|
|
59
|
+
date '+%Y-%m-%d %H:%M %Z' # 사람이 읽는 표기. 보고서에 그대로 싣는다.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
시각을 추측하거나 대화 내용에서 역산하지 마라. 두 런타임 모두 컨텍스트에 시:분 시각이 없다.
|
|
63
|
+
이 문장이 `date` 를 부르는 근거의 전부다. 다른 근거를 덧붙이지 마라.
|
|
64
|
+
|
|
65
|
+
### READ-BACK 불변 규칙 (이 스킬의 핵심 안전장치)
|
|
66
|
+
|
|
67
|
+
> **파일에 이미 시작 시각이 있으면 절대 덮어쓰지 않는다.**
|
|
68
|
+
|
|
69
|
+
갱신할 때는 언제나 파일을 먼저 읽는다. 계산은 그다음이다.
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
F=docs/intermission.md
|
|
73
|
+
if [ -f "$F" ] && grep -q '^started_epoch:' "$F"; then
|
|
74
|
+
START=$(grep -m1 '^started_epoch:' "$F" | tr -cd '0-9') # 파일이 정본
|
|
75
|
+
else
|
|
76
|
+
START=$(date +%s) # 최초 1회만
|
|
77
|
+
fi
|
|
78
|
+
NOW=$(date +%s)
|
|
79
|
+
ELAPSED=$(( NOW - START ))
|
|
80
|
+
printf 'start=%s elapsed=%dh %02dm\n' "$START" $(( ELAPSED / 3600 )) $(( ELAPSED % 3600 / 60 ))
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
- **왜 영속이 필수인가:** compaction·resume 후에는 모델이 시작 시각을 기억하지 못한다. 그때 `now` 로 재스탬프하면 elapsed 가 0 으로 붕괴한다. 붕괴는 조용하고, 하필 **긴 작업일수록 잘 일어난다**(길수록 compaction 을 겪으니까). 즉 리포트가 가장 필요한 순간에 리포트가 가장 낙관적으로 거짓말한다. 이 규칙은 편의보다 우선한다.
|
|
84
|
+
- **정수 산술만 쓴다.** `date -d @...`(GNU)와 `date -v`(BSD)는 문법이 갈린다. `date +%s` 로 epoch 만 얻고 뺄셈은 셸에 맡기면 분기가 사라진다.
|
|
85
|
+
- **사람이 읽는 표기도 같이 영속한다.** epoch 만 두면 파일을 연 사람이 값을 검증할 수 없다.
|
|
86
|
+
|
|
87
|
+
## ETA 정직성
|
|
88
|
+
|
|
89
|
+
ETA 는 **실측량에서만** 유도한다: 경과 시간, 완료 수, 진행중 수, 대기 수. 이 넷 말고 다른 입력을 지어내지 마라.
|
|
90
|
+
|
|
91
|
+
**규칙 1. 단일 숫자 금지. 범위 + 확신 라벨.**
|
|
92
|
+
- 나쁨: `예상 종료: 17:30`
|
|
93
|
+
- 좋음: `예상 잔여: 40m ~ 2h (확신: 낮음)` / `예상 종료: 17:00 ~ 18:20 KST`
|
|
94
|
+
- 확신 라벨은 3단이면 충분하다: 높음 / 보통 / 낮음. 소수점 확신도가 필요하면 그건 `curation` 의 형식이지 여기가 아니다.
|
|
95
|
+
|
|
96
|
+
**규칙 2. 가정을 인라인에 적는다.**
|
|
97
|
+
ETA 바로 옆이나 바로 아래에 무엇을 가정했는지 쓴다. 별도 문서로 미루지 마라. 읽는 사람이 ETA 를 보는 **그 자리에서** 가정을 봐야 정정할 수 있다.
|
|
98
|
+
|
|
99
|
+
> 예상 잔여: 40m ~ 2h (확신: 낮음)
|
|
100
|
+
> 가정: 남은 3건이 끝난 2건과 비슷한 크기다(확인된 바 없음). 5번이 사용자 승인 대기라 상한이 열려 있다.
|
|
101
|
+
|
|
102
|
+
**규칙 3. 90% 천장을 의식한다.**
|
|
103
|
+
카운트가 9/10 을 가리킬 때가 **남은 노력이 가장 클 수 있는 지점**이다. 마지막 항목은 대개 통합·검증·사용자 확인이고, 그것들은 앞의 9개와 크기가 다르다.
|
|
104
|
+
선형 외삽(경과 ÷ 완료 × 대기)은 초반에 그럭저럭 맞고 **꼬리에서 무너진다.** 꼬리에서 성립하는 척하지 마라.
|
|
105
|
+
- 카운트가 올라갈수록 범위의 **상한을 좁히지 마라.** 좁히고 싶은 충동이 정확히 그 편향이다.
|
|
106
|
+
- 남은 항목의 성격이 앞의 항목과 다르면(검증·리뷰·사용자 결정 대기) 그 사실을 가정에 적고 확신을 낮춘다.
|
|
107
|
+
- 진행률 퍼센트 하나로 요약하지 마라. 작업 표의 카운트가 이미 그 정보를 편향 없이 담고 있다.
|
|
108
|
+
|
|
109
|
+
**규칙 4. 자기모순 금지.**
|
|
110
|
+
"정직한 ETA" 를 표방하면서 자신감 있는 단일 숫자를 뱉으면 자기모순이다. 그건 ETA 를 아예 안 내는 것보다 **나쁘다.** 사용자가 정직성 표방을 믿고 그 숫자를 더 신뢰하기 때문이다.
|
|
111
|
+
범위를 못 내겠으면 **"모른다" 고 적어라.** 그건 허용된 답이다. 근거 없는 숫자를 채워 넣는 것만 금지다.
|
|
112
|
+
|
|
113
|
+
## ultragoal 관계 (렌더러지 원장이 아니다)
|
|
114
|
+
|
|
115
|
+
`ultragoal` 은 목표 목록·상태·타임스탬프를 append-only 원장으로 **양 런타임에 이미 영속화**한다. 이 스킬은 그것을 복제하지 않는다.
|
|
116
|
+
|
|
117
|
+
- **있으면 읽어서 렌더한다.** 작업 표의 순서·작업·상태를 원장에서 채우고, 보고서에 원장 경로를 출처로 적는다.
|
|
118
|
+
- Claude(OMC): `.omc/ultragoal/`
|
|
119
|
+
- Codex(OMX): `.omx/ultragoal/`
|
|
120
|
+
- **없어도 동작한다.** ultragoal 은 opt-in 이라 대부분의 세션에 없다. 없으면 현재 지시의 작업 목록에서 표를 직접 만든다. **ultragoal 을 요구하지도, 대신 켜지도 마라.**
|
|
121
|
+
- **상태를 복제하지 않는다.** 보고서는 원장의 파생물이다. 둘이 어긋나면 원장이 맞다. 보고서를 고쳐 원장을 반영하지, 원장을 보고서에 맞추지 않는다.
|
|
122
|
+
- **왜 그 위에 얹는가:** ultragoal 에는 시간·ETA 개념이 없고 산출물이 기계 포맷이다. 이 스킬이 더하는 것은 딱 두 가지다. 얇은 시간 레이어(실측·영속·경과·ETA), 그리고 사람용 렌더러. 그 둘을 넘어가면 ultragoal 을 다시 구현하는 것이다.
|
|
123
|
+
|
|
124
|
+
## 워크플로
|
|
125
|
+
|
|
126
|
+
### 0. READ-BACK (추정 금지)
|
|
127
|
+
언제나 여기서 시작한다. 파일이 있는지, 시작 시각이 무엇인지 **읽어서** 확인한다. 기억에 의존하지 마라.
|
|
128
|
+
위 "READ-BACK 불변 규칙" 의 블록을 그대로 돌려 `START`·`ELAPSED` 를 얻는다. 여기서 읽은 `started_epoch` 는 4단계 검증의 기준값이다.
|
|
129
|
+
|
|
130
|
+
파일이 없으면 최초 실행이다. 1단계로 간다. 있으면 **갱신**이다. 3단계로 간다.
|
|
131
|
+
|
|
132
|
+
### 1. 자리 잡기 (docs/ + .gitignore, 최초 1회)
|
|
133
|
+
산출물은 타깃 repo 의 `docs/intermission.md` 다. `docs/` 가 없으면 만든다.
|
|
134
|
+
|
|
135
|
+
이건 **세션 로컬 작업물**이지 그 프로젝트의 문서가 아니다. 커밋되면 우리 세션의 진행 상황이 남의 repo 히스토리에 영구히 남는다. 그래서 `.gitignore` 에 기본 항목을 추가한다.
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
# interval-report: session-local progress report (not project documentation)
|
|
139
|
+
docs/intermission.md
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
- **`.gitignore` 는 그 프로젝트의 파일이지 우리가 만든 게 아니다.** 그러므로 **사용자에게 알리고 진행한다.** 무엇을 왜 추가하는지 한 줄로 말하면 된다. 승인을 기다리며 멈추라는 게 아니라, 사용자가 모르는 채로 남의 repo 가 바뀌는 일을 막으라는 것이다.
|
|
143
|
+
- **멱등하게.** 이미 그 항목이 있으면 추가하지 않는다. 이미 무시되고 있어도(상위 규칙, `docs/` 통째 무시 등) 추가하지 않는다. 확인은 이걸로 한다:
|
|
144
|
+
```bash
|
|
145
|
+
git check-ignore -q docs/intermission.md && echo "이미 무시됨: 추가 불필요"
|
|
146
|
+
```
|
|
147
|
+
- git repo 가 아니면(`git rev-parse --git-dir` 실패) 이 단계를 통째로 건너뛴다. 에러가 아니다.
|
|
148
|
+
- 사용자가 보고서를 커밋 대상으로 원한다고 명시하면 그건 사용자의 repo 다. 추가하지 말고 그대로 둔다.
|
|
149
|
+
|
|
150
|
+
### 2. 보고서 렌더
|
|
151
|
+
필수 항목 8개는 **전부** 있어야 한다: 시작 시간 / 현재 상태 / elapsed / 예상 잔여 / 예상 종료 / 진행·잔여 작업 표 / 발생 이벤트 / 인지 중인 constraints.
|
|
152
|
+
|
|
153
|
+
**작업 표는 하나다.** 완료분과 잔여분을 따로 두지 마라. 하나의 표에 순서대로 놓아야 trajectory 가 한눈에 들어온다. 상태 값은 `완료`·`진행중`·`대기` 3종뿐이다.
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
---
|
|
157
|
+
started_epoch: 1784181572
|
|
158
|
+
started_human: "2026-07-16 14:59 KST"
|
|
159
|
+
updated_human: "2026-07-16 16:20 KST"
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
# 중간 보고: DB 마이그레이션 롤아웃
|
|
163
|
+
|
|
164
|
+
| 항목 | 값 |
|
|
165
|
+
|---|---|
|
|
166
|
+
| 시작 | 2026-07-16 14:59 KST |
|
|
167
|
+
| 현재 상태 | 3번(스테이징 검증) 진행 중. 4번부터 대기. |
|
|
168
|
+
| elapsed | 1h 21m |
|
|
169
|
+
| 예상 잔여 | 40m ~ 2h (확신: 낮음) |
|
|
170
|
+
| 예상 종료 | 17:00 ~ 18:20 KST |
|
|
171
|
+
|
|
172
|
+
**ETA 가정:** 남은 3건이 끝난 2건과 비슷한 크기다(확인된 바 없음). 5번이 사용자 승인 대기라 상한이 열려 있다.
|
|
173
|
+
|
|
174
|
+
## 작업
|
|
175
|
+
|
|
176
|
+
| # | 작업 | 상태 |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| 1 | 스키마 diff 추출 | 완료 |
|
|
179
|
+
| 2 | 마이그레이션 스크립트 작성 | 완료 |
|
|
180
|
+
| 3 | 스테이징 검증 | 진행중 |
|
|
181
|
+
| 4 | 롤백 절차 문서화 | 대기 |
|
|
182
|
+
| 5 | 운영 반영 | 대기 |
|
|
183
|
+
|
|
184
|
+
## 발생 이벤트
|
|
185
|
+
- 15:34 스테이징 시드가 3개월 낡아 일부 검증을 건너뜀. 사용자 판단이 필요할 수 있음.
|
|
186
|
+
- 16:02 `npm i` 가 프록시 뒤에서 2회 실패. 재시도로 통과. 조치 불필요.
|
|
187
|
+
|
|
188
|
+
## 인지 중인 constraints
|
|
189
|
+
- 운영 반영은 사용자 승인 후에만(전역 규칙).
|
|
190
|
+
- 스테이징 DB 는 18:00 에 야간 배치가 잡아간다. 3번을 그 전에 끝내야 한다.
|
|
191
|
+
- 롤백 절차는 아직 검증되지 않았다. 5번의 전제 조건이다.
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
- **발생 이벤트**는 사용자가 알아야 할 것만 적는다. 로그가 아니다. 기준은 "이걸 몰랐다면 사용자가 다르게 판단했을까" 다. 아니면 빼라. 다만 **가정이 깨진 사건은 반드시 남긴다.**
|
|
195
|
+
- **constraints** 는 지금 인지하고 있는 제약이다. 환경·순서 의존·승인 게이트·외부 대기. 사용자가 풀어줄 수 있는 것이 여기 있으면 그게 이 절의 값어치다.
|
|
196
|
+
- 항목에 쓸 내용이 없으면 항목을 **지우지 말고** "없음" 이라고 적는다. 없는 항목과 빈 항목은 다르다.
|
|
197
|
+
|
|
198
|
+
### 3. 갱신 리듬
|
|
199
|
+
갱신은 **계획된 작업이 끝날 때까지** 이어진다. 시점은 사건이 정한다:
|
|
200
|
+
|
|
201
|
+
- 작업 표의 항목 상태가 바뀌었을 때(완료·진행중 전환).
|
|
202
|
+
- 사용자가 알아야 할 이벤트가 생겼을 때.
|
|
203
|
+
- constraints 가 바뀌었을 때(제약이 생기거나 풀렸을 때).
|
|
204
|
+
- ETA 의 가정이 깨졌을 때. **이때가 가장 중요하다.** 가정이 깨졌는데 ETA 를 그대로 두면 그 순간부터 보고서는 거짓이다.
|
|
205
|
+
- 사용자가 물었을 때.
|
|
206
|
+
|
|
207
|
+
매 갱신마다 0단계 READ-BACK 을 먼저 한다. `updated_human` 을 새로 찍고 `started_epoch` 는 손대지 않는다.
|
|
208
|
+
갱신할 게 없으면 갱신하지 않는다. 같은 내용으로 타임스탬프만 바꾸는 것은 신호가 아니라 잡음이다.
|
|
209
|
+
|
|
210
|
+
### 4. 검증 (보고 의무)
|
|
211
|
+
**보고서를 썼다는 사실로 성공을 선언하지 마라.** 파일은 언제나 써진다. 붕괴한 시작 시각도, 자신감 있는 단일 숫자도 똑같이 잘 써진다.
|
|
212
|
+
판정은 **갱신할 때마다** 아래를 실제로 돌려서 한다.
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
F=docs/intermission.md
|
|
216
|
+
grep -m1 '^started_epoch:' "$F" # 0단계에서 읽은 값과 동일해야 한다
|
|
217
|
+
grep -m1 '^started_human:' "$F"
|
|
218
|
+
git check-ignore -q "$F" 2>/dev/null && echo "gitignore: ok" || echo "gitignore: 미적용 (git repo 가 아니면 정상, 아니면 1단계 확인)"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
체크리스트. 하나라도 아니오면 고치고 다시 본다.
|
|
222
|
+
- `started_epoch` 가 0단계에서 읽은 값과 **같은가.** 다르면 재스탬프 사고이고 elapsed 는 거짓이다. 즉시 원래 값으로 되돌린다.
|
|
223
|
+
- elapsed 가 **직전 보고보다 커졌는가.** 줄었으면 같은 사고다.
|
|
224
|
+
- 필수 항목 8개가 **전부 있는가.** "없음" 도 값이다. 항목 자체를 지우지 않는다.
|
|
225
|
+
- 작업 표가 **하나인가.** 상태 값이 완료·진행중·대기 3종뿐인가.
|
|
226
|
+
- ETA 가 **범위 + 확신 라벨**인가. 단일 시각 하나면 규칙 위반이다.
|
|
227
|
+
- ETA 옆에 **가정이 적혀 있는가.** 가정이 지금도 유효한가.
|
|
228
|
+
- 표의 상태가 실제 진행과 맞는가. **갱신하지 않은 보고서는 오래된 보고서가 아니라 틀린 보고서다.**
|
|
229
|
+
|
|
230
|
+
사용자에게는 파일 경로와 함께 **지금 값**을 한 줄로 준다. 파일을 열게 하지 마라.
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
docs/intermission.md 갱신: elapsed 1h 21m, 2/5 완료, 예상 잔여 40m ~ 2h (확신: 낮음)
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## 함정
|
|
237
|
+
- **now 로 재스탬프하는 것.** 이 스킬에서 데이터가 거짓이 되는 유일하고 실재하는 경로다. 파일에 시작 시각이 있으면 그게 정본이다.
|
|
238
|
+
- **세션 시작을 시작 시각으로 잡는 것.** 측정 대상은 마지막 사용자 지시로 시작된 수행분이다.
|
|
239
|
+
- **승인 한마디를 새 지시로 오인해 시작 시각을 옮기는 것.** 애매하면 옮기지 않는다.
|
|
240
|
+
- **자신감 있는 단일 숫자.** "정직한 ETA" 를 표방하면서 이걸 하면 자기모순이고, 침묵보다 나쁘다.
|
|
241
|
+
- **꼬리에서 선형 외삽을 믿는 것.** 9/10 이 남은 노력이 가장 큰 지점일 수 있다.
|
|
242
|
+
- **표를 둘로 쪼개는 것.** 완료 표와 잔여 표를 나누면 trajectory 가 끊긴다. 표는 하나다.
|
|
243
|
+
- **이벤트 절을 로그로 만드는 것.** 전부 적으면 아무것도 안 적은 것과 같다. 기준은 "사용자의 판단이 달라졌을까" 다.
|
|
244
|
+
- **파일만 쓰고 끝내는 것.** 파일은 언제나 써진다. 검증은 4단계 체크리스트다.
|
|
245
|
+
- **`.gitignore` 를 정리하려 드는 것.** 여기서 하는 일은 한 줄 멱등 추가지 정리가 아니다(정리는 `refresh-git-ignore` 소관이고 이 스킬이 부를 일이 아니다).
|
|
246
|
+
- **남의 repo 를 조용히 건드리는 것.** `.gitignore` 변경은 알리고 진행한다.
|
|
247
|
+
- **`date` 의 계산 옵션에 의존하는 것.** GNU 와 BSD 가 갈린다. epoch 뺄셈만 쓴다.
|
|
248
|
+
- **ultragoal 상태를 보고서에 복제하는 것.** 어긋나면 원장이 맞다.
|
|
249
|
+
- **자가 트리거를 설치하는 것.** `smart-compact` 영역이다.
|
|
250
|
+
- **보고서를 resume 프롬프트로 쓰는 것.** 그건 `ready-compact` 다. 독자가 다르다(사람 대 에이전트).
|
|
251
|
+
|
|
252
|
+
## 원칙
|
|
253
|
+
- 시각은 `date` 로 실측한다. 추측·역산 금지.
|
|
254
|
+
- 시작 시각은 파일이 정본이다. READ-BACK 이 먼저, 계산은 그다음.
|
|
255
|
+
- 측정 단위는 세션이 아니라 마지막 사용자 지시로 시작된 수행분이다.
|
|
256
|
+
- ETA 는 실측량에서만 유도하고, 범위 + 확신 라벨로 내고, 가정을 곁에 적는다.
|
|
257
|
+
- 모르면 모른다고 적는다. 그게 허용된 답이고 자신 있는 오답보다 낫다.
|
|
258
|
+
- 표는 하나다. 전체 trajectory 가 한눈에 들어와야 한다.
|
|
259
|
+
- 이 스킬은 시간 레이어와 렌더러다. 원장도, 트리거도, resume 프롬프트도 아니다.
|
|
260
|
+
- 산출물은 세션 로컬이다. 남의 repo 에 남기지 않는다.
|
|
261
|
+
- 계획된 작업이 끝날 때까지 갱신한다. 끝나면 마지막 갱신으로 닫는다.
|
|
262
|
+
|
|
263
|
+
ARGUMENTS: [--path <파일>] [--close] [지시 요약] (없으면 `docs/intermission.md` 에 현재 수행분을 렌더하고 계획된 작업이 끝날 때까지 갱신)
|
|
264
|
+
- `--path <파일>`: 산출 경로를 바꾼다. `.gitignore` 게이트는 그 경로에 그대로 적용한다.
|
|
265
|
+
- `--close`: 마지막 갱신을 하고 보고서를 닫는다. 전 항목을 종료 상태로 맞추고, elapsed 를 확정하고, 예상 잔여·예상 종료를 실제 값으로 대체한다.
|
|
266
|
+
- 인자 없이 파일이 이미 있으면 그건 **갱신**이다. 새로 만들지 마라. 언제나 READ-BACK 이 먼저다.
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refresh-readme
|
|
3
|
+
description: "(banker) 코드가 움직인 뒤 뒤처진 README 를 현재 프로젝트에 맞게 갱신. 산문 주장을 매니페스트·소스 트리·패키지 매니페스트와 대조해 드리프트를 잡고, 코드펜스·URL·플래그를 보호하며 간결하게 고쳐 쓴다. 'refresh-readme'/'README 갱신·최신화'/'README 가 코드와 안 맞아'/'README 드리프트' 시 사용."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# refresh-readme: README 드리프트 해소 (코드와 문서 정합)
|
|
7
|
+
|
|
8
|
+
README 는 저장소에서 가장 먼저 읽히면서 가장 늦게 고쳐지는 파일이다.
|
|
9
|
+
코드는 릴리스마다 움직이는데 README 의 산문은 작성 시점에 멈춰 있고, 그 차이는 **어떤 테스트도 잡지 않는다.**
|
|
10
|
+
이 스킬은 그 드리프트를 코드 쪽 사실과 대조해 찾아내고, README 를 현재 프로젝트에 맞게 고쳐 쓴다.
|
|
11
|
+
|
|
12
|
+
임무는 **정확성**이다. 고쳐 쓸 때의 품질 기준(누락 없이 간결하게, 감탄사·과장·이모지 없이)은
|
|
13
|
+
갱신물이 지켜야 할 조건이지 임무 자체가 아니다. 답변은 한글(기술 토큰·경로·명령은 영문).
|
|
14
|
+
|
|
15
|
+
**런타임:** 런타임 무관하다. 대상은 저장소 안의 README 파일이고, 필요한 건 파일 읽기·쓰기와 `git`·`grep` 뿐이다.
|
|
16
|
+
Claude Code(OMC)·Codex CLI(OMX) 양쪽에서 동일하게 동작한다.
|
|
17
|
+
**마크다운 파서 라이브러리를 끌어오지 마라.** banker 는 dependencies 0 이다. 대조도 검증도 무의존으로 푼다.
|
|
18
|
+
|
|
19
|
+
## When to use
|
|
20
|
+
- 코드가 움직였는데 README 가 따라오지 않았을 때: 기능 추가·삭제, 이름 변경, 개수 변화, 명령·경로 변경.
|
|
21
|
+
- 릴리스 직전에 README 의 산문 주장이 실제와 맞는지 확인할 때.
|
|
22
|
+
- README 가 레퍼런스 문서로서 읽기 나쁠 때(감탄사·과장·이모지). 이건 갱신에 딸려 처리한다.
|
|
23
|
+
- 사용자가 `refresh-readme`/`README 갱신`/`README 최신화`/`README 드리프트` 라고 할 때.
|
|
24
|
+
|
|
25
|
+
## When NOT to use
|
|
26
|
+
- **README 가 아닌 파일.** 범위는 README 파일뿐이다. SKILL.md·CHANGELOG·주석·위키는 밖이다.
|
|
27
|
+
- **코드 슬롭 정리.** `ai-slop-cleaner`(OMC 네이티브) 소관이다. 그건 **코드 전용**이고 자기 문서에서 "clean up formatting" 을 명시적 비적합으로 선언한다. 산문·README 는 대상이 아니다. banker 는 OMC 네이티브를 중복 번들하지 않는다.
|
|
28
|
+
- **영문 산문 윤문.** `humanizer`(banker) 소관이다. 스코프가 **영문 산문**이고 기본 자세가 개성·1인칭 주입이라, 한국어 레퍼런스 문서에는 역행한다. README 가 영문이고 목적이 "읽는 맛"이면 그쪽으로 보내라.
|
|
29
|
+
- **`.gitignore` 정리.** `refresh-git-ignore` 소관이다. 구조가 형제일 뿐 대상 파일이 다르다. 그 스킬은 README 를 보지 않는다.
|
|
30
|
+
- **없는 README 를 새로 쓰는 것.** 이건 드리프트 해소지 작성이 아니다. 초안이 필요하면 별도 지시로 간다.
|
|
31
|
+
|
|
32
|
+
## 고정 정책 (범위·품질 기준)
|
|
33
|
+
- **대상: README 파일만.** 기본은 저장소 루트 하나. 여러 개면 목록을 제시하고 확인받는다.
|
|
34
|
+
- **사실은 코드에 있다.** README 를 근거로 README 를 고치지 마라. 문서 안에서 아귀가 맞아도 코드와 틀릴 수 있다.
|
|
35
|
+
- **드리프트 판정이 난 문장만 고친다.** 전면 재작성 금지. 문서를 통째로 다시 쓰면 검토 불가능한 diff 가 나오고 그 안에 새 오류가 섞인다.
|
|
36
|
+
- **갱신물의 품질 기준** (고쳐 쓸 때 챙길 조건):
|
|
37
|
+
- **누락 없이 간결하게.** 사실을 빼서 짧게 만드는 건 간결이 아니라 손실이다.
|
|
38
|
+
- **유치한 감탄사·과장된 표현 금지.** 과장 형용사가 걸리면 지우는 게 아니라 **사실로 바꾼다.** 그 자리엔 원래 수·이름·조건이 들어갔어야 한다.
|
|
39
|
+
- **이모지 금지.**
|
|
40
|
+
- **em dash 같은 ai slop 이 느껴지는 표현도 없어야 한다.** 단 아래 "마커 정직성" 을 먼저 읽어라. 이건 증상 처리지 임무가 아니다.
|
|
41
|
+
- 커밋·push 는 사용자가 명시할 때만.
|
|
42
|
+
|
|
43
|
+
## 보호 구간 (불가침)
|
|
44
|
+
산문 규칙을 문서 전체에 기계적으로 걸면 **문서화된 명령이 깨지고 한국어 표기가 훼손된다.** 둘 다 가설이 아니라 실재한다.
|
|
45
|
+
|
|
46
|
+
### 코드: ` -- ` 함정
|
|
47
|
+
안티슬롭 지침은 산문의 이중하이픈(` -- `)을 em dash 대용으로 보고 지우라고 한다.
|
|
48
|
+
그런데 셸에서 ` -- ` 는 POSIX end-of-options 다. 이 저장소에도 그런 줄이 있다:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
claude mcp add context7 -s user -- npx -y @upstash/context7-mcp
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
여기서 ` -- ` 를 지우면 뒤의 `-y` 를 `claude mcp add` 가 자기 옵션으로 먹으려 든다.
|
|
55
|
+
문서화된 MCP 설치 명령이 그대로 죽는다. 저장소 안에서 같은 모양이 여러 건 반복된다.
|
|
56
|
+
|
|
57
|
+
**산문의 이중하이픈과 이 ` -- ` 는 문자적으로 동일하다.** 정규식으로는 절대 구분되지 않는다.
|
|
58
|
+
**오직 펜스 인지만이 구분한다.**
|
|
59
|
+
|
|
60
|
+
보호 대상:
|
|
61
|
+
- 코드펜스 안 전부
|
|
62
|
+
- 인라인 코드 안 전부
|
|
63
|
+
- URL (하이픈·이중하이픈이 경로·쿼리에 들어간다)
|
|
64
|
+
- `--flag` 형태의 옵션 (산문에 맨몸으로 나와도)
|
|
65
|
+
- 표 안의 명령·경로 셀
|
|
66
|
+
|
|
67
|
+
**`sed`/`awk` 일괄 치환은 그 자체로 결함이다.** 펜스 상태를 모르는 도구로 문서 전체를 훑는 순간 위 구분이 사라진다.
|
|
68
|
+
편집은 읽고, 위치를 특정하고, **한 군데씩** 한다. 무엇을 왜 바꿨는지 셀 수 있어야 한다.
|
|
69
|
+
|
|
70
|
+
### 한국어 표기
|
|
71
|
+
영문 튜닝된 휴리스틱은 한국어 표기에서 오탐한다. 대표가 가운뎃점 U+00B7(`·`)이다.
|
|
72
|
+
한국어 문서는 이걸 나열 구분자로 쓴다(`설계·구현·검증`). 규칙이 이걸 특수문자 슬롭으로 잘못 걸면
|
|
73
|
+
한 군데가 아니라 문서 전역 수십·수백 군데가 한꺼번에 훼손된다.
|
|
74
|
+
|
|
75
|
+
화이트리스트를 먼저 세운다. 최소한 `·`(나열), `「」`·`『』`(인용·제목), `~`(범위), 전각 괄호·따옴표.
|
|
76
|
+
**한국어 문서에서 관용적으로 쓰이는 구두점은 슬롭이 아니라 표기다.** 지우기 전에 그게 이 문서의 언어에서 정상인지부터 판정한다.
|
|
77
|
+
|
|
78
|
+
## 마커 정직성
|
|
79
|
+
**단독 em dash 는 AI 증거가 아니다.** em dash 사용은 LLM 보다 훨씬 오래됐고 편집자·기자가 늘 쓴다.
|
|
80
|
+
신호는 **빈도**지 존재가 아니며, 다른 징후와 뭉쳐 나타날 때에만 의미가 있다.
|
|
81
|
+
|
|
82
|
+
인용 출처도 같은 경고를 한다. Wikipedia 의 "Signs of AI writing"(CC BY-SA)은 이 징후 목록을
|
|
83
|
+
**고쳐야 할 문제로 다루지 말라**고 명시한다. 이유는 품질이 아니라 탐지다: 목록대로 다듬으면 글이 좋아지는 게 아니라 탐지만 어려워진다.
|
|
84
|
+
|
|
85
|
+
그래서 이 스킬의 프레이밍은 안티슬롭이 아니다. 질문은 하나다: **"이 README 가 정확하고 간결한가."**
|
|
86
|
+
슬롭은 **증상**으로 다룬다. 과장된 형용사는 "AI 티가 난다"라서 고치는 게 아니라 **그 문장이 사실을 안 말하고 있어서** 고친다.
|
|
87
|
+
사실을 말하는 문장이 우연히 마커를 하나 밟았다면 그건 고칠 대상이 아니다.
|
|
88
|
+
|
|
89
|
+
**마커 목록을 여기에 옮겨 적지 마라.** `humanizer` 가 이미 그 목록을 갖고 있고, humanizer 자신도 그 안에서 갈라져 있다
|
|
90
|
+
(한 곳은 em dash 를 hard constraint 라 하고, 다른 곳은 단독 em dash 는 증거가 아니라고 한다).
|
|
91
|
+
여기서 재서술하면 banker 가 **서로 모순되는 사본 3개**를 지게 된다. 마커 판단이 필요하면 humanizer 를 읽고 위임한다.
|
|
92
|
+
|
|
93
|
+
## 워크플로
|
|
94
|
+
|
|
95
|
+
### 0. 대상 확정
|
|
96
|
+
```bash
|
|
97
|
+
git rev-parse --show-toplevel
|
|
98
|
+
git ls-files | grep -i 'readme'
|
|
99
|
+
```
|
|
100
|
+
- 기본 대상은 저장소 루트의 README 하나다.
|
|
101
|
+
- 여러 개면(모노레포 패키지별 등) 목록을 제시하고 **어느 것을 갱신할지 확인받는다.** 전부 훑어 diff 를 부풀리지 마라.
|
|
102
|
+
- README 가 없으면 여기서 멈춘다. 작성은 이 스킬이 아니다.
|
|
103
|
+
|
|
104
|
+
### 1. 산문 주장 추출 (README 쪽)
|
|
105
|
+
README 를 **끝까지 읽고** 검증 가능한 주장을 뽑는다. 주장 = 사실이 뒷받침해야 하는 문장.
|
|
106
|
+
- **수량**: 개수·버전·크기
|
|
107
|
+
- **고유명**: 스킬·커맨드·모듈·명령 이름
|
|
108
|
+
- **경로**: 파일·디렉터리
|
|
109
|
+
- **동작**: 설치·실행 방법
|
|
110
|
+
- **요구사항**: 런타임·의존성
|
|
111
|
+
|
|
112
|
+
수량 주장은 문서 전역에서 **전부** 찾는다. 한 곳만 고치면 다음 릴리스에 문서 내부끼리 어긋난다.
|
|
113
|
+
```bash
|
|
114
|
+
grep -nE '[0-9]+ *(개|files|skills|commands)' README.md
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 2. 사실 수집 (코드 쪽)
|
|
118
|
+
사실의 위치는 저장소마다 다르다. 판정 기준은 하나다: **빌드·설치·테스트가 실제로 읽는 파일이 사실이다.**
|
|
119
|
+
흔한 곳은 패키지 매니페스트(버전·의존성·엔트리포인트·스크립트), 배포 매니페스트(실제로 배포되는 표면 목록),
|
|
120
|
+
소스 트리(디렉터리와 파일이 곧 사실), CI 설정(실제로 도는 명령).
|
|
121
|
+
|
|
122
|
+
이 계열 저장소의 예:
|
|
123
|
+
```bash
|
|
124
|
+
ls -d skills/*/ | wc -l # 디렉터리 수. 이게 스킬 수라고 단정하지 마라
|
|
125
|
+
ls -d skills/*/SKILL.md | wc -l # 런타임이 실제로 세는 것
|
|
126
|
+
node -e "const m=require('./codex/manifest.json');console.log(m.surfaces.filter(s=>s.type==='skill').length)"
|
|
127
|
+
node -e "const p=require('./package.json');console.log(p.version, JSON.stringify(p.dependencies||{}))"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**앞의 두 줄이 갈리면 그 차이가 사실이다.** 이 저장소에서 실제로 갈린다: 디렉터리는 49 인데 `SKILL.md` 보유는 48 이다.
|
|
131
|
+
`skills/ultra-init-workspace/` 는 런타임 산출물 디렉터리라 `SKILL.md` 가 없고, 그래서 배포 매니페스트에도 없고 `package.json` `files[]` 도 negation 으로 뺀다.
|
|
132
|
+
즉 "디렉터리를 세면 스킬 수" 라는 그럴듯한 가정이 **여기서 1 을 더 센다.** 세 곳(매니페스트·`files[]`·테스트의 `SKILL.md` 필터)이 이미 48 을 말하는데 디렉터리 카운트만 49 라면, 틀린 쪽은 카운트다.
|
|
133
|
+
|
|
134
|
+
**README 는 어떤 경우에도 사실이 아니다. 그리고 사실을 세는 명령도 틀릴 수 있다. 세 소스가 같은 값을 말할 때만 통과다.**
|
|
135
|
+
|
|
136
|
+
### 3. 대조 (삼각검증)
|
|
137
|
+
이 대조가 이 스킬의 **유일한 신규 능력**이다. 나머지(문체·슬롭)는 다른 스킬이 이미 한다.
|
|
138
|
+
주장마다 사실을 붙여 표로 만든다. 산문 주장 ↔ 매니페스트 ↔ 소스 트리가 같은 값을 말해야 통과다.
|
|
139
|
+
|
|
140
|
+
| README 주장 | 위치 | 코드 사실 | 근거 | 판정 |
|
|
141
|
+
|---|---|---|---|---|
|
|
142
|
+
| "스킬 42개" | 10행·131행 | 48 | `ls -d skills/*/SKILL.md` = 48, 매니페스트 skill 표면 = 48 (디렉터리 카운트는 49 라 셋 중 혼자 다르다) | 드리프트: 2곳 다 고침 |
|
|
143
|
+
| "`--fast` 지원" | 60행 | 없음 | 파서에 해당 플래그 없음 | 드리프트: 문장 삭제 |
|
|
144
|
+
| "Node 18+ 필요" | 20행 | `engines.node: ">=18"` | package.json | 통과 |
|
|
145
|
+
|
|
146
|
+
(표는 예시다. 주장·사실·근거·판정 4열이 본질이고 행은 그 저장소에서 나온다.)
|
|
147
|
+
|
|
148
|
+
**흔한 실례:** 산문에 "스킬 N개" 같은 수를 하드코딩해두고 그 수가 **어떤 테스트와도 묶여 있지 않은** 경우다.
|
|
149
|
+
스킬을 하나 추가해도 CI 는 초록이고 README 만 조용히 틀려진다. 릴리스마다 오차가 벌어지지만 아무도 실패를 보지 못한다.
|
|
150
|
+
|
|
151
|
+
판정은 3종:
|
|
152
|
+
- **통과**: 주장 = 사실.
|
|
153
|
+
- **드리프트**: 주장 ≠ 사실 → 고친다.
|
|
154
|
+
- **Unknown**: 사실 쪽에 대응하는 게 없다 → **지어내지 말고** 사용자에게 올린다.
|
|
155
|
+
|
|
156
|
+
**대조는 양방향이다.**
|
|
157
|
+
- README 에만 있는 것 = **유령**. 지워진 기능이 문서에 남았다.
|
|
158
|
+
- 코드에만 있는 것 = **누락**. 추가된 기능이 문서에 없다. 이쪽을 더 자주 놓친다. README 를 읽는 것만으로는 절대 안 보이기 때문이다.
|
|
159
|
+
|
|
160
|
+
### 4. 갱신
|
|
161
|
+
- 3단계에서 **드리프트 판정이 난 문장만** 고친다.
|
|
162
|
+
- 고쳐 쓸 때 위 "고정 정책" 의 품질 기준 4개를 지킨다.
|
|
163
|
+
- 편집은 한 군데씩. 보호 구간을 지난다.
|
|
164
|
+
- 수량 주장은 발견한 **모든 위치**를 같은 커밋에서 고친다.
|
|
165
|
+
|
|
166
|
+
### 5. 검증 (보고 의무)
|
|
167
|
+
**검증은 재대조다.** 고쳤다는 기억이 아니라 **명령을 다시 돌린 결과**로 판정한다. 라이브러리는 필요 없다.
|
|
168
|
+
|
|
169
|
+
1. **주장 재대조** (본 검증): 2단계 사실 수집 명령을 **전부 다시 돌려** 갱신된 문장과 맞춘다.
|
|
170
|
+
2. **옛 값 잔존 0**: 수량 주장은 문서 전역이다. 무관한 매치는 눈으로 배제하고, 남은 게 옛 값이면 아직 안 끝났다.
|
|
171
|
+
```bash
|
|
172
|
+
grep -n '42' README.md
|
|
173
|
+
```
|
|
174
|
+
3. **코드 무손상 (필수)**: diff 를 **전수로** 읽는다. 코드펜스·인라인 코드·URL·`--flag` 에 걸린 변경은 **하나도 없어야 한다.** 사실 정정으로 명령 자체가 바뀐 경우가 아니면 전부 회귀다. 하나라도 설명하지 못하면 되돌린다.
|
|
175
|
+
```bash
|
|
176
|
+
git diff -- README.md
|
|
177
|
+
grep -c '^```' README.md # 갱신 전과 같아야 한다(펜스는 짝수)
|
|
178
|
+
```
|
|
179
|
+
4. **한국어 표기 무손상**: 감소분이 "지운 문장 몫" 으로 설명돼야 한다. 설명되지 않는 감소는 규칙이 오탐한 것이다. 즉시 되돌린다.
|
|
180
|
+
```bash
|
|
181
|
+
grep -c '·' README.md # 갱신 전 값과 비교
|
|
182
|
+
```
|
|
183
|
+
5. **경로 실재**: MISSING 이 나오면 그것도 드리프트다(파일이 옮겨졌거나 지워졌다).
|
|
184
|
+
```bash
|
|
185
|
+
grep -oE '\]\([^)]+\)' README.md | cut -c3- | cut -d')' -f1 \
|
|
186
|
+
| grep -vE '^(https?:|#|mailto:)' \
|
|
187
|
+
| while read -r p; do [ -e "${p%%#*}" ] || echo "MISSING: $p"; done
|
|
188
|
+
```
|
|
189
|
+
6. **품질 기준 자기점검**: 갱신된 문장에 이모지·감탄사·과장이 남았는지 읽는다. 원래 있던 것이라도 이번 범위다.
|
|
190
|
+
|
|
191
|
+
### 6. 리포트 (4-field)
|
|
192
|
+
**변경 파일**(README 만) / **드리프트 표**(주장 → 사실 → 근거 → 조치) / **검증**(재대조 결과·코드 무손상·표기 카운트 비교) / **Unknown**(코드에 근거가 없어 판정 못 한 주장. 사용자 확인 필요).
|
|
193
|
+
커밋은 "push" 대기로 명시한다.
|
|
194
|
+
|
|
195
|
+
## 함정
|
|
196
|
+
- **README 를 근거로 README 를 고치는 것.** 문서 안에서 아귀가 맞아도 코드와 틀릴 수 있다. 사실은 항상 코드 쪽에 있다.
|
|
197
|
+
- **`sed`/`awk` 일괄 치환.** 펜스 상태를 모르는 도구는 산문의 이중하이픈과 셸의 ` -- ` 를 구분하지 못한다. 위험이 아니라 결함이다.
|
|
198
|
+
- **누락 방향을 안 보는 것.** README 만 읽으면 "코드에 있는데 문서에 없는 것" 은 절대 안 보인다.
|
|
199
|
+
- **수량 주장을 한 곳만 고치는 것.** 같은 수가 여러 곳에 흩어져 있다. 다음 릴리스엔 문서 내부끼리도 어긋난다.
|
|
200
|
+
- **전면 재작성.** 드리프트 3건을 고치겠다고 문서를 다 다시 쓰면 검토가 불가능해지고 새 오류가 섞인다.
|
|
201
|
+
- **영문 휴리스틱을 한국어에 그대로 거는 것.** `·` 같은 표기가 대량 훼손된다.
|
|
202
|
+
- **마커 목록을 여기서 재서술하는 것.** humanizer 에 위임한다. 사본이 늘면 모순이 늘고, 그 모순은 이미 실재한다.
|
|
203
|
+
- **슬롭 제거를 임무로 착각하는 것.** 임무는 정확성이다. 정확한 문장이 우연히 마커를 밟았다고 고치면 문서만 나빠진다.
|
|
204
|
+
- **파서 라이브러리 도입.** dependencies 0 을 지킨다. 지시문과 `grep` 으로 푼다.
|
|
205
|
+
- **범위 밖 파일에 손대는 것.** SKILL.md·CHANGELOG 는 이 스킬이 아니다.
|
|
206
|
+
- **없는 사실을 지어내 채우는 것.** 코드에 근거가 없으면 Unknown 이다.
|
|
207
|
+
|
|
208
|
+
## 원칙
|
|
209
|
+
- 임무는 정확성이다. 문체는 갱신물의 품질 기준이지 목적이 아니다.
|
|
210
|
+
- 사실은 코드에 있다. README 는 어떤 경우에도 사실이 아니다.
|
|
211
|
+
- 대조는 양방향이다. 유령과 누락을 같이 본다.
|
|
212
|
+
- 편집은 한 군데씩. 일괄 치환 금지.
|
|
213
|
+
- 보호 구간(펜스·인라인 코드·URL·플래그)은 불가침이다.
|
|
214
|
+
- 한국어 표기는 슬롭이 아니라 표기다. 지우기 전에 언어를 판정한다.
|
|
215
|
+
- 판정은 재대조로 한다. 기억 금지.
|
|
216
|
+
- 근거 없는 주장은 Unknown 으로 올린다. 지어내지 않는다.
|
|
217
|
+
- 마커 판단은 humanizer 소관이다. 여기서 사본을 만들지 않는다.
|
|
218
|
+
- 무의존으로 푼다.
|
|
219
|
+
|
|
220
|
+
ARGUMENTS: [--check] [README 경로] (없으면 저장소 루트 README 를 대조 → 갱신 → 재대조)
|
|
221
|
+
- `--check`: 아무것도 고치지 않는다. 대조만 돌려 드리프트 표와 Unknown 만 보고한다.
|
|
222
|
+
- README 경로: 대상을 특정한다(모노레포에서 패키지 README 를 지정할 때).
|