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.
Files changed (174) hide show
  1. package/README.md +100 -76
  2. package/docs/BENCHMARKS.md +9 -2
  3. package/docs/CHANGELOG.md +249 -0
  4. package/docs/CI_AND_RELEASE_GATES.md +126 -41
  5. package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
  6. package/docs/DEVELOPMENT.md +271 -103
  7. package/docs/ENTERPRISE.md +1 -1
  8. package/docs/LEGACY_COMPATIBILITY.md +10 -6
  9. package/docs/MULTI_AGENT_RUNTIME.md +4 -4
  10. package/docs/ONBOARDING.md +16 -4
  11. package/docs/OPERATIONS.md +14 -1
  12. package/docs/PERMISSION_MODE.md +14 -9
  13. package/docs/REALTIME_COLLABORATION.md +1 -1
  14. package/docs/ROADMAP.md +113 -0
  15. package/docs/TRUST_MODEL.md +28 -7
  16. package/docs/USABILITY_AUDIT.md +5 -0
  17. package/docs/WHY_LATTICE.md +13 -5
  18. package/docs/WORKFLOW_DESIGNER.md +2 -2
  19. package/docs/kg-schema.md +57 -7
  20. package/docs/mcp-tools.md +93 -82
  21. package/docs/security-model.md +6 -3
  22. package/lattice_brain/__init__.py +1 -1
  23. package/lattice_brain/graph/_kg_common/__init__.py +1 -54
  24. package/lattice_brain/graph/_kg_common/extraction.py +459 -105
  25. package/lattice_brain/graph/_kg_common/normalize.py +305 -0
  26. package/lattice_brain/graph/_kg_common/patterns.py +275 -0
  27. package/lattice_brain/graph/_kg_common/relations.py +12 -3
  28. package/lattice_brain/graph/_kg_common/sections.py +107 -0
  29. package/lattice_brain/graph/_kg_common/text.py +14 -450
  30. package/lattice_brain/graph/_kg_constants.py +7 -0
  31. package/lattice_brain/ingestion/__init__.py +6 -3
  32. package/lattice_brain/multimodal/__init__.py +9 -3
  33. package/latticeai/__init__.py +1 -1
  34. package/latticeai/api/agent_worker_seam.py +44 -1
  35. package/latticeai/api/models.py +18 -110
  36. package/latticeai/api/search.py +7 -30
  37. package/latticeai/api/worker_compute.py +127 -106
  38. package/latticeai/api/worker_seams.py +17 -2
  39. package/latticeai/core/embedding_providers/__init__.py +16 -0
  40. package/latticeai/core/embedding_providers/autodetect.py +302 -0
  41. package/latticeai/core/embedding_providers/base.py +25 -0
  42. package/latticeai/core/embedding_providers/profiles.py +44 -0
  43. package/latticeai/core/embedding_providers/text.py +74 -8
  44. package/latticeai/core/http_origin.py +3 -3
  45. package/latticeai/core/messages.py +0 -5
  46. package/latticeai/core/policy.py +1 -6
  47. package/latticeai/core/quiet.py +1 -20
  48. package/latticeai/core/security.py +29 -83
  49. package/latticeai/core/sessions.py +95 -4
  50. package/latticeai/core/users.py +0 -38
  51. package/latticeai/core/vector_index/__init__.py +61 -0
  52. package/latticeai/core/vector_index/hnsw.py +383 -0
  53. package/latticeai/core/vector_index/sidecar.py +329 -0
  54. package/latticeai/models/router/catalog.py +2 -2
  55. package/latticeai/models/router/generation.py +176 -30
  56. package/latticeai/models/router/loading.py +150 -9
  57. package/latticeai/runtime/access_runtime.py +7 -4
  58. package/latticeai/runtime/brain_runtime.py +43 -9
  59. package/latticeai/runtime/build_phases/features.py +8 -31
  60. package/latticeai/runtime/build_phases/foundation.py +7 -16
  61. package/latticeai/runtime/build_phases/web.py +3 -3
  62. package/latticeai/runtime/build_phases/worker_profile.py +29 -27
  63. package/latticeai/runtime/runtime_context.py +0 -2
  64. package/latticeai/services/architecture_readiness.py +18 -19
  65. package/latticeai/services/process_audit.py +1 -22
  66. package/latticeai/services/product_readiness.py +39 -12
  67. package/latticeai/services/search_service.py +7 -0
  68. package/latticeai/services/voice_capture.py +8 -28
  69. package/latticeai/tools/__init__.py +12 -47
  70. package/latticeai/tools/commands.py +9 -15
  71. package/latticeai/tools/documents.py +12 -0
  72. package/latticeai/tools/knowledge.py +0 -6
  73. package/latticeai/tools/markup.py +152 -0
  74. package/package.json +4 -5
  75. package/requirements.txt +0 -1
  76. package/scripts/check_current_release_docs.mjs +1 -1
  77. package/scripts/check_openapi_drift.mjs +3 -2
  78. package/scripts/check_server_i18n.mjs +5 -4
  79. package/scripts/compose_openapi.py +4 -1
  80. package/scripts/export_openapi.py +5 -4
  81. package/scripts/gen_worker_allowlist_fixture.py +2 -2
  82. package/scripts/openapi_route_families.json +19 -74
  83. package/scripts/publish_release.mjs +157 -0
  84. package/scripts/release_screen_claims.json +144 -28
  85. package/src-tauri/Cargo.lock +45 -10
  86. package/src-tauri/Cargo.toml +1 -1
  87. package/src-tauri/tauri.conf.json +1 -1
  88. package/static/app/asset-manifest.json +47 -41
  89. package/static/app/assets/Act-Cf1L2709.js +2 -0
  90. package/static/app/assets/AdminConsole-DPAbLTYV.js +1 -0
  91. package/static/app/assets/Brain-DqamGrj-.js +2 -0
  92. package/static/app/assets/BrainHome-MHe2_RYs.js +2 -0
  93. package/static/app/assets/BrainSignals-CQPPfyyH.js +1 -0
  94. package/static/app/assets/Capture-DGdIH_Zc.js +1 -0
  95. package/static/app/assets/Chronicle-C-UlCJoJ.js +1 -0
  96. package/static/app/assets/CommandPalette-WNT4EqUX.js +1 -0
  97. package/static/app/assets/DigitalBrainExplorer-CEBH5Cwc.js +321 -0
  98. package/static/app/assets/Library-C6xd1dlf.js +1 -0
  99. package/static/app/assets/LivingBrain-BEk-0ohw.js +1 -0
  100. package/static/app/assets/ProductFlow-CZLm5iXh.js +1 -0
  101. package/static/app/assets/QueryClientProvider-B3OjqSyJ.js +1 -0
  102. package/static/app/assets/{ReviewCard-HXRle3qq.js → ReviewCard-CEHG6evf.js} +2 -2
  103. package/static/app/assets/RunsListPanel-CLtEJSRW.js +1 -0
  104. package/static/app/assets/System-CAxwBUXw.js +1 -0
  105. package/static/app/assets/WorkflowGraph-Dj10RuGE.js +1 -0
  106. package/static/app/assets/WorkflowsPanel-Kyeh_LIT.js +2 -0
  107. package/static/app/assets/actHelpers-CtSmK9Dw.js +1 -0
  108. package/static/app/assets/arrow-left-CRl5EO4D.js +1 -0
  109. package/static/app/assets/{bot-Cn8bWRuq.js → bot-DhUGRel2.js} +1 -1
  110. package/static/app/assets/brain-CLkhHsHF.js +1 -0
  111. package/static/app/assets/button-CmaEqG1T.js +1 -0
  112. package/static/app/assets/circle-check-CFgejkOS.js +1 -0
  113. package/static/app/assets/{circle-pause-CmzC_apg.js → circle-pause-l96izbxj.js} +1 -1
  114. package/static/app/assets/{circle-play-D8mW2aQ7.js → circle-play-CrZa25_q.js} +1 -1
  115. package/static/app/assets/{cpu-DZcdd0PZ.js → cpu-BaXudqwl.js} +1 -1
  116. package/static/app/assets/{download-bv1KEPGQ.js → download-hCVFPiyc.js} +1 -1
  117. package/static/app/assets/{folder-open-d-Pip5gr.js → folder-open-CHL82Yp7.js} +1 -1
  118. package/static/app/assets/{hard-drive-D20iavUb.js → hard-drive-DDzET7lk.js} +1 -1
  119. package/static/app/assets/index-CB93CZWW.css +2 -0
  120. package/static/app/assets/index-D2H-wSl6.js +13 -0
  121. package/static/app/assets/input-Df1CAY_I.js +1 -0
  122. package/static/app/assets/jsx-runtime-bzQ4Vb5N.js +1 -0
  123. package/static/app/assets/{link-2-BPJOFlAy.js → link-2-xNnTIX1_.js} +1 -1
  124. package/static/app/assets/{permissionCopy-ChdJd493.js → permissionCopy-D3aWHco-.js} +1 -1
  125. package/static/app/assets/primitives-BioD2slS.js +1 -0
  126. package/static/app/assets/search-BzBw8YcW.js +1 -0
  127. package/static/app/assets/{share-2-YNX_NtMU.js → share-2-FkzGf8Df.js} +1 -1
  128. package/static/app/assets/{shield-alert-DuQ3zrVL.js → shield-alert-B3dwzik4.js} +1 -1
  129. package/static/app/assets/sourceMeta-DQSY_tah.js +1 -0
  130. package/static/app/assets/textarea-P8o6pvOP.js +1 -0
  131. package/static/app/assets/useFocusTrap-hswOIkXE.js +1 -0
  132. package/static/app/assets/useMutation-OJLrYSRA.js +1 -0
  133. package/static/app/assets/workspace-BCuk3Ku9.js +1 -0
  134. package/static/app/index.html +4 -4
  135. package/static/sw.js +1 -1
  136. package/lattice_brain/ingestion/pipeline.py +0 -108
  137. package/latticeai/api/local_files.py +0 -44
  138. package/latticeai/api/tools.py +0 -126
  139. package/latticeai/api/voice_capture.py +0 -32
  140. package/latticeai/core/agent_permission.py +0 -85
  141. package/scripts/agent_eval.py +0 -34
  142. package/scripts/brain_quality_eval.py +0 -37
  143. package/scripts/check_legacy_debt.mjs +0 -91
  144. package/scripts/check_python.py +0 -100
  145. package/scripts/chunking_parity_corpus.py +0 -449
  146. package/scripts/generate_agent_parity_fixtures.py +0 -771
  147. package/scripts/generate_chunking_parity_fixtures.py +0 -259
  148. package/static/app/assets/Act-BPcVAbOL.js +0 -1
  149. package/static/app/assets/AdminConsole-Bw1ATQL0.js +0 -1
  150. package/static/app/assets/Brain-CT92Kos0.js +0 -321
  151. package/static/app/assets/BrainHome-CFBkt1K_.js +0 -2
  152. package/static/app/assets/BrainSignals-ReLWF2H8.js +0 -1
  153. package/static/app/assets/Capture-BsTokYkk.js +0 -1
  154. package/static/app/assets/Chronicle-B6f0T9id.js +0 -1
  155. package/static/app/assets/CommandPalette-CuvjTv1u.js +0 -1
  156. package/static/app/assets/Library-BGJbG9Hd.js +0 -1
  157. package/static/app/assets/LivingBrain-DGYK_Jsa.js +0 -1
  158. package/static/app/assets/ProductFlow-DXBC6brE.js +0 -1
  159. package/static/app/assets/System-CMHSO9qM.js +0 -1
  160. package/static/app/assets/arrow-left-BfmkskWx.js +0 -1
  161. package/static/app/assets/brain-CQJberbE.js +0 -1
  162. package/static/app/assets/button-Ct9f2_oT.js +0 -1
  163. package/static/app/assets/circle-check-DruOxB-4.js +0 -1
  164. package/static/app/assets/index-D9x-kSNy.css +0 -2
  165. package/static/app/assets/index-Do83hDzJ.js +0 -10
  166. package/static/app/assets/input-BLXVNmj1.js +0 -1
  167. package/static/app/assets/primitives-Cv5tbZBY.js +0 -1
  168. package/static/app/assets/search-CT9aho2j.js +0 -1
  169. package/static/app/assets/textarea-DqwLnli4.js +0 -1
  170. package/static/app/assets/useFocusTrap-ZVI98jaW.js +0 -1
  171. package/static/app/assets/useMutation-CVC4qv_D.js +0 -1
  172. package/static/app/assets/useQuery-C7BeG4HU.js +0 -1
  173. package/static/app/assets/utils-CiFtIdZq.js +0 -4
  174. package/static/app/assets/workspace-DQz9vIId.js +0 -1
