Skip to content

Commit 67c41f8

Browse files
DanMeonclaude
andcommitted
docs: v0.3.0 IR 확장 spec 추가 및 문서 관리 컨벤션 도입
변경사항: - v0.3.0 IR 확장 spec + 짝 페어 design research 신규 — 8 신규 블록 타입 (Picture / Formula / Footnote / Endnote / ListItem / Caption / Toc / Field) + Furniture 채움 + SchemaVersion 1.1 - docs/CONVENTIONS.md 신규 — 문서 관리 정책 SSOT (Living / Active / Draft / Frozen 4 분류, Status 헤더 형식, cross-link 단방향화, supersede 패턴) - 기존 14 spec 에 Status 헤더 일괄 부착 — 첫 헤더 직후 metadata 라인 (Status / GA 또는 Target / Last updated) - docs/roadmap/README.md 활성 spec 인덱스 SSOT 강화 — Status 컬럼 + Phase 인덱스 + 구현·검증 로그 인덱스 분리 - phase-2.md § v0.3.0 두 축의 연동 신규 (IR 확장 ↔ CLI 연동 SSOT) + § 미확정 이슈 placeholder 제거 - v0.3.0 cli.md / ir-expansion.md 의 spec ↔ spec 직접 cross-link 제거 — phase-2 경유로 단방향화 - CLAUDE.md § Documentation 갱신 — CONVENTIONS.md 위임 + 5 hard rules 인라인 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 5cd8490 commit 67c41f8

21 files changed

Lines changed: 1344 additions & 32 deletions

File tree

CLAUDE.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,14 @@ All rules from `~/.claude/CLAUDE.md` apply. This file adds only project-specific
7171
- Every release records the `external/rhwp` submodule commit hash in CHANGELOG
7272

7373
### Documentation
74-
- `docs/` convention: see `docs/roadmap/README.md` (4-axis structure, version-scoped subdirectories, stage splitting rules)
75-
- README.md only where an index is actually needed (currently `roadmap/README.md`)
74+
Authoritative policy is `docs/CONVENTIONS.md` — read it before any docs work. Active spec index SSOT is `docs/roadmap/README.md`.
75+
76+
Hard rules (auto-applied without further instruction):
77+
- Every per-version spec / ADR / impl-log / verification report carries a Status metadata line right after its first heading: `**Status**: <Active | Draft | Frozen | Superseded by [link]> · **GA**: vX.Y.Z` *or* `**Target**: vX.Y.Z` · `**Last updated**: YYYY-MM-DD`. Living docs (README, CHANGELOG, CLAUDE.md, CONVENTIONS itself) skip the Status line.
78+
- **Frozen spec body is immutable** — typo / broken-link fixes only. Decision changes go to a *new* spec; the old one's Status flips to `Superseded by [link]` (single-line edit).
79+
- **Spec ↔ spec direct cross-links are forbidden** even within the same `vX.Y.Z/` directory. Use `phase-N.md` § two-axis-integration sections (or `roadmap/README.md`) as the bridge. **Exception**: pair files `<topic>.md``<topic>-research.md` (the spec ↔ ADR pair) link directly.
80+
- **`phase-N.md` carries no concrete decisions / open issues** — those belong in `vX.Y.Z/*.md`. Phase docs hold intent, scope, and two-axis integration only.
81+
- New version `vX.Y.Z`: create `docs/roadmap/vX.Y.Z/<topic>.md` + `docs/design/vX.Y.Z/<topic>-research.md` (Status: Draft, Target: vX.Y.Z), then add a row to the active-spec index in `roadmap/README.md`. On GA: flip Status Draft → Frozen, write `implementation/vX.Y.Z/...` (Frozen on creation), refresh README index.
7682

7783
### CI / secrets
7884
- No secrets required. PyPI publish uses Trusted Publisher (OIDC) — no API token to manage

