genetics-mcp 2.23.0 → 2.24.0

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.
Files changed (31) hide show
  1. package/bin/aarch64-apple-darwin/gcell +0 -0
  2. package/bin/aarch64-unknown-linux-musl/gcell +0 -0
  3. package/bin/manifest.json +5 -5
  4. package/bin/x86_64-apple-darwin/gcell +0 -0
  5. package/bin/x86_64-pc-windows-gnu/gcell.exe +0 -0
  6. package/bin/x86_64-unknown-linux-musl/gcell +0 -0
  7. package/genetics.mjs +2019 -227
  8. package/package.json +2 -2
  9. package/skills/gazette-report/SKILL.md +11 -10
  10. package/skills/gazette-report/scripts/tone.mjs +17 -5
  11. package/skills/gazette-report/scripts/tone.test.mjs +15 -2
  12. package/skills/gazette-report/template/skeleton.html +10 -10
  13. package/skills/genetics-define/SKILL.md +2 -0
  14. package/skills/genetics-report/SKILL.md +93 -87
  15. package/skills/genetics-report/assets/example/cases-briefing.json +1 -1
  16. package/skills/genetics-report/assets/example/cases.json +3 -3
  17. package/skills/genetics-report/assets/example/report-briefing-designs.json +26 -26
  18. package/skills/genetics-report/assets/example/report-briefing.json +3 -3
  19. package/skills/genetics-report/assets/example/report.json +11 -11
  20. package/skills/genetics-report/assets/mcp-call.mjs +109 -0
  21. package/skills/genetics-report/assets/patch.py +196 -0
  22. package/skills/genetics-report/assets/render.py +172 -0
  23. package/skills/genetics-report/assets/xlsx-plate.py +203 -0
  24. package/skills/genetics-report/references/content-pipeline.md +26 -26
  25. package/skills/genetics-report/references/edition-review.workflow.js +70 -15
  26. package/skills/genetics-report/references/history.md +76 -2
  27. package/skills/genetics-report/references/lim-portal-format.md +100 -45
  28. package/skills/genetics-report/references/linear-read-test.workflow.js +50 -14
  29. package/skills/genetics-report/references/process.md +47 -43
  30. package/skills/genetics-report/references/reader-review.workflow.js +105 -28
  31. package/skills/genetics-report/references/visual-first.md +29 -12
@@ -24,7 +24,7 @@
24
24
 
25
25
  ```json
26
26
  {"label":"Decide","lead":"정식 배포 전에 정할 것은 5항, 나머지는 차기임.",
27
- "body":"…==5항 중 「바꾼다」가 하나라도 있으면 2차 시험판을 거침==(제2절 흐름도).","refs":["6.6"]}
27
+ "body":"…==5항 중 「바꾼다」가 하나라도 있으면 <독자 화면의 채널 이름> 앱에서 한 번 더 확인함==(제2절 흐름도).","refs":["6.6"]}
28
28
  ```
29
29
 
30
30
  ## 2. 예시 한 명 — 문서 전체를 한 사람의 숫자로 관통
@@ -33,7 +33,7 @@
33
33
  한다. 독자는 숫자 하나를 기억하고 그 숫자가 어디로 흘러가는지 따라간다. 예시 이용자 한 명의 값 한 벌(성별·키 · 측정일 ·
34
34
  측정값 · 산식이 낸 값 · 화면 칸의 값)이 문서 끝까지 같은 숫자로 흐르는 것이 그 모양이다(값은 그 문서의 몫이고 스킬에 적지 않는다).
35
35
  되풀이는 **자리마다 다른 물음**에 답할 때만이다 — 같은 물음(무엇이 빠졌나·얼마였나)에 그림·요지·표·건이 같은 숫자로 답하면
