ltcai 12.0.0 → 12.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 (69) hide show
  1. package/README.md +46 -52
  2. package/docs/CHANGELOG.md +23 -0
  3. package/docs/CI_AND_RELEASE_GATES.md +13 -7
  4. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  5. package/docs/DEVELOPMENT.md +11 -11
  6. package/docs/ONBOARDING.md +1 -1
  7. package/docs/OPERATIONS.md +1 -1
  8. package/docs/ROADMAP.md +2 -2
  9. package/docs/TRUST_MODEL.md +1 -1
  10. package/docs/WHY_LATTICE.md +1 -1
  11. package/docs/kg-schema.md +1 -1
  12. package/lattice_brain/__init__.py +1 -1
  13. package/latticeai/__init__.py +1 -1
  14. package/latticeai/services/architecture_readiness.py +1 -1
  15. package/latticeai/services/product_readiness.py +1 -1
  16. package/package.json +1 -1
  17. package/scripts/check_current_release_docs.mjs +1 -1
  18. package/scripts/release_screen_claims.json +11 -0
  19. package/src-tauri/Cargo.lock +10 -10
  20. package/src-tauri/Cargo.toml +1 -1
  21. package/src-tauri/tauri.conf.json +1 -1
  22. package/static/app/asset-manifest.json +44 -44
  23. package/static/app/assets/{Act-Cf1L2709.js → Act-DCRUH46a.js} +2 -2
  24. package/static/app/assets/{AdminConsole-DPAbLTYV.js → AdminConsole-BFBj6OvN.js} +1 -1
  25. package/static/app/assets/{Brain-DqamGrj-.js → Brain-BXcoxIvb.js} +2 -2
  26. package/static/app/assets/{BrainHome-MHe2_RYs.js → BrainHome-IhcEPC3v.js} +1 -1
  27. package/static/app/assets/{BrainSignals-CQPPfyyH.js → BrainSignals-DrfYSNjR.js} +1 -1
  28. package/static/app/assets/{Capture-DGdIH_Zc.js → Capture-BsO_OAeh.js} +1 -1
  29. package/static/app/assets/{Chronicle-C-UlCJoJ.js → Chronicle-BUj_UH3D.js} +1 -1
  30. package/static/app/assets/{CommandPalette-WNT4EqUX.js → CommandPalette-B4SWOaR-.js} +1 -1
  31. package/static/app/assets/{DigitalBrainExplorer-CEBH5Cwc.js → DigitalBrainExplorer-S1GSsyIT.js} +1 -1
  32. package/static/app/assets/{Library-C6xd1dlf.js → Library-CKUR2eVb.js} +1 -1
  33. package/static/app/assets/{LivingBrain-BEk-0ohw.js → LivingBrain--2UoV3Ki.js} +1 -1
  34. package/static/app/assets/{ProductFlow-CZLm5iXh.js → ProductFlow-D7rB6Xsu.js} +1 -1
  35. package/static/app/assets/{ReviewCard-CEHG6evf.js → ReviewCard-UzQZ1ULT.js} +1 -1
  36. package/static/app/assets/{RunsListPanel-CLtEJSRW.js → RunsListPanel-CDGFQYMo.js} +1 -1
  37. package/static/app/assets/{System-CAxwBUXw.js → System-0OSxZrTp.js} +1 -1
  38. package/static/app/assets/{WorkflowGraph-Dj10RuGE.js → WorkflowGraph-BIcWZTUQ.js} +1 -1
  39. package/static/app/assets/{WorkflowsPanel-Kyeh_LIT.js → WorkflowsPanel-BeT5fmbk.js} +2 -2
  40. package/static/app/assets/{actHelpers-CtSmK9Dw.js → actHelpers-DhutJObL.js} +1 -1
  41. package/static/app/assets/arrow-left-BwJfcH8J.js +1 -0
  42. package/static/app/assets/{bot-DhUGRel2.js → bot-D8tZzKMD.js} +1 -1
  43. package/static/app/assets/{brain-CLkhHsHF.js → brain-DP2JPXSV.js} +1 -1
  44. package/static/app/assets/{button-CmaEqG1T.js → button-Tzf5D7L1.js} +1 -1
  45. package/static/app/assets/circle-check-D68nHcgS.js +1 -0
  46. package/static/app/assets/{circle-pause-l96izbxj.js → circle-pause-Druue_tZ.js} +1 -1
  47. package/static/app/assets/{circle-play-CrZa25_q.js → circle-play-BAht4SSW.js} +1 -1
  48. package/static/app/assets/{cpu-BaXudqwl.js → cpu-BPbmZRPp.js} +1 -1
  49. package/static/app/assets/{download-hCVFPiyc.js → download-BmxPZEwU.js} +1 -1
  50. package/static/app/assets/{folder-open-CHL82Yp7.js → folder-open-DokOmFQJ.js} +1 -1
  51. package/static/app/assets/{hard-drive-DDzET7lk.js → hard-drive-Cw6aEA2h.js} +1 -1
  52. package/static/app/assets/{index-D2H-wSl6.js → index-DhszK7A3.js} +3 -3
  53. package/static/app/assets/{input-Df1CAY_I.js → input-BCdHoZXA.js} +1 -1
  54. package/static/app/assets/{link-2-xNnTIX1_.js → link-2-CCModn4z.js} +1 -1
  55. package/static/app/assets/{permissionCopy-D3aWHco-.js → permissionCopy-BSp1jYG7.js} +1 -1
  56. package/static/app/assets/{primitives-BioD2slS.js → primitives-D01WcJn7.js} +1 -1
  57. package/static/app/assets/search-C_zAGfvO.js +1 -0
  58. package/static/app/assets/{share-2-FkzGf8Df.js → share-2-DMMkM8Iu.js} +1 -1
  59. package/static/app/assets/{shield-alert-B3dwzik4.js → shield-alert--mrCWQko.js} +1 -1
  60. package/static/app/assets/{sourceMeta-DQSY_tah.js → sourceMeta-nvd3Cdz3.js} +1 -1
  61. package/static/app/assets/{textarea-P8o6pvOP.js → textarea-DfayhQiX.js} +1 -1
  62. package/static/app/assets/{useFocusTrap-hswOIkXE.js → useFocusTrap-C5NsTvsI.js} +1 -1
  63. package/static/app/assets/{useMutation-OJLrYSRA.js → useMutation-D7IMQTeI.js} +1 -1
  64. package/static/app/assets/{workspace-BCuk3Ku9.js → workspace-C7xidB7c.js} +1 -1
  65. package/static/app/index.html +1 -1
  66. package/static/sw.js +1 -1
  67. package/static/app/assets/arrow-left-CRl5EO4D.js +0 -1
  68. package/static/app/assets/circle-check-CFgejkOS.js +0 -1
  69. package/static/app/assets/search-BzBw8YcW.js +0 -1
