ltcai 3.5.0 → 4.0.0

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 (181) hide show
  1. package/README.md +73 -35
  2. package/docs/CARRYOVER_AUDIT_v3.6.0.md +61 -0
  3. package/docs/CHANGELOG.md +32 -0
  4. package/docs/HANDOVER_v3.6.0.md +46 -0
  5. package/docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md +49 -0
  6. package/docs/V4_BRAIN_ARCHITECTURE.md +322 -0
  7. package/docs/V4_DIGITAL_BRAIN_RECOVERY.md +509 -0
  8. package/docs/V4_IMPLEMENTATION_PLAN.md +470 -0
  9. package/docs/architecture.md +13 -12
  10. package/docs/kg-schema.md +102 -53
  11. package/docs/privacy.md +18 -2
  12. package/docs/security-model.md +17 -0
  13. package/kg_schema.py +139 -10
  14. package/knowledge_graph.py +874 -26
  15. package/knowledge_graph_api.py +11 -127
  16. package/latticeai/__init__.py +1 -1
  17. package/latticeai/api/admin.py +1 -1
  18. package/latticeai/api/agents.py +7 -1
  19. package/latticeai/api/auth.py +27 -4
  20. package/latticeai/api/browser.py +217 -0
  21. package/latticeai/api/chat.py +112 -76
  22. package/latticeai/api/health.py +1 -1
  23. package/latticeai/api/hooks.py +1 -1
  24. package/latticeai/api/knowledge_graph.py +146 -0
  25. package/latticeai/api/local_files.py +1 -1
  26. package/latticeai/api/mcp.py +23 -11
  27. package/latticeai/api/memory.py +1 -1
  28. package/latticeai/api/models.py +1 -1
  29. package/latticeai/api/network.py +81 -0
  30. package/latticeai/api/portability.py +93 -0
  31. package/latticeai/api/realtime.py +1 -1
  32. package/latticeai/api/search.py +26 -2
  33. package/latticeai/api/security_dashboard.py +2 -3
  34. package/latticeai/api/setup.py +2 -2
  35. package/latticeai/api/static_routes.py +2 -4
  36. package/latticeai/api/tools.py +3 -0
  37. package/latticeai/api/workflow_designer.py +46 -0
  38. package/latticeai/api/workspace.py +71 -49
  39. package/latticeai/app_factory.py +1710 -0
  40. package/latticeai/brain/__init__.py +18 -0
  41. package/latticeai/brain/context.py +213 -0
  42. package/latticeai/brain/conversations.py +236 -0
  43. package/latticeai/brain/identity.py +175 -0
  44. package/latticeai/brain/memory.py +102 -0
  45. package/latticeai/brain/network.py +205 -0
  46. package/latticeai/core/agent.py +31 -7
  47. package/latticeai/core/audit.py +0 -7
  48. package/latticeai/core/config.py +1 -1
  49. package/latticeai/core/context_builder.py +1 -2
  50. package/latticeai/core/enterprise.py +1 -1
  51. package/latticeai/core/graph_curator.py +2 -2
  52. package/latticeai/core/marketplace.py +1 -1
  53. package/latticeai/core/mcp_registry.py +791 -0
  54. package/latticeai/core/model_compat.py +1 -1
  55. package/latticeai/core/model_resolution.py +0 -1
  56. package/latticeai/core/multi_agent.py +238 -4
  57. package/latticeai/core/security.py +1 -1
  58. package/latticeai/core/sessions.py +37 -7
  59. package/latticeai/core/workflow_engine.py +114 -2
  60. package/latticeai/core/workspace_os.py +58 -10
  61. package/latticeai/models/__init__.py +7 -0
  62. package/latticeai/models/router.py +779 -0
  63. package/latticeai/server_app.py +29 -1504
  64. package/latticeai/services/agent_runtime.py +1 -0
  65. package/latticeai/services/app_context.py +75 -14
  66. package/latticeai/services/ingestion.py +318 -0
  67. package/latticeai/services/kg_portability.py +207 -0
  68. package/latticeai/services/memory_service.py +39 -11
  69. package/latticeai/services/model_runtime.py +2 -5
  70. package/latticeai/services/platform_runtime.py +100 -23
  71. package/latticeai/services/search_service.py +17 -8
  72. package/latticeai/services/tool_dispatch.py +12 -2
  73. package/latticeai/services/triggers.py +241 -0
  74. package/latticeai/services/upload_service.py +37 -12
  75. package/latticeai/services/workspace_service.py +31 -0
  76. package/llm_router.py +29 -772
  77. package/ltcai_cli.py +1 -2
  78. package/mcp_registry.py +25 -788
  79. package/p_reinforce.py +124 -14
  80. package/package.json +11 -8
  81. package/scripts/build_vsix.mjs +72 -0
  82. package/scripts/bump_version.py +99 -0
  83. package/scripts/generate_diagrams.py +0 -1
  84. package/scripts/lint_v3.mjs +82 -18
  85. package/scripts/validate_release_artifacts.py +0 -1
  86. package/scripts/wheel_smoke.py +142 -0
  87. package/server.py +11 -7
  88. package/setup_wizard.py +1142 -0
  89. package/static/account.html +2 -4
  90. package/static/admin.html +3 -5
  91. package/static/chat.html +3 -6
  92. package/static/graph.html +2 -4
  93. package/static/sw.js +81 -52
  94. package/static/v3/asset-manifest.json +20 -19
  95. package/static/v3/css/{lattice.base.e4cdd05d.css → lattice.base.49deefb5.css} +1 -1
  96. package/static/v3/css/lattice.base.css +1 -1
  97. package/static/v3/css/{lattice.components.9b49d614.css → lattice.components.cde18231.css} +1 -1
  98. package/static/v3/css/lattice.components.css +1 -1
  99. package/static/v3/css/{lattice.shell.8fcc9d33.css → lattice.shell.29d36d85.css} +1 -1
  100. package/static/v3/css/lattice.shell.css +1 -1
  101. package/static/v3/css/{lattice.tokens.e7018963.css → lattice.tokens.304cbc40.css} +3 -0
  102. package/static/v3/css/lattice.tokens.css +3 -0
  103. package/static/v3/css/{lattice.views.22f69117.css → lattice.views.0a18b6c5.css} +2 -2
  104. package/static/v3/css/lattice.views.css +2 -2
  105. package/static/v3/index.html +3 -4
  106. package/static/v3/js/{app.d086489d.js → app.356e6452.js} +1 -1
  107. package/static/v3/js/core/{api.12b568ad.js → api.7a308b89.js} +39 -1
  108. package/static/v3/js/core/api.js +38 -0
  109. package/static/v3/js/core/{routes.d214b399.js → routes.7222343d.js} +22 -22
  110. package/static/v3/js/core/routes.js +22 -22
  111. package/static/v3/js/core/{shell.d05266f5.js → shell.a1657f20.js} +4 -4
  112. package/static/v3/js/core/shell.js +1 -1
  113. package/static/v3/js/core/{store.34ebd5e6.js → store.204a08b2.js} +1 -1
  114. package/static/v3/js/core/store.js +1 -1
  115. package/static/v3/js/views/graph-canvas.17c15d65.js +509 -0
  116. package/static/v3/js/views/graph-canvas.js +509 -0
  117. package/static/v3/js/views/{hybrid-search.b22b97e0.js → hybrid-search.2fb63ed9.js} +1 -2
  118. package/static/v3/js/views/hybrid-search.js +1 -2
  119. package/static/v3/js/views/knowledge-graph.5e40cbeb.js +509 -0
  120. package/static/v3/js/views/knowledge-graph.js +326 -54
  121. package/static/vendor/chart.umd.min.js +20 -0
  122. package/static/vendor/fonts/inter-latin-300-normal.woff2 +0 -0
  123. package/static/vendor/fonts/inter-latin-400-normal.woff2 +0 -0
  124. package/static/vendor/fonts/inter-latin-500-normal.woff2 +0 -0
  125. package/static/vendor/fonts/inter-latin-600-normal.woff2 +0 -0
  126. package/static/vendor/fonts/inter-latin-700-normal.woff2 +0 -0
  127. package/static/vendor/fonts/inter-latin-800-normal.woff2 +0 -0
  128. package/static/vendor/fonts/inter.css +44 -0
  129. package/static/vendor/icons/tabler-icons.min.css +4 -0
  130. package/static/vendor/icons/tabler-icons.woff2 +0 -0
  131. package/static/vendor/marked.min.js +69 -0
  132. package/static/workspace.html +2 -2
  133. package/telegram_bot.py +1 -2
  134. package/tools/commands.py +4 -2
  135. package/tools/computer.py +1 -1
  136. package/tools/documents.py +1 -3
  137. package/tools/filesystem.py +0 -4
  138. package/tools/knowledge.py +1 -3
  139. package/tools/network.py +1 -3
  140. package/codex_telegram_bot.py +0 -195
  141. package/docs/assets/v3.4.0/agent-run.png +0 -0
  142. package/docs/assets/v3.4.0/agents.png +0 -0
  143. package/docs/assets/v3.4.0/before/chat-before.png +0 -0
  144. package/docs/assets/v3.4.0/before/files-before.png +0 -0
  145. package/docs/assets/v3.4.0/chat.png +0 -0
  146. package/docs/assets/v3.4.0/connect-folder.png +0 -0
  147. package/docs/assets/v3.4.0/files.png +0 -0
  148. package/docs/assets/v3.4.0/home.png +0 -0
  149. package/docs/assets/v3.4.0/hooks-dispatch.png +0 -0
  150. package/docs/assets/v3.4.0/knowledge-graph.png +0 -0
  151. package/docs/assets/v3.4.0/local-agent.png +0 -0
  152. package/docs/assets/v3.4.0/memory.png +0 -0
  153. package/docs/assets/v3.4.0/settings.png +0 -0
  154. package/docs/assets/v3.4.0/vision-input.png +0 -0
  155. package/docs/assets/v3.4.0/workflows.png +0 -0
  156. package/docs/assets/v3.4.1/e2e_runtime_log.txt +0 -42
  157. package/docs/assets/v3.4.1/hooks-dispatch.png +0 -0
  158. package/docs/assets/v3.4.1/local-agent.png +0 -0
  159. package/docs/images/admin-dashboard.png +0 -0
  160. package/docs/images/architecture.png +0 -0
  161. package/docs/images/enterprise.png +0 -0
  162. package/docs/images/graph.png +0 -0
  163. package/docs/images/hero.gif +0 -0
  164. package/docs/images/knowledge-graph.png +0 -0
  165. package/docs/images/lattice-ai-demo.gif +0 -0
  166. package/docs/images/lattice-ai-hero.png +0 -0
  167. package/docs/images/logo.svg +0 -33
  168. package/docs/images/mobile-responsive.png +0 -0
  169. package/docs/images/model-recommendation.png +0 -0
  170. package/docs/images/onboarding.png +0 -0
  171. package/docs/images/organization.png +0 -0
  172. package/docs/images/pipeline.png +0 -0
  173. package/docs/images/screenshot-admin.png +0 -0
  174. package/docs/images/screenshot-chat.png +0 -0
  175. package/docs/images/screenshot-graph.png +0 -0
  176. package/docs/images/skills.png +0 -0
  177. package/docs/images/workspace-dark.png +0 -0
  178. package/docs/images/workspace-light.png +0 -0
  179. package/docs/images/workspace.png +0 -0
  180. package/requirements.txt +0 -16
  181. package/static/v3/js/views/knowledge-graph.a14ea7e7.js +0 -237
