지식을 제품처럼 출고하는 법
숙지다른 캡스톤과 같은 기조입니다: 빈 폴더에서 Claude Code와 함께 설계하고 미션 단위로 빌드합니다. 다른 점이 하나 있습니다. 이번 산출물은 서비스가 아니라 지식 자산이고, 적은 코드로 콘텐츠의 품질과 신선도를 구조적으로 강제하는 것이 미션입니다.
후보 항목 (뉴스, 논문, 릴리스 노트, 데모)
│
▼
THE FILTER (4기준 중 2개 이상) ──미달──▶ docs/radar.md (한 줄 대기열)
│ 통과
▼
필러 페이지 5장 (성숙도 라벨 + 다음 액션 + front matter 메타데이터)
│
▼
출고 게이트 ship.sh
[1/3] check_freshness.py [2/3] 성숙도 라벨 lint [3/3] mkdocs build --strict
│ 전부 통과
▼
site/ (정적 사이트, 어디에나 배포 가능)
지키는 규칙은 세 줄입니다.
| 규칙 | 의미 |
|---|---|
| 검증 없이 본문 없음 | THE FILTER 미달 후보는 radar 대기열에 한 줄로만 남는다 |
| 모든 항목은 다음 액션으로 끝난다 | 개념 설명으로 끝나는 항목은 미완성이다 |
| 낡음은 게이트가 감시한다 | 모든 페이지에 owner, updated, volatility를 붙이고 기한을 스크립트로 판정한다 |
이 캡스톤을 마치면 다음 네 가지를 설명할 수 있고, 다시 만들 수 있습니다.
| 목표 | 검증되는 순간 |
|---|---|
| 정보 더미를 신호로 거르는 포함 기준(THE FILTER)을 설계하는 법 | M1에서 4개 기준을 내 도메인의 언어로 확정할 때 |
| 마스터 프롬프트 하나로 페이지를 규격대로 찍어내는 법 | M2에서 다섯 페이지가 같은 골격(L0/Top3/L1 표)으로 나올 때 |
| 메타데이터로 문서의 낡음을 감시하는 법 | M3에서 과거 날짜 페이지가 REVIEW NEEDED로 잡힐 때 |
| 품질 규율을 스크립트 게이트로 강제하는 법 | M4에서 불량 페이지가 출고를 막는 것을 관측할 때 |
사전 준비, 도구와 원작 견학
10분이 캡스톤은 API 키가 필요 없습니다. Python 가상환경과 MkDocs만 준비하면 끝입니다.
mkdir -p ~/capstone/capstone-7 && cd ~/capstone/capstone-7
python3 -m venv .venv && source .venv/bin/activate
pip -q install mkdocs-material pytest
mkdocs --version
mkdocs, version 1.6.1 from .../capstone-7/.venv/... (Python 3.9)
cd ~/capstone/capstone-7 && source .venv/bin/activate.
mkdocs: command not found가 보이면 십중팔구 활성화를 빼먹은 것입니다.
comeddy.github.io/pai-playbook을 열고 세 가지만 관찰하세요. 오늘 전부 직접 만들 것들입니다.
| 관찰 포인트 | 어디서 |
|---|---|
| 항목마다 붙은 성숙도 라벨 🟢🟡🔵⚪ | 아무 필러 페이지의 표 |
| 본문에 못 들어온 후보들의 대기열 | Radar 페이지 |
| 페이지마다 다른 리뷰 주기(volatility) | 페이지 하단 메타데이터 |
도메인 선정과 마스터 프롬프트
25분플레이북의 헌법을 만듭니다: 도메인, 독자, 필러 5개, 그리고 THE FILTER 4기준.
이 미션의 바탕 학습: Ch1의 세션 운용과 Capstone Setup의 superpowers 워크플로.
세 가지가 겹치는 분야가 정답입니다: ① 내가 실제로 질문받는 분야 ② 후보 항목이 20개 이상 바로 떠오르는 분야 ③ 6개월이면 낡는 정보가 섞여 있는 분야. 마땅치 않으면 아래에서 하나를 가져가세요.
| 도메인 예시 | 필러가 될 만한 축 | 독자 예시 |
|---|---|---|
| GenAI 애플리케이션 보안 | 프롬프트 인젝션 방어, 데이터 유출 통제, 평가와 레드팀, 가드레일 운영, 규제 대응 | 보안 검토를 받는 개발팀 |
| Kubernetes 운영(EKS) | 업그레이드 전략, 오토스케일링, 비용 최적화, 관측성, 장애 대응 | 플랫폼 엔지니어 |
| 데이터 엔지니어링 | 수집 파이프라인, 테이블 포맷, 오케스트레이션, 품질 게이트, 거버넌스 | 분석 조직의 DE |
| 프론트엔드 성능 | Core Web Vitals, 번들링, 렌더링 전략, 이미지와 폰트, 계측 | 웹 서비스 프론트엔드 팀 |
원작에서 가져온 골격입니다. 《...》 부분만 내 도메인으로 채우면 됩니다.
cat > PROMPT.md << 'PSKEOF'
# 《도메인》 Playbook, Master 생성 프롬프트
> 목적: 《도메인》 정보 더미(블로그, 논문, 릴리스 노트, 데모)를 그대로 옮겨 담는 게 아니라,
> 신호를 거르고(signal filter), 실행 가능하게 만들고(actionable), 스스로 안 낡게(self-fresh) 만드는
> 참조 자산을 생성하기 위한 시스템 프롬프트.
> 사용법: 페이지 단위로 하나씩 생성하고 검토한 뒤 다음으로 진행한다. 한 번에 전체를 생성하지 않는다.
## 1. 역할과 미션
당신은 《도메인》 큐레이터다. 산출물은 《독자》가 질문을 받았을 때
5분 안에 방향, 근거, 다음 액션을 찾는 참조 자산이다. 뉴스 아카이브가 아니다.
세 가지 원칙을 어기면 산출물을 폐기한다:
1. 신호 > 노이즈: "새로 나왔다"는 이유만으로 포함하지 않는다. THE FILTER를 통과한 것만 담는다.
2. 실행 가능성: 모든 항목은 "그래서 무엇을 하면 되는가"로 끝나야 한다.
3. 자기 갱신성: 모든 페이지에 owner, updated, volatility 메타데이터를 붙인다.
## 2. 독자와 깊이 계층
독자는 《독자》. 성숙도가 제각각이므로 문서를 나누지 않고 깊이를 계층화한다:
- L0 (TL;DR): 1~2문장. 상단만 읽어도 방향을 잡는다.
- L1 (1페이지 요약): 핵심 개념 + 의사결정 기준 + 매핑 표.
- L2 (Deep-dive): 링크나 접기(collapse)로 분리한다.
## 3. 범위, 5개 필러 (IA 고정)
1. 《필러 1》
2. 《필러 2》
3. 《필러 3》
4. 《필러 4》
5. 《필러 5》
각 필러 상단에 "이 필러에서 가장 자주 받는 질문 Top 3"를 배치한다.
## 4. 포함 기준 (THE FILTER)
후보 항목은 아래 4개 중 최소 2개를 충족해야 본문에 들어간다. 미달이면 radar.md에 한 줄로만 기록:
- [ ] ⓐ 《검증 기준: production 또는 실사용에서 검증됨》
- [ ] ⓑ 《매핑 기준: 우리 스택/서비스와 구체적으로 연결 가능》
- [ ] ⓒ 《수요 기준: 실제로 질문받은 이력이 있음》
- [ ] ⓓ 《성숙 기준: GA이거나 명확한 GA 로드맵이 있음》
화려한 데모가 성숙한 역량을 가리는 경우가 많다. "인상적 데모"와 "배포 가능"을 분리 표기한다.
## 5. 성숙도 라벨 (모든 항목 필수)
🟢 GA / 🟡 Preview / 🔵 Research-only / ⚪ Hype(데모만)
## 6. 페이지 규격 (모든 필러 페이지 공통)
- 파일 첫머리에 front matter: owner, updated(YYYY-MM-DD), volatility(1m/3m/6m)
- 순서: L0 TL;DR → 자주 받는 질문 Top 3 → L1 표(항목, 성숙도, 다음 액션) → L2 접기
- 모든 항목 행에 성숙도 라벨과 "다음 액션" 한 줄이 있어야 완성이다
PSKEOF
claude
/superpowers:brainstorming PROMPT.md를 읽어라. 나와 함께 《...》 placeholder를 전부 채워
"내 기술분야 플레이북"의 마스터 프롬프트를 완성하자.
1) 먼저 내게 도메인과 독자를 물어라. 내 답을 그대로 쓰지 말고 더 좁고 구체적으로 다듬어 제안하라
2) 필러 5개: 상호배타적이고 도메인 전체를 덮게. 각 필러에 한 줄 정의를 붙여 내 확인을 받아라
3) THE FILTER 4기준(ⓐ검증 ⓑ매핑 ⓒ수요 ⓓ성숙)을 내 도메인의 언어로 다시 써라.
예: "production 검증"이 이 도메인에서 정확히 무엇을 뜻하는지
4) 성숙도 라벨 4종과 페이지 규격(섹션 6)은 그대로 유지하라
5) 확정되면 PROMPT.md를 덮어써 저장하라. 《》가 하나도 남지 않아야 완료다
결정이 필요하면 이 범위 안에서 최소한으로만 물어봐.
grep -c '《' PROMPT.md # 0이어야 완료
뼈대와 다섯 페이지
35분사이트 뼈대를 깔고, 마스터 프롬프트로 필러 페이지 5장을 같은 규격으로 찍어냅니다.
파일명은 규격입니다: 필러 페이지는 p1.md부터
p5.md, 대기열은 radar.md.
M3와 M4의 게이트 스크립트가 이 이름을 봅니다.
mkdir -p docs scripts tests
cat > mkdocs.yml << 'MKDEOF'
site_name: Playbook Foundry
theme:
name: material
language: ko
palette:
scheme: slate
primary: deep orange
features:
- navigation.sections
- content.code.copy
nav:
- 홈: index.md
- 필러:
- 필러 1: p1.md
- 필러 2: p2.md
- 필러 3: p3.md
- 필러 4: p4.md
- 필러 5: p5.md
- Radar 대기열: radar.md
MKDEOF
cat > docs/index.md << 'IDXEOF'
---
owner: me
updated: 2026-08-09
volatility: 6m
---
# 이 플레이북을 읽는 법
질문을 받았을 때 5분 안에 방향, 근거, 다음 액션을 찾는 참조 자산입니다. 뉴스 아카이브가 아닙니다.
## 이 사이트의 규칙
- 모든 항목은 THE FILTER(4개 기준 중 2개 이상)를 통과해야 본문에 들어옵니다.
- 미달 후보는 [Radar 대기열](radar.md)에 한 줄로만 기록됩니다.
- 성숙도 라벨: 🟢 GA / 🟡 Preview / 🔵 Research-only / ⚪ Hype(데모만)
- 모든 페이지는 owner, updated, volatility 메타데이터를 가지며 기한이 지나면 게이트가 경고합니다.
## 필러
| 필러 | 한 줄 소개 |
|---|---|
| [필러 1](p1.md) | (M2에서 채웁니다) |
| [필러 2](p2.md) | (M2에서 채웁니다) |
| [필러 3](p3.md) | (M2에서 채웁니다) |
| [필러 4](p4.md) | (M2에서 채웁니다) |
| [필러 5](p5.md) | (M2에서 채웁니다) |
IDXEOF
원작 마스터 프롬프트의 사용법 그대로입니다: 한 번에 전체를 생성하지 않고, 페이지 단위로 생성하고 검토합니다. LLM 콘텐츠 파이프라인의 기본 리듬입니다.
PROMPT.md를 읽고 그 규격을 시스템 지침으로 삼아라. 필러 페이지를 생성한다.
1) docs/p1.md부터 docs/p5.md까지 다섯 장, mkdocs.yml nav 순서대로 한 장씩:
내가 "다음"이라고 하면 다음 페이지로 넘어간다. 각 장의 규격(PROMPT.md 섹션 6):
- 첫머리 front matter: owner는 내 이름, updated는 오늘(YYYY-MM-DD),
volatility는 페이지 성격에 맞게 1m/3m/6m 중 택일하고 이유를 한 줄 말하라
- L0 TL;DR(2문장 이내) → 자주 받는 질문 Top 3 → L1 표(항목/성숙도/다음 액션, 4~6행)
- 성숙도는 반드시 🟢 GA / 🟡 Preview / 🔵 Research-only / ⚪ Hype 중 하나
- L2 심화는 details 태그 접기로 1~2개만
2) docs/radar.md: front matter(volatility 1m) + 표 헤더(후보/판정/근거)만, 행은 M5에서 채운다
3) 다섯 장이 끝나면 mkdocs.yml nav의 "필러 n" 라벨과 index.md의 필러 표를 실제 이름으로 갱신하라
사실 확신이 없는 항목은 지어내지 말고 성숙도를 ⚪로 적고 "검증 필요"를 다음 액션에 남겨라.
mkdocs build --strict && mkdocs serve
INFO - Documentation built in 0.42 seconds
INFO - [15:30:00] Serving on http://127.0.0.1:8000/
브라우저에서 http://127.0.0.1:8000을 엽니다.
좌측 내비게이션에 필러 5개와 Radar 대기열이 보이면 성공입니다. 확인 후 Ctrl+C로 serve를 멈추세요.
신선도 게이트, 테스트 먼저
30분모든 페이지의 updated + volatility로 리뷰 기한을 판정하는
스크립트를 TDD로 만듭니다. 스펙은 테스트가 말합니다.
이 미션의 바탕 학습: Ch2의 superpowers:test-driven-development.
테스트 파일이 곧 요구사항 문서입니다. 아직 구현이 없으니 실패해야 정상입니다.
cat > tests/test_freshness.py << 'TSTEOF'
"""신선도 게이트 스펙. scripts/check_freshness.py가 이 테스트를 전부 통과해야 M3 완료.
실행: .venv/bin/python -m pytest tests/ -q"""
import datetime
import importlib.util
import pathlib
_spec = importlib.util.spec_from_file_location(
"check_freshness",
pathlib.Path(__file__).resolve().parents[1] / "scripts" / "check_freshness.py")
assert _spec is not None and _spec.loader is not None
cf = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(cf)
TODAY = datetime.date(2026, 8, 9)
FRESH = """---
owner: me
updated: 2026-08-01
volatility: 3m
---
# 최근 페이지
"""
STALE = """---
owner: me
updated: 2026-01-05
volatility: 1m
---
# 오래된 페이지
"""
NO_META = """# 메타데이터가 없는 페이지
본문만 있다.
"""
def test_parse_meta_reads_front_matter():
meta = cf.parse_meta(FRESH)
assert meta["owner"] == "me"
assert meta["updated"] == "2026-08-01"
assert meta["volatility"] == "3m"
def test_parse_meta_returns_none_without_front_matter():
assert cf.parse_meta(NO_META) is None
def test_classify_fresh_page_is_ok():
assert cf.classify(cf.parse_meta(FRESH), TODAY) == "ok"
def test_classify_overdue_page_needs_review():
assert cf.classify(cf.parse_meta(STALE), TODAY) == "review"
def test_classify_missing_meta():
assert cf.classify(None, TODAY) == "missing"
def test_scan_exit_code(tmp_path):
docs = tmp_path / "docs"
docs.mkdir()
(docs / "a.md").write_text(FRESH)
(docs / "b.md").write_text(STALE)
assert cf.scan(docs, TODAY) == 0 # review는 경고일 뿐 통과
(docs / "c.md").write_text(NO_META)
assert cf.scan(docs, TODAY) == 2 # 메타데이터 누락은 차단
TSTEOF
.venv/bin/python -m pytest tests/ -q
ERROR tests/test_freshness.py - FileNotFoundError: [Errno 2] No such file or directory:
'.../capstone-7/scripts/check_freshness.py'.
/superpowers:test-driven-development tests/test_freshness.py를 읽어라. 이 테스트 6개를 전부
통과하는 scripts/check_freshness.py를 구현하라.
1) 표준 라이브러리만 사용. 함수는 테스트가 부르는 그대로: parse_meta(text), classify(meta, today),
scan(docs_dir, today)
2) volatility 기한: 1m=30일, 3m=90일, 6m=180일. updated에서 기한을 넘기면 "review"
3) scan은 페이지별 판정 표를 출력하고 exit code를 돌려준다:
메타데이터 누락이 하나라도 있으면 2, 아니면 0 (review는 경고일 뿐 통과다)
4) __main__에서는 docs/를 스캔해 sys.exit로 끝낸다
5) 구현 후 .venv/bin/python -m pytest tests/ -q 로 6 passed를 보여라
...... [100%]
6 passed in 0.01s
sed -i 's/^updated: .*/updated: 2026-01-05/' docs/p1.md
python3 scripts/check_freshness.py
sed -i "s/^updated: .*/updated: $(date +%F)/" docs/p1.md
python3 scripts/check_freshness.py
index.md OK
p1.md REVIEW NEEDED
p2.md OK
막힐 때 열어보기, 완성본 scripts/check_freshness.py
"""페이지 신선도 점검. 사용: python3 scripts/check_freshness.py [docs디렉토리]
front matter의 updated + volatility(1m/3m/6m)로 리뷰 기한을 판정한다.
exit 0: 통과(review는 경고만), exit 2: 메타데이터 누락 페이지 존재."""
import datetime
import pathlib
import sys
VOLATILITY_DAYS = {"1m": 30, "3m": 90, "6m": 180}
def parse_meta(text):
"""front matter(--- ... ---)를 dict로. 없으면 None."""
lines = text.splitlines()
if not lines or lines[0].strip() != "---":
return None
meta = {}
for line in lines[1:]:
if line.strip() == "---":
return meta if meta else None
if ":" in line:
key, value = line.split(":", 1)
meta[key.strip()] = value.strip()
return None
def classify(meta, today):
"""'ok' / 'review'(기한 경과) / 'missing'(메타데이터 불량)"""
if not meta or "updated" not in meta or "volatility" not in meta:
return "missing"
days = VOLATILITY_DAYS.get(meta["volatility"])
if days is None:
return "missing"
try:
updated = datetime.date.fromisoformat(meta["updated"])
except ValueError:
return "missing"
return "review" if (today - updated).days > days else "ok"
def scan(docs_dir, today):
"""docs의 모든 .md를 판정해 표를 찍고 exit code를 돌려준다."""
rows = []
for page in sorted(pathlib.Path(docs_dir).glob("*.md")):
rows.append((page.name, classify(parse_meta(page.read_text()), today)))
width = max(len(name) for name, _ in rows) if rows else 10
mark = {"ok": "OK", "review": "REVIEW NEEDED", "missing": "MISSING META"}
for name, verdict in rows:
print(" %-*s %s" % (width, name, mark[verdict]))
if any(v == "missing" for _, v in rows):
return 2
return 0
if __name__ == "__main__":
target = sys.argv[1] if len(sys.argv) > 1 else "docs"
sys.exit(scan(target, datetime.date.today()))
출고 게이트, 규율의 자동화
20분신선도, 라벨 lint, strict 빌드를 한 줄로 묶습니다. 셋 중 하나라도 실패하면 출고가 없습니다.
cat > ship.sh << 'SHPEOF'
#!/usr/bin/env bash
# 출고 게이트: 셋 중 하나라도 실패하면 site/를 만들지 않는다.
set -euo pipefail
echo "[1/3] 신선도 메타데이터"
python3 scripts/check_freshness.py
echo "[2/3] 성숙도 라벨 lint"
missing=0
for f in docs/p*.md; do
if ! grep -q "🟢\|🟡\|🔵\|⚪" "$f"; then
echo " 성숙도 라벨 없음: $f"
missing=1
fi
done
test "$missing" -eq 0
echo "[3/3] mkdocs build --strict"
mkdocs build --strict
echo "GATE PASS, site/ 준비 완료"
SHPEOF
chmod +x ship.sh
./ship.sh
[1/3] 신선도 메타데이터
index.md OK
p1.md OK
...
[2/3] 성숙도 라벨 lint
[3/3] mkdocs build --strict
INFO - Documentation built in 0.41 seconds
GATE PASS, site/ 준비 완료
라벨도 메타데이터도 없는 불량 페이지를 심고 게이트에 태워 봅니다.
파일명이 p9.md인 이유: 라벨 lint가 docs/p*.md를 보기 때문입니다.
echo "# 라벨도 메타데이터도 없는 페이지" > docs/p9.md
./ship.sh; echo "exit=$?"
rm docs/p9.md
./ship.sh; echo "exit=$?"
[1/3] 신선도 메타데이터
p9.md MISSING META
exit=2
...
GATE PASS, site/ 준비 완료
exit=0
피날레, THE FILTER 실사격
15분진짜 후보들을 필터에 태웁니다. 떨어지는 후보가 있어야 필터입니다.
내 도메인에서 최근 1년 사이 화제가 된 후보 항목 6건을 뽑아라. 조건:
절반은 데모나 발표만 화려하고 실전 검증이 부족한 것으로 일부러 섞어라.
1) 후보 6건을 PROMPT.md의 THE FILTER 4기준(ⓐⓑⓒⓓ)으로 판정하는 표를 보여라:
후보 / ⓐ / ⓑ / ⓒ / ⓓ / 판정(승급 또는 대기). 2개 미만 충족이면 대기다
2) 대기 후보들은 docs/radar.md 표에 근거 한 줄과 함께 추가하라
3) 승급 후보 중 1건을 골라 해당 필러 페이지 L1 표에 추가하라:
성숙도 라벨과 다음 액션 필수, 그 페이지의 updated를 오늘로 갱신
4) 확신이 없는 판정은 그렇다고 말하고 보수적으로(대기 쪽으로) 판정하라
./ship.sh
GATE PASS가 뜨면 site/에 완성된 정적 사이트가 있습니다.
mkdocs serve로 마지막으로 열어 오늘 승급한 항목을 눈으로 확인하세요.
웹 공개, GitHub Pages
+15분출고 게이트를 통과한 사이트를 진짜 URL로 만듭니다. GitHub 계정과 gh CLI 인증이 있는 경우에만 진행하세요.
cd ~/capstone/capstone-7
printf '.venv/\nsite/\n' > .gitignore
git init -b main && git add -A && git commit -m "my playbook v1"
gh repo create my-playbook --public --source . --push
mkdocs gh-deploy --force
끝나면 https://<내 GitHub 계정>.github.io/my-playbook/에서
전 세계 어디서나 내 플레이북이 열립니다. 이 랩 문서 자체도 같은 방식으로 배포되어 있습니다.
컷라인과 트러블슈팅
참고시간이 부족하면 이 순서로 잘라내세요. 피날레(M5)는 남기는 것이 원칙입니다.
| 상황 | 컷라인 |
|---|---|
| 20분 부족 | M3 step 3(낡음 실험)과 M4 step 3(실패 주입)을 건너뛰고 통과 경로만 확인 |
| 40분 부족 | 위에 더해, 필러를 3장으로 축소(mkdocs.yml nav에서 p4/p5 제거, index.md 표도 3행으로) 후 M5 후보는 3건만 |
| 60분 부족 | 위에 더해, M3 구현을 솔루션 접기에서 복사해 배치하고 pytest 통과만 확인 |
막히면 여기부터.
| 증상 | 원인 | 처방 |
|---|---|---|
| mkdocs: command not found | 가상환경 비활성 | cd ~/capstone/capstone-7 && source .venv/bin/activate |
| strict 빌드 실패: nav 파일 없음 | 페이지 파일명이 규격과 다름 | docs/에 p1.md~p5.md, radar.md가 정확히 있는지 확인 |
| pytest가 ERROR로 시작 | M3 step 1 직후라면 정상(RED) | 구현 후에도 그렇다면 scripts/check_freshness.py 경로와 철자 확인 |
| 8000 포트가 이미 사용 중 | 이전 serve가 살아 있음 | mkdocs serve -a 127.0.0.1:8001로 우회 |
| PROMPT.md에 《》가 남음 | M1 세션이 일부만 채움 | M1 step 3 프롬프트를 다시 실행, grep -c '《' PROMPT.md가 0이어야 |
| 게이트 [2/3]에서 라벨 없음 | 페이지에 성숙도 이모지가 없음 | 해당 페이지 L1 표의 성숙도 열에 🟢🟡🔵⚪ 중 하나를 채움 |
미션 종료
필터가 품질을 만들고, 메타데이터가 신선도를 지키고, 게이트가 규율을 강제합니다. 지식을 제품처럼 출고하는 문법입니다.
| 가져가는 것 | 내용 |
|---|---|
| THE FILTER | 포함 기준을 먼저 못 박으면 콘텐츠 품질이 그때그때의 프롬프트가 아니라 구조에서 나온다 |
| 자기 갱신성 | owner, updated, volatility 세 줄이 문서를 "낡으면 스스로 알리는" 자산으로 바꾼다 |
| 출고 게이트 | 기억에 맡긴 규율은 무너진다, 스크립트가 강제하는 규율만 살아남는다 |
| 이식처 | 팀 위키, 온보딩 문서, 기술 레이더, 사내 표준 문서. 지식 자산이면 같은 골격이 통한다 |