Notes the canonical feed now serving 1.5.0 (installer hash verified), the
runtime and portable aliases pointing at the same version, and the landing
site reporting commit 5c11ee2 / 1.5.0. Also records that the site's CI
deployment still fails without a Cloudflare API token, so this refresh went
out through an authenticated local deploy, and that the stale-alias bug found
while publishing is fixed and closed.
9.9 KiB
D3RO Voice — Feature & Infrastructure Map (Index)
Status: ACTIVE Last full audit: 2026-09-13 Last update: 2026-09-23 — v1.5.0 릴리스. CHANGELOG
[1.5.0]을 확정하고 버전 SSOT를 1.5.0(android/iOS 1050000)으로 올렸으며,site/src/release.ts와apps/web/src/lib/desktop-release.ts다운로드 링크를 1.5.0으로 동기화했다. 이 릴리스는 입력 인텔리전스(INPUT-01~INPUT-18, 전부 데스크톱[~]), 커스텀 인스트럭션 수정(AI-04/05),LocalLLMService요청별 취소·상한을 포함한다. 인증서가 없어 무서명 업데이터 게시 예외(GAP-REL-06)를 유지한다. 게시 결과: canonical feedlatest.yml=1.5.0(설치본 91.2MiB / 95,612,108 bytes, sha512 일치, 익명 206),runtime-latest/portable-latest=1.5.0(원격 sha256 검증), 사이트https://d3ro.chanpaca.net/release-identity.json=commit5c11ee2/1.5.0. 게시 중 portable 별칭이 낡은 바이트와 새 바이트로 갈라지는 버그(GAP-REL-12)를 발견해 게시 스크립트를 수정했다.Previous update: 2026-09-22 — Gemma/Ollama 폭주 방어 계약을 기록했다. 19:14:12 부팅 워밍업이
keep_alive: 30m으로gemma4:e4b를 19:44:12까지 VRAM 3,226,342,521 bytes / context 4096으로 강제 상주시킨 것이 관측됐으며, 같은 시점 Windows GPU Engine PID 표본에는 Ollama의 활성 compute가 없었다. 즉 당시 상태는 무한 추론이 아니라 강제 residency였다. 19:11:17~19:11:58의 자동 제안 연속 생성은 기존 900 ms·12/min·5 candidates·128 tokens·한 글자 재생성 정책이 허용한 burst였다. 현재 구현 계약은 부팅 warmup 제거,keep_alive: 2m, 제안 600 ms / 최소 5 s 간격 / 기본 6회·hard max 12회 per min / 3 candidates / 64 tokens / 12-char growth / 8 s timeout, 그리고 요청별 취소·상한·종료 정리다. 독립 표적 검증은 6 test files / 69 tests passed / 0 failed, 변경 코드·테스트 ESLint와git diff --check도 exit 0이다. Raw Ollama에서는 cold bounded 요청이 client hard timeout 15.044 s에 취소된 뒤/api/ps가 비었고/api/version은 80 ms에 회복했다. 명시 warmup은 HTTP 200 / 16.639 s, 후속 warm 요청은 bodyoptions.num_predict=1,keep_alive='2m'로 553 ms HTTP 200 /done:true/eval_count:1/done_reason:length였고/api/psexpiry는 약 119.9 s였다. 19:48:59 +09:00에는 새 generate/unload/kill/retry 없이 충분히 지난 뒤 한 번의/api/ps가 HTTP 200 / 45.8 ms /{models:[]}였고/api/version은 HTTP 200 / 7.3 ms /0.32.13이었다. 이는 raw API 수준의 expiry 뒤 unload 확인일 뿐 앱 재시작·GUI·실제 타이핑 증거는 아니므로 상태는[~]로 유지한다 (11GAP-LLM-04, GAP-INPUT-06).Previous update: 2026-09-21 — Input intelligence (입력 레메트리 + 다음 문장 제안) 신규. 데스크톱에 입력 수집기(
InputTelemetryService), UIA 컨텍스트 브리지(사이드카GET /uia/focus), 제안 서비스(SuggestionService), 어렛 커 오버레이, 설정 > 입력 탭(동의·정책·주간 인사이트·개인 문구)을 추가했다. 카탈로그에INPUT-0105 + GAP-LLM-03, §7 에 CONSTRAINT-INPUT-01(키 내용 미저장 — ActivityWatch 정책 채택)을 기록. 설계 근거는 조사 기반이다: 어렛은INPUT-08(전부 데스크톱[~]— 유닛 48건은 GREEN 이지만 실앱 타이핑 검증 전), 백로그에 GAP-INPUT-01GetGUIThreadInfo가 아니라 UIATextPattern.GetSelection(Chromium 은TextPattern2미구현), 타이핑 스트는 키코드 복원이 아니라 UIA 스냅샷 diff(한/일 IME 대응), 디바운스/토큰 한도는 인라인 컴플리션 실측값(Continue 350 / Tabby 250 / twinny 300 ms, 출력 64256 토큰). 의존성:05;koffi3.3.1(포그라운드 창 FFI), 사이드카uiautomation2.0.29 +comtypes. 데스크톱 유닛 총계 1409(+49), Electron ABI 실행에서 신규 실패 0건. 당시의 24.7초/4.9초 지연 설명과keep_alive: 30m·부팅 워밍업 처방은 현재 상태가 아닌 과거 가설/완화 이력이며, 최신 운영 결론은 위 2026-09-22 항목과11GAP-LLM-04를 따른다. 직전: LLM instruction-prompt fix (9c2b4d4): the custom-instruction path inserted the instruction's own wording instead of the processed result and had never worked in any shipped release (v0.1.0-alpha..v1.4.0, introducedfea923d2026-04-05, not a regression).llm-prompts.tsis now the SSOT for prompt resolution and placeholder substitution, shared byVoiceModeService/ChainService/LLM.PROCESS. AI-04/05/06/07 are demoted to[~]on desktop — fixed with unit tests, but not verified in a running app and the four relatedtests/red/*.usecase.test.tscould not execute (better-sqlite3ABI). New: GAP-LLM-01 (no target-language setting), GAP-LLM-02 (this fix unverified); GAP-INFRA-06 amended (the ABI masks verification, not just dev-env switching cost); GAP-I18N-01 amended (popup.error.defaultmissing in 10 locales). Earlier the same day: CAP-16 (desktop key bindings rebuilt on one@d3ro/core/keybindingSSOT — multiple bindings per action, mouse buttons,HOTKEY→KEYBINDINGIPC group), verified on Windows by a manual run, so CAP-16 and CAP-02 are[x]and GAP-KEY-01 is closed. Still open: GAP-KEY-02/03, GAP-QA-02, GAP-I18N-01/02, GAP-INFRA-06, GAP-LLM-01/02, GAP-INPUT-0111§7 holds accepted design constraints (things deliberately kept, not gaps) Scope: entire monorepoD:/workspace/D3ROVoiceat product version1.5.0(release/product-version.json, released 2026-09-23) Purpose: let any agent (or human) answer two questions in under a minute:
- What infrastructure exists? (build, CI, services, APIs, data, packages, deploy)
- How far is each feature developed? (per surface, with file anchors and status)
This is the entry point. Read the index, then open only the sub-document you need. Do not read all files every time.
1. How to use this map
| You need to know… | Open |
|---|---|
| The product, its IA, platforms, identity/data model | 01-system-overview.md |
| Repo layout, build, CI/CD, Docker, deploy, scripts, docs | 02-infrastructure.md |
Shared packages (@d3ro/core, ui, ui-native, i18n, api-client) |
03-shared-packages.md |
| Desktop (Electron) services, IPC, pages, popups, status | 04-desktop-app.md |
| Web (Next.js) routes, components, clients, status | 05-web-app.md |
| Mobile (React Native) screens, features, tabs, status | 06-mobile-app.md |
| .NET cloud API: controllers, services, tables, auth | 07-api-server.md |
| Admin back office (Next.js) routes, guards, status | 08-admin-console.md |
| Supabase migrations, Edge Functions, Cloudflare worker | 09-supabase-backend.md |
| The feature map — every feature, per platform, with status | 10-feature-catalog.md |
| Known gaps / under-developed / backlog | 11-gap-backlog.md |
| Mandatory rules for keeping this map current | 12-update-protocol.md |
An agent starting a task should:
- Read the relevant surface doc (04–09) for infrastructure.
- Read
10-feature-catalog.mdfor the feature's current status and platform coverage. - Read
11-gap-backlog.mdto see if the feature is already tracked as backlog. - After finishing, follow
12-update-protocol.mdbefore the work is considered done.
2. Status legend
Feature rows in 10-feature-catalog.md use this scale:
| Symbol | Meaning |
|---|---|
[x] |
Implemented and verified on this platform (code + tests / evidence exist in-repo). |
[~] |
Implemented but partial, unverified, or blocked on an external/console gate. |
[ ] |
Planned or absent on this platform. |
[!] |
Blocked on something outside the repo (external console, secret, physical device, store review). |
[-] |
Not applicable to this platform (with a one-line reason). |
Status is per platform. A feature can be [x] on desktop, [~] on mobile, [ ] on web.
3. One-paragraph system summary
D3RO Voice is a multi-platform AI voice assistant (transcription, LLM command execution, meeting intelligence, RAG, voice conversation) sold as Free / Pro / Pro+ / Team / Enterprise tiers. It ships as an Electron desktop app (local-first: bundled SoX, faster-whisper sidecar, Ollama, local SQLite), a React Native mobile app (apps/mobile-rn, cloud-first: Supabase auth + Edge Functions + on-device Whisper fallback), a Next.js web console, a Next.js admin back office, and a .NET cloud API (AI proxy + back office backend). The shared backend is Supabase (Postgres + RLS + Auth + Storage + ~27 Deno Edge Functions), deployed to a Synology NAS via Docker with a Cloudflare edge worker and tunnel. Shared code lives in packages/*. Distribution: Windows NSIS + macOS DMG (GitLab/Forgejo feed + electron-updater), Android APK/AAB via Google Play.
4. Reading order for a brand-new agent
AGENTS.md(root) — operating rules + the obligation to update this map.docs/map/01-system-overview.md— the big picture and IA.- The surface doc for your task (04–09).
docs/map/10-feature-catalog.md— find the feature and its status.docs/map/11-gap-backlog.md— check for existing backlog notes.
Deeper design history (not required to start): docs/design/*, docs/phases/*, docs/v2/*, docs/v3/*, memory/*, CHANGELOG.md. The mobile SSOT is docs/v3/MOBILE_APP_COMPLETION_SSOT.md.
5. Maintenance
This map must change whenever a feature is added, removed, changed, or deferred.
See 12-update-protocol.md for the exact checklist and
AGENTS.md for the agent obligation.