package/README.md CHANGED
@@ -3,10 +3,11 @@
3
3
 
4
4
  # Lattice AI
5
5
 
6
- **Local-first AI workspace for your files, chats, knowledge, models, and agents.**
6
+ **A local-first Digital Brain Platform. Your Knowledge Graph is the durable asset; models just read it.**
7
7
 
8
- Keep your work context on your own machine. Connect documents, conversations,
9
- local models, graph memory, and agent workflows in one self-hosted workspace.
8
+ Every source files, folders, web pages, browser tabs converges into one
9
+ Knowledge Graph on your own machine. Connect models, agents, and search to that
10
+ graph instead of placing your work inside any single model.
10
11
  </div>
11
12
 
12
13
  <div align="center">
@@ -24,10 +25,21 @@
24
25
 
25
26
  ![Lattice AI — local-first AI workspace home](docs/assets/v3.4.0/home.png)
26
27
 
27
- > **Lattice AI is a self-hosted AI workspace that keeps your files, chats, knowledge, local models, and agents together on your own machine.**
28
+ > **Lattice AI is not a model-personalization system. It is a Digital Brain Platform.**
29
+ > The Knowledge Graph is your durable asset. **Models are replaceable. Knowledge is durable.**
28
30
 
29
- It isn't another chat window. It's a workspace built around your work local-first
30
- by default, cloud only when you choose.
31
+ It isn't another chat window, and it isn't a way to "fine-tune a model on you." The
32
+ purpose of Lattice AI is to **connect models to your Knowledge Graph** — your digital
33
+ brain — not to place you inside a model. AI reads your knowledge; you own it.
34
+
35
+ - **Models are replaceable.** Swap MLX, Ollama, LM Studio, or a cloud LLM at will.
36
+ - **Agents, RAG, and the UI are replaceable.** They are implementations, not the asset.
37
+ - **Your Knowledge Graph is durable.** It outlives every model and is yours to export,
38
+ import, and back up locally — no cloud required.
39
+
40
+ Local-first by default; cloud only when you choose. (The Vercel site is a
41
+ landing/download/demo surface only — never the runtime. Lattice AI runs on your
42
+ machine over local SQLite.)
31
43
 
