From c6d61b0b37ab28bd854b30fc3bddaf1b83e87616 Mon Sep 17 00:00:00 2001
From: th-kim0823
Date: Fri, 15 May 2026 14:20:10 +0900
Subject: [PATCH] spec(p10): split Phase 1A into 1A-1 (framework) and 1A-2
(Rust chunker)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1A 가 들고 들어가는 *프레임워크 surface* (Citation `code` variant, SearchHit repo/code_lang, --media code / --code-lang / --repo filter, skip 정책, IngestReport 세분화, config 절, kebab-parse-code crate skeleton) 가 *언어 chunker 자체* 와 독립 검증 가능 — 1A-1 머지 후 기존 markdown corpus 의 wire 출력이 byte-level identical 한지 regression test 로 검증한 다음 1A-2 에서 Rust AST chunker 자체에 집중. binary version bump 트리거도 1A-2 로 미룸 (1A-1 은 wire additive minor + 사용자 surface 변경 없음).
Co-Authored-By: Claude Opus 4.7 (1M context)
---
.../2026-05-15-kebab-code-ingest-design.md | 37 +++++++++++--------
1 file changed, 21 insertions(+), 16 deletions(-)
diff --git a/docs/superpowers/specs/2026-05-15-kebab-code-ingest-design.md b/docs/superpowers/specs/2026-05-15-kebab-code-ingest-design.md
index 49b51ac..f074c9c 100644
--- a/docs/superpowers/specs/2026-05-15-kebab-code-ingest-design.md
+++ b/docs/superpowers/specs/2026-05-15-kebab-code-ingest-design.md
@@ -66,18 +66,24 @@
## 2. Phase 분할 + 마일스톤
-각 phase = 별도 task spec (`tasks/p10/p10-1A-code-rust-ast-ingest.md` 등) + 별도 PR. Phase 1A 가 *프레임워크 일체* (새 crate, 새 Citation variant, repo metadata, 새 filter, ignore 정책 전체) 를 들고 들어가는 가장 무거운 phase. 나머지는 *언어 / chunker 추가* 만.
+각 phase = 별도 task spec (`tasks/p10/p10-1a-1-code-ingest-framework.md` 등) + 별도 PR. **Phase 1A-1** 이 *프레임워크 일체* (새 crate skeleton, 새 Citation variant, repo metadata, 새 filter, ignore 정책 전체, skip 정책, IngestReport 세분화) 를 들고 들어가는 가장 무거운 phase. 1A-2 이후는 *언어 / chunker 추가* 만.
-| Phase | 내용 | 새 crate | 새 chunker_version | 마일스톤 |
-|-------|------|----------|--------------------|----------|
-| **1A** | Rust AST ingest + 프레임워크 일체 | `kebab-parse-code` 신설 | `code-rust-ast-v1` | kebab 자기 자신 dogfooding |
-| **1B** | Python + TS/JS AST ingest | (1A 의 crate 에 모듈 추가) | `code-python-ast-v1`, `code-ts-ast-v1`, `code-js-ast-v1` | 사내 ML 코드 + 웹 코드 검색 |
+| Phase | 내용 | 새 crate / 모듈 | 새 chunker_version | 마일스톤 |
+|-------|------|----------------|--------------------|----------|
+| **1A-1** | 프레임워크 일체 — Citation `code` variant, SearchHit `repo`/`code_lang`, 새 filter (`--media code` / `--code-lang` / `--repo`), ignore 통합 정책, skip 정책 (built-in/generated/size), IngestReport 세분화, config `[ingest.code]` 절. `kebab-parse-code` crate **skeleton** (lang/repo/skip 모듈만, 언어 parser 없음) | `kebab-parse-code` 신설 — infrastructure only, language parser 모듈 없음 | *없음* (chunker 추가 0) | wire schema additive minor commit. 기존 markdown corpus 무영향 검증 (regression test). 코드 ingest 아직 활성 안 됨 |
+| **1A-2** | Rust AST chunker 자체 + tree-sitter-rust 도입. Rust 파일 ingest 활성화 | 동일 crate 에 `rust.rs` parser 모듈 + `kebab-chunk/code_rust_ast_v1.rs` | `code-rust-ast-v1` | kebab 자기 자신 dogfooding 가능 |
+| **1B** | Python + TS/JS AST ingest | 동일 crate 에 `python.rs` / `typescript.rs` / `javascript.rs` 모듈 + chunker 추가 | `code-python-ast-v1`, `code-ts-ast-v1`, `code-js-ast-v1` | 사내 ML 코드 + 웹 코드 검색 |
| **1C** | Go + Java + Kotlin AST ingest | 동일 crate 에 모듈 추가 | `code-go-ast-v1`, `code-java-ast-v1`, `code-kotlin-ast-v1` | 사내 backend 검색 |
| **1D** | C + C++ AST ingest | 동일 crate 에 모듈 추가 | `code-c-ast-v1`, `code-cpp-ast-v1` | system code 검색 (마지막) |
| **2** | Tier 2 resource-aware: k8s manifest + Dockerfile + 일반 manifest | 동일 crate 에 모듈 추가 | `k8s-manifest-resource-v1`, `dockerfile-file-v1`, `manifest-file-v1` | k8s 운영 / DevOps 검색 |
| **3** | Tier 3 fallback: shell + 미지원 확장자 | 동일 crate 에 모듈 추가 | `code-text-paragraph-v1` | 잡 텍스트 fallback |
-Phase 1A 끝나는 시점에 binary version bump (예: `0.6` → `0.7`) — wire schema 의 Citation variant 추가가 additive 지만 RAG 사용자 도그푸드 surface 변경. 이후 phase 의 binary bump 는 각 phase 의 task spec 에서 결정.
+**Phase 1A 가 1A-1 / 1A-2 로 쪼개진 이유**: 1A 가 들고 들어가는 *프레임워크 surface* (Citation variant, SearchHit 필드, filter 3종, skip 정책, config 절, IngestReport 세분화, 새 crate) 가 *언어 chunker 자체* 와 독립적으로 검증 가능. 1A-1 머지 후 기존 markdown corpus 가 *byte-level identical* 한 출력을 내는지 regression test 로 검증 — 코드 ingest 가 활성화되지 않은 상태에서 wire schema 변경 안전성을 별도 확인. 1A-2 는 Rust chunker 자체에만 집중, dogfooding 가능 지점 = 1A-2 머지.
+
+**Binary version bump 트리거 정리**:
+- **1A-1 머지**: bump 없음. wire 의 additive minor 변경 (CLAUDE.md "wire 의 additive minor 변경 은 backward-compat 이라 본 트리거에 해당 안 됨" 적용). 코드 ingest 미활성 — 사용자 도그푸드 surface 변경 없음.
+- **1A-2 머지**: minor bump (예: `0.6` → `0.7`). 사용자 도그푸딩 가능 = bump 트리거.
+- 이후 phase (1B/1C/1D/2/3) 의 bump 여부는 각 phase 의 task spec 에서 결정 — wire / flag 추가 없으면 patch bump.
---
@@ -759,12 +765,10 @@ SQLite DDL 변경 없음 → V00X migration 불요. `documents.metadata_json`
### 10.4 Binary version bump
-Phase 1A 머지 후 minor bump (`0.6` → `0.7`). 이유:
-- wire schema additive minor 3개 동시 (citation / search_hit / ingest_report).
-- 새 CLI flag (`--media code`, `--code-lang`, `--repo`).
-- 도그푸드 surface 변경 (사용자가 코드 ingest 시작).
-
-이후 phase (1B/1C/1D/2/3) 의 bump 여부는 각 phase 의 task spec 에서 결정 — 새 wire field / flag 없으면 patch bump (`0.7.1` → `0.7.2`).
+[§2 Phase 분할 표 하단 "Binary version bump 트리거 정리"](#2-phase-분할--마일스톤) 참조. 요지:
+- **1A-1 머지** → bump 없음 (wire additive minor + 사용자 surface 변경 없음).
+- **1A-2 머지** → minor bump (`0.6` → `0.7`, 사용자 도그푸딩 시작).
+- 이후 phase 는 각 task spec 에서 결정 (wire / flag 추가 없으면 patch bump).
---
@@ -792,10 +796,11 @@ Phase 1A 머지 후 minor bump (`0.6` → `0.7`). 이유:
1. **이 spec 의 사용자 검토** — 빠진 결정 / 모순 / 추가 우려 확인.
2. 검토 통과 시 `tasks/p10/` 디렉토리 신설 + `tasks/p10/INDEX.md` 추가 + `tasks/INDEX.md` 에 phase 10 entry.
-3. **Phase 1A task spec 작성** — `tasks/p10/p10-1a-code-rust-ast-ingest.md`. 이 spec 이 `contract_sections` 로 `[§2.1, §2.2, §2.4, §2.5, §3.2, §3.6, §8, §11]` (frozen design 의 어느 섹션을 구현하는지) 인용.
-4. Frozen design doc (2026-04-27) 갱신을 *Phase 1A PR* 에 동봉 (이 spec 의 §10.1 표 그대로).
-5. writing-plans skill 로 Phase 1A 의 구현 계획 (작업 단위) 작성.
-6. Phase 1A 머지 후 kebab 자기 자신 dogfooding → 측정 → 다음 phase 진행 결정.
+3. **Phase 1A-1 task spec 작성** (먼저) — `tasks/p10/p10-1a-1-code-ingest-framework.md`. `contract_sections` 로 `[§2.1, §2.2, §2.4, §2 schema.v1, §3.6, §8, §11]` (chunker 추가 없음 — §3.2 chunker_version 갱신은 1A-2 와 함께).
+4. **Phase 1A-2 task spec 작성** (1A-1 머지 후) — `tasks/p10/p10-1a-2-rust-ast-chunker.md`. `contract_sections` 로 `[§2.1 (code variant 실 사용), §3.2 (code-rust-ast-v1 추가), §3.4 (Rust symbol path)]`.
+5. Frozen design doc (2026-04-27) 갱신을 *Phase 1A-1 PR* 에 동봉 (이 spec 의 §10.1 표 그대로, 단 §3.2 chunker_version 부분은 1A-2 에서).
+6. writing-plans skill 로 Phase 1A-1 의 구현 계획 (작업 단위) 작성.
+7. Phase 1A-1 머지 후 regression test 통과 확인 → Phase 1A-2 구현 계획 작성 → 머지 → kebab 자기 자신 dogfooding → 측정 → 다음 phase 진행 결정.
---