# Jamie Journal Editor (Skill 46) — Code Version Design

> **Date**: 2026-03-29
> **Status**: Approved
> **Scope**: Create self-contained Claude Code version for skill 46-jamie-journal-editor

---

## Goal

Build a complete `code/` version of skill 46 that is fully self-contained (no references to `desktop/`), following the dual-platform skill structure. Includes a `journal_validator.py` CLI tool for automated content validation.

## Architecture

```
46-jamie-journal-editor/
├── code/
│   ├── CLAUDE.md                    # Self-contained directive
│   └── scripts/
│       └── journal_validator.py     # Combined validator (4 modules)
├── desktop/                         # Unchanged
└── README.md                        # Updated structure section
```

## Component 1: `code/CLAUDE.md`

Self-contained Claude Code directive incorporating all content currently split across `desktop/SKILL.md` and `desktop/references/`. Sections:

1. **Overview** — Role definition, channel info, partner skills
2. **Quick Start** — CLI usage for journal_validator.py
3. **Brand Voice** — Dr. Jung's 5 personality traits, honorific guide, hospital references, standard opening
4. **Analogy Dictionary** — Dr. Jung's signature metaphors (tree transplant, puppet strings, clean canvas, endotine button)
5. **Content Structure** — 5-step body (Problem → Cause → Solution → Advantages → Results), opening template, closing template
6. **Procedure Copy Reference** — Eye, forehead, anti-aging key expressions
7. **Numeric Expression Guide** — Surgery time, recovery, AS period, survival rates
8. **Medical Terminology Pattern** — Korean(漢字, English) format
9. **Image Placement** — 5 recommended positions
10. **Compliance Rules** — Prohibited expressions, required disclaimers, Do's & Don'ts
11. **Workflow** — Topic → Draft → Validate → Brand Audit → Publish

Word budget: ~1,200 words (under the 1,500-word directive limit).

## Component 2: `journal_validator.py`

Single-file CLI tool with four validator classes.

### 2A: StructureValidator

Checks journal article structure against the 5-step content pattern.

| Check | Method | Pass Criteria |
|-------|--------|---------------|
| Opening format | Regex for standard greeting | "안녕하세요. 제이미성형외과 정기호 원장입니다." present |
| 5-step body | Heading/keyword scan for each step | At least 4 of 5 steps detected |
| Medical term format | Regex for `한글(漢字, English)` pattern | Terms introduced with proper format |
| Closing CTA | Regex for CTA pattern | CTA pattern present in final section |
| Required disclaimer | String match | Disclaimer text present at bottom |

Detection strategy for 5-step body: scan for heading markers (##, **bold**) or keyword clusters:
- Problem: 고민, 증상, 불편, 걱정
- Cause: 원인, 발생, 때문에, 이유
- Solution: 시술, 수술, 방법, 제이미
- Advantages: 장점, 회복, 흉터, 통증, 마취
- Results: 결과, 효과, 기대, 개선

### 2B: ComplianceChecker

Adapted from skill 47's `compliance_checker.py`. Self-contained copy, not imported.

| Category | Example Patterns | Severity |
|----------|-----------------|----------|
| Effect guarantee | `100% 성공`, `반드시 효과`, `보장합니다` | Critical |
| Comparative superiority | `최고`, `1위`, `타 병원보다` | Critical |
| Safety guarantee | `부작용 없음`, `완전 안전` | Critical |
| Patient testimonial | `실제 환자 후기`, quoted testimonials | Critical |
| Exaggeration | `놀라운 변화`, `마법같은`, `기적적` | High |
| Missing disclaimer | Side-effect notice absent | High |
| Missing individual variation | "개인 차이" notice absent | Medium |

### 2C: SpellingChecker

Two-tier approach:

**Tier 1 (built-in, no dependencies):** Curated dictionary of common medical/cosmetic misspellings.

| Wrong | Correct | Category |
|-------|---------|----------|
| 쌍커풀 | 쌍꺼풀 | Eye surgery |
| 안겸하수 | 안검하수 | Eye surgery |
| 눈꺼플 | 눈꺼풀 | Eye surgery |
| 보톡스 | 보톡스 | Correct (common) |
| 히알루론산 | 히알루론산 | Correct (common) |
| 거상술 vs 거상 술 | 거상술 | Forehead |
| 내시경 vs 네시경 | 내시경 | Forehead |
| 스마스 vs SMAS | Both OK | Anti-aging |
| 엔도타인 vs 앤도타인 | 엔도타인 | Forehead |
| 리프팅 vs 리프팅 | 리프팅 | Anti-aging |

Dictionary stored as a Python dict within the file (~30-50 entries).

**Tier 2 (optional, requires `py-hanspell`):** Broader Korean spelling/spacing check via Naver spell checker API wrapper. Gracefully degrades if library not installed — prints a note suggesting `pip install py-hanspell` for fuller coverage.

### 2D: LinkRecommender

Scans article text for procedure name mentions and suggests internal linking opportunities.

**Procedure keyword map** (built-in dict):

| Keywords | Suggested Link Topic |
|----------|---------------------|
| 쌍꺼풀, 매몰법, 절개법 | Double eyelid surgery |
| 안검하수, 눈매교정 | Ptosis correction |
| 눈밑 지방, 다크서클 | Under-eye fat repositioning |
| 이마거상, 이마리프팅 | Endoscopic forehead lift |
| 눈썹거상, 눈썹리프팅 | Endoscopic brow lift |
| 눈썹밑, 상안검 | Sub-brow excision |
| 스마스, SMAS, 안면거상 | SMAS lifting |
| 자가지방, 지방이식 | Fat grafting |
| 하이푸, HIFU | HIFU lifting |

Logic: If article topic is X and mentions procedure Y (where Y != X), suggest "Consider adding an internal link to your [Y] article where you mention '[matched text]'."

Output: List of recommendations with matched text and line number.

### CLI Interface

```bash
# Full validation (all 4 checks)
python code/scripts/journal_validator.py --input article.md

# Specific checks
python code/scripts/journal_validator.py --input article.md --check structure,compliance
python code/scripts/journal_validator.py --input article.md --check spelling,links

# JSON report output
python code/scripts/journal_validator.py --input article.md --verbose --output report.json
```

**Available `--check` values:** `structure`, `compliance`, `spelling`, `links` (comma-separated, default: all)

**Exit codes:** 0 = pass, 1 = critical/high violations found, 2 = input error

**Report structure:**
```json
{
  "is_valid": false,
  "total_issues": 5,
  "issues_by_severity": {"critical": 1, "high": 2, "medium": 1, "info": 1},
  "structure": { ... },
  "compliance": { ... },
  "spelling": { ... },
  "link_recommendations": [ ... ],
  "summary": "..."
}
```

## Component 3: `README.md` Update

Update the structure section to reflect the new `code/scripts/` directory. No other changes.

## What Stays Unchanged

- `desktop/SKILL.md` — no changes
- `desktop/skill.yaml` — no changes
- `desktop/references/*` — no changes
- `desktop/jamie-journal-editor.skill` — not regenerated (Desktop packaging step)

## Dependencies

- **Required:** Python 3.8+ (stdlib only: `re`, `json`, `argparse`, `dataclasses`)
- **Optional:** `py-hanspell` for tier-2 spelling checks

## Testing

Manual validation: run the validator against a sample journal article draft to confirm all 4 checkers produce sensible output. No automated test suite needed for v1.
