ltcai 8.9.0 → 9.1.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 (208) hide show
  1. package/README.md +81 -58
  2. package/auto_setup.py +7 -904
  3. package/desktop/electron/README.md +9 -0
  4. package/desktop/electron/main.cjs +5 -3
  5. package/docs/CHANGELOG.md +221 -238
  6. package/docs/COMMUNITY_AND_PLUGINS.md +3 -2
  7. package/docs/DEVELOPMENT.md +53 -14
  8. package/docs/LEGACY_COMPATIBILITY.md +4 -4
  9. package/docs/ONBOARDING.md +10 -2
  10. package/docs/OPERATIONS.md +8 -4
  11. package/docs/PRODUCT_DIRECTION_REVIEW.md +4 -0
  12. package/docs/ROADMAP_RECOMMENDATIONS.md +61 -36
  13. package/docs/TRUST_MODEL.md +5 -2
  14. package/docs/WHY_LATTICE.md +15 -10
  15. package/docs/WORKFLOW_DESIGNER.md +22 -0
  16. package/docs/kg-schema.md +13 -2
  17. package/docs/mcp-tools.md +17 -6
  18. package/docs/privacy.md +19 -3
  19. package/docs/public-deploy.md +32 -3
  20. package/docs/security-model.md +46 -11
  21. package/lattice_brain/__init__.py +1 -1
  22. package/lattice_brain/archive.py +4 -14
  23. package/lattice_brain/context.py +66 -9
  24. package/lattice_brain/embeddings.py +38 -2
  25. package/lattice_brain/graph/_kg_common.py +27 -462
  26. package/lattice_brain/graph/_kg_constants.py +243 -0
  27. package/lattice_brain/graph/_kg_fsutil.py +293 -0
  28. package/lattice_brain/graph/discovery.py +0 -948
  29. package/lattice_brain/graph/discovery_index.py +1126 -0
  30. package/lattice_brain/graph/documents.py +44 -9
  31. package/lattice_brain/graph/ingest.py +47 -20
  32. package/lattice_brain/graph/provenance.py +13 -6
  33. package/lattice_brain/graph/retrieval.py +141 -610
  34. package/lattice_brain/graph/retrieval_docgen.py +243 -0
  35. package/lattice_brain/graph/retrieval_vector.py +460 -0
  36. package/lattice_brain/graph/store.py +6 -0
  37. package/lattice_brain/ingestion.py +69 -4
  38. package/lattice_brain/portability.py +29 -23
  39. package/lattice_brain/quality.py +98 -4
  40. package/lattice_brain/runtime/agent_runtime.py +169 -7
  41. package/lattice_brain/runtime/hooks.py +30 -13
  42. package/lattice_brain/runtime/multi_agent.py +27 -8
  43. package/lattice_brain/runtime/statuses.py +10 -0
  44. package/lattice_brain/utils.py +46 -0
  45. package/lattice_brain/workflow.py +1 -5
  46. package/latticeai/__init__.py +1 -1
  47. package/latticeai/api/admin.py +1 -1
  48. package/latticeai/api/agent_registry.py +10 -8
  49. package/latticeai/api/agents.py +22 -3
  50. package/latticeai/api/auth.py +78 -16
  51. package/latticeai/api/browser.py +303 -34
  52. package/latticeai/api/chat.py +355 -952
  53. package/latticeai/api/chat_agent_http.py +356 -0
  54. package/latticeai/api/chat_contracts.py +54 -0
  55. package/latticeai/api/chat_documents.py +256 -0
  56. package/latticeai/api/chat_helpers.py +250 -0
  57. package/latticeai/api/chat_history.py +99 -0
  58. package/latticeai/api/chat_intents.py +302 -0
  59. package/latticeai/api/chat_stream.py +115 -0
  60. package/latticeai/api/computer_use.py +211 -40
  61. package/latticeai/api/health.py +9 -3
  62. package/latticeai/api/hooks.py +17 -6
  63. package/latticeai/api/knowledge_graph.py +78 -14
  64. package/latticeai/api/local_files.py +7 -2
  65. package/latticeai/api/marketplace.py +11 -0
  66. package/latticeai/api/mcp.py +102 -23
  67. package/latticeai/api/models.py +72 -33
  68. package/latticeai/api/network.py +5 -5
  69. package/latticeai/api/permissions.py +70 -29
  70. package/latticeai/api/plugins.py +21 -7
  71. package/latticeai/api/portability.py +5 -5
  72. package/latticeai/api/realtime.py +33 -5
  73. package/latticeai/api/setup.py +2 -2
  74. package/latticeai/api/static_routes.py +123 -24
  75. package/latticeai/api/tools.py +97 -14
  76. package/latticeai/api/workflow_designer.py +37 -0
  77. package/latticeai/api/workspace.py +2 -1
  78. package/latticeai/app_factory.py +185 -405
  79. package/latticeai/core/agent.py +19 -9
  80. package/latticeai/core/agent_registry.py +1 -5
  81. package/latticeai/core/config.py +23 -3
  82. package/latticeai/core/context_builder.py +21 -3
  83. package/latticeai/core/invitations.py +1 -4
  84. package/latticeai/core/io_utils.py +45 -0
  85. package/latticeai/core/legacy_compatibility.py +24 -3
  86. package/latticeai/core/local_embeddings.py +2 -4
  87. package/latticeai/core/marketplace.py +33 -2
  88. package/latticeai/core/mcp_catalog.py +450 -0
  89. package/latticeai/core/mcp_registry.py +2 -441
  90. package/latticeai/core/plugins.py +15 -0
  91. package/latticeai/core/policy.py +1 -1
  92. package/latticeai/core/realtime.py +38 -15
  93. package/latticeai/core/sessions.py +7 -2
  94. package/latticeai/core/timeutil.py +10 -0
  95. package/latticeai/core/tool_registry.py +90 -18
  96. package/latticeai/core/users.py +5 -14
  97. package/latticeai/core/workspace_graph_trace.py +31 -5
  98. package/latticeai/core/workspace_memory.py +3 -1
  99. package/latticeai/core/workspace_os.py +18 -7
  100. package/latticeai/core/workspace_os_utils.py +2 -21
  101. package/latticeai/core/workspace_permissions.py +2 -1
  102. package/latticeai/core/workspace_plugins.py +1 -1
  103. package/latticeai/core/workspace_runs.py +14 -5
  104. package/latticeai/core/workspace_skills.py +1 -1
  105. package/latticeai/core/workspace_snapshots.py +2 -1
  106. package/latticeai/core/workspace_timeline.py +2 -1
  107. package/latticeai/integrations/telegram_bot.py +96 -40
  108. package/latticeai/models/model_providers.py +111 -0
  109. package/latticeai/models/router.py +189 -173
  110. package/latticeai/runtime/access_runtime.py +62 -4
  111. package/latticeai/runtime/audit_runtime.py +27 -16
  112. package/latticeai/runtime/automation_runtime.py +22 -7
  113. package/latticeai/runtime/brain_runtime.py +19 -7
  114. package/latticeai/runtime/chat_wiring.py +2 -0
  115. package/latticeai/runtime/config_runtime.py +58 -26
  116. package/latticeai/runtime/context_runtime.py +16 -4
  117. package/latticeai/runtime/history_runtime.py +163 -0
  118. package/latticeai/runtime/hooks_runtime.py +1 -1
  119. package/latticeai/runtime/model_wiring.py +33 -5
  120. package/latticeai/runtime/namespace_runtime.py +163 -0
  121. package/latticeai/runtime/network_config_runtime.py +56 -0
  122. package/latticeai/runtime/platform_runtime_wiring.py +4 -3
  123. package/latticeai/runtime/review_wiring.py +1 -1
  124. package/latticeai/runtime/router_registration.py +34 -1
  125. package/latticeai/runtime/security_runtime.py +110 -13
  126. package/latticeai/runtime/sso_config_runtime.py +128 -0
  127. package/latticeai/runtime/stages.py +27 -0
  128. package/latticeai/runtime/user_key_runtime.py +106 -0
  129. package/latticeai/server_app.py +5 -1
  130. package/latticeai/services/architecture_readiness.py +74 -5
  131. package/latticeai/services/brain_automation.py +3 -26
  132. package/latticeai/services/chat_service.py +205 -15
  133. package/latticeai/services/local_knowledge.py +423 -0
  134. package/latticeai/services/memory_service.py +268 -21
  135. package/latticeai/services/model_engines.py +48 -33
  136. package/latticeai/services/model_errors.py +17 -0
  137. package/latticeai/services/model_loading.py +28 -25
  138. package/latticeai/services/model_runtime.py +228 -162
  139. package/latticeai/services/p_reinforce.py +22 -3
  140. package/latticeai/services/platform_runtime.py +92 -24
  141. package/latticeai/services/product_readiness.py +19 -17
  142. package/latticeai/services/review_queue.py +76 -11
  143. package/latticeai/services/router_context.py +1 -0
  144. package/latticeai/services/run_executor.py +25 -9
  145. package/latticeai/services/search_service.py +203 -28
  146. package/latticeai/services/setup_detection.py +80 -0
  147. package/latticeai/services/tool_dispatch.py +28 -5
  148. package/latticeai/services/triggers.py +53 -4
  149. package/latticeai/services/upload_service.py +13 -2
  150. package/latticeai/setup/__init__.py +25 -0
  151. package/latticeai/setup/auto_setup.py +857 -0
  152. package/latticeai/setup/wizard.py +1264 -0
  153. package/latticeai/tools/__init__.py +278 -0
  154. package/{tools → latticeai/tools}/commands.py +67 -7
  155. package/{tools → latticeai/tools}/computer.py +1 -1
  156. package/{tools → latticeai/tools}/documents.py +1 -1
  157. package/{tools → latticeai/tools}/filesystem.py +3 -3
  158. package/latticeai/tools/knowledge.py +178 -0
  159. package/{tools → latticeai/tools}/local_files.py +7 -1
  160. package/{tools → latticeai/tools}/network.py +0 -1
  161. package/local_knowledge_api.py +4 -342
  162. package/package.json +22 -2
  163. package/scripts/brain_quality_eval.py +3 -1
  164. package/scripts/bump_version.py +3 -0
  165. package/scripts/capture_release_evidence.mjs +180 -0
  166. package/scripts/check_current_release_docs.mjs +142 -0
  167. package/scripts/check_i18n_literals.mjs +107 -31
  168. package/scripts/check_openapi_drift.mjs +56 -0
  169. package/scripts/export_openapi.py +67 -7
  170. package/scripts/i18n_literal_allowlist.json +22 -24
  171. package/scripts/run_integration_tests.mjs +72 -10
  172. package/scripts/validate_release_artifacts.py +49 -7
  173. package/scripts/wheel_smoke.py +5 -0
  174. package/setup_wizard.py +3 -1304
  175. package/src-tauri/Cargo.lock +1 -1
  176. package/src-tauri/Cargo.toml +1 -1
  177. package/src-tauri/tauri.conf.json +1 -1
  178. package/static/app/asset-manifest.json +11 -11
  179. package/static/app/assets/Act-Bzz0bUyW.js +1 -0
  180. package/static/app/assets/Brain-Dj2J20YA.js +321 -0
  181. package/static/app/assets/Capture-CqlEl1Ga.js +1 -0
  182. package/static/app/assets/Library-B03FP1Yx.js +1 -0
  183. package/static/app/assets/System-80lHW0Ux.js +1 -0
  184. package/static/app/assets/index-BiMofBTM.js +17 -0
  185. package/static/app/assets/index-Bmx9rzTc.css +2 -0
  186. package/static/app/assets/primitives-Q1A96_7v.js +1 -0
  187. package/static/app/assets/textarea-D13RtnTo.js +1 -0
  188. package/static/app/index.html +2 -2
  189. package/static/css/tokens.css +4 -2
  190. package/static/sw.js +1 -1
  191. package/tools/__init__.py +21 -269
  192. package/docs/CODE_REVIEW_2026-07-06.md +0 -764
  193. package/latticeai/runtime/app_context_runtime.py +0 -13
  194. package/latticeai/runtime/sso_runtime.py +0 -52
  195. package/latticeai/runtime/tail_wiring.py +0 -21
  196. package/scripts/com.pts.claudecode.discord.plist +0 -31
  197. package/scripts/pts-claudecode-discord-bridge.mjs +0 -207
  198. package/scripts/start-pts-claudecode-discord.sh +0 -51
  199. package/static/app/assets/Act-fZokUnC0.js +0 -1
  200. package/static/app/assets/Brain-DtyuWubr.js +0 -321
  201. package/static/app/assets/Capture-D5KV3Cu7.js +0 -1
  202. package/static/app/assets/Library-C9kyFkSt.js +0 -1
  203. package/static/app/assets/System-VbChmX7r.js +0 -1
  204. package/static/app/assets/index-DCh5AoXt.css +0 -2
  205. package/static/app/assets/index-DPdcPoF0.js +0 -17
  206. package/static/app/assets/primitives-DFeanEV6.js +0 -1
  207. package/static/app/assets/textarea-CD8UNKIy.js +0 -1
  208. package/tools/knowledge.py +0 -95
