2026-08-15 · Step 0 산출. 이 문서가 10편 전부의 단일 규격 원천(SSOT)이다.
템플릿(00-*.md)은 이 규격의 빈 서식,manuscript_gate.py는 이 규격의 기계 검사다.
세 문서가 모순되면 이 문서가 우선한다.
1. 편(episode)의 정의
- 한 편 = 원고 파일 1개 = 질문 1개 + 답 1개.
- 편은 독립적으로 완결된다. 이전 편을 읽지 않아도 이해돼야 한다.
- 10편은 하나의 아크(매니페스토 → 제도 → 스토리 → 기술)로 이어진다.
- 한 편은 두 곳에 동시에 발행된다(페어): 티스토리 글 + GitHub Pages 페이지.
2. 원고 위치 & 파일명 규약
helana_log/docs/care-daemon/
├── _templates/ # SPEC.md + 템플릿 4종 (여기)
├── manifesto/01-*.md # 01 매니페스토
├── track/02-*.md ... # 02~04 트랙 (DW·DC·BL)
├── dialogue/05-*.md # 05 대화록
└── solution/06-*.md ... # 06~10 솔루션 (아키텍처·배터리·위치·원격·무전기)
- 파일명 =
{NN}-{slug}.md(NN = 두 자리 편 번호, slug = 영어 소문자·하이픈). docs/tracks/·docs/dialogue/·docs/solutions/(기존)은 “날것 메모” — 발행 원고가 아니다.
발행 원고는 전부docs/care-daemon/아래 두고, 기존 메모는sources:로만 인용한다.
(이유: 날것 메모는 미정제·개인정보 위험, 발행 원고는 게이트를 통과한 정제본. 섞지 않는다.)
3. Frontmatter (필수·기계 검사 대상)
원고 최상단, --- 로 감싼 YAML. 모든 필드는 문자열로 쓰되 category_id·interactive는 아래 형식을 따른다.
---
id: "06" # 편 번호 01~10 (두 자리)
type: solution # manifesto | track | dialogue | solution
title: "돌봄 데몬 아키텍처 — 15분마다 도는 심장"
question: "돌봄 데몬은 어떤 구조로 돌아가는가" # 이 편의 유일한 질문
answer: "crontab 15분 주기로 수집→분석→보고 3단을 도는 무상태 루프" # 한 문장 답
category: "솔루션 — 돌봄 데몬" # 티스토리 카테고리 전체 이름 (트리와 일치)
category_id: 1307308 # 티스토리 카테고리 id (아래 표 참조, 정수)
track: "" # track·dialogue 전용: DW | DC | BL | CROSS (그 외 빈 문자열)
sources: # 실물 원천 (품질기준 #2). "레포:경로" 목록.
- helena_phone:care/care-daemon.sh
- helena_phone:care/care.conf
interactive: # 이 편에서 쓰는 care 블록 id 목록 (없으면 빈 목록)
- flow-daemon-arch
date: "2026-08-15"
민감정보: "없음" # "없음" | "가명 처리함" | 그 외 명시
---
category_id 고정 맵 (카테고리 트리 실측값, 2026-08-15)
| 편 | 카테고리 | id |
|---|---|---|
| 01 | 매니페스토 — 기술로 돌보는 법 | 1307301 |
| 02 | DW — 장애·정신건강 복지 | 1307305 |
| 03 | DC — 치매·노인 돌봄 | 1307306 |
| 04 | BL — 기초생활 보장 | 1307307 |
| 05 | 대화록 — 하루 스토리 | 1307303 |
| 06 | 아키텍처 | 1307308 |
| 07 | 배터리·온도 | 1307309 |
| 08 | 위치·GPS | 1307310 |
| 09 | 원격 돌봄망 | 1307311 |
| 10 | 보고 무전기 | 1307312 |
4. 본문 섹션 구조 (타입별)
4-1. manifesto (01)
## 1. 선언 → ## 2. 왜 "데몬"인가 → ## 3. 10편 지도 (아래 지도 표) → ## 4. 읽는 법
4-2. track (02~04)
## 1. 가정 맥락 → ## 2. 자주 비는 틈 → ## 3. 개선 방향 → ## 4. 확인 창구
확인 창구(필수): “어디서·언제·누구에게 확인하라”는 3줄. 법령·의료를 단정하지 않는다.
4-3. dialogue (05)
## 1. 상황 (Fact) → ## 2. 느낀 것 (Feel) → ## 3. 빈틈 (Gap) → ## 4. 솔루션 (Fix) → ## 5. 다음 (Next)
METHOD.md의 Scene/Feel/Way/Next 계승. 단, 발행본은 Gap/Fix 를 명시해 “돌봄 데몬과의 연결”을 드러낸다.
4-4. solution (06~10)
## 1. 질문 → ## 2. 원리 → ## 3. 실물 (코드·설정) → ## 4. 임계값 → ## 5. 한계·확인 창구
## 3. 실물은 실제 스크립트 값을 인용(care/care-daemon.sh 등). 추상 설명 금지.
5. 케어 블록 — 인터랙티브·인포그래픽 선언 규약
인포그래픽/인터랙티브는 본문 안에 fenced code block 으로 선언한다. info-string = care, 속성 = type·id, 본문 = YAML 페이로드.
```care type="threshold-table" id="battery-thresholds"
title: 배터리·온도 임계값
rows:
- { label: "배터리 저전압", threshold: "15%", action: "즉시 🔴 경고", level: urgent }
- { label: "배터리 급감", threshold: "30% / 60분", action: "이상 보고", level: warning }
- { label: "온도 과열", threshold: "45°C", action: "과열 경고", level: warning }
```
렌더 계약 (페어)
| 대상 | 렌더 |
|---|---|
| GitHub Pages | 블록을 풀 인터랙티브 JS/CSS/SVG 로 렌더 (외부 CDN 금지, 자체 내장) |
| 티스토리 | 블록을 정적 HTML/CSS(표·타임라인·체크리스트) 로 렌더; demo는 코드+설명만 |
티스토리 본문도 HTML 모드를 허용하지만, JS 데모는 Pages 전용으로 간주한다.
티스토리엔 정적 인포그래픽(표/타임라인/체크리스트/콜아웃)만 실어 두 판본이 같은 정보를 담는다.
v1 블록 레지스트리 (7종)
| type | 페이로드 필수 키 | 용도 |
|---|---|---|
callout |
level, text |
강조 박스 (info/warn/check/danger) |
threshold-table |
rows[{label,threshold,action,level}] |
임계값 표 (배터리·온도·GPS) |
bar-chart |
bars[{label,value}] |
수평 막대 (급감 시각화) |
timeline |
events[{time,label,note?}] |
하루/모듈 타임라인 (DC·대화록) |
flow |
nodes[{id,label,kind?}], edges[{from,to,label?}] |
아키텍처 흐름도 (06·09) |
checklist |
items[] |
체크리스트 (트랙 갱신·안전 체크) |
demo |
desc, code |
JS 데모 (배터리 시뮬레이터 등, Pages 전용) |
id는 원고 내 유일해야 하고, frontmatterinteractive목록과 정확히 일치해야 한다.- 페이로드가 레지스트리 필수 키를 빠뜨리면 게이트가 FAIL 처리한다.
6. 품질 게이트 5규칙 → 기계 검사 매핑
| # | 품질 기준 | 게이트 검사 |
|---|---|---|
| 1 | 한 편 = 하나의 질문 + 하나의 답 | question·answer 존재, answer 한 문장(마침표 ≤1) |
| 2 | 실물 원천 인용 | sources 비어있지 않음 + 각 경로 파일 존재 |
| 3 | 비단정 표현 | “확인 창구” 섹션 존재 + 단정 마커 휴리스틱(WARN) |
| 4 | 민감정보 차단 | 민감정보 필드 + 본문 패턴 스캔(주민번호·계좌·전화·토큰·GPS 실좌표) |
| 5 | 페어 동기화 | 원고 1개 → 두 렌더 대상이 같은 원고에서 파생(발행 단계에서 검증) |
게이트 통과 규칙: FAIL(구조·사실·민감정보) = 발행 차단. WARN(스타일 휴리스틱) = 통과 가능, 기록.
7. 품질 기준 (사람이 지킬 것)
- 실물 인용 — 임계값(15%·45°C·500m 등)은 스크립트 실제 값을 쓴다. 근사 금지.
- 비단정 — 법령·의료는 “확인 창구 / 확인일”로 돌린다.
- 민감정보 차단 — 실 GPS·정확한 주소·진료 원문·토큰 절대 금지 (헌법: 돌봄 데이터 공개 금지).
- Blame보다 Way — 사람 탓이 아니라 살아낸 방식.
- 밀도 — 양보다 밀도. 한 편에 쏟는 것이 아니라 한 질문을 정확히.
기계 검사 실행: python3 scripts/manuscript_gate.py <원고경로> (helena_phone 루트에서).