36
- 되풀이다(readability R12f·R12g). 셈은 한 자리(표 또는 요약면 수치)에 두고 다른 자리는 그곳을 가리킨다.
36
+ 되풀이다(readability R12f·R12g). 셈은 한 자리(표 또는 요약면 수치)에 두고 뒤 자리가 그곳을 되짚는다 — 앞 절이 뒤 절을 가리키지 않는다(SKILL 0.5단계 7행).
37
37
  이름은 가린다(캡처의 닉네임 칸은 `shot.mjs --mask`).
38
38
 
39
39
  ## 3. 용어 잠금 표 — 같은 낱말이 두 값을 가리키면 거기서 죽는다
@@ -41,6 +41,8 @@
41
41
  검토 워크플로가 첫째로 잡은 것이 이것이었다: 같은 값 이름이 한 절에서는 산식이 낸 값, 다른 절에서는
42
42
  결과지 칸의 값을 가리켰다. 뜻이 갈리는 낱말은 **판단 요청 절이나 용어 부록에** 표 한 장으로 박는다 —
43
43
  열: 이름 · 값(예시 한 명) · 어떻게 정해지나 · 어디에 보이나. 산식 안의 값과 화면 칸 이름은 다른 낱말을 쓴다.
44
+ **이름 열은 0단계 이름 대응표(SKILL 0단계 물음 5)의 「독자 화면·문서의 이름」에서만 가져온다** — 표로 정의했다고 작업하며 지은 이름이 독자의 말이 되지는 않는다.
45
+ 2026-09-21 반려가 그 모양이었다: 문서 안에 판 이름 넷의 표가 있었는데도 「정의한 적 없는 단어」로 읽혔다(경위: `history.md` §16). 대응표에 원래 이름이 없는 새 개념만 설명형으로 부른다.
44
46
 
45
47
  잠그는 것은 값 이름만이 아니다.
46
48
  - **장치 이름** — `labels` 로 바꾼 건 행 이름(물음·관찰·판단·재현 방법)은 다른 절의 이름·부제·표 열·캡션에 다시 쓰지 않는다.
@@ -68,7 +70,6 @@
68
70
 
69
71
  도판 HTML 머리 주석은 그림 번호가 아니라 `assets[].id` 로 적는다 — 번호는 자리가 매기고 도판을 옮기면 바뀐다. 본문에서 그림을 가리킬 때도
70
72
  번호를 손으로 적지 않고 `{{그림:<id>}}` 토큰으로 쓴다(문법·번호 순서는 `lim-portal-format.md` §11-1·§11-6).
71
- ⚠ 토큰은 **운영 반영 확인 전**이다 — 배포 뒤 열람 DOM 에서 `a.ref[href^="#fig-"]` 를 세어 확인하기 전에 쓰면 고객 화면에 글자로 찍힌다(§11-6).
72
73
 
73
74
  글은 장치 옆 **3줄(220자) 안**. 표의 숫자를 문장으로 되풀이하지 않는다 — 검토가 잡은 둘째 결함이었다
74
75
  (제8절 문단 8개가 표 3개를 문장으로 반복). 산문에 참조 번호(6.6 · 2.12a)를 넣지 않는다 — 번호는 표·건·항목의 몫이다.
@@ -137,8 +138,14 @@
137
138
 
138
139
  `references/reader-review.workflow.js` 를 Workflow 도구로 돌린다. 배열·객체 인자는 JSON 값 그대로 넘긴다(문자열로 싸면 한 덩어리가 된다).
139
140
 