package/README.md CHANGED
@@ -9,9 +9,10 @@
9
9
  [![VS Code Marketplace Version](https://vsmarketplacebadges.dev/version-short/parktaesoo.ltcai.svg)](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
10
10
  [![Open VSX Version](https://img.shields.io/open-vsx/v/parktaesoo/ltcai?label=Open%20VSX)](https://open-vsx.org/extension/parktaesoo/ltcai)
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
+ [![CD Status](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/publish.yml/badge.svg)](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/publish.yml)
12
13
  [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
13
14
 
14
- ![v12.0.0 Living Brain walkthrough](output/release/v12.0.0/gifs/v12.0.0-living-brain-walkthrough.gif)
15
+ ![v12.1.0 Living Brain walkthrough](output/release/v12.1.0/gifs/v12.1.0-living-brain-walkthrough.gif)
15
16
 
16
17
  Chat, files, folders, notes, and web pages all flow into one durable knowledge
17
18
  graph on your computer. The default is local. Cloud is optional — an
@@ -25,10 +26,10 @@ nothing leaves your machine without explicit consent.
25
26
 
26
27
  | | |
27
28
  | --- | --- |
28
- | **See your Brain's story in time** — a growth curve, an activity heatmap, and each day's story, rewindable to any past moment ![Brain Chronicle](output/release/v12.0.0/screenshots/13-chronicle.png) | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory ![Brain Chat](output/release/v12.0.0/screenshots/04-brain-chat-home.png) |
29
- | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v12.0.0/screenshots/05-memory-graph.png) | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v12.0.0/screenshots/06-capture.png) |
30
- | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v12.0.0/screenshots/12-review-center.png) | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v12.0.0/screenshots/02-recommended-models.png) |
31
- | **Watch a file become memory** — three named steps, not a pipeline diagram ![Material to memory](output/release/v12.0.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/v12.0.0/screenshots/08-system.png) |
29
+ | **See your Brain's story in time** — a growth curve, an activity heatmap, and each day's story, rewindable to any past moment ![Brain Chronicle](output/release/v12.1.0/screenshots/13-chronicle.png) | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory ![Brain Chat](output/release/v12.1.0/screenshots/04-brain-chat-home.png) |
30
+ | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v12.1.0/screenshots/05-memory-graph.png) | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v12.1.0/screenshots/06-capture.png) |
31
+ | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v12.1.0/screenshots/12-review-center.png) | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v12.1.0/screenshots/02-recommended-models.png) |
32
+ | **Watch a file become memory** — three named steps, not a pipeline diagram ![Material to memory](output/release/v12.1.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/v12.1.0/screenshots/08-system.png) |
32
33
 
