ltcai 10.9.0 → 11.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -64
- package/docs/CHANGELOG.md +72 -237
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +1 -1
- package/docs/ONBOARDING.md +1 -1
- package/docs/OPERATIONS.md +1 -1
- package/docs/PERFORMANCE.md +78 -7
- package/docs/TRUST_MODEL.md +1 -1
- package/docs/WHY_LATTICE.md +1 -1
- package/docs/kg-schema.md +1 -1
- package/docs/v11.1.0_PRODUCT_INTELLIGENCE_PLAN.md +313 -0
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/graph/_kg_contract.py +11 -0
- package/lattice_brain/graph/curator.py +1 -1
- package/lattice_brain/graph/fusion.py +184 -3
- package/lattice_brain/graph/proactive.py +138 -1
- package/lattice_brain/graph/projection.py +10 -2
- package/lattice_brain/graph/retrieval.py +137 -7
- package/lattice_brain/graph/retrieval_docgen.py +20 -20
- package/lattice_brain/graph/retrieval_policy.py +6 -0
- package/lattice_brain/graph/retrieval_reads.py +188 -1
- package/lattice_brain/graph/retrieval_vector.py +474 -110
- package/lattice_brain/graph/schema.py +125 -2
- package/lattice_brain/graph/vector_index/__init__.py +85 -0
- package/lattice_brain/graph/vector_index/base.py +170 -0
- package/lattice_brain/graph/vector_index/brute_force.py +114 -0
- package/lattice_brain/graph/vector_index/hnsw.py +293 -0
- package/lattice_brain/graph/vector_index/jobs.py +287 -0
- package/lattice_brain/graph/vector_index/quantized.py +151 -0
- package/lattice_brain/graph/vector_index/selector.py +131 -0
- package/lattice_brain/ingestion.py +50 -3
- package/lattice_brain/portability.py +654 -2
- package/lattice_brain/runtime/agent_runtime.py +1 -1
- package/lattice_brain/runtime/contracts.py +1 -1
- package/lattice_brain/runtime/multi_agent.py +1 -1
- package/lattice_brain/self_model.py +620 -0
- package/lattice_brain/synthesis.py +801 -0
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/brain_intelligence.py +83 -1
- package/latticeai/api/chat_stream.py +4 -1
- package/latticeai/api/local_files.py +62 -0
- package/latticeai/api/models.py +1 -1
- package/latticeai/api/portability.py +130 -1
- package/latticeai/api/security_dashboard.py +48 -13
- package/latticeai/api/voice_capture.py +4 -1
- package/latticeai/api/workspace.py +11 -5
- package/latticeai/core/embedding_providers.py +20 -1
- package/latticeai/core/legacy_compatibility.py +1 -1
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/messages.py +14 -0
- package/latticeai/core/model_compat.py +2 -2
- package/latticeai/core/tool_registry.py +0 -7
- package/latticeai/core/workspace_os_constants.py +1 -1
- package/latticeai/core/workspace_os_utils.py +4 -50
- package/latticeai/core/workspace_review_items.py +12 -1
- package/latticeai/integrations/telegram_bot.py +28 -10
- package/latticeai/models/router.py +1 -1
- package/latticeai/runtime/access_runtime.py +1 -1
- package/latticeai/runtime/network_boundary_wiring.py +9 -5
- package/latticeai/runtime/permission_mode_wiring.py +9 -6
- package/latticeai/runtime/router_registration.py +3 -0
- package/latticeai/services/architecture_readiness.py +1 -1
- package/latticeai/services/brain_intelligence.py +253 -0
- package/latticeai/services/memory_service.py +1 -1
- package/latticeai/services/model_catalog.py +4 -3
- package/latticeai/services/model_engines.py +28 -14
- package/latticeai/services/obsidian_bridge.py +618 -0
- package/latticeai/services/product_readiness.py +5 -3
- package/latticeai/tools/filesystem.py +4 -1
- package/package.json +1 -1
- package/scripts/bench_vector_index.py +295 -0
- package/scripts/check_current_release_docs.mjs +4 -2
- package/scripts/release_screen_claims.json +31 -0
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +37 -37
- package/static/app/assets/{Act-CS9IeqUX.js → Act-D4zSxFR-.js} +1 -1
- package/static/app/assets/{AdminConsole-3UkIEWGA.js → AdminConsole-w5jBfPt2.js} +1 -1
- package/static/app/assets/{Brain-B22EmNqS.js → Brain-C2EqQg74.js} +2 -2
- package/static/app/assets/BrainHome-CvXS6XiQ.js +2 -0
- package/static/app/assets/BrainSignals-DOE_KhOU.js +1 -0
- package/static/app/assets/Capture-DPqpGK8d.js +1 -0
- package/static/app/assets/{CommandPalette-86m4FCcN.js → CommandPalette-CNf7h5fp.js} +1 -1
- package/static/app/assets/Library-BN0HYOfc.js +1 -0
- package/static/app/assets/LivingBrain-Dfq_wEDI.js +1 -0
- package/static/app/assets/ProductFlow-B-3O0rNV.js +1 -0
- package/static/app/assets/{ReviewCard-BepjSDpN.js → ReviewCard-gZ-tdqFM.js} +1 -1
- package/static/app/assets/System-BElUcSSw.js +1 -0
- package/static/app/assets/arrow-left-CFNIMjhv.js +1 -0
- package/static/app/assets/{bot-DQj0-LkM.js → bot--qYHMtkP.js} +1 -1
- package/static/app/assets/brain-DDCLjRqO.js +1 -0
- package/static/app/assets/{button-CmTknyAP.js → button-51Z3rsuv.js} +1 -1
- package/static/app/assets/{circle-pause-yTCWRziJ.js → circle-pause-CMIiMaQl.js} +1 -1
- package/static/app/assets/{circle-play-Ccrva84R.js → circle-play-DZoO_cfG.js} +1 -1
- package/static/app/assets/{cpu-CbJqWTlS.js → cpu-Bs6uc9W9.js} +1 -1
- package/static/app/assets/{download-CkSzbzU-.js → download-G-2olkWz.js} +1 -1
- package/static/app/assets/{folder-open-CKyjQ4PU.js → folder-open-CTOspnmb.js} +1 -1
- package/static/app/assets/{hard-drive-DAzk9um0.js → hard-drive-CewHWJhn.js} +1 -1
- package/static/app/assets/index-CkzokZAj.css +2 -0
- package/static/app/assets/{index-CxOcwsHV.js → index-D7Rr-J2Y.js} +3 -3
- package/static/app/assets/{input-DcMETmZ7.js → input-D4w_BZWl.js} +1 -1
- package/static/app/assets/{permissionCopy-BVf13_25.js → permissionCopy-CosBEXAZ.js} +1 -1
- package/static/app/assets/primitives-d0g9pvzS.js +1 -0
- package/static/app/assets/search-BLCYt75v.js +1 -0
- package/static/app/assets/{share-2-COWCHNZm.js → share-2-NmD7e_oV.js} +1 -1
- package/static/app/assets/{shield-alert-BDrvilyK.js → shield-alert-CcQeMuju.js} +1 -1
- package/static/app/assets/{textarea-rUmsc8cP.js → textarea-BPAJDc-0.js} +1 -1
- package/static/app/assets/{useFocusTrap-Bi5UY_8v.js → useFocusTrap-C7YLdTBC.js} +1 -1
- package/static/app/assets/{useQuery-C-AicB-3.js → useQuery-DRyD9opW.js} +1 -1
- package/static/app/assets/{utils-BMwWg78e.js → utils-DG1_ExrP.js} +3 -3
- package/static/app/assets/{workspace-Y93tls8P.js → workspace-CWVf3gsI.js} +1 -1
- package/static/app/index.html +4 -4
- package/static/sw.js +1 -1
- package/static/app/assets/BrainHome-CMDqgJF4.js +0 -2
- package/static/app/assets/BrainSignals-BeE8RJo3.js +0 -1
- package/static/app/assets/Capture-ZX9bQh68.js +0 -1
- package/static/app/assets/Library-Bhz5LUca.js +0 -1
- package/static/app/assets/LivingBrain-BSa0wpFG.js +0 -1
- package/static/app/assets/ProductFlow-IP4Q-5aQ.js +0 -1
- package/static/app/assets/System-Bwx1h_jT.js +0 -1
- package/static/app/assets/arrow-left-ig7AZU8B.js +0 -1
- package/static/app/assets/brain-D8OEwmVj.js +0 -1
- package/static/app/assets/index-BfD-jhA9.css +0 -2
- package/static/app/assets/primitives-CQV9Q2YM.js +0 -1
- package/static/app/assets/search-CXGASMMH.js +0 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml)
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
|
|
14
|
-