32
44
  ## Why install Lattice AI?
33
45
 
@@ -44,8 +56,10 @@ workspace around the work itself:
44
56
  LM Studio; nothing leaves your machine unless you opt in.
45
57
  - **Use cloud models only when you choose** — bring an API key for cloud LLMs
46
58
  when you want them, not by default.
47
- - **Automate with agents you can inspect** — workflows leave behind plans,
48
- reviews, retries, and results you can replay.
59
+ - **Inspect every agent run** — the built-in runner persists plans, reviews,
60
+ retries, and results as replayable run records. Today that runner is
61
+ deterministic and does not call a model; LLM-driven execution is the v4
62
+ runtime, in progress.
49
63
 
50
64
  Lattice AI is not a clone of ChatGPT, Claude, Cursor, Obsidian, or Notion. It
51
65
  sits in a different place: a **workspace** that ties local/self-hosted AI, your
@@ -61,8 +75,8 @@ and workflows together — and runs on your own hardware.
61
75
  Knowledge Graph.
62
76
  - Run local models through MLX, Ollama, or LM Studio, and use cloud LLMs only when
63
77
  you want to.
64
- - Create repeatable agent workflows for research, coding, analysis, and
65
- documentation.
78
+ - Define agent workflows and replay their run records step by step (execution
79
+ is deterministic scaffolding today — it does not yet call a model).
66
80
  - Separate personal work from organization work.
