ltcai 11.7.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -76
- package/docs/BENCHMARKS.md +9 -2
- package/docs/CHANGELOG.md +249 -0
- package/docs/CI_AND_RELEASE_GATES.md +126 -41
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +271 -103
- package/docs/ENTERPRISE.md +1 -1
- package/docs/LEGACY_COMPATIBILITY.md +10 -6
- package/docs/MULTI_AGENT_RUNTIME.md +4 -4
- package/docs/ONBOARDING.md +16 -4
- package/docs/OPERATIONS.md +14 -1
- package/docs/PERMISSION_MODE.md +14 -9
- package/docs/REALTIME_COLLABORATION.md +1 -1
- package/docs/ROADMAP.md +113 -0
- package/docs/TRUST_MODEL.md +28 -7
- package/docs/USABILITY_AUDIT.md +5 -0
- package/docs/WHY_LATTICE.md +13 -5
- package/docs/WORKFLOW_DESIGNER.md +2 -2
- package/docs/kg-schema.md +57 -7
- package/docs/mcp-tools.md +93 -82
- package/docs/security-model.md +6 -3
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/graph/_kg_common/__init__.py +1 -54
- package/lattice_brain/graph/_kg_common/extraction.py +459 -105
- package/lattice_brain/graph/_kg_common/normalize.py +305 -0
- package/lattice_brain/graph/_kg_common/patterns.py +275 -0
- package/lattice_brain/graph/_kg_common/relations.py +12 -3
- package/lattice_brain/graph/_kg_common/sections.py +107 -0
- package/lattice_brain/graph/_kg_common/text.py +14 -450
- package/lattice_brain/graph/_kg_constants.py +7 -0
- package/lattice_brain/ingestion/__init__.py +6 -3
- package/lattice_brain/multimodal/__init__.py +9 -3
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/agent_worker_seam.py +44 -1
- package/latticeai/api/models.py +18 -110
- package/latticeai/api/search.py +7 -30
- package/latticeai/api/worker_compute.py +127 -106
- package/latticeai/api/worker_seams.py +17 -2
- package/latticeai/core/embedding_providers/__init__.py +16 -0
- package/latticeai/core/embedding_providers/autodetect.py +302 -0
- package/latticeai/core/embedding_providers/base.py +25 -0
- package/latticeai/core/embedding_providers/profiles.py +44 -0
- package/latticeai/core/embedding_providers/text.py +74 -8
- package/latticeai/core/http_origin.py +3 -3
- package/latticeai/core/messages.py +0 -5
- package/latticeai/core/policy.py +1 -6
- package/latticeai/core/quiet.py +1 -20
- package/latticeai/core/security.py +29 -83
- package/latticeai/core/sessions.py +95 -4
- package/latticeai/core/users.py +0 -38
- package/latticeai/core/vector_index/__init__.py +61 -0
- package/latticeai/core/vector_index/hnsw.py +383 -0
- package/latticeai/core/vector_index/sidecar.py +329 -0
- package/latticeai/models/router/catalog.py +2 -2
- package/latticeai/models/router/generation.py +176 -30
- package/latticeai/models/router/loading.py +150 -9
- package/latticeai/runtime/access_runtime.py +7 -4
- package/latticeai/runtime/brain_runtime.py +43 -9
- package/latticeai/runtime/build_phases/features.py +8 -31
- package/latticeai/runtime/build_phases/foundation.py +7 -16
- package/latticeai/runtime/build_phases/web.py +3 -3
- package/latticeai/runtime/build_phases/worker_profile.py +29 -27
- package/latticeai/runtime/runtime_context.py +0 -2
- package/latticeai/services/architecture_readiness.py +18 -19
- package/latticeai/services/process_audit.py +1 -22
- package/latticeai/services/product_readiness.py +39 -12
- package/latticeai/services/search_service.py +7 -0
- package/latticeai/services/voice_capture.py +8 -28
- package/latticeai/tools/__init__.py +12 -47
- package/latticeai/tools/commands.py +9 -15
- package/latticeai/tools/documents.py +12 -0
- package/latticeai/tools/knowledge.py +0 -6
- package/latticeai/tools/markup.py +152 -0
- package/package.json +4 -5
- package/requirements.txt +0 -1
- package/scripts/check_current_release_docs.mjs +1 -1
- package/scripts/check_openapi_drift.mjs +3 -2
- package/scripts/check_server_i18n.mjs +5 -4
- package/scripts/compose_openapi.py +4 -1
- package/scripts/export_openapi.py +5 -4
- package/scripts/gen_worker_allowlist_fixture.py +2 -2
- package/scripts/openapi_route_families.json +19 -74
- package/scripts/publish_release.mjs +157 -0
- package/scripts/release_screen_claims.json +144 -28
- package/src-tauri/Cargo.lock +45 -10
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +47 -41
- package/static/app/assets/Act-Cf1L2709.js +2 -0
- package/static/app/assets/AdminConsole-DPAbLTYV.js +1 -0
- package/static/app/assets/Brain-DqamGrj-.js +2 -0
- package/static/app/assets/BrainHome-MHe2_RYs.js +2 -0
- package/static/app/assets/BrainSignals-CQPPfyyH.js +1 -0
- package/static/app/assets/Capture-DGdIH_Zc.js +1 -0
- package/static/app/assets/Chronicle-C-UlCJoJ.js +1 -0
- package/static/app/assets/CommandPalette-WNT4EqUX.js +1 -0
- package/static/app/assets/DigitalBrainExplorer-CEBH5Cwc.js +321 -0
- package/static/app/assets/Library-C6xd1dlf.js +1 -0
- package/static/app/assets/LivingBrain-BEk-0ohw.js +1 -0
- package/static/app/assets/ProductFlow-CZLm5iXh.js +1 -0
- package/static/app/assets/QueryClientProvider-B3OjqSyJ.js +1 -0
- package/static/app/assets/{ReviewCard-HXRle3qq.js → ReviewCard-CEHG6evf.js} +2 -2
- package/static/app/assets/RunsListPanel-CLtEJSRW.js +1 -0
- package/static/app/assets/System-CAxwBUXw.js +1 -0
- package/static/app/assets/WorkflowGraph-Dj10RuGE.js +1 -0
- package/static/app/assets/WorkflowsPanel-Kyeh_LIT.js +2 -0
- package/static/app/assets/actHelpers-CtSmK9Dw.js +1 -0
- package/static/app/assets/arrow-left-CRl5EO4D.js +1 -0
- package/static/app/assets/{bot-Cn8bWRuq.js → bot-DhUGRel2.js} +1 -1
- package/static/app/assets/brain-CLkhHsHF.js +1 -0
- package/static/app/assets/button-CmaEqG1T.js +1 -0
- package/static/app/assets/circle-check-CFgejkOS.js +1 -0
- package/static/app/assets/{circle-pause-CmzC_apg.js → circle-pause-l96izbxj.js} +1 -1
- package/static/app/assets/{circle-play-D8mW2aQ7.js → circle-play-CrZa25_q.js} +1 -1
- package/static/app/assets/{cpu-DZcdd0PZ.js → cpu-BaXudqwl.js} +1 -1
- package/static/app/assets/{download-bv1KEPGQ.js → download-hCVFPiyc.js} +1 -1
- package/static/app/assets/{folder-open-d-Pip5gr.js → folder-open-CHL82Yp7.js} +1 -1
- package/static/app/assets/{hard-drive-D20iavUb.js → hard-drive-DDzET7lk.js} +1 -1
- package/static/app/assets/index-CB93CZWW.css +2 -0
- package/static/app/assets/index-D2H-wSl6.js +13 -0
- package/static/app/assets/input-Df1CAY_I.js +1 -0
- package/static/app/assets/jsx-runtime-bzQ4Vb5N.js +1 -0
- package/static/app/assets/{link-2-BPJOFlAy.js → link-2-xNnTIX1_.js} +1 -1
- package/static/app/assets/{permissionCopy-ChdJd493.js → permissionCopy-D3aWHco-.js} +1 -1
- package/static/app/assets/primitives-BioD2slS.js +1 -0
- package/static/app/assets/search-BzBw8YcW.js +1 -0
- package/static/app/assets/{share-2-YNX_NtMU.js → share-2-FkzGf8Df.js} +1 -1
- package/static/app/assets/{shield-alert-DuQ3zrVL.js → shield-alert-B3dwzik4.js} +1 -1
- package/static/app/assets/sourceMeta-DQSY_tah.js +1 -0
- package/static/app/assets/textarea-P8o6pvOP.js +1 -0
- package/static/app/assets/useFocusTrap-hswOIkXE.js +1 -0
- package/static/app/assets/useMutation-OJLrYSRA.js +1 -0
- package/static/app/assets/workspace-BCuk3Ku9.js +1 -0
- package/static/app/index.html +4 -4
- package/static/sw.js +1 -1
- package/lattice_brain/ingestion/pipeline.py +0 -108
- package/latticeai/api/local_files.py +0 -44
- package/latticeai/api/tools.py +0 -126
- package/latticeai/api/voice_capture.py +0 -32
- package/latticeai/core/agent_permission.py +0 -85
- package/scripts/agent_eval.py +0 -34
- package/scripts/brain_quality_eval.py +0 -37
- package/scripts/check_legacy_debt.mjs +0 -91
- package/scripts/check_python.py +0 -100
- package/scripts/chunking_parity_corpus.py +0 -449
- package/scripts/generate_agent_parity_fixtures.py +0 -771
- package/scripts/generate_chunking_parity_fixtures.py +0 -259
- package/static/app/assets/Act-BPcVAbOL.js +0 -1
- package/static/app/assets/AdminConsole-Bw1ATQL0.js +0 -1
- package/static/app/assets/Brain-CT92Kos0.js +0 -321
- package/static/app/assets/BrainHome-CFBkt1K_.js +0 -2
- package/static/app/assets/BrainSignals-ReLWF2H8.js +0 -1
- package/static/app/assets/Capture-BsTokYkk.js +0 -1
- package/static/app/assets/Chronicle-B6f0T9id.js +0 -1
- package/static/app/assets/CommandPalette-CuvjTv1u.js +0 -1
- package/static/app/assets/Library-BGJbG9Hd.js +0 -1
- package/static/app/assets/LivingBrain-DGYK_Jsa.js +0 -1
- package/static/app/assets/ProductFlow-DXBC6brE.js +0 -1
- package/static/app/assets/System-CMHSO9qM.js +0 -1
- package/static/app/assets/arrow-left-BfmkskWx.js +0 -1
- package/static/app/assets/brain-CQJberbE.js +0 -1
- package/static/app/assets/button-Ct9f2_oT.js +0 -1
- package/static/app/assets/circle-check-DruOxB-4.js +0 -1
- package/static/app/assets/index-D9x-kSNy.css +0 -2
- package/static/app/assets/index-Do83hDzJ.js +0 -10
- package/static/app/assets/input-BLXVNmj1.js +0 -1
- package/static/app/assets/primitives-Cv5tbZBY.js +0 -1
- package/static/app/assets/search-CT9aho2j.js +0 -1
- package/static/app/assets/textarea-DqwLnli4.js +0 -1
- package/static/app/assets/useFocusTrap-ZVI98jaW.js +0 -1
- package/static/app/assets/useMutation-CVC4qv_D.js +0 -1
- package/static/app/assets/useQuery-C7BeG4HU.js +0 -1
- package/static/app/assets/utils-CiFtIdZq.js +0 -4
- package/static/app/assets/workspace-DQz9vIId.js +0 -1
package/README.md
CHANGED
|
@@ -11,23 +11,24 @@
|
|
|
11
11
|
[](https://github.com/TaeSooPark-PTS/LatticeAI/actions/workflows/ci.yml)
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
|
|
14
|
-

|
|
15
15
|
|
|
16
16
|
Chat, files, folders, notes, and web pages all flow into one durable knowledge
|
|
17
|
-
graph on your computer.
|
|
18
|
-
|
|
17
|
+
graph on your computer. The default is local. Cloud is optional — an
|
|
18
|
+
OAuth-authenticated CLI (`agy` / `grok`) or an API key you configure — and
|
|
19
|
+
nothing leaves your machine without explicit consent.
|
|
19
20
|
|
|
20
|
-
대화·파일·폴더·웹페이지가 전부 내 컴퓨터 안의 지식 그래프로
|
|
21
|
-
|
|
21
|
+
대화·파일·폴더·웹페이지가 전부 내 컴퓨터 안의 지식 그래프로 쌓입니다.
|
|
22
|
+
기본은 로컬이고, 클라우드는 선택입니다 (OAuth CLI 지원).
|
|
22
23
|
|
|
23
24
|
## What You Can Do
|
|
24
25
|
|
|
25
26
|
| | |
|
|
26
27
|
| --- | --- |
|
|
27
|
-
| **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  |
|
|
29
|
+
| **See how knowledge connects** — a real relationship graph, not a file list  | **Capture anything** — files, whole folders, notes, screenshots, web pages  |
|
|
30
|
+
| **Automate with review** — agent changes become proposals you approve first  | **Pick a model in one click** — recommended local models for your hardware  |
|
|
31
|
+
| **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  |
|
|
31
32
|
|
|
32
33
|
## Why Lattice AI
|
|
33
34
|
|
|
@@ -39,6 +40,10 @@ memory. Nothing leaves your machine without explicit consent.
|
|
|
39
40
|
when captured pages extracted poorly, and when the vector index is catching up.
|
|
40
41
|
- **Safe automation** — automations are consent-first drafts; edits to existing
|
|
41
42
|
content always pass through a reviewable proposal with a diff.
|
|
43
|
+
- **Runs on the model your machine can hold** — the loop measures what a model
|
|
44
|
+
can actually produce and adapts: a model too small to emit a tool call is
|
|
45
|
+
walked through numbered choices instead, with the same permission gates,
|
|
46
|
+
snapshots and sanitizers as every other profile.
|
|
42
47
|
|
|
43
48
|
매번 AI에게 프로젝트 맥락을 다시 설명하고 있다면, 지식이 여러 서비스에 흩어져
|
|
44
49
|
있다면, 그 기억을 특정 회사가 아니라 내가 소유하고 싶다면 — Lattice AI가 그
|
|
@@ -58,67 +63,57 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
|
|
|
58
63
|
|
|
59
64
|
| | | |
|
|
60
65
|
| --- | --- | --- |
|
|
61
|
-
|  |  |  |
|
|
62
67
|
|
|
63
68
|
Screenshot index and capture notes:
|
|
64
|
-
[output/release/
|
|
69
|
+
[output/release/v12.0.0/SCREENSHOT_INDEX.md](output/release/v12.0.0/SCREENSHOT_INDEX.md)
|
|
65
70
|
|
|
66
71
|
## Current Release
|
|
67
72
|
|
|
68
|
-
The current release is **
|
|
69
|
-
|
|
70
|
-
11.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
`
|
|
75
|
-
and the
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
mutation, raw-English snooze 422 — is listed in
|
|
113
|
-
[RELEASE_NOTES_v11.7.0.md](RELEASE_NOTES_v11.7.0.md).
|
|
114
|
-
|
|
115
|
-
Expected artifacts for 11.7.0 release must use exact filenames:
|
|
116
|
-
|
|
117
|
-
- `dist/ltcai-11.7.0-py3-none-any.whl`
|
|
118
|
-
- `dist/ltcai-11.7.0.tar.gz`
|
|
119
|
-
- `ltcai-11.7.0.tgz`
|
|
120
|
-
- `dist/ltcai-11.7.0.vsix`
|
|
121
|
-
- `src-tauri/target/release/bundle/dmg/Lattice AI_11.7.0_aarch64.dmg`
|
|
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]"`.
|
|
104
|
+
|
|
105
|
+
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).
|
|
109
|
+
|
|
110
|
+
Expected artifacts for 12.0.0 release must use exact filenames:
|
|
111
|
+
|
|
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`
|
|
122
117
|
|
|
123
118
|
Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
|
|
124
119
|
|
|
@@ -131,21 +126,27 @@ every product route, owns every write to the Brain, and supervises a Python
|
|
|
131
126
|
**AI worker** it reaches over loopback for the things a model does — inference,
|
|
132
127
|
embedding, extraction, parsing, rendering, speech-to-text. The React/Vite
|
|
133
128
|
frontend and the Tauri desktop shell sit on top of that one door. Local-first
|
|
134
|
-
by default — cloud
|
|
135
|
-
opt-in.
|
|
129
|
+
by default — cloud is optional (OAuth CLI or an API key you configure),
|
|
130
|
+
and downloads, Brain Network, and update checks are opt-in.
|
|
136
131
|
|
|
137
132
|
See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
|
|
138
133
|
[docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for the developer workflow
|
|
139
|
-
(`npm
|
|
140
|
-
|
|
134
|
+
(`npm start` / `bin/ltcai.js` is the product; `npm run dev` is the
|
|
135
|
+
20-route worker). Each of the two largest crates carries its own domain
|
|
136
|
+
map — [rust/lattice-agent/ARCHITECTURE.md](rust/lattice-agent/ARCHITECTURE.md)
|
|
137
|
+
and [rust/lattice-platform/ARCHITECTURE.md](rust/lattice-platform/ARCHITECTURE.md)
|
|
138
|
+
— and open gaps are tracked in [docs/ROADMAP.md](docs/ROADMAP.md).
|
|
139
|
+
Validation via `npm run lint`, `npm run test:unit`, `npm run test:visual`.
|
|
141
140
|
|
|
142
141
|
## Known Limitations
|
|
143
142
|
|
|
144
143
|
- External package registries are owner-published and can lag behind GitHub.
|
|
145
144
|
- SQLite is the live local Brain store. The optional PostgreSQL/pgvector
|
|
146
|
-
migration tooling is not part of the
|
|
145
|
+
migration tooling is not part of the 12.0.0 worker.
|
|
147
146
|
- Docker, model downloads, cloud model calls, Brain Network, and update checks
|
|
148
|
-
require explicit user action.
|
|
147
|
+
require explicit user action. Cloud is optional: `cli_oauth` (`agy` /
|
|
148
|
+
`grok`) was live-checked at zero billing; the `api_key` path is
|
|
149
|
+
mock-verified only.
|
|
149
150
|
- **The Telegram bridge was removed in 11.6.0** — it lived in the platform code
|
|
150
151
|
that became the AI worker. **SSO/OIDC login and callback flows were removed
|
|
151
152
|
with it**; the configuration surface remains and password login is native.
|
|
@@ -157,11 +158,31 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
|
|
|
157
158
|
required dependency as of 11.6.0 (it used to be an undeclared lazy import
|
|
158
159
|
that raised a 500; `ltcai[pdf]` remains as an empty alias for older
|
|
159
160
|
install instructions).
|
|
160
|
-
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
161
|
+
- The multimodal image and video analysis functions have no HTTP door as of
|
|
162
|
+
11.8.0: their only route wrapped a native image ingest that was never
|
|
163
|
+
built. The observation code stays in Brain Core under unit test, and its
|
|
164
|
+
module header says so.
|
|
165
|
+
- The Python coverage gate is a **line floor of 90** since 11.8.0 (the
|
|
166
|
+
100%-lines-and-branches gate was removed). The enforced claim is the
|
|
167
|
+
floor, not whatever a given run measures.
|
|
168
|
+
- **Small-model *content* quality is gated honestly.** With the `guided`
|
|
169
|
+
profile even a 0.5B model writes the requested file and reaches DONE;
|
|
170
|
+
a weak summary still fails the critic and the run ends
|
|
171
|
+
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.
|
|
175
|
+
- Watch never deletes on its own: a vanished file is reported, and
|
|
176
|
+
cleanup runs only through the confirmed folder-prune flow.
|
|
177
|
+
- The macOS dmg is ad-hoc signed — effectively unsigned — so first launch
|
|
178
|
+
needs the usual Gatekeeper step.
|
|
179
|
+
- Pointer-control tools execute in the worker and are installed with
|
|
180
|
+
`pip install "ltcai[pointer]"`. Remaining honest gaps (`open_keys`
|
|
181
|
+
pending-only, no Self-Model refiner, `delete_node` leaving `PART_OF`,
|
|
182
|
+
review events silent without an owner, KG-api ingest text-only, two
|
|
183
|
+
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
|
|
185
|
+
[docs/ROADMAP.md](docs/ROADMAP.md).
|
|
165
186
|
|
|
166
187
|
## Release History
|
|
167
188
|
|
|
@@ -172,6 +193,9 @@ same boundary. Earlier notes stay in the tree as `RELEASE_NOTES_v*.md` files.
|
|
|
172
193
|
|
|
173
194
|
| Version | Theme |
|
|
174
195
|
| --- | --- |
|
|
196
|
+
| 12.0.0 | Open House |
|
|
197
|
+
| 11.9.0 | Working Order |
|
|
198
|
+
| 11.8.0 | Travel Light |
|
|
175
199
|
| 11.7.0 | Clean Sweep |
|
|
176
200
|
| 11.6.0 | One Door |
|
|
177
201
|
| 11.5.2 | Tight Ship |
|
package/docs/BENCHMARKS.md
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
# Model Robustness Benchmarks
|
|
2
2
|
|
|
3
3
|
> Status: reference 2026-07-21
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
>
|
|
5
|
+
> **Dated snapshot.** The harness this page documents no longer exists in the
|
|
6
|
+
> tree: `scripts/bench_models.py` went with the Python agent loop when 11.5.1
|
|
7
|
+
> ported it to Rust, and `latticeai.core.agent_eval` / `scripts/agent_eval.py`
|
|
8
|
+
> followed (the last of them deleted in 11.8.0). The methodology and the
|
|
9
|
+
> honesty notes below are kept as the record of how these numbers were produced
|
|
10
|
+
> and what they did and did not mean — not as instructions you can run today.
|
|
11
|
+
|
|
12
|
+
Methodology and results for `scripts/bench_models.py`, a harness that measured
|
|
6
13
|
how well the agent loop turns model output into executable actions across model
|
|
7
14
|
quality tiers. Companion to [CI & Release Gates](CI_AND_RELEASE_GATES.md).
|
|
8
15
|
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,255 @@ 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.0.0] - 2026-08-18 — Open House
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- 크레이트 도메인 구조. `lattice-agent` 43파일이 여섯 그룹으로
|
|
11
|
+
(`kernel` / `parse` / `content` / `tools` / `surface` / `prompts`),
|
|
12
|
+
`lattice-platform` 31개 평면 모듈이 일곱 도메인으로
|
|
13
|
+
(`workspaceos` / `toolsurface` / `governance` / `adminops` /
|
|
14
|
+
`knowledge` / `modelops` / `shell`, 100건 `git mv`). 전부 이동이며
|
|
15
|
+
동작 변화는 0 — 골든과 계약 테스트가 재구조 전후로 같은 답을 낸다.
|
|
16
|
+
- 크레이트 로컬 지도 2종: `rust/lattice-agent/ARCHITECTURE.md`,
|
|
17
|
+
`rust/lattice-platform/ARCHITECTURE.md`. 각 그룹 `mod.rs`가 무엇이
|
|
18
|
+
속하고 무엇이 절대 들어가면 안 되는지와 불변식을 적는다. 각
|
|
19
|
+
`src/lib.rs`는 호환 맵으로 끝나 기존 임포트 경로가 전부 해석된다.
|
|
20
|
+
- `docs/ROADMAP.md` — 우선순위(P1/P2/P3)·난이도·제안 경로가 있는 갭
|
|
21
|
+
로드맵. 이번 릴리스에서 닫힌 항목은 닫힘으로 표시한다.
|
|
22
|
+
- GUIDED 프로파일. 번호 메뉴로 액션을 고르고 인자를 한 개씩 받아
|
|
23
|
+
**하네스가 액션 구조체를 조립**한다 — JSON 요구 자체가 없다. 꼬리는
|
|
24
|
+
모든 모드와 같은 `perform_action`이므로 게이트 체인·루프 가드·쓰기 전
|
|
25
|
+
스냅샷·`sanitize_write_content`가 동일하다. 검증은 닫힌 PASS/FAIL +
|
|
26
|
+
이유 한 줄이며 같은 근거·커버리지 게이트로 심사한다.
|
|
27
|
+
- 측정 기반 프로파일 프로브(`kernel/probe.rs`). 로드 시 고정 질문 두
|
|
28
|
+
개를 루프 자신의 파서로 채점해 standard/compact/guided를 고르고,
|
|
29
|
+
모델 id + 크레이트 버전으로 캐시한다. `LATTICEAI_AGENT_PROFILE`이
|
|
30
|
+
여전히 최우선, `LATTICEAI_AGENT_PROBE=0`으로 끌 수 있다.
|
|
31
|
+
- 미드런 자기강등(`demote_to_guided`) — 측정된 다이얼, 아직 guided가
|
|
32
|
+
아님, 실행 근거 없음의 세 조건에서만, 아래로만.
|
|
33
|
+
- 통합 도구 카탈로그(`tools/catalog.rs`) — native + `mcp.<tool>` +
|
|
34
|
+
`skill.<name>`이 하나의 번호 메뉴. 런이 거버넌스하는 이름은 네이티브
|
|
35
|
+
경로(더 엄격), 아닌 이름은 `POST /mcp`와 같은 거버넌스 검사를 지난다.
|
|
36
|
+
- `POST /worker/vector/query` — HNSW 사이드카 후보 조회. 워커 allowlist
|
|
37
|
+
19 → **20**.
|
|
38
|
+
- `POST /api/ingestion/folder/prune` — 삭제된 파일 정리. `confirm` 없으면
|
|
39
|
+
dry-run, 있으면 `delete_document_tree`(양방향 엣지). SPA에 「삭제된
|
|
40
|
+
파일 정리 (N)」 카드 버튼.
|
|
41
|
+
- 섹션 트리 — `Document ←PART_OF— Section ←PART_OF— Section`,
|
|
42
|
+
`Section —HAS_CHUNK→ Chunk`. 제목이 없는 문서는 섹션을 만들지 않는다.
|
|
43
|
+
- 파일별 ingest 핑거프린트(경로 + 크기 + mtime + 내용 sha256)를
|
|
44
|
+
`ingestion_provenance.metadata_json`에 저장. 두 번째 테이블 없음.
|
|
45
|
+
- 스토어 세대(generation) 에폭 — 복원이 인프로세스로 즉시 반영된다.
|
|
46
|
+
- `ltcai[pointer]` extra — 여섯 pyautogui 포인터 도구의 선언된 설치 경로.
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
- `POST /mcp`가 OpenAPI 제품 계약 **안으로** 들어왔다(단일 JSON-RPC 봉투
|
|
50
|
+
오퍼레이션). 네이티브 마운트이므로 워커로 프록시되지 않는다. 문은 네이티브
|
|
51
|
+
**422 오퍼레이션 / 41 패밀리**(11.9.0의 420 + `/mcp` + folder prune).
|
|
52
|
+
- `/setup/install`이 실제로 설치한다 — 요청이 이름을 댄 항목이 **서버가
|
|
53
|
+
도출한** allowlist에 있을 때만. 목록 밖 이름은 거절. 기본은 수동 유지.
|
|
54
|
+
- 한국어 조사 스트리핑 2단계 + 근거 게이트 + 포함관계 중복 제거.
|
|
55
|
+
- 추출이 `PART_OF`/`CONTRADICTS`를 실제로 생산하고, 엣지는 방향과 타입을
|
|
56
|
+
갖고 쓰이며, 근거는 분류되어 저장된다.
|
|
57
|
+
- 임베딩 자동 감지 — 다운로드된 실모델이 있으면 채택, 해시는 폴백으로
|
|
58
|
+
표기. 벡터 정체성은 `(model, dim)`으로 필터.
|
|
59
|
+
- 임베딩이 쓰기 트랜잭션 **앞으로** 이동(드레인 ~66 → ~1,300 items/s),
|
|
60
|
+
드레인 스케줄러 적응형(백로그 991건 40분 → 15.3초).
|
|
61
|
+
- 무변경 재인덱스 33s → **0.26s**(낭비율 1.00 → 0.00), 첫 인덱싱 25.8s
|
|
62
|
+
→ 7.2s. vault-watch가 바뀌지 않은 노트를 스킵.
|
|
63
|
+
- `LATTICEAI_VECTOR_INDEX=hnsw`가 실제 검색 경로 — 사이드카가 `k*8`
|
|
64
|
+
후보(최대 200)를 주고 Rust가 브루트와 같은 코사인으로 정확 재스코어,
|
|
65
|
+
이름은 `hnsw+rescore`. HNSW 사이드카는 증분 append. **기본은 여전히
|
|
66
|
+
`brute`**, 실패는 사유를 실은 폴백.
|
|
67
|
+
- `Completion::prefix`가 완성의 첫 글자를 강제(compact는
|
|
68
|
+
`{"thoughts": "`). 토큰 단위 JSON 문법은 검토 후 채택하지 않음.
|
|
69
|
+
- 프론트: ErrorBoundary가 라우트와 헤비 패널 전면에, Act/Brain 서브라우트
|
|
70
|
+
lazy 분할, 권한 모드 diff 프리뷰와 위험 토글 ack. 번들 104.2 / 150 KiB.
|
|
71
|
+
|
|
72
|
+
### Fixed
|
|
73
|
+
- RAG 인용 지시가 에이전트 프롬프트로 새던 문제 — 도구를 불러야 할 턴에
|
|
74
|
+
모델이 출처 표기를 하고 있었다.
|
|
75
|
+
- 모델 로딩의 이름 로스터 게이트 — Qwen AWQ 빌드가 로드 자체가 불가능
|
|
76
|
+
했다.
|
|
77
|
+
- 베낄 수 있는 워크드 예제 — `write_file` content가 우리 예제 상수와
|
|
78
|
+
글자 그대로 같으면 `COPIED_EXAMPLE`로 기록하고 쓰지 않는다
|
|
79
|
+
(fail-closed). 에코된 지시문 줄은 guided 답변에서 제거.
|
|
80
|
+
- `<|channel>` 한-파이프 제어 프레임이 본문으로 새던 문제.
|
|
81
|
+
- 복원 뒤 오래된 커넥션이 복원 전 바이트를 주던 문제(에폭으로 해소).
|
|
82
|
+
|
|
83
|
+
### Known issues
|
|
84
|
+
- 작은 모델의 *내용 품질*은 여전히 fail-closed 게이트가 잡는다. 기계적
|
|
85
|
+
실행(요청한 파일 쓰기, DONE 도달)은 guided로 안정됐고 0.5B도 3.9초에
|
|
86
|
+
실파일로 완주하지만, 요약의 질은 critic에서 떨어져
|
|
87
|
+
FAILED/NEEDS_REVIEW로 끝날 수 있다. 매트릭스는 18개 중 11개 통과에서
|
|
88
|
+
개선 중이며 최종 수치는 릴리스 시점 `MATRIX_TABLE` 기준.
|
|
89
|
+
- `api_key` 클라우드 경로는 모의 서버만 검증(과금 0 정책). 라이브
|
|
90
|
+
검증은 `cli_oauth`.
|
|
91
|
+
- DMG는 ad-hoc 서명(=미서명).
|
|
92
|
+
- 검색 기본은 brute. `hnsw`는 opt-in.
|
|
93
|
+
- watch는 자동 삭제하지 않는다 — 정리는 명시적 prune으로만.
|
|
94
|
+
- 크레이트 재구조는 이동이지 결합 해소가 아니다. 도메인 선을 넘는 네
|
|
95
|
+
결합은 `lattice-platform`의 해당 `mod.rs`에 이름과 함께 적혀 있다.
|
|
96
|
+
- `GraphWriter::delete_node`는 여전히 `PART_OF`를 남긴다. prune은 그것을
|
|
97
|
+
쓰지 않고 `delete_document_tree`를 쓴다.
|
|
98
|
+
|
|
99
|
+
## [11.9.0] - 2026-08-17 — Working Order
|
|
100
|
+
|
|
101
|
+
### Added
|
|
102
|
+
- 이중 클라우드 자격증명: `<data_dir>/cloud_provider.json` →
|
|
103
|
+
`LATTICEAI_CLOUD_API_KEY` → CLI 자동감지(`agy` / `grok`). `api_key`는
|
|
104
|
+
OpenAI 호환 어댑터(모의 서버만 검증, 실과금 없음). `cli_oauth`는 로컬
|
|
105
|
+
OAuth CLI(`agy` → gemini-3.7-flash, `grok` → grok-4.6). 중립 temp cwd,
|
|
106
|
+
120초 타임아웃.
|
|
107
|
+
- `GET /api/cloud/status` — `{configured, mode, provider, model, detail}`.
|
|
108
|
+
- 하이브리드 에스컬레이션 `always` / `auto`(기본) / `manual`
|
|
109
|
+
(`hybrid_policy.json`). `auto`는 로컬 모델 없음 / 로컬 컨텍스트가 얇음
|
|
110
|
+
/ 명시적 `/cloud `·`클라우드:` 접두사일 때만. 요청
|
|
111
|
+
`network_mode:"local_only"`가 항상 이김.
|
|
112
|
+
- 호스트가 Review Center + egress 감사 싱크를 바인딩. 클라우드 턴이
|
|
113
|
+
`kg_cloud_expansion` 제안을 올리고 형태만 있는 egress 레코드를 남김
|
|
114
|
+
(provider / model / reason, 내용 없음).
|
|
115
|
+
- `POST /mcp` streamable-HTTP JSON-RPC 실서버(`initialize` /
|
|
116
|
+
`tools/list` / `tools/call`). 큐레이트된 안전 도구 + 스키마가 파싱된
|
|
117
|
+
스킬 7개. `/mcp/call`이 실제로 디스패치. `/mcp/install`은 정직
|
|
118
|
+
(스킬/플러그인 활성화, 원격은 수동).
|
|
119
|
+
- SPA 클라우드 투명성: ☁️ 클라우드 답변 칩, 컴포저 경계 힌트, 「이번
|
|
120
|
+
대화는 로컬만」 토글, System 패널 provider 상태 행.
|
|
121
|
+
- 채팅 파일 생성 복원(v9.2.0 헤드라인, 11.6.0 포트에서 삭제됨). 확장자별
|
|
122
|
+
앵커 프롬프트, judge + 1회 교정, 정직한 sanitize 배지, 프로젝트는
|
|
123
|
+
최대 3파일 순차, 워커 렌더 시임의 실제 docx/pdf.
|
|
124
|
+
- `/worker/sysinfo`에 `capabilities`(pointer_tools)와 `python_version`
|
|
125
|
+
(가산, 라우트 수는 19 유지).
|
|
126
|
+
- 통합 로컬 승인 토큰(`LocalApprovals`) — `/permissions/approve`에서
|
|
127
|
+
상환.
|
|
128
|
+
|
|
129
|
+
### Changed
|
|
130
|
+
- 문서에만 있던 13개 Current 스텁이 실동작: `/models/recommendations`,
|
|
131
|
+
`/setup/scan`+`auto`, `/setup/install`, computer-use 상태,
|
|
132
|
+
`/agent/eval`, `/agents/api/run`, 자동화 패턴/제안, 워크플로 run·
|
|
133
|
+
resume, 리뷰 `run_now`, `build`/`deploy_project`, 백업 blob.
|
|
134
|
+
- 클라우드 모델은 provider 설정에서 오고, 로컬 MLX id를 쓰지 않음.
|
|
135
|
+
로컬 모델이 없어도 클라우드 턴이 가능.
|
|
136
|
+
- 하이브리드 토큰 프레임은 도착하는 대로 스트림. `stream: false`는
|
|
137
|
+
JSON.
|
|
138
|
+
- 채팅 쓰기의 스코프가 비면 `workspace_id = personal`. null workspace
|
|
139
|
+
읽기는 personal 가시성.
|
|
140
|
+
- 2B(gemma-4-e2b-it-4bit) compact 프로파일: 태그 스트립·balanced·
|
|
141
|
+
truncated_close·labeled·fence_rescue 파서, v10.8.0 salvage 삼종
|
|
142
|
+
복원, COMPACT 컨텍스트 <2k, EXECUTE 온도 고정(compact 0.1 /
|
|
143
|
+
standard 0.2). MLX가 temperature + stop string을 존중.
|
|
144
|
+
- 백업 = `VACUUM INTO` 스냅샷 + blob + 정직한 매니페스트 + 원자적 복원.
|
|
145
|
+
export가 edges/chunks를 실음.
|
|
146
|
+
- `POST /agent`가 네이티브 루프에 닿고 제품 정책 표를 실음.
|
|
147
|
+
|
|
148
|
+
### Fixed
|
|
149
|
+
- 라이브 감사 N1–N9: 에이전트 루프 호스트 바인딩, 빈 Brain 메모리
|
|
150
|
+
API 500(`conversation_messages` 부트스트랩), chat/memory/chronicle/
|
|
151
|
+
command가 지식을 봄, brain health의 빈 100점, 백업/복원 정직성,
|
|
152
|
+
export의 없는 컬럼 조회, 폴더 ingest 승인, 보이스 메모 텍스트 저장.
|
|
153
|
+
- 워크플로 resume 승인 게이트. `write_file`이 비어 있는 content를
|
|
154
|
+
교정 에러로 거절. critic 판정 복구(verdict-shape + 보수적 토큰,
|
|
155
|
+
fail-closed 유지).
|
|
156
|
+
- 이전에 고장 나 있던 22항목을 신선한 Brain·실모델로 재검증.
|
|
157
|
+
|
|
158
|
+
### Known issues
|
|
159
|
+
- 2B 에이전트 루프의 *내용 품질*은 정직하게 게이트된다. gemma-4-e2b는
|
|
160
|
+
요청한 파일을 기계적으로 쓰지만(마감 테이프 5/5) 요약이 critic에서
|
|
161
|
+
떨어져 FAILED/NEEDS_REVIEW로 끝날 수 있다. 퍼널은 에이전트 런에 더
|
|
162
|
+
큰 모델을 권한다.
|
|
163
|
+
- `api_key` 클라우드 경로는 모의 서버만 검증했다. 계약 테스트는 있고
|
|
164
|
+
실호출은 없다(과금 예산 없음).
|
|
165
|
+
- 오래 떠 있는 프로세스에서 복원하면 커넥션이 재활용되기 전까지
|
|
166
|
+
복원 전 바이트를 줄 수 있다 — 재시작이 필요하다.
|
|
167
|
+
- brew/pip 셋업 항목은 설계상 수동이다.
|
|
168
|
+
- `/mcp`는 설계상 OpenAPI 제품 계약 밖이다.
|
|
169
|
+
- DMG는 ad-hoc 서명(미서명)이다.
|
|
170
|
+
- 11.8.0이 열어 둔 항목(커버리지 바닥 라인 90, 멀티모달 이미지/비디오
|
|
171
|
+
HTTP 문 없음, 11.7.0 leftover)은 그대로다. 전문은
|
|
172
|
+
[RELEASE_NOTES_v11.9.0.md](../RELEASE_NOTES_v11.9.0.md).
|
|
173
|
+
|
|
174
|
+
## [11.8.0] - 2026-08-16 — Travel Light
|
|
175
|
+
|
|
176
|
+
### Added
|
|
177
|
+
- 골든 드리프트 가드: 축소된 agent 대표행 세트가 커널의 새 판정 클래스를
|
|
178
|
+
덮지 않으면 실패. 축소가 조용한 커버리지 손실이 되지 않게 하는 장치.
|
|
179
|
+
- 삭제된 아홉 워커 라우트에 대한 네거티브 테스트 — 게이트웨이가 더 이상
|
|
180
|
+
전달하지 않음을 Rust KEEP 표와 allowlist 양쪽에서 고정.
|
|
181
|
+
- `rust/fixtures/chunking/FROZEN.md`. 이제 모든 픽스처 계열이 FROZEN.md를
|
|
182
|
+
가짐.
|
|
183
|
+
- `PhaseBudgets` 토큰 상한(MIN 128 / MAX 8192). 이전에는 하한만 있었음.
|
|
184
|
+
- 모든 GitHub Actions 워크플로에 `concurrency` 그룹과 `timeout-minutes`.
|
|
185
|
+
- Brain Chat Home 재설계: 히어로 컴포저, 3배 커진 LivingBrain(1440에서
|
|
186
|
+
60px → 179px)과 금빛/옥빛 성장 링, 준비도에 묶인 '기억이 자라고 있어요'
|
|
187
|
+
캡션, 풀캔버스 그리드, 바닥 연속성 바(지난 대화·현황·기억 지도·기능),
|
|
188
|
+
`prefers-reduced-motion` 폴백.
|
|
189
|
+
|
|
190
|
+
### Changed
|
|
191
|
+
- 워커 표면 **28 → 19 라우트**. `rust/fixtures/worker_allowlist.json`도 19.
|
|
192
|
+
- 로컬 lint 체인 **13 → 10 게이트**. 순서와 남은 열 개는 그대로.
|
|
193
|
+
- Python 커버리지 게이트가 `fail_under = 100`(문+분기) → **라인 90**.
|
|
194
|
+
분기 측정은 꺼짐. 실측은 이번 릴리스에서도 100%.
|
|
195
|
+
- `ci.yml` 중복 스텝 제거 — 4레그 매트릭스는 유지하되 OpenAPI ·
|
|
196
|
+
product-readiness · 확장 테스트는 3.11+ubuntu 레그에서만, 커버리지 레그는
|
|
197
|
+
`pytest tests/`를 두 번 돌리지 않음. `release.yml`은 릴리스 스텝만.
|
|
198
|
+
dependency-audit은 cron 전용, visual은 push+nightly(PR 제외),
|
|
199
|
+
e2e-sidecar는 nightly 전용.
|
|
200
|
+
- Rust: `lattice-{platform,retrieval,ingest,jobs}`의 약 191개 파일 blanket
|
|
201
|
+
`#![allow]` 헤더 제거, 약 650건의 clippy/rustc 진단을 원인에서 수정.
|
|
202
|
+
워크스페이스 수준 허용 0건 추가, 남긴 억제는 이유가 붙은 지역
|
|
203
|
+
`#[allow(clippy::too_many_arguments)]` 8개.
|
|
204
|
+
- 통합 테스트 파일(= 링크되는 테스트 바이너리) **98 → 56**
|
|
205
|
+
(lattice-platform 43 → 11). 테스트 함수 삭제 없이 주제별 통합.
|
|
206
|
+
- `ROLE_CAPABILITIES`가 `lattice-auth` 단일 출처. `lattice-agent`가 의존.
|
|
207
|
+
- agent 골든 `decisions__strict` · `calls`가 702 → **171 대표행**
|
|
208
|
+
(등가류당 한 행).
|
|
209
|
+
- product-readiness 증거를 Rust 픽스처로 재지정. 판정은 COMPLETE 10/10.
|
|
210
|
+
|
|
211
|
+
### Fixed
|
|
212
|
+
- `SessionStore`가 조회 미스 시 `sessions.json`을 다시 읽음. v11.6.0부터
|
|
213
|
+
writer는 `lattice-auth`인데 워커는 `__init__`에서 한 번만 읽어, **워커
|
|
214
|
+
기동 이후의 로그인이 워커에게 보이지 않았음** —
|
|
215
|
+
`trusted_local_owner`에서는 조용히, `LATTICEAI_REQUIRE_AUTH=true`에서는
|
|
216
|
+
파일 안에 있는 토큰에 대해 401. `mtime_ns`/`size` 가드 + 1초 throttle을
|
|
217
|
+
같은 락 아래에서 적용해 추측 버스트가 읽기 버스트가 되지 않게 함.
|
|
218
|
+
테스트 9개 추가.
|
|
219
|
+
|
|
220
|
+
### Removed
|
|
221
|
+
- 호출자 0인 워커 라우트 아홉 개: `GET /api/embeddings/providers`,
|
|
222
|
+
`POST /tools/read_document`, `GET /tools/pdf_pages`,
|
|
223
|
+
`POST /worker/multimodal/describe`, `GET /api/ingestion/multimodal`,
|
|
224
|
+
`POST /models/switch/{model_id}`, `DELETE /models/unload-all`,
|
|
225
|
+
`POST /engines/pull-model`, `GET /api/capture/voice/status`. 파일로는
|
|
226
|
+
`latticeai/api/{tools,local_files,voice_capture}.py`와
|
|
227
|
+
`lattice_brain/ingestion/pipeline.py`. `pypdfium2` 의존성도 함께.
|
|
228
|
+
- `latticeai/core/agent_permission.py`; 죽은 보안 헬퍼(`hash_password` /
|
|
229
|
+
`verify_password`, `check_ip_rate_limit`, `configure_trusted_proxies`,
|
|
230
|
+
`client_ip`, `bytes_match_extension`); `_kg_common/text.py`의 죽은 청커와
|
|
231
|
+
호출자 0 함수 9개; 렌더 시임의 `_safe_filename` 이중 살균.
|
|
232
|
+
- 얼어붙은 픽스처의 생성기 2종(`generate_agent_parity_fixtures.py`,
|
|
233
|
+
`generate_chunking_parity_fixtures.py`),
|
|
234
|
+
`scripts/{brain_quality_eval,agent_eval,check_python,bench_agent_smoke}.py`,
|
|
235
|
+
`scripts/check_legacy_debt.mjs`(드리프트한 거울 — 파이썬 테스트가 권위).
|
|
236
|
+
- `.github/workflows/agent-smoke.yml` — 모델 없는 러너에서 이중 fail-open.
|
|
237
|
+
- Rust 죽은 코드: `workspace_scope` 모듈, `WORKSPACE_OS_VERSION` 상수,
|
|
238
|
+
호출자 0 항목 16개.
|
|
239
|
+
- agent 골든 `decisions__trusted` · `decisions__bypass` 그리드(각 702행) —
|
|
240
|
+
모든 판정 클래스를 덮는 이름 붙은 단위 테스트로 대체.
|
|
241
|
+
- 죽은 프론트 컴포넌트 `FeedbackState.tsx`, `DepthEmergence.tsx`.
|
|
242
|
+
|
|
243
|
+
### Known issues
|
|
244
|
+
- 커버리지 **강제 바닥이 100 → 90(라인)** 으로 내려갔고 분기 게이트가
|
|
245
|
+
없어졌습니다. 실측은 100%지만 게이트가 지키는 것은 바닥입니다.
|
|
246
|
+
- `lattice_brain` 멀티모달의 이미지/비디오 절반에 HTTP 문이 없습니다
|
|
247
|
+
(관찰 함수는 Brain Core에 남아 단위 테스트를 받고, 모듈 헤더에 명시).
|
|
248
|
+
- DMG는 ad-hoc 서명(미서명)입니다.
|
|
249
|
+
- 삭제된 라우트의 메시지 카탈로그 키는 얼어붙은 패리티 픽스처에 의도적으로
|
|
250
|
+
남습니다 — 픽스처는 녹화 당시의 표면을 고정하는 기록입니다.
|
|
251
|
+
- `tests/visual/mock_server`가 고아 mock 라우트 하나를 아직 서빙합니다
|
|
252
|
+
(현재 증거가 해시로 묶여 있어 다음 캡처 사이클에 정리).
|
|
253
|
+
- 11.7.0이 열어 둔 항목은 그대로입니다. 전문은
|
|
254
|
+
[RELEASE_NOTES_v11.8.0.md](../RELEASE_NOTES_v11.8.0.md).
|
|
255
|
+
|
|
7
256
|
## [11.7.0] - 2026-08-15 — Clean Sweep
|
|
8
257
|
|
|
9
258
|
### Added
|