|
|
15
15
|
|
|
16
16
|
Chat, files, folders, notes, and web pages all flow into one durable knowledge
|
|
17
17
|
graph on your computer. Any model — local MLX or cloud — can speak with that
|
|
@@ -24,10 +24,10 @@ memory. Nothing leaves your machine without explicit consent.
|
|
|
24
24
|
|
|
25
25
|
| | |
|
|
26
26
|
| --- | --- |
|
|
27
|
-
| **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory  | **See how knowledge connects** — a real relationship graph, not a file list  |
|
|
28
|
+
| **Capture anything** — files, whole folders, notes, screenshots, web pages  | **Automate with review** — agent changes become proposals you approve first  |
|
|
29
|
+
| **Pick a model in one click** — recommended local models for your hardware  | **Stay in control** — audit, roles, retention in a separate admin surface  |
|
|
30
|
+
| **Watch a file become memory** — three named steps, not a pipeline diagram  | **Say how much it may do alone** — one dial in plain words; dangerous actions stay blocked either way  |
|
|
31
31
|
|
|
32
32
|
## Why Lattice AI
|
|
33
33
|
|
|
@@ -58,64 +58,53 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
|
|
|
58
58
|
|
|
59
59
|
| | | |
|
|
60
60
|
| --- | --- | --- |
|
|
61
|
-
|  |  |  |
|
|
62
62
|
|
|
63
63
|
Screenshot index and capture notes:
|
|
64
|
-
[output/release/
|
|
64
|
+
[output/release/v11.0.1/SCREENSHOT_INDEX.md](output/release/v11.0.1/SCREENSHOT_INDEX.md)
|
|
65
65
|
|
|
66
66
|
## Current Release
|
|
67
67
|
|
|
68
|
-
The current release is **
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
- **
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
- **The streaming answer path has tests.** `useBrainChat` was 12% covered
|
|
99
|
-
because asserting anything about a stream needs frames arriving over time.
|
|
100
|
-
`frontend/src/test/fakeChatStream.ts` is that harness; eleven cases now cover
|
|
101
|
-
the answer building up, the stop button, refusals, grounding badges and live
|
|
102
|
-
step frames.
|
|
103
|
-
- **Evidence bound to this build.** `output/release/v10.9.0/` holds the twelve
|
|
104
|
-
capture screens, walkthrough gif/webm, and the asset-manifest / mock-server
|
|
105
|
-
fingerprints that lint re-checks before merge. 10.9.0 claims no screen
|
|
106
|
-
redesign, and `scripts/release_screen_claims.json` says so explicitly.
|
|
107
|
-
- **Exact artifact names only.** Publish paths list `dist/ltcai-10.9.0-*` and
|
|
108
|
-
`ltcai-10.9.0.tgz` — never `dist/*`.
|
|
68
|
+
The current release is **11.0.1 — Both Branches**:
|
|
69
|
+
|
|
70
|
+
11.0.0 put every line under test and documented, unfixed, the defects that
|
|
71
|
+
work surfaced. 11.0.1 is the settling of that account: **all eleven
|
|
72
|
+
documented defects are fixed, the code they proved dead is gone, and the CI
|
|
73
|
+
floor now holds 100% of branch arcs as well as lines.**
|
|
74
|
+
|
|
75
|
+
- **Every 11.0.0 finding is fixed.** The Telegram helper that sent the local
|
|
76
|
+
server's auth header to api.telegram.org, the unload-all that fabricated
|
|
77
|
+
success, the HTML inspector whose stylesheet collection could never fire,
|
|
78
|
+
the review-item id that collided within one second, the vLLM zombie that
|
|
79
|
+
read as "already running", the security dashboard's listing/detail
|
|
80
|
+
redaction gaps and invalid-JSON exports, the embedding `model_id` frozen at
|
|
81
|
+
the wrong dimension, the fast-path model-name mismatch, and the workspace
|
|
82
|
+
routes' dead literal and unreachable 404 arms. Each fix flipped the test
|
|
83
|
+
that had pinned the broken behaviour and gained a regression test.
|
|
84
|
+
- **Branch coverage joined the floor.** `branch = true` is now in the
|
|
85
|
+
coverage config: both directions of all 9,828 conditionals execute under
|
|
86
|
+
the suite (5,798 tests, up from 5,426), and `fail_under = 100` fails CI on
|
|
87
|
+
a single missed arc. Exclusions stay honest: eight reasoned
|
|
88
|
+
`pragma: no cover` lines and two reasoned `pragma: no branch` lines.
|
|
89
|
+
- **Dead code left the tree.** The unused auto-approved write-policy factory,
|
|
90
|
+
an unused snapshot-import normalizer, the workspace 404 arms shadowed by
|
|
91
|
+
the anti-enumeration 403, a provably-dead version guard, a provably-dead
|
|
92
|
+
MLX condition, and the vLLM silent-success recheck — each removal proved by
|
|
93
|
+
AST/reference scan before deletion.
|
|
94
|
+
- **Verified where CI runs.** The full suite passes with the branch gate on
|
|
95
|
+
macOS 3.14, a fresh-resolve python 3.11 environment (fastapi 0.141), and a
|
|
96
|
+
clean linux python:3.14 container — the three environments that caught
|
|
97
|
+
11.0.0's release-day failures.
|
|
109
98
|
|
|
110
99
|
Release notes: [RELEASE.md](RELEASE.md) · Full history: [docs/CHANGELOG.md](docs/CHANGELOG.md)
|
|
111
100
|
|
|
112
|
-
Expected artifacts for
|
|
101
|
+
Expected artifacts for 11.0.1 release must use exact filenames:
|
|
113
102
|
|
|
114
|
-
- `dist/ltcai-
|
|
115
|
-
- `dist/ltcai-
|
|
116
|
-
- `ltcai-
|
|
117
|
-
- `dist/ltcai-
|
|
118
|
-
- `src-tauri/target/release/bundle/dmg/Lattice
|
|
103
|
+
- `dist/ltcai-11.0.1-py3-none-any.whl`
|
|
104
|
+
- `dist/ltcai-11.0.1.tar.gz`
|
|
105
|
+
- `ltcai-11.0.1.tgz`
|
|
106
|
+
- `dist/ltcai-11.0.1.vsix`
|
|
107
|
+
- `src-tauri/target/release/bundle/dmg/Lattice AI_11.0.1_aarch64.dmg`
|
|
119
108
|
|
|
120
109
|
Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
|
|
121
110
|
|
|
@@ -150,6 +139,9 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
|
|
|
150
139
|
|
|
151
140
|
| Version | Theme |
|
|
152
141
|
| --- | --- |
|
|
142
|
+
| 11.0.1 | Both Branches |
|
|
143
|
+
| 11.0.0 | Full Measure |
|
|
144
|
+
| 10.10.0 | Quiet Station |
|
|
153
145
|
| 10.9.0 | Never Blocks |
|
|
154
146
|
| 10.8.0 | Within Reach |
|
|
155
147
|
| 10.7.0 | Plain Surface |
|
|
@@ -185,16 +177,6 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
|
|
|
185
177
|
| 9.2.0 | Model-Agnostic File Generation |
|
|
186
178
|
| 9.1.0 | Code Review Completion & Fail-Closed Runtime |
|
|
187
179
|
| 9.0.0 | Code Review Closure & Runtime Cleanup |
|
|
188
|
-
| 8.9.0 | Scoped Memory & Tool Policy Hardening |
|
|
189
|
-
| 8.8.0 | Brain Core Extraction & Recall Proof Hardening |
|
|
190
|
-
| 8.7.0 | Runtime State Hygiene & Release Evidence Refresh |
|
|
191
|
-
| 8.6.0 | Desktop Capture & Navigation Reliability |
|
|
192
|
-
| 8.5.0 | Tool Registry Readiness & Config DI |
|
|
193
|
-
| 8.4.0 | Action-Aware Brain Chat |
|
|
194
|
-
| 8.3.0 | Orchestrated Brain Readiness |
|
|
195
|
-
| 8.2.0 | Brain Brief |
|
|
196
|
-
| 8.1.0 | Intuitive Brain Home |
|
|
197
|
-
| 8.0.0 | Runtime Architecture Contract |
|
|
198
180
|
|
|
199
181
|
Per-release details: [RELEASE_NOTES.md](RELEASE_NOTES.md)
|
|
200
182
|
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,78 @@ The top entry is either the current unreleased main-branch work or the current
|
|
|
4
4
|
release line. Older entries are historical and may describe behavior as it
|
|
5
5
|
existed at that release.
|
|
6
6
|
|
|
7
|
+
## [11.0.1] - 2026-08-10
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- 11.0.0 릴리스 노트가 기록한 결함 11건 전부: Telegram `send_web_link`의
|
|
11
|
+
서버 토큰 유출과 전체 언로드 성공 조작, `inspect_html` 스타일시트 데드
|
|
12
|
+
수집, 리뷰 아이템 id 초 단위 충돌, vLLM 좀비 재확인(침묵 성공 → 409),
|
|
13
|
+
보안 대시보드 목록/상세 마스킹 갭과 invalid-JSON 내보내기, 임베딩
|
|
14
|
+
`model_id` 차원 동결, fast-path `X-Model`/SSE 본문 불일치, 워크스페이스
|
|
15
|
+
응답의 죽은 `"ok"` 리터럴과 미도달 404 arm. 각 수정은 결함을 고정하던
|
|
16
|
+
테스트를 반전하고 회귀 테스트를 추가했습니다.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- 커버리지 게이트가 분기까지 잡습니다: `[tool.coverage.run] branch = true`,
|
|
20
|
+
9,828아크 전부 실행, `fail_under = 100`은 이제 라인+분기 합산.
|
|
21
|
+
테스트 5,426 → 5,798개. `pragma: no branch`는 사유 명시 2줄.
|
|
22
|
+
|
|
23
|
+
### Removed
|
|
24
|
+
- 참조-0 증명 후 죽은 코드 삭제: `tool_registry._wa()`,
|
|
25
|
+
`workspace_os_utils._snapshot_graph_import_payload`, 워크스페이스 404
|
|
26
|
+
arm 2개, vLLM 침묵 성공 분기, 증명된 죽은 조건 3곳
|
|
27
|
+
(model_catalog 버전 가드 · model_compat MLX 조건 · retrieval_docgen
|
|
28
|
+
blank-query 가드).
|
|
29
|
+
|
|
30
|
+
## [11.0.0] - 2026-08-10
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- Python 테스트 커버리지 72.80% → **100.00%**, CI 게이트 `fail_under = 100`.
|
|
34
|
+
테스트 2,269 → 5,426개(+3,157, 신규 파일 145개). 제외는 도달 불가 사유가
|
|
35
|
+
명시된 `pragma: no cover` 8줄뿐이며, MLX/Windows/watchdog 등 플랫폼 잠금
|
|
36
|
+
분기는 페이크 모듈·시임 패치로 ubuntu CI에서도 실행됩니다.
|
|
37
|
+
- `build_phases` 후반 4개 페이즈가 `test_security.py`의 server-import
|
|
38
|
+
부수효과 없이 전용 테스트(RuntimeContext 직접 구동)로 커버됩니다.
|
|
39
|
+
- ARCHITECTURE.md 검증 다이어그램이 실측값으로 갱신되고 "보고만 되고 강제
|
|
40
|
+
안 되는" 점선 상자가 사라졌습니다(양쪽 커버리지 모두 100% 플로어).
|
|
41
|
+
|
|
42
|
+
### Internal
|
|
43
|
+
- 커버리지 작업이 드러낸 실제 결함·죽은 분기 11건은 동작 변경 없이
|
|
44
|
+
RELEASE_NOTES_v11.0.0.md에 기록되고, 현재 동작을 그대로 단언하는
|
|
45
|
+
테스트로 고정됐습니다(수정은 다음 릴리스 후보).
|
|
46
|
+
|
|
47
|
+
## [10.10.0] - 2026-08-06
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
- Brain 대화 홈 "Quiet Station" 재설계 — 기억/주제 통계가 인사말 줄의 문장에서
|
|
51
|
+
호버·클릭 팝오버(요약 그래프 + 기억 지도 바로가기)를 여는 배지로, 캡처 칩
|
|
52
|
+
6개(문서/이미지/파일/폴더/노트/웹)가 컴포저의 `+ 추가` 접이식 메뉴로, 모델
|
|
53
|
+
준비 배너가 히어로 우측 상태 필로, 하단 서랍 2개(지난 대화 · Brain이 정리한
|
|
54
|
+
내용)가 좌측 독 레일(대화 · 통계 · 기억 지도)의 포커스 트랩 서랍으로
|
|
55
|
+
이동했습니다. 카드 보더는 소프트 섀도로 대체되고, 액센트 컬러는 보내기
|
|
56
|
+
버튼과 모델 CTA 두 곳에만 남습니다.
|
|
57
|
+
- 공개 릴리스 히스토리가 9.0.0부터 시작합니다 — 8.x 릴리스 노트 9개 파일을
|
|
58
|
+
제거하고 README/RELEASE_NOTES.md/RELEASE.md/CHANGELOG이 같은 경계를
|
|
59
|
+
서술합니다.
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
- 히어로의 `overflow: clip`이 새 통계 팝오버를 잘라내던 문제(클립 제거 —
|
|
63
|
+
헤일로는 `--aura-blur`로 이미 조여져 있어 가둘 것이 없습니다).
|
|
64
|
+
- 포털 서랍 내부에서 `.brain-care-panel` 계열 중첩 그리드 패널의 행이 2px로
|
|
65
|
+
붕괴해 버튼이 클릭 불가능하던 문제 — 서랍 본문을 flex 컬럼으로 전환.
|
|
66
|
+
- 호버로 열린 배지/+ 메뉴를 곧바로 이은 클릭이 도로 닫아버리던 경합 —
|
|
67
|
+
350ms 열림 디바운스.
|
|
68
|
+
- 새 + 버튼 aria-label의 "메뉴 열기" 문구가 셸 메뉴 버튼과 role 매칭
|
|
69
|
+
충돌하던 문제.
|
|
70
|
+
|
|
71
|
+
### Added
|
|
72
|
+
- 프론트엔드 커버리지 100% — `frontend/src` 전체 statements/branches/
|
|
73
|
+
functions/lines, vitest thresholds 100, CI 커버리지 게이트.
|
|
74
|
+
- `scripts/release_screen_claims.json`의 10.10.0 항목
|
|
75
|
+
(04-brain-chat-home, min 3%).
|
|
76
|
+
- 비주얼 스펙이 새 홈 계약(+ 메뉴 접힘, 독 서랍, 배지 팝오버, 글로우 기하)을
|
|
77
|
+
검증합니다.
|
|
78
|
+
|
|
7
79
|
## [10.9.0] - 2026-08-05
|
|
8
80
|
|
|
9
81
|
### Fixed
|
|
@@ -1633,240 +1705,3 @@ Response to a full code review of 10.1.1 (71/100). All twelve findings.
|
|
|
1633
1705
|
bridge notification, no-model, single-answer, direct-file, and agent-file
|
|
1634
1706
|
response paths out of the main `/chat` handler, with regression coverage for
|
|
1635
1707
|
the shared fast-path epilogue.
|
|
1636
|
-
|
|
1637
|
-
## [8.9.0] - 2026-07-06
|
|
1638
|
-
|
|
1639
|
-
### Added
|
|
1640
|
-
- Added authenticated user/workspace scoping to durable conversation history
|
|
1641
|
-
reads and deletes.
|
|
1642
|
-
- Added workspace-aware Knowledge Graph search, traversal, relationship, node,
|
|
1643
|
-
and chat-context reads.
|
|
1644
|
-
- Added direct HTTP/MCP Tool API policy enforcement for registry-governed tools.
|
|
1645
|
-
- Added permission approval queue hashing and atomic writes so raw tokens are
|
|
1646
|
-
not persisted at rest.
|
|
1647
|
-
- Added confirmation-token guarded installer/process command plans with redacted
|
|
1648
|
-
local process audit events.
|
|
1649
|
-
- Added regression coverage for scoped history, graph scoping, tool policy
|
|
1650
|
-
gates, AgentRuntime approval semantics, permission tokens, session TTL
|
|
1651
|
-
injection, and model-download runtime config.
|
|
1652
|
-
|
|
1653
|
-
### Changed
|
|
1654
|
-
- AgentRuntime now requires explicit human approval for non-auto-approved plans
|
|
1655
|
-
and rolls back git-governed tool results even when `success` is omitted.
|
|
1656
|
-
- Model download consent now uses configured runtime state instead of direct
|
|
1657
|
-
environment-variable reads.
|
|
1658
|
-
- Frontend API base logic, CSS token/base rules, and i18n literal checks were
|
|
1659
|
-
split into smaller maintainability seams.
|
|
1660
|
-
- Version bumped to 8.9.0 across Python, npm, VS Code extension, Tauri, static
|
|
1661
|
-
metadata, readiness gates, release notes, and current-release documentation.
|
|
1662
|
-
- Documentation now states that SQLite is the live local Brain store; Postgres
|
|
1663
|
-
remains optional scale/migration tooling.
|
|
1664
|
-
|
|
1665
|
-
### Fixed
|
|
1666
|
-
- Conversation store migration now creates the workspace index only after the
|
|
1667
|
-
scope columns exist.
|
|
1668
|
-
- Direct `write_file`/`edit_file` policy lookup now blocks system write
|
|
1669
|
-
prefixes consistently with local-file approvals.
|
|
1670
|
-
- Workspace selection clearing now removes the persisted workspace id.
|
|
1671
|
-
- Tauri/local API fetches now include credentials for localhost backend
|
|
1672
|
-
sessions.
|
|
1673
|
-
|
|
1674
|
-
## [8.8.0] - 2026-07-06
|
|
1675
|
-
|
|
1676
|
-
### Added
|
|
1677
|
-
- Added Brain Core isolation coverage that keeps `lattice_brain` independent of
|
|
1678
|
-
product-package imports.
|
|
1679
|
-
- Added recall proof quality gates for matched terms, confidence labels, and
|
|
1680
|
-
lexical evidence filtering.
|
|
1681
|
-
- Added Brain Chat conversation controls for new/resume/delete, stop,
|
|
1682
|
-
regenerate, copy, and richer ingestion progress.
|
|
1683
|
-
|
|
1684
|
-
### Changed
|
|
1685
|
-
- Removed internal-only Brain shim layers: flat pre-graph modules,
|
|
1686
|
-
`latticeai.brain`, and `latticeai.services.agent_runtime`.
|
|
1687
|
-
- Updated legacy compatibility reporting so removed shim layers are tracked
|
|
1688
|
-
separately from remaining external root shims.
|
|
1689
|
-
- Hardened AgentRuntime boundary handling for unknown roles, legacy run
|
|
1690
|
-
contracts, and persisted retry budgets.
|
|
1691
|
-
- Version bumped to 8.8.0 across Python, npm, VS Code extension, Tauri, static
|
|
1692
|
-
metadata, readiness gates, release notes, and current-release documentation.
|
|
1693
|
-
|
|
1694
|
-
### Fixed
|
|
1695
|
-
- File ingestion now rejects directory paths before dispatching to document
|
|
1696
|
-
ingestion.
|
|
1697
|
-
- Memory recall filters low-evidence noise when stronger lexical matches are
|
|
1698
|
-
present and surfaces explainable citation confidence.
|
|
1699
|
-
|
|
1700
|
-
## [8.7.0] - 2026-07-05
|
|
1701
|
-
|
|
1702
|
-
### Added
|
|
1703
|
-
- Added unit test coverage for model-runtime `STATE` source-of-truth behavior
|
|
1704
|
-
and deprecation warnings on legacy global synchronization.
|
|
1705
|
-
- Added refreshed 8.7.0 screenshots, walkthrough GIF/WebM, and capture notes
|
|
1706
|
-
under `output/release/v8.7.0/`.
|
|
1707
|
-
|
|
1708
|
-
### Changed
|
|
1709
|
-
- Reduced internal reliance on bare module globals in
|
|
1710
|
-
`latticeai/services/model_runtime.py`; implementation logic now consistently
|
|
1711
|
-
reads from the `ModelRuntimeState` instance while globals remain as a legacy
|
|
1712
|
-
compatibility surface.
|
|
1713
|
-
- Added `DeprecationWarning` to `sync_to_module_globals()` while preserving the
|
|
1714
|
-
external shim behavior.
|
|
1715
|
-
- Removed a loose `as any` cast from `frontend/src/pages/Act.tsx`.
|
|
1716
|
-
- Version bumped to 8.7.0 across Python, npm, VS Code extension, Tauri, static
|
|
1717
|
-
metadata, README evidence links, release notes, and current-release
|
|
1718
|
-
documentation.
|
|
1719
|
-
|
|
1720
|
-
### Fixed
|
|
1721
|
-
- Internal model-runtime functions now prefer the typed state object per the
|
|
1722
|
-
project preference for composition over global mutable state.
|
|
1723
|
-
|
|
1724
|
-
## [8.6.0] - 2026-07-05
|
|
1725
|
-
|
|
1726
|
-
### Added
|
|
1727
|
-
- Added Tauri localhost remote capability coverage so the desktop app can keep
|
|
1728
|
-
using local IPC commands after navigating to the FastAPI-served `/app`.
|
|
1729
|
-
- Added a regression trust gate for the Tauri localhost capability.
|
|
1730
|
-
|
|
1731
|
-
### Changed
|
|
1732
|
-
- Improved the Capture source flow: desktop users can choose a folder with the
|
|
1733
|
-
native folder picker and immediately scan/connect it, while web page capture
|
|
1734
|
-
now supports paste, Enter-to-save, and `https://` normalization for bare
|
|
1735
|
-
domains.
|
|
1736
|
-
- Updated Visual Smoke coverage for the new Brain shell sidebar and admin
|
|
1737
|
-
console entry flow.
|
|
1738
|
-
- Version bumped to 8.6.0 across Python, npm, VS Code extension, Tauri, static
|
|
1739
|
-
metadata, readiness gates, and current-release documentation.
|
|
1740
|
-
|
|
1741
|
-
### Fixed
|
|
1742
|
-
- Fixed native folder selection from the Tauri production app's localhost
|
|
1743
|
-
webview and added visible fallback feedback when the picker is unavailable.
|
|
1744
|
-
- Removed negative letter spacing from updated frontend shell styling.
|
|
1745
|
-
|
|
1746
|
-
## [8.5.0] - 2026-07-01
|
|
1747
|
-
|
|
1748
|
-
### Added
|
|
1749
|
-
- ToolRegistry now reports `ready: true` with full handler/governance/description alignment (added `vision_analyze` policy and description).
|
|
1750
|
-
- `tz_name` now flows from central `Config` into `TriggerService` (via updated automation and platform wiring runtimes) for better DI and Config centralization.
|
|
1751
|
-
|
|
1752
|
-
### Changed
|
|
1753
|
-
- Full codebase scan completed; improvements prioritized per AGENTS.md (registry, config injection, wiring seams).
|
|
1754
|
-
- Version bumped to 8.5.0 across pyproject.toml, package.json, vscode-extension; all current-release doc references synchronized.
|
|
1755
|
-
- Documentation sync performed for README, RELEASE.md, docs/CHANGELOG.md and Current release markers.
|
|
1756
|
-
|
|
1757
|
-
### Fixed
|
|
1758
|
-
- Eliminated ToolRegistry drift for `vision_analyze` (handler existed in tools/ but missing from core registry governance surface used by diagnostics, MCP, and permission views).
|
|
1759
|
-
|
|
1760
|
-
## [8.4.0] - 2026-07-01
|
|
1761
|
-
|
|
1762
|
-
### Added
|
|
1763
|
-
- Added a chat-to-agent file action gate so explicit file create/write/save/edit
|
|
1764
|
-
requests from Brain Chat execute through the governed workspace file tool.
|
|
1765
|
-
- Added regression coverage that verifies `/chat` routes file creation intent to
|
|
1766
|
-
the workspace file tool and returns created artifact metadata.
|
|
1767
|
-
|
|
1768
|
-
### Changed
|
|
1769
|
-
- Kept ordinary Q&A on `/chat` while routing only explicit side-effect file
|
|
1770
|
-
requests into the planner/executor/reviewer tool loop.
|
|
1771
|
-
- Synchronized package/runtime/static/Tauri metadata and current-release docs to
|
|
1772
|
-
8.4.0.
|
|
1773
|
-
|
|
1774
|
-
### Fixed
|
|
1775
|
-
- Allowed literal `/chat` file writes with user-provided content to execute
|
|
1776
|
-
before model loading, while still using a loaded model when content must be
|
|
1777
|
-
synthesized.
|
|
1778
|
-
- Narrowed file target and content parsing to avoid treating surrounding prose
|
|
1779
|
-
as the workspace path or literal file body.
|
|
1780
|
-
- Restored model loading dependency exports after the runtime/loading split so
|
|
1781
|
-
`/models/load` can prepare local MLX models again.
|
|
1782
|
-
- Added the common Gemma 4 26B shorthand alias to the canonical
|
|
1783
|
-
`mlx-community/gemma-4-26b-a4b-it-4bit` model id.
|
|
1784
|
-
- Updated the local server launcher to run `python -m uvicorn` from the active
|
|
1785
|
-
virtual environment, avoiding stale console-script interpreter bindings.
|
|
1786
|
-
|
|
1787
|
-
## [8.3.0] - 2026-07-01
|
|
1788
|
-
|
|
1789
|
-
### Added
|
|
1790
|
-
- Added a managed legacy compatibility report for remaining root shims,
|
|
1791
|
-
including owners, replacements, reasons, removal phases, and readiness
|
|
1792
|
-
metrics.
|
|
1793
|
-
- Added AgentRuntime/workflow maturity evidence through lifecycle helper reuse,
|
|
1794
|
-
legacy event compatibility, WorkflowEngine boundary/config inspection, and
|
|
1795
|
-
centralized legacy workflow step projection.
|
|
1796
|
-
- Added graph ingestion coverage for upload-to-pipeline behavior and
|
|
1797
|
-
workspace-safe duplicate content.
|
|
1798
|
-
- Added 8.3.0 onboarding and community/plugin growth documentation.
|
|
1799
|
-
|
|
1800
|
-
### Changed
|
|
1801
|
-
- Routed `/knowledge-graph/ingest` through the unified `IngestionPipeline` when
|
|
1802
|
-
available, preserving provenance and hook lifecycle behavior for MCP notes and
|
|
1803
|
-
messages.
|
|
1804
|
-
- Isolated text/web/note graph node identity by workspace while preserving the
|
|
1805
|
-
content hash used for duplicate detection.
|
|
1806
|
-
- Converted `mcp_registry.py` and `llm_router.py` into physical module aliases
|
|
1807
|
-
for their current implementations.
|
|
1808
|
-
- Improved upload client error handling so failed uploads cannot look
|
|
1809
|
-
successful.
|
|
1810
|
-
- Synchronized package/runtime/static/Tauri metadata and current-release docs to
|
|
1811
|
-
8.3.0.
|
|
1812
|
-
|
|
1813
|
-
### Upgrade Notes
|
|
1814
|
-
- Existing legacy-global text/web/note graph nodes are not rewritten in place.
|
|
1815
|
-
Re-ingesting the same content with a workspace id can create a separate
|
|
1816
|
-
workspace-scoped node; re-index existing sources after upgrading when you want
|
|
1817
|
-
provenance to converge on workspace scopes.
|
|
1818
|
-
|
|
1819
|
-
## [8.2.0] - 2026-06-27
|
|
1820
|
-
|
|
1821
|
-
### Added
|
|
1822
|
-
- Added an evidence-backed Brain Brief to Brain Home so users can see what to
|
|
1823
|
-
notice, what evidence supports it, and what action to take next.
|
|
1824
|
-
- Added `GET /api/memory/brain-brief`, backed by `MemoryService.brain_brief()`,
|
|
1825
|
-
with honest empty-state guidance and recall/graph/model-proof actions.
|
|
1826
|
-
- Added unit coverage for Brain Brief service behavior and the memory API route.
|
|
1827
|
-
|
|
1828
|
-
### Changed
|
|
1829
|
-
- Completed the remaining model loading/runtime extraction into
|
|
1830
|
-
`model_loading.py` and `model_engines.py` while preserving compatibility
|
|
1831
|
-
delegations from `model_runtime.py`.
|
|
1832
|
-
- Extracted WorkspaceOS graph trace, agent/workflow run, skill, and snapshot
|
|
1833
|
-
comparison ownership into focused manager modules.
|
|
1834
|
-
- Wired Knowledge Graph embedding dimensions from the central resolved `Config`
|
|
1835
|
-
embedder at app startup.
|
|
1836
|
-
- Synchronized Python, npm, VS Code extension, Tauri, workspace, readiness,
|
|
1837
|
-
static asset, and current-release documentation versions to 8.2.0.
|
|
1838
|
-
|
|
1839
|
-
## [8.1.0] - 2026-06-27
|
|
1840
|
-
|
|
1841
|
-
### Changed
|
|
1842
|
-
- Rebuilt Brain Home around an intuitive first screen with LivingBrain, recent
|
|
1843
|
-
memory, connected topic, next-best action, and the composer visible together.
|
|
1844
|
-
- Replaced dashboard-style Brain growth metrics with narrative, product-facing
|
|
1845
|
-
copy and focused primary actions.
|
|
1846
|
-
- Tightened mobile and narrow viewport behavior so the Brain and composer remain
|
|
1847
|
-
visible without horizontal overflow.
|
|
1848
|
-
- Refreshed release screenshots, walkthrough GIF/WebM, static app assets, and
|
|
1849
|
-
exact 8.1.0 artifact metadata.
|
|
1850
|
-
- Synchronized Python, npm, VS Code extension, Tauri, workspace, readiness, and
|
|
1851
|
-
current-release documentation versions to 8.1.0.
|
|
1852
|
-
|
|
1853
|
-
## [8.0.0] - 2026-06-24
|
|
1854
|
-
|
|
1855
|
-
### Changed
|
|
1856
|
-
- Added `lattice-architecture-contract/v1` to make the AgentRuntime,
|
|
1857
|
-
ToolRegistry, Config, server decomposition, and Knowledge Graph stabilization
|
|
1858
|
-
boundaries explicit and testable for the major architecture line.
|
|
1859
|
-
- Added `tool-registry-contract/v1` to the ToolRegistry manifest, including
|
|
1860
|
-
dispatch, policy, and permission ownership.
|
|
1861
|
-
- Updated architecture and product readiness targets to 8.0.0.
|
|
1862
|
-
- Synchronized package/runtime/static/Tauri metadata to 8.0.0.
|
|
1863
|
-
- Updated current-release docs and exact artifact names to 8.0.0 while
|
|
1864
|
-
setting 8.0.0 as the oldest retained release-history entry.
|
|
1865
|
-
|
|
1866
|
-
### Fixed
|
|
1867
|
-
- Made logical Knowledge Graph `replace` imports transactional so malformed
|
|
1868
|
-
imports roll back without clearing the existing graph.
|
|
1869
|
-
- Locked v2 read-equivalence coverage for `list_documents`, `get_node`,
|
|
1870
|
-
`relationship_search`, and `traverse`.
|
|
1871
|
-
- Preserved colliding legacy edge labels during logical import/backfill while
|
|
1872
|
-
keeping native write-door synonym dedupe canonical.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Community And Plugins
|
|
2
2
|
|
|
3
|
-
Current release: **
|
|
3
|
+
Current release: **11.0.1 — Both Branches**.
|
|
4
4
|
|
|
5
5
|
LatticeAI defines the path from a strong local-first framework (8.4.0
|
|
6
6
|
action-aware baseline, 8.5.0 registry+DI hardening, 8.6.0 capture/navigation
|
package/docs/DEVELOPMENT.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> **Status: canonical** — current contributor guidance, kept in sync with the
|
|
4
4
|
> current release.
|
|
5
5
|
|
|
6
|
-
Current release: **
|
|
6
|
+
Current release: **11.0.1 — Both Branches**.
|
|
7
7
|
|
|
8
8
|
This document is for contributors working on the local-first Digital Brain
|
|
9
9
|
codebase. Product positioning and quick start stay in `README.md`; release
|
package/docs/ONBOARDING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Lattice AI Onboarding
|
|
2
2
|
|
|
3
|
-
Current release: **
|
|
3
|
+
Current release: **11.0.1 — Both Branches**.
|
|
4
4
|
|
|
5
5
|
The first-run goal is a five-minute path from "I opened the app" to "my Brain
|
|
6
6
|
has a source, a question, and proof." This page is the product contract behind
|
package/docs/OPERATIONS.md
CHANGED
package/docs/PERFORMANCE.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
# Knowledge Graph Performance Baseline
|
|
2
2
|
|
|
3
|
-
> **Status:
|
|
4
|
-
>
|
|
5
|
-
>
|
|
6
|
-
>
|
|
7
|
-
>
|
|
8
|
-
>
|
|
9
|
-
> these as 9.8.0 numbers.
|
|
3
|
+
> **Status: mixed provenance — read the date on each table.** The
|
|
4
|
+
> `scripts/profile_kg.py` tables were last captured on the v9.6.0 working tree
|
|
5
|
+
> and are carried forward as the regression reference; regenerate them before
|
|
6
|
+
> treating them as current. The **vector index backend** table is a fresh
|
|
7
|
+
> 11.1.0 measurement (2026-08-10) from `scripts/bench_vector_index.py`, and
|
|
8
|
+
> says so inline.
|
|
10
9
|
|
|
11
10
|
Synthetic performance and memory baseline for `KnowledgeGraphStore`
|
|
12
11
|
(`lattice_brain/graph/`). Measured with `scripts/profile_kg.py`.
|
|
@@ -92,6 +91,78 @@ Keyword search p50 grew ~3.6x but stays under 5 ms.
|
|
|
92
91
|
Regenerate with `.venv/bin/python scripts/profile_kg.py` after graph-layer
|
|
93
92
|
changes and compare against these tables.
|
|
94
93
|
|
|
94
|
+
## Vector index backends (11.1.0)
|
|
95
|
+
|
|
96
|
+
`scripts/bench_vector_index.py` measures the three selectable backends
|
|
97
|
+
(`LATTICEAI_VECTOR_INDEX`) against each other. It answers two questions
|
|
98
|
+
together, because either one alone is misleading: **how fast** each backend
|
|
99
|
+
answers, and **how much of the exact answer it returns** (recall@10 against
|
|
100
|
+
the brute-force scan, which is ground truth by construction).
|
|
101
|
+
|
|
102
|
+
Methodology, and what it does not cover:
|
|
103
|
+
|
|
104
|
+
- The corpus is synthetic — deterministic pseudo-text from a fixed vocabulary
|
|
105
|
+
(English + Korean) embedded with the built-in hash embedder. Real embeddings
|
|
106
|
+
cluster differently, so the recall figures are an upper bound for a
|
|
107
|
+
well-separated corpus, not a promise about your notes.
|
|
108
|
+
- Rows are written straight into `vector_embeddings`. This measures the
|
|
109
|
+
**search** path only; ingestion throughput stays in the tables above.
|
|
110
|
+
- Latency and memory are measured in separate passes. tracemalloc roughly
|
|
111
|
+
triples Python allocation cost, so timing under it would measure the
|
|
112
|
+
profiler — the `peak MB` column comes from one extra traced query.
|
|
113
|
+
- `first ms` is the *first* query after the corpus changed. For `hnsw` that is
|
|
114
|
+
where the graph gets built and the `.hnsw` sidecar written; for the other two
|
|
115
|
+
it is an ordinary query.
|
|
116
|
+
- `hybrid p50` is `hybrid_search` (lexical + vector fusion) on that backend —
|
|
117
|
+
the number a user's question actually pays.
|
|
118
|
+
- The candidate cap is **lifted** (`--max-candidates 0`). This matters more
|
|
119
|
+
than it sounds: with the product default of 10 000, the exact scan on a
|
|
120
|
+
larger index silently becomes "the newest 10 000 rows", and recall@10 would
|
|
121
|
+
then be measured against a baseline that never looked at most of the corpus.
|
|
122
|
+
The first 50k run made exactly that mistake and scored HNSW at 0.18 — not
|
|
123
|
+
because it missed anything, but because the two backends had searched
|
|
124
|
+
different candidate sets. The `trunc` column now reports whether any query
|
|
125
|
+
hit a cap.
|
|
126
|
+
|
|
127
|
+
Run it:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
.venv/bin/python scripts/bench_vector_index.py # 10k vectors
|
|
131
|
+
.venv/bin/python scripts/bench_vector_index.py --nodes 1000 # quick
|
|
132
|
+
.venv/bin/python scripts/bench_vector_index.py --json # machine-readable
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Measured, 2026-08-10 — 10 000 vectors, 30 queries, top_k 10
|
|
136
|
+
|
|
137
|
+
macOS 27 (arm64, Apple Silicon), Python 3.14.5, SQLite 3.53.1,
|
|
138
|
+
hnswlib 0.8.0, uncapped candidates, corpus build 2.12 s.
|
|
139
|
+
|
|
140
|
+
| backend | p50 ms | p95 ms | first ms | peak MB | recall@10 | hybrid p50 ms |
|
|
141
|
+
|-----------|-------:|-------:|---------:|--------:|----------:|--------------:|
|
|
142
|
+
| brute | 288.89 | 291.95 | 290.68 | 39.72 | 1.000 | 296.63 |
|
|
143
|
+
| quantized | 639.47 | 645.93 | 653.31 | 38.38 | 0.987 | 639.83 |
|
|
144
|
+
| hnsw | 21.53 | 22.11 | 795.84 | 0.74 | 0.953 | 24.37 |
|
|
145
|
+
|
|
146
|
+
What the table says, plainly:
|
|
147
|
+
|
|
148
|
+
- **The default is exact and slow.** 289 ms per query at 10k, and hybrid
|
|
149
|
+
inherits nearly all of it (297 ms) — the vector channel *is* the cost.
|
|
150
|
+
- **HNSW meets the 11.1.0 target and prices it.** Hybrid p50 **24.4 ms** at 10k
|
|
151
|
+
(target: < 50 ms), a 12x improvement, in exchange for **4.7% of the exact
|
|
152
|
+
top-10 going missing**. That is the trade, stated as a number rather than as
|
|
153
|
+
the word "approximate". Its 0.74 MB peak is the two-phase lookup: it reads
|
|
154
|
+
only the ten rows it returns, where the exact scan reads all 10 000.
|
|
155
|
+
- **The 796 ms first query is the graph build**, paid once per index generation
|
|
156
|
+
and then persisted to the `.hnsw` sidecar. Any write to `vector_embeddings`
|
|
157
|
+
invalidates the fingerprint and buys that cost again, which is why `brute`
|
|
158
|
+
stays the default for a continuously-ingesting brain.
|
|
159
|
+
- **Quantized is currently the wrong choice on every axis.** ~2.2x the latency
|
|
160
|
+
for 0.987 recall, and its RAM advantage does not materialise (38.4 vs
|
|
161
|
+
39.7 MB): the exact scan already feeds the index in bounded batches, so
|
|
162
|
+
resident vectors were never the dominant term — the fetched SQLite rows are.
|
|
163
|
+
It ships as an honest, exhaustive backend and as the representation a held
|
|
164
|
+
cross-query index would need. It is not a recommendation.
|
|
165
|
+
|
|
95
166
|
## Observations
|
|
96
167
|
|
|
97
168
|
- Keyword `search()` / `context_for_query()` stay low-millisecond thanks to
|
package/docs/TRUST_MODEL.md
CHANGED
package/docs/WHY_LATTICE.md
CHANGED