ltcai 11.9.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 (128) hide show
  1. package/README.md +74 -59
  2. package/docs/CHANGELOG.md +115 -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 +267 -119
  6. package/docs/ENTERPRISE.md +1 -1
  7. package/docs/MULTI_AGENT_RUNTIME.md +4 -4
  8. package/docs/ONBOARDING.md +13 -3
  9. package/docs/OPERATIONS.md +13 -4
  10. package/docs/REALTIME_COLLABORATION.md +1 -1
  11. package/docs/ROADMAP.md +113 -0
  12. package/docs/TRUST_MODEL.md +16 -2
  13. package/docs/WHY_LATTICE.md +8 -2
  14. package/docs/WORKFLOW_DESIGNER.md +2 -2
  15. package/docs/kg-schema.md +51 -5
  16. package/docs/mcp-tools.md +17 -0
  17. package/lattice_brain/__init__.py +1 -1
  18. package/lattice_brain/graph/_kg_common/extraction.py +459 -105
  19. package/lattice_brain/graph/_kg_common/normalize.py +305 -0
  20. package/lattice_brain/graph/_kg_common/patterns.py +275 -0
  21. package/lattice_brain/graph/_kg_common/relations.py +12 -3
  22. package/lattice_brain/graph/_kg_common/sections.py +107 -0
  23. package/lattice_brain/graph/_kg_constants.py +7 -0
  24. package/latticeai/__init__.py +1 -1
  25. package/latticeai/api/agent_worker_seam.py +32 -0
  26. package/latticeai/api/worker_compute.py +78 -3
  27. package/latticeai/core/embedding_providers/__init__.py +16 -0
  28. package/latticeai/core/embedding_providers/autodetect.py +302 -0
  29. package/latticeai/core/embedding_providers/base.py +25 -0
  30. package/latticeai/core/embedding_providers/profiles.py +44 -0
  31. package/latticeai/core/embedding_providers/text.py +74 -8
  32. package/latticeai/core/vector_index/__init__.py +61 -0
  33. package/latticeai/core/vector_index/hnsw.py +383 -0
  34. package/latticeai/core/vector_index/sidecar.py +329 -0
  35. package/latticeai/models/router/generation.py +101 -22
  36. package/latticeai/models/router/loading.py +109 -4
  37. package/latticeai/runtime/brain_runtime.py +43 -9
  38. package/latticeai/runtime/build_phases/worker_profile.py +13 -4
  39. package/latticeai/services/architecture_readiness.py +2 -2
  40. package/latticeai/services/product_readiness.py +10 -5
  41. package/latticeai/services/search_service.py +7 -0
  42. package/latticeai/tools/__init__.py +6 -1
  43. package/latticeai/tools/documents.py +12 -0
  44. package/latticeai/tools/markup.py +152 -0
  45. package/package.json +2 -1
  46. package/scripts/check_current_release_docs.mjs +1 -1
  47. package/scripts/compose_openapi.py +2 -0
  48. package/scripts/openapi_route_families.json +7 -3
  49. package/scripts/publish_release.mjs +157 -0
  50. package/scripts/release_screen_claims.json +23 -0
  51. package/src-tauri/Cargo.lock +44 -10
  52. package/src-tauri/Cargo.toml +1 -1
  53. package/src-tauri/tauri.conf.json +1 -1
  54. package/static/app/asset-manifest.json +47 -41
  55. package/static/app/assets/Act-DCRUH46a.js +2 -0
  56. package/static/app/assets/AdminConsole-BFBj6OvN.js +1 -0
  57. package/static/app/assets/Brain-BXcoxIvb.js +2 -0
  58. package/static/app/assets/BrainHome-IhcEPC3v.js +2 -0
  59. package/static/app/assets/BrainSignals-DrfYSNjR.js +1 -0
  60. package/static/app/assets/Capture-BsO_OAeh.js +1 -0
  61. package/static/app/assets/Chronicle-BUj_UH3D.js +1 -0
  62. package/static/app/assets/CommandPalette-B4SWOaR-.js +1 -0
  63. package/static/app/assets/DigitalBrainExplorer-S1GSsyIT.js +321 -0
  64. package/static/app/assets/Library-CKUR2eVb.js +1 -0
  65. package/static/app/assets/LivingBrain--2UoV3Ki.js +1 -0
  66. package/static/app/assets/ProductFlow-D7rB6Xsu.js +1 -0
  67. package/static/app/assets/QueryClientProvider-B3OjqSyJ.js +1 -0
  68. package/static/app/assets/ReviewCard-UzQZ1ULT.js +3 -0
  69. package/static/app/assets/RunsListPanel-CDGFQYMo.js +1 -0
  70. package/static/app/assets/System-0OSxZrTp.js +1 -0
  71. package/static/app/assets/WorkflowGraph-BIcWZTUQ.js +1 -0
  72. package/static/app/assets/WorkflowsPanel-BeT5fmbk.js +2 -0
  73. package/static/app/assets/actHelpers-DhutJObL.js +1 -0
  74. package/static/app/assets/arrow-left-BwJfcH8J.js +1 -0
  75. package/static/app/assets/{bot-Bc3Q27YR.js → bot-D8tZzKMD.js} +1 -1
  76. package/static/app/assets/brain-DP2JPXSV.js +1 -0
  77. package/static/app/assets/button-Tzf5D7L1.js +1 -0
  78. package/static/app/assets/circle-check-D68nHcgS.js +1 -0
  79. package/static/app/assets/{circle-pause-BGMiV8UU.js → circle-pause-Druue_tZ.js} +1 -1
  80. package/static/app/assets/{circle-play-DoanLHnd.js → circle-play-BAht4SSW.js} +1 -1
  81. package/static/app/assets/{cpu-DwzNf82m.js → cpu-BPbmZRPp.js} +1 -1
  82. package/static/app/assets/{download-Ddw49yCV.js → download-BmxPZEwU.js} +1 -1
  83. package/static/app/assets/{folder-open-Brd6Kvto.js → folder-open-DokOmFQJ.js} +1 -1
  84. package/static/app/assets/{hard-drive-Bu-DTJdB.js → hard-drive-Cw6aEA2h.js} +1 -1
  85. package/static/app/assets/{index-CGdg_aq9.css → index-CB93CZWW.css} +1 -1
  86. package/static/app/assets/index-DhszK7A3.js +13 -0
  87. package/static/app/assets/input-BCdHoZXA.js +1 -0
  88. package/static/app/assets/jsx-runtime-bzQ4Vb5N.js +1 -0
  89. package/static/app/assets/{link-2-DZ4OA5tJ.js → link-2-CCModn4z.js} +1 -1
  90. package/static/app/assets/{permissionCopy-D9TR0F8b.js → permissionCopy-BSp1jYG7.js} +1 -1
  91. package/static/app/assets/primitives-D01WcJn7.js +1 -0
  92. package/static/app/assets/search-C_zAGfvO.js +1 -0
  93. package/static/app/assets/{share-2-BC5FirFv.js → share-2-DMMkM8Iu.js} +1 -1
  94. package/static/app/assets/{shield-alert-DUbR2W2s.js → shield-alert--mrCWQko.js} +1 -1
  95. package/static/app/assets/sourceMeta-nvd3Cdz3.js +1 -0
  96. package/static/app/assets/textarea-DfayhQiX.js +1 -0
  97. package/static/app/assets/useFocusTrap-C5NsTvsI.js +1 -0
  98. package/static/app/assets/useMutation-D7IMQTeI.js +1 -0
  99. package/static/app/assets/workspace-C7xidB7c.js +1 -0
  100. package/static/app/index.html +4 -4
  101. package/static/sw.js +1 -1
  102. package/static/app/assets/Act-B4WT81kh.js +0 -1
  103. package/static/app/assets/AdminConsole--Wf71m-o.js +0 -1
  104. package/static/app/assets/Brain-CtYaa26c.js +0 -321
  105. package/static/app/assets/BrainHome-Be2VPJEc.js +0 -2
  106. package/static/app/assets/BrainSignals-C0__xgpG.js +0 -1
  107. package/static/app/assets/Capture-DdNi5Peb.js +0 -1
  108. package/static/app/assets/Chronicle-B3hNveeI.js +0 -1
  109. package/static/app/assets/CommandPalette-CIsnSsFL.js +0 -1
  110. package/static/app/assets/Library-Bl5XClFV.js +0 -1
  111. package/static/app/assets/LivingBrain-DjkTB_gh.js +0 -1
  112. package/static/app/assets/ProductFlow-DCUNRNHs.js +0 -1
  113. package/static/app/assets/ReviewCard-CD3yWvUB.js +0 -3
  114. package/static/app/assets/System-BJ6jQ_SL.js +0 -1
  115. package/static/app/assets/arrow-left-6_28Z0qH.js +0 -1
  116. package/static/app/assets/brain-B9BDrMTe.js +0 -1
  117. package/static/app/assets/button-D6JcpYcf.js +0 -1
  118. package/static/app/assets/circle-check-BFu9lD-3.js +0 -1
  119. package/static/app/assets/index-CWKRRsLW.js +0 -10
  120. package/static/app/assets/input-CEqsxtil.js +0 -1
  121. package/static/app/assets/primitives-DORg7Z_7.js +0 -1
  122. package/static/app/assets/search-0NQ21wXe.js +0 -1
  123. package/static/app/assets/textarea-jtQcRSXo.js +0 -1
  124. package/static/app/assets/useFocusTrap-HRemcWId.js +0 -1
  125. package/static/app/assets/useMutation-DqlFE-Bw.js +0 -1
  126. package/static/app/assets/useQuery-BizqBNGw.js +0 -1
  127. package/static/app/assets/utils-WgW4V69R.js +0 -4
  128. package/static/app/assets/workspace-DSek3jCY.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