67
81
  - Switch between Basic, Advanced, and Admin modes depending on your role.
68
82
 
@@ -96,12 +110,14 @@ chat and hybrid search.
96
110
  The Knowledge Graph shows how files, decisions, conversations, and entities
97
111
  connect — context that stays useful even when you switch models.
98
112
 
99
- ### Run agent workflows
113
+ ### Inspect agent run records
100
114
 
101
115
  ![Lattice AI agent run with roles, logs, review, and retry](docs/assets/v3.4.0/agent-run.png)
102
116
 
103
- Agents turn a goal into an inspectable run — roles, logs, review, and retry — that
104
- you can read back step by step.
117
+ The agent runner turns a goal into an inspectable, replayable run record — roles,
118
+ logs, review, and retry — that you can read back step by step. The runner shown
119
+ here is deterministic and LLM-free; real model-driven execution is the v4
120
+ runtime, currently in progress.
105
121
 
106
122
  ### Extend with hooks and the local runtime
107
123
 
@@ -187,32 +203,51 @@ npm run dev
187
203
 
188
204
  ## Latest Release
189
205
 
190
- ### v3.4.1Runtime Completion
191
-
192
- - Full hooks lifecycle across HTTP, agent, workflow, upload, and indexing paths.
193
- - Real Local Agent probes instead of hardcoded readiness.
194
- - Connect Folder verified end-to-end.
195
- - Folder Watch verified, including restore after restart.
196
-
197
- See [RELEASE_NOTES_v3.4.1.md](RELEASE_NOTES_v3.4.1.md) and
206
+ ### v3.6.0Knowledge Graph First
207
+
208
+ - **Unified ingestion pipeline** one entrypoint normalizes every source
209
+ (file, folder, web URL, browser tab, text/markdown/code) into the graph,
210
+ idempotent by content hash and bracketed by the `pre_tool`/`post_tool` hook
211
+ lifecycle.
212
+ - **Formalized entity/relationship model** — first-class `Source`, `Repository`,
213
+ `Meeting`, `Organization`, `Workflow`, `Agent` entities and `indexed_from`,
214
+ `modified_by`, `belongs_to_project`, `part_of`, `discussed_in`, `decided_by`,
215
+ `generated_by`, `used_by_agent` relationships.
216
+ - **Browser & web ingestion** — `POST /api/browser/read-url` and
217
+ `/ingest-current-tab`, plus a local Manifest V3 extension that posts only to
218
+ `127.0.0.1`.
219
+ - **Portability** — local Knowledge Graph export/import (versioned JSON) and
220
+ binary backup/restore (DB + blobs, integrity-checked). No cloud required.
221
+ - **Provenance** — every node records where it came from; a queryable audit trail
222
+ makes the graph explainable.
223
+ - **Knowledge Graph as the primary surface** — the view becomes your digital brain
224
+ with Status, Sources, Capture, and Backup tabs.
225
+
226
+ See [RELEASE_NOTES_v3.6.0.md](RELEASE_NOTES_v3.6.0.md),
227
+ [docs/kg-schema.md](docs/kg-schema.md),
228
+ [docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md](docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md), and
198
229
  [FEATURE_STATUS.md](FEATURE_STATUS.md).
199
230
 
200
- ## How it works
231
+ ## How it works — every source converges into the graph
232
+
233
+ As of v3.6.0, all data sources flow through **one unified ingestion pipeline** into
234
+ the Knowledge Graph — no source bypasses it, none becomes an isolated silo:
201
235
 
202
236
  ```text
203
- files / chats / notes / images / decisions
204
- -> workspace memory
205
- -> knowledge graph
206
- -> hybrid search
207
- -> chat / agents / workflows
208
- -> reusable outputs
237
+ source (file · folder · PDF · web URL · browser tab · text)
238
+ -> extraction -> normalization -> content hash (idempotent)
239
+ -> chunking -> entity detection -> relationship detection -> embedding
240
+ -> Knowledge Graph (Source -[indexed_from]- content -[contains]- chunks)
241
+ -> RAG / agents / memory / hybrid search
209
242
  ```
