docs(fb-31): single-file / stdin ingest spec + implementation plan #110
Reference in New Issue
Block a user
Delete Branch "spec/p9-fb-31-single-file-stdin-ingest"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
요약
docs/superpowers/specs/2026-05-07-p9-fb-31-single-file-stdin-ingest-design.md—kebab ingest-file+kebab ingest-stdin+ MCP toolingest_file/ingest_stdinbrainstorm 산출물.docs/superpowers/plans/2026-05-07-p9-fb-31-single-file-stdin-ingest.md— 12 task TDD plan.핵심 결정 (spec)
<workspace.root>/_external/<blake3-12>.<ext>). deterministic 명명 → idempotent.ingest-file+ingest-stdin). 기존kebab ingest무영향..kebabignore: explicit ingest = default bypass + stderr warn (별 flag 불필요).--title,--source-uri) → frontmatter 자동 prepend. 이미 frontmatter 있으면 error._external/디렉토리 첫 생성 시.kebabignore자동 append (walk re-ingestion 무한 루프 방지).ingest_report.v1재사용, source_uri 는 frontmatter → metadata 자동 흐름).Plan task 분할
externalmodule (helpers + 12 unit tests)ingest_file_with_configfacadeingest_stdin_with_configfacadeCmd::IngestFilearmCmd::IngestStdinarmingest_file+ingest_stdintools (4 → 6)Release trigger (impl PR 머지 후)
0.3.1 → 0.3.2 patch — additive only (신규 subcommand + 신규 MCP tool, 기존 surface 동작 무영향, wire schema 변경 없음). pre-1.0 patch 정책 일관 (fb-30 도 0.3.1 patch 였음).
12-task plan covering: - kebab-app::external module (4 helpers + 12 unit tests) — Task 1 - kebab-app::ingest_file_with_config facade — Task 2 - kebab-app integration test — Task 3 - kebab-app::ingest_stdin_with_config facade — Task 4 - kebab-app integration test — Task 5 - kebab-cli Cmd::IngestFile + Cmd::IngestStdin arms — Tasks 6 + 7 - kebab-cli spawn-based integration tests — Task 8 - kebab-mcp ingest_file + ingest_stdin tools (4 → 6) — Task 9 - kebab-mcp integration tests — Task 10 - doc sync (README + HANDOFF + CLAUDE + skill + design §6.3) — Task 11 - HOTFIXES + status flip + final verification — Task 12 Implementation strategy: ingest_file_with_config copies bytes to _external/<hash>.<ext> then delegates to existing ingest_with_config_opts via SourceScope { root: _external/, include: [<filename>], ... } — minimal change to existing walk pipeline. ingest_stdin_with_config = frontmatter inject + ingest_file delegation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>