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.
Files changed (126) hide show
  1. package/README.md +46 -64
  2. package/docs/CHANGELOG.md +72 -237
  3. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  4. package/docs/DEVELOPMENT.md +1 -1
  5. package/docs/ONBOARDING.md +1 -1
  6. package/docs/OPERATIONS.md +1 -1
  7. package/docs/PERFORMANCE.md +78 -7
  8. package/docs/TRUST_MODEL.md +1 -1
  9. package/docs/WHY_LATTICE.md +1 -1
  10. package/docs/kg-schema.md +1 -1
  11. package/docs/v11.1.0_PRODUCT_INTELLIGENCE_PLAN.md +313 -0
  12. package/lattice_brain/__init__.py +1 -1
  13. package/lattice_brain/graph/_kg_contract.py +11 -0
  14. package/lattice_brain/graph/curator.py +1 -1
  15. package/lattice_brain/graph/fusion.py +184 -3
  16. package/lattice_brain/graph/proactive.py +138 -1
  17. package/lattice_brain/graph/projection.py +10 -2
  18. package/lattice_brain/graph/retrieval.py +137 -7
  19. package/lattice_brain/graph/retrieval_docgen.py +20 -20
  20. package/lattice_brain/graph/retrieval_policy.py +6 -0
  21. package/lattice_brain/graph/retrieval_reads.py +188 -1
  22. package/lattice_brain/graph/retrieval_vector.py +474 -110
  23. package/lattice_brain/graph/schema.py +125 -2
  24. package/lattice_brain/graph/vector_index/__init__.py +85 -0
  25. package/lattice_brain/graph/vector_index/base.py +170 -0
  26. package/lattice_brain/graph/vector_index/brute_force.py +114 -0
  27. package/lattice_brain/graph/vector_index/hnsw.py +293 -0
  28. package/lattice_brain/graph/vector_index/jobs.py +287 -0
  29. package/lattice_brain/graph/vector_index/quantized.py +151 -0
  30. package/lattice_brain/graph/vector_index/selector.py +131 -0
  31. package/lattice_brain/ingestion.py +50 -3
  32. package/lattice_brain/portability.py +654 -2
  33. package/lattice_brain/runtime/agent_runtime.py +1 -1
  34. package/lattice_brain/runtime/contracts.py +1 -1
  35. package/lattice_brain/runtime/multi_agent.py +1 -1
  36. package/lattice_brain/self_model.py +620 -0
  37. package/lattice_brain/synthesis.py +801 -0
  38. package/latticeai/__init__.py +1 -1
  39. package/latticeai/api/brain_intelligence.py +83 -1
  40. package/latticeai/api/chat_stream.py +4 -1
  41. package/latticeai/api/local_files.py +62 -0
  42. package/latticeai/api/models.py +1 -1
  43. package/latticeai/api/portability.py +130 -1
  44. package/latticeai/api/security_dashboard.py +48 -13
  45. package/latticeai/api/voice_capture.py +4 -1
  46. package/latticeai/api/workspace.py +11 -5
  47. package/latticeai/core/embedding_providers.py +20 -1
  48. package/latticeai/core/legacy_compatibility.py +1 -1
  49. package/latticeai/core/marketplace.py +1 -1
  50. package/latticeai/core/messages.py +14 -0
  51. package/latticeai/core/model_compat.py +2 -2
  52. package/latticeai/core/tool_registry.py +0 -7
  53. package/latticeai/core/workspace_os_constants.py +1 -1
  54. package/latticeai/core/workspace_os_utils.py +4 -50
  55. package/latticeai/core/workspace_review_items.py +12 -1
  56. package/latticeai/integrations/telegram_bot.py +28 -10
  57. package/latticeai/models/router.py +1 -1
  58. package/latticeai/runtime/access_runtime.py +1 -1
  59. package/latticeai/runtime/network_boundary_wiring.py +9 -5
  60. package/latticeai/runtime/permission_mode_wiring.py +9 -6
  61. package/latticeai/runtime/router_registration.py +3 -0
  62. package/latticeai/services/architecture_readiness.py +1 -1
  63. package/latticeai/services/brain_intelligence.py +253 -0
  64. package/latticeai/services/memory_service.py +1 -1
  65. package/latticeai/services/model_catalog.py +4 -3
  66. package/latticeai/services/model_engines.py +28 -14
  67. package/latticeai/services/obsidian_bridge.py +618 -0
  68. package/latticeai/services/product_readiness.py +5 -3
  69. package/latticeai/tools/filesystem.py +4 -1
  70. package/package.json +1 -1
  71. package/scripts/bench_vector_index.py +295 -0
  72. package/scripts/check_current_release_docs.mjs +4 -2
  73. package/scripts/release_screen_claims.json +31 -0
  74. package/src-tauri/Cargo.lock +1 -1
  75. package/src-tauri/Cargo.toml +1 -1
  76. package/src-tauri/tauri.conf.json +1 -1
  77. package/static/app/asset-manifest.json +37 -37
  78. package/static/app/assets/{Act-CS9IeqUX.js → Act-D4zSxFR-.js} +1 -1
  79. package/static/app/assets/{AdminConsole-3UkIEWGA.js → AdminConsole-w5jBfPt2.js} +1 -1
  80. package/static/app/assets/{Brain-B22EmNqS.js → Brain-C2EqQg74.js} +2 -2
  81. package/static/app/assets/BrainHome-CvXS6XiQ.js +2 -0
  82. package/static/app/assets/BrainSignals-DOE_KhOU.js +1 -0
  83. package/static/app/assets/Capture-DPqpGK8d.js +1 -0
  84. package/static/app/assets/{CommandPalette-86m4FCcN.js → CommandPalette-CNf7h5fp.js} +1 -1
  85. package/static/app/assets/Library-BN0HYOfc.js +1 -0
  86. package/static/app/assets/LivingBrain-Dfq_wEDI.js +1 -0
  87. package/static/app/assets/ProductFlow-B-3O0rNV.js +1 -0
  88. package/static/app/assets/{ReviewCard-BepjSDpN.js → ReviewCard-gZ-tdqFM.js} +1 -1
  89. package/static/app/assets/System-BElUcSSw.js +1 -0
  90. package/static/app/assets/arrow-left-CFNIMjhv.js +1 -0
  91. package/static/app/assets/{bot-DQj0-LkM.js → bot--qYHMtkP.js} +1 -1
  92. package/static/app/assets/brain-DDCLjRqO.js +1 -0
  93. package/static/app/assets/{button-CmTknyAP.js → button-51Z3rsuv.js} +1 -1
  94. package/static/app/assets/{circle-pause-yTCWRziJ.js → circle-pause-CMIiMaQl.js} +1 -1
  95. package/static/app/assets/{circle-play-Ccrva84R.js → circle-play-DZoO_cfG.js} +1 -1
  96. package/static/app/assets/{cpu-CbJqWTlS.js → cpu-Bs6uc9W9.js} +1 -1
  97. package/static/app/assets/{download-CkSzbzU-.js → download-G-2olkWz.js} +1 -1
  98. package/static/app/assets/{folder-open-CKyjQ4PU.js → folder-open-CTOspnmb.js} +1 -1
  99. package/static/app/assets/{hard-drive-DAzk9um0.js → hard-drive-CewHWJhn.js} +1 -1
  100. package/static/app/assets/index-CkzokZAj.css +2 -0
  101. package/static/app/assets/{index-CxOcwsHV.js → index-D7Rr-J2Y.js} +3 -3
  102. package/static/app/assets/{input-DcMETmZ7.js → input-D4w_BZWl.js} +1 -1
  103. package/static/app/assets/{permissionCopy-BVf13_25.js → permissionCopy-CosBEXAZ.js} +1 -1
  104. package/static/app/assets/primitives-d0g9pvzS.js +1 -0
  105. package/static/app/assets/search-BLCYt75v.js +1 -0
  106. package/static/app/assets/{share-2-COWCHNZm.js → share-2-NmD7e_oV.js} +1 -1
  107. package/static/app/assets/{shield-alert-BDrvilyK.js → shield-alert-CcQeMuju.js} +1 -1
  108. package/static/app/assets/{textarea-rUmsc8cP.js → textarea-BPAJDc-0.js} +1 -1
  109. package/static/app/assets/{useFocusTrap-Bi5UY_8v.js → useFocusTrap-C7YLdTBC.js} +1 -1
  110. package/static/app/assets/{useQuery-C-AicB-3.js → useQuery-DRyD9opW.js} +1 -1
  111. package/static/app/assets/{utils-BMwWg78e.js → utils-DG1_ExrP.js} +3 -3
  112. package/static/app/assets/{workspace-Y93tls8P.js → workspace-CWVf3gsI.js} +1 -1
  113. package/static/app/index.html +4 -4
  114. package/static/sw.js +1 -1
  115. package/static/app/assets/BrainHome-CMDqgJF4.js +0 -2
  116. package/static/app/assets/BrainSignals-BeE8RJo3.js +0 -1
  117. package/static/app/assets/Capture-ZX9bQh68.js +0 -1
  118. package/static/app/assets/Library-Bhz5LUca.js +0 -1
  119. package/static/app/assets/LivingBrain-BSa0wpFG.js +0 -1
  120. package/static/app/assets/ProductFlow-IP4Q-5aQ.js +0 -1
  121. package/static/app/assets/System-Bwx1h_jT.js +0 -1
  122. package/static/app/assets/arrow-left-ig7AZU8B.js +0 -1
  123. package/static/app/assets/brain-D8OEwmVj.js +0 -1
  124. package/static/app/assets/index-BfD-jhA9.css +0 -2
  125. package/static/app/assets/primitives-CQV9Q2YM.js +0 -1
  126. package/static/app/assets/search-CXGASMMH.js +0 -1
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![CI Status](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml)
12
12
  [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
13
13
 
14
- ![v10.9.0 Living Brain walkthrough](output/release/v10.9.0/gifs/v10.9.0-living-brain-walkthrough.gif)
14
+ ![v11.0.1 Living Brain walkthrough](output/release/v11.0.1/gifs/v11.0.1-living-brain-walkthrough.gif)
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 ![Brain Chat](output/release/v10.9.0/screenshots/04-brain-chat-home.png) | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v10.9.0/screenshots/05-memory-graph.png) |
28
- | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v10.9.0/screenshots/06-capture.png) | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v10.9.0/screenshots/12-review-center.png) |
29
- | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v10.9.0/screenshots/02-recommended-models.png) | **Stay in control** — audit, roles, retention in a separate admin surface ![Admin Console](output/release/v10.9.0/screenshots/10-admin-console.png) |
30
- | **Watch a file become memory** — three named steps, not a pipeline diagram ![Material to memory](output/release/v10.9.0/screenshots/11-knowledge-journey.png) | **Say how much it may do alone** — one dial in plain words; dangerous actions stay blocked either way ![Settings](output/release/v10.9.0/screenshots/08-system.png) |
27
+ | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory ![Brain Chat](output/release/v11.0.1/screenshots/04-brain-chat-home.png) | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v11.0.1/screenshots/05-memory-graph.png) |
28
+ | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v11.0.1/screenshots/06-capture.png) | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v11.0.1/screenshots/12-review-center.png) |
29
+ | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v11.0.1/screenshots/02-recommended-models.png) | **Stay in control** — audit, roles, retention in a separate admin surface ![Admin Console](output/release/v11.0.1/screenshots/10-admin-console.png) |
30
+ | **Watch a file become memory** — three named steps, not a pipeline diagram ![Material to memory](output/release/v11.0.1/screenshots/11-knowledge-journey.png) | **Say how much it may do alone** — one dial in plain words; dangerous actions stay blocked either way ![Settings](output/release/v11.0.1/screenshots/08-system.png) |
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
- | ![Login](output/release/v10.9.0/screenshots/01-login.png) | ![Model install](output/release/v10.9.0/screenshots/03-install-load-progress.png) | ![Model library](output/release/v10.9.0/screenshots/07-model-library.png) |
61
+ | ![Login](output/release/v11.0.1/screenshots/01-login.png) | ![Model install](output/release/v11.0.1/screenshots/03-install-load-progress.png) | ![Model library](output/release/v11.0.1/screenshots/07-model-library.png) |
62
62
 