33
34
  ## Why Lattice AI
34
35
 
@@ -63,57 +64,47 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
63
64
 
64
65
  | | | |
65
66
  | --- | --- | --- |
66
- | ![Login](output/release/v12.0.0/screenshots/01-login.png) | ![Model install](output/release/v12.0.0/screenshots/03-install-load-progress.png) | ![Model library](output/release/v12.0.0/screenshots/07-model-library.png) |
67
+ | ![Login](output/release/v12.1.0/screenshots/01-login.png) | ![Model install](output/release/v12.1.0/screenshots/03-install-load-progress.png) | ![Model library](output/release/v12.1.0/screenshots/07-model-library.png) |
67
68
 
68
69
  Screenshot index and capture notes:
69
- [output/release/v12.0.0/SCREENSHOT_INDEX.md](output/release/v12.0.0/SCREENSHOT_INDEX.md)
70
+ [output/release/v12.1.0/SCREENSHOT_INDEX.md](output/release/v12.1.0/SCREENSHOT_INDEX.md)
70
71
 
71
72
  ## Current Release
72
73
 
73
- The current release is **12.0.0 — Open House**:
74
-
75
- 11.9.0 made the doors answer. This release opens the house: the two
76
- largest crates are grouped by what a file is *for*, the contributor
77
- documentation is a real path in, and four gaps the last release wrote
78
- down are closed. `lattice-host` serves **422 operations across 41 route
79
- families** (`POST /mcp` and the folder-prune route are the two new ones),
80
- and the AI worker is **20 routes** (`POST /worker/vector/query` is the
81
- one addition). Cloud is still optional and the default is still local.
82
-
83
- - **Complexity management first.** `lattice-agent` is six groups —
84
- `kernel` (the loop and every decision that can refuse), `parse`,
85
- `content`, `tools`, `surface`, `prompts` — and `lattice-platform` is
86
- seven domains. Every move is a rename, so the goldens answer
87
- identically; each crate carries its own `ARCHITECTURE.md`, and
88
- `docs/DEVELOPMENT.md` and the new `docs/ROADMAP.md` are the way in.
89
- - **Small models become agents.** A measured probe (not a size regex)
90
- picks the profile, and the `guided` profile stops asking for JSON at
91
- all: pick an action by number, then one argument per turn, and the
92
- harness assembles the call. A 0.5B model finished a real file in 3.9s.
93
- The same gates, snapshots and sanitizers run on every profile.
94
- - **Remembering got faster and more careful.** Re-indexing an unchanged
95
- folder went **33s → 0.26s**, a 991-item embedding backlog went 40
96
- minutes → 15.3s, and a document's own section outline is now in the
97
- graph, so an answer can name the heading it came from. Korean queries
98
- strip their particles properly, and deleted files get a **「삭제된 파일
99
- 정리」** button instead of quietly lingering as memory.
100
- - **Four honest gaps closed.** Restore takes effect without a restart,
101
- `/setup/install` really installs on per-item consent, `POST /mcp` is
102
- inside the OpenAPI contract, and pointer tools are declared as
103
- `pip install "ltcai[pointer]"`.
74
+ The current release is **12.1.0 — Fast Path**:
75
+
76
+ 12.0.0 opened the house. This release makes remembering the house faster:
77
+ folder ingest and vault-watch overlap parse/extract/embed across files,
78
+ one `/worker/embed` call carries the document plus its chunks, rebuild
79
+ hashes outside the SQLite write lock, and a Brain with 512+ vectors tries
80
+ `hnsw+rescore` when a worker sidecar is bound. The door is still **422
81
+ operations / 41 families** over a **20-route worker**. Cloud is still
82
+ optional and the default is still local.
83
+
84
+ - **Ingest is a pipeline, not a queue of one.** Up to four files parse and
85
+ embed at once. Unchanged files still skip on fingerprint and never
86
+ enter the pool. Writes still go through the single `GraphWriter`.
87
+ - **One embed round-trip per note.** The document vector and every chunk
88
+ share a `texts` body; extract runs beside it, not in front of it; the
89
+ native incremental index files those vectors instead of hashing them
90
+ again.
91
+ - **Search stays exact until it does not need to.** Env default is still
92
+ `brute`. At 512 vectors with a bound sidecar, search asks HNSW first
93
+ and falls back to the exact scan with the original `brute` block if
94
+ the sidecar cannot answer.
104
95
 