141
+ 먼저 렌더본 텍스트를 **원고 폴더 밖 빈 폴더**에 뽑는다 — `python3 assets/render.py report.json --text <빈 폴더>/본문.txt`.
142
+ 렌더가 성공했을 때만 쓰고, 화면에 보이는 글만 화면 순서대로 담는다(그림·영상 자리는 「[그림]」「[영상]」, 표 칸은 「 | 」 — `origin`·alt·스크립트·화면 전용 크롬은 없다).
143
+ 원고 폴더 안에 쓰면 ⚠ 가 뜬다 — 검토자가 옆 파일(결정 장부·핸드오프)을 열 수 있어서다.
144
+ CSS 가 만드는 글자(장식 기호·인쇄 쪽 번호)는 없고, 클래스 없는 굵게가 줄을 바꾸는 자리는 붙어 나온다 — 뜻은 같고 글자 단위로 화면과 같지는 않다.
145
+
140
146
  ```
141
147
  { file: "<report.json 절대경로>",
148
+ text: "<렌더본 텍스트 절대경로 — 필수>",
142
149
  reader: "<독자 한 줄 — 할 일이 둘이면 둘 다>", example: "<예시 한 명 한 줄>", bitmapBudget: 3,
143
150
  scratch: "<측정 스크립트·풀어낸 도판을 둘 스크래치 절대경로>", plates: "<도판 HTML·PNG 작업 폴더(선택)>",
144
151
  locked: ["<정해진 것 한 줄>", …], latest: "<사용자 최신 지적 원문>",
@@ -147,10 +154,14 @@
147
154
  ```
148
155
 
149
156
  `sources` 는 문서마다 달라서 스킬에 경로를 적지 않는다. `state` 를 주면 여덟째 관점이 켜진다.
157
+ `text` 가 없으면 워크플로가 멈춘다. 「처음 읽는 사람」·「선형 읽기」 두 관점은 이 파일 하나만 받고(정해진 것·결정 장부·최신 지적·상태 표·내부 자료는 안 받는다)
158
+ CLAUDE.md 를 싣지 않는 Explore 유형으로 돈다 — 자동 메모리(MEMORY.md)까지 빠지는지는 첫 실행 전사로 확인하기 전이다. 나머지 관점은 위 인자를 그대로 받는다.
159
+ 판 갱신 검토(`edition-review.workflow.js`)와 선형 읽기 실측(`linear-read-test.workflow.js`)도 `args.text` 가 필수다 — 선형 읽기 실측은 `file` 을 더 받지 않는다.
150
160
 
151
161
  | 관점 | 보는 것 | 경계 |
152
162
  |---|---|---|
153
- | first-time 처음 읽는 사람 | 정의 없는 용어 · 앞 절 의존 · 한 낱말 두 값 · 긴 문단 · 산문 참조 번호 | — |
163
+ | first-time 처음 읽는 사람 | 정의 없는 용어 · 앞 절 의존 · 한 낱말 두 값 · 긴 문단 · 산문 참조 번호 · 문서가 붙인 이름(정의가 있어도 — class 이름) | 렌더본 텍스트만 · Explore 유형 · 처방은 원래 이름(뜻풀이·새 이름 아님) |
164
+ | linear 선형 읽기 | 렌더 순서대로 한 번 읽으며 멈추는 지점 전부(`jumps`) · 문서가 붙인 이름(class 이름) | 렌더본 텍스트만 · Explore 유형 · 「N절을 보라」 처방 금지 |
154
165
  | decider 결정권자 | 판단 요청이 3초에 읽히나(물음·두 길·기한) · 수치/링크/건수 어긋남 · 답정너 틀 · **할 일마다** 표지 `meta`·현황 줄·읽는 법 첫 물음에 서나(빠지면 severity 4) · 요약면 수치 칸끼리 겹치는 집합인가 | — |
155
166
  | visual 정보 디자이너 | 그림이면 한 번에 보일 곳 · 표 숫자를 되풀이하는 문단 | — |
156
167
  | source 원본 대조 | 고객이 누를 수 있는 원본(`source_url`·출처 줄 주소·쪽·본문 링크)과 인용의 일치 | 앱 동작은 판정하지 않는다(facts 몫) — 다른 문서에 없다고 거짓이라 하지 않는다 |
@@ -160,24 +171,30 @@
160
171
  | state 상태 대조(`state` 있을 때) | 「반영·적용·고침·보이지 않음·빠짐」 같은 완료형 문장마다 상태 표의 확인 수준(코드·시험판·실기기·운영) | — |
161
172
 
162
173
  단계.