63
63
  Screenshot index and capture notes:
64
- [output/release/v10.9.0/SCREENSHOT_INDEX.md](output/release/v10.9.0/SCREENSHOT_INDEX.md)
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 **10.9.0 — Never Blocks**:
69
-
70
- Lattice AI runs one event loop on your computer. Several things you could ask
71
- it to do were being done *on* that loop, so while they ran the server could not
72
- answer anything else. Downloading a model has a fifteen-minute timeout; that is
73
- how long the whole product could be frozen by one click.
74
-
75
- - **Nothing long runs on the event loop.** Model pulls, engine installs, MCP
76
- package installs and the CPU/RAM probe behind the System screen all moved to
77
- a worker thread. `/local/sysinfo` is the one most people met without knowing:
78
- it is read by the System screen *and* by first-run analysis, so its ~2s
79
- freeze landed exactly while an answer was streaming. Two things keep it
80
- fixed — ruff's `ASYNC` blocking-call rules, and
81
- `tests/unit/test_event_loop_not_blocked.py`, which runs a ticker coroutine
82
- during the handler and asserts the loop kept getting control.
83
- - **A focus ring you can see.** 10.8.0 added `border-color` to the transition
84
- on the capture pills, so keyboard focus faded in over 150ms and at the
85
- instant it landed the pill still looked idle. Focus rings may not ease.
86
- - **The Brain stops thinking when it has answered.** A retrieval pulse parked a
87
- 900ms timer that put the organism back into "thinking"; if the answer
88
- finished inside that window the timer still fired, and the Brain sat visibly
89
- working on a question it had already answered.
90
- - **One language, further in.** Fourteen more routers moved to the message
91
- catalog — chat, memory, graph, files, portability, review, models, tools,
92
- MCP, setup. `models.py`, `mcp.py` and `tools.py` had been answering some
93
- errors in Korean and others in English on the same screen. Two gates keep
94
- them migrated, and a third fails if the two gates disagree.
95
- - **The welcome screen fits.** It measured 770px against a 747px viewport, so
96
- the line explaining what you are agreeing to sat under the fold. Nothing was
97
- removed; the whitespace gave back the 25px.
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 10.9.0 release must use exact filenames:
101
+ Expected artifacts for 11.0.1 release must use exact filenames:
113
102
 