105
96
  What this release does not close — small-model *content* quality, the
106
- mock-only `api_key` path, `brute` still being the search default, watch
107
- never deleting on its own, the ad-hoc-signed dmg — is listed in
108
- [RELEASE_NOTES_v12.0.0.md](RELEASE_NOTES_v12.0.0.md).
97
+ mock-only `api_key` path, hash embeddings as the no-download fallback,
98
+ watch never deleting on its own, the ad-hoc-signed dmg — is listed in
99
+ [RELEASE_NOTES_v12.1.0.md](RELEASE_NOTES_v12.1.0.md).
109
100
 
110
- Expected artifacts for 12.0.0 release must use exact filenames:
101
+ Expected artifacts for 12.1.0 release must use exact filenames:
111
102
 
112
- - `dist/ltcai-12.0.0-py3-none-any.whl`
113
- - `dist/ltcai-12.0.0.tar.gz`
114
- - `ltcai-12.0.0.tgz`
115
- - `dist/ltcai-12.0.0.vsix`
116
- - `src-tauri/target/release/bundle/dmg/Lattice AI_12.0.0_aarch64.dmg`
103
+ - `dist/ltcai-12.1.0-py3-none-any.whl`
104
+ - `dist/ltcai-12.1.0.tar.gz`
105
+ - `ltcai-12.1.0.tgz`
106
+ - `dist/ltcai-12.1.0.vsix`
107
+ - `src-tauri/target/release/bundle/dmg/Lattice AI_12.1.0_aarch64.dmg`
117
108
 
118
109
  Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
119
110
 
@@ -142,7 +133,7 @@ Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
142
133
 
143
134
  - External package registries are owner-published and can lag behind GitHub.
144
135
  - SQLite is the live local Brain store. The optional PostgreSQL/pgvector
145
- migration tooling is not part of the 12.0.0 worker.
136
+ migration tooling is not part of the 12.1.0 worker.
146
137
  - Docker, model downloads, cloud model calls, Brain Network, and update checks
147
138
  require explicit user action. Cloud is optional: `cli_oauth` (`agy` /
148
139
  `grok`) was live-checked at zero billing; the `api_key` path is
@@ -169,9 +160,11 @@ Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
169
160
  profile even a 0.5B model writes the requested file and reaches DONE;
170
161
  a weak summary still fails the critic and the run ends
171
162
  FAILED/NEEDS_REVIEW rather than claiming success.
172
- - Vector search still defaults to `brute` — exact and byte-compatible.
173
- `hnsw+rescore` is real but opt-in, and falls back to the exact scan
174
- with its reason when the sidecar cannot answer.
163
+ - Vector search env still defaults to `brute` — exact and byte-compatible
164
+ on a small Brain. At 512+ vectors with a bound worker sidecar it tries
165
+ `hnsw+rescore` first and falls back to the exact scan if the sidecar
166
+ cannot answer. `LATTICEAI_VECTOR_INDEX=hnsw` is still the explicit
167
+ opt-in.
175
168
  - Watch never deletes on its own: a vanished file is reported, and
176
169
  cleanup runs only through the confirmed folder-prune flow.
177
170
  - The macOS dmg is ad-hoc signed — effectively unsigned — so first launch
@@ -181,7 +174,7 @@ Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
181
174
  pending-only, no Self-Model refiner, `delete_node` leaving `PART_OF`,
182
175
  review events silent without an owner, KG-api ingest text-only, two
183
176
  store cycles per review mutation) are listed with their reasons in
184
- [RELEASE_NOTES_v12.0.0.md](RELEASE_NOTES_v12.0.0.md) and prioritized in
177
+ [RELEASE_NOTES_v12.1.0.md](RELEASE_NOTES_v12.1.0.md) and prioritized in
185
178
  [docs/ROADMAP.md](docs/ROADMAP.md).
186
179
 
187
180
  ## Release History
@@ -193,6 +186,7 @@ same boundary. Earlier notes stay in the tree as `RELEASE_NOTES_v*.md` files.
193
186
 
194
187
  | Version | Theme |
195
188
  | --- | --- |
189
+ | 12.1.0 | Fast Path |
196
190
  | 12.0.0 | Open House |
197
191
  | 11.9.0 | Working Order |
198
192
  | 11.8.0 | Travel Light |