210
243
 
211
- - Your content stays on your machine and becomes durable workspace memory.
212
- - Memory is organized into a knowledge graph of entities and relationships.
213
- - Hybrid search fuses keyword, vector, and graph signals over that context.
214
- - Chat, agents, and workflows draw on the same grounded context.
215
- - Outputs documents, analysis, and decisions feed back into the workspace.
244
+ - **Every node is explainable.** Each ingested item carries provenance where it
245
+ came from, when, how it was processed, whether it was embedded or linked.
246
+ - **The graph is the asset.** Memory, search, and agents are views over it; models
247
+ read it. Swap a model and your knowledge is unchanged.
248
+ - **Portable, no cloud.** Export/import the graph as JSON, or take a full local
249
+ binary backup (DB + blobs) and restore it.
250
+ - **Local-first protects the graph.** It lives in local SQLite on your machine.
216
251
 
217
252
  For the deeper design, see [ARCHITECTURE.md](ARCHITECTURE.md) and
218
253
  [docs/architecture.md](docs/architecture.md).
@@ -247,16 +282,19 @@ For the deeper design, see [ARCHITECTURE.md](ARCHITECTURE.md) and
247
282
  ### Releases
248
283
 
249
284
  - [RELEASE_NOTES.md](RELEASE_NOTES.md) — current release notes
285
+ - [RELEASE_NOTES_v3.6.0.md](RELEASE_NOTES_v3.6.0.md)
286
+ - [RELEASE_NOTES_v3.5.0.md](RELEASE_NOTES_v3.5.0.md)
250
287
  - [RELEASE_NOTES_v3.4.1.md](RELEASE_NOTES_v3.4.1.md)
251
288
  - [RELEASE_NOTES_v3.4.0.md](RELEASE_NOTES_v3.4.0.md)
252
- - [RELEASE_NOTES_v3.3.0.md](RELEASE_NOTES_v3.3.0.md)
253
289
  - [CHANGELOG.md](CHANGELOG.md) and [docs/CHANGELOG.md](docs/CHANGELOG.md)
254
290
 
255
291
  ## Release History
256
292
 
257
293
  | Version | Theme |
258
294
  | --- | --- |
259
- | **3.4.1** | Runtime completionfull hooks lifecycle, real Local Agent probes, Connect Folder and Folder Watch verified end-to-end |
295
+ | **3.6.0** | Knowledge Graph First unified ingestion pipeline, formalized entity/relationship model, browser/web ingestion, local export/import/backup, provenance, KG as the primary surface |
296
+ | 3.5.0 | Foundation stabilization & verification — OIDC verifier, trusted-proxy gating, runtime hook coverage, `tools/` package, reproducible artifacts |
297
+ | 3.4.1 | Runtime completion — full hooks lifecycle, real Local Agent probes, Connect Folder and Folder Watch verified end-to-end |
260
298
  | 3.4.0 | Platform completion — hooks execution, uploads in Files, vision image input, agent run trigger, on-device Local Agent / Connect Folder / Folder Watch |
261
299
  | 3.3.1 | Visual product rebuild — rebuilt `/app` shell, Basic/Advanced/Admin navigation, refreshed design system |
262
300
  | **3.3.0** | Product quality & honesty release — evidence-based feature audit, single-source version truth, working document upload, documented design system |
