ltcai 12.0.0 → 12.2.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.
- package/README.md +43 -52
- package/docs/CHANGELOG.md +41 -0
- package/docs/CI_AND_RELEASE_GATES.md +20 -11
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +11 -11
- package/docs/ONBOARDING.md +1 -1
- package/docs/OPERATIONS.md +1 -1
- package/docs/ROADMAP.md +2 -2
- package/docs/TRUST_MODEL.md +1 -1
- package/docs/WHY_LATTICE.md +1 -1
- package/docs/kg-schema.md +1 -1
- package/lattice_brain/__init__.py +1 -1
- package/latticeai/__init__.py +1 -1
- package/latticeai/services/architecture_readiness.py +1 -1
- package/latticeai/services/product_readiness.py +1 -1
- package/package.json +1 -1
- package/scripts/check_current_release_docs.mjs +1 -1
- package/scripts/release_screen_claims.json +34 -0
- package/src-tauri/Cargo.lock +10 -10
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +45 -45
- package/static/app/assets/{Act-Cf1L2709.js → Act-BjGgeuQd.js} +2 -2
- package/static/app/assets/{AdminConsole-DPAbLTYV.js → AdminConsole-C6hcJGMr.js} +1 -1
- package/static/app/assets/{Brain-DqamGrj-.js → Brain-CNQnIaA8.js} +2 -2
- package/static/app/assets/BrainHome-CGJ6O69l.js +2 -0
- package/static/app/assets/{BrainSignals-CQPPfyyH.js → BrainSignals-DONPljxz.js} +1 -1
- package/static/app/assets/{Capture-DGdIH_Zc.js → Capture-BMCC5544.js} +1 -1
- package/static/app/assets/{Chronicle-C-UlCJoJ.js → Chronicle-DF6sOonx.js} +1 -1
- package/static/app/assets/{CommandPalette-WNT4EqUX.js → CommandPalette-DiWyutdM.js} +1 -1
- package/static/app/assets/{DigitalBrainExplorer-CEBH5Cwc.js → DigitalBrainExplorer-BL3V6Dqz.js} +1 -1
- package/static/app/assets/{Library-C6xd1dlf.js → Library-B-ue9hXL.js} +1 -1
- package/static/app/assets/{LivingBrain-BEk-0ohw.js → LivingBrain-b1RiM5Rh.js} +1 -1
- package/static/app/assets/{ProductFlow-CZLm5iXh.js → ProductFlow-wZIKJW7G.js} +1 -1
- package/static/app/assets/{ReviewCard-CEHG6evf.js → ReviewCard-D1fGTEn7.js} +1 -1
- package/static/app/assets/{RunsListPanel-CLtEJSRW.js → RunsListPanel-DAirtLkS.js} +1 -1
- package/static/app/assets/System-BEI1eoC4.js +1 -0
- package/static/app/assets/{WorkflowGraph-Dj10RuGE.js → WorkflowGraph-qrI6GU4R.js} +1 -1
- package/static/app/assets/{WorkflowsPanel-Kyeh_LIT.js → WorkflowsPanel-CIMNTw-O.js} +2 -2
- package/static/app/assets/{actHelpers-CtSmK9Dw.js → actHelpers-BMukIRnQ.js} +1 -1
- package/static/app/assets/arrow-left-iVa1goff.js +1 -0
- package/static/app/assets/{bot-DhUGRel2.js → bot-Dkd-DbiP.js} +1 -1
- package/static/app/assets/brain-BsexlNOA.js +1 -0
- package/static/app/assets/{button-CmaEqG1T.js → button-BA0N_zId.js} +1 -1
- package/static/app/assets/circle-check-BxaDWjPR.js +1 -0
- package/static/app/assets/{circle-pause-l96izbxj.js → circle-pause-918Kuvk0.js} +1 -1
- package/static/app/assets/{circle-play-CrZa25_q.js → circle-play-CS0IbVDV.js} +1 -1
- package/static/app/assets/{cpu-BaXudqwl.js → cpu-BpvoWsjk.js} +1 -1
- package/static/app/assets/{download-hCVFPiyc.js → download-BvkMLLLN.js} +1 -1
- package/static/app/assets/{folder-open-CHL82Yp7.js → folder-open-YmGugIBf.js} +1 -1
- package/static/app/assets/{hard-drive-DDzET7lk.js → hard-drive-BOzmS-cq.js} +1 -1
- package/static/app/assets/{index-CB93CZWW.css → index-C8gwOf0C.css} +1 -1
- package/static/app/assets/{index-D2H-wSl6.js → index-CfeqZ9Ri.js} +3 -3
- package/static/app/assets/{input-Df1CAY_I.js → input-CFfCfMjO.js} +1 -1
- package/static/app/assets/{link-2-xNnTIX1_.js → link-2-CcYzeM7M.js} +1 -1
- package/static/app/assets/{permissionCopy-D3aWHco-.js → permissionCopy-B23r24oX.js} +1 -1
- package/static/app/assets/{primitives-BioD2slS.js → primitives-BDryQl6H.js} +1 -1
- package/static/app/assets/search-DHsPwmPw.js +1 -0
- package/static/app/assets/{share-2-FkzGf8Df.js → share-2-B-gPv2ec.js} +1 -1
- package/static/app/assets/{shield-alert-B3dwzik4.js → shield-alert-CfyRO1p0.js} +1 -1
- package/static/app/assets/{sourceMeta-DQSY_tah.js → sourceMeta-C4LDEy1S.js} +1 -1
- package/static/app/assets/{textarea-P8o6pvOP.js → textarea-BdVMYEb1.js} +1 -1
- package/static/app/assets/{useFocusTrap-hswOIkXE.js → useFocusTrap-CV73DLHn.js} +1 -1
- package/static/app/assets/{useMutation-OJLrYSRA.js → useMutation-B8QKq2NW.js} +1 -1
- package/static/app/assets/workspace-BmfVs66W.js +1 -0
- package/static/app/index.html +2 -2
- package/static/sw.js +1 -1
- package/static/app/assets/BrainHome-MHe2_RYs.js +0 -2
- package/static/app/assets/System-CAxwBUXw.js +0 -1
- package/static/app/assets/arrow-left-CRl5EO4D.js +0 -1
- package/static/app/assets/brain-CLkhHsHF.js +0 -1
- package/static/app/assets/circle-check-CFgejkOS.js +0 -1
- package/static/app/assets/search-BzBw8YcW.js +0 -1
- package/static/app/assets/workspace-BCuk3Ku9.js +0 -1
package/README.md
CHANGED
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
[](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
|
|
10
10
|
[](https://open-vsx.org/extension/parktaesoo/ltcai)
|
|
11
11
|
[](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml)
|
|
12
|
+
[](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/publish.yml)
|
|
12
13
|
[](LICENSE)
|
|
13
14
|
|
|
14
|
-

|
|
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  | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory  |
|
|
30
|
+
| **See how knowledge connects** — a real relationship graph, not a file list  | **Capture anything** — files, whole folders, notes, screenshots, web pages  |
|
|
31
|
+
| **Automate with review** — agent changes become proposals you approve first  | **Pick a model in one click** — recommended local models for your hardware  |
|
|
32
|
+
| **Watch a file become memory** — three named steps, not a pipeline diagram  | **Say how much it may do alone** — one dial in plain words; dangerous actions stay blocked either way  |
|
|
32
33
|
|
|
33
34
|
## Why Lattice AI
|
|
34
35
|
|
|
@@ -63,57 +64,43 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
|
|
|
63
64
|
|
|
64
65
|
| | | |
|
|
65
66
|
| --- | --- | --- |
|
|
66
|
-
|  |  |  |
|
|
67
68
|
|
|
68
69
|
Screenshot index and capture notes:
|
|
69
|
-
[output/release/v12.
|
|
70
|
+
[output/release/v12.2.0/SCREENSHOT_INDEX.md](output/release/v12.2.0/SCREENSHOT_INDEX.md)
|
|
70
71
|
|
|
71
72
|
## Current Release
|
|
72
73
|
|
|
73
|
-
The current release is **12.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
`
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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.2.0 — Small Voice**:
|
|
75
|
+
|
|
76
|
+
12.1.0 made remembering faster. This release makes a small local model
|
|
77
|
+
able to *act*: 2B-class models can call MCP tools and skills without
|
|
78
|
+
emitting perfect JSON, and the home screen names those actions in
|
|
79
|
+
plain words. The door is still **422 operations / 41 families** over a
|
|
80
|
+
**20-route worker**. Cloud is still optional and the default is still local.
|
|
81
|
+
|
|
82
|
+
- **Small models speak tools.** `name`/`arguments`, Qwen XML, and
|
|
83
|
+
`Action: mcp.grep` parse as the same call. Compact lists stay at nine
|
|
84
|
+
rows. A skill's "use when" line is consulted even if the user never
|
|
85
|
+
typed `skill.`. A quoted search term fills a missing `pattern`.
|
|
86
|
+
- **The composer offers the work.** Folder search, read-and-summarize,
|
|
87
|
+
memory, and skill review are chips under the box. Settings says the
|
|
88
|
+
same in one card. MCP/skill steps in the timeline get a plain prefix.
|
|
89
|
+
- **12.1.0 Fast Path is unchanged.** Folder overlap, one embed body,
|
|
90
|
+
rebuild outside the write lock, auto-HNSW at 512.
|
|
104
91
|
|
|
105
92
|
What this release does not close — small-model *content* quality, the
|
|
106
|
-
mock-only `api_key` path,
|
|
107
|
-
never deleting on its own, the ad-hoc-signed dmg — is listed in
|
|
108
|
-
[RELEASE_NOTES_v12.
|
|
93
|
+
mock-only `api_key` path, hash embeddings as the no-download fallback,
|
|
94
|
+
watch never deleting on its own, the ad-hoc-signed dmg — is listed in
|
|
95
|
+
[RELEASE_NOTES_v12.2.0.md](RELEASE_NOTES_v12.2.0.md).
|
|
109
96
|
|
|
110
|
-
Expected artifacts for 12.
|
|
97
|
+
Expected artifacts for 12.2.0 release must use exact filenames:
|
|
111
98
|
|
|
112
|
-
- `dist/ltcai-12.
|
|
113
|
-
- `dist/ltcai-12.
|
|
114
|
-
- `ltcai-12.
|
|
115
|
-
- `dist/ltcai-12.
|
|
116
|
-
- `src-tauri/target/release/bundle/dmg/Lattice AI_12.
|
|
99
|
+
- `dist/ltcai-12.2.0-py3-none-any.whl`
|
|
100
|
+
- `dist/ltcai-12.2.0.tar.gz`
|
|
101
|
+
- `ltcai-12.2.0.tgz`
|
|
102
|
+
- `dist/ltcai-12.2.0.vsix`
|
|
103
|
+
- `src-tauri/target/release/bundle/dmg/Lattice AI_12.2.0_aarch64.dmg`
|
|
117
104
|
|
|
118
105
|
Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
|
|
119
106
|
|
|
@@ -142,7 +129,7 @@ Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
|
|
|
142
129
|
|
|
143
130
|
- External package registries are owner-published and can lag behind GitHub.
|
|
144
131
|
- SQLite is the live local Brain store. The optional PostgreSQL/pgvector
|
|
145
|
-
migration tooling is not part of the 12.
|
|
132
|
+
migration tooling is not part of the 12.1.0 worker.
|
|
146
133
|
- Docker, model downloads, cloud model calls, Brain Network, and update checks
|
|
147
134
|
require explicit user action. Cloud is optional: `cli_oauth` (`agy` /
|
|
148
135
|
`grok`) was live-checked at zero billing; the `api_key` path is
|
|
@@ -169,9 +156,11 @@ Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
|
|
|
169
156
|
profile even a 0.5B model writes the requested file and reaches DONE;
|
|
170
157
|
a weak summary still fails the critic and the run ends
|
|
171
158
|
FAILED/NEEDS_REVIEW rather than claiming success.
|
|
172
|
-
- Vector search still defaults to `brute` — exact and byte-compatible
|
|
173
|
-
|
|
174
|
-
|
|
159
|
+
- Vector search env still defaults to `brute` — exact and byte-compatible
|
|
160
|
+
on a small Brain. At 512+ vectors with a bound worker sidecar it tries
|
|
161
|
+
`hnsw+rescore` first and falls back to the exact scan if the sidecar
|
|
162
|
+
cannot answer. `LATTICEAI_VECTOR_INDEX=hnsw` is still the explicit
|
|
163
|
+
opt-in.
|
|
175
164
|
- Watch never deletes on its own: a vanished file is reported, and
|
|
176
165
|
cleanup runs only through the confirmed folder-prune flow.
|
|
177
166
|
- The macOS dmg is ad-hoc signed — effectively unsigned — so first launch
|
|
@@ -181,7 +170,7 @@ Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
|
|
|
181
170
|
pending-only, no Self-Model refiner, `delete_node` leaving `PART_OF`,
|
|
182
171
|
review events silent without an owner, KG-api ingest text-only, two
|
|
183
172
|
store cycles per review mutation) are listed with their reasons in
|
|
184
|
-
[RELEASE_NOTES_v12.
|
|
173
|
+
[RELEASE_NOTES_v12.2.0.md](RELEASE_NOTES_v12.2.0.md) and prioritized in
|
|
185
174
|
[docs/ROADMAP.md](docs/ROADMAP.md).
|
|
186
175
|
|
|
187
176
|
## Release History
|
|
@@ -193,6 +182,8 @@ same boundary. Earlier notes stay in the tree as `RELEASE_NOTES_v*.md` files.
|
|
|
193
182
|
|
|
194
183
|
| Version | Theme |
|
|
195
184
|
| --- | --- |
|
|
185
|
+
| 12.2.0 | Small Voice |
|
|
186
|
+
| 12.1.0 | Fast Path |
|
|
196
187
|
| 12.0.0 | Open House |
|
|
197
188
|
| 11.9.0 | Working Order |
|
|
198
189
|
| 11.8.0 | Travel Light |
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,47 @@ 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.2.0] - 2026-08-29 — Small Voice
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Function-calling envelope parse: `name`/`arguments`, nested `function`,
|
|
11
|
+
Qwen `<function=…><parameter=…>`, `Action: mcp.grep`.
|
|
12
|
+
- Compact executor lists cap at the guided menu size (9). Skills whose
|
|
13
|
+
`when` line matches the request are consulted without naming `skill.`.
|
|
14
|
+
- A quoted search term fills a missing MCP/native `pattern`/`query`.
|
|
15
|
+
- Home composer chips for folder search, read-and-summarize, memory, and
|
|
16
|
+
skill review. Settings card states the same. MCP/skill timeline rows
|
|
17
|
+
get a plain-language prefix.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- Compact prompt names the function-calling envelope 2B models emit.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- Labeled salvage refused dotted `mcp.` / `skill.` names as chatter.
|
|
24
|
+
|
|
25
|
+
## [12.1.0] - 2026-08-29 — Fast Path
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- Folder ingest and vault-watch overlap up to four files (`INGEST_INFLIGHT`).
|
|
29
|
+
Stamp-skip never enters the pool.
|
|
30
|
+
- One `POST /worker/embed` per note: document text then every chunk.
|
|
31
|
+
Extract runs beside embed, not in front of it.
|
|
32
|
+
- Default brute search tries `hnsw+rescore` when the store has 512+ vectors
|
|
33
|
+
and a worker sidecar is bound; failure keeps the original `brute` index
|
|
34
|
+
block.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
- `rebuild_vector_index` embeds outside the write transaction.
|
|
38
|
+
- `write_vectors_with` files the ingest-time supplied vectors so the hash
|
|
39
|
+
model does not re-derive them.
|
|
40
|
+
- Empty `ltcai[postgres]` extra alias; the live Postgres writer left in 11.6.0.
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
- Weekly pip-audit failed on a missing markdown report when there were no
|
|
44
|
+
findings.
|
|
45
|
+
- Weekly Postgres integration job failed because
|
|
46
|
+
`tests/integration/test_postgres_migration_live.py` was gone.
|
|
47
|
+
|
|
7
48
|
## [12.0.0] - 2026-08-18 — Open House
|
|
8
49
|
|
|
9
50
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CI & Release Gates
|
|
2
2
|
|
|
3
|
-
> Status: reference 2026-08-
|
|
3
|
+
> Status: reference 2026-08-29
|
|
4
4
|
|
|
5
5
|
Reference for the GitHub Actions workflows that guard `main` and releases, the
|
|
6
6
|
supply-chain hardening applied to them, and the recommended branch-protection
|
|
@@ -13,6 +13,7 @@ configuration. Companion to [SECURITY_AUDIT.md](SECURITY_AUDIT.md) and
|
|
|
13
13
|
|----------|------|----------|---------|
|
|
14
14
|
| CI | `.github/workflows/ci.yml` | push/PR to `main` | Lint, typecheck, unit + coverage + integration tests, product-readiness, build + wheel smoke, Rust workspace |
|
|
15
15
|
| Release | `.github/workflows/release.yml` | tags `v*` / `[0-9]*` | Build & validate artifacts (no publish; does not re-run CI lint/tests) |
|
|
16
|
+
| CD | `.github/workflows/publish.yml` | GitHub Release `published`, dispatch | Publish npm / PyPI / Marketplace / Open VSX (idempotent; never on a bare tag) |
|
|
16
17
|
| Visual Smoke | `.github/workflows/visual.yml` | push to `main`, nightly cron, dispatch | Playwright visual smoke (not on PRs) |
|
|
17
18
|
| Sidecar E2E | `.github/workflows/e2e-sidecar.yml` | nightly cron, dispatch | Live sidecar Playwright first-value loop |
|
|
18
19
|
| Dependency Audit | `.github/workflows/dependency-audit.yml` | weekly cron, dispatch | pip-audit + npm audit + CycloneDX SBOMs |
|
|
@@ -120,13 +121,19 @@ uploaded as artifacts. Regenerate locally with `scripts/generate_sbom.py`.
|
|
|
120
121
|
|
|
121
122
|
## Postgres integration gate
|
|
122
123
|
|
|
123
|
-
`postgres-integration.yml` runs the
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
`postgres-integration.yml` still runs weekly + on demand, but the live
|
|
125
|
+
SQLite→Postgres writer it used to drive left in 11.6.0 with the Python
|
|
126
|
+
product write path. The suite file remains so a Monday cron is not a
|
|
127
|
+
missing-file failure; it skip-explains the retirement. SQLite is the live
|
|
128
|
+
Brain store. Restore a native pgvector door before making this job start
|
|
129
|
+
a container again.
|
|
130
|
+
|
|
131
|
+
## Dependency-audit clean run
|
|
132
|
+
|
|
133
|
+
`pip-audit --format markdown --output FILE` writes the file only when it
|
|
134
|
+
has findings. A clean run used to then fail on `cat FILE`. The workflow
|
|
135
|
+
now writes a placeholder report when the file is missing so a clean audit
|
|
136
|
+
is green.
|
|
130
137
|
|
|
131
138
|
## Visual smoke and sidecar E2E
|
|
132
139
|
|
|
@@ -177,9 +184,11 @@ It still runs:
|
|
|
177
184
|
- `npm pack`, vsce package
|
|
178
185
|
- `validate_release_artifacts.py <v> --require-vsix --require-tgz`
|
|
179
186
|
|
|
180
|
-
Package publication (PyPI / npm / VS Code Marketplace / Open VSX) is
|
|
181
|
-
|
|
182
|
-
|
|
187
|
+
Package publication (PyPI / npm / VS Code Marketplace / Open VSX) is
|
|
188
|
+
`publish.yml` (CD). It runs when a GitHub Release is **published**, or on
|
|
189
|
+
`workflow_dispatch` if that version already has a pushed `v*` tag. A bare
|
|
190
|
+
tag push never publishes. Local `npm run publish:*` still uses **exact
|
|
191
|
+
version filenames**, never a `dist/*` glob. See
|
|
183
192
|
[../RELEASE.md](../RELEASE.md) for the full procedure.
|
|
184
193
|
|
|
185
194
|
## Limitations (honest)
|
package/docs/DEVELOPMENT.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> **Status: canonical** — current contributor guidance, kept in sync with the
|
|
4
4
|
> current release.
|
|
5
5
|
|
|
6
|
-
Current release: **12.
|
|
6
|
+
Current release: **12.2.0 — Small Voice**.
|
|
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.
|
|
83
|
+
rebuild (`cargo build -p lattice-host --release`) if `-V` is not 12.2.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.
|
|
240
|
+
included) must carry `Current release: **12.2.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.
|
|
251
|
+
`output/release/v12.2.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.
|
|
320
|
+
bumps. Do not move this file's `Current release` marker off 12.2.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.
|
|
326
|
+
For 12.2.0 release work, exact artifacts are:
|
|
327
327
|
|
|
328
|
-
- `dist/ltcai-12.
|
|
329
|
-
- `dist/ltcai-12.
|
|
330
|
-
- `ltcai-12.
|
|
331
|
-
- `dist/ltcai-12.
|
|
332
|
-
- `src-tauri/target/release/bundle/dmg/Lattice AI_12.
|
|
328
|
+
- `dist/ltcai-12.2.0-py3-none-any.whl`
|
|
329
|
+
- `dist/ltcai-12.2.0.tar.gz`
|
|
330
|
+
- `ltcai-12.2.0.tgz`
|
|
331
|
+
- `dist/ltcai-12.2.0.vsix`
|
|
332
|
+
- `src-tauri/target/release/bundle/dmg/Lattice AI_12.2.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.
|
package/docs/ONBOARDING.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Lattice AI Onboarding
|
|
2
2
|
|
|
3
|
-
Current release: **12.
|
|
3
|
+
Current release: **12.2.0 — Small Voice**.
|
|
4
4
|
|
|
5
5
|
The first-run goal is a five-minute path from "I opened the app" to "my Brain
|
|
6
6
|
has a source, a question, and proof." This page is the product contract behind
|
package/docs/OPERATIONS.md
CHANGED
package/docs/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-
|
|
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** | **
|
|
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
|
|
package/docs/TRUST_MODEL.md
CHANGED
package/docs/WHY_LATTICE.md
CHANGED
package/docs/kg-schema.md
CHANGED
package/latticeai/__init__.py
CHANGED
package/package.json
CHANGED
|
@@ -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 = "
|
|
9
|
+
const releaseTheme = "Small Voice";
|
|
10
10
|
const title = `${version} — ${releaseTheme}`;
|
|
11
11
|
const escapedVersion = version.replaceAll(".", "\\.");
|
|
12
12
|
|
|
@@ -20,6 +20,40 @@
|
|
|
20
20
|
"whole-image delta: naming where the change is makes the claim more",
|
|
21
21
|
"specific, not less."
|
|
22
22
|
],
|
|
23
|
+
"12.2.0": {
|
|
24
|
+
"_why": [
|
|
25
|
+
"Small Voice is a 2B tool-calling release with two visible surfaces.",
|
|
26
|
+
"",
|
|
27
|
+
"1. Brain home composer: four plain-language chips (folder search, read",
|
|
28
|
+
" and summarize, memory, skill review) sit under the textarea. The",
|
|
29
|
+
" Living Brain still dominates the shot, so the whole-image delta sits",
|
|
30
|
+
" under the 8% live floor; the claim uses the measured 3.96% as the",
|
|
31
|
+
" floor, not a redesign of the shell.",
|
|
32
|
+
"",
|
|
33
|
+
"2. Settings: a new 'small models can use tools' card with four badges.",
|
|
34
|
+
" That card is why 08 grew 168px.",
|
|
35
|
+
"",
|
|
36
|
+
"No other screen was redesigned. Unclaimed screens are measured and",
|
|
37
|
+
"printed; they are not gated."
|
|
38
|
+
],
|
|
39
|
+
"04-brain-chat-home.png": {
|
|
40
|
+
"min_pct": 3.0
|
|
41
|
+
},
|
|
42
|
+
"08-system.png": {
|
|
43
|
+
"min_pct": 1.5
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"12.1.0": {
|
|
47
|
+
"_why": [
|
|
48
|
+
"Fast Path is a backend ingest/search release. Folder ingest overlaps",
|
|
49
|
+
"parse and embed, one /worker/embed body carries the document plus its",
|
|
50
|
+
"chunks, rebuild hashes outside the write lock, and a Brain with 512+",
|
|
51
|
+
"vectors tries hnsw+rescore when a worker sidecar is bound.",
|
|
52
|
+
"",
|
|
53
|
+
"No screen was redesigned. Empty claim set on purpose. Unclaimed screens",
|
|
54
|
+
"are still measured and printed; they are not gated."
|
|
55
|
+
]
|
|
56
|
+
},
|
|
23
57
|
"12.0.0": {
|
|
24
58
|
"_why": [
|
|
25
59
|
"Open House brings component and resilience updates across the frontend:",
|
package/src-tauri/Cargo.lock
CHANGED
|
@@ -1863,7 +1863,7 @@ dependencies = [
|
|
|
1863
1863
|
|
|
1864
1864
|
[[package]]
|
|
1865
1865
|
name = "lattice-agent"
|
|
1866
|
-
version = "12.
|
|
1866
|
+
version = "12.2.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.
|
|
1883
|
+
version = "12.2.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.
|
|
1898
|
+
version = "12.2.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.
|
|
1915
|
+
version = "12.2.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.
|
|
1937
|
+
version = "12.2.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.
|
|
1953
|
+
version = "12.2.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.
|
|
1974
|
+
version = "12.2.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.
|
|
1989
|
+
version = "12.2.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.
|
|
2004
|
+
version = "12.2.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.
|
|
2027
|
+
version = "12.2.0"
|
|
2028
2028
|
dependencies = [
|
|
2029
2029
|
"axum",
|
|
2030
2030
|
"fancy-regex",
|
package/src-tauri/Cargo.toml
CHANGED