package/docs/CHANGELOG.md CHANGED
@@ -4,6 +4,29 @@ 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
+ ## [12.1.0] - 2026-08-29 — Fast Path
8
+
9
+ ### Added
10
+ - Folder ingest and vault-watch overlap up to four files (`INGEST_INFLIGHT`).
11
+ Stamp-skip never enters the pool.
12
+ - One `POST /worker/embed` per note: document text then every chunk.
13
+ Extract runs beside embed, not in front of it.
14
+ - Default brute search tries `hnsw+rescore` when the store has 512+ vectors
15
+ and a worker sidecar is bound; failure keeps the original `brute` index
16
+ block.
17
+
18
+ ### Changed
19
+ - `rebuild_vector_index` embeds outside the write transaction.
20
+ - `write_vectors_with` files the ingest-time supplied vectors so the hash
21
+ model does not re-derive them.
22
+ - Empty `ltcai[postgres]` extra alias; the live Postgres writer left in 11.6.0.
23
+
24
+ ### Fixed
25
+ - Weekly pip-audit failed on a missing markdown report when there were no
26
+ findings.
27
+ - Weekly Postgres integration job failed because
28
+ `tests/integration/test_postgres_migration_live.py` was gone.
29
+
7
30
  ## [12.0.0] - 2026-08-18 — Open House
8
31
 
9
32
  ### Added
@@ -120,13 +120,19 @@ uploaded as artifacts. Regenerate locally with `scripts/generate_sbom.py`.
120
120
 
121
121
  ## Postgres integration gate
122
122
 
123
- `postgres-integration.yml` runs the migration-integrity suite
124
- (`tests/integration/test_postgres_migration_live.py`) that is skipped
125
- everywhere else. The suite is gated by `LTCAI_LIVE_POSTGRES_DOCKER_CONSENT=1`;
126
- the workflow sets that variable, and the test itself starts and tears down a
127
- `pgvector/pgvector:pg16` container via `docker compose` (preinstalled on
128
- GitHub-hosted `ubuntu-latest`). It is deliberately kept off the PR path (slow,
129
- image pull, needs Docker) and runs weekly + on demand.
123
+ `postgres-integration.yml` still runs weekly + on demand, but the live
124
+ SQLite→Postgres writer it used to drive left in 11.6.0 with the Python
125
+ product write path. The suite file remains so a Monday cron is not a
126
+ missing-file failure; it skip-explains the retirement. SQLite is the live
127
+ Brain store. Restore a native pgvector door before making this job start
128
+ a container again.
129
+
130
+ ## Dependency-audit clean run
131
+
132
+ `pip-audit --format markdown --output FILE` writes the file only when it
133
+ has findings. A clean run used to then fail on `cat FILE`. The workflow
134
+ now writes a placeholder report when the file is missing so a clean audit
135
+ is green.
130
136
 
131
137
  ## Visual smoke and sidecar E2E
132
138
 
@@ -1,6 +1,6 @@
1
1
  # Community And Plugins
2
2
 
3
- Current release: **12.0.0 — Open House**.
3
+ Current release: **12.1.0 — Fast Path**.
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: **12.0.0 — Open House**.
6
+ Current release: **12.1.0 — Fast Path**.
7
7
 
8
8
  This document is the contributor onboarding path: how to boot the tree, where
9
9
  a change belongs, which gates will go red, and the house rules that keep the
@@ -80,7 +80,7 @@ worker interpreter with `LTCAI_PYTHON` when both exist.
80
80
  `rust/target/release/lattice-host`, then `rust/target/debug/lattice-host`. If
81
81
  none exist it runs `cargo build -p lattice-host` (debug). A stale
82
82
  `rust/target/release/lattice-host` wins over a current debug binary — pin or
83
- rebuild (`cargo build -p lattice-host --release`) if `-V` is not 12.0.0.
83
+ rebuild (`cargo build -p lattice-host --release`) if `-V` is not 12.1.0.
84
84
 
85
85
  Do not run `npm start` and `npm run dev` on the same port. The worker
86
86
  entrypoint defaults to `LATTICEAI_PORT` or **4825**, the same port as the
@@ -237,7 +237,7 @@ in `rust/`.
237
237
  Markdown) and `scripts/check_doc_status.mjs` (every relative link under the
238
238
  root canonical docs and `docs/**`). A red line is a broken relative path —
239
239
  fix the href or put the file where the href says. Canonical docs (this one
240
- included) must carry `Current release: **12.0.0 — …**` matching
240
+ included) must carry `Current release: **12.1.0 — …**` matching
241
241
  `package.json`; do not bump that marker here ahead of the release lane.
242
242
  `npm run docs:check-current` is the release-set version pin
243
243
  ([`scripts/check_current_release_docs.mjs`](../scripts/check_current_release_docs.mjs)).