163
- 1. **Read** — 관점마다 발견 8~14개. 발견마다 `where · problem · severity · class`(사실틀림|구조|읽기|시각|묻기) `· evidence`(연 것·잰 것, 짐작이면 「추정 — 」) `· rewrite · visual`. 재서 통과한 것은 `passed[]` 에 둔다.
164
- 2. **Verify** — severity ≥ 3 가운데 사실틀림 먼저, 그다음 severity 순으로 최대 12건. 같은 순위 안에서는 **관점마다 돌아가며** 뽑는다(뒤 관점이 상한 밖으로 밀리지 않게). 발견마다 반박 에이전트가 원본을 직접 열어
165
- `verdict`(참|부분|거짓|미확인)·`finding_basis`(확인|추정)·`touches_locked`·`noise_kind`(없음|제작|날짜경로|판이력)를 판정한다.
174
+ 1. **Read** — 관점마다 발견 8~14개(선형 읽기는 남김없이). 발견마다 `where · problem · severity · class`(사실틀림|구조|읽기|이름|시각|묻기) `· evidence`(연 것·잰 것, 짐작이면 「추정 — 」) `· rewrite · visual`. 재서 통과한 것은 `passed[]` 에 둔다.
175
+ 2. **Verify** — severity ≥ 3 가운데 사실틀림 먼저, 그다음 severity 순으로 최대 12건 — **읽기·구조 발견에 4칸을 먼저 뗀다**(사실 틀림 가중 때문에 12칸이 다 차 읽기 발견이 늘 검증 밖이었다). 같은 순위 안에서는 **관점마다 돌아가며** 뽑는다(뒤 관점이 상한 밖으로 밀리지 않게). 발견마다 반박 에이전트가 원본을 직접 열어
176
+ `verdict`(진단: 참|부분|거짓|미확인 — 거짓은 반증을 열었을 때만, 확신이 없으면 미확인)·`finding_basis`(확인|추정)·`touches_locked`·`noise_kind`(없음|제작|날짜경로|판이력)·`rx_fit`(처방 적합: 맞음|다시)·`rx_why` 를 판정한다.
177
+ 진단과 처방은 따로다 — 처방이 틀려도 주장이 맞으면 진단은 참이다. class 이름은 「독자가 문서 밖(자기 화면·원본 문서·공급사 공식 명칭)에서 본 글자인가」로 판정하고, 문서 안의 정의·캡션·용어표는 반증이 아니다.
166
178
  원본 위치 한 구절이 빠진 것은 노이즈가 아니다(SKILL 0.5단계 5a). severity < 3·상한 초과·검증 실패는 반영하지 않고 `raw.unverified` 로 간다.
167
- 3. **JS 거름**(결정적) — 거짓 · 정해진 것을 되돌림 · 노이즈 처방 · 근거가 추정뿐 → `dropped[]`(사유 포함, 사람이 되살릴 수 있게). 묻기 → `questions[]`. 사실틀림은 **참·부분**일 때만 독립 항목(미확인이면 합치는 쪽으로 가 「(미확인)」이 붙는다).
168
- 버림이 0 이면 log 에 「버림 0 — 표본 3건 재반박 권함」.
179
+ 3. **JS 거름**(결정적) — **진단 거짓만** → `dropped[]`(사유 포함, 사람이 되살릴 수 있게). 정해진 것을 되돌림 · 노이즈 처방 · 규칙에 걸린 처방(포인터·새 이름 짓기)은 발견을 남기고 `rx` 에 「처방 다시 — 까닭」을 단다. 근거가 추정뿐인지는 `verify.finding_basis` 에 남는다.
180
+ 묻기 → `questions[]`. 사실틀림은 **참·부분**일 때만 독립 항목(미확인이면 합치는 쪽으로 가 「(미확인)」이 붙는다). 버림이 0 이면 log 에 「버림 0 — 표본 3건 재반박 권함」.
169
181
  4. **Merge** — 나머지를 같은 자리끼리 합쳐 severity 합산 상위 10. 비트맵 예산을 지키고, 더하기 처방과 structure 의 빼기 처방이 부딪히면 빼기가 이긴다.