- ![v11.9.0 Living Brain walkthrough](output/release/v11.9.0/gifs/v11.9.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/v11.9.0/screenshots/13-chronicle.png) | **Chat with a Brain that remembers** — every conversation grows durable, source-linked memory ![Brain Chat](output/release/v11.9.0/screenshots/04-brain-chat-home.png) |
29
- | **See how knowledge connects** — a real relationship graph, not a file list ![Memory Graph](output/release/v11.9.0/screenshots/05-memory-graph.png) | **Capture anything** — files, whole folders, notes, screenshots, web pages ![Capture](output/release/v11.9.0/screenshots/06-capture.png) |
30
- | **Automate with review** — agent changes become proposals you approve first ![Review Center](output/release/v11.9.0/screenshots/12-review-center.png) | **Pick a model in one click** — recommended local models for your hardware ![Recommended Models](output/release/v11.9.0/screenshots/02-recommended-models.png) |
31
- | **Watch a file become memory** — three named steps, not a pipeline diagram ![Material to memory](output/release/v11.9.0/screenshots/11-knowledge-journey.png) | **Say how much it may do alone** — one dial in plain words; dangerous actions stay blocked either way ![Settings](output/release/v11.9.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
 
@@ -40,6 +41,10 @@ nothing leaves your machine without explicit consent.
40
41
  when captured pages extracted poorly, and when the vector index is catching up.
41
42
  - **Safe automation** — automations are consent-first drafts; edits to existing
42
43
  content always pass through a reviewable proposal with a diff.
44
+ - **Runs on the model your machine can hold** — the loop measures what a model
45
+ can actually produce and adapts: a model too small to emit a tool call is
46
+ walked through numbered choices instead, with the same permission gates,
47
+ snapshots and sanitizers as every other profile.
43
48
 
44
49
  매번 AI에게 프로젝트 맥락을 다시 설명하고 있다면, 지식이 여러 서비스에 흩어져
45
50
  있다면, 그 기억을 특정 회사가 아니라 내가 소유하고 싶다면 — Lattice AI가 그
@@ -59,49 +64,47 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
59
64
 
60
65
  | | | |
61
66
  | --- | --- | --- |
62
- | ![Login](output/release/v11.9.0/screenshots/01-login.png) | ![Model install](output/release/v11.9.0/screenshots/03-install-load-progress.png) | ![Model library](output/release/v11.9.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) |
63
68
 
64
69
  Screenshot index and capture notes:
65
- [output/release/v11.9.0/SCREENSHOT_INDEX.md](output/release/v11.9.0/SCREENSHOT_INDEX.md)
70
+ [output/release/v12.1.0/SCREENSHOT_INDEX.md](output/release/v12.1.0/SCREENSHOT_INDEX.md)
66
71
 
67
72
  ## Current Release
68
73
 
69
- The current release is **11.9.0 — Working Order**:
70
-
71
- 11.8.0 took weight off the door. This release puts the remaining Current
72
- stubs and the half-wired lanes in working order. The door is unchanged:
73
- `lattice-host` still serves **420 operations across 41 route families**,
74
- and the AI worker is still **19 routes** (`/worker/sysinfo` gained
75
- additive `capabilities` and `python_version`). Cloud is optional; the
76
- default is local; OAuth CLI (`agy` / `grok`) is supported.
77
-
78
- - **Thirteen documented-Current stubs now answer.** Model
79
- recommendations probe RAM and the worker catalog. Setup scan/auto are
80
- real probes; install is real-or-manual (brew/pip stay manual).
81
- Computer-use status reads worker capabilities. `/agent/eval` is a
82
- deterministic skill eval. `/agents/api/run` is a live single-agent
83
- pass. Automation mines `conversation_messages`. Workflow run is a
84
- per-step executor; `build`/`deploy_project` run governed scripts.
85
- - **Hybrid cloud is wired.** ReviewSink and a shape-only egress audit
86
- are bound in production. Dual credentials: `api_key` (mock-verified
87
- only) and `cli_oauth` (live OAuth E2E at zero billing). Escalation is
88
- `auto` / `manual` / `always`; `local_only` on the request always wins.
89
- - **MCP is a real JSON-RPC server** at `POST /mcp`. Chat file generation
90
- — the v9.2.0 headline deleted in the 11.6.0 port — is restored. The
91
- 8GB-tier default (gemma-4-e2b) actually runs.
92
-
93
- What this release does not close — 2B agent-run quality, the mock-only
94
- `api_key` path, restore needing a restart, brew/pip staying manual,
95
- `/mcp` outside the OpenAPI contract, the ad-hoc-signed dmg — is listed
96
- in [RELEASE_NOTES_v11.9.0.md](RELEASE_NOTES_v11.9.0.md).
97
-
98
- Expected artifacts for 11.9.0 release must use exact filenames:
99
-
100
- - `dist/ltcai-11.9.0-py3-none-any.whl`
101
- - `dist/ltcai-11.9.0.tar.gz`
102
- - `ltcai-11.9.0.tgz`
103
- - `dist/ltcai-11.9.0.vsix`
104
- - `src-tauri/target/release/bundle/dmg/Lattice AI_11.9.0_aarch64.dmg`
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.
95
+
96
+ What this release does not close — small-model *content* quality, the
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).
100
+
101
+ Expected artifacts for 12.1.0 release must use exact filenames:
102
+
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`
105
108
 
106
109
  Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
107
110
 
@@ -120,14 +123,17 @@ and downloads, Brain Network, and update checks are opt-in.
120
123
  See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
121
124
  [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for the developer workflow
122
125
  (`npm start` / `bin/ltcai.js` is the product; `npm run dev` is the
123
- 19-route worker). Validation via `npm run lint`, `npm run test:unit`,
124
- `npm run test:visual`.
126
+ 20-route worker). Each of the two largest crates carries its own domain
127
+ map — [rust/lattice-agent/ARCHITECTURE.md](rust/lattice-agent/ARCHITECTURE.md)
128
+ and [rust/lattice-platform/ARCHITECTURE.md](rust/lattice-platform/ARCHITECTURE.md)
129
+ — and open gaps are tracked in [docs/ROADMAP.md](docs/ROADMAP.md).
130
+ Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
125
131
 
126
132
  ## Known Limitations
127
133
 
128
134
  - External package registries are owner-published and can lag behind GitHub.
129
135
  - SQLite is the live local Brain store. The optional PostgreSQL/pgvector
130
- migration tooling is not part of the 11.9.0 worker.
136
+ migration tooling is not part of the 12.1.0 worker.
131
137
  - Docker, model downloads, cloud model calls, Brain Network, and update checks
132
138
  require explicit user action. Cloud is optional: `cli_oauth` (`agy` /
133
139
  `grok`) was live-checked at zero billing; the `api_key` path is
@@ -148,21 +154,28 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
148
154
  built. The observation code stays in Brain Core under unit test, and its
149
155
  module header says so.
150
156
  - The Python coverage gate is a **line floor of 90** since 11.8.0 (the
151
- 100%-lines-and-branches gate was removed). 11.9.0 measures 99.97%; the
152
- enforced floor is the smaller claim.
153
- - **2B agent-run quality is gated honestly.** gemma-4-e2b writes the
154
- requested file and can still fail the critic on the summary.
155
- - Restore in a long-lived process may serve pre-restore bytes until
156
- connections recycle — restart after restore. brew/pip setup items stay
157
- manual. `/mcp` is a real JSON-RPC server and is outside the OpenAPI
158
- contract by design.
157
+ 100%-lines-and-branches gate was removed). The enforced claim is the
158
+ floor, not whatever a given run measures.
159
+ - **Small-model *content* quality is gated honestly.** With the `guided`
160
+ profile even a 0.5B model writes the requested file and reaches DONE;
161
+ a weak summary still fails the critic and the run ends
162
+ FAILED/NEEDS_REVIEW rather than claiming success.
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.
168
+ - Watch never deletes on its own: a vanished file is reported, and
169
+ cleanup runs only through the confirmed folder-prune flow.
159
170
  - The macOS dmg is ad-hoc signed — effectively unsigned — so first launch
160
171
  needs the usual Gatekeeper step.
161
- - Pointer-control tools still execute in the worker. Remaining honest gaps
162
- (`open_keys` pending-only, no Self-Model refiner, `PART_OF` left on
163
- delete, review events silent without an owner, KG-api ingest text-only,
164
- two store cycles per review mutation) are listed with their reasons in
165
- [RELEASE_NOTES_v11.9.0.md](RELEASE_NOTES_v11.9.0.md).
172
+ - Pointer-control tools execute in the worker and are installed with
173
+ `pip install "ltcai[pointer]"`. Remaining honest gaps (`open_keys`
174
+ pending-only, no Self-Model refiner, `delete_node` leaving `PART_OF`,
175
+ review events silent without an owner, KG-api ingest text-only, two
176
+ store cycles per review mutation) are listed with their reasons in
177
+ [RELEASE_NOTES_v12.1.0.md](RELEASE_NOTES_v12.1.0.md) and prioritized in
178
+ [docs/ROADMAP.md](docs/ROADMAP.md).
166
179
 
167
180
  ## Release History
168
181
 
@@ -173,6 +186,8 @@ same boundary. Earlier notes stay in the tree as `RELEASE_NOTES_v*.md` files.
173
186
 
174
187
  | Version | Theme |
175
188
  | --- | --- |
189
+ | 12.1.0 | Fast Path |
190
+ | 12.0.0 | Open House |
176
191
  | 11.9.0 | Working Order |
177
192
  | 11.8.0 | Travel Light |
178
193
  | 11.7.0 | Clean Sweep |
package/docs/CHANGELOG.md CHANGED
@@ -4,6 +4,121 @@ 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
+
30
+ ## [12.0.0] - 2026-08-18 — Open House
31
+
32
+ ### Added
33
+ - 크레이트 도메인 구조. `lattice-agent` 43파일이 여섯 그룹으로
34
+ (`kernel` / `parse` / `content` / `tools` / `surface` / `prompts`),
35
+ `lattice-platform` 31개 평면 모듈이 일곱 도메인으로
36
+ (`workspaceos` / `toolsurface` / `governance` / `adminops` /
37
+ `knowledge` / `modelops` / `shell`, 100건 `git mv`). 전부 이동이며
38
+ 동작 변화는 0 — 골든과 계약 테스트가 재구조 전후로 같은 답을 낸다.
39
+ - 크레이트 로컬 지도 2종: `rust/lattice-agent/ARCHITECTURE.md`,
40
+ `rust/lattice-platform/ARCHITECTURE.md`. 각 그룹 `mod.rs`가 무엇이
41
+ 속하고 무엇이 절대 들어가면 안 되는지와 불변식을 적는다. 각
42
+ `src/lib.rs`는 호환 맵으로 끝나 기존 임포트 경로가 전부 해석된다.
43
+ - `docs/ROADMAP.md` — 우선순위(P1/P2/P3)·난이도·제안 경로가 있는 갭
44
+ 로드맵. 이번 릴리스에서 닫힌 항목은 닫힘으로 표시한다.
45
+ - GUIDED 프로파일. 번호 메뉴로 액션을 고르고 인자를 한 개씩 받아
46
+ **하네스가 액션 구조체를 조립**한다 — JSON 요구 자체가 없다. 꼬리는
47
+ 모든 모드와 같은 `perform_action`이므로 게이트 체인·루프 가드·쓰기 전
48
+ 스냅샷·`sanitize_write_content`가 동일하다. 검증은 닫힌 PASS/FAIL +
49
+ 이유 한 줄이며 같은 근거·커버리지 게이트로 심사한다.
50
+ - 측정 기반 프로파일 프로브(`kernel/probe.rs`). 로드 시 고정 질문 두
51
+ 개를 루프 자신의 파서로 채점해 standard/compact/guided를 고르고,
52
+ 모델 id + 크레이트 버전으로 캐시한다. `LATTICEAI_AGENT_PROFILE`이
53
+ 여전히 최우선, `LATTICEAI_AGENT_PROBE=0`으로 끌 수 있다.
54
+ - 미드런 자기강등(`demote_to_guided`) — 측정된 다이얼, 아직 guided가
55
+ 아님, 실행 근거 없음의 세 조건에서만, 아래로만.
56
+ - 통합 도구 카탈로그(`tools/catalog.rs`) — native + `mcp.<tool>` +
57
+ `skill.<name>`이 하나의 번호 메뉴. 런이 거버넌스하는 이름은 네이티브
58
+ 경로(더 엄격), 아닌 이름은 `POST /mcp`와 같은 거버넌스 검사를 지난다.
59
+ - `POST /worker/vector/query` — HNSW 사이드카 후보 조회. 워커 allowlist
60
+ 19 → **20**.
61
+ - `POST /api/ingestion/folder/prune` — 삭제된 파일 정리. `confirm` 없으면
62
+ dry-run, 있으면 `delete_document_tree`(양방향 엣지). SPA에 「삭제된
63
+ 파일 정리 (N)」 카드 버튼.
64
+ - 섹션 트리 — `Document ←PART_OF— Section ←PART_OF— Section`,
65
+ `Section —HAS_CHUNK→ Chunk`. 제목이 없는 문서는 섹션을 만들지 않는다.
66
+ - 파일별 ingest 핑거프린트(경로 + 크기 + mtime + 내용 sha256)를
67
+ `ingestion_provenance.metadata_json`에 저장. 두 번째 테이블 없음.
68
+ - 스토어 세대(generation) 에폭 — 복원이 인프로세스로 즉시 반영된다.
69
+ - `ltcai[pointer]` extra — 여섯 pyautogui 포인터 도구의 선언된 설치 경로.
70
+
71
+ ### Changed
72
+ - `POST /mcp`가 OpenAPI 제품 계약 **안으로** 들어왔다(단일 JSON-RPC 봉투
73
+ 오퍼레이션). 네이티브 마운트이므로 워커로 프록시되지 않는다. 문은 네이티브
74
+ **422 오퍼레이션 / 41 패밀리**(11.9.0의 420 + `/mcp` + folder prune).
75
+ - `/setup/install`이 실제로 설치한다 — 요청이 이름을 댄 항목이 **서버가
76
+ 도출한** allowlist에 있을 때만. 목록 밖 이름은 거절. 기본은 수동 유지.
77
+ - 한국어 조사 스트리핑 2단계 + 근거 게이트 + 포함관계 중복 제거.
78
+ - 추출이 `PART_OF`/`CONTRADICTS`를 실제로 생산하고, 엣지는 방향과 타입을
79
+ 갖고 쓰이며, 근거는 분류되어 저장된다.
80
+ - 임베딩 자동 감지 — 다운로드된 실모델이 있으면 채택, 해시는 폴백으로
81
+ 표기. 벡터 정체성은 `(model, dim)`으로 필터.
82
+ - 임베딩이 쓰기 트랜잭션 **앞으로** 이동(드레인 ~66 → ~1,300 items/s),
83
+ 드레인 스케줄러 적응형(백로그 991건 40분 → 15.3초).
84
+ - 무변경 재인덱스 33s → **0.26s**(낭비율 1.00 → 0.00), 첫 인덱싱 25.8s
85
+ → 7.2s. vault-watch가 바뀌지 않은 노트를 스킵.
86
+ - `LATTICEAI_VECTOR_INDEX=hnsw`가 실제 검색 경로 — 사이드카가 `k*8`
87
+ 후보(최대 200)를 주고 Rust가 브루트와 같은 코사인으로 정확 재스코어,
88
+ 이름은 `hnsw+rescore`. HNSW 사이드카는 증분 append. **기본은 여전히
89
+ `brute`**, 실패는 사유를 실은 폴백.
90
+ - `Completion::prefix`가 완성의 첫 글자를 강제(compact는
91
+ `{"thoughts": "`). 토큰 단위 JSON 문법은 검토 후 채택하지 않음.
92
+ - 프론트: ErrorBoundary가 라우트와 헤비 패널 전면에, Act/Brain 서브라우트
93
+ lazy 분할, 권한 모드 diff 프리뷰와 위험 토글 ack. 번들 104.2 / 150 KiB.
94
+
95
+ ### Fixed
96
+ - RAG 인용 지시가 에이전트 프롬프트로 새던 문제 — 도구를 불러야 할 턴에
97
+ 모델이 출처 표기를 하고 있었다.
98
+ - 모델 로딩의 이름 로스터 게이트 — Qwen AWQ 빌드가 로드 자체가 불가능
99
+ 했다.
100
+ - 베낄 수 있는 워크드 예제 — `write_file` content가 우리 예제 상수와
101
+ 글자 그대로 같으면 `COPIED_EXAMPLE`로 기록하고 쓰지 않는다
102
+ (fail-closed). 에코된 지시문 줄은 guided 답변에서 제거.
103
+ - `<|channel>` 한-파이프 제어 프레임이 본문으로 새던 문제.
104
+ - 복원 뒤 오래된 커넥션이 복원 전 바이트를 주던 문제(에폭으로 해소).
105
+
106
+ ### Known issues
107
+ - 작은 모델의 *내용 품질*은 여전히 fail-closed 게이트가 잡는다. 기계적
108
+ 실행(요청한 파일 쓰기, DONE 도달)은 guided로 안정됐고 0.5B도 3.9초에
109
+ 실파일로 완주하지만, 요약의 질은 critic에서 떨어져
110
+ FAILED/NEEDS_REVIEW로 끝날 수 있다. 매트릭스는 18개 중 11개 통과에서
111
+ 개선 중이며 최종 수치는 릴리스 시점 `MATRIX_TABLE` 기준.
112
+ - `api_key` 클라우드 경로는 모의 서버만 검증(과금 0 정책). 라이브
113
+ 검증은 `cli_oauth`.
114
+ - DMG는 ad-hoc 서명(=미서명).
115
+ - 검색 기본은 brute. `hnsw`는 opt-in.
116
+ - watch는 자동 삭제하지 않는다 — 정리는 명시적 prune으로만.
117
+ - 크레이트 재구조는 이동이지 결합 해소가 아니다. 도메인 선을 넘는 네
118
+ 결합은 `lattice-platform`의 해당 `mod.rs`에 이름과 함께 적혀 있다.
119
+ - `GraphWriter::delete_node`는 여전히 `PART_OF`를 남긴다. prune은 그것을
120
+ 쓰지 않고 `delete_document_tree`를 쓴다.
121
+
7
122
  ## [11.9.0] - 2026-08-17 — Working Order
8
123
 
9
124
  ### 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: **11.9.0 — Working Order**.
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