@@ -248,7 +248,7 @@ changelog entries that mention old versions stay.
248
248
  ### Release-evidence binding
249
249
 
250
250
  `scripts/check_release_evidence_bound.mjs` (lint member 9) checks that
251
- `output/release/v12.0.0/SCREENSHOT_INDEX.md` still names the live
251
+ `output/release/v12.1.0/SCREENSHOT_INDEX.md` still names the live
252
252
  `static/app/asset-manifest.json` digest and the visual mock-server
253
253
  fingerprint. It exists so a later `npm run build:assets` cannot ship
254
254
  screenshots of an older UI, and so a mock-server edit cannot leave the
@@ -317,19 +317,19 @@ For user-facing, API, runtime, release, or packaging changes, check:
317
317
  appears
318
318
 
319
319
  The release-docs lane owns README / ARCHITECTURE / FEATURE_STATUS version
320
- bumps. Do not move this file's `Current release` marker off 12.0.0 ahead of
320
+ bumps. Do not move this file's `Current release` marker off 12.1.0 ahead of
321
321
  that lane.
322
322
 
323
323
  Release/publish examples must use exact target-version filenames. Do not
324
324
  document wildcard artifact upload commands.
325
325
 
326
- For 12.0.0 release work, exact artifacts are:
326
+ For 12.1.0 release work, exact artifacts are:
327
327
 
328
- - `dist/ltcai-12.0.0-py3-none-any.whl`
329
- - `dist/ltcai-12.0.0.tar.gz`
330
- - `ltcai-12.0.0.tgz`
331
- - `dist/ltcai-12.0.0.vsix`
332
- - `src-tauri/target/release/bundle/dmg/Lattice AI_12.0.0_aarch64.dmg`
328
+ - `dist/ltcai-12.1.0-py3-none-any.whl`
329
+ - `dist/ltcai-12.1.0.tar.gz`
330
+ - `ltcai-12.1.0.tgz`
331
+ - `dist/ltcai-12.1.0.vsix`
332
+ - `src-tauri/target/release/bundle/dmg/Lattice AI_12.1.0_aarch64.dmg`
333
333
 
334
334
  The dmg is ad-hoc signed (effectively unsigned); `npm run release:validate`
335
335
  checks the names and presence, not a Developer ID signature.
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Onboarding
2
2
 
3
- Current release: **12.0.0 — Open House**.
3
+ Current release: **12.1.0 — Fast Path**.
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 (v12.0.0)
1
+ # Lattice AI — Operations Guide (v12.1.0)
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
package/docs/ROADMAP.md CHANGED
@@ -3,7 +3,7 @@
3
3
  > **Status: reference** — point-in-time inventory, redated at v12.0.0. Not a
4
4
  > canonical current-release document; version gates do not bind it.
5
5
 
6
- As of **2026-08-18**, against the 12.0.0 — Open House tree. The rows below
6
+ As of **2026-08-29**, against the 12.1.0 — Fast Path tree. The rows below
7
7
  were gathered against 11.9.0 and re-checked when 12.0.0 shipped; what that
8
8
  release closed is marked closed rather than deleted, so the ledger still
9
9
  shows what was owed.
@@ -45,7 +45,7 @@ rather than being deleted: the small-model harness (P1) and the HNSW index
45
45
  | --- | --- | --- | --- | --- |
46
46
  | **Small-model agent-run content quality** | **Half closed in 12.0.0.** The mechanical half is done: the `guided` profile stops asking for JSON, the dial is chosen by a measured probe, a run that produces nothing demotes itself downward mid-run, and a 0.5B model reached `DONE` in 3.9s with a real file. The half still open is the *writing* — a weak summary fails the critic and the run ends `FAILED` / `NEEDS_REVIEW`. The cross-model matrix is improving from 11 of 18. | L | **P1** — still the voice the product ships on 8GB, and still the reason a first run can end in a review state. | Keep measuring with the loop's own parser, not a second harness. New answers go under new fixture keys (`agent_loop` `*_extended`); do not rewrite frozen rows. The remaining lever is content, not format: better plan→content prompting and a critic that says *what* was thin, per-model hacks still forbidden. |
47
47
  | **Real-embedding default rollout** | **Narrowed in 12.0.0, not closed.** Auto-detection now adopts a real downloaded embedding model when one is present, the hash model is labelled `fallback` rather than presented as semantic, and vector identity is filtered by `(model, dim)` so two spaces cannot mix. What is still true: on a machine that has downloaded nothing, the default remains `lattice-local-hash-v1` (blake2 bag-of-features), and "semantic" recall is then a hash of tokens. | M | **P1** — recall is the product. Hash as a labelled fallback is fine; hash as the silent default is not. | Make the first-run flow offer the embedding model the way it offers a chat model, and keep the switch honest: drain the backlog through `lattice-jobs` so a change of embedder is a reindex, and report `stale_embedder` until the queue is empty. |
