{ "version": "1.0.0", "lastScanned": 1780794206309, "projectRoot": "/root/luke_scribe", "techStack": { "languages": [ "Python" ], "frameworks": [ "FastAPI · faster-whisper/CTranslate2 · Redis/RQ(no-fork) · pydantic v2 · ffmpeg · Silero VAD" ], "packageManager": "uv", "runtime": "Python 3.11+" }, "build": { "buildCommand": "uv sync", "testCommand": "export PATH=\"$HOME/.local/bin:$HOME/.cargo/bin:$PATH\"\nuv run pytest -q 2>&1 | tail -8\necho \"=== ruff ===\"; uv run ruff check src/ tests/ && echo \"clean\"", "lintCommand": "uv run ruff check src/ tests/", "devCommand": "uv run luke-scribe detect", "scripts": {} }, "conventions": { "namingStyle": null, "importStyle": null, "testPattern": null, "fileOrganization": null }, "structure": { "isMonorepo": false, "workspaces": [], "mainDirectories": [ "src/luke_scribe (계획, 미생성)" ], "gitBranches": "main" }, "customNotes": [ { "timestamp": 1780801973941, "source": "manual", "category": "architecture", "content": "내부용 로컬 STT 전사 API. 단일 Job 추상화 + 2레인: 배치=Redis/RQ SimpleWorker(no-fork, model-load-once), 실시간=WebSocket LocalAgreement(turbo). 엔진=faster-whisper(CTranslate2). 부팅 시 VRAM 실측→능력등급 T0(CPU)~T3(turbo+large-v3 동시상주). 배포 2프로파일: Colab/dev=순수 Python·in-proc 큐·cloudflared / prod=Docker+Redis+공유스토어. 입력 상한 4h/2GB(초과 413), 큐 만재 429." }, { "timestamp": 1780801976315, "source": "manual", "category": "techstack", "content": "Python 3.11+, uv(패키지), FastAPI+uvicorn, faster-whisper(CTranslate2: turbo+large-v3), Redis+RQ(no-fork), pydantic v2, ffmpeg, Silero VAD; 옵션 pyannote(diarize)/LLM 보정(local·external)/cloudflared. CLI=typer(detect/transcribe/bench/serve), 테스트=pytest, src 레이아웃 src/luke_scribe/. ⚠️ 전부 plan v2.3상 결정이며 아직 미구현(P1+에서 생성)." }, { "timestamp": 1780801980334, "source": "manual", "category": "env", "content": "git 원격=자체호스팅 Gitea https://git.lukehemmin.com (openresty, HTTPS/443 전용, SSH 미노출). 인증=PAT를 ~/.git-credentials에 저장(global helper store, username lukehemmin) — 검증완료, VS Code askpass 없이 push 됨. ⚠️ 저장소 익명 읽기 허용 상태(내부/비공개 의도면 Gitea에서 Private 점검)." }, { "timestamp": 1780812476362, "source": "manual", "category": "status", "content": "P1 진행(2026-06-07): ✅ detect(능력등급 T0~T3, 1050→T0_CPU 명시강등) · ✅ transcribe(faster-whisper CPU 검증: JFK 11s 클립 정확 전사, model_used 출력) · 단위테스트 10개 통과. 코드 존재함(더 이상 0%). 남음: word-ts/format 출력옵션·Silero VAD 옵션화, VRAM 실측 probe(정적추정 대체), bench(라벨 KO+EN 샘플셋 필요), 상위 tier(T2/T3) Colab 검증, P2(API+Redis/RQ). 브랜치 feat/p1-core." } ], "directoryMap": {}, "hotPaths": [ { "path": "README.md", "accessCount": 3, "lastAccessed": 1780812417055, "type": "file" }, { "path": "src/luke_scribe/cli.py", "accessCount": 2, "lastAccessed": 1780812315014, "type": "file" }, { "path": "pyproject.toml", "accessCount": 1, "lastAccessed": 1780804235420, "type": "file" }, { "path": "src/luke_scribe/__init__.py", "accessCount": 1, "lastAccessed": 1780804261889, "type": "file" }, { "path": "src/luke_scribe/config.py", "accessCount": 1, "lastAccessed": 1780804262703, "type": "file" }, { "path": "src/luke_scribe/devices/__init__.py", "accessCount": 1, "lastAccessed": 1780804263611, "type": "file" }, { "path": "src/luke_scribe/devices/profile.py", "accessCount": 1, "lastAccessed": 1780804266795, "type": "file" }, { "path": "src/luke_scribe/devices/vram_probe.py", "accessCount": 1, "lastAccessed": 1780804273484, "type": "file" }, { "path": "src/luke_scribe/devices/manager.py", "accessCount": 1, "lastAccessed": 1780804300531, "type": "file" }, { "path": "run.sh", "accessCount": 1, "lastAccessed": 1780804312249, "type": "file" }, { "path": ".env.example", "accessCount": 1, "lastAccessed": 1780804316978, "type": "file" }, { "path": "tests/test_device_manager.py", "accessCount": 1, "lastAccessed": 1780804449331, "type": "file" }, { "path": "src/luke_scribe/engine/__init__.py", "accessCount": 1, "lastAccessed": 1780812252757, "type": "file" }, { "path": "src/luke_scribe/engine/model_registry.py", "accessCount": 1, "lastAccessed": 1780812254912, "type": "file" }, { "path": "src/luke_scribe/engine/faster_whisper_engine.py", "accessCount": 1, "lastAccessed": 1780812261152, "type": "file" }, { "path": "src/luke_scribe/audio/__init__.py", "accessCount": 1, "lastAccessed": 1780812262920, "type": "file" }, { "path": "src/luke_scribe/audio/ingest.py", "accessCount": 1, "lastAccessed": 1780812299865, "type": "file" }, { "path": "tests/test_engine_audio.py", "accessCount": 1, "lastAccessed": 1780812413312, "type": "file" } ], "userDirectives": [ { "timestamp": 1780801958149, "directive": "`.omc/`의 기획 산출물(plans/specs/artifacts)이 공유 저장소의 단일 진실원본(SoT)이다 — 항상 in-repo로 최신화해 다른 직원이 OMC로 프로젝트를 즉시 이해하게 한다. 결정 변경 시 SoT 문서와 본 프로젝트 메모리를 함께 갱신한다.", "context": "SoT: .omc/plans/consensus-luke-scribe-stt-api.md (v2.3), .omc/specs/deep-interview-luke-scribe-stt-api.md", "source": "explicit", "priority": "high" }, { "timestamp": 1780801959067, "directive": "greenfield 상태 — 소스코드 0%. build/test 명령이 동작한다고 단정 금지. 다음 단계는 P1(uv 스캐폴딩 + Device Manager/VRAM probe + CLI detect/bench)이며 구현 시작 시 feat/p1-core 브랜치 사용.", "context": "현재 git 커밋 2개(초기 + v2.3 문서)만 존재. src/·pyproject.toml 아직 없음.", "source": "explicit", "priority": "high" }, { "timestamp": 1780801959846, "directive": "확정된 설계 결정(재논쟁 금지): (1) 모델=기본 turbo 단일, P1 bench에서 혼용어 entity 보존율<95%일 때만 하이브리드(batch=large-v3) 채택; (2) 취소=협조적 세그먼트 경계만(hard-kill 없음); (3) 배포HW·동시성 N=하드웨어 적응형 자동산정(고정 타깃 없음); (4) 프라이버시 우선=모든 종료경로 finally에서 원본+파생 오디오 삭제, 결과 7일 TTL, 외부 LLM egress 기본 off(allowlist+opt-in+감사로그).", "context": "", "source": "explicit", "priority": "high" }, { "timestamp": 1780801960639, "directive": "남은 설계 모호도(~5%)는 측정 게이트형 — 추가 인터뷰가 아니라 P1 bench로 닫는다: AC-4 R-WER 기준선, 하이브리드→단일 확정, CT2 GIL→실시간 프로세스 분리 여부.", "context": "", "source": "explicit", "priority": "normal" } ] }