genetics-mcp 2.19.2 → 2.19.3
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/aarch64-unknown-linux-musl/gcell +0 -0
- package/bin/manifest.json +4 -4
- package/bin/x86_64-apple-darwin/gcell +0 -0
- package/bin/x86_64-unknown-linux-musl/gcell +0 -0
- package/package.json +1 -1
- package/skills/genetics-report/SKILL.md +9 -4
- package/skills/genetics-report/assets/example/report-briefing.json +3 -3
- package/skills/genetics-report/references/history.md +5 -0
- package/skills/genetics-report/references/lim-portal-format.md +5 -4
- package/skills/genetics-report/references/readability.md +2 -2
- package/skills/genetics-report/assets/example/plate-pair.html +0 -25
|
Binary file
|
|
Binary file
|
package/bin/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"aarch64-apple-darwin": "
|
|
3
|
-
"aarch64-unknown-linux-musl": "
|
|
4
|
-
"x86_64-apple-darwin": "
|
|
5
|
-
"x86_64-unknown-linux-musl": "
|
|
2
|
+
"aarch64-apple-darwin": "da31e8bb907f94f973f392bb7bbab5e1a709e20dfb1057b0aa22d7ec04ee0f19",
|
|
3
|
+
"aarch64-unknown-linux-musl": "ddfcf176622b2bd4618d96ae85f5ab368c55c76ddd32bcdeb86c0573648d293c",
|
|
4
|
+
"x86_64-apple-darwin": "dbd72945d95d228c9face00c2f7287575829fae3802b87c69f765edd0d1c625d",
|
|
5
|
+
"x86_64-unknown-linux-musl": "eb4029a33c87b9e0d0d789a6c116a0335d6d772f5137beb69a0be334942ba1cd"
|
|
6
6
|
}
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -470,7 +470,8 @@ render·css·폰트를 함께 얹는다. 직접 부르면 옛 서식 시트가
|
|
|
470
470
|
`role: figure` · `provider: user-provided` · `origin`(누가 제공했는지 — **비우면 거절된다**)
|
|
471
471
|
으로 두고 `file` 에 로컬 절대경로를 주면
|
|
472
472
|
화질을 계단으로 내려 예산(장당 300,000B) 안에 앉힌다. `sections[].plates` 에 id 를
|
|
473
|
-
적어야 자리가 선다. 캡션은 **이 화면에서
|
|
473
|
+
적어야 자리가 선다. 캡션은 **이 화면에서 독자가 볼 자리**를 명사형으로 적는다(「8.0 행의 두 날짜와 8.4 행의 종료일 참고」) —
|
|
474
|
+
「…을 보라」 같은 해라체 명령은 어디에도 없다(반드시 지키는 것 12 · 렌더러 ⚠) —
|
|
474
475
|
본문이 이미 말한 것을 되풀이하면 도판이 장식이 된다.
|
|
475
476
|
다만 `hero`·`chapter`·`eof` 는 자리가 없다. 표지의 빈
|
|
476
477
|
마당은 미완성이 아니라 문법이고, 문서는 판권지로 닫는다(꼬리 카드가 없다).
|
|
@@ -511,7 +512,10 @@ render·css·폰트를 함께 얹는다. 직접 부르면 옛 서식 시트가
|
|
|
511
512
|
「사진」(스냅샷)·「단추」(버튼)는 물건을 비유로 부른 것이다 — 둘 다 결정권자에게 뜻이 닿지 않는다.
|
|
512
513
|
같은 버릇을 소설 연구가 잰 적이 있다: 감정을 이름으로 부르지 않고 몸으로만 보여 주는 비율이 사람 글 29 %, AI 글 8 %(StoryScope, arXiv 2604.03136 —
|
|
513
514
|
소설 연구이므로 수치는 유추일 뿐, 규칙의 근거는 2026-09-17 반려다). 결정 문서는 직접 부르는 쪽이 맞다.
|
|
514
|
-
|
|
515
|
+
**공급사 용어도 같다** — AWS 의 Extended Support 를 「연장 지원료」로 직역하면 「지원해 주는 돈」으로 읽힌다(같은 날 반려). 요금·기능은 그것이 무엇인지로 부르고(「구버전 유지 요금」),
|
|
516
|
+
공급사 이름은 첫 등장 자리나 용어표에 한 번만 붙인다. **이 스킬의 규칙 문장도 원고 말투가 아니다** — 캡션 규칙 「무엇을 보라는 것인지」를 베껴 캡션이 「…을 보라.」가 됐다.
|
|
517
|
+
독자에게 말 거는 자리는 하십시오체, 기록 자리는 개조식이고, 해라체 명령은 어디에도 없다.
|
|
518
|
+
집행자: `gazette.py` `text_scan()` ⚠ 「선택지를 「길」로 부른 곳」·「해라체 명령이 N곳」(두 경로 — ⚠ 운영 반영 확인 전) · 비유·조어·직역 일반은 **없음 — 사람의 눈**(경위: `references/history.md` §13).
|
|
515
519
|
13. **우리 쪽 보안·운영 실수와 자격증명 취급 사실을 문서에 적지 않는다 — 구두로 전한다.**
|
|
516
520
|
「비밀번호가 메신저로 오갔음」「키를 메일로 보냈음」은 교체 권고의 근거로 옳아도 고객 문서의 자리가 아니다 —
|
|
517
521
|
박제되고 책임 소재를 글로 남긴다. 권고는 사용자에게 채팅으로만, 문서에는 그 사건의 원인·조치·확인만(`references/content-pipeline.md` 유형 L).
|
|
@@ -552,7 +556,7 @@ doc-pptx 의 슬롭 3종 중 **대시 대비 헤드라인**("복붙에서 위임
|
|
|
552
556
|
| 학생 보고서투 · 완충어 · 근거 없는 총평 · 단독 부정 종결 | `tone.mjs` S1/S2 | 로컬 렌더 산출물 |
|
|
553
557
|
| 금칙 값(고객사·지역·제품명·티켓) | `build.py` `forbid` | **로컬 렌더만** — 포털 발행은 `report_publish.php report_client_fields()` 가 깎아 낸다 |
|
|
554
558
|
| 개발 식별자(3 — 대상 목록은 `lim-portal-format.md` §10-1) | `gazette.py` `text_scan()` ⚠ | **두 경로 다** |
|
|
555
|
-
| 자격증명 명사 + 노출 경로·동사 근접 · 우리 실수 서술(13번) | `gazette.py` `text_scan()` ⚠ 「자격증명 노출」 — 명사 하나(「비밀번호 재설정」)는 안 셈 · 「우리 실수」 일반은 **없음 — 사람 눈** | **두 경로 다**
|
|
559
|
+
| 자격증명 명사 + 노출 경로·동사 근접 · 우리 실수 서술(13번) | `gazette.py` `text_scan()` ⚠ 「자격증명 노출」 — 명사 하나(「비밀번호 재설정」)는 안 셈 · 「우리 실수」 일반은 **없음 — 사람 눈** | **두 경로 다** |
|
|
556
560
|
| 판단 항목·확인 요청에 기한 없음 · `asks` 절 없음 · 선택지 표에 근거 등급 없음 · `asks` 절 표의 동일값 열(브리핑) | `gazette.py` `brief_checks()` ⚠ | **두 경로 다** |
|
|
557
561
|
| 본문 절의 회차 서술(「이번 회차…」) | `gazette.py` `round_talk_scan()` ⚠ | **두 경로 다** |
|
|
558
562
|
| 본문의 진행 상태 어휘(정해짐·회신 대기·N판) · 개수로 상태를 세는 표 제목 · 주체 없는 결정 명사(3b) | `gazette.py` `text_scan()` 과정 어휘 ⚠ | **두 경로 다** |
|
|
@@ -560,7 +564,8 @@ doc-pptx 의 슬롭 3종 중 **대시 대비 헤드라인**("복붙에서 위임
|
|
|
560
564
|
| 권고 낱말(제목·표 열·절 이름·여백 주석·요약면)(10번) | `gazette.py` ⚠ **W1** — 이름에 「의견」이 든 절은 안 셈 | **두 경로 다** |
|
|
561
565
|
| 고객·제3자 자료에서 낸 도판(`user-provided`)의 출처 줄에 원본 위치(쪽·행·주소·건 §) 누락(11번) | `gazette.py` ⚠ **W2** | **두 경로 다** |
|
|
562
566
|
| 도판 출처 줄의 제작 설명·그림 번호 · 출처 줄 길이(0.5단계 5a행) | `gazette.py` `text_scan()` ⚠ — 캡션은 안 봄 | **두 경로 다** |
|
|
563
|
-
| 선택지를 「길」로 부른 곳(스킬 장치 이름의 유출, 12번) | `gazette.py` `text_scan()` ⚠ —
|
|
567
|
+
| 선택지를 「길」로 부른 곳(스킬 장치 이름의 유출, 12번) | `gazette.py` `text_scan()` ⚠ — 「막대 길이」「길게」는 안 세고 「어느 길이」·열 머리 「길」은 셈. 「사진」「단추」 같은 비유는 **없음 — 사람의 눈** | **두 경로 다**(⚠ 운영 반영 확인 전) |
|
|
568
|
+
| 해라체 명령(「…을 보라」「…하라」, 12번) | `gazette.py` `text_scan()` ⚠ — 「보라색」「정할 것」은 안 셈. 공급사 용어 직역(「지원료」)은 **없음 — 사람의 눈** | **두 경로 다**(⚠ 운영 반영 확인 전) |
|
|
564
569
|
| 건 행 이름(`labels`) 낱말이 다른 절 부제·표 제목·열 머리에 다시 섬 · 선택지 기호 한 글자에 이름 둘(0.5단계 3행) | `gazette.py` `text_scan()` ⚠ · 뜻이 같은지는 사람 눈 | **두 경로 다** |
|
|
565
570
|
| 그림·표 번호 가리킴 — 없는 번호 · 조사 · 서지 못한/서지 않는 칸의 토큰 · `plates` 순서(0.5단계 6행) | `gazette.py` `text_scan()`·`build()` ⚠ — 번호 셈은 `fig_order()` 한 곳 | **두 경로 다** |
|
|
566
571
|
| 괄호 안 부연 · 흐름도 칸 `note` · 도판 캡션 문장 수(readability R11) | `gazette.py` `text_scan()` ⚠ — 한 줄 45자·요약·도입문 문장 수는 사람 눈 | **두 경로 다** |
|
|
@@ -249,7 +249,7 @@
|
|
|
249
249
|
"tone": "neutral",
|
|
250
250
|
"short": "선택지",
|
|
251
251
|
"sub": "같은 칸으로 견준 세 선택지",
|
|
252
|
-
"lede": "검토한 세 선택지를 같은 칸으로 견줌. 열이
|
|
252
|
+
"lede": "검토한 세 선택지를 같은 칸으로 견줌. 열이 선택지이고 행이 견줄 것이며, 어느 쪽이 맞는지 판정하는 열은 두지 않음.",
|
|
253
253
|
"marg": {
|
|
254
254
|
"why": "세 선택지는 각각 무엇을 얻고 잃는가?",
|
|
255
255
|
"key": "방식 B 는 우리 자료 규모에서 정확도가 꺾인 사례가 있음.",
|
|
@@ -347,9 +347,9 @@
|
|
|
347
347
|
"sub": "사실과 갈라 둔 의견",
|
|
348
348
|
"lede": "03·04절의 사실을 보고 우리회사가 맞다고 보는 쪽. 의견이며, 정하는 것은 01절 회신임.",
|
|
349
349
|
"marg": {
|
|
350
|
-
"why": "우리회사는 어느
|
|
350
|
+
"why": "우리회사는 어느 쪽이 맞다고 보는가?",
|
|
351
351
|
"key": "의견은 이 표 한 장에만 둠.",
|
|
352
|
-
"advice": "회신 뒤 일정은 고른
|
|
352
|
+
"advice": "회신 뒤 일정은 고른 선택지가 정함. 이 의견은 그 일정과 별개임."
|
|
353
353
|
},
|
|
354
354
|
"tables": [
|
|
355
355
|
{
|
|
@@ -134,6 +134,10 @@
|
|
|
134
134
|
규칙의 근거는 반려 원문이다.
|
|
135
135
|
처방 — 반드시 지키는 것 12(물건은 이름으로), 0.5단계 3행에 「스킬의 장치 이름도 장치 이름」, 본보기 JSON 의 「길」 19곳을 「선택지」·「쪽」으로 고침,
|
|
136
136
|
렌더러 `text_scan()` 에 「선택지를 「길」로 부른 곳」 ⚠(RX_GIL — 「길이」「길게」「길다」 제외) 과 시험 2건.
|
|
137
|
+
같은 날 두 번 더 — ① 발행 뒤 블록 목록에 「어느 길이」「지나는 길과」·열 머리 「길」이 남아 RX_GIL 을 넓힘(선택지를 세는 앞말 뒤의 「길이」·이든/과/와·칸 하나가 「길」).
|
|
138
|
+
② 「지원료라는 단어가 요금을 지원해준다는 느낌으로 읽히지 않겠음?」·「"…7월 31일을 보라." 이거 싸가지 없지 않겠어?」 — AWS 의 Extended Support 를 「연장 지원료」로 직역한 것과,
|
|
139
|
+
캡션 규칙 문장 「무엇을 보라는 것인지」를 캡션 말투로 베낀 것. 둘 다 스킬 문장의 유출이라 규칙 문장을 고쳤다(캡션 = 독자가 볼 자리, 명사형 · 공급사 용어는 그것이 무엇인지로) 하고
|
|
140
|
+
렌더러에 해라체 명령 ⚠(RX_CMD) 과 시험 2건을 더했다. 공급사 용어 직역은 기계 없음 — 사람 눈.
|
|
137
141
|
|
|
138
142
|
## 14. 「비밀번호가 메신저로 오갔음」 (2026-09-17) — SKILL 반드시 지키는 것 13 · process.md 원리 4 · content-pipeline 유형 L · 카피 게이트 새 행
|
|
139
143
|
|
|
@@ -145,3 +149,4 @@
|
|
|
145
149
|
렌더러 `RX_CRED`(자격증명 명사 + 노출 경로·동사가 한 문장 30자 안에 같이 선 곳만 — 명사 하나는 안 셈) ⚠ 과 §10-1 행, 시험 2건(★ + 대조군).
|
|
146
150
|
실측(문장 11개): 노출 문장 4/4 잡음 · 정상 문장 6/7 통과 · 오탐 1(「메일 발송 기능이 계정 정보와 무관」 — 경고라 사람이 넘긴다).
|
|
147
151
|
「우리 실수」 일반(「늦게 알았음」 류)은 기계가 못 재 사람 눈과 독자 검토 decider 관점에 둔다.
|
|
152
|
+
운영 반영 확인(2026-09-17): 서버 배포(HEAD 2301f523) 뒤 운영 `dry_run` 탐침이 「자격증명 노출 서술이 1곳 … 「비밀번호가 메신저」」를 냈다 — 두 경로 다 산다. genetics-mcp 2.19.2 로 게시.
|
|
@@ -472,10 +472,11 @@ python3 assets/render.py <report.json>
|
|
|
472
472
|
| 앞 절이 뒤 절을 가리키는 곳이 %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행) |
|
|
473
473
|
| 표 「%s」의 「%s」 열은 모든 행이 같습니다 — 차이를 못 나르는 열은 주석으로 | `doc_type` 에 「브리핑」 · `kind:"asks"` 절의 `tables[]` 가운데 행이 셋 이상인 표에서, 첫 열을 뺀 한 열이 모든 행에서 같은 값(빈 칸 아님)이다. asks 밖 절(일정 표 「누가」 열 등)·행 둘 이하·빈 칸뿐인 열은 안 센다 | 그 열을 빼고 ※ 주석 한 줄로(visual-first §5). 선택지를 가르는 열만 한눈표에 둔다(§12.3b 대칭 불변식) |
|
|
474
474
|
| 건 행 이름 「%s」 낱말이 %d곳에도 쓰였습니다(%s) — 한 낱말은 한 장치에만, 다른 자리는 다른 낱말로 | 데이터가 준 `labels` 의 `symptom`·`cause`·`fix`·`check` 값이 `kind≠cases` 절의 `sub`·`tables[].caption`·`tables[].cols` 에 낱말로 선다(뒤에 조사 하나까지 같은 낱말 — 「판단력」·「판단이다」는 다른 낱말). 괄호 안은 자리 이름 최대 3개. `labels` 를 안 준 기본 이름·건 절 자신·절 이름·도입문·산문은 안 본다 | 의견 절의 열·부제는 「의견」으로(§3.5 · visual-first §3) |
|
|
475
|
-
| 선택지를 「길」로 부른 곳이 %d곳 있습니다(%s 「%s」 …) — 「길」은 스킬의 장치 이름입니다. 원고에서는 선택지를 그것이 실제로 무엇인지로 부릅니다 | 글자 자리 전부(과정 어휘와 같은 자리 — `history`·`labels`·`origin` 등 제외)에서 정규식 `(
|
|
475
|
+
| 선택지를 「길」로 부른 곳이 %d곳 있습니다(%s 「%s」 …) — 「길」은 스킬의 장치 이름입니다. 원고에서는 선택지를 그것이 실제로 무엇인지로 부릅니다 | 글자 자리 전부(과정 어휘와 같은 자리 — `history`·`labels`·`origin` 등 제외)에서 정규식 `RX_GIL`(gazette.py) — 「두 길의」「복제본 길」「고른 길별」「지나는 길과」, 앞말이 선택지를 세는 말인 「어느 길이」「두 길이」, 칸 하나가 「길」인 열 머리는 걸리고 「막대 길이」「길게」「길다」는 안 걸린다 | 선택지는 그것이 실제로 무엇인지(고객이 부르는 이름)로 — 「복제본 전환」「직접 업그레이드」「현행 유지」. 「길」은 스킬 문서 안의 장치 이름일 뿐이다(SKILL 반드시 지키는 것 12) |
|
|
476
|
+
| 해라체 명령이 %d곳 있습니다(%s 「%s」 …) — 독자에게 말 거는 자리는 하십시오체, 기록 자리는 개조식입니다. 캡션·확인 방법은 「… 참고」「…에서 확인」처럼 명사형으로 | 글자 자리 전부(「길」과 같은 자리)에서 정규식 `RX_CMD`(gazette.py) — 낱말 끝 「보라·하라·열라·누르라·찾으라·읽으라·두라·말라·가라·보시오·하시오」 뒤에 마침표·공백·닫는 따옴표가 오거나 글이 끝나면 센다. 「보라색」(한글이 이어짐)·「정할 것」(명사구)은 안 센다 | 캡션·확인 방법은 명사형(「… 참고」「…에서 확인」), 독자에게 말 거는 자리는 하십시오체(5a). 경위: 캡션 규칙 「무엇을 보라는 것인지」가 캡션이 됐다(2026-09-17) |
|
|
476
477
|
| 선택지 기호 %s 에 이름이 %d개입니다(「%s」·「%s」) — 기호는 한 목록에만 붙이고 이름은 표마다 같게 | 모든 표에서 한 축(열 머리 줄, 또는 행 첫 칸 열)마다 `^([A-Z])[\s·:.)]+(\S.*)$` 꼴을 모으고, 그 축의 기호가 A 부터 차례(둘 이상)일 때만 선택지 정의로 친다. 문서 전체에서 한 글자에 이름이 둘 이상이면 센다(짧은 이름과 긴 이름이 갈린 것도). 산문(「방식 A」)·A 부터 차례가 아닌 축(부분을 가리키는 행)·괄호 부연 차이는 안 센다 | A·B·C 는 한 목록에만. 같은 선택지는 표마다 같은 이름(visual-first §3) |
|
|
477
478
|
| 개발 식별자가 %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」)은 안 걸린다 |
|
|
478
|
-
| 자격증명 노출 서술이 %d곳에 있습니다(%s) — 우리 쪽 취급 사실은 문서가 아니라 구두로. 권고 문장만 남기고 경로 서술은 지웁니다 | 글자 자리 전부(개발 식별자와 같은 제외 칸)에서 자격증명 명사(비밀번호·패스워드·암호(「암호화」 제외)·접속/계정/로그인 정보·자격 증명·API/비밀/인증서 키·토큰)와 노출 경로·동사(메신저·카카오톡·카톡·채팅·문자·메일·이메일·슬랙·평문·공유·전달·주고받·오갔·보냈·받았·남겼)가 **한 문장 30자 안에 같이** 선 곳
|
|
479
|
+
| 자격증명 노출 서술이 %d곳에 있습니다(%s) — 우리 쪽 취급 사실은 문서가 아니라 구두로. 권고 문장만 남기고 경로 서술은 지웁니다 | 글자 자리 전부(개발 식별자와 같은 제외 칸)에서 자격증명 명사(비밀번호·패스워드·암호(「암호화」 제외)·접속/계정/로그인 정보·자격 증명·API/비밀/인증서 키·토큰)와 노출 경로·동사(메신저·카카오톡·카톡·채팅·문자·메일·이메일·슬랙·평문·공유·전달·주고받·오갔·보냈·받았·남겼)가 **한 문장 30자 안에 같이** 선 곳 | 그 문장을 지우고 권고(「교체 권장」)만 남긴다 — 취급 사실은 구두로. 「비밀번호 재설정 기능」·「암호화 키」·「푸시 알림이 문자로」처럼 명사 하나나 경로 하나만 선 문장은 안 걸린다 |
|
|
479
480
|
| 없는 그림·표 번호를 %d곳에서 가리킵니다(%s) — 그림은 {{그림:id}} 로 가리키면 순서가 바뀌어도 따라갑니다 | 글자 자리의 `(그림·표) N-M`(이어 쓴 `· ~ ,` 번호까지 풀어서, `~` 는 같은 절이면 범위)이 렌더러의 번호 셈(§11-1 순서)에 없다. 「」 인용 안·`history`·`origin` 과 앞이 한글인 것(「지표 1-2」)은 건너뛴다 | 그림은 `{{그림:<id>}}` 토큰으로(§11-6). 다른 문서의 번호는 「」 로 인용 |
|
|
480
481
|
| 번호 뒤 조사가 맞지 않는 곳이 %d개입니다(「%s」 → 「%s」) — 끝 숫자의 소리로 고르거나 {{그림:id\|은}} 으로 | 마지막 번호 뒤 조사(`으로·은·는·이·가·을·를·과·와·로`)가 끝 숫자의 받침과 어긋난다 — 받침 있음 0·1·3·6·7·8, 없음 2·4·5·9, 「으로」는 0·3·6 만 | 조사를 고치거나 `{{그림:id\|은}}` |
|
|
481
482
|
| 그림 가리킴 토큰 %d곳이 번호로 서지 못합니다(%s) — plates 에 걸린 assets[].id 나 flow:<절 번호>, 조사는 은·이·을·과·으로 짝으로 | `{{그림:…}}` 의 id 가 번호 셈에 없거나(plates 에 안 걸림) 조사가 짝 밖이다. 토큰은 글자 그대로 남는다 | id 를 plates 에 걸거나 조사를 짝 안에서 |
|
|
@@ -598,9 +599,9 @@ CSS 로는 못 한다. 우측 판독부에 남는 것은 문서 전체의 사실
|
|
|
598
599
|
|
|
599
600
|
### 캡션에 무엇을 쓰는가
|
|
600
601
|
|
|
601
|
-
**이 화면에서
|
|
602
|
+
**이 화면에서 독자가 볼 자리**를 명사형으로 쓴다(「8.0 행의 두 날짜와 8.4 행의 종료일 참고」). 「…을 보라」 같은 해라체 명령은 어디에도 없다 — 렌더러가 ⚠ 로 센다.
|
|
602
603
|
본문이 이미 말한 것을 되풀이하면 도판이 장식이 된다.
|
|
603
|
-
그리고 `alt` 는 캡션의 사본이 아니다 — 캡션은
|
|
604
|
+
그리고 `alt` 는 캡션의 사본이 아니다 — 캡션은 「독자가 볼 자리」이고 `alt` 는 「무엇이 보이는가」다.
|
|
604
605
|
|
|
605
606
|
## 11-2. 흐름도 — 「A 가 되면 B 가 되고 C 가 된다」
|
|
606
607
|
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
| R11 본문·표 | 문단 사이 ≥ 1.5em · 한 줄 한글 14~45자 · 헤더 ≥ 본문 ×1.5 굵게 · 문단 ≤ 220자 · 산문 참조 번호 ≤ 3 | gazette.css 토큰 · gazette-report `read.mjs` · §10-1 | ⚠ |
|
|
43
43
|
| R11a 문장 | **한 문장 ≤ 60자**(공백 제외). 관보는 한 문장을 한 줄로 세우므로 문장 길이가 곧 줄 길이 — 본문 단은 한 줄에 45자, 60자면 1.4줄. 판단 항목·건처럼 가장 많이 읽는 자리는 **45자 안**으로 써 한 줄에 세운다. 접히는 문장은 마침표에서 둘로 끊는다(실측: 고객사 결정 브리핑의 앞선 판에서 45~57자 문장 20개가 한 번씩 접혔음) | gazette.py `text_scan`(60자) · 45자는 사람 눈 | ⚠ |
|
|
44
44
|
| R11b 표 칸 | 칸 ≤ **20자**(4열 이하) · ≤ **12자**(5열 이상) — 열 폭 130~180px 에서 두 줄. 설명은 ※ 주석·본문으로. 흐름도 칸 ≤ 20자·note ≤ 12자(칸 폭 200px), 조건은 note. 칸에 넣던 숫자 나열은 **행으로 푼다**(「A 구간 1,234 · B 구간 5,678 …」 한 칸 → 구간마다 한 행) | gazette.py `text_scan`(칸·흐름도 칸·note) · 숫자 나열은 사람 눈 | ⚠ |
|
|
45
|
-
| R11c 도판 글 | 캡션 ≤ **60자** 한 문장(
|
|
45
|
+
| R11c 도판 글 | 캡션 ≤ **60자** 한 문장(독자가 볼 자리만, 명사형 — 문장 수도 센다) · 출처 줄 ≤ **40자**, 원본 위치 한 구절만(R12e) | gazette.py `text_scan` | ⚠ |
|
|
46
46
|
| R11d 요약면 | 현황 줄 ≤ **80자** 한두 문장 · 수치 칸 라벨 ≤ **16자**(이름표) · 요약 문단 본문 ≤ 160자 세 문장 | gazette.py `text_scan`(자수) · 문장 수는 사람 눈 | ⚠ |
|
|
47
47
|
| R11e 절 머리 | 도입문 ≤ 90자 두 문장 · 여백 주석 why 30 · key 45 · advice 40자(19자/줄 단) | gazette.py `text_scan`(자수) · 도입문 문장 수는 사람 눈 | ⚠ |
|
|
48
48
|
| R11f 판단 항목 | 본문 ≤ 220자 네 문장 — 첫 문장은 기한, 상세는 건으로 | gazette.py `text_scan`(자수 · 문장 수는 R12b) | ⚠ |
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
- 색이 **뜻**에 맞는가 — 초록=정상·노랑=주의·빨강=위험처럼 독자가 이미 아는 뜻을 거스르지 않는가.
|
|
69
69
|
- 색이 **선택지의 옳고 그름**을 판정하지 않는가 — 한 길만 빨강, 다른 길만 초록이면 그림이 답을 먼저 말한다. 빨강·초록은 이용자 상태를 나르는 그림에만.
|
|
70
|
-
- 캡션이
|
|
70
|
+
- 캡션이 독자가 볼 자리를 가리키는가 — 그림이 이미 보여 주는 것을 되풀이하면 장식이다. 「…을 보라」 같은 해라체 명령은 렌더러가 센다.
|
|
71
71
|
- 라벨이 **자기 표식**을 가리키는가 — 기계는 거리만 잰다.
|
|
72
72
|
- 한 그림에 **한 생각**인가 — 패널 둘까지.
|
|
73
73
|
- 선택지 도판들이 **같은 잣대**인가 — 한 선택지만 합성·실사·크게·먼저가 아닌가, 칩 이름이 캡션·표의 이름과 같은가(R13d 의 뜻 쪽).
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<!doctype html><meta charset="utf-8">
|
|
2
|
-
<!-- pair.mjs 가 쓴 두 칸 비교 도판 — 손으로 고치지 말고 인자를 바꿔 다시 쓴다.
|
|
3
|
-
layout column · 칸 350 · 사이 20 · 좌우 20 · 배율 1.34(원본 520px ÷ dpr 2) · 틀 높이 489
|
|
4
|
-
left plate-pair-before.png 520×730 · right plate-pair-after.png 520×470 · crop-top 0 · mark 12,54,236,120 · seam 54 -->
|
|
5
|
-
<style>
|
|
6
|
-
body{margin:0;background:#fff;font-family:Pretendard,"Apple SD Gothic Neo","Noto Sans KR",sans-serif;color:#111}
|
|
7
|
-
.wrap{width:760px;padding:16px 20px 20px;box-sizing:border-box;background:#fff;display:flex;gap:20px;align-items:flex-start}
|
|
8
|
-
.col{width:350px;flex:none}
|
|
9
|
-
.lab{font-size:17px;font-weight:700;height:28px;line-height:28px;margin:0 0 8px;display:flex;align-items:center;gap:10px;white-space:nowrap}
|
|
10
|
-
.tag{display:inline-block;background:#e5e7eb;color:#111;font-size:15px;font-weight:700;line-height:24px;padding:0 10px;border-radius:2px;flex:none}
|
|
11
|
-
.shot{position:relative;width:350px;height:491px;border:1px solid #bbb;border-radius:4px;overflow:hidden;box-sizing:border-box;background:#fff}
|
|
12
|
-
.shot img{position:absolute;left:0;display:block;width:348px}
|
|
13
|
-
.mark{position:absolute;border:3px solid #111;border-radius:6px;box-sizing:border-box}
|
|
14
|
-
.seam{position:absolute;left:10px;right:10px;border-top:2px dashed #595959}
|
|
15
|
-
</style>
|
|
16
|
-
<div class="wrap">
|
|
17
|
-
<div class="col">
|
|
18
|
-
<p class="lab"><span class="tag">그대로 두면</span>카드가 보임</p>
|
|
19
|
-
<div class="shot"><img src="plate-pair-before.png" alt="" data-dpr="2" data-min-text="13" style="top:0px"><div class="mark" style="left:16.06px;top:72.28px;width:315.88px;height:160.62px"></div></div>
|
|
20
|
-
</div>
|
|
21
|
-
<div class="col">
|
|
22
|
-
<p class="lab"><span class="tag">바꾸면</span>카드가 빠지고 지표가 올라옴</p>
|
|
23
|
-
<div class="shot"><img src="plate-pair-after.png" alt="" data-dpr="2" data-min-text="13" style="top:0px"><div class="seam" style="top:71.28px"></div></div>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|