48
- | **Worker-side batch embed** | **Mostly closed in 12.0.0 on the drain path**: embedding moved ahead of the write transaction, so the writer no longer holds a lock while a model runs — ~66 → ~1,300 items/s, and a 991-item backlog drains in 15.3s instead of ~40 minutes. What remains is the ingest-time door: it batches only when `(model_id, dim)` already agrees, and the hash path still embeds inline, one node at a time. | M | **P1** — the backlog path is fast now; a real-embed default still needs the inline door not to serialise against the single MLX executor. | Make `GraphWriter::write_vectors_with` + one `/worker/embed` call the ingest-time path whenever a provider is bound. Keep the drain planner as the backlog path. Do not open a second embedder inside `lattice-core`. |
48
+ | **Worker-side batch embed** | **Closed in 12.1.0 on the ingest-time door**: one `/worker/embed` body is the document vector followed by every chunk, extract runs beside it, and `write_vectors_with` files those vectors. The drain planner stays the backlog path. Folder/watch overlap up to four files. What remains for a real-embed default is auto-detection on first run, not a second embedder. | M | **P1 → closed for the ingest door; the real-embed default row above is still open.** | Keep. Do not open a second embedder inside `lattice-core`. |
49
49
 
50
50
  ## P2 — real, but the product still works without them
51
51
 
@@ -1,6 +1,6 @@
1
1
  # Lattice AI Trust Model
2
2
 
3
- Current release: **12.0.0 — Open House**.
3
+ Current release: **12.1.0 — Fast Path**.
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: **12.0.0 — Open House**.
3
+ Current release: **12.1.0 — Fast Path**.
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: **12.0.0 — Open House**.
3
+ Current release: **12.1.0 — Fast Path**.
4
4
 
5
5
  명세 출처: `lattice_ai_full_spec.pptx` 슬라이드 20·21·22
6
6
  구현: `lattice_brain/graph/schema.py`
@@ -31,7 +31,7 @@ from .multimodal import (
31
31
  transcribe_audio,
32
32
  )
33
33
 
34
- __version__ = "12.0.0"
34
+ __version__ = "12.1.0"
35
35
 