@@ -0,0 +1,61 @@
1
+ # v3.5.0 → v3.6.0 Carry-Over Audit
2
+
3
+ **Date:** 2026-06-09
4
+ **Baseline:** v3.5.0 (tag published, GitHub Release live, CI + Visual Smoke green on `main`)
5
+ **Purpose:** Classify every open v3.5.0 carry-over risk as **blocking**, **non-blocking**, or
6
+ **obsolete** before starting v3.6.0 Knowledge Graph First work.
7
+
8
+ ## Headline
9
+
10
+ **No carry-over item blocks v3.6.0.** v3.5.0 was a stabilization/verification release that added no
11
+ product surface. Every documented limitation is either an intentional, honestly-labeled scope
12
+ boundary or a closed issue. KG work can start immediately on the existing local SQLite store.
13
+
14
+ ## Verified baseline state
15
+
16
+ | Check | Result | Evidence |
17
+ |---|---|---|
18
+ | `v3.5.0` git tag | exists | `git tag` |
19
+ | GitHub Release `v3.5.0` | published, not draft | `gh release view v3.5.0` |
20
+ | CI on `main` | success | `gh run list --branch main` (run 27155690240) |
21
+ | Visual Smoke on `main` | success | run 27155690270 |
22
+ | VSIX reproducibility fix | merged | commit `78deb95` |
23
+
24
+ ## Classified carry-over items
25
+
26
+ ### Blocking
27
+ *(none)*
28
+
29
+ ### Non-blocking
30
+
31
+ | Item | Why it does not block | Evidence |
32
+ |---|---|---|
33
+ | OIDC is RSA-only (RS256/384/512); ES*/HS*/`alg:none` rejected fail-closed | v3.6.0 KG work does not touch the SSO callback. EC support is additive when a provider needs it. | `latticeai/core/oidc.py:36` |
34
+ | Memory/KG maintenance endpoints (`/api/memory/{prune,compact,rebuild,clear}`) sit outside `pre_tool`/`post_tool` | Intentional, documented decision; these ops carry their own audit events. v3.6.0 follows the same convention and adds a coverage row rather than routing maintenance through `dispatch_tool`. | `docs/RUNTIME_HOOK_COVERAGE_v3.5.0.md:47` |
35
+ | Knowledge Graph is config-dependent on `LATTICEAI_ENABLE_GRAPH`, backed by a large `knowledge_graph.py` | This is the surface v3.6.0 builds on. Size/coupling is refactor context, addressed additively (new service modules, not a rewrite). | `FEATURE_STATUS.md:257-263` |
36
+ | Memory project/graph/vector tiers PARTIAL; prune/clear API-only (no UI) | KG-adjacent tiers v3.6.0 completes; honestly labeled, not broken. v3.6.0 adds the ingestion/export/provenance UI. | `FEATURE_STATUS.md:280-286` |
37
+ | Hybrid-search "fusion" explainer renders illustrative bars | Cosmetic placeholder; orthogonal to KG-first ingestion work. | `FEATURE_STATUS.md:249-251` |
38
+ | Chat grounding chips set state but `ChatRequest` drops them | Wiring grounding into generation is a natural KG-first feature; additive, not a blocker. | `FEATURE_STATUS.md:131-138` |
39
+ | CI action versions inconsistent (`ci.yml` `checkout@v4` vs `release.yml` `@v5`) | None are currently deprecated. Aligning is hygiene; addressed opportunistically. | `.github/workflows/ci.yml` |
40
+ | Live MCP tool calls + VLM inference PARTIAL (env/model dependent) | Honestly badged; orthogonal to KG-first work. | `FEATURE_STATUS.md:169-178,392` |
41
+
42
+ ### Obsolete
43
+
44
+ | Item | Why it is closed |
45
+ |---|---|
46
+ | "Hooks registered but not executing" (v3.3.0 issue) | v3.4.1 added real runners for all built-ins; v3.5.0 closed the last tool-path bypasses at 100% coverage. |
47
+ | Legacy `/account` `/admin` glassmorphism | Blur removed in v3.5.0 (`account.css:120`, `admin.css:48`). Remaining "not restyled" note is a deliberate scope boundary — these pages are outside the v3 SPA view set. |
48
+ | Vercel deployment returns HTTP 500 | Settled posture: Vercel is **landing/download/demo only, never runtime**. Lattice AI is local-first; the KG runs on local SQLite. Do not present any Vercel URL as a product surface. |
49
+ | CI syntax-gate staleness | Fixed in v3.5.0 by `scripts/check_python.py` (discover-based via `rglob`); new v3.6.0 modules are covered automatically with zero maintenance. |
50
+
51
+ ## v3.6.0 posture decisions taken from this audit
52
+
53
+ 1. **Build additively on the existing store.** Mirror the proven `tools.py → tools/` decomposition
54
+ pattern: preserve the import surface, add focused modules (`services/ingestion.py`,
55
+ `services/kg_portability.py`, `api/browser.py`, `api/portability.py`) rather than rewriting
56
+ `knowledge_graph.py`.
57
+ 2. **Route new ingestion paths through `dispatch_tool`** so `pre_tool`/`post_tool` fire — this is the
58
+ one v3.5.0 gap (no ingest path fired hooks). Maintenance ops stay audit-only by the documented
59
+ convention.
60
+ 3. **Keep Vercel landing-only and OIDC RSA-only** — settled, out of v3.6.0 scope.
61
+ 4. **Leave legacy `/account` `/admin` pages alone** — out of the local-first KG scope.
package/docs/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.6.0] - 2026-06-10
4
+
5
+ > Knowledge Graph First. The Knowledge Graph becomes the primary architecture:
6
+ > every data source converges into it through one unified ingestion pipeline, with
7
+ > formalized entities/relationships, browser/web inputs, local portability, and
8
+ > per-node provenance. Lattice AI is a Digital Brain Platform — the graph is the
9
+ > durable asset; models read it and are replaceable.
10
+
11
+ ### Added
12
+
13
+ - Unified ingestion pipeline (`latticeai/services/ingestion.py`): one entrypoint
14
+ for files, folders, web URLs, browser tabs, and text — idempotent by content
15
+ hash, bracketed by `pre_tool`/`post_tool`.
16
+ - Knowledge Graph entities `Source`/`Repository`/`Meeting`/`Organization`/
17
+ `Workflow`/`Agent` and relationships `indexed_from`/`modified_by`/
18
+ `belongs_to_project`/`part_of`/`discussed_in`/`decided_by`/`generated_by`/
19
+ `used_by_agent` (additive, lossless `from_legacy`).
20
+ - Browser & web ingestion routes (`/api/browser/read-url`, `/ingest-current-tab`)
21
+ and a Manifest V3 extension scaffold that posts only to `127.0.0.1`.
22
+ - Knowledge Graph export/import (versioned JSON) and binary backup/restore
23
+ (`latticeai/services/kg_portability.py`,
24
+ `/api/knowledge-graph/{export,import,backup,restore,portability,provenance}`).
25
+ - Provenance trail (`ingestion_provenance` table + query API) — every node is
26
+ explainable.
27
+ - Knowledge Graph UI tabs: Status, Sources, Capture, Backup.
28
+
29
+ ### Changed
30
+
31
+ - KG ingestion now fires the tool hook lifecycle (closes the v3.5.0 gap);
32
+ coverage documented in `docs/RUNTIME_HOOK_COVERAGE_v3.6.0.md`.
33
+ - README repositioned as a Digital Brain Platform; Vercel remains landing-only.
34
+
3
35
  ## [3.3.1] - 2026-06-08
4
36
 
5
37
  > v3.3.1 — Visual Product Rebuild. The `/app` frontend keeps the same runtime
@@ -0,0 +1,46 @@
1
+ # Lattice AI v3.6.0 — Completion Record (Knowledge Graph First)
2
+
3
+ **Status: ✅ RELEASED — 2026-06-10.** All planned scopes implemented, tested,
4
+ committed, pushed, CI green, tagged, and published. No external publish/deploy.
5
+
6
+ - **Tag:** `v3.6.0` → commit `3c85675`
7
+ - **GitHub Release:** https://github.com/TaeSooPark-PTS/LatticeAI/releases/tag/v3.6.0
8
+ (published, not draft; assets: `ltcai-3.6.0-py3-none-any.whl`,
9
+ `ltcai-3.6.0.tar.gz`, `ltcai-3.6.0.tgz`, `ltcai-3.6.0.vsix`)
10
+ - **CI:** main CI ✓, Visual Smoke ✓, release.yml (tag) ✓
11
+ - **Tests:** unit 455 passing · lint 64/64 · check:python 153 (3.11/3.12/3.14) ·
12
+ release artifacts built + validated
13
+
14
+ ## Commits (v3.5.0 → v3.6.0)
15
+
16
+ | Commit | Scope |
17
+ |---|---|
18
+ | `baa2bf6` | chore(audit) — v3.5.0 carry-over (0 blocking) |
19
+ | `5a6a7d4` | feat(kg) — entities/relationships schema |
20
+ | `135e81a` | feat(kg) — unified ingestion pipeline + provenance |
21
+ | `b548885` | feat(browser) — browser/web ingestion + MV3 extension |
22
+ | `39a7a0c` | feat(kg) — export/import/backup/restore |
23
+ | `21cfb97` | fix(runtime) — hook coverage for ingestion paths |
24
+ | `7009e39` | fix(ui) — Knowledge Graph as primary surface |
25
+ | `fa89a84` | docs(philosophy) — Digital Brain Platform rewrite |
26
+ | `aa011a5` | release: v3.6.0 (version bump) |
27
+ | `3c85675` | fix(ci) — 3.11-compatible f-string (PEP 701 quote reuse) |
28
+
29
+ ## Carry-over audit result
30
+
31
+ Zero blocking items. Settled postures preserved: Vercel landing-only, OIDC
32
+ RSA-only, legacy `/account` `/admin` out of scope. The one honest v3.5.0 gap (KG
33
+ ingestion not firing tool hooks) is **closed**. Full detail:
34
+ `docs/CARRYOVER_AUDIT_v3.6.0.md`.
35
+
36
+ ## Key facts for future work
37
+
38
+ - New seams: `latticeai/services/ingestion.py` (single write-side entrypoint),
39
+ `latticeai/services/kg_portability.py`, `latticeai/api/browser.py`,
40
+ `latticeai/api/portability.py`, provenance in `knowledge_graph.py`.
41
+ - **Gotcha:** PEP 701 f-string quote reuse (`f'{x or ''}'`) compiles on 3.12+ but
42
+ is a SyntaxError on 3.11 — always run `python3.11 scripts/check_python.py`
43
+ before pushing (CI tests on 3.11 + 3.12).
44
+ - Version canonical: `WORKSPACE_OS_VERSION`; mirrors enforced by
45
+ `test_version_consistency.py`.
46
+ - Local tests need `.venv/bin/python` (system `python3` lacks fastapi).
@@ -0,0 +1,49 @@
1
+ # Runtime Hook Coverage — v3.6.0
2
+
3
+ v3.6.0 makes the Knowledge Graph the primary architecture and adds new
4
+ **ingestion** paths (web URL, browser tab, unified text/file pipeline) plus
5
+ **portability** ops (export/import/backup/restore). This doc extends
6
+ [`RUNTIME_HOOK_COVERAGE_v3.5.0.md`](./RUNTIME_HOOK_COVERAGE_v3.5.0.md) and records
7
+ that the new data-mutating paths run through the unified lifecycle.
8
+
9
+ The single tool path is `dispatch_tool(hooks, name, args, run_fn)` in
10
+ `latticeai/core/hooks.py` (`pre_tool → execute → post_tool`). v3.5.0's one honest
11
+ gap was that **KG ingestion did not fire hooks**. v3.6.0 closes it: every source
12
+ now flows through `IngestionPipeline.ingest` (`latticeai/services/ingestion.py`),
13
+ which wraps the store write in `dispatch_tool(..., source="ingestion")`.
14
+
15
+ **Result.** All v3.5.0 coverage is preserved (no regression), and every new
16
+ v3.6.0 ingestion path is covered. Portability admin/maintenance ops follow the
17
+ v3.5.0 convention for service maintenance (own audit events), documented below.
18
+
19
+ ## New v3.6.0 execution paths
20
+
21
+ | Entrypoint | Execution | Lifecycle path | pre fired | post fired | Test |
22
+ |---|---|---|---|---|---|
23
+ | `IngestionPipeline.ingest` (any source) | `ingest_source` / `ingest_document` | `dispatch_tool(name="kg_ingest.<type>", source="ingestion")` | yes (`pre_tool`) | yes (`post_tool`) | `test_ingestion_pipeline` |
24
+ | `POST /api/browser/read-url` | fetch URL → `pipeline.ingest` (web_url) | pipeline → `dispatch_tool` | yes | yes | `test_browser_ingestion`, `test_runtime_coverage_v36` |
25
+ | `POST /api/browser/ingest-current-tab` | sanitize → `pipeline.ingest` (browser_tab) | pipeline → `dispatch_tool` | yes | yes | `test_browser_ingestion`, `test_runtime_coverage_v36` |
26
+ | Local file / upload via pipeline | `ingest_document` | pipeline → `dispatch_tool` | yes | yes | `test_ingestion_pipeline` |
27
+ | Provenance write per ingestion | `record_provenance` | inside the bracketed `dispatch_tool` run_fn | (bracketed) | (bracketed) | `test_ingestion_pipeline` |
28
+
29
+ A blocking `pre_tool` hook makes ingestion return `status="blocked"` (the
30
+ `PermissionError` from `dispatch_tool` is caught and surfaced honestly), exactly
31
+ mirroring how a blocked tool call is handled — verified in
32
+ `test_runtime_coverage_v36` and `test_ingestion_pipeline`.
33
+
34
+ ## Intentionally outside the tool lifecycle (documented, not gaps)
35
+
36
+ | Entrypoint | Why not `pre_tool`/`post_tool` |
37
+ |---|---|
38
+ | `POST /api/knowledge-graph/{export,export-file,backup,restore,import}` | Admin **portability/maintenance** operations over the whole machine-global graph, not agent-vocabulary tools. They are admin-gated (`require_admin`) and recorded via the platform audit trail — same convention as the v3.5.0 memory maintenance ops (`prune/compact/rebuild/clear`). Wrapping a whole-store backup in `pre_tool` would misrepresent it as a per-action agent tool. |
39
+ | `read_document` inside upload (`upload_service.py`) | Already inside the `pre_upload`→`post_upload` lifecycle (unchanged from v3.5.0). |
40
+ | `POST /api/memory/{prune,compact,rebuild,clear}` | Unchanged from v3.5.0 — service maintenance with own audit events. |
41
+ | Read-only KG reads (`/knowledge-graph/{stats,graph,search,...}`, `/api/knowledge-graph/portability` status) | Execute no mutation — nothing to gate. |
42
+
43
+ ## Summary
44
+
45
+ - v3.5.0 coverage of tool/agent execution paths: **100%, preserved** (no regression).
46
+ - v3.6.0 gap closed: **KG ingestion now fires `pre_tool`/`post_tool`** via the unified pipeline (the one honest carry-over note from v3.5.0).
47
+ - New ingestion paths (unified pipeline, `read-url`, `ingest-current-tab`): **covered**.
48
+ - Portability admin ops: **documented as audit-gated maintenance**, consistent with the v3.5.0 convention — not bypasses.
49
+ - Coverage of discovered mutating ingestion paths: **100%**.