@@ -1,6 +1,6 @@
1
1
  # CI & Release Gates
2
2
 
3
- > Status: reference 2026-07-21
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, brain/agent eval gates, build + wheel smoke |
15
- | Release | `.github/workflows/release.yml` | tags `v*` / `[0-9]*` | Build & validate all artifacts (no publish) |
16
- | Visual Smoke | `.github/workflows/visual.yml` | push/PR, nightly cron, dispatch | Playwright visual smoke |
17
- | **Dependency Audit** | `.github/workflows/dependency-audit.yml` | push/PR, weekly cron, dispatch | pip-audit + npm audit + CycloneDX SBOMs |
18
- | **Postgres Integration** | `.github/workflows/postgres-integration.yml` | weekly cron, dispatch | Live SQLite→Postgres/pgvector migration test |
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
- The last two were added for the P2 deployment-trust / supply-chain workstream.
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`. All are first-party `actions/*`. If a third-party
41
- action is added later, resolve and pin its SHA the same way before merge.
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 (conservative)
111
+ ## Dependency-audit gate posture
44
112
 
45
- The audit workflow is intentionally **non-blocking on day-to-day PRs** and
46
- **strict on the scheduled/dispatch run**:
47
-
48
- - `push` / `pull_request`: `pip-audit` and `npm audit` run with
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
- - `CI / Test (Python 3.11)`
78
- - `CI / Test (Python 3.12)`
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 today (promote when the team is ready):
154
+ Advisory / non-blocking (schedule + dispatch only):
84
155
 
85
- - `Dependency Audit / Python dependency audit (pip-audit)`
86
- - `Dependency Audit / npm dependency audit`
156
+ - `Python dependency audit (pip-audit)`
157
+ - `npm dependency audit`
87
158
 
88
- Additional recommended settings: require PRs before merge, require branches to
89
- be up to date, require linear history, and dismiss stale approvals on new
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. Package
95
- publication (PyPI / npm / VS Code Marketplace / Open VSX) is a manual step
96
- (`npm run publish:*`) using **exact version filenames**, never a `dist/*` glob,
97
- so pushing a tag can never publish by accident. See
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.7.0 — Clean Sweep**.
3
+ Current release: **12.0.0 — Open House**.
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