36
36
  __all__ = [
37
37
  "AudioFacts",
@@ -1,3 +1,3 @@
1
1
  """Lattice AI - modular server package."""
2
2
 
3
- __version__ = "12.0.0"
3
+ __version__ = "12.1.0"
@@ -19,7 +19,7 @@ from dataclasses import dataclass
19
19
  from pathlib import Path
20
20
  from typing import Any, Dict, List
21
21
 
22
- ARCHITECTURE_VERSION_TARGET = "12.0.0"
22
+ ARCHITECTURE_VERSION_TARGET = "12.1.0"
23
23
 
24
24
  PREFERRED_REFACTORING_ORDER = [
25
25
  "agent-runtime",
@@ -28,7 +28,7 @@ from typing import Any, Dict, List
28
28
 
29
29
  from latticeai.services.architecture_readiness import architecture_readiness
30
30
 
31
- PRODUCT_VERSION_TARGET = "12.0.0"
31
+ PRODUCT_VERSION_TARGET = "12.1.0"
32
32
 
33
33
 
34
34
  @dataclass(frozen=True)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ltcai",
3
- "version": "12.0.0",
3
+ "version": "12.1.0",
4
4
  "description": "Lattice AI — local-first Digital Brain that keeps your knowledge durable across any AI model.",
5
5
  "homepage": "https://github.com/TaeSooPark-PTS/LatticeAI#readme",
6
6
  "repository": {
@@ -6,7 +6,7 @@ const root = process.cwd();
6
6
  const pkg = JSON.parse(readFileSync(path.join(root, "package.json"), "utf8"));
7
7
  const version = pkg.version;
8
8
  const releaseDir = `output/release/v${version}`;
9
- const releaseTheme = "Open House";
9
+ const releaseTheme = "Fast Path";
10
10
  const title = `${version} — ${releaseTheme}`;
11
11
  const escapedVersion = version.replaceAll(".", "\\.");
12
12
 
@@ -20,6 +20,17 @@
20
20
  "whole-image delta: naming where the change is makes the claim more",
21
21
  "specific, not less."
22
22
  ],
23
+ "12.1.0": {
24
+ "_why": [
25
+ "Fast Path is a backend ingest/search release. Folder ingest overlaps",
26
+ "parse and embed, one /worker/embed body carries the document plus its",
27
+ "chunks, rebuild hashes outside the write lock, and a Brain with 512+",
28
+ "vectors tries hnsw+rescore when a worker sidecar is bound.",
29
+ "",
30
+ "No screen was redesigned. Empty claim set on purpose. Unclaimed screens",
31
+ "are still measured and printed; they are not gated."
32
+ ]
33
+ },
23
34
  "12.0.0": {
24
35
  "_why": [
25
36
  "Open House brings component and resilience updates across the frontend:",
@@ -1863,7 +1863,7 @@ dependencies = [
1863
1863
 
1864
1864
  [[package]]
1865
1865
  name = "lattice-agent"
1866
- version = "12.0.0"
1866
+ version = "12.1.0"
1867
1867
  dependencies = [
1868
1868
  "axum",
1869
1869
  "base64 0.22.1",
@@ -1880,7 +1880,7 @@ dependencies = [
1880
1880
 
1881
1881
  [[package]]
1882
1882
  name = "lattice-ai-desktop"
1883
- version = "12.0.0"
1883
+ version = "12.1.0"
1884
1884
  dependencies = [
1885
1885
  "lattice-host",
1886
1886
  "lattice-jobs",
@@ -1895,7 +1895,7 @@ dependencies = [
1895
1895
 
1896
1896
  [[package]]
1897
1897
  name = "lattice-auth"
1898
- version = "12.0.0"
1898
+ version = "12.1.0"
1899
1899
  dependencies = [
1900
1900
  "axum",
1901
1901
  "base64 0.22.1",
@@ -1912,7 +1912,7 @@ dependencies = [
1912
1912
 
1913
1913
  [[package]]
1914
1914
  name = "lattice-chat"
1915
- version = "12.0.0"
1915
+ version = "12.1.0"
1916
1916
  dependencies = [
1917
1917
  "axum",
1918
1918
  "bytes",
@@ -1934,7 +1934,7 @@ dependencies = [
1934
1934
 
1935
1935
  [[package]]
1936
1936
  name = "lattice-core"
1937
- version = "12.0.0"
1937
+ version = "12.1.0"
1938
1938
  dependencies = [
1939
1939
  "blake2",
1940
1940
  "bytes",
@@ -1950,7 +1950,7 @@ dependencies = [
1950
1950
 
1951
1951
  [[package]]
1952
1952
  name = "lattice-host"
1953
- version = "12.0.0"
1953
+ version = "12.1.0"
1954
1954
  dependencies = [
1955
1955
  "axum",
1956
1956
  "lattice-agent",
@@ -1971,7 +1971,7 @@ dependencies = [
1971
1971
 
1972
1972
  [[package]]
1973
1973
  name = "lattice-ingest"
1974
- version = "12.0.0"
1974
+ version = "12.1.0"
1975
1975
  dependencies = [
1976
1976
  "axum",
1977
1977
  "lattice-auth",
@@ -1986,7 +1986,7 @@ dependencies = [
1986
1986
 
1987
1987
  [[package]]
1988
1988
  name = "lattice-jobs"
1989
- version = "12.0.0"
1989
+ version = "12.1.0"
1990
1990
  dependencies = [
1991
1991
  "axum",
1992
1992
  "lattice-auth",
@@ -2001,7 +2001,7 @@ dependencies = [
2001
2001
 
2002
2002
  [[package]]
2003
2003
  name = "lattice-platform"
2004
- version = "12.0.0"
2004
+ version = "12.1.0"
2005
2005
  dependencies = [
2006
2006
  "axum",
2007
2007
  "base64 0.22.1",
@@ -2024,7 +2024,7 @@ dependencies = [
2024
2024
 
2025
2025
  [[package]]
2026
2026
  name = "lattice-retrieval"
2027
- version = "12.0.0"
2027
+ version = "12.1.0"
2028
2028
  dependencies = [
2029
2029
  "axum",
2030
2030
  "fancy-regex",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "lattice-ai-desktop"
3
- version = "12.0.0"
3
+ version = "12.1.0"
4
4
  description = "Lattice AI Digital Brain desktop shell"
5
5
  authors = ["TaeSoo Park"]
6
6
  edition = "2021"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://schema.tauri.app/config/2",
3
3
  "productName": "Lattice AI",
4
- "version": "12.0.0",
4
+ "version": "12.1.0",
5
5
  "identifier": "ai.lattice.desktop",
6
6
  "build": {
7
7
  "beforeDevCommand": "npm run frontend:dev",