genetics-mcp 2.18.0 → 2.18.2
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/bin/aarch64-apple-darwin/gcell +0 -0
- package/bin/manifest.json +2 -2
- package/bin/x86_64-apple-darwin/gcell +0 -0
- package/package.json +1 -1
- package/skills/genetics-report/SKILL.md +143 -134
- package/skills/genetics-report/assets/example/cases-briefing-designs.json +34 -0
- package/skills/genetics-report/assets/example/cases-briefing.json +4 -2
- package/skills/genetics-report/assets/example/plate-pair-after.png +0 -0
- package/skills/genetics-report/assets/example/plate-pair-before.png +0 -0
- package/skills/genetics-report/assets/example/plate-pair.html +25 -0
- package/skills/genetics-report/assets/example/report-briefing-designs.json +744 -0
- package/skills/genetics-report/assets/example/report-briefing.json +30 -24
- package/skills/genetics-report/assets/example/report.json +4 -4
- package/skills/genetics-report/assets/figure.mjs +390 -63
- package/skills/genetics-report/assets/mockshot.mjs +3 -2
- package/skills/genetics-report/assets/pair.mjs +138 -0
- package/skills/genetics-report/assets/shot.mjs +87 -19
- package/skills/genetics-report/references/content-pipeline.md +34 -33
- package/skills/genetics-report/references/edition-review.workflow.js +49 -0
- package/skills/genetics-report/references/history.md +121 -0
- package/skills/genetics-report/references/illustrations.md +16 -12
- package/skills/genetics-report/references/lim-portal-format.md +179 -93
- package/skills/genetics-report/references/linear-read-test.workflow.js +47 -0
- package/skills/genetics-report/references/process.md +141 -91
- package/skills/genetics-report/references/readability.md +46 -23
- package/skills/genetics-report/references/reader-review.workflow.js +157 -29
- package/skills/genetics-report/references/visual-first.md +95 -34
|
@@ -35,7 +35,7 @@ Tufte 의 여백 노트가 근거다 — 참조를 문서 끝이 아니라 참
|
|
|
35
35
|
|
|
36
36
|
## 1. 서식은 하나뿐이고 서버가 정한다
|
|
37
37
|
|
|
38
|
-
`report_publish.php
|
|
38
|
+
`report_publish.php` 의 `REPORT_TEMPLATES` 에 `lim-report` 하나뿐이다.
|
|
39
39
|
|
|
40
40
|
| 서버가 정하는 것 | 값 |
|
|
41
41
|
|---|---|
|
|
@@ -46,11 +46,11 @@ Tufte 의 여백 노트가 근거다 — 참조를 문서 끝이 아니라 참
|
|
|
46
46
|
|
|
47
47
|
- 폰트는 **한 면**이다(실측 409,044B).
|
|
48
48
|
정적 3면이 아니고 400–700 도 아니다 — 300 이 필요한 것은 표지 둘째 행과 간지 숫자가 가는 굵기라서다.
|
|
49
|
-
- `palette.py` 는 지문 목록에서 **일부러 빠졌다**(`report_publish.php
|
|
50
|
-
관보는 팔레트 토큰을 안 쓴다 — `build_gazette` 가 `styles(..., tokens=False)` 로
|
|
49
|
+
- `palette.py` 는 지문 목록에서 **일부러 빠졌다**(`report_publish.php` 의 `REPORT_TEMPLATES` 안 `reads` 주석).
|
|
50
|
+
관보는 팔레트 토큰을 안 쓴다 — `build.py build_gazette()` 가 `styles(..., tokens=False)` 로 부른다.
|
|
51
51
|
**발행에 팔레트 인자가 없다.**
|
|
52
|
-
- `cfg['editor'] = False`(`
|
|
53
|
-
- `REPORT_EOF_TEMPLATES = []`(`report_publish.php
|
|
52
|
+
- `cfg['editor'] = False`(같은 `build_gazette()`) — 문서 안 편집 레이어를 안 싣는다.
|
|
53
|
+
- `REPORT_EOF_TEMPLATES = []`(`report_publish.php`) — 꼬리 카드가 안 붙는다.
|
|
54
54
|
|
|
55
55
|
### 로컬 렌더는 `render.py` 로 한다
|
|
56
56
|
|
|
@@ -62,10 +62,10 @@ python3 assets/render.py <report.json>
|
|
|
62
62
|
- **`report.json` 에 `css` · `render` · `palette` 를 적을 필요가 없다.**
|
|
63
63
|
적으면 서버와 갈릴 수 있다.
|
|
64
64
|
- **`build.py` 를 직접 부르지 마라.**
|
|
65
|
-
`cfg.get('css', ['report.css'])`(`build.py
|
|
65
|
+
`cfg.get('css', ['report.css'])`(`build.py styles()`)로 떨어져 옛 서식 시트가 실린다.
|
|
66
66
|
스타일 없는 문서가 대비 검사를 통과해 「거짓 초록」이 된다.
|
|
67
67
|
- 로컬 전용 칸이 둘 있다: `out`(출력 파일명) · `forbid`(금칙 패턴).
|
|
68
|
-
둘 다 발행 창구가 깎아 낸다 — 서버는 `out` 을 스스로 `report.html` 로 박는다(`report_publish.php
|
|
68
|
+
둘 다 발행 창구가 깎아 낸다 — 서버는 `out` 을 스스로 `report.html` 로 박는다(`report_publish.php report_render()`).
|
|
69
69
|
|
|
70
70
|
---
|
|
71
71
|
|
|
@@ -99,7 +99,7 @@ python3 assets/render.py <report.json>
|
|
|
99
99
|
|
|
100
100
|
## 3. 최상위 필드 — 전량
|
|
101
101
|
|
|
102
|
-
`REPORT_CLIENT_KEYS`(`report_publish.php
|
|
102
|
+
`REPORT_CLIENT_KEYS`(`report_publish.php report_client_fields()` 가 이것으로 깎는다)가 화이트리스트다.
|
|
103
103
|
**여기 없는 키는 조용히 버려진다** — 보낸 쪽은 실린 줄 안다.
|
|
104
104
|
|
|
105
105
|
### 3.1 표지·머리
|
|
@@ -112,12 +112,12 @@ python3 assets/render.py <report.json>
|
|
|
112
112
|
| `title` | 대제목 **첫 행**(굵게). 판권지 제목·러닝 푸터·자동 PART 이름의 폴백이기도 하다 | 표지 대제목이 안 선다 |
|
|
113
113
|
| `title_sub` | 대제목 **둘째 행**(가늘게 — 회차·부제). 판권지 부제 폴백 | 둘째 행만 빠진다 |
|
|
114
114
|
| `subtitle` | 표지 한 문단 요약(대제목 **아래**) | 요약문이 없다 |
|
|
115
|
-
| `intro` | 같은 자리. **`subtitle` 보다 먼저 쓰인다**(`gazette.py
|
|
115
|
+
| `intro` | 같은 자리. **`subtitle` 보다 먼저 쓰인다**(`gazette.py Doc.cover()`) | — |
|
|
116
116
|
| `doc_no` | 표지 문서번호 스트립. 판권지 부제 폴백 | 문서번호 칸이 빠진다 |
|
|
117
117
|
| `client` | 표지 우상단 고객사명. 러닝 푸터 폴백 | 로고도 없으면 우상단이 빈다 |
|
|
118
118
|
| `issuer` | 발행처 스트립. 문자열 또는 목록(마지막 항목이 강조된다) | `doc_type`·`cover_date` 로 세운다 |
|
|
119
119
|
| `doc_type` | `issuer` 폴백 조각 | — |
|
|
120
|
-
| `cover_date` | `issuer` 폴백 조각 + 요약면 제목 옆 「기준」 날짜 | 기준일 표기가 빠진다 |
|
|
120
|
+
| `cover_date` | `issuer` 폴백 조각 + 요약면 제목 옆 「기준」 날짜 — **수치의 기준일**이다. 기준일이 따로 없으면 작성일과 같게 둔다. 작성일과 다르면 `labels.as_of` 를 「작성」으로 바꾸거나, 기준일을 `colophon.mark` 와 그 수치를 싣는 표 캡션에 둔다. 작성일(`meta` 「작성」 · 판권지 「작성」 · `history` 마지막 `date`)과 묶어 대조하지 않는다 — 집계 기준일이 있는 문서의 뜻이 틀어진다 | 기준일 표기가 빠진다 |
|
|
121
121
|
| `meta` | 표지 4칸 격자 `[{label,value}]`. 판권지 `rows` 폴백 | 격자가 안 선다 |
|
|
122
122
|
|
|
123
123
|
**대제목 둘째 행에 문장을 넣지 마라.**
|
|
@@ -145,11 +145,11 @@ python3 assets/render.py <report.json>
|
|
|
145
145
|
| 칸 | 뜻 | 없으면 |
|
|
146
146
|
|---|---|---|
|
|
147
147
|
| `notice` | 현황 줄 **객체** `{state,text}` | 현황 줄이 안 선다 |
|
|
148
|
-
| `bar` | 상태 막대 `[{value,label,tone}]` | 막대가 안 선다 |
|
|
148
|
+
| `bar` | 상태 막대 `[{value,label,tone}]`. 건을 세는 막대면 대기(`wait`) 합은 미결 건 수나 판단 항목 수, 완료 합은 나머지 건 수나 전체 건 수와 같아야 한다 — 어긋나면 렌더러 ⚠(§10). **건이 아닌 다른 것을 세는 막대는 `bar_note` 에 셈 기준을 밝힌다**(그러면 대조하지 않는다) | 막대가 안 선다 |
|
|
149
149
|
| `bar_alt` | 막대의 대체 텍스트(`role="img"` 의 이름) | 「전체 분포」로 선다 |
|
|
150
|
-
| `bar_note` | 막대 아래 각주 한 줄 | 각주가
|
|
151
|
-
| `stats` | 수치 칸 `[{value,unit,label,accent,href,go}]` | 수치 칸이 안 선다 |
|
|
152
|
-
| `remain` | 머리띠 우측 판독부 수치(요청 잔여) | `open_items` 개수로 자동. 그것도 0이면 판독부가 빠진다 |
|
|
150
|
+
| `bar_note` | 막대 아래 각주 한 줄 — 막대가 **무엇을 세는지** 밝히는 자리(§10 막대 대조의 탈출구) | 각주가 빠지고, 셈이 다른 막대면 §10 ⚠ 가 뜬다 |
|
|
151
|
+
| `stats` | 수치 칸 `[{value,unit,label,accent,href,go}]`. **수치 칸은 서로 겹치지 않는 집합으로** — 한 칸이 다른 칸의 부분이면 하나를 빼거나 라벨에 관계를 드러내고(「그중 …」) `go` 가 교차표를 가리킨다. 집행자: 독자 검토 「결정권자」 관점 · 사람 눈(기계는 수치 칸을 대조하지 않는다) | 수치 칸이 안 선다 |
|
|
152
|
+
| `remain` | 머리띠 우측 판독부 수치(요청 잔여). 적으면 그 값이 이기므로 판단 항목 수와 달라지면 렌더러 ⚠(§10) — 비워 두는 것이 기본 | `open_items` 개수로 자동. 그것도 0이면 판독부가 빠진다 |
|
|
153
153
|
|
|
154
154
|
### 3.4 꼬리·인쇄·문서 설정
|
|
155
155
|
|
|
@@ -162,9 +162,9 @@ python3 assets/render.py <report.json>
|
|
|
162
162
|
| `wide` | 문서 폭 CSS 값(`--wide`) | 시트 기본값 |
|
|
163
163
|
| `marg_width` | 여백 주석 단 폭 CSS 값(`--marg`) | 시트 기본값 |
|
|
164
164
|
| `labels` | 기본 라벨 덮어쓰기 `{키: 글자}` | 렌더러 기본 라벨 |
|
|
165
|
-
| `text_fix` | 문자열 치환 `[{from,to}]`(`build.py
|
|
165
|
+
| `text_fix` | 문자열 치환 `[{from,to}]`(`build.py build()` 의 옛 경로에서만 돈다 — 관보는 안 읽음, content-pipeline §4.1) | 치환 없음 |
|
|
166
166
|
| `lang` | `<html lang>`. 모양 검사 후 아니면 `ko` | `ko` |
|
|
167
|
-
| `assets` | 그림. **`role:"logo"`
|
|
167
|
+
| `assets` | 그림. **`role:"logo"`(표지 마크)와 `role:"figure"`(절 본문 도판) 둘만 실린다**(§11 · §11-1) | 고객사명을 활자로 세운다 |
|
|
168
168
|
|
|
169
169
|
`labels` 로 덮을 수 있는 키(`gazette.py` 의 `self.L(...)` 전량 — 2026-08-27 실측 재대조):
|
|
170
170
|
`apx` `as_of` `ask` `bar_alt` `basis` `board_no` `cause` `check` `client` `closed` `col_evidence`
|
|
@@ -173,14 +173,15 @@ python3 assets/render.py <report.json>
|
|
|
173
173
|
`refs` `remain` `remain_unit` `source` `source_row` `sum` `symptom` `toc` `urgent`
|
|
174
174
|
|
|
175
175
|
건 필드표의 네 라벨이 `symptom`(증상)·`cause`(원인)·`fix`(조치)·`check`(확인 방법)다 —
|
|
176
|
-
브리핑(§12.3b)은 이 넷을 물음·관찰·판단·재현 방법으로 바꿔 쓴다.
|
|
177
|
-
|
|
176
|
+
브리핑(§12.3b)은 이 넷을 물음·관찰·판단·재현 방법으로 바꿔 쓴다. **바꾼 이름은 그 장치 하나에만 쓴다** —
|
|
177
|
+
건 절 밖 절의 부제·표 제목·열 머리에 같은 낱말을 다시 세우면 렌더러가 ⚠ 로 센다(§10-1 「건 행 이름 …」). 의견 표의 열은 「의견」이다.
|
|
178
|
+
`col_evidence` 는 표에 찍히는 라벨이 아니라 **브리핑 ⚠ 가 찾는 열 이름**이다(§10 — 기본 「근거 등급」).
|
|
178
179
|
|
|
179
180
|
### 3.5 하위 목록의 칸
|
|
180
181
|
|
|
181
182
|
| 어디 | 칸 | 비고 |
|
|
182
183
|
|---|---|---|
|
|
183
|
-
| `history[]` | `no` · `date` · `note` | `no` 를 비우면 1부터
|
|
184
|
+
| `history[]` | `no` · `date` · `note` | `no` 를 비우면 1부터 매긴다. **고객에게 공개하기 전의 수정은 판이 아니다** — 공개할 판 한 행(「최초 발행」)만 두고, 공개 뒤 내용이 바뀐 update 에만 행을 더한다. 마지막 `date` 는 `meta` 「작성」·판권지 「작성」과 **한 값**(공개하는 날)이라 공개 직전 update 로 셋을 함께 맞춘다. 날짜 표기는 문서 안에서 한 꼴(「2026. 9. 1.」). 문서 밖 결정의 날짜는 본문에 적지 않는다(결정 장부, §12.3b 「배경」 행). 집행자: `gazette.py Doc.date_scan()` ⚠(세 자리를 0 채움으로 견줌 — §10-1) · 표기 한 꼴과 공개하는 날인지는 사람 눈 |
|
|
184
185
|
| `guide[]` | `q`(질문) · `a[]`(▶ 지시 목록) | `a` 안에는 `<b>` 같은 인라인 태그가 **안 통한다**(이스케이프된다) |
|
|
185
186
|
| `parts[]` | `no` · `title` · `tone` · `lede` · `questions[]` · `roman` | `no` 가 `sections[].part` 가 가리키는 열쇠다 |
|
|
186
187
|
| `notice` | `state`(`critical`\|`info`\|`success`) · `text` | 밖의 값은 `info` 로 강등 |
|
|
@@ -201,7 +202,7 @@ python3 assets/render.py <report.json>
|
|
|
201
202
|
**적지 않아도 된다. 다만 받은 것은 돌려보내라.**
|
|
202
203
|
|
|
203
204
|
번호와 앵커는 **자리가 매긴다**(`case-03-1` = 3번째 절의 1번째 건). 그래서 절 하나를 앞에
|
|
204
|
-
끼우거나 축을 갈아엎으면 **뒤의 앵커가 전부 밀린다** — 실측(2026-08-31
|
|
205
|
+
끼우거나 축을 갈아엎으면 **뒤의 앵커가 전부 밀린다** — 실측(2026-08-31): 축을
|
|
205
206
|
「조치 회차」에서 「검수 단위」로 바꾸자 건 19개 중 거의 전부의 앵커가 바뀌었다.
|
|
206
207
|
|
|
207
208
|
`uid` 는 그 자리와 무관한 이름이다(영소문자·숫자 6자). **서버가 발급하고 `get_report` 가
|
|
@@ -235,7 +236,7 @@ python3 assets/render.py <report.json>
|
|
|
235
236
|
"marg": {
|
|
236
237
|
"why": "무엇을 확인해야 하는가?",
|
|
237
238
|
"key": "이 절이 조치 사항의 전부임. 나머지 절은 근거.",
|
|
238
|
-
"advice": "
|
|
239
|
+
"advice": "제목 옆 「근거」 번호는 그 항목을 받치는 건임. 화면에서는 누르면 열림."
|
|
239
240
|
}
|
|
240
241
|
}
|
|
241
242
|
```
|
|
@@ -273,7 +274,7 @@ python3 assets/render.py <report.json>
|
|
|
273
274
|
|
|
274
275
|
`§n.n` 마커의 앞 숫자가 **두 곳에서 다른 뜻**이다.
|
|
275
276
|
|
|
276
|
-
- 서버의 요약 근거 게이트는 `groups[].no` 로 센다(`report_publish.php
|
|
277
|
+
- 서버의 요약 근거 게이트는 `groups[].no` 로 센다(`report_publish.php report_data_validate()` · `report_summary_refs()`).
|
|
277
278
|
- 렌더러의 앵커는 **절 순번**으로 만든다(`gazette.py` 의 `_link` → `#case-%02d-%d`).
|
|
278
279
|
|
|
279
280
|
둘이 어긋나면 게이트는 통과하는데 링크가 헛짚는다.
|
|
@@ -284,7 +285,7 @@ python3 assets/render.py <report.json>
|
|
|
284
285
|
|
|
285
286
|
## 5. `kind` 다섯 — 그 밖은 발행이 거절된다
|
|
286
287
|
|
|
287
|
-
`REPORT_RENDER_KINDS = ['summary','status','cases','asks','note']`(`report_publish.php
|
|
288
|
+
`REPORT_RENDER_KINDS = ['summary','status','cases','asks','note']`(`report_publish.php`).
|
|
288
289
|
모르는 `kind` 는 절이 통째로 빠지므로 **입구에서 거절한다.**
|
|
289
290
|
|
|
290
291
|
| kind | 무엇이 그려지는가 | 어디서 데이터를 가져오는가 |
|
|
@@ -332,7 +333,7 @@ python3 assets/render.py <report.json>
|
|
|
332
333
|
```
|
|
333
334
|
|
|
334
335
|
- **사전의 키 순서가 강한 것부터다.**
|
|
335
|
-
`gazette.py
|
|
336
|
+
`gazette.py` 의 `RANK_LVL` 주석이 「스킬 3단계가 계약」이라고 물고 있고, `Doc._grade()` 가 그 순서로 표식을 매긴다.
|
|
336
337
|
- 자리 → 표식: `['full','half','open','open']`(강도 점) · `['live','data','done','soon']`(태그 색).
|
|
337
338
|
- 세 번째·네 번째 칸에 이름을 주면 그것이 이긴다 — `["m-live", "설명", "full", "live"]`.
|
|
338
339
|
- 첫째·둘째 칸(클래스·설명)은 관보 렌더러가 **안 읽는다**.
|
|
@@ -395,38 +396,54 @@ python3 assets/render.py <report.json>
|
|
|
395
396
|
| 그림 N장은 놓을 자리가 없어 | `logo`·`figure` 밖의 `role`(`hero`·`chapter`·`eof`) |
|
|
396
397
|
| 도판 N장이 어느 절에도 걸리지 않아 | `sections[].plates` 에 그 id 를 안 적었다 — 11-1절 |
|
|
397
398
|
| 절 …의 도판 「…」를 assets 에서 못 찾았습니다 | `plates` 가 없는 `assets[].id` 를 가리킨다 |
|
|
398
|
-
| 도판 「…」에 그림 바이트가 없습니다 | `file`·`source` 없이 이름만
|
|
399
|
+
| 도판 「…」에 그림 바이트가 없습니다 | `file`·`source` 없이 이름만 왔다. 로컬 `render.py` 는 `file` 을 바이트로 굳히지 않아 `file` 이 있어도 뜬다 — 로컬에서는 이 줄을 빼고 나머지 ⚠ 를 읽는다 |
|
|
399
400
|
| `chapters`·`figure`(**최상위 칸**) 는 자리가 없어 | 옛 서식 전용 칸. `assets[].role:"figure"` 와 다른 것이다 |
|
|
400
401
|
| 절 …의 `principles`/`logic` 은 자리가 없어 | 같음 |
|
|
401
402
|
| `wide`/`marg_width` 값이 길이 단위가 아니라 | CSS 값 검사 |
|
|
402
403
|
| 브리핑에 `asks` 절이 없습니다 | `doc_type` 에 「브리핑」이 있는데 결정 요청 절이 없다 — 독자가 할 일이 없는 블로그 글이다(§12.3b) |
|
|
403
|
-
| 판단 항목 「…」에 기한이 없습니다 | `open_items[]` 제목·본문 어디에도
|
|
404
|
+
| 판단 항목 「…」에 기한이 없습니다 / 확인 요청 「…」에 기한이 없습니다 — 본문 첫 문장에 날짜나 상대 기한(받으신 뒤 N일 안)을 적습니다 | `open_items[]` 제목·본문 어디에도 날짜(`2026년` · `2026. 9. 30` · `9월 30일`)나 수가 붙은 상대 기한(`N 일·주·개월·달·년·영업일` + `까지·이내·안`)이 없다. 맨 「까지·이내」는 기한이 아니다(「배포 전까지」는 걸린다). 제목이 「… 확인 요청」으로 끝나면 둘째 문구로 가른다(§12.5b 끝 「결정 문서의 둘째 할 일」). 기한 없는 판단 항목은 결정을 요청한 것이 아니다. 문구의 「권고」는 「판단 항목」으로 바꿨다(2026-09-11) — 검사기가 「권고」라고 부르면 원고에도 배어 든다 |
|
|
404
405
|
| 브리핑의 표에 「근거 등급」 열이나 행이 없습니다 | 어느 `sections[].tables[]` 에도 `labels.col_evidence`(기본 「근거 등급」)가 열(`cols`)로도, 행의 첫 칸(전치 행렬의 「견줄 것」)으로도 없다 — 선택지 비교표는 근거의 강도를 같이 보여야 한다 |
|
|
405
406
|
| 절 …의 …에 회차 서술이 있습니다 | 본문 절이 「이번 회차에 추가함」을 말한다 — 회차 변경점은 발행 이력(`history`)의 몫이다. 고객은 이 문서를 처음 읽는 사람이라 우리 작업 순서를 읽을 이유가 없다(SKILL 3b) |
|
|
406
407
|
| 절 …의 도판 「id」는 세로가 길어(w×h) 열람 화면에서 폭 N px 로 줄어 섭니다 | `.plate__img` 의 `max-height:78vh` 가 폭을 깎는다 — `760·h/w > 702`(전폭 1030). 위아래 두 장으로 나눈다(readability.md R9) |
|
|
407
408
|
| 절 …의 도판 「id」의 원본 폭 N px 이 본문 단 760px 보다 작아 늘려 그려집니다 | 흐림. 배율 2 로 다시 굽거나 원본을 더 크게(readability.md R8) |
|
|
408
409
|
| N자 넘는 문장이 M개입니다 / 괄호 부연이 둘 이상인 문장이 M개입니다 | 글 층(readability.md R11a·R11g) — 한 문장 60자, 괄호 문장당 하나. 한 문장 한 줄이라 문장이 곧 줄 길이 |
|
|
409
|
-
|
|
|
410
|
-
|
|
|
410
|
+
| 괄호 안이 20자 넘는 부연이 N개입니다 | 괄호 안 20자(공백 제외) — 긴 부연은 문장으로 풀거나 표·주석으로(R11g) |
|
|
411
|
+
| 절 …표 「…」 칸이 N자입니다 / 흐름도 「…」 칸이 N자입니다 / 흐름도 「…」 칸 note 가 N자입니다 | 표 칸 20자(5열 이상 12자), 흐름도 칸 20자·note 12자 — 설명은 ※ 주석·본문으로(R11b) |
|
|
412
|
+
| 도판 「id」 캡션이 N자입니다 / 캡션이 N문장입니다 / 출처 줄이 N자입니다 | 캡션 60자 한 문장, 출처 40자(R11c) |
|
|
413
|
+
| 요약면 막대가 대기 N · 완료 N 인데 문서의 셈은 … 입니다 / 머리띠 요청 잔여가 N 인데 판단 항목은 N개입니다 | `bar` 의 대기(`wait`) 합이 미결 건 수·판단 항목 수 어느 것과도 다르거나, 완료 합이 나머지 건 수·전체 건 수 어느 것과도 다르다 / 손으로 적은 `remain` 이 판단 항목 수와 다르다. 대조만 하고 채우지 않는다. 건이 없는 문서의 막대·숫자가 아닌 막대 값·빈 `remain`·`stats` 는 대조하지 않는다(§3.3). **막대가 건이 아닌 다른 것을 세면 `bar_note` 에 셈 기준을 밝힌다 — `bar_note` 가 있으면 대조하지 않는다**(실측 2026-09-14: 막대를 세운 원고 셋이 모두 다른 셈이었고 셋 다 각주로 기준을 밝혀 두었다) |
|
|
411
414
|
| 요약면 현황 줄이 N자입니다 / 수치 칸 라벨 「…」이 N자입니다 / 요약 N번째 문단 본문이 N자입니다 | 현황 80자, 라벨 16자, 요약 본문 160자(R11d) |
|
|
412
415
|
| 절 … 도입문이 N자입니다 / 여백 주석 k 가 N자입니다 / 판단 항목 N 본문이 N자입니다 | 도입문 90, 여백 주석 30/45/40, 판단 항목 220자(R11e·f) |
|
|
413
416
|
|
|
414
417
|
경고가 하나라도 있으면 **그것부터 고친다.**
|
|
415
418
|
경고를 남긴 채 고객에게 링크를 보내지 마라.
|
|
416
419
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
420
|
+
**통과 기준은 이 한 곳에 둔다 — 통과 = 작성자 몫 ⚠0.** 원고로 고칠 수 없는 경고는 아래 넷뿐이고,
|
|
421
|
+
나머지는 전부 0 으로 만든다. 넷은 핸드오프에 사유 한 줄을 남기고 넘긴다.
|
|
422
|
+
|
|
423
|
+
| 작성자 몫이 아닌 경고 | 왜 | 누구 몫 |
|
|
424
|
+
|---|---|---|
|
|
425
|
+
| 「고객사 로고가 SVG 로 등록돼 있어 표지에 못 싣습니다」·「표지용 파생본이 아직 없습니다」 | 소속처 로고 설정의 상태다 | 소속처 관리 화면(사람) |
|
|
426
|
+
| 「바깥에서 받아 오는 것이 있습니다」 — 그 호스트가 **본문 링크**(`[글자](주소)`·맨 주소·건 `source_url`)뿐일 때 | 입고 검사가 `<a href>` 호스트까지 센다(§11-6). 누르는 링크는 받아 오는 자원이 아니다. `<img src>` 등으로 뜨면 작성자 몫 | 서버 검사 수리 전까지 사람이 호스트 목록을 대조 |
|
|
427
|
+
| 경어체 경고 — PART I 간지(`parts[]`)의 요청 문장에서만 날 때 | PART I 간지는 요청 자리(§14-2)인데 서버 문체 관문이 이 자리는 아직 센다 | 사람이 자리를 확인 |
|
|
428
|
+
| 레포의 렌더러·서버 관문이 운영보다 앞선 동안, 새 규칙대로 고친 자리에 운영 `dry_run` 이 옛 규칙으로 내는 경고 | 운영은 배포된 판으로 센다 — 되돌리면 새 규칙에 걸리고, 배포되면 사라진다 | 새 판에서 0 인지 먼저 잰다 — 렌더러 경고는 레포 작업본을 부르는 로컬 `render.py`, 서버 문체 관문·입고 검사·서식 등록부 칸은 레포 개발 스택의 `dry_run`(절차: genetics lim `cases/dev-스택이-OrbStack-덧판https-base_url으로-떠-있으면-…`). 0 이면 핸드오프에 「배포 뒤 해소」 한 줄 |
|
|
429
|
+
|
|
430
|
+
요청 절의 경어체는 이제 예외가 아니다. 서버 문체 관문(`report_tone.php report_tone_warnings()`)은 요청 자리(`open_items[].body`·`cta`·
|
|
431
|
+
`colophon.note`·`asks` 절 `marg`)와 「」 인용을 빼고 세고, 로컬 `tone.mjs` 는 판단 항목 본문과 「」 인용을 뺀다.
|
|
432
|
+
⚠ 서버 쪽 자리 가림은 운영 반영 확인 전(2026-09-14 갈래)이다 — 배포 전의 운영 `dry_run` 이 요청 자리에서 내는 경어체 경고는 이 표의 셋째 행처럼 자리를 확인하고 넘긴다. 그래도 경어체 경고가
|
|
433
|
+
뜨면 기록 자리(`open_items[].title` 포함)나 `guide` 에 요청 문장이 샌 것이다 — 요청 문장은 요청 절로 옮긴다(SKILL 5a 「보고 칸에 요청문을 두지 마라」).
|
|
434
|
+
건의 `how_to_check` 에서 걸린 명령형은 「보고 칸에 요청문이 N곳 있습니다 — 요청 절(open_items)로 옮깁니다」로 따로 뜬다.
|
|
435
|
+
톤 게이트는 경고이지 거절이 아니다(실측 2026-09-11: 경어체 경고를 안은 `update_report` 2회 모두 발행 성공).
|
|
436
|
+
「경고 0」을 요청 자리를 개조식으로 내려서 맞추려다 **말투 반려가 네 번 났다**(genetics `decisions/고객-문서-요청-자리는-하십시오체로-맺는다-…`).
|
|
423
437
|
|
|
424
438
|
---
|
|
425
439
|
|
|
426
440
|
### 10-1. 시각 우선 관문 — 글로만 선 원고를 렌더러가 센다 (2026-09-08)
|
|
427
441
|
|
|
428
|
-
> 「읽기가 아직도 어려움 — 색상 다변화, 핵심은 굵게, 배지·그래프」 반려(
|
|
442
|
+
> 「읽기가 아직도 어려움 — 색상 다변화, 핵심은 굵게, 배지·그래프」 반려(2026-09-08 고객사 검수 보고)의 처방.
|
|
429
443
|
> 문턱은 `gazette.py` 상수(`PROSE_MAX` 등)와 **같은 값**이다 — 이 표가 계약이다.
|
|
444
|
+
> ⚠ 운영 반영 확인 전(2026-09-14 추가분): 출처 줄 제작 메타 · 주체 없는 결정 명사 · 차이를 못 나르는 열 · 건 행 이름 · 선택지 기호 ·
|
|
445
|
+
> 개발 식별자 · 그림 번호 가리킴 넷 행과 §10 의 기한·괄호 안·흐름도 note·캡션 문장 수·막대 행은 이 갈래의 렌더러에 있다.
|
|
446
|
+
> 배포 뒤 서버 `dry_run` 에 탐침을 태워 뜨는 것을 확인하고 이 줄을 걷는다 — 그 전에는 로컬 `render.py` 가 유일한 기계 그물이다.
|
|
430
447
|
|
|
431
448
|
| ⚠ | 문턱 | 처방 |
|
|
432
449
|
|---|---|---|
|
|
@@ -435,21 +452,38 @@ python3 assets/render.py <report.json>
|
|
|
435
452
|
| 절 N 「이름」 산문에 참조 번호가 M개입니다 | 산문(문단·도입문·여백 주석)에 6.6·2.12a 같은 번호 4개 이상 | 번호는 표·건·판단 항목에만, 산문은 뜻으로 잇는다 |
|
|
436
453
|
| 판단 요청 N항이 산문으로만 섭니다 | `open_items` 6항 이상인데 asks 절에 표·흐름도 0 | 한눈표(항 · 지금 · 그대로 두면 · 바꾸면 — 두 길 대칭, 권고 열·시한 칩 없음) + 관문 흐름도(§11-2). |
|
|
437
454
|
| 핵심 굵게 표기가 한 곳도 없습니다 | 산문 3,000자 이상, `**…**` 도 편집기 굵게 구간도 0 | 절마다 핵심 한 구절을 `**…**` 로 굵게(§11-6). 문단 절반이 굵으면 굵기가 위계를 못 나른다. |
|
|
438
|
-
| 과정 어휘가 %d곳에 있습니다(%s 「%s」 …) — 독자는 앞 회차·회신·판을 모릅니다. 정해진 것은 사실로 배경에, 결정 요청에는 열린 것만 | 원고의 글자 자리 어디든(`history`·`labels`·`forbid`·`origin`·`file`·`source_url`·`href`·`data`·`out`·`css`·`render` 제외)에 정규식 `정해짐 \| 회신 대기 \| 남은 물음 \| 정해진 것 \| 이미 정해진 \| 남은 것 (하나·둘·셋·넷) \| (N·첫·두·세)
|
|
455
|
+
| 과정 어휘가 %d곳에 있습니다(%s 「%s」 …) — 독자는 앞 회차·회신·판을 모릅니다. 정해진 것은 사실로 배경에, 결정 요청에는 열린 것만 | 원고의 글자 자리 어디든(`history`·`labels`·`forbid`·`origin`·`file`·`source_url`·`href`·`data`·`out`·`css`·`render` 제외)에 정규식 `정해짐 \| 회신 대기 \| 남은 물음 \| 정해진 것 \| 이미 정해진 \| 남은 것 (하나·둘·셋·넷) \| (N·첫·두·세)판 \| 정한 사항 \| 결정(한·된) 사항 \| (미 앞이 아닌) 결정임` 이 1곳 이상. `%s` 둘은 자리 경로와 걸린 낱말. 주체 없는 결정 명사(「정한 사항」)는 누가·어디서 정했는지 없이 결정 경로를 사실처럼 싣는다 — 「미결정임」·표지 칸 이름 「결정 사항」·「나머지 사항」은 안 건다 | 회차 낱말(「이번 회차」)만이 아니라 **진행 상태 어휘와 구조**가 금지다 — 상태 열(「상태: 정해짐/회신 대기」)·「~ 그대로(변화 없음)」도 같다. 정해진 것은 **사실**로 요지(배경)에, 결정 요청 절에는 **지금 열린 것만**. 회차의 자리는 `history` 하나. 원고는 직전 판의 차분이 아니라 **독자의 0 상태에서 다시 쓴다** — 판마다 「처음 읽는 사람이 이 절에서 무엇을 알아야 하나」를 다시 묻는다(SKILL 3b · readability R11h) |
|
|
439
456
|
| 절 %s 표 「%s」 제목이 개수로 진행 상태를 세고 있습니다 — 제목은 내용을 말해야 합니다 | `tables[].caption` 이 「…(하나·둘·셋·넷)과 … (하나·둘·셋·넷)」으로 끝난다 | 표 제목은 내용을 말한다 — 「정해진 것 셋과 남은 것 하나」처럼 상태를 세지 않는다(SKILL 3b) |
|
|
440
457
|
| 권고 낱말이 %d곳에 있습니다(%s) — 결정권이 고객에게 있는 문서는 판단 항목을 물음으로 세우고, FCG 의견은 한 절에만 둡니다 | 정규식 `권고(?![량치]) \| 기각 \| 하지 않기로`(권고량·권고치 같은 값 이름은 빼고) 가 다음 자리에 1곳 이상 — `sections[].name·short·sub·lede·marg(why/key/advice)` · `sections[].tables[].caption·cols` · `summary[].label·lead` · `open_items[].title` · `notice.text` · `meta[][1]` · `parts[].title·lede` · `stats[].label`. 이름에 「의견」이 든 절(FCG 의견 절)과 `cases[]`·`appendix`·`history`·`labels`·`colophon`·`origin` 은 제외. `%s` 는 자리 이름 최대 3개 | 판단 항목은 **물음**으로, 결과는 두 길 대칭 한눈표 한 곳에, FCG 의견은 이름에 「의견」이 든 절 **하나**에만(§12.3b · §12.5b) |
|
|
441
|
-
| 도판 「%s」 출처 줄에 원본 위치가 없습니다 — 쪽·행·주소·건 § 가운데 하나를 적습니다 | `assets[]` 가운데 `role:"figure"` · `provider:"user-provided"`(고객·제3자 자료에서 낸 도판. 그린 도판 `deterministic`·서버가 그린 삽화 `higgsfield` 는 세지 않음. 파일로 싣는 합성은 `user-provided` 라 센다 — 출처 줄에
|
|
442
|
-
|
|
|
443
|
-
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
`
|
|
447
|
-
|
|
448
|
-
|
|
458
|
+
| 도판 「%s」 출처 줄에 원본 위치가 없습니다 — 쪽·행·주소·건 § 가운데 하나를 적습니다 | `assets[]` 가운데 `role:"figure"` · `provider:"user-provided"`(고객·제3자 자료에서 낸 도판. 그린 도판 `deterministic`·서버가 그린 삽화 `higgsfield` 는 세지 않음. 파일로 싣는 합성은 `user-provided` 라 센다 — 출처 줄에 건 § 나 부록 N 한 구절(결정 절처럼 건보다 앞에 서는 도판은 부록 N — 뒤 절 § 는 아래 「앞 절이 뒤 절을 가리키는 곳」에 걸린다))이고 보이는 출처 줄 `source_text` 에(`source_url` 은 도판에 그려지지 않아 보지 않는다) 정규식 `\d+\s*쪽 \| \d+\s*행 \| https?:// \| 건 § \| §\s*\d \| 부록\s*\d` 이 하나도 없다. `%s` 는 `id` | 출처 줄은 원본 위치 한 구절(readability R12e). 흐리다·못 연다고 쓰기 전에 원본을 잰다 |
|
|
459
|
+
| 도판 「%s」 출처 줄에 제작 설명이나 그림 번호가 있습니다(「%s」) — 위치 한 구절만, 제작 기록은 origin 으로 | `role:"figure"` 전부(provider 무관)의 `source_text` 를 주소를 지운 뒤 정규식 `(합성·재현)(이며·임·함·한 것·했) \| 예시(이며·임·라) \| (실제·실기기) 화면이 아님 \| 도안이 아님 \| 자리 표시 \| 규격(과 문구)?의 출처 \| 찍(음·은 것) \| 배율 \| N배 밀도 \| 크롭 \| 잘라 \| 자름 \| 그림 N-N` 으로 센다. **캡션은 보지 않는다** — 캡션의 한 낱말 「— 합성」·「재현」·「갈무리」는 정직성 이름표다. 출처 줄에서도 맨 낱말 「합성」·「재현」은 안 걸고 서술형만 건다. 「골밀도」 같은 값 이름은 「N배 밀도」가 아니라 안 걸린다 | 출처 줄에는 위치 한 구절만. 만든 방식·결정 경로는 `origin`(렌더 안 됨)과 도판 HTML 머리 주석에. 바깥 원본이 없는 우리 도안·흐름은 출처 줄을 비운다(readability R12e) |
|
|
460
|
+
| 표 「%s」 주석이 %d문장입니다 — ※ 주석은 %d문장 안 | `tables[].note` 문장 3 이상(둘째 `%d` 는 상한 2). 문장은 렌더러가 문장 블록을 세우는 판별(`boundary.py` — 날짜 마침표 「2026. 9. 30.」·「9. 8.」은 경계가 아님)로 센다. | 두 문장 안으로, 나머지는 본문·건으로(readability R12a) |
|
|
461
|
+
| 판단 항목 「%s」 본문이 %d문장입니다 — %d문장 안 | `open_items[].body` 문장 5 이상(둘째 `%d` 는 상한 4 · 자수 220 은 §10 의 R11f 행이 따로 센다) | 기한과 두 길 이름 → 길마다 달라지는 것 → 근거 절 번호까지 네 문장. 상세는 건에(readability R12b) |
|
|
462
|
+
| 앞 절이 뒤 절을 가리키는 곳이 %d개입니다(%s) — 낱말·규칙은 첫 등장 자리에서 풀고, 뒤 절이 앞 절을 되짚는 방향만 둡니다(readability R12h) | 절 i(배열 순서, 1부터)의 산문 — `sections[].name·sub·lede·paragraphs` · `tables[].caption·cols·rows·note` · `flow.caption·note`·`rows[].no`(건 좌표 꼴 `^§?\d{1,2}[-.]\d{1,2}$` 의 앞 숫자)·`cells[].text·note` · `marg(why/key/advice)` · 그 절이 `kind:"cases"` 면 같은 그룹 `cases[].symptom·cause·fix·how_to_check·remaining` · `kind:"asks"` 면 `cta[]`·`open_items[].title·body` · `sections[].plates` 가 가리키는 `assets[].caption·source_text` — 에서 정규식 `§\s*(\d+)\.\d+` 와 `(?<![\d.])(\d{1,2})절` 의 앞 숫자가 i 보다 큰 것을 센다. 「N차 … 제N절」(남의 문서의 절 번호, 예 「검수 보고 4차 제5절」)은 건너뛴다. `summary[].lead·body` 와 `refs[]` 는 세지 않는다 — 요약 근거 게이트(§8)가 `refs` 로 서고 「해당 절」·「근거」 단추가 되므로 뜀이 아니다. `%s` 는 자리와 걸린 낱말 최대 3개 | 낱말·규칙·예시 선언은 **첫 등장 자리에서 한 구절**로 풀고, 뒤 절 번호 대신 그 자리에서 뜻이 서는 말을 둔다. 근거 건은 `refs` 로만. 뒤 절이 앞 절을 되짚는 방향(05절에서 「03절 표」)은 둔다(readability R12h · SKILL 0.5단계 7행) |
|
|
463
|
+
| 표 「%s」의 「%s」 열은 모든 행이 같습니다 — 차이를 못 나르는 열은 주석으로 | `doc_type` 에 「브리핑」 · `kind:"asks"` 절의 `tables[]` 가운데 행이 셋 이상인 표에서, 첫 열을 뺀 한 열이 모든 행에서 같은 값(빈 칸 아님)이다. asks 밖 절(일정 표 「누가」 열 등)·행 둘 이하·빈 칸뿐인 열은 안 센다 | 그 열을 빼고 ※ 주석 한 줄로(visual-first §5). 선택지를 가르는 열만 한눈표에 둔다(§12.3b 대칭 불변식) |
|
|
464
|
+
| 건 행 이름 「%s」 낱말이 %d곳에도 쓰였습니다(%s) — 한 낱말은 한 장치에만, 다른 자리는 다른 낱말로 | 데이터가 준 `labels` 의 `symptom`·`cause`·`fix`·`check` 값이 `kind≠cases` 절의 `sub`·`tables[].caption`·`tables[].cols` 에 낱말로 선다(뒤에 조사 하나까지 같은 낱말 — 「판단력」·「판단이다」는 다른 낱말). 괄호 안은 자리 이름 최대 3개. `labels` 를 안 준 기본 이름·건 절 자신·절 이름·도입문·산문은 안 본다 | 의견 절의 열·부제는 「의견」으로(§3.5 · visual-first §3) |
|
|
465
|
+
| 선택지 기호 %s 에 이름이 %d개입니다(「%s」·「%s」) — 기호는 한 목록에만 붙이고 이름은 표마다 같게 | 모든 표에서 한 축(열 머리 줄, 또는 행 첫 칸 열)마다 `^([A-Z])[\s·:.)]+(\S.*)$` 꼴을 모으고, 그 축의 기호가 A 부터 차례(둘 이상)일 때만 선택지 정의로 친다. 문서 전체에서 한 글자에 이름이 둘 이상이면 센다(짧은 이름과 긴 이름이 갈린 것도). 산문(「방식 A」)·A 부터 차례가 아닌 축(부분을 가리키는 행)·괄호 부연 차이는 안 센다 | A·B·C 는 한 목록에만. 같은 선택지는 표마다 같은 이름(visual-first §3) |
|
|
466
|
+
| 개발 식별자가 %d곳에 있습니다(%s) — 고객은 조회할 수 없습니다. 커밋·파일·도구·시험 건수는 원고 밖 상태 표에만 | 글자 자리 전부를 주소를 지운 뒤(부록 포함, `history`·`labels`·`origin`·`file`·`source_url`·`href`·`data` 와 `uid`·`id`·`plates`·`refs` 제외) 정규식으로 센다 — 16진 해시(a~f 와 숫자가 섞인 7~64자) · 코드 파일(`.ts`·`.tsx`·`.js`·`.jsx`·`.mjs`·`.py`·`.php`·`.kt`·`.swift`·`.java`) · `src/`·`lib/` · 개발 도구(`tsc`·`eslint`·`prettier`·`jest`·`pytest`·`playwright`·`git`) · `N/N 통과` · 커밋·브랜치·머지·풀 리퀘스트·스테이징. 괄호 안은 「자리 「낱말」」 최대 3개 | 확인 수준은 이용자가 확인할 수 있는 동작으로(content-pipeline §4.2 유형 B). 「나머지」·「머지않아」·「푸시 알림」·숫자만인 번호·날짜·본문 주소·대문자로 시작하는 제품 이름(「Node.js」)은 안 걸린다 |
|
|
467
|
+
| 없는 그림·표 번호를 %d곳에서 가리킵니다(%s) — 그림은 {{그림:id}} 로 가리키면 순서가 바뀌어도 따라갑니다 | 글자 자리의 `(그림·표) N-M`(이어 쓴 `· ~ ,` 번호까지 풀어서, `~` 는 같은 절이면 범위)이 렌더러의 번호 셈(§11-1 순서)에 없다. 「」 인용 안·`history`·`origin` 과 앞이 한글인 것(「지표 1-2」)은 건너뛴다 | 그림은 `{{그림:<id>}}` 토큰으로(§11-6). 다른 문서의 번호는 「」 로 인용 |
|
|
468
|
+
| 번호 뒤 조사가 맞지 않는 곳이 %d개입니다(「%s」 → 「%s」) — 끝 숫자의 소리로 고르거나 {{그림:id\|은}} 으로 | 마지막 번호 뒤 조사(`으로·은·는·이·가·을·를·과·와·로`)가 끝 숫자의 받침과 어긋난다 — 받침 있음 0·1·3·6·7·8, 없음 2·4·5·9, 「으로」는 0·3·6 만 | 조사를 고치거나 `{{그림:id\|은}}` |
|
|
469
|
+
| 그림 가리킴 토큰 %d곳이 번호로 서지 못합니다(%s) — plates 에 걸린 assets[].id 나 flow:<절 번호>, 조사는 은·이·을·과·으로 짝으로 | `{{그림:…}}` 의 id 가 번호 셈에 없거나(plates 에 안 걸림) 조사가 짝 밖이다. 토큰은 글자 그대로 남는다 | id 를 plates 에 걸거나 조사를 짝 안에서 |
|
|
470
|
+
| 그림 가리킴 토큰이 번호로 서지 않는 칸에 있습니다(%s · 글자로 %d번 찍힘) — 토큰이 서는 곳은 본문 문단·표 칸·도판 캡션·건 본문처럼 산문으로 그리는 칸입니다 | id·조사가 **맞는** 토큰인데 `t()`·`tr()` 를 안 지나는 칸(§11-6 「안 서는 칸」 — 요지 `lead`·판단 항목 제목·절 부제·표 제목·열 머리·읽는 법 물음·표지·판권지 행·`running_footer`)에 있어 그린 결과에 원문으로 남았다. 그린 결과(본문 + 쪽 아래 머리글)를 훑어 센다 — id·조사가 틀린 토큰은 위 행이 맡으므로 두 번 세지 않는다 | 토큰을 산문 칸으로 옮기거나(본문 문단·표 칸·캡션), 그 자리에는 번호를 안 쓰는 이름으로 적는다 |
|
|
471
|
+
| 절 %s 의 plates 배열 순서와 그림 번호가 다릅니다(전폭 「%s」 뒤에 본문 단 「%s」) — 차트·흐름도·본문 단 도판이 먼저 번호를 받습니다 | 한 절 `plates` 에서 `wide:true` 도판 뒤에 본문 단 도판이 적혔다 — 전폭은 그리드 밖이라 번호를 뒤에 받는다 | `plates` 를 본문 단 → 전폭 순서로 적는다 |
|
|
472
|
+
| 작성일이 한 값이 아닙니다(%s) — 표지 「작성」 · 판권지 「작성」 · 발행 이력 마지막 date 는 공개하는 날 한 값으로(공개 직전 update_report 한 번) | 표지 `meta` 의 「작성」 행 · 판권지 `colophon.rows` 의 「작성」 행(`rows` 가 없으면 표지를 그대로 쓰므로 안 셈) · `history` 마지막 `date` — 셋에서 년·월·일을 0 채움으로 읽어(「2026.08.24」 = 「2026. 8. 24.」, 범위는 첫 날짜) 값이 둘 이상이다. 자리가 둘 미만이면 안 센다. `cover_date` 는 수치의 기준일이라 대조하지 않는다(§3.1) | 공개 직전 `update_report` 한 번으로 세 자리를 공개하는 날로 맞춘다(SKILL 3c · 체크리스트 10단계). 표기를 한 꼴로 맞추는 것은 사람 눈(§3.5) |
|
|
473
|
+
|
|
474
|
+
위 표에서 여섯째 행(과정 어휘)부터 끝까지는 `gazette.py` 의 문구 **그대로**다(`%d`·`%s` 는 수·이름이 들어가는 자리) — 문구를 바꾸면 양쪽을 같이 바꾼다.
|
|
475
|
+
정규식의 `\|` 는 표 칸이라 그렇게 적은 것이고 실제로는 `|` 다. 전부 ⚠ 이며 거절이 아니고, **배포 뒤에는** `dry_run` 과 로컬 `render.py` 두 경로에 다 실린다 — 2026-09-14 에 더한 행은 위 머리의 「운영 반영 확인 전」 목록대로 그 전까지 로컬 `render.py` 에만 있다.
|
|
476
|
+
집행자: 렌더러 ⚠ — 「차이를 못 나르는 열」은 `gazette.py Doc.brief_checks()`, 나머지는 `gazette.py Doc.text_scan()`.
|
|
477
|
+
뜻이 같은지(두 낱말이 한 뜻인가)·확인 수준 동사(「반영됨」이 어느 수준인가)는 기계가 못 가른다 — 사람 눈.
|
|
449
478
|
까닭(실사례 2026-09-11, 고객사 결정 브리핑 — 반려 둘): 문장은 짧아졌는데 권고가 여러 자리에 되풀이됐고,
|
|
450
479
|
도판 출처 줄이 「원본이 흐림」이라 적혔으나 재 보니 원본은 선명했으며, 독자는 원본을 열 수 없었다.
|
|
480
|
+
2026-09-14 같은 브리핑의 재발행에서 더한 것 — 출처 줄에 「…합성이며 실기기 화면이 아님」이 실려 「넣을 것과 노이즈를 분리 못함?」으로 반려됐고,
|
|
481
|
+
본보기가 건 행 「판단」과 의견 표 열 「판단」을 함께 실어 베낀 문서로 퍼졌으며, 그림 번호를 손으로 옮기다 두 번호의 뜻이 뒤바뀐 채 발행됐다.
|
|
482
|
+
「앞 절이 뒤 절을 가리키는 곳」 행의 까닭(실사례 2026-09-14, 고객사 3차 보고 「읽다가 시험보는 줄 알 것 같음 — 장을 넘나들면서 이해해야 되는 구조」):
|
|
483
|
+
절 순서가 아니라 앞 절이 뒤 절의 건 번호·「NN절」을 쓰고 낱말 정의가 부록·원고 밖에만 있어서였다 —
|
|
484
|
+
순서를 고친 3판에도 선형 읽기 뜀 지점 45. 기계는 ②(뒤 절 번호)만 세고 ①(정의 위치)은 독자 검토 linear 관점·사람 눈이다.
|
|
451
485
|
|
|
452
|
-
측정값(
|
|
486
|
+
측정값(63.0kg · 12.5 · 3.1kg 꼴)은 참조 번호로 세지 않는다 — 앞자리 1~12 이고 단위가 안 붙는 것만 센다.
|
|
453
487
|
|
|
454
488
|
## 11. 안 실리는 것
|
|
455
489
|
|
|
@@ -472,9 +506,9 @@ python3 assets/render.py <report.json>
|
|
|
472
506
|
도판의 자리는 표지가 아니라 **절 본문**이다 — 12-1절.
|
|
473
507
|
|
|
474
508
|
**문서 안에 스크립트가 없다.**
|
|
475
|
-
열람 CSP 가 `default-src 'none'` 이고 `script-src` 를 따로 열지 않는다(`view.php
|
|
509
|
+
열람 CSP 가 `default-src 'none'` 이고 `script-src` 를 따로 열지 않는다(`view.php` 의 `$csp`).
|
|
476
510
|
인라인 스크립트를 여는 분기는 **문서 안 편집기가 실제로 들어 있을 때만** 열리는데,
|
|
477
|
-
관보 렌더러는 그 레이어를 아예 안 싣는다(`build.py
|
|
511
|
+
관보 렌더러는 그 레이어를 아예 안 싣는다(`build.py build_gazette()` 의 `editor = False`·`editor_layer=False`) — 그 분기에 걸릴 일이 없다.
|
|
478
512
|
|
|
479
513
|
**그러나 「그래서 머리띠는 지금 어디인가를 주장하지 않는다」는 틀린 결론이었다.**
|
|
480
514
|
표현 수단이 스크립트뿐이라는 전제에서 나온 말이고, 그 사이 머리띠와 측면 레일은
|
|
@@ -505,30 +539,31 @@ CSS 로는 못 한다. 우측 판독부에 남는 것은 문서 전체의 사실
|
|
|
505
539
|
| 자리 | 칸 |
|
|
506
540
|
|---|---|
|
|
507
541
|
| 그림 자체 | `assets[]` 에 `role: "figure"` · `id` · `alt`(접근성 계약) |
|
|
508
|
-
| 제공자 | `provider: "user-provided"` 이면 **`origin` 이 필수다** — 누가 제공했는지. 비우면 서버가 발행을 거절한다(「출처를 못 적는 자산은 고객 문서에 싣지 않습니다」) |
|
|
542
|
+
| 제공자 | `provider: "user-provided"` 이면 **`origin` 이 필수다** — 누가 제공했는지. 비우면 서버가 발행을 거절한다(「출처를 못 적는 자산은 고객 문서에 싣지 않습니다」). 만든 방식(합성·재현·잘라냄·배율·촬영 환경)과 결정 경로도 `origin` 에 적는다 — 렌더되지 않는다 |
|
|
509
543
|
| 그림 바이트 | `file`(**로컬 절대경로**) 또는 `source`(허용 호스트 https). 둘 다 주면 `file` 이 이긴다 |
|
|
510
|
-
| 캡션 | `assets[].caption` — 번호 뒤에 붙는다. **번호는 적지 않는다**(자리가 매긴다). **한 문장으로** — 마침표가 둘이면 문장 분리가 캡션을 줄로
|
|
511
|
-
| 출처 | `assets[].source_text` —
|
|
512
|
-
| 놓을 절 | `sections[].plates: ["그-id", ...]` — **여기 안 적으면 자리가 없어 안 실린다**(⚠) |
|
|
513
|
-
| 전폭 | `assets[].wide: true` — 두 단 밖, 절 끝에 문서 폭(
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
544
|
+
| 캡션 | `assets[].caption` — 번호 뒤에 붙는다. **번호는 적지 않는다**(자리가 매긴다). **한 문장으로** — 마침표가 둘이면 문장 분리가 캡션을 줄로 가르고 렌더러가 ⚠ 로 센다(부연은 괄호·가운뎃점으로). 정직성은 끝의 한 낱말(「— 도안」·「— 재현」·「— 합성」)이면 된다. 판정 칩은 렌더러가 문장 블록 밖에 붙인다(2026-09-09) |
|
|
545
|
+
| 출처 | `assets[].source_text` — 독자가 원본에 닿는 **위치 한 구절**(쪽·행·주소·건 § 가운데 하나, readability R12e). 제작 메타는 `origin` 에만, 바깥 원본이 없는 우리 도안·흐름은 비운다 |
|
|
546
|
+
| 놓을 절 | `sections[].plates: ["그-id", ...]` — **여기 안 적으면 자리가 없어 안 실린다**(⚠). 본문 단 도판을 먼저, 전폭을 뒤에 적는다(순서가 번호와 갈리면 ⚠) |
|
|
547
|
+
| 전폭 | `assets[].wide: true` — 두 단 밖, 절 끝에 문서 폭(readability §1 기준 창의 전폭)으로 선다. 그 절의 그림 번호는 본문 단 도판 뒤다 |
|
|
548
|
+
|
|
549
|
+
**전폭(`wide: true`)은 렌더러 `7f1cc25` 부터 그리고, 2026-09-12 운영 배포(`3a9fe3f`)에 들어 있다.** 두 단 밖에 전폭 폭으로 서고
|
|
550
|
+
그 절의 그림 번호는 본문 단 도판 뒤다. 같은 날 한 문서에서 전폭이 본문 단 폭으로 선 실측은 배포 전 렌더러(`ea6981e` — 전폭 클래스가 없다) 판이다.
|
|
551
|
+
운영 열람 화면의 표시 폭은 발행 뒤 열람 DOM 에서 `.plates--wide` 안 그림의 실제 폭으로 잰다(실측 대기 — 재면 「선다(실측 날짜)」로 이 문장을 올린다).
|
|
552
|
+
전폭이어도 데스크톱 통짜 화면의 글자는 R1 을 못 넘기기 쉽다 — 폭 1,400px 안팎의 화면은 본문 단에서 글자가 절반 가까이로, 전폭에서도 4분의 3 안팎으로 준다(배율 = 표시 폭 ÷ 원본 폭).
|
|
553
|
+
→ 그런 화면을 근거로 실어야 하면 **글자를 도판에만 맡기지 말고 부록에 전사(轉寫)하라.**
|
|
554
|
+
도판은 「그 화면이 실재한다」를 맡고, 읽히는 것은 부록이 맡는다.
|
|
555
|
+
|
|
556
|
+
**그림 번호의 순서**는 절마다 차트 → 흐름도 → 본문 단 도판(`plates` 순) → 전폭 도판이다(`gazette.py Doc.fig_order()` 한 벌 —
|
|
557
|
+
그리는 쪽·가리킴 토큰·번호 대조 ⚠ 가 같은 셈을 읽는다). 표는 따로 센다. 셈은 서버 기준이고 **바이트와 무관**하다 —
|
|
558
|
+
그림 바이트가 없어 로컬에서 안 그려지는 도판도 자리를 차지하므로 로컬 번호가 운영 번호와 같다. `assets` 에 없는 id 는 세지 않는다.
|
|
559
|
+
본문에서 그림을 가리킬 때는 번호를 손으로 적지 않고 `{{그림:<id>}}` 로 쓴다(§11-6 — ⚠ **운영 반영 확인 전**이라 배포 뒤 열람 DOM 확인 전에는 쓰지 않는다).
|
|
560
|
+
|
|
561
|
+
### 도판의 가독성은 열람 화면에서 재라 (2026-09-08 · 2026-09-10 · 2026-09-14)
|
|
562
|
+
|
|
563
|
+
본문 단·전폭 폭과 서버 긴 변 상한은 readability §1 머리가 정본이다. 880px 합성 그림이 9.5~12.5px 로 떠 반려됐고(9/8),
|
|
564
|
+
「표시 14px」 게이트를 통과한 그림이 「가독성에 하자 있는 상태로 만드는 짓을 왜 계속 하느냐」로 다시 반려됐으며(9/9, 고객사 결정 브리핑),
|
|
565
|
+
글자를 통과한 비교 컷이 위아래로 쌓인 채 「A/B 대칭으로 보여줘야 되는 거 아님?」으로 또 반려됐다(9/14).
|
|
566
|
+
글자 크기는 여러 잣대 중 하나였다. **규칙과 값의 정본은 스킬 `references/readability.md` §1(도판 층 R0~R10·R13 — 캡처 틀 문법 R13 포함, 글 층 R11·R12 는 렌더러 몫)** 이고
|
|
532
567
|
`figure.mjs` 가 그 표를 그대로 센다(✗ 는 exit 3). 렌더러 dry_run 은 치수로 잴 수 있는 둘(세로 축소·업스케일)을 §10-1 표로 센다.
|
|
533
568
|
|
|
534
569
|
모든 도판은 눌러서 **크게 보기**가 열린다(스크립트 없이 `:target`). 원본이 1400px 라 본문 단의 최대
|
|
@@ -723,9 +758,12 @@ CSS 로는 못 한다. 우측 판독부에 남는 것은 문서 전체의 사실
|
|
|
723
758
|
### 도판이 본문을 반박하면 본문을 고친다
|
|
724
759
|
|
|
725
760
|
실사례(2026-08-24): 도판을 실은 뒤 캡처를 눈으로 보다가 본문의 오류 둘을 잡았다.
|
|
726
|
-
하나는
|
|
761
|
+
하나는 한 지표의 값을 다른 지표로 적은 것이고, 다른 하나는 매뉴얼에 **명시된**
|
|
727
762
|
수치를 「1차 문헌 미확인」으로 낮춰 적은 것이다. 둘 다 검사기가 못 잡는다 — **도판을 실었으면
|
|
728
|
-
그 도판을 실제로 열어 본문과 대조해라.**
|
|
763
|
+
그 도판을 실제로 열어 본문과 대조해라.** 캡션만 읽고 대조했다고 치지 않는다.
|
|
764
|
+
|
|
765
|
+
집행자: 독자 검토 「도판」(figures) 관점 — PNG 를 Read 로 열어 본문과 대조하고, 그림이 본문을 반박하면 사실 틀림 독립 항목으로 올린다
|
|
766
|
+
(`references/visual-first.md` §7) · 사람 눈.
|
|
729
767
|
|
|
730
768
|
## 11-6. 인라인 표기 — 굵게 · 강조 · 칩 · 막대 톤 (2026-09-08)
|
|
731
769
|
|
|
@@ -746,16 +784,24 @@ CSS 로는 못 한다. 우측 판독부에 남는 것은 문서 전체의 사실
|
|
|
746
784
|
| `{{ok\|보통}}` | `<span class="chip chip--ok">` | 표 셀의 상태. 톤 다섯: `ok`(초록) `wait`(황갈) `bad`(빨강) `info`(파랑) `muted`(회색). 글자 40자 안 |
|
|
747
785
|
| `[글자](https://…)` | `<a class="ref" href="…" target="_blank" rel="noopener noreferrer">글자</a>` | 출처·원문·관련 문서로 가는 하이퍼링크. 부록 행·표 셀·문단 어디서나 |
|
|
748
786
|
| `https://…` (맨 주소) | 같은 앵커, 글자는 주소 그대로 | 주소 자체를 보여야 할 때(부록 출처 목록). 꼬리 문장부호 `.,;:!?` 와 닫는 괘·괄호는 링크 밖에 남는다 |
|
|
787
|
+
| `{{그림:<assets[].id>}}` ⚠ 운영 반영 확인 전 | `<a class="ref" href="#fig-04-2">그림 4-2</a>` | 본문·표 칸·캡션에서 도판을 가리킬 때. 번호는 §11-1 순서로 렌더러가 매기므로 도판을 옮겨도 따라간다. 손으로 적은 「그림 N-M」이 셈에 없으면 ⚠(§10-1) |
|
|
788
|
+
| `{{그림:flow:<절 번호>}}` ⚠ 운영 반영 확인 전 | 그 절 흐름도의 번호 앵커 | 흐름도를 가리킬 때(절 번호는 1부터, `sections` 자리) |
|
|
789
|
+
| `{{그림:<id>\|은}}` ⚠ 운영 반영 확인 전 | 번호 + 끝 숫자의 소리로 고른 조사 | 조사 짝은 은/는 · 이/가 · 을/를 · 과/와 · 으로/로. 모르는 id·조사는 글자 그대로 남고 ⚠ 로 센다 |
|
|
790
|
+
|
|
791
|
+
그림 가리킴 토큰은 `t()`·`tr()` 를 지나는 칸에서만 선다 — **서는 칸**은 절 문단·표 칸·표 ※ 주석·도판 캡션과 출처 줄·건의 다섯 칸·판단 항목 **본문**·요약 문단 `body`·절 도입문·여백 주석·읽는 법 **답**·흐름도 칸·차트 라벨·부록 값·판권지 `note`·발행 이력 `note`·`cta`·`notice.text`·`bar_note` 다.
|
|
792
|
+
**안 서는 칸**(글자만 이스케이프해 토큰이 원문으로 찍히는 자리)은 표지 칸 전부(`title`·`title_sub`·`kicker`·`client`·`doc_no`·`issuer`·`meta`·`cover_date`)·요지 `label`·요지 `lead`·판단 항목 **제목**·절 `name`·`short`·`sub`·표 제목과 열 머리·읽는 법 **물음**·PART 제목과 간지 물음·수치 칸(`stats`)·건 제목·부록 제목과 행 이름·판권지 표 행·`running_footer` 다.
|
|
793
|
+
안 서는 칸에 넣은 **유효한** 토큰은 렌더 결과에 남아 ⚠ 로 선다(§10-1 「번호로 서지 않는 칸」). 차트는 가리킴 대상이 아니다(앵커가 `cht-`).
|
|
794
|
+
**운영 반영 확인 전**이다: 이 갈래(2026-09-14)의 렌더러에만 있어 배포 전에 발행하면 토큰이 글자로 찍힌다. 배포 뒤 열람 DOM 에서 `a.ref[href^="#fig-"]` 수를 세어 확인하고 표시를 걷는다.
|
|
749
795
|
|
|
750
796
|
막대 차트는 `rows[].tone` 으로 행 색을 준다 — 같은 다섯 이름, 같은 색. 예: 「처리 완료」 행은
|
|
751
797
|
`muted`, 「개선안이 새로 만드는 구간」은 `bad`.
|
|
752
798
|
|
|
753
|
-
**하이퍼링크(2026-09-09).**
|
|
799
|
+
**하이퍼링크(2026-09-09).** 고객사 결정 브리핑이 「부록에 링크가 없어서 신빙성이 안 느껴짐」으로 반려됐다 —
|
|
754
800
|
`t()` 가 주소를 글자로만 냈고, 클릭되는 링크는 건의 `source_url` 한 줄뿐이었다. 이제 `t()` 를 지나는
|
|
755
801
|
모든 칸에서 위 두 모양이 링크가 된다. http(s) 만 받고(`javascript:` 는 글자로 남음), 이미 앵커 안에 든
|
|
756
802
|
주소는 다시 잡지 않는다. **출처는 두 자리에 둔다** — 건의 `source_url`(「출처 원문」 행, 라벨은
|
|
757
803
|
`labels.source_row`)과 부록 출처 목록의 맨 주소. `dry_run` 의 「바깥에서 받아 오는 것이 있습니다」 경고는
|
|
758
|
-
|
|
804
|
+
지금 입고 검사가 링크의 호스트까지 세는 것이라 출처 링크가 있으면 뜬다 — 작성자 몫이 아닌 경고다(§10 통과 기준 표).
|
|
759
805
|
|
|
760
806
|
규칙:
|
|
761
807
|
- **색은 뜻으로 고른다.** ok=끝났거나 정상, wait=사람 판단 대기, bad=이용자에게 나쁜 상태·오류,
|
|
@@ -845,32 +891,46 @@ Submissions·WHO/SUPPORT 정책 브리프(1:3:25)가 **같은 뼈대**를 요구
|
|
|
845
891
|
| 단계 | 역할 | 관보에서 무엇으로 서는가 |
|
|
846
892
|
|---|---|---|
|
|
847
893
|
| 정할 것과 기한(BLUF) | 정할 것 한 줄 · 기한 한 줄. 결론(권고)이 아니라 **물음**이 먼저 선다 | `notice.text` 한 줄 + `subtitle`. `cta` 는 기본 `[]` — `.urgent` 상자에 권고를 세우지 않는다 |
|
|
848
|
-
| 판단 항목 | 고객이 고를 **물음**. 본문 첫 문장이 기한과 두 길의 이름 | `open_items[]` — `title` 물음문 · `body` 첫 문장 「…까지 — 그대로 둘지, 바꿀지」 · `priority:"must"` 쓰지 않음(「가장 시급」 배지가 한 길을 먼저 판정한다) — §12.5b |
|
|
849
|
-
| 타이밍 | 회신 기한 · 수치의 기준일 | `meta` 「회신 기한」 행 · `notice.text` · 판단 항목 본문 첫 문장 — 세 자리. `colophon.mark` 는 **기준일**만
|
|
850
|
-
| 두 길의 결과 | 항마다 「지금 · 그대로 두면 · 바꾸면」을 **대칭**으로. 한 길의 결과만 있는 열
|
|
851
|
-
| 배경 | 무엇을 왜 검토했는가 —
|
|
852
|
-
| 선택지 비교 | **견줄 것 × 길** 전치 행렬 — 행이 견줄 것(편익 · 해악/비용 · 불확실성 · 이행 장벽 · 성숙도 · 근거 등급 · 정할 자리 · 다시 볼 때), 열이 길. **판정 열
|
|
853
|
-
| 근거 | 물음 → 관찰 → 판단 → 재현 방법 → 남은 불확실성 | `kind:"cases"` 절. `labels` 로 필드표 라벨을 바꾼다(`symptom`→물음 · `cause`→관찰 · `fix`→판단 · `check`→재현 방법). `grades` = 근거 등급 4단 |
|
|
894
|
+
| 판단 항목 | 고객이 고를 **물음**. 본문 첫 문장이 기한과 두 길의 이름 | `open_items[]` — `title` 물음문 · `body` 첫 문장 「…까지 — 그대로 둘지, 바꿀지」 · `priority:"must"` 쓰지 않음(「가장 시급」 배지가 한 길을 먼저 판정한다) — §12.5b. 결정 뒤 독자의 둘째 할 일(시험판 확인 등)은 두 번째 건 「… 확인 요청」(§12.5b 끝) |
|
|
895
|
+
| 타이밍 | 회신 기한 · 수치의 기준일 | `meta` 「회신 기한」 행 · `notice.text` · 판단 항목 본문 첫 문장 — 세 자리. 수치의 기준일은 `cover_date`(§3.1 — 작성일과 다를 때 두는 자리까지)를 따르고, `colophon.mark` 는 **기준일**만 적어 기한을 되풀이하지 않는다(readability R12f). 작성일·이력 날짜는 §3.5 `history[]` 행 |
|
|
896
|
+
| 두 길의 결과 | 항마다 「지금 · 그대로 두면 · 바꾸면」을 **대칭**으로. 한 길의 결과만 있는 열 금지. 길이 셋 이상(도안 결재형)이면 행이 선택지, 열이 **이용자가 보는 것**(모양 · 누르면 · 넘기면 · 앱의 선례)만 — 편익·해악·불확실성은 선택지 비교 행렬 한 곳에(같은 행을 두 표에 세우지 않는다, readability R12c) | `asks` 절 `tables[]` **한 곳** — 열 「항 · 지금 · 그대로 두면 · 바꾸면」(도안 결재형은 「도안 · 모양 · 누르면 · 앱의 선례」). 권고 열·시한 칩 없음. 모든 행이 같은 값인 열은 ※ 주석으로(렌더러 ⚠) |
|
|
897
|
+
| 배경 | 무엇을 왜 검토했는가 — 요지 브리핑판. **앞선 결정을 사실로 쓰는 조건**: 결정권이 고객에게 있는 항은 고객이 정한 기록(회신 원문·회의록·결정문)이 있고 그 항이 원문에서 실제로 닫혀 있을 때만(「정해야 함·차기」로 남아 있지 않을 때) 사실로 쓴다. 기록이 없거나 FCG·내부 대화에서 정했으면 사실로 쓰지 않고 결정 물음이나 FCG 의견 절로 둔다. FCG 권한 안의 작업 결정(작업 순서·일정)은 「FCG 작업」으로 사실 서술한다. 본문에는 결정 출처·날짜를 적지 않는다 — 확인은 원고 밖 결정 장부(작업 폴더 `decisions.json`, 발행 안 함)에서 한다 | `summary` **4~6문단**(칸 수의 정본은 SKILL.md 4~6단계). 결정에 직접 닿는 문단만 `body`(세 문장 안), 근거 문단은 `lead` 한 줄 + `refs` 로 두고 `body` 는 비운다 — 본문은 건이 가진다(readability R12g). 집행자: 결정 기록 확인은 사람 눈과 독자 검토 「사실 대조」 관점(`decisions`) · 주체 없는 결정 명사는 렌더러 ⚠(§10-1 과정 어휘) · 문단 모양은 「구조」 관점 |
|
|
898
|
+
| 선택지 비교 | **견줄 것 × 길** 전치 행렬 — 행이 견줄 것(편익 · 해악/비용 · 불확실성 · 이행 장벽 · 성숙도 · 근거 등급 · 정할 자리 · 다시 볼 때), 열이 길. **판정 열 없음**. **지금 열린 판단 항목의 선택지를 모두 열로 세운다** — 검토했으나 고르게 하지 않는 길은 더 둘 수 있다. 앞선 결정으로 이미 닫힌 물음의 길은 요지 한 줄과 건으로 내린다. 물음이 바뀐 판에서는 행렬부터 다시 짠다 | `kind:"note"` 절 + `tables[]`. 「하지 않기로 한 것」 절은 두지 않는다 — 그 내용은 이 표의 「정할 자리」·「다시 볼 때」 행이 받는다. 「근거 등급」은 여기서 **행의 첫 칸**으로 서고, §10 검사는 열과 행 첫 칸을 다 본다 |
|
|
899
|
+
| 근거 | 물음 → 관찰 → 판단 → 재현 방법 → 남은 불확실성 | `kind:"cases"` 절. `labels` 로 필드표 라벨을 바꾼다(`symptom`→물음 · `cause`→관찰 · `fix`→판단 · `check`→재현 방법). `grades` = 근거 등급 4단 · 요지 문단 끝 근거 이름 `labels.refs` 는 「근거 건」 — 기본 「해당 절」 뒤에 건 번호(`04-1`)가 서면 절 번호로 읽힌다 |
|
|
854
900
|
| 한눈에 | 근거 전체의 강도 대조 | `kind:"status"` 절(대조표) |
|
|
855
|
-
| FCG 의견 | 낼지 말지는 따로 정한다 — 내면 **한 절 한 자리**, 표 한 장(
|
|
901
|
+
| FCG 의견 | 낼지 말지는 따로 정한다 — 내면 **한 절 한 자리**, 표 한 장(선택지 · 의견 · 까닭 · 근거 — **선택지마다 한 행**) | `kind:"note"` 절 하나, 이름에 「의견」. 부제·표 열에도 「의견」을 쓰고 건 행 이름(`labels` — 「판단」 등)은 쓰지 않는다(§10-1 「건 행 이름」). 제목 · 표 열 · 칩 · 여백 주석 · 요약면에는 권고를 배지 않는다 |
|
|
856
902
|
| 바꾸는 길의 위험 | 바꾸는 길로 갔을 때의 위험과 완화. 없으면 「해당 없음」과 그 근거 | `kind:"note"` 절 + `tables[]` |
|
|
857
|
-
| 회신 뒤 일정 | 고른 길별로 회신 뒤 누가 무엇을
|
|
903
|
+
| 회신 뒤 일정 | 고른 길별로 회신 뒤 누가 무엇을 언제. 독자에게 시험판·검수 확인을 청하면 **확인 프로필** 표를 함께 둔다(아래) | 마지막 `kind:"note"` 절 |
|
|
858
904
|
| 사전 | 등급 기준 · 확률 어휘 · 성숙도 대응표 · 검증 환경 | `appendix[]` |
|
|
859
905
|
|
|
906
|
+
**확인 프로필(시험판·검수)** — 독자가 무엇을 만들어 무엇을 보면 되는지의 표. 경계마다 **포함 쪽·제외 쪽 두 행**을 두고 `≤`·`<` 가 행 이름에
|
|
907
|
+
드러나게 쓴다. 날짜로 정해지는 경계는 확인일 기준 상대값(「확인일 기준 7일 전」)과 계산 예 하나를 둔다. 앱에서 만들 수 없는 조건은 행을 지우지 않고 대안을 적는다.
|
|
908
|
+
각 행은 판정 코드나 정의로 확인한 뒤 싣는다 — 문서의 나이·키 같은 정의가 앱의 정의(예: 만 나이와 세는 나이)와 같은지 먼저 본다. 집행자: 사람 눈.
|
|
909
|
+
|
|
910
|
+
**선택지 대칭 불변식** — 대칭은 표 한 장이 아니라 문서 전체가 지킨다. 넷.
|
|
911
|
+
- (a) 선택지의 **이름·수·순서**가 한눈표 · 선택지 비교 행렬 · FCG 의견 표 · 도판 칩 · 조건표에서 같다.
|
|
912
|
+
- (b) 선택지마다 **같은 잣대**로 채운다 — 한 선택지만 부연하지 않는다. 도판이면 같은 촬영 규격·같은 틀(readability R13a).
|
|
913
|
+
- (c) FCG 의견 표는 **선택지마다 한 행**이다.
|
|
914
|
+
- (d) 한 선택지만 가진 자료(합성·실사)는 선택지 도판들 **뒤, 그 절 맨 끝**에 둔다. 그 한 길이 FCG 의견이 권하는 길과 같으면 그림이 답을 먼저 말하므로 캡션에 목적(크기 감 등)을 밝히거나 뺀다.
|
|
915
|
+
|
|
916
|
+
조건표(뜨는 조건 등)는 각 행을 모든 선택지 도안과 앱 코드에 대조한다 — 선택지마다 값이 다르면 행을 갈라 쓰고, 대조 없이 「공통」이라 적지 않는다(visual-first 「화면 도안」 6행).
|
|
917
|
+
도안 결재형 본보기는 `assets/example/report-briefing-designs.json`, 두 길 기본형은 `report-briefing.json`.
|
|
918
|
+
|
|
860
919
|
**분량은 1:3:25 다** — `guide`(1쪽에서 결정) : `summary`+`asks`(3쪽) : `parts` 본문(25쪽) : `appendix`(그 뒤).
|
|
861
|
-
첫 쪽만 읽고 결정할 수 있어야 하고, 본문은 그 결정을 **검증**하러 오는 사람을 위한 것이다.
|
|
920
|
+
첫 쪽만 읽고 결정할 수 있어야 하고, 본문은 그 결정을 **검증**하러 오는 사람을 위한 것이다. 읽는 법(`guide`) 물음이 그 첫 쪽의 길이다 — 무엇을 정하는가 · 선택지는 어디서 보는가 · 원본은 어디서 직접 보는가(0.5단계 5a) · 시간이 없다면 어디를 보는가.
|
|
862
921
|
|
|
863
922
|
단서 셋.
|
|
864
923
|
- 브리핑은 content-pipeline §4.2 유형 **J(삭제)와 충돌한다** — 검수 보고에서 「채택되지 않은 대안」은 지우지만,
|
|
865
924
|
브리핑에서는 **두 길이 다 본체**다. 한 길의 결과만 있는 표는 견줌이 아니라 동의 요청이다.
|
|
866
925
|
- `grades` 하향 규율은 GRADE 와 같다 — 직접 실험이 아니면 한 단 내리고, 이해관계가 있는 출처면 또 한 단 내린다.
|
|
867
|
-
올려서 적으면 그 한 건이 문서 전체의 신뢰를 깎는다(SKILL.md
|
|
926
|
+
올려서 적으면 그 한 건이 문서 전체의 신뢰를 깎는다(SKILL.md 3단계).
|
|
868
927
|
- `asks` 절과 `summary` 절은 **한 절씩**이다. 판단 항목이 여러 절에 흩어지면 독자가 무엇을 답해야 하는지 모른다.
|
|
869
928
|
FCG 의견도 **한 절**이다 — 두 자리부터는 권고가 문서에 배어 든다.
|
|
870
929
|
|
|
871
930
|
집행자 — 기한 없는 판단 항목 · `asks` 절 없음 · 「근거 등급」 열이나 행 없음은 §10 렌더러 ⚠,
|
|
872
|
-
권고 낱말 · 표 주석 문장 수 · 판단 항목 문장
|
|
873
|
-
|
|
931
|
+
권고 낱말 · 표 주석 문장 수 · 판단 항목 문장 수 · 결정 요청 절 표의 동일값 열 · 건 행 이름과 선택지 기호 충돌 · 주체 없는 결정 명사는 §10-1 렌더러 ⚠.
|
|
932
|
+
도판 사이 대칭 · 합성 자리 · 조건표와 도안의 대조는 독자 검토 「도판」 관점, 앞선 결정의 기록은 「사실 대조」 관점(`decisions`).
|
|
933
|
+
두 길 대칭(같은 잣대) · FCG 의견 한 자리 · `cta` `[]` · 판정 열 없음 · 확인 프로필은 **사람의 눈**(§12.6b).
|
|
874
934
|
|
|
875
935
|
### 12.4 본문 / 대장 분리
|
|
876
936
|
|
|
@@ -904,7 +964,7 @@ Submissions·WHO/SUPPORT 정책 브리프(1:3:25)가 **같은 뼈대**를 요구
|
|
|
904
964
|
|
|
905
965
|
```json
|
|
906
966
|
{"title": "[방식 A] 를 다음 분기에 들일 것인가, 지금 방식을 그대로 둘 것인가",
|
|
907
|
-
"body": "12월 31일까지 「[방식 A] 로 바꿈」과 「그대로 둠」 중 하나로 회신해 주시기 바랍니다. 그대로 두면
|
|
967
|
+
"body": "12월 31일까지 「[방식 A] 로 바꿈」과 「그대로 둠」 중 하나로 회신해 주시기 바랍니다. 그대로 두면 첫 화면 정확도 61% 가 이어지고, 바꾸면 82% 가 되며 1월에 검증 환경을 먼저 세웁니다. 우리 의견은 사실과 갈라 따로 두었습니다.",
|
|
908
968
|
"refs": ["4.1", "4.2"]}
|
|
909
969
|
```
|
|
910
970
|
|
|
@@ -912,12 +972,30 @@ Submissions·WHO/SUPPORT 정책 브리프(1:3:25)가 **같은 뼈대**를 요구
|
|
|
912
972
|
감추고, 「…을 권고함 — 채택 여부 회신 필요」는 답을 정해 놓고 동의만 받는다.
|
|
913
973
|
- `body` 첫 문장이 **기한과 두 길의 이름**. 기한이 없으면 렌더러가 ⚠ 로 센다(§10 「판단 항목 「…」에 기한이 없습니다」).
|
|
914
974
|
본문은 4문장 안(§10-1).
|
|
915
|
-
- 근거는
|
|
916
|
-
`§
|
|
975
|
+
- 근거는 `refs` 로만 두고, 본문은 **그 자리에서 자족**한다 — 길마다 달라지는 값(정확도·비용·작업)을 본문에 한 구절로 적고,
|
|
976
|
+
뒤 절의 건 번호(`§4.1`)·절 번호 낱말(「03절」)을 본문에 쓰지 않는다. asks 절은 대개 첫 절이라 그 번호는 전부 뒤 절이고,
|
|
977
|
+
독자는 항목 하나만 읽고 두 길 중 하나를 고를 수 있어야 한다(readability R12h · 렌더러 ⚠ §10-1 「앞 절이 뒤 절을 가리키는 곳」).
|
|
978
|
+
`refs` 는 「근거」 단추가 되어 되짚기이지 뜀이 아니다. `§n.n` 은 건·판단 항목 앵커로만 바뀌므로 note 절을 `§5.1` 로 적으면 죽은 링크가 된다(content-pipeline §3). 「권고함」은 여기 쓰지 않는다 —
|
|
917
979
|
의견은 이름에 「의견」이 든 절 한 곳의 몫이다. `priority:"must"` 도 쓰지 않는다 — 「가장 시급」 배지가 한 길을 먼저 판정한다.
|
|
918
980
|
- 요청 자리라 **본문** 종결은 하십시오체다(§14-2). 제목은 개조식 물음(「…할 것인가」)으로 두고 「…하시겠습니까?」로 묻지 않는다(§14-1).
|
|
919
981
|
|
|
920
|
-
집행자: 기한 · 문장 수 · 제목의 권고
|
|
982
|
+
집행자: 기한 · 문장 수 · 제목의 권고 낱말 · 본문의 뒤 절 번호는 렌더러 ⚠(§10 · §10-1) · 물음 꼴과 두 길 이름은 없음 — 사람의 눈(§12.6b).
|
|
983
|
+
|
|
984
|
+
**결정 문서의 둘째 할 일 — 확인 요청.** 결정 물음 말고 독자가 해야 할 일이 하나 더 있으면(시험판 화면 확인 등) `open_items` 의
|
|
985
|
+
**두 번째 건**으로 둔다. 제목은 「… 확인 요청」, 본문 첫 문장에 상대 기한(「시험판을 받으신 뒤 7일 안에」)을 넣는다.
|
|
986
|
+
|
|
987
|
+
```json
|
|
988
|
+
{"title": "시험판에서 고른 도안의 화면 확인 요청",
|
|
989
|
+
"body": "시험판을 받으신 뒤 7일 안에 확인 프로필 표의 네 경우대로 보이는지 확인해 주시기 바랍니다. 표와 다르게 보이면 그 화면을 회신해 주시기 바랍니다.",
|
|
990
|
+
"refs": ["4.2"]}
|
|
991
|
+
```
|
|
992
|
+
|
|
993
|
+
- 표지 `meta`·`notice` 에는 사실문으로만 올린다(「시험판 확인은 받으신 뒤 7일 안」). 요청 문장은 이 건 하나에만 둔다.
|
|
994
|
+
- `guide`(읽는 법)·표지·현황 줄·다른 절에 「확인 부탁드립니다」를 흩어 두지 않는다 — 요청은 요청 절에만(SKILL 5a 「보고 칸에 요청문을 두지 마라」).
|
|
995
|
+
- 제목이 「… 확인 요청」으로 끝나면 렌더러가 기한 ⚠ 를 「확인 요청 「…」에 기한이 없습니다」로 가른다 — 결정 물음 문구(「결정을 요청한 것이 아닙니다」)로 오분류되지 않는다.
|
|
996
|
+
- 무엇을 확인하면 되는지는 §12.3b 「확인 프로필」 표가 받는다.
|
|
997
|
+
|
|
998
|
+
집행자: 기한과 문구 가름은 렌더러 ⚠(`gazette.py Doc.brief_checks()`) · 할 일이 표지·읽는 법 첫 물음에 서는지는 독자 검토 「결정권자」 관점 · 사람의 눈.
|
|
921
999
|
|
|
922
1000
|
### 12.6 검수 항목
|
|
923
1001
|
|
|
@@ -943,8 +1021,11 @@ Submissions·WHO/SUPPORT 정책 브리프(1:3:25)가 **같은 뼈대**를 요구
|
|
|
943
1021
|
- [ ] FCG 의견이 **두 자리 이상**인가 — 의견 절 밖에서 「권고안은 …」이 되풀이되는가
|
|
944
1022
|
(없음 — 사람의 눈. 렌더러 관문은 「의견」이 든 절을 건너뛴다)
|
|
945
1023
|
- [ ] **한 길의 결과만** 있는가 — 「바꾸면」만 있고 「그대로 두면」이 없는 표 · 항 · 도판 (없음 — 사람의 눈)
|
|
946
|
-
- [ ]
|
|
947
|
-
|
|
1024
|
+
- [ ] 선택지마다 **같은 틀 · 같은 잣대**가 아닌가 — 한 선택지만 합성 · 실사 · 크게 · 먼저 · 부연인가, 선택지의 이름 · 수 · 순서가 표 · 의견 표 · 도판 칩에서 갈리는가,
|
|
1025
|
+
조건표가 모든 선택지 도안과 맞지 않는가 (§12.3b 대칭 불변식 — 독자 검토 「도판」 관점 · 동일값 열·기호 충돌은 렌더러 ⚠ §10-1 · 그 밖은 사람의 눈)
|
|
1026
|
+
- [ ] 앞선 결정을 **기록 확인 없이** 사실로 썼는가 — 결정권이 고객에게 있는 항인데 고객이 닫은 기록이 원고 밖 장부에 없는가 (「사실 대조」 관점 · 사람의 눈)
|
|
1027
|
+
- [ ] 그림 출처 줄에 **원본 위치**(쪽 · 행 · 주소 · 건 §)가 없거나, 「흐림」·「확인 불가」처럼 독자가 확인을 **포기하게** 하거나, 제작 설명(합성이며 · 자리 표시 · 배율)·그림 번호가 섞였는가
|
|
1028
|
+
(원본 위치·제작 메타는 렌더러 ⚠ §10-1 · 포기 문구는 없음 — 사람의 눈)
|
|
948
1029
|
- [ ] 고객이 **못 여는 링크**가 있는가 — 눌리는 외부 링크는 건의 `source_url` · 글자 안의 맨 주소 · `[글자](주소)` 셋이다(§11-6) (없음 — 사람의 눈)
|
|
949
1030
|
- [ ] 같은 항의 이름 · 기한이 **네 번 이상** 서는가 (없음 — 사람의 눈, readability R12f)
|
|
950
1031
|
- [ ] 사실 · 인용 · 우리 판단이 한 문장에 섞여 있는가(등급이 다른 것을 한 문장에 두면 강한 쪽으로 읽힌다) (없음 — 사람의 눈)
|
|
@@ -1056,7 +1137,9 @@ Submissions·WHO/SUPPORT 정책 브리프(1:3:25)가 **같은 뼈대**를 요구
|
|
|
1056
1137
|
|
|
1057
1138
|
명사형 종결(`-ㅁ/-음`)은 한국어 상대높임법의 **등급 밖**이라 청자 높임이 0 이다 —
|
|
1058
1139
|
중립이 아니라 기록체이고, 사람에게 직접 쓰면 하대로 읽힌다. 「부탁드림」도 존대가 아니다.
|
|
1059
|
-
이
|
|
1140
|
+
문체 관문은 이 자리를 빼고 센다 — 서버 `report_tone.php report_tone_warnings()` 는 `open_items[].body`·`cta`·`colophon.note`·`asks` 절 `marg`,
|
|
1141
|
+
로컬 `tone.mjs` 는 판단 항목 본문과 「」 인용만 뺀다(서버 쪽 자리 가림은 운영 반영 확인 전, §10).
|
|
1142
|
+
그래서 남는 경어체 경고는 **서버에서는 PART I 간지의 요청 문장, 로컬에서는 PART I 간지·`cta`·판권지 회신 안내**다 — 그 자리들은 고치지 않는다(§10 통과 기준 표 · SKILL 「Lim 발행 규칙」).
|
|
1060
1143
|
|
|
1061
1144
|
**「고객 언어로 바꾼다」는 규칙은 그대로다.**
|
|
1062
1145
|
개조식은 문체이지 내용이 아니다 — 내부 용어를 고객 용어로 바꾸는 일(0단계)을 건너뛰는 핑계가 되지 않는다.
|
|
@@ -1124,3 +1207,6 @@ Submissions·WHO/SUPPORT 정책 브리프(1:3:25)가 **같은 뼈대**를 요구
|
|
|
1124
1207
|
- 문서마다 달라지는 것(장 색 · PART 색 · 러닝 푸터 · 판형)은 `gazette.py` 의 `tail_css()` 가 낸다.
|
|
1125
1208
|
- 렌더러의 원본은 레포 하나다(`private/builder/`).
|
|
1126
1209
|
스킬에 사본을 두지 마라 — `render.py` 가 `FORKABLE` 목록으로 막고 있다.
|
|
1210
|
+
- 원고 전체를 훑는 ⚠ 를 더하거나 서식 등록부(`REPORT_TEMPLATES`)에 칸을 더하면 `tests/builder.test.py` 와 로컬 `render.py` 로 끝내지 않는다.
|
|
1211
|
+
서버는 등록부 항목을 통째로 설정에 섞어 렌더러에 넘기는데, 시험은 원고만 넣고 `render.py` 는 `render`·`css`·폰트만 얹는다 — 등록부에만 있는 칸을 원고로 세는 오탐은 서버를 거친 `dry_run` 에서만 드러난다.
|
|
1212
|
+
실제 보고서 body 를 레포 개발 스택의 `dry_run` 에 한 번 태운다(절차: genetics lim `cases/dev-스택이-OrbStack-덧판https-base_url으로-떠-있으면-…`).
|