182
+ `rx` 가 달린 발견은 규칙에 맞는 처방을 새로 적는다(이름 발견은 원래 이름으로 — 새 이름·뜻풀이 금지). 선형 읽기 뜀과 이름 발견은 상위 10 과 별개로 전부 돌아간다.
170
183
 
171
- 돌아오는 것: `{ merged: { findings[], overall }, questions[], passed[], dropped[], raw: { reads, verdicts, unverified } }`.
184
+ 돌아오는 것: `{ head?, failed?, merged: { findings[](… · rx · verdicts), overall }, questions[], passed[], dropped[], jumps[], names[], raw: { reads, verdicts, unverified } }`.
172
185
  `merged.findings` 앞에는 **참·부분으로 판정된** 사실 틀림이 합치지 않은 독립 항목으로 서고 개수 제한 밖이다. 못 연 도판이 있으면 `overall` 머리 줄이 「⚠ 도판 N장 미열람(id…)」 — 그 도판은 사람이 연다.
186
+ 검증이 1건이라도 실패하거나 관점이 결과를 못 내면 `head` 「검토 미완 — 검증 N건 실패」(관점 실패는 이어 적는다)와 `failed: true` 가 붙고 `overall` 첫 줄도 같다 — 실패를 「발견 0」으로 읽지 않고 검토를 다시 돌린다.
187
+ 통과 기준(SKILL 체크리스트 7단계 독자 검토 행): `jumps` 가운데 심각도 3 이상 0건 · `names` 0건 — 못 없앤 것은 까닭을 핸드오프에.
173
188
 
174
- **Verify 를 통과한 발견만 반영한다 — 검토자 주장도 틀린다.** 정해진 것을 되돌리거나 제작 방식·결정 날짜·판 이력을 더하라는 처방은 받지 않는다.
189
+ **Verify 를 통과한 발견만 반영한다 — 검토자 주장도 틀린다.** 정해진 것을 되돌리거나 제작 방식·결정 날짜·판 이력을 더하라는 처방은 받지 않는다 — 그런 처방이 달린 발견은 버리지 않고 `rx` 로 처방만 다시 쓴다.
175
190
  반영 순서는 사실 틀림 → 구조 발견(PART·절 합치기·빼기) → 나머지.
176
191
 
177
- 경위 셋. 고객사 검수 보고(2026-09-08)에서 이 검토가 용어 충돌·수치 불일치·참조 오류·반올림 설명 오류를 잡았다 — 작성자는 못 본 것들이다.
192
+ 경위 넷. 고객사 검수 보고(2026-09-08)에서 이 검토가 용어 충돌·수치 불일치·참조 오류·반올림 설명 오류를 잡았다 — 작성자는 못 본 것들이다.
178
193
  구조 관점은 2026-09-12 — 네 관점 발견 55개가 「경과 / 원인」 두 PART 의 겹침을 한 건도 짚지 못했고, 더하기 처방을 반영하자 겹침이 커졌다.
179
194
  도판·사실 대조 관점과 Verify 는 2026-09-14 — 캡션만 읽은 검토가 틀 대칭 결함을 0건 짚었고, 검토자의 틀린 주장·정해진 것 되돌리기·노이즈 처방이
180
195
  거르지 않은 채 작성자에게 올라갔다.
196
+ 렌더본 텍스트 입력·이름 물음·진단과 처방 분리·실패 머리는 2026-09-26 — 두 독자 관점이 결정 장부·핸드오프를 받거나 스스로 열어 뜻을 메웠고,
197
+ 문서가 정의한 조어는 「정의 있음」으로 통과했고, 진단이 참인 발견이 처방 사유 하나로 버려졌다(경위: `history.md` §17·§18).
181
198
 
182
199
  ## 8. 실물 확인 — dry_run 경고 0 이 목표, 그 다음은 눈
183
200