docs/CONVENTIONS.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# Documentation Conventions
2+
3+
본 프로젝트의 문서 관리 정책. **Spec-driven + immutable per-version** 패턴을 채택한다. 새 문서를 작성하거나 기존 문서를 수정하기 전 본 문서를 확인.
4+
5+
## 문서 수명 4 분류
6+
7+
| 분류 | 의미 | 갱신 정책 | 예시 |
8+
|---|---|---|---|
9+
| **Living** | 항상 최신 — 다른 문서의 위치 포인터 + 시간선 + 규칙 | 자유 갱신, 매 변경 시 손봐도 무방 | `docs/CONVENTIONS.md` (자체), `docs/roadmap/README.md`, `CHANGELOG.md`, `CLAUDE.md`, `README.md` |
10+
| **Active** | 현재 진행 중 — 의도/스코프 수준의 진화하는 문서 | 큰 변경만, in-place 갱신 OK | `docs/roadmap/phase-N.md`, `docs/design/pyo3-bindings.md` (cross-version reference) |
11+
| **Draft** | 작성 중인 spec — 해당 버전 GA 전까지 활발 갱신 | 버전 GA 전까지 자유 갱신, GA 후 Frozen 으로 전환 | `docs/roadmap/v0.3.0/*.md` (현재 v0.3.0 GA 전) |
12+
| **Frozen** | GA 완료된 spec / 완료된 stage / 완료된 검증 | **변경 금지** — 오타·링크 수정만 in-place 허용. 큰 변경은 새 spec + supersede | `docs/roadmap/v0.2.0/ir.md` (v0.2.0 GA 완료), `docs/implementation/v0.2.0/stages/*.md` |
13+
14+
`Frozen`[Rust RFC](https://rust-lang.github.io/rfcs/) / [Python PEP](https://peps.python.org/) 의 운영 모델. 결정의 historical record 가 보존되어 "왜 그렇게 설계됐는지" 가 명확해진다.
15+
16+
## Status 헤더 형식
17+
18+
`Living` 을 제외한 모든 spec 의 첫 헤더 직후에 metadata block 을 둔다:
19+
20+
```markdown
21+
# <문서 제목>
22+
23+
**Status**: <Active | Draft | Frozen | Superseded by [link]> · **GA**: <vX.Y.Z> 또는 **Target**: <vX.Y.Z> · **Last updated**: YYYY-MM-DD
24+
25+
<본문 시작>
26+
```
27+
28+
- **Status**: 현재 분류
29+
- **GA** (Frozen 일 때): 어느 버전에서 GA 됐는지. **Target** (Draft 일 때): 어느 버전을 향한 작업인지. Active 면 둘 다 생략 가능
30+
- **Last updated**: 본문에 의미 있는 변경이 있었던 날짜 (오타·링크 수정 제외)
31+
- 모든 spec 변경 시 `Last updated` 만큼은 갱신
32+
33+
`Living` 문서는 정의상 항상 최신이므로 Status 헤더 없음. 대신 README 같은 인덱스가 다른 문서들의 Status 를 노출.
34+
35+
## 디렉토리별 정책
36+
37+
```
38+
docs/
39+
├── CONVENTIONS.md Living — 본 문서. 정책 SSOT
40+
├── roadmap/
41+
│ ├── README.md Living — 활성 spec 인덱스
42+
│ ├── phase-{2,3,4}.md Active — Phase 의도/스코프 (구체 결정 미포함)
43+
│ └── v<X.Y.Z>/<topic>.md Draft → Frozen on GA — per-version spec
44+
├── design/
45+
│ ├── pyo3-bindings.md Active — 버전 무관 cross-version reference
46+
│ └── v<X.Y.Z>/<topic>-research.md Draft → Frozen on GA — ADR-style 결정 증거
47+
├── implementation/
48+
│ └── v<X.Y.Z>/... Frozen — 완료된 stage 작업 로그
49+
└── verification/
50+
└── v<X.Y.Z>/... Frozen — 완료된 검증 리포트
51+
```
52+
53+
### roadmap/
54+
55+
- `README.md` (Living) — 활성 spec 인덱스. 어느 spec 이 어느 버전을 향하는지의 SSOT
56+
- `phase-N.md` (Active) — Phase 의 의도/스코프만. **구체 결정/미결 이슈는 두지 않음** — 그것들은 `vX.Y.Z/*.md` 의 영역. Phase 의 대상 버전이 바뀌거나 phase boundary 가 이동할 때만 갱신
57+
- `vX.Y.Z/<topic>.md` (Draft → Frozen) — per-version spec. v0.2.0 의 `ir.md` 처럼 한 릴리스의 한 큰 주제 = 한 파일
58+
59+
### design/
60+
61+
- `pyo3-bindings.md` (Active) — 버전 무관 reference. PyO3 / abi3 / unsendable 같은 cross-version 제약을 모은 참조 문서
62+
- `vX.Y.Z/<topic>-research.md` (Draft → Frozen) — ADR-style 결정 증거. 결정 매트릭스 + 항목별 (팩트/검증자 반박/최종 결정/출처). 짝이 되는 roadmap spec 과 1:1 페어
63+
64+
### implementation/
65+
66+
- `vX.Y.Z/migration.md` 또는 `vX.Y.Z/stages/stage-N.md` (Frozen) — 작업 로그. 완료 즉시 Frozen. 산출물 / 검증 결과 / 이월 사항 기록
67+
- 작은 작업 (단일 세션·수일 규모) 은 단일 `migration.md`. 큰 작업 (여러 주, 의존성 추적 필요) 은 `stages/stage-N.md` 분할
68+
69+
### verification/
70+
71+
- `vX.Y.Z/<scope>-review.md` (Frozen) — 독립 검증 리포트. 검증 시점·검증자·판정 기록
72+
73+
## Cross-link 방향성 규칙
74+
75+
문서 간 의존성을 단방향화하여 "한 문서 변경이 다른 문서 갱신을 강제하는" 연쇄를 끊는다.
76+
77+
```
78+
Living ───→ Active ───→ Draft ───→ Frozen
79+
↑ ↑ ↑ ↑
80+
└──────────────┴─────────────┴─────────────┘
81+
(위로 거슬러 link 만 OK)
82+
```
83+
84+
- **Living → 모든 곳** OK (인덱스 역할)
85+
- **Active → Draft / Frozen** OK (Phase 가 spec 을 가리킴)
86+
- **Draft → Active / Living / Frozen** OK
87+
- **Frozen → 다른 곳** 가급적 자제 (Frozen 후에 새 cross-link 추가하면 본문 수정이 됨)
88+
89+
### Spec ↔ spec 직접 link 금지 (예외 1 종)
90+
91+
- **금지**: 같은 디렉토리 안의 spec 끼리 직접 link (예: `v0.3.0/cli.md``v0.3.0/ir-expansion.md`). 새 spec 추가 시 기존 spec 도 손봐야 하는 연쇄 발생
92+
- **대신**: `roadmap/README.md` 또는 `phase-N.md` 가 묶어서 노출
93+
- **예외**: **짝 페어**`roadmap/vX.Y.Z/<topic>.md``design/vX.Y.Z/<topic>-research.md` 는 1:1 짝 (spec ↔ ADR). 짝끼리는 직접 link 유지 (두 문서가 사실상 한 결정의 두 면)
94+
95+
## 새 spec 추가 절차
96+
97+
### v<X.Y.Z> 신설 시
98+
99+
1. 디렉토리 생성: `docs/roadmap/v<X.Y.Z>/`, `docs/design/v<X.Y.Z>/`
100+
2. spec 파일 작성 (Status: Draft, Target: vX.Y.Z, Last updated: 오늘)
101+
3. 짝이 되는 design research 파일 작성 (Status: Draft, Target: vX.Y.Z)
102+
4. `docs/roadmap/README.md` 의 인덱스 표에 행 추가
103+
5. 해당 phase 가 있다면 `phase-N.md` 의 § 대상 버전 / § 산하 spec 갱신 (Active 갱신은 자유)
104+
105+
### 버전 GA 후
106+
107+
1. 해당 vX.Y.Z 디렉토리 안의 spec 들 Status: Draft → Frozen, GA: vX.Y.Z 로 전환
108+
2. `Last updated` 를 GA 일자로
109+
3. `docs/roadmap/README.md` 인덱스 갱신 (Status 컬럼)
110+
4. `CHANGELOG.md` 의 해당 버전 섹션 마무리
111+
5. 구현 로그 작성 — `docs/implementation/v<X.Y.Z>/...` (작성 즉시 Frozen)
112+
113+
### Frozen 후 결정 변경이 필요한 경우
114+
115+
1. **새 spec 작성** — 기존 파일 수정 금지. 새 파일 (예: `docs/roadmap/v0.4.0/ir-correction.md`)
116+
2. **기존 Frozen spec 의 Status** 만 단일 라인 갱신: `Status: Superseded by [link to new spec]`
117+
3. 새 spec 본문에 § Supersedes 섹션 추가하여 무엇을 어떻게 바꾸는지 명시
118+
4. CHANGELOG 에 변경 사유 기록
119+
120+
오타·깨진 링크·외부 URL 변경 같은 비-의미 변경은 in-place 가능 (Last updated 갱신).
121+
122+
## 명명 규칙
123+
124+
- 파일명: kebab-case (`ir-expansion.md`, not `ir_expansion.md`)
125+
- 디렉토리: `v` prefix + SemVer (`v0.3.0/`, not `0.3.0/`)
126+
- ADR 파일: `<topic>-research.md` (roadmap spec `<topic>.md` 와 stem 일치)
127+
- stage 파일: `stage-<N>.md` (1-indexed)
128+
129+
## 본 문서의 갱신
130+
131+
CONVENTIONS.md 자체는 Living. 정책 변경 시 in-place 갱신. **** 본 문서의 변경은 모든 spec 작성에 영향을 주므로:
132+
133+
- 큰 변경 (예: Status 분류 추가/삭제) 시 PR 에 영향 받는 기존 문서 일괄 마이그레이션 포함
134+
- 작은 변경 (예: 명명 규칙 추가) 는 in-place + 신규 문서부터 적용, 기존은 점진 정리
135+
136+
## 참조
137+
138+
- Rust RFC 운영: <https://rust-lang.github.io/rfcs/>
139+
- Python PEP 절차: <https://peps.python.org/pep-0001/>
140+
- ADR 패턴 (Architecture Decision Records): <https://adr.github.io/>
141+
- Diátaxis 4-axis: <https://diataxis.fr/>
142+
- GitHub Spec Kit: <https://github.com/github/spec-kit>

docs/design/pyo3-bindings.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# PyO3 Python 바인딩 구현 가이드 (Phase 1)
22

3+
**Status**: Active · **Last updated**: 2026-04-23
4+
35
> **문서 목적**: rhwp를 PyPI 배포 가능한 Python 패키지로 만드는 작업의 기술 참조. 다른 Claude Code 세션이 이 문서를 기반으로 구현한다.
46
>
57
> **배경**: GitHub Issue [#227](https://github.com/edwardkim/rhwp/issues/227) 에서 시작. **사용자 Fork(`DanMeon/rhwp`)에서 독립 진행**하는 개인 패키지화 작업이다. 상류 리포(`edwardkim/rhwp`)에 PR 제출 여부는 별도 판단.

docs/design/v0.2.0/ir-design-research.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# v0.2.0 Document IR — 설계 의사결정 리서치 요약
22

3+
**Status**: Frozen · **GA**: v0.2.0 · **Last updated**: 2026-04-25
4+
35
[v0.2.0/ir.md](../../roadmap/v0.2.0/ir.md) 초안에 남아 있던 8개 미결 결정 사항 중 7개 (#6 "중첩 테이블 깊이 제한" 은 사용자 결정으로 스킵) 를 **수행자 + 검증자 2인 1조 × 7 팀 = 14 에이전트** 병렬 조사로 해결. 본 문서는 각 팀의 핵심 증거·수렴 지점·최종 결정을 기록한다. ir.md 본문의 결정 배경 참조용.
46

57
## 결정 매트릭스

docs/design/v0.3.0/cli-design-research.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# v0.3.0 `rhwp-py` CLI — 설계 의사결정 리서치 요약
22

3+
**Status**: Draft · **Target**: v0.3.0 · **Last updated**: 2026-04-26
4+
35
[v0.3.0/cli.md](../../roadmap/v0.3.0/cli.md) §결정 사항 중 외부 독자가 "왜?" 를 던질 만한 3건 (이름 선정 · 업스트림 overlap=0 정책 · 기본 출력 포맷) 의 업계 선례·대안·실패 시나리오를 기록한다. cli.md 본문이 최종 결정을 기술하고, 본 문서는 그 결정의 근거를 담는다.
46

57
## 결정 매트릭스

0 commit comments

Comments
 (0)