ltcai 11.7.0 → 11.9.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 +73 -70
- package/docs/BENCHMARKS.md +9 -2
- package/docs/CHANGELOG.md +157 -0
- package/docs/CI_AND_RELEASE_GATES.md +126 -41
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +34 -14
- package/docs/LEGACY_COMPATIBILITY.md +10 -6
- package/docs/ONBOARDING.md +5 -3
- package/docs/OPERATIONS.md +5 -1
- package/docs/PERMISSION_MODE.md +14 -9
- package/docs/TRUST_MODEL.md +13 -6
- package/docs/USABILITY_AUDIT.md +5 -0
- package/docs/WHY_LATTICE.md +6 -4
- package/docs/kg-schema.md +7 -3
- package/docs/mcp-tools.md +73 -79
- 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/text.py +14 -450
- 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 +12 -1
- package/latticeai/api/models.py +18 -110
- package/latticeai/api/search.py +7 -30
- package/latticeai/api/worker_compute.py +53 -107
- package/latticeai/api/worker_seams.py +17 -2
- 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/models/router/catalog.py +2 -2
- package/latticeai/models/router/generation.py +81 -14
- package/latticeai/models/router/loading.py +41 -5
- package/latticeai/runtime/access_runtime.py +7 -4
- 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 +21 -28
- 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 +33 -11
- package/latticeai/services/voice_capture.py +8 -28
- package/latticeai/tools/__init__.py +6 -46
- package/latticeai/tools/commands.py +9 -15
- package/latticeai/tools/knowledge.py +0 -6
- package/package.json +3 -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 +2 -1
- package/scripts/export_openapi.py +5 -4
- package/scripts/gen_worker_allowlist_fixture.py +2 -2
- package/scripts/openapi_route_families.json +14 -73
- package/scripts/release_screen_claims.json +131 -27
- package/src-tauri/Cargo.lock +11 -10
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +41 -41
- package/static/app/assets/{Act-BPcVAbOL.js → Act-B4WT81kh.js} +1 -1
- package/static/app/assets/AdminConsole--Wf71m-o.js +1 -0
- package/static/app/assets/{Brain-CT92Kos0.js → Brain-CtYaa26c.js} +2 -2
- package/static/app/assets/BrainHome-Be2VPJEc.js +2 -0
- package/static/app/assets/BrainSignals-C0__xgpG.js +1 -0
- package/static/app/assets/Capture-DdNi5Peb.js +1 -0
- package/static/app/assets/Chronicle-B3hNveeI.js +1 -0
- package/static/app/assets/CommandPalette-CIsnSsFL.js +1 -0
- package/static/app/assets/Library-Bl5XClFV.js +1 -0
- package/static/app/assets/LivingBrain-DjkTB_gh.js +1 -0
- package/static/app/assets/{ProductFlow-DXBC6brE.js → ProductFlow-DCUNRNHs.js} +1 -1
- package/static/app/assets/{ReviewCard-HXRle3qq.js → ReviewCard-CD3yWvUB.js} +2 -2
- package/static/app/assets/System-BJ6jQ_SL.js +1 -0
- package/static/app/assets/arrow-left-6_28Z0qH.js +1 -0
- package/static/app/assets/{bot-Cn8bWRuq.js → bot-Bc3Q27YR.js} +1 -1
- package/static/app/assets/brain-B9BDrMTe.js +1 -0
- package/static/app/assets/{button-Ct9f2_oT.js → button-D6JcpYcf.js} +1 -1
- package/static/app/assets/circle-check-BFu9lD-3.js +1 -0
- package/static/app/assets/{circle-pause-CmzC_apg.js → circle-pause-BGMiV8UU.js} +1 -1
- package/static/app/assets/{circle-play-D8mW2aQ7.js → circle-play-DoanLHnd.js} +1 -1
- package/static/app/assets/{cpu-DZcdd0PZ.js → cpu-DwzNf82m.js} +1 -1
- package/static/app/assets/{download-bv1KEPGQ.js → download-Ddw49yCV.js} +1 -1
- package/static/app/assets/{folder-open-d-Pip5gr.js → folder-open-Brd6Kvto.js} +1 -1
- package/static/app/assets/{hard-drive-D20iavUb.js → hard-drive-Bu-DTJdB.js} +1 -1
- package/static/app/assets/index-CGdg_aq9.css +2 -0
- package/static/app/assets/{index-Do83hDzJ.js → index-CWKRRsLW.js} +4 -4
- package/static/app/assets/input-CEqsxtil.js +1 -0
- package/static/app/assets/{link-2-BPJOFlAy.js → link-2-DZ4OA5tJ.js} +1 -1
- package/static/app/assets/{permissionCopy-ChdJd493.js → permissionCopy-D9TR0F8b.js} +1 -1
- package/static/app/assets/primitives-DORg7Z_7.js +1 -0
- package/static/app/assets/search-0NQ21wXe.js +1 -0
- package/static/app/assets/{share-2-YNX_NtMU.js → share-2-BC5FirFv.js} +1 -1
- package/static/app/assets/{shield-alert-DuQ3zrVL.js → shield-alert-DUbR2W2s.js} +1 -1
- package/static/app/assets/textarea-jtQcRSXo.js +1 -0
- package/static/app/assets/{useFocusTrap-ZVI98jaW.js → useFocusTrap-HRemcWId.js} +1 -1
- package/static/app/assets/{useMutation-CVC4qv_D.js → useMutation-DqlFE-Bw.js} +1 -1
- package/static/app/assets/{useQuery-C7BeG4HU.js → useQuery-BizqBNGw.js} +1 -1
- package/static/app/assets/utils-WgW4V69R.js +4 -0
- package/static/app/assets/workspace-DSek3jCY.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/AdminConsole-Bw1ATQL0.js +0 -1
- 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/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/circle-check-DruOxB-4.js +0 -1
- package/static/app/assets/index-D9x-kSNy.css +0 -2
- 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/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
|
|
|
@@ -58,67 +59,49 @@ First-run flow — wake the Brain, pick the owner, load a recommended model:
|
|
|
58
59
|
|
|
59
60
|
| | | |
|
|
60
61
|
| --- | --- | --- |
|
|
61
|
-
|  |  |  |
|
|
62
63
|
|
|
63
64
|
Screenshot index and capture notes:
|
|
64
|
-
[output/release/v11.
|
|
65
|
+
[output/release/v11.9.0/SCREENSHOT_INDEX.md](output/release/v11.9.0/SCREENSHOT_INDEX.md)
|
|
65
66
|
|
|
66
67
|
## Current Release
|
|
67
68
|
|
|
68
|
-
The current release is **11.
|
|
69
|
+
The current release is **11.9.0 — Working Order**:
|
|
69
70
|
|
|
70
|
-
11.
|
|
71
|
-
|
|
72
|
-
not know it had shipped, and restyles every captured surface on an
|
|
73
|
-
elevation ladder — ink night, paper day, no glass. The door is unchanged:
|
|
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:
|
|
74
73
|
`lattice-host` still serves **420 operations across 41 route families**,
|
|
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
|
-
Layout and a11y contracts stay; the first-paint bundle is still ~103 KiB
|
|
107
|
-
gzip.
|
|
108
|
-
|
|
109
|
-
What this release still carries openly — `open_keys` pending-only, no
|
|
110
|
-
extraction refiner, `delete_node` leaving `PART_OF`, review events silent
|
|
111
|
-
without an owner, text-only KG-api ingest, two store cycles per review
|
|
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`
|
|
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`
|
|
122
105
|
|
|
123
106
|
Do not use wildcard artifact uploads. Package registry publishing remains owner-run.
|
|
124
107
|
|
|
@@ -131,21 +114,24 @@ every product route, owns every write to the Brain, and supervises a Python
|
|
|
131
114
|
**AI worker** it reaches over loopback for the things a model does — inference,
|
|
132
115
|
embedding, extraction, parsing, rendering, speech-to-text. The React/Vite
|
|
133
116
|
frontend and the Tauri desktop shell sit on top of that one door. Local-first
|
|
134
|
-
by default — cloud
|
|
135
|
-
opt-in.
|
|
117
|
+
by default — cloud is optional (OAuth CLI or an API key you configure),
|
|
118
|
+
and downloads, Brain Network, and update checks are opt-in.
|
|
136
119
|
|
|
137
120
|
See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
|
|
138
121
|
[docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for the developer workflow
|
|
139
|
-
(`npm
|
|
140
|
-
`npm run
|
|
122
|
+
(`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`.
|
|
141
125
|
|
|
142
126
|
## Known Limitations
|
|
143
127
|
|
|
144
128
|
- External package registries are owner-published and can lag behind GitHub.
|
|
145
129
|
- SQLite is the live local Brain store. The optional PostgreSQL/pgvector
|
|
146
|
-
migration tooling is not part of the 11.
|
|
130
|
+
migration tooling is not part of the 11.9.0 worker.
|
|
147
131
|
- Docker, model downloads, cloud model calls, Brain Network, and update checks
|
|
148
|
-
require explicit user action.
|
|
132
|
+
require explicit user action. Cloud is optional: `cli_oauth` (`agy` /
|
|
133
|
+
`grok`) was live-checked at zero billing; the `api_key` path is
|
|
134
|
+
mock-verified only.
|
|
149
135
|
- **The Telegram bridge was removed in 11.6.0** — it lived in the platform code
|
|
150
136
|
that became the AI worker. **SSO/OIDC login and callback flows were removed
|
|
151
137
|
with it**; the configuration surface remains and password login is native.
|
|
@@ -157,11 +143,26 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for details and
|
|
|
157
143
|
required dependency as of 11.6.0 (it used to be an undeclared lazy import
|
|
158
144
|
that raised a 500; `ltcai[pdf]` remains as an empty alias for older
|
|
159
145
|
install instructions).
|
|
146
|
+
- The multimodal image and video analysis functions have no HTTP door as of
|
|
147
|
+
11.8.0: their only route wrapped a native image ingest that was never
|
|
148
|
+
built. The observation code stays in Brain Core under unit test, and its
|
|
149
|
+
module header says so.
|
|
150
|
+
- 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.
|
|
159
|
+
- The macOS dmg is ad-hoc signed — effectively unsigned — so first launch
|
|
160
|
+
needs the usual Gatekeeper step.
|
|
160
161
|
- Pointer-control tools still execute in the worker. Remaining honest gaps
|
|
161
162
|
(`open_keys` pending-only, no Self-Model refiner, `PART_OF` left on
|
|
162
163
|
delete, review events silent without an owner, KG-api ingest text-only,
|
|
163
164
|
two store cycles per review mutation) are listed with their reasons in
|
|
164
|
-
[RELEASE_NOTES_v11.
|
|
165
|
+
[RELEASE_NOTES_v11.9.0.md](RELEASE_NOTES_v11.9.0.md).
|
|
165
166
|
|
|
166
167
|
## Release History
|
|
167
168
|
|
|
@@ -172,6 +173,8 @@ same boundary. Earlier notes stay in the tree as `RELEASE_NOTES_v*.md` files.
|
|
|
172
173
|
|
|
173
174
|
| Version | Theme |
|
|
174
175
|
| --- | --- |
|
|
176
|
+
| 11.9.0 | Working Order |
|
|
177
|
+
| 11.8.0 | Travel Light |
|
|
175
178
|
| 11.7.0 | Clean Sweep |
|
|
176
179
|
| 11.6.0 | One Door |
|
|
177
180
|
| 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,163 @@ 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
|
+
## [11.9.0] - 2026-08-17 — Working Order
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- 이중 클라우드 자격증명: `<data_dir>/cloud_provider.json` →
|
|
11
|
+
`LATTICEAI_CLOUD_API_KEY` → CLI 자동감지(`agy` / `grok`). `api_key`는
|
|
12
|
+
OpenAI 호환 어댑터(모의 서버만 검증, 실과금 없음). `cli_oauth`는 로컬
|
|
13
|
+
OAuth CLI(`agy` → gemini-3.7-flash, `grok` → grok-4.6). 중립 temp cwd,
|
|
14
|
+
120초 타임아웃.
|
|
15
|
+
- `GET /api/cloud/status` — `{configured, mode, provider, model, detail}`.
|
|
16
|
+
- 하이브리드 에스컬레이션 `always` / `auto`(기본) / `manual`
|
|
17
|
+
(`hybrid_policy.json`). `auto`는 로컬 모델 없음 / 로컬 컨텍스트가 얇음
|
|
18
|
+
/ 명시적 `/cloud `·`클라우드:` 접두사일 때만. 요청
|
|
19
|
+
`network_mode:"local_only"`가 항상 이김.
|
|
20
|
+
- 호스트가 Review Center + egress 감사 싱크를 바인딩. 클라우드 턴이
|
|
21
|
+
`kg_cloud_expansion` 제안을 올리고 형태만 있는 egress 레코드를 남김
|
|
22
|
+
(provider / model / reason, 내용 없음).
|
|
23
|
+
- `POST /mcp` streamable-HTTP JSON-RPC 실서버(`initialize` /
|
|
24
|
+
`tools/list` / `tools/call`). 큐레이트된 안전 도구 + 스키마가 파싱된
|
|
25
|
+
스킬 7개. `/mcp/call`이 실제로 디스패치. `/mcp/install`은 정직
|
|
26
|
+
(스킬/플러그인 활성화, 원격은 수동).
|
|
27
|
+
- SPA 클라우드 투명성: ☁️ 클라우드 답변 칩, 컴포저 경계 힌트, 「이번
|
|
28
|
+
대화는 로컬만」 토글, System 패널 provider 상태 행.
|
|
29
|
+
- 채팅 파일 생성 복원(v9.2.0 헤드라인, 11.6.0 포트에서 삭제됨). 확장자별
|
|
30
|
+
앵커 프롬프트, judge + 1회 교정, 정직한 sanitize 배지, 프로젝트는
|
|
31
|
+
최대 3파일 순차, 워커 렌더 시임의 실제 docx/pdf.
|
|
32
|
+
- `/worker/sysinfo`에 `capabilities`(pointer_tools)와 `python_version`
|
|
33
|
+
(가산, 라우트 수는 19 유지).
|
|
34
|
+
- 통합 로컬 승인 토큰(`LocalApprovals`) — `/permissions/approve`에서
|
|
35
|
+
상환.
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
- 문서에만 있던 13개 Current 스텁이 실동작: `/models/recommendations`,
|
|
39
|
+
`/setup/scan`+`auto`, `/setup/install`, computer-use 상태,
|
|
40
|
+
`/agent/eval`, `/agents/api/run`, 자동화 패턴/제안, 워크플로 run·
|
|
41
|
+
resume, 리뷰 `run_now`, `build`/`deploy_project`, 백업 blob.
|
|
42
|
+
- 클라우드 모델은 provider 설정에서 오고, 로컬 MLX id를 쓰지 않음.
|
|
43
|
+
로컬 모델이 없어도 클라우드 턴이 가능.
|
|
44
|
+
- 하이브리드 토큰 프레임은 도착하는 대로 스트림. `stream: false`는
|
|
45
|
+
JSON.
|
|
46
|
+
- 채팅 쓰기의 스코프가 비면 `workspace_id = personal`. null workspace
|
|
47
|
+
읽기는 personal 가시성.
|
|
48
|
+
- 2B(gemma-4-e2b-it-4bit) compact 프로파일: 태그 스트립·balanced·
|
|
49
|
+
truncated_close·labeled·fence_rescue 파서, v10.8.0 salvage 삼종
|
|
50
|
+
복원, COMPACT 컨텍스트 <2k, EXECUTE 온도 고정(compact 0.1 /
|
|
51
|
+
standard 0.2). MLX가 temperature + stop string을 존중.
|
|
52
|
+
- 백업 = `VACUUM INTO` 스냅샷 + blob + 정직한 매니페스트 + 원자적 복원.
|
|
53
|
+
export가 edges/chunks를 실음.
|
|
54
|
+
- `POST /agent`가 네이티브 루프에 닿고 제품 정책 표를 실음.
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
- 라이브 감사 N1–N9: 에이전트 루프 호스트 바인딩, 빈 Brain 메모리
|
|
58
|
+
API 500(`conversation_messages` 부트스트랩), chat/memory/chronicle/
|
|
59
|
+
command가 지식을 봄, brain health의 빈 100점, 백업/복원 정직성,
|
|
60
|
+
export의 없는 컬럼 조회, 폴더 ingest 승인, 보이스 메모 텍스트 저장.
|
|
61
|
+
- 워크플로 resume 승인 게이트. `write_file`이 비어 있는 content를
|
|
62
|
+
교정 에러로 거절. critic 판정 복구(verdict-shape + 보수적 토큰,
|
|
63
|
+
fail-closed 유지).
|
|
64
|
+
- 이전에 고장 나 있던 22항목을 신선한 Brain·실모델로 재검증.
|
|
65
|
+
|
|
66
|
+
### Known issues
|
|
67
|
+
- 2B 에이전트 루프의 *내용 품질*은 정직하게 게이트된다. gemma-4-e2b는
|
|
68
|
+
요청한 파일을 기계적으로 쓰지만(마감 테이프 5/5) 요약이 critic에서
|
|
69
|
+
떨어져 FAILED/NEEDS_REVIEW로 끝날 수 있다. 퍼널은 에이전트 런에 더
|
|
70
|
+
큰 모델을 권한다.
|
|
71
|
+
- `api_key` 클라우드 경로는 모의 서버만 검증했다. 계약 테스트는 있고
|
|
72
|
+
실호출은 없다(과금 예산 없음).
|
|
73
|
+
- 오래 떠 있는 프로세스에서 복원하면 커넥션이 재활용되기 전까지
|
|
74
|
+
복원 전 바이트를 줄 수 있다 — 재시작이 필요하다.
|
|
75
|
+
- brew/pip 셋업 항목은 설계상 수동이다.
|
|
76
|
+
- `/mcp`는 설계상 OpenAPI 제품 계약 밖이다.
|
|
77
|
+
- DMG는 ad-hoc 서명(미서명)이다.
|
|
78
|
+
- 11.8.0이 열어 둔 항목(커버리지 바닥 라인 90, 멀티모달 이미지/비디오
|
|
79
|
+
HTTP 문 없음, 11.7.0 leftover)은 그대로다. 전문은
|
|
80
|
+
[RELEASE_NOTES_v11.9.0.md](../RELEASE_NOTES_v11.9.0.md).
|
|
81
|
+
|
|
82
|
+
## [11.8.0] - 2026-08-16 — Travel Light
|
|
83
|
+
|
|
84
|
+
### Added
|
|
85
|
+
- 골든 드리프트 가드: 축소된 agent 대표행 세트가 커널의 새 판정 클래스를
|
|
86
|
+
덮지 않으면 실패. 축소가 조용한 커버리지 손실이 되지 않게 하는 장치.
|
|
87
|
+
- 삭제된 아홉 워커 라우트에 대한 네거티브 테스트 — 게이트웨이가 더 이상
|
|
88
|
+
전달하지 않음을 Rust KEEP 표와 allowlist 양쪽에서 고정.
|
|
89
|
+
- `rust/fixtures/chunking/FROZEN.md`. 이제 모든 픽스처 계열이 FROZEN.md를
|
|
90
|
+
가짐.
|
|
91
|
+
- `PhaseBudgets` 토큰 상한(MIN 128 / MAX 8192). 이전에는 하한만 있었음.
|
|
92
|
+
- 모든 GitHub Actions 워크플로에 `concurrency` 그룹과 `timeout-minutes`.
|
|
93
|
+
- Brain Chat Home 재설계: 히어로 컴포저, 3배 커진 LivingBrain(1440에서
|
|
94
|
+
60px → 179px)과 금빛/옥빛 성장 링, 준비도에 묶인 '기억이 자라고 있어요'
|
|
95
|
+
캡션, 풀캔버스 그리드, 바닥 연속성 바(지난 대화·현황·기억 지도·기능),
|
|
96
|
+
`prefers-reduced-motion` 폴백.
|
|
97
|
+
|
|
98
|
+
### Changed
|
|
99
|
+
- 워커 표면 **28 → 19 라우트**. `rust/fixtures/worker_allowlist.json`도 19.
|
|
100
|
+
- 로컬 lint 체인 **13 → 10 게이트**. 순서와 남은 열 개는 그대로.
|
|
101
|
+
- Python 커버리지 게이트가 `fail_under = 100`(문+분기) → **라인 90**.
|
|
102
|
+
분기 측정은 꺼짐. 실측은 이번 릴리스에서도 100%.
|
|
103
|
+
- `ci.yml` 중복 스텝 제거 — 4레그 매트릭스는 유지하되 OpenAPI ·
|
|
104
|
+
product-readiness · 확장 테스트는 3.11+ubuntu 레그에서만, 커버리지 레그는
|
|
105
|
+
`pytest tests/`를 두 번 돌리지 않음. `release.yml`은 릴리스 스텝만.
|
|
106
|
+
dependency-audit은 cron 전용, visual은 push+nightly(PR 제외),
|
|
107
|
+
e2e-sidecar는 nightly 전용.
|
|
108
|
+
- Rust: `lattice-{platform,retrieval,ingest,jobs}`의 약 191개 파일 blanket
|
|
109
|
+
`#![allow]` 헤더 제거, 약 650건의 clippy/rustc 진단을 원인에서 수정.
|
|
110
|
+
워크스페이스 수준 허용 0건 추가, 남긴 억제는 이유가 붙은 지역
|
|
111
|
+
`#[allow(clippy::too_many_arguments)]` 8개.
|
|
112
|
+
- 통합 테스트 파일(= 링크되는 테스트 바이너리) **98 → 56**
|
|
113
|
+
(lattice-platform 43 → 11). 테스트 함수 삭제 없이 주제별 통합.
|
|
114
|
+
- `ROLE_CAPABILITIES`가 `lattice-auth` 단일 출처. `lattice-agent`가 의존.
|
|
115
|
+
- agent 골든 `decisions__strict` · `calls`가 702 → **171 대표행**
|
|
116
|
+
(등가류당 한 행).
|
|
117
|
+
- product-readiness 증거를 Rust 픽스처로 재지정. 판정은 COMPLETE 10/10.
|
|
118
|
+
|
|
119
|
+
### Fixed
|
|
120
|
+
- `SessionStore`가 조회 미스 시 `sessions.json`을 다시 읽음. v11.6.0부터
|
|
121
|
+
writer는 `lattice-auth`인데 워커는 `__init__`에서 한 번만 읽어, **워커
|
|
122
|
+
기동 이후의 로그인이 워커에게 보이지 않았음** —
|
|
123
|
+
`trusted_local_owner`에서는 조용히, `LATTICEAI_REQUIRE_AUTH=true`에서는
|
|
124
|
+
파일 안에 있는 토큰에 대해 401. `mtime_ns`/`size` 가드 + 1초 throttle을
|
|
125
|
+
같은 락 아래에서 적용해 추측 버스트가 읽기 버스트가 되지 않게 함.
|
|
126
|
+
테스트 9개 추가.
|
|
127
|
+
|
|
128
|
+
### Removed
|
|
129
|
+
- 호출자 0인 워커 라우트 아홉 개: `GET /api/embeddings/providers`,
|
|
130
|
+
`POST /tools/read_document`, `GET /tools/pdf_pages`,
|
|
131
|
+
`POST /worker/multimodal/describe`, `GET /api/ingestion/multimodal`,
|
|
132
|
+
`POST /models/switch/{model_id}`, `DELETE /models/unload-all`,
|
|
133
|
+
`POST /engines/pull-model`, `GET /api/capture/voice/status`. 파일로는
|
|
134
|
+
`latticeai/api/{tools,local_files,voice_capture}.py`와
|
|
135
|
+
`lattice_brain/ingestion/pipeline.py`. `pypdfium2` 의존성도 함께.
|
|
136
|
+
- `latticeai/core/agent_permission.py`; 죽은 보안 헬퍼(`hash_password` /
|
|
137
|
+
`verify_password`, `check_ip_rate_limit`, `configure_trusted_proxies`,
|
|
138
|
+
`client_ip`, `bytes_match_extension`); `_kg_common/text.py`의 죽은 청커와
|
|
139
|
+
호출자 0 함수 9개; 렌더 시임의 `_safe_filename` 이중 살균.
|
|
140
|
+
- 얼어붙은 픽스처의 생성기 2종(`generate_agent_parity_fixtures.py`,
|
|
141
|
+
`generate_chunking_parity_fixtures.py`),
|
|
142
|
+
`scripts/{brain_quality_eval,agent_eval,check_python,bench_agent_smoke}.py`,
|
|
143
|
+
`scripts/check_legacy_debt.mjs`(드리프트한 거울 — 파이썬 테스트가 권위).
|
|
144
|
+
- `.github/workflows/agent-smoke.yml` — 모델 없는 러너에서 이중 fail-open.
|
|
145
|
+
- Rust 죽은 코드: `workspace_scope` 모듈, `WORKSPACE_OS_VERSION` 상수,
|
|
146
|
+
호출자 0 항목 16개.
|
|
147
|
+
- agent 골든 `decisions__trusted` · `decisions__bypass` 그리드(각 702행) —
|
|
148
|
+
모든 판정 클래스를 덮는 이름 붙은 단위 테스트로 대체.
|
|
149
|
+
- 죽은 프론트 컴포넌트 `FeedbackState.tsx`, `DepthEmergence.tsx`.
|
|
150
|
+
|
|
151
|
+
### Known issues
|
|
152
|
+
- 커버리지 **강제 바닥이 100 → 90(라인)** 으로 내려갔고 분기 게이트가
|
|
153
|
+
없어졌습니다. 실측은 100%지만 게이트가 지키는 것은 바닥입니다.
|
|
154
|
+
- `lattice_brain` 멀티모달의 이미지/비디오 절반에 HTTP 문이 없습니다
|
|
155
|
+
(관찰 함수는 Brain Core에 남아 단위 테스트를 받고, 모듈 헤더에 명시).
|
|
156
|
+
- DMG는 ad-hoc 서명(미서명)입니다.
|
|
157
|
+
- 삭제된 라우트의 메시지 카탈로그 키는 얼어붙은 패리티 픽스처에 의도적으로
|
|
158
|
+
남습니다 — 픽스처는 녹화 당시의 표면을 고정하는 기록입니다.
|
|
159
|
+
- `tests/visual/mock_server`가 고아 mock 라우트 하나를 아직 서빙합니다
|
|
160
|
+
(현재 증거가 해시로 묶여 있어 다음 캡처 사이클에 정리).
|
|
161
|
+
- 11.7.0이 열어 둔 항목은 그대로입니다. 전문은
|
|
162
|
+
[RELEASE_NOTES_v11.8.0.md](../RELEASE_NOTES_v11.8.0.md).
|
|
163
|
+
|
|
7
164
|
## [11.7.0] - 2026-08-15 — Clean Sweep
|
|
8
165
|
|
|
9
166
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CI & Release Gates
|
|
2
2
|
|
|
3
|
-
> Status: reference 2026-
|
|
3
|
+
> Status: reference 2026-08-16
|
|
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
|
|
@@ -11,13 +11,79 @@ configuration. Companion to [SECURITY_AUDIT.md](SECURITY_AUDIT.md) and
|
|
|
11
11
|
|
|
12
12
|
| Workflow | File | Triggers | Purpose |
|
|
13
13
|
|----------|------|----------|---------|
|
|
14
|
-
| CI | `.github/workflows/ci.yml` | push/PR to `main` | Lint, typecheck, unit + integration tests,
|
|
15
|
-
| Release | `.github/workflows/release.yml` | tags `v*` / `[0-9]*` | Build & validate
|
|
16
|
-
| Visual Smoke | `.github/workflows/visual.yml` | push
|
|
17
|
-
|
|
|
18
|
-
|
|
|
14
|
+
| CI | `.github/workflows/ci.yml` | push/PR to `main` | Lint, typecheck, unit + coverage + integration tests, product-readiness, build + wheel smoke, Rust workspace |
|
|
15
|
+
| Release | `.github/workflows/release.yml` | tags `v*` / `[0-9]*` | Build & validate artifacts (no publish; does not re-run CI lint/tests) |
|
|
16
|
+
| Visual Smoke | `.github/workflows/visual.yml` | push to `main`, nightly cron, dispatch | Playwright visual smoke (not on PRs) |
|
|
17
|
+
| Sidecar E2E | `.github/workflows/e2e-sidecar.yml` | nightly cron, dispatch | Live sidecar Playwright first-value loop |
|
|
18
|
+
| Dependency Audit | `.github/workflows/dependency-audit.yml` | weekly cron, dispatch | pip-audit + npm audit + CycloneDX SBOMs |
|
|
19
|
+
| Postgres Integration | `.github/workflows/postgres-integration.yml` | weekly cron, dispatch | Live SQLite→Postgres/pgvector migration test |
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
There is no `agent-smoke.yml`. Hosted runners have no MLX models; a fail-open
|
|
22
|
+
weekly smoke cannot report anything actionable.
|
|
23
|
+
|
|
24
|
+
Every workflow sets `concurrency.group` to `<workflow-file-stem>-${{ github.ref }}`
|
|
25
|
+
and cancels in-progress runs except on `main` (`cancel-in-progress: false` on
|
|
26
|
+
`release.yml`, which runs on tags). Job timeouts: test 40, integration 25,
|
|
27
|
+
build 20, rust 40, visual 15, sidecar 20, audit 15, release build 40,
|
|
28
|
+
postgres 20.
|
|
29
|
+
|
|
30
|
+
## CI matrix (`ci.yml`)
|
|
31
|
+
|
|
32
|
+
Four legs. Job names are `Test (Python <ver> on <os>)`:
|
|
33
|
+
|
|
34
|
+
| Leg | OpenAPI generate + upload | Full lint + typecheck + docs | Extension tests | Vitest | `pytest tests/unit/` | Coverage pytest (`tests/` + `--cov`) | Product readiness |
|
|
35
|
+
|-----|---------------------------|------------------------------|-----------------|--------|----------------------|--------------------------------------|-------------------|
|
|
36
|
+
| 3.11 + ubuntu-latest | yes | yes (`npm run lint`, `typecheck`, `docs:check-current`, `docs:check-links`) | yes (`test:browser-extension` && `test:vscode-extension`) | yes | yes | no | yes |
|
|
37
|
+
| 3.12 + ubuntu-latest | no | Python only (`lint:python`) | no | yes | yes | no | no |
|
|
38
|
+
| 3.14 + ubuntu-latest | no | Python only | no | yes | **no** (coverage invocation is the only pytest) | yes, line floor ≥90 | no |
|
|
39
|
+
| 3.11 + macos-latest | no | Python only | no | yes | yes | no | no |
|
|
40
|
+
|
|
41
|
+
Downstream jobs (after `test`): `Integration smoke test` (25 min), then
|
|
42
|
+
`Build package` (20 min). `Rust workspace` is independent (40 min).
|
|
43
|
+
|
|
44
|
+
Removed from CI **and deleted from the tree** in 11.8.0 — a script that is not
|
|
45
|
+
a gate is a script that looks like one:
|
|
46
|
+
|
|
47
|
+
- `scripts/check_python.py` — ruff parses every file on every test leg
|
|
48
|
+
- `scripts/brain_quality_eval.py`
|
|
49
|
+
- `scripts/agent_eval.py`
|
|
50
|
+
- `scripts/bench_agent_smoke.py`
|
|
51
|
+
|
|
52
|
+
## Local lint chain (`npm run lint`)
|
|
53
|
+
|
|
54
|
+
Ten members, in order:
|
|
55
|
+
|
|
56
|
+
1. `lint:python` (ruff + mypy)
|
|
57
|
+
2. `lint:visual`
|
|
58
|
+
3. `lint:frontend`
|
|
59
|
+
4. `frontend:openapi:check`
|
|
60
|
+
5. `scripts/check_i18n_literals.mjs`
|
|
61
|
+
6. `check:i18n-namespaces`
|
|
62
|
+
7. `check:bundle`
|
|
63
|
+
8. `check:server-i18n`
|
|
64
|
+
9. `scripts/check_release_evidence_bound.mjs`
|
|
65
|
+
10. `check:max-file-lines`
|
|
66
|
+
|
|
67
|
+
Not in the lint chain (CI calls the extension tests directly on the 3.11+ubuntu
|
|
68
|
+
leg; the Python legacy-shim test is authoritative):
|
|
69
|
+
|
|
70
|
+
- `test:browser-extension` / `test:vscode-extension` (script entries remain)
|
|
71
|
+
- `check:legacy-debt` (script entry and `scripts/check_legacy_debt.mjs` both
|
|
72
|
+
removed — the mjs mirror had drifted from the Python test)
|
|
73
|
+
- `check:python` (script entry and `scripts/check_python.py` both removed)
|
|
74
|
+
|
|
75
|
+
`npm run typecheck` is frontend-only (`typecheck:frontend`). The VS Code
|
|
76
|
+
extension is built by `test:vscode-extension` in CI and by `build_vsix.mjs`
|
|
77
|
+
at release.
|
|
78
|
+
|
|
79
|
+
## Coverage floor
|
|
80
|
+
|
|
81
|
+
Python: `[tool.coverage.report] fail_under = 90` (line coverage). Branch
|
|
82
|
+
measurement is off (`branch` is not set under `[tool.coverage.run]`). The
|
|
83
|
+
coverage step runs only on 3.14 + ubuntu-latest.
|
|
84
|
+
|
|
85
|
+
Frontend: `vitest.config.ts` still pins 100% thresholds on all four metrics;
|
|
86
|
+
that is unchanged and still runs on every CI test leg.
|
|
21
87
|
|
|
22
88
|
## Supply-chain hardening: pinned actions
|
|
23
89
|
|
|
@@ -36,30 +102,22 @@ from the authoritative upstream refs via `git ls-remote --tags` on 2026-07-21.
|
|
|
36
102
|
| actions/upload-artifact | v4.6.2 | `ea165f8d65b6e75b540449e92b4886f43607fa02` |
|
|
37
103
|
|
|
38
104
|
Pinning coverage: **100% of current `uses:` entries** across `ci.yml`,
|
|
39
|
-
`release.yml`, `visual.yml`, `dependency-audit.yml`, and
|
|
40
|
-
`postgres-integration.yml`.
|
|
41
|
-
|
|
105
|
+
`release.yml`, `visual.yml`, `e2e-sidecar.yml`, `dependency-audit.yml`, and
|
|
106
|
+
`postgres-integration.yml`. First-party `actions/*` plus pinned
|
|
107
|
+
`Swatinem/rust-cache` and `dtolnay/rust-toolchain` on the Rust/integration
|
|
108
|
+
legs. If a third-party action is added later, resolve and pin its SHA the same
|
|
109
|
+
way before merge.
|
|
42
110
|
|
|
43
|
-
## Dependency-audit gate posture
|
|
111
|
+
## Dependency-audit gate posture
|
|
44
112
|
|
|
45
|
-
The audit workflow is
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
`continue-on-error` keyed on the event name, so a newly-disclosed CVE in a
|
|
50
|
-
transitive dependency never reddens an unrelated PR. Findings still appear in
|
|
51
|
-
the job summary and uploaded report artifacts.
|
|
52
|
-
- `schedule` (weekly) / `workflow_dispatch`: the same steps run **strict** —
|
|
53
|
-
`pip-audit --strict` fails on any known vuln; `npm audit --audit-level=high`
|
|
54
|
-
fails on high/critical. This is the loud channel for triage.
|
|
113
|
+
The audit workflow is **schedule + dispatch only** (not on push/PR). Both
|
|
114
|
+
`pip-audit --strict` and `npm audit --audit-level=high` fail the job on
|
|
115
|
+
findings. This is the loud channel for triage; a newly-disclosed CVE cannot
|
|
116
|
+
redden an unrelated change.
|
|
55
117
|
|
|
56
118
|
CycloneDX SBOMs (`sbom-python.json`, `sbom-npm.json`) are produced every run and
|
|
57
119
|
uploaded as artifacts. Regenerate locally with `scripts/generate_sbom.py`.
|
|
58
120
|
|
|
59
|
-
**To promote to a required blocking PR check:** remove the `continue-on-error`
|
|
60
|
-
expressions in `dependency-audit.yml` and add `python-audit` / `npm-audit` to
|
|
61
|
-
the required-checks list below.
|
|
62
|
-
|
|
63
121
|
## Postgres integration gate
|
|
64
122
|
|
|
65
123
|
`postgres-integration.yml` runs the migration-integrity suite
|
|
@@ -70,31 +128,58 @@ the workflow sets that variable, and the test itself starts and tears down a
|
|
|
70
128
|
GitHub-hosted `ubuntu-latest`). It is deliberately kept off the PR path (slow,
|
|
71
129
|
image pull, needs Docker) and runs weekly + on demand.
|
|
72
130
|
|
|
131
|
+
## Visual smoke and sidecar E2E
|
|
132
|
+
|
|
133
|
+
This repository typically commits straight to `main`.
|
|
134
|
+
|
|
135
|
+
- `visual.yml` runs on push to `main`, the nightly cron, and dispatch. It does
|
|
136
|
+
**not** run on pull requests.
|
|
137
|
+
- `e2e-sidecar.yml` is nightly + dispatch only (no push, no PR).
|
|
138
|
+
|
|
73
139
|
## Recommended branch protection for `main`
|
|
74
140
|
|
|
75
|
-
Required status checks (blocking):
|
|
141
|
+
Required status checks (blocking). Names match the job `name:` fields:
|
|
142
|
+
|
|
143
|
+
- `Test (Python 3.11 on ubuntu-latest)`
|
|
144
|
+
- `Test (Python 3.12 on ubuntu-latest)`
|
|
145
|
+
- `Test (Python 3.14 on ubuntu-latest)`
|
|
146
|
+
- `Test (Python 3.11 on macos-latest)`
|
|
147
|
+
- `Integration smoke test`
|
|
148
|
+
- `Build package`
|
|
149
|
+
- `Rust workspace`
|
|
76
150
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
- `CI / Integration smoke test`
|
|
80
|
-
- `CI / Build package`
|
|
81
|
-
- `Visual Smoke / Playwright visual smoke`
|
|
151
|
+
`Playwright visual smoke` is **not** a PR-blocking check: `visual.yml` no
|
|
152
|
+
longer has a `pull_request` trigger. It still runs on every push to `main`.
|
|
82
153
|
|
|
83
|
-
Advisory / non-blocking
|
|
154
|
+
Advisory / non-blocking (schedule + dispatch only):
|
|
84
155
|
|
|
85
|
-
- `
|
|
86
|
-
- `
|
|
156
|
+
- `Python dependency audit (pip-audit)`
|
|
157
|
+
- `npm dependency audit`
|
|
87
158
|
|
|
88
|
-
Additional recommended settings
|
|
89
|
-
be up to date, require linear history, and dismiss
|
|
90
|
-
commits.
|
|
159
|
+
Additional recommended settings if pull requests are used: require PRs before
|
|
160
|
+
merge, require branches to be up to date, require linear history, and dismiss
|
|
161
|
+
stale approvals on new commits.
|
|
91
162
|
|
|
92
163
|
## Release gate (publication safety)
|
|
93
164
|
|
|
94
|
-
`release.yml` builds and validates artifacts only — it never publishes.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
165
|
+
`release.yml` builds and validates artifacts only — it never publishes. A tag
|
|
166
|
+
is only pushed on a commit that already passed CI, so the workflow does **not**
|
|
167
|
+
re-run `npm run lint`, `npm run typecheck`, `docs:check-links`, frontend tests,
|
|
168
|
+
or `pytest tests/unit/`.
|
|
169
|
+
|
|
170
|
+
It still runs:
|
|
171
|
+
|
|
172
|
+
- checkout / setup / installs
|
|
173
|
+
- `npm run docs:check-current` (release-specific current-version docs gate)
|
|
174
|
+
- `npm run build:assets`
|
|
175
|
+
- `python scripts/product_readiness.py` (safety net)
|
|
176
|
+
- `python -m build`, `wheel_smoke.py`, `twine check`
|
|
177
|
+
- `npm pack`, vsce package
|
|
178
|
+
- `validate_release_artifacts.py <v> --require-vsix --require-tgz`
|
|
179
|
+
|
|
180
|
+
Package publication (PyPI / npm / VS Code Marketplace / Open VSX) is a manual
|
|
181
|
+
step (`npm run publish:*`) using **exact version filenames**, never a `dist/*`
|
|
182
|
+
glob, so pushing a tag can never publish by accident. See
|
|
98
183
|
[../RELEASE.md](../RELEASE.md) for the full procedure.
|
|
99
184
|
|
|
100
185
|
## Limitations (honest)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Community And Plugins
|
|
2
2
|
|
|
3
|
-
Current release: **11.
|
|
3
|
+
Current release: **11.9.0 — Working Order**.
|
|
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
|