114
- - `dist/ltcai-10.9.0-py3-none-any.whl`
115
- - `dist/ltcai-10.9.0.tar.gz`
116
- - `ltcai-10.9.0.tgz`
117
- - `dist/ltcai-10.9.0.vsix`
118
- - `src-tauri/target/release/bundle/dmg/Lattice AI_10.9.0_aarch64.dmg`
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: **10.9.0 — Never Blocks**.
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
@@ -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: **10.9.0 — Never Blocks**.
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
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Onboarding
2
2
 
3
- Current release: **10.9.0 — Never Blocks**.
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
@@ -1,4 +1,4 @@
1
- # Lattice AI — Operations Guide (v10.9.0)
1
+ # Lattice AI — Operations Guide (v11.0.1)
2
2
 
3
3
  > **Status: canonical** — kept in sync with the current release. Storage layout
4
4
  > below reflects the SQLite live Brain store and workspace scoping, not the
@@ -1,12 +1,11 @@
1
1
  # Knowledge Graph Performance Baseline
2
2
 
3
- > **Status: reference** — a synthetic regression baseline, not a
4
- > current-release measurement. The numbers below were last captured on the
5
- > v9.6.0 working tree (see provenance line) and are carried forward as the
6
- > comparison reference. The 9.7.0-9.8.0 line added graph-layer paths
7
- > (`hybrid_search`, vector freshness, extraction-quality scoring), so
8
- > regenerate with `scripts/profile_kg.py` on the current tree before treating
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
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Trust Model
2
2
 
3
- Current release: **10.9.0 — Never Blocks**.
3
+ Current release: **11.0.1 — Both Branches**.
4
4
 
5
5
  Lattice AI is local-first, explicit about external communication, and honest
6
6
  when a capability is unavailable.
@@ -1,6 +1,6 @@
1
1
  # Why Lattice AI Exists
2
2
 
3
- Current release: **10.9.0 — Never Blocks**.
3
+ Current release: **11.0.1 — Both Branches**.
4
4
 
5
5
  **Lattice AI is a local-first Digital Brain that keeps your knowledge durable
6
6
  across any AI model.**
package/docs/kg-schema.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Knowledge Graph Schema
2
2
 
3
- Current release: **10.9.0 — Never Blocks**.
3
+ Current release: **11.0.1 — Both Branches**.
4
4
 
5
5
  명세 출처: `lattice_ai_full_spec.pptx` 슬라이드 20·21·22
6
6
  구현: `lattice_brain/graph/schema.py`