@@ -0,0 +1,9 @@
1
+ # Electron compatibility shell
2
+
3
+ Electron is an experimental compatibility client. The supported desktop build
4
+ is the Tauri application in `src-tauri/`; release artifacts and validation use
5
+ that path. Electron shares the standard local backend at `127.0.0.1:4825` and
6
+ can be launched for development with `npm run desktop:electron`.
7
+
8
+ Override the backend only for development with
9
+ `LATTICEAI_DESKTOP_BACKEND_ORIGIN` or `LATTICEAI_DESKTOP_BACKEND_CMD`.
@@ -2,7 +2,9 @@ const { app, BrowserWindow, dialog, ipcMain } = require("electron");
2
2
  const { spawn } = require("node:child_process");
3
3
  const path = require("node:path");
4
4
 
5
- const origin = process.env.LATTICEAI_DESKTOP_BACKEND_ORIGIN || "http://127.0.0.1:8765";
5
+ // Experimental compatibility shell. Tauri is the primary desktop client; use
6
+ // the same backend port as every other Lattice client to avoid split defaults.
7
+ const origin = process.env.LATTICEAI_DESKTOP_BACKEND_ORIGIN || "http://127.0.0.1:4825";
6
8
  let backend = null;
7
9
 
8
10
  ipcMain.handle("lattice:select-folder", async (event) => {
@@ -18,12 +20,12 @@ ipcMain.handle("lattice:select-folder", async (event) => {
18
20
 
19
21
  function startBackend() {
20
22
  if (process.env.LATTICEAI_DESKTOP_NO_BACKEND) return;
21
- const command = process.env.LATTICEAI_DESKTOP_BACKEND_CMD || "python3 ltcai_cli.py --host 127.0.0.1 --port 8765";
23
+ const command = process.env.LATTICEAI_DESKTOP_BACKEND_CMD || "python3 ltcai_cli.py --host 127.0.0.1 --port 4825";
22
24
  const [bin, ...args] = command.split(/\s+/).filter(Boolean);
23
25
  if (!bin) return;
24
26
  backend = spawn(bin, args, {
25
27
  cwd: process.env.LATTICEAI_DESKTOP_BACKEND_CWD || path.resolve(__dirname, "../.."),
26
- env: { ...process.env, LATTICEAI_HOST: "127.0.0.1", LATTICEAI_PORT: "8765", LATTICEAI_TUNNEL: "false" },
28
+ env: { ...process.env, LATTICEAI_HOST: "127.0.0.1", LATTICEAI_PORT: "4825", LATTICEAI_TUNNEL: "false" },
27
29
  stdio: "ignore",
28
30
  });
29
31
  }
package/docs/CHANGELOG.md CHANGED
@@ -4,7 +4,226 @@ 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
- ## [Unreleased]
7
+ ## [9.1.0] - 2026-07-11
8
+
9
+ ### Added
10
+ - Added required Telegram chat/callback allowlisting through
11
+ `LATTICEAI_TELEGRAM_ALLOWED_CHAT_IDS` and authenticated local API bridging
12
+ through `LATTICEAI_SERVER_SESSION_TOKEN`.
13
+ - Added signed, expiring invitation authorization, explicit legacy-global graph
14
+ read opt-in, and fail-closed regression coverage for broken or unknown
15
+ Knowledge Graph scope.
16
+ - Added optional permission-review deep links through
17
+ `LATTICEAI_PERMISSION_UI_URL` while keeping approval tokens out of outbound
18
+ notifications.
19
+ - Added Vitest coverage for API empty/result shapes, Brain proof state,
20
+ conversation sessions, shared primitives, and i18n, plus visual assertions
21
+ for unavailable core services.
22
+ - Added continuous vital rings, heartbeat echoes, neural sparks, body motion,
23
+ and Brain-to-graph particles whose speed and intensity reflect real listening,
24
+ recall, synthesis, and automation activity. Reduced-motion preferences still
25
+ disable nonessential animation.
26
+ - Added a living knowledge flow that shows chat, files, folders, notes, and web
27
+ pages entering the Brain, then renders a lightweight graph from actual
28
+ Knowledge Graph nodes and edges on the first screen.
29
+ - Added persistent conversation-to-knowledge traces, truthful ingestion
30
+ emergence counts and provenance, native desktop folder selection, and
31
+ evidence-linked Brain automation actions.
32
+ - Added a consent-preserving recipe lifecycle: create a reviewable disabled
33
+ draft, inspect its memory focus and evidence, then explicitly enable it.
34
+ - Added scoped MemoryService recall to workflow agents and researcher-first
35
+ execution for triggered and review-queue automation runs.
36
+ - Added a visible task-oriented desktop navigation, mobile bottom navigation,
37
+ accessible secondary menu, skip link, focus trap/restoration, keyboard-driven
38
+ tabs, and reduced-motion behavior for the React workspace.
39
+ - Added a dedicated human-first experience stylesheet that owns the product
40
+ shell, conversation canvas, shared content rhythm, responsive behavior, and
41
+ warm paper/ink/jade visual tokens.
42
+ - Added regression gates for model-request concurrency, workspace/identity
43
+ authorization, graph ID isolation, command sandbox escapes, SSRF and redirect
44
+ rebinding, approval ownership, release archive hygiene, browser-extension byte
45
+ limits/timeouts, OpenAPI drift, and disposable test harness state.
46
+ - Added a checked OpenAPI drift command and browser-extension test command to the
47
+ normal lint gate.
48
+
49
+ ### Changed
50
+ - Replaced ambient app-factory namespace assembly with typed config, security,
51
+ Brain, model, and router stages while retaining an explicit compatibility
52
+ surface.
53
+ - Replaced model-runtime dual globals with injected typed state and split chat
54
+ contracts, documents, history, and streaming into focused modules.
55
+ - Split Brain feature hooks, translation namespaces, and experience CSS by
56
+ product surface; frontend version copy now comes from package metadata.
57
+ - Consolidated shallow runtime pass-through modules, timestamps and run-status
58
+ constants, and moved setup/local-knowledge implementations behind package
59
+ owned modules with root compatibility shims.
60
+ - Archived code-review documents under `docs/reviews/`, removed obsolete local
61
+ VSIX artifacts, and documented Electron as an experimental compatibility shell.
62
+ - Compressed the empty Brain home into a single desktop/mobile viewport: the
63
+ living Brain, real graph, source dock, composer, primary grounded action, and
64
+ flow status remain visible without page scrolling. Conversation history,
65
+ deeper proof, and the complete automation action set now open in bounded
66
+ overlays instead of stacking below the fold.
67
+ - Rebuilt Brain Home around the visible source-to-memory-to-graph-to-automation
68
+ journey, while keeping the greeting, composer, suggested starts, recent
69
+ conversations, and optional deeper Brain proof.
70
+ - Renamed and regrouped the primary experience around Chat, Sources, Memory, and
71
+ Work. Memory now opens with search, basic Work leads with one goal composer,
72
+ and basic mode hides pipeline, agent-registry, runtime-metric, plugin, and
73
+ operator tabs until requested.
74
+ - Synced major tab choices to canonical hash routes so refresh, browser history,
75
+ and bookmarked Sources, Memory, Work, Model, and Settings subviews preserve
76
+ the user's place.
77
+ - Restyled shared panels, entity lists, empty states, statistics, onboarding,
78
+ source capture, and active messages to use solid surfaces, whitespace, and
79
+ separators instead of nested glass cards and dashboard grids.
80
+ - Brain Home now fetches a bounded graph preview so it can show real knowledge
81
+ relationships immediately; heavier proof and the full graph explorer remain
82
+ deferred until requested.
83
+ - Model generation, streaming, and document generation now use request-scoped
84
+ model snapshots without mutating the global selected model.
85
+ - New workspace-scoped graph nodes derive IDs from workspace identity, preventing
86
+ identical messages/files/concepts in separate workspaces from overwriting or
87
+ reassigning one another while preserving legacy unscoped reads.
88
+ - Workspace and identity transitions synchronously clear frontend query and
89
+ conversation state; the client-only egress toggle that claimed server-wide
90
+ enforcement was removed.
91
+ - Hook/model/network/registry/whole-graph portability and graph-curation operations now use administrator
92
+ boundaries, and chat/browser/upload/KG writes resolve workspace write access.
93
+ - MCP graph calls now enforce authenticated identity and workspace-scoped reads
94
+ and writes; local MCP environment values are never returned by the API, and
95
+ MCP/plugin tool dispatch cannot bypass the dedicated local-file approval flow.
96
+ - Memory, hybrid-search, and garden-note context assembly now use the active
97
+ workspace instead of blending content from every workspace the user can access.
98
+ - Document-generation RAG, answer traces, trace timeline events, and realtime
99
+ unscoped events now fail closed at the active workspace boundary.
100
+ - Long-lived realtime streams revalidate the session and workspace membership
101
+ before replay, every queued event, and each heartbeat, so revocation takes
102
+ effect without waiting for the SSE connection to reconnect.
103
+ - Realtime presence now validates workspace membership, prevents cross-user
104
+ client-id takeover/eviction, and assigns authenticated joins to an allowed
105
+ workspace instead of an unscoped global presence record.
106
+ - Local data directories and atomic JSON/session files now use private POSIX
107
+ permissions where supported.
108
+ - Docker packaging now uses a small build context, a non-root runtime user, and
109
+ a healthcheck; personal OpenClaw/bot bridge files are excluded from Git,
110
+ Docker, and every release archive while remaining available as ignored
111
+ machine-local files.
112
+
113
+ ### Fixed
114
+ - Closed every actionable item in the July 11 code review across fail-closed
115
+ security, typed runtime/model/chat ownership, honest frontend failures/tests,
116
+ and repository hygiene.
117
+ - Telegram now rejects unknown chats before registration; invitation gates no
118
+ longer trust a static cookie or built-in code, including SSO just-in-time
119
+ provisioning; and graph projection failures cannot expose cross-workspace
120
+ nodes.
121
+ - Agent and Computer Use history/run persistence now retains authenticated
122
+ user and workspace ownership, and recent model context is selected through
123
+ fail-closed storage scopes before prompt assembly.
124
+ - Desktop, knowledge, Obsidian, and network-status tools now use explicit
125
+ policy/capability/consent checks. Permission queues use atomic private writes,
126
+ notifications expose token hints only, and MCP paths are masked.
127
+ - Failed API results no longer become quiet healthy Brain state, proof is not
128
+ synthesized after failure, and action success callbacks run only on success.
129
+ - Fixed ingestion deltas that compared against truncated display lists instead
130
+ of complete graph/readiness baselines, and replaced simulated stage timers
131
+ with post-response memory and graph verification.
132
+ - Fixed global Brain recall pulses being ignored by Brain instances without a
133
+ local callback, relationship visuals inventing fallback endpoints, and SVG
134
+ gradient IDs colliding when multiple living Brains appear on one page.
135
+ - Fixed Brain automation hook/agent configuration mismatches, missing scoped
136
+ recall, trigger runs that skipped agent execution, and review-queue runs that
137
+ did not execute the workflow's agent node.
138
+ - Fixed local-folder graph nodes and Brain events trusting unvalidated or absent
139
+ workspace scope, losing scope on watcher restart, appearing in another
140
+ workspace's graph/search, or waking another workspace/owner's recipe. Legacy
141
+ personal nodes are reprojected without changing their IDs.
142
+ - Fixed recipe activation replacing reviewed user edits with the starter
143
+ definition, and stopped empty web captures from being presented as newly
144
+ remembered knowledge.
145
+ - Blocked permission request self-approval, stale disabled/deleted-account
146
+ sessions, agent approval forgery and cross-user resume, body identity spoofing,
147
+ command traversal/symlink/interpreter escapes, and authenticated scope lookup
148
+ fail-open behavior.
149
+ - Hardened URL ingestion against localhost/private/link-local/multicast/reserved
150
+ targets, mixed DNS answers, redirect-to-metadata attacks, environment proxies,
151
+ binary payloads, and unbounded response buffering.
152
+ - Isolated integration and OpenAPI generation from real `~/.ltcai` state and
153
+ made missing required npm tarballs a release-validation failure.
154
+
155
+ ## [9.0.0] - 2026-07-08
156
+
157
+ ### Added
158
+ - Added Brain Brief suggested questions that turn current memory, recall proof,
159
+ graph concepts, and conversation history into clickable first-screen prompts.
160
+ - Suggested Brain questions now send immediately from the first screen instead
161
+ of only filling the composer.
162
+ - Added one-click follow-up prompts under the latest Brain answer for turning a
163
+ reply into a checklist, evidence review, or prioritized next steps.
164
+ - Added a Brain chat to Review Center handoff so users can save an answer as a
165
+ reviewable task draft and manage it alongside automation suggestions.
166
+ - Added direct Brain-to-Agent delegation and successful agent-run synthesis into
167
+ durable Brain memory/graph context.
168
+ - Surfaced recent agent-synthesis memories in Brain overview and memory rings
169
+ so delegated work is visibly reflected on the home screen.
170
+ - Improved agent-run Brain synthesis quality by splitting successful results
171
+ into key facts, decisions, and follow-up memories with structured metadata.
172
+ - Agent follow-ups now enter Review Center as task drafts so delegated work
173
+ produces actionable approval candidates instead of passive memory only.
174
+ - Approving an Agent follow-up review item now promotes it into a manual
175
+ workflow draft with trigger, agent, and output nodes.
176
+ - Added large-feature foundations for KG/Retrieval scale diagnostics,
177
+ background ingestion scheduling, offline multimodal image captions,
178
+ proactive contradiction detection, and ingestion bridge marketplace templates.
179
+ - Added proactive Brain action cards that turn Brain Brief evidence into
180
+ one-click ask, Agent delegation, Review Center draft, or graph navigation
181
+ actions on the Brain home screen.
182
+ - Added a visible proactive Brain action trail so one-click suggestions show
183
+ their running/completed/failed state after the user acts on them.
184
+
185
+ ### Changed
186
+ - Continued app-factory decomposition by extracting user profile/API-key helper
187
+ wiring into `latticeai.runtime.user_key_runtime`, keeping the legacy
188
+ `server_app` callable surface while making keyring/plaintext fallback policy
189
+ independently testable.
190
+ - Split additional runtime and static-data seams out of app, chat, MCP, model,
191
+ and Knowledge Graph modules while preserving re-export compatibility for
192
+ existing imports.
193
+ - Routed Computer Use direct `/cu/*` actions through the shared ToolRegistry
194
+ policy gate and audit lifecycle, preserving route paths while blocking
195
+ non-admin direct desktop control by default.
196
+ - Moved blocked-system-prefix protection into `tools.local_write` itself so
197
+ local filesystem writes fail closed even when called outside the HTTP approval
198
+ route.
199
+ - Narrowed the lazy `server_app` compatibility namespace by filtering
200
+ app-factory scratch imports and runtime wiring dictionaries while preserving
201
+ explicit legacy helpers, and added a typed `RuntimeBundle` migration target
202
+ behind the legacy `_RUNTIME_BUNDLE` dict.
203
+
204
+ ### Fixed
205
+ - Added regression coverage for provider API-key lookup/storage behavior,
206
+ including keyring precedence, plaintext fallback gating, legacy plaintext
207
+ cleanup after keyring writes, and identity creation on plaintext fallback.
208
+ - Added regression coverage for Computer Use policy enforcement, audit-safe
209
+ typed-text metadata, and direct local-write system-prefix blocking.
210
+ - Fixed functional findings from the July 8 code review: file generation now
211
+ fails cleanly when no model is loaded, chat/document streams preserve a
212
+ terminal SSE event on generation errors, agent runs persist failed status on
213
+ executor exceptions, Brain delegation treats HTTP failures as failures, and
214
+ local permission expiry cleanup no longer corrupts the active token lookup.
215
+ - Tightened non-security chat intent detection, Telegram bot server URL
216
+ configuration, LATTICE_TZ-aware runtime audit timestamps, local embedding
217
+ dimension consistency, and stale Brain UI version copy.
218
+ - Paid down the remaining July 8 cleanup debt by moving duplicated JSON/ISO/hash
219
+ and setup detection helpers into shared modules, switching runtime audit
220
+ appends to JSONL while preserving legacy JSON reads, making the legacy runtime
221
+ namespace allowlist-based, clarifying static-vs-SPA design token ownership,
222
+ and consolidating duplicated frontend helper functions.
223
+ - Reduced the remaining chat-router risk by extracting repeated chat history,
224
+ bridge notification, no-model, single-answer, direct-file, and agent-file
225
+ response paths out of the main `/chat` handler, with regression coverage for
226
+ the shared fast-path epilogue.
8
227
 
9
228
  ## [8.9.0] - 2026-07-06
10
229
 
@@ -233,7 +452,7 @@ existed at that release.
233
452
  - Updated architecture and product readiness targets to 8.0.0.
234
453
  - Synchronized package/runtime/static/Tauri metadata to 8.0.0.
235
454
  - Updated current-release docs and exact artifact names to 8.0.0 while
236
- preserving historical 7.x entries.
455
+ setting 8.0.0 as the oldest retained release-history entry.
237
456
 
238
457
  ### Fixed
239
458
  - Made logical Knowledge Graph `replace` imports transactional so malformed
@@ -242,239 +461,3 @@ existed at that release.
242
461
  `relationship_search`, and `traverse`.
243
462
  - Preserved colliding legacy edge labels during logical import/backfill while
244
463
  keeping native write-door synonym dedupe canonical.
245
-
246
- ## [7.9.0] - 2026-06-23
247
-
248
- ### Changed
249
- - Added `SingleAgentRuntime` as the explicit name for the legacy single-agent
250
- state machine while preserving `AgentRuntime` as a compatibility alias.
251
- - Updated tool dispatch to build `SingleAgentRuntime` directly.
252
- - Moved single-agent git rollback behind an injected `rollback_file` port owned
253
- by `ToolDispatchService`, keeping shell execution out of the core state
254
- machine.
255
- - Added a shared `runtime-boundary/v1` descriptor so product and single-agent
256
- runtime boundaries are machine-readable in config/tests.
257
- - Added `RuntimeBoundaryProtocol` as the minimal shared inspection surface for
258
- runtime-boundary-aware dependency injection.
259
- - Updated architecture and product readiness targets to 7.9.0.
260
-
261
- ## [7.8.0] - 2026-06-22
262
-
263
- ### Changed
264
- - Rebuilt Brain Chat Home around immediate conversation: chat purpose, starter
265
- prompts, and the composer now occupy the first viewport.
266
- - Collapsed source ingestion, readiness, proof, timeline, overview, model
267
- continuity, and care controls behind one utility drawer.
268
- - Kept workspace navigation visible on the default Brain surface.
269
- - Hid default depth controls until the user intentionally travels deeper.
270
- - Integrated the six post-7.7 UX drafts into the canonical Brain experience:
271
- first-run value cards, stronger recommendation affordances, product-toned
272
- Brain Home copy, and routed legacy Brain conversation entry points to the
273
- canonical Brain Home surface.
274
- - Removed obsolete Brain conversation and first-run guide components.
275
- - Moved draft onboarding polish out of inline styles and into the shared design
276
- stylesheet with responsive behavior and bilingual copy.
277
- - Updated architecture and product readiness targets to 7.8.0.
278
- - Refreshed 7.8.0 release screenshots, walkthrough video/GIF, and capture
279
- notes under `output/release/v7.8.0/`.
280
-
281
- ## [7.7.0] - 2026-06-22
282
-
283
- > 7.7.0 marks the complete, finished product stage for Lattice AI.
284
- > After 7.6.0 architecture closure, this release polishes every surface so that anyone looking at the code, UI, docs, or running app immediately recognizes: "this is now a product".
285
-
286
- Lattice AI v7.7 delivers the Living Brain as the undeniable center, production-grade runtime contracts, stable ToolRegistry, full ingestion-to-graph flows, bilingual professional UX, and zero-beta signals. Classifiers moved to Production/Stable. All prior gates remain enforced under finished product contract.
287
-
288
- Package metadata, Tauri, frontend, Python all aligned to 7.7.0. UI/UX microcopy and signals updated to convey finished professional tool.
289
-
290
- ### Productization Highlights
291
- - Extreme self + claude-code (pts_claudecode) used for polish, evaluation, iteration.
292
- - "This is a product" bar: clear durable knowledge ownership, no loose ends.
293
- - Validation: typecheck, unit, cargo, build scripts exercised.
294
-
295
- ### Changed
296
- - Package/runtime/static metadata synchronized to 7.7.0.
297
- - Development status to Production/Stable.
298
- - All current-release references point to 7.7.0.
299
-
300
- ## [7.6.0] - 2026-06-22
301
-
302
- > Brain-Centered UX & Architecture Closure. Incorporates the two local review
303
- > files into the release line with a Wake Brain first-run surface, memory rings
304
- > plus direct depth controls, and machine-checkable architecture readiness gates.
305
-
306
- ### Added
307
- - Wake Brain first-run entry before owner/profile setup, reducing onboarding to
308
- the product promise first and the setup mechanics second.
309
- - Concentric memory rings around Brain Home plus direct controls for Now, Memory,
310
- Topics, Relationships, and Full Graph navigation.
311
- - `latticeai.services.architecture_readiness.architecture_readiness()` and
312
- `tests/unit/test_v76_review_completion.py` to keep AgentRuntime, ToolRegistry,
313
- Config, server decomposition, KG hardening, and Brain UX review closure under
314
- test.
315
-
316
- ### Changed
317
- - Package/runtime/static metadata is synchronized to 7.6.0; package publish and
318
- deployment remain owner-run only.
319
- - README and release docs now describe 7.6.0 as the current release and point to
320
- refreshed 7.6.0 screenshots, walkthrough GIF, and release evidence index under
321
- `output/release/v7.6.0/`.
322
-
323
- ## [7.5.0] - 2026-06-20
324
-
325
- > Runtime Debt Burn-down & Release Risk Cleanup. Turns the 7.4.0 contract
326
- > envelope into a consumed API surface, expands retrieval quality to a 250+
327
- > record local corpus fixture, and removes release/security warnings.
328
-
329
- ### Added
330
- - `extract_contract`, `require_contract`, `contract_view`, and `contract_views`
331
- helpers for consumers that need a surface-agnostic `agent-run-contract/v1`
332
- projection.
333
- - AgentRuntime status/list/detail/events and realtime feed responses now expose
334
- compact `contracts` views alongside legacy payloads.
335
- - Deterministic 250+ record retrieval benchmark corpus while keeping 12 judged
336
- queries and real `KnowledgeGraphStore` + `SearchService` execution.
337
- - Refreshed README release evidence screenshots and walkthrough GIF under
338
- `output/release/v7.5.0/`.
339
-
340
- ### Changed
341
- - Tauri Rust/CLI dependencies are updated within the Tauri 2 line, removing the
342
- old transitive `block v0.1.6` future-incompatibility warning.
343
- - npm dependency overrides move `js-yaml` to a non-vulnerable version; `npm
344
- audit` reports 0 vulnerabilities.
345
- - CI lint compatibility is restored for the Brain quality gate script.
346
- - Local MLX model preparation now recognizes valid existing Hugging Face cache
347
- snapshots, avoiding an unnecessary re-download when the model already exists
348
- outside Lattice's managed `~/.ltcai/hf-models` directory.
349
- - Package/runtime/static metadata is synchronized to 7.5.0; package publish and
350
- deployment remain owner-run only.
351
-
352
- ## [7.4.0] - 2026-06-20
353
-
354
- > Runtime Contract Convergence & Corpus Retrieval. Completes the
355
- > agent-run-contract/v1 family across run storage, workflow execution, audit
356
- > events, realtime events, and a real corpus-scale retrieval quality gate.
357
-
358
- ### Added
359
- - Persisted agent and workflow run rows now carry refreshed contract metadata
360
- for queued, running, terminal, cancelled, and interrupted states.
361
- - Workflow engine results, replay payloads, audit log events, and realtime SSE
362
- feed events now expose the same `agent-run-contract/v1` family envelope while
363
- preserving existing top-level compatibility fields.
364
- - Corpus-scale retrieval fixture with 30+ documents, judged queries,
365
- must-include expectations, and thresholds for recall, precision, NDCG, and
366
- hit rate.
367
- - `scripts/brain_quality_eval.py` now exercises the real local
368
- `KnowledgeGraphStore` + `SearchService` hybrid retrieval path before scoring.
369
-
370
- ### Changed
371
- - `RetrievalBenchmarkRunner` reports dynamic metric aliases for the selected
372
- `top_k` and a `must_include_hit_rate`.
373
- - Package/runtime/static metadata is synchronized to 7.4.0; package publish and
374
- deployment remain owner-run only.
375
-
376
- ## [7.3.0] - 2026-06-20
377
-
378
- > Runtime Contract & Retrieval Quality. Turns the next AgentRuntime extraction
379
- > step and the uploaded roadmap's hybrid-search quality goals into a small,
380
- > tested release: shared run contracts and deterministic recall regression.
381
-
382
- ### Added
383
- - `lattice_brain.runtime.contracts.AgentRunContract`, a serializable
384
- `agent-run-contract/v1` payload shared by single-agent and multi-agent
385
- execution paths.
386
- - Multi-agent API result/run patches now include the shared contract with
387
- runtime, mode, status, roles, retries, timeline, and terminal-state data.
388
- - Single-agent runtime exposes the same contract helper for UI/API/storage
389
- convergence in the next extraction pass.
390
- - `scripts/brain_quality_eval.py` now runs deterministic hybrid recall/ranking
391
- regression checks with recall and precision thresholds.
392
-
393
- ### Changed
394
- - Package/runtime/static metadata is synchronized to 7.3.0; package publish and
395
- deployment remain owner-run only.
396
-
397
- ## [7.2.0] - 2026-06-20
398
-
399
- > Runtime Trust Baseline. Adds execution preview and registry diagnostics so
400
- > agent runs and tool permissions become inspectable contracts before action.
401
-
402
- ### Added
403
- - `POST /agents/api/run/preview` for AgentRuntime readiness, role selection,
404
- input keys, retry clamping, and blocking reasons without starting a run.
405
- - `GET /tools/registry` for the live ToolRegistry manifest across dispatch
406
- handlers, governance policy, catalog descriptions, and permissions.
407
- - `GET /tools/registry/diagnostics` for a compact drift check suitable for CI,
408
- admin views, and runtime health panels.
409
- - Unit coverage for AgentRuntime preview and ToolRegistry manifest diagnostics.
410
-
411
- ### Changed
412
- - Tool governance now covers `read_document`, and the catalog describes
413
- `create_web_project`, closing the current dispatch/governance/catalog drift.
414
- - Package/runtime/static metadata is synchronized to 7.2.0; package publish and
415
- deployment remain owner-run only.
416
-
417
- ## [7.1.0] - 2026-06-20
418
-
419
- > Brain Usability Completion. Completes the 7.1.0 first-run through editor-sync
420
- > usability pass: clear onboarding, visible ingestion, graph controls, inline
421
- > proof, workspace/admin discovery, feedback states, and VS Code sync status.
422
-
423
- ### Added
424
- - Hardware visualization, expected timing, install timeline, and next-action
425
- copy in first-run onboarding.
426
- - Brain Home ingestion stage disclosure and memory emergence timeline for file,
427
- folder, note, and URL sources.
428
- - Knowledge Graph search suggestions, entity type filters, recent/all-time time
429
- exploration, focus clearing, and neighbor highlighting.
430
- - Inline answer citation markers with keyboard-accessible proof cards.
431
- - Workspace/profile switcher, Admin Console gate, consent revoke feedback, and
432
- shared empty/error feedback surfaces in the Brain shell.
433
- - VS Code extension heartbeat/status endpoint plus extension and main-app sync
434
- indicators for connected/indexing/synced/offline states.
435
-
436
- ### Changed
437
- - Package/runtime/static metadata is synchronized to 7.1.0; package publish and
438
- deployment remain owner-run only.
439
-
440
- ## [7.0.0] - 2026-06-18
441
-
442
- > Brain Productization Loop. Turns the Brain proof work into a first-five-minute
443
- > product flow: add sources, ask a question, see proof/citations, and verify the
444
- > same Brain evidence after switching models.
445
-
446
- ### Added
447
- - Brain Home ingestion panel for files, local folder paths, notes, and web URLs,
448
- all backed by existing workspace-scoped ingestion routes.
449
- - Answer-level Memory proof and source citation cards rendered under assistant
450
- responses after Brain proof refreshes for the user's query.
451
- - Model-continuity demo strip that lets the user recheck the same Brain
452
- evidence and jump to model switching from the Brain flow.
453
- - Deterministic `scripts/brain_quality_eval.py` recall/KG quality gate, wired
454
- into CI after the unit suite.
455
- - Visual mock coverage for Brain proof, document upload, note ingest, folder
456
- indexing, and web URL ingestion endpoints.
457
-
458
- ### Changed
459
- - Brain Home is now ingestion-first instead of chat-first: first screen action
460
- labels are files/folders/notes/web, with deeper graph/model/settings still
461
- reachable from the shell.
462
- - Package/runtime/static metadata is synchronized to 7.0.0; package publish and
463
- deployment remain owner-run only.
464
-
465
- - Completed ALL Recommended next refactor items from report #15 in this session:
466
- - Server decomp wave (model_runtime globals/wiring): model_loading.py for prepare_and_load and stream, _MODEL_RUNTIME_STATE, model_engines.
467
- - Deeper WorkspaceOSStore (timeline + plugins + snapshots + memory).
468
- - KG embed: set_embed_dim.
469
- - All refactoring needed finished this session per AGENTS. 767 tests, builds, greps clean.
470
-
471
- ### Added (this session features)
472
- - `vision_analyze` tool: new multimodal vision analysis tool using screenshot b64 + prompt. Leverages existing VLM support (image_data in generate). Added to computer-use agent prompt and general tools. Fits seamlessly with computer_use, agent runtime, tool registry, and VLM models without affecting text-only paths.
473
- - More recent multimodal models in user recommendations (Llama 3.2 11B Vision, Phi-3.5 Vision, Qwen2.5-VL 7B, Moondream2) + family order update in model_recommendation. Expanded curated list in model_capability_registry for better local VLM choices on Apple Silicon and other.
474
- - All additions checked for compatibility with existing KG (descriptions can be ingested), agents/tools dispatch, chat/computer_use (image pass-through), model rec logic, and non-multimodal fallbacks.
475
-
476
- - Perfect completion of report #15 recommended refactor:
477
- - Server decomp wave: ModelRuntimeState class (not dict) for globals/wiring in model_runtime; sync_to_module_globals for compat; further clean.
478
- - Deeper WorkspaceOSStore: timeline/plugins managers fully delegated and composed (record, has_permission etc all through).
479
- - KG embed: set_embed_dim available for optional central handling.
480
- - All changes preserve legacy exactly, full composition, small modules.
@@ -1,11 +1,12 @@
1
1
  # Community And Plugins
2
2
 
3
- Current release: **8.9.0 — Scoped Memory & Tool Policy Hardening**.
3
+ Current release: **9.1.0 — Code Review Completion & Fail-Closed Runtime**.
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
7
7
  reliability, 8.7.0 runtime-state hygiene, 8.8.0 Brain Core extraction
8
- readiness, and 8.9.0 scoped Tool API hardening) to a product ecosystem. The
8
+ readiness, 8.9.0 scoped Tool API hardening, 9.0.0 cleanup closure, and 9.1.0
9
+ fail-closed review completion) to a product ecosystem. The
9
10
  immediate goal is small and practical: make it clear how
10
11
  contributors can extend the Brain without weakening local-first trust,
11
12
  workspace scoping, or release quality.
@@ -1,10 +1,10 @@
1
1
  # Lattice AI Development
2
2
 
3
- Current release: **8.9.0 — Scoped Memory & Tool Policy Hardening**.
3
+ Current release: **9.1.0 — Code Review Completion & Fail-Closed Runtime**.
4
4
 
5
5
  This document is for contributors working on the local-first Digital Brain
6
6
  codebase. Product positioning and quick start stay in `README.md`; release
7
- history is intentionally limited to 7.0.0-8.9.0 in `docs/CHANGELOG.md` and
7
+ history is intentionally limited to 8.0.0-9.1.0 in `docs/CHANGELOG.md` and
8
8
  `RELEASE.md`.
9
9
 
10
10
  ## Product Contract
@@ -51,12 +51,14 @@ API, UI, or release work, run:
51
51
  npm run check:python
52
52
  npm run lint
53
53
  npm run typecheck
54
+ npm run test:frontend
54
55
  npm run test:unit
55
56
  npm run docs:check-links
56
57
  ```
57
58
 
58
59
  `npm run lint` runs the Python Ruff baseline, frontend TypeScript lint gate,
59
- visual smoke syntax checks, and i18n literal checks.
60
+ visual smoke syntax checks, an exact generated-OpenAPI drift check, i18n literal
61
+ checks, and browser-extension syntax/behavior tests.
60
62
 
61
63
  Use these when the change touches the relevant surface:
62
64
 
@@ -64,10 +66,42 @@ Use these when the change touches the relevant surface:
64
66
  npm run test:integration
65
67
  npm run test:visual
66
68
  npm run desktop:tauri:check
69
+ npm run release:evidence
67
70
  npm run release:artifacts
68
71
  npm run release:validate
69
72
  ```
70
73
 
74
+ Run `npm run build:assets` before `npm run release:evidence`. The capture command
75
+ reads the current package version, writes only to `output/release/vX.Y.Z/`, and
76
+ requires Playwright Chromium plus `ffmpeg` for the checked-in GIF/WebM evidence.
77
+
78
+ `npm run test:integration` starts its own loopback server with disposable HOME,
79
+ data, Brain, agent, XDG, temp, SQLite, and vault paths. It refuses non-loopback
80
+ external base URLs so validation cannot mutate a developer's real local Brain.
81
+
82
+ Regenerate committed API artifacts with `npm run frontend:openapi`; CI and
83
+ `npm run lint` fail when either `frontend/openapi.json` or
84
+ `frontend/src/api/openapi.ts` differs from a fresh isolated export.
85
+
86
+ ## Frontend Experience Ownership
87
+
88
+ `frontend/src/styles/tokens.css` owns React color tokens and
89
+ `frontend/src/styles/experience.css` imports the focused shell, conversation,
90
+ graph, capture, and responsive layers under `frontend/src/styles/experience/`.
91
+ Keep ownership in the narrowest surface file; do not add another competing
92
+ shell or composer rule to `styles.css`.
93
+
94
+ Brain behavior belongs in the focused `useBrainChat`, `useBrainHistory`,
95
+ `useBrainIngestion`, and `useBrainProof` hooks. Translation namespaces live in
96
+ `frontend/src/i18n/`. Failed `ApiResult` values must remain unavailable/error
97
+ states rather than being normalized to healthy empty data, and affected paths
98
+ must have Vitest coverage.
99
+
100
+ Default mode should expose user tasks and outcomes. Runtime metrics, registry
101
+ identifiers, pipeline controls, and administrator tools belong in progressive
102
+ disclosure or advanced/admin mode. New navigation and tabs must preserve
103
+ keyboard access, visible focus, mobile safe areas, and reduced-motion behavior.
104
+
71
105
  ## Runtime Assembly
72
106
 
73
107
  `latticeai.app_factory` is the composition root. Keep it import-safe:
@@ -77,13 +111,18 @@ npm run release:validate
77
111
  - no filesystem writes at module import time;
78
112
  - no external network calls at module import time.
79
113
 
80
- Runtime assembly seams live under `latticeai.runtime`:
114
+ Runtime assembly seams live under `latticeai.runtime` as typed stages:
81
115
 
82
- - `config_runtime.py` derives app config values from `Config`;
116
+ - `config_runtime.py` derives immutable app config values from `Config`;
83
117
  - `security_runtime.py` applies trusted proxy/security-derived settings;
84
- - `brain_runtime.py` constructs Brain Core and conversation primitives.
85
- - model/runtime, ToolRegistry/MCP, router, static asset, and lifespan seams
86
- should continue moving out of monolithic app-factory helpers.
118
+ - `brain_runtime.py` constructs Brain Core and conversation primitives;
119
+ - model, platform, and router stages receive explicit dependencies and return
120
+ typed bundles rather than ambient `locals()` maps.
121
+
122
+ The module-level `server_app` compatibility surface is an explicit allowlist.
123
+ Model services use injected state, and HTTP exceptions belong at the API
124
+ boundary. Readiness tests should reject forbidden patterns instead of treating
125
+ symbol presence alone as architectural completion.
87
126
 
88
127
  Future extraction should continue with AgentRuntime, ToolRegistry, config,
89
128
  server decomposition, and Knowledge Graph stabilization in that order when
@@ -114,10 +153,10 @@ For user-facing, API, runtime, release, or packaging changes, check:
114
153
  Release/publish examples must use exact target-version filenames. Do not
115
154
  document wildcard artifact upload commands.
116
155
 
117
- For 8.9.0 release work, exact artifacts are:
156
+ For 9.1.0 release work, exact artifacts are:
118
157
 
119
- - `dist/ltcai-8.9.0-py3-none-any.whl`
120
- - `dist/ltcai-8.9.0.tar.gz`
121
- - `ltcai-8.9.0.tgz`
122
- - `dist/ltcai-8.9.0.vsix`
123
- - `src-tauri/target/release/bundle/dmg/Lattice AI_8.9.0_aarch64.dmg`
158
+ - `dist/ltcai-9.1.0-py3-none-any.whl`
159
+ - `dist/ltcai-9.1.0.tar.gz`
160
+ - `ltcai-9.1.0.tgz`
161
+ - `dist/ltcai-9.1.0.vsix`
162
+ - `src-tauri/target/release/bundle/dmg/Lattice AI_9.1.0_aarch64.dmg`