Skip to content

Commit d58afe5

Browse files
committed
revert(release): re-embed runtime assets into the single shipped binary
Externalizing the integration templates (DeusData#1492/DeusData#1493) and the UI bundle (DeusData#1501/DeusData#1503) was done to reduce the Microsoft `Wacatac.B!ml` surface. It did not work: across dry runs the flagged artifact count stayed at ~3 and the detections merely moved between artifacts. Dissection of run 31286803592 shows there is no structural cause to fix. The verdicts split across every axis at once — linux-amd64 (dynamic) flagged while linux-amd64-portable (static) is clean, but linux-arm64 (dynamic) clean while linux-arm64-portable (static) is flagged. The two macOS binaries have identical segment structure and split clean/flagged. Siblings from one build landed in different variant buckets (.B vs .C). Entropy is low everywhere (code_vectors.bin 4.166, grammar tables 3.464 bits/byte, against 7.5-8.0 for packed payloads), so the packed-payload hypothesis is excluded too. So the complexity bought nothing, and installation goes back to being self-contained: one binary that carries its own UI and agent integration templates, with no adjacent data file that has to resolve before `install` works. Only the UI-capable composition ships from now on, under the historical unsuffixed archive name. Removed: src/ui/asset_pack.{c,h}, asset_pack_stub.c, asset_manifest_stub.c, scripts/pack-ui-assets.mjs, src/cli/integration_assets.{c,h}, assets/cbm-integrations.json, scripts/gen-integrations-hash.sh, the --verify-runtime-assets probe (nothing adjacent left to verify), and the composition gates A6/A7 whose property is now deliberately inverted. Restored: scripts/embed-frontend.sh, src/ui/embedded_{assets.h,stub.c}, the compiled-in hook/adapter template bodies, and the embed/EMBED_OBJS build path. Kept from the reverted commits, re-applied by hand where a wholesale file restore would have dropped them: - cbm_module_path_utf8() in both self-path sites. GetModuleFileNameA renders through the ANSI code page and mangles non-ASCII install paths. - the /__cbm/ui-readiness HMAC proof, secure_random and cbm_hmac_sha256, so `daemon start --open` still waits for a genuine CBM listener. - X-Content-Type-Options: nosniff on served assets. - the MinGW noexecstack gate, -lbcrypt, and the cppcheck/zip CI fixes. Archives are now codebase-memory-mcp-<os>-<arch>[-portable] with exactly four members (binary, LICENSE, installer, THIRD_PARTY_NOTICES.md). That restores the names every static package manifest already points at — aur, chocolatey, homebrew, scoop, winget and glama were all broken by the -ui- rename. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
1 parent 10cb0e0 commit d58afe5

58 files changed

Lines changed: 1540 additions & 11420 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/_build.yml‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ jobs:
8585
# Archive layout/name live in the ONE canonical script the local
8686
# artifact-flow smoke lane also runs (venue-parity contract).
8787
- name: Archive release binary (canonical package-release.sh)
88-
run: scripts/package-release.sh ${{ matrix.goos }} ${{ matrix.goarch }} --variant ui
88+
run: scripts/package-release.sh ${{ matrix.goos }} ${{ matrix.goarch }}
8989

9090
- name: Attest release binary provenance
9191
if: ${{ inputs.attest }}
9292
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
9393
with:
94-
subject-path: codebase-memory-mcp-ui-${{ matrix.goos }}-${{ matrix.goarch }}.tar.gz
94+
subject-path: codebase-memory-mcp-${{ matrix.goos }}-${{ matrix.goarch }}.tar.gz
9595

9696
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
9797
with:
@@ -133,13 +133,13 @@ jobs:
133133
# artifact-flow smoke lane also runs (venue-parity contract).
134134
- name: Archive release binary (canonical package-release.sh)
135135
shell: msys2 {0}
136-
run: scripts/package-release.sh windows amd64 --variant ui CC=clang CXX=clang++
136+
run: scripts/package-release.sh windows amd64 CC=clang CXX=clang++
137137

138138
- name: Attest release binary provenance
139139
if: ${{ inputs.attest }}
140140
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
141141
with:
142-
subject-path: codebase-memory-mcp-ui-windows-amd64.zip
142+
subject-path: codebase-memory-mcp-windows-amd64.zip
143143

144144
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
145145
with:
@@ -183,13 +183,13 @@ jobs:
183183
184184
- name: Archive release binary (canonical package-release.sh)
185185
shell: msys2 {0}
186-
run: scripts/package-release.sh windows arm64 --variant ui CC=clang CXX=clang++
186+
run: scripts/package-release.sh windows arm64 CC=clang CXX=clang++
187187

188188
- name: Attest release binary provenance
189189
if: ${{ inputs.attest }}
190190
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
191191
with:
192-
subject-path: codebase-memory-mcp-ui-windows-arm64.zip
192+
subject-path: codebase-memory-mcp-windows-arm64.zip
193193

194194
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
195195
with:
@@ -235,13 +235,13 @@ jobs:
235235
ldd build/c/codebase-memory-mcp 2>&1 | grep -q "not a dynamic executable" || ldd build/c/codebase-memory-mcp 2>&1 | grep -q "statically linked"
236236
237237
- name: Archive release binary (canonical package-release.sh)
238-
run: scripts/package-release.sh linux ${{ matrix.arch }}-portable --variant ui
238+
run: scripts/package-release.sh linux ${{ matrix.arch }}-portable
239239

240240
- name: Attest release binary provenance
241241
if: ${{ inputs.attest }}
242242
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
243243
with:
244-
subject-path: codebase-memory-mcp-ui-linux-${{ matrix.arch }}-portable.tar.gz
244+
subject-path: codebase-memory-mcp-linux-${{ matrix.arch }}-portable.tar.gz
245245

246246
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
247247
with:

‎Makefile.cbm‎

Lines changed: 23 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -358,19 +358,17 @@ GIT_SRCS = src/git/git_context.c
358358

359359
# CLI module (new)
360360
CLI_SRCS = src/cli/cli.c src/cli/progress_sink.c src/cli/hook_augment.c src/cli/client_adapter.c \
361-
src/cli/agent_clients.c src/cli/agent_profiles.c src/cli/integration_assets.c \
361+
src/cli/agent_clients.c src/cli/agent_profiles.c \
362362
src/cli/config_json_like.c src/cli/config_toml_edit.c src/cli/config_yaml_edit.c \
363363
src/cli/config_text_edit.c src/cli/activation_transaction.c
364364

365-
# UI module (graph visualization). Production-standard builds deliberately link
366-
# only the no-I/O pack stub. Test binaries substitute the real parser plus the
367-
# empty manifest so parser/install behavior remains covered without a UI pack.
365+
# UI module (graph visualization)
368366
UI_SRCS = \
369367
src/ui/config.c \
370368
src/ui/http_server.c \
371369
src/ui/layout3d.c \
372370
src/ui/httpd.c \
373-
src/ui/asset_pack_stub.c
371+
src/ui/embedded_stub.c
374372

375373
# mimalloc (vendored, global allocator override)
376374
#
@@ -458,7 +456,6 @@ YYJSON_SRC = vendored/yyjson/yyjson.c
458456

459457
# All production sources
460458
PROD_SRCS = $(FOUNDATION_SRCS) $(STORE_SRCS) $(CYPHER_SRCS) $(MCP_SRCS) $(DAEMON_SRCS) $(DISCOVER_SRCS) $(GRAPH_BUFFER_SRCS) $(PIPELINE_SRCS) $(SIMHASH_SRCS) $(SEMANTIC_SRCS) $(TRACES_SRCS) $(WATCHER_SRCS) $(GIT_SRCS) $(CLI_SRCS) $(UI_SRCS) $(YYJSON_SRC)
461-
TEST_PROD_SRCS = $(subst src/ui/asset_pack_stub.c,src/ui/asset_pack.c src/ui/asset_manifest_stub.c,$(PROD_SRCS))
462459
EXISTING_C_SRCS = $(EXTRACTION_SRCS) $(LSP_SRCS) $(TS_RUNTIME_SRC) \
463460
$(GRAMMAR_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC)
464461

@@ -476,17 +473,6 @@ EXISTING_C_SRCS = $(EXTRACTION_SRCS) $(LSP_SRCS) $(TS_RUNTIME_SRC) \
476473
PROJECT_HDRS = $(wildcard src/*.h src/*/*.h $(CBM_DIR)/*.h $(CBM_DIR)/lsp/*.h tests/*.h \
477474
tests/repro/*.h)
478475

479-
# ── Integration-asset integrity constant (generated, never hand-edited) ──
480-
# The binary embeds exactly ONE fact about the shipped integration templates:
481-
# the SHA-256 of assets/cbm-integrations.json, generated at build time (rule
482-
# below the BUILD_DIR definition; target lines expand immediately). Appended
483-
# to PROJECT_HDRS so every single-invocation target (test-runner,
484-
# test-repro-runner, test-runner-tsan, codebase-memory-mcp) rebuilds when the
485-
# asset changes — a stale constant would make every install fail verification.
486-
INTEGRATIONS_ASSET = assets/cbm-integrations.json
487-
INTEGRATIONS_HASH_HDR = $(BUILD_DIR)/generated/cbm_integrations_hash.h
488-
PROJECT_HDRS += $(INTEGRATIONS_HASH_HDR)
489-
490476
# ── Test sources ─────────────────────────────────────────────────
491477

492478
TEST_FOUNDATION_SRCS = \
@@ -702,11 +688,6 @@ ALL_TEST_SRCS =$(TEST_FOUNDATION_SRCS) $(TEST_EXTRACTION_SRCS) $(TEST_STORE_SRCS
702688

703689
BUILD_DIR = build/c
704690

705-
# Integration-asset hash header (variables defined next to PROJECT_HDRS; the
706-
# rule lives here because target lines expand $(BUILD_DIR) immediately).
707-
$(INTEGRATIONS_HASH_HDR): $(INTEGRATIONS_ASSET) scripts/gen-integrations-hash.sh | $(BUILD_DIR)
708-
sh scripts/gen-integrations-hash.sh $(INTEGRATIONS_ASSET) $@
709-
710691
# ── Object file compilation (grammars need relaxed warnings) ─────
711692

712693
# Grammar + tree-sitter runtime: compiled without -Werror (upstream code has warnings)
@@ -728,7 +709,7 @@ PP_OBJ_TSAN = $(BUILD_DIR)/tsan_preprocessor.o
728709

729710
# ── Targets ──────────────────────────────────────────────────────
730711

731-
.PHONY: test test-par test-repro test-foundation test-tsan test-daemon-smoke cbm cbm-with-ui frontend ui-pack clean-c lint lint-tidy lint-cppcheck lint-format security
712+
.PHONY: test test-par test-repro test-foundation test-tsan test-daemon-smoke cbm cbm-with-ui frontend embed clean-c lint lint-tidy lint-cppcheck lint-format security
732713

733714
$(BUILD_DIR):
734715
mkdir -p $(BUILD_DIR)
@@ -871,9 +852,9 @@ $(UNIXCODER_OBJ): $(UNIXCODER_BLOB_SRC) vendored/nomic/code_vectors.bin | $(BUIL
871852
OBJS_VENDORED_TEST = $(MIMALLOC_OBJ_TEST) $(SQLITE3_OBJ_TEST) $(TRE_OBJ_TEST) $(GRAMMAR_OBJS_TEST) $(TS_RUNTIME_OBJ_TEST) $(LSP_OBJ_TEST) $(PP_OBJ_TEST) $(LZ4_OBJ_TEST) $(ZSTD_OBJ_TEST) $(UNIXCODER_OBJ)
872853
OBJS_VENDORED_TSAN = $(MIMALLOC_OBJ_TSAN) $(SQLITE3_OBJ_TSAN) $(TRE_OBJ_TSAN) $(GRAMMAR_OBJS_TSAN) $(TS_RUNTIME_OBJ_TSAN) $(LSP_OBJ_TSAN) $(PP_OBJ_TSAN) $(LZ4_OBJ_TSAN) $(ZSTD_OBJ_TSAN) $(UNIXCODER_OBJ)
873854

874-
$(BUILD_DIR)/test-runner: $(ALL_TEST_SRCS) $(TEST_PROD_SRCS) $(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) $(OBJS_VENDORED_TEST) $(PROJECT_HDRS) | $(BUILD_DIR)
855+
$(BUILD_DIR)/test-runner: $(ALL_TEST_SRCS) $(PROD_SRCS) $(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) $(OBJS_VENDORED_TEST) $(PROJECT_HDRS) | $(BUILD_DIR)
875856
$(CC) $(CFLAGS_TEST) -Itests -Itests/repro -o $@ \
876-
$(ALL_TEST_SRCS) $(TEST_PROD_SRCS) \
857+
$(ALL_TEST_SRCS) $(PROD_SRCS) \
877858
$(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) \
878859
$(OBJS_VENDORED_TEST) \
879860
$(LDFLAGS_TEST)
@@ -899,9 +880,9 @@ test-focused: $(BUILD_DIR)/test-runner
899880
# Mirrors test-runner's link line but uses repro_main.c (own main + counters)
900881
# and TEST_REPRO_SRCS instead of ALL_TEST_SRCS. Exits non-zero while any bug is
901882
# still reproduced (the expected state); bug-repro.yml surfaces it as a board.
902-
$(BUILD_DIR)/test-repro-runner: $(TEST_REPRO_SRCS) $(TEST_PROD_SRCS) $(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) $(OBJS_VENDORED_TEST) $(PROJECT_HDRS) | $(BUILD_DIR)
883+
$(BUILD_DIR)/test-repro-runner: $(TEST_REPRO_SRCS) $(PROD_SRCS) $(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) $(OBJS_VENDORED_TEST) $(PROJECT_HDRS) | $(BUILD_DIR)
903884
$(CC) $(CFLAGS_TEST) -Itests -o $@ \
904-
$(TEST_REPRO_SRCS) $(TEST_PROD_SRCS) \
885+
$(TEST_REPRO_SRCS) $(PROD_SRCS) \
905886
$(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) \
906887
$(OBJS_VENDORED_TEST) \
907888
$(LDFLAGS_TEST)
@@ -959,9 +940,9 @@ TSAN_OPTIONS ?= halt_on_error=1:report_thread_leaks=0
959940
# Normal ASan/native/soak paths remain uncapped. High-worker TSan diagnostics
960941
# invoke test-runner-tsan directly so release gates cannot drift accidentally.
961942

962-
$(BUILD_DIR)/test-runner-tsan: $(ALL_TEST_SRCS) $(TEST_PROD_SRCS) $(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) $(OBJS_VENDORED_TSAN) $(PROJECT_HDRS) | $(BUILD_DIR)
943+
$(BUILD_DIR)/test-runner-tsan: $(ALL_TEST_SRCS) $(PROD_SRCS) $(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) $(OBJS_VENDORED_TSAN) $(PROJECT_HDRS) | $(BUILD_DIR)
963944
$(CC) $(CFLAGS_TSAN) -Itests -Itests/repro -o $@ \
964-
$(ALL_TEST_SRCS) $(TEST_PROD_SRCS) \
945+
$(ALL_TEST_SRCS) $(PROD_SRCS) \
965946
$(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) \
966947
$(OBJS_VENDORED_TSAN) \
967948
$(LDFLAGS_TSAN)
@@ -1048,40 +1029,29 @@ $(BUILD_DIR)/codebase-memory-mcp: $(MAIN_SRC) $(PROD_SRCS) $(EXTRACTION_SRCS) $(
10481029
cbm: $(BUILD_DIR)/codebase-memory-mcp
10491030
@echo "Built: $(BUILD_DIR)/codebase-memory-mcp"
10501031

1051-
# ── Build with external UI asset pack (requires Node.js) ────────
1032+
# ── Build with embedded UI (requires Node.js) ───────────────────
10521033

1053-
# The native image contains only a generated manifest (pack basename, SHA-256
1054-
# and byte length). Frontend bytes stay in a content-addressed sidecar next to
1055-
# the binary so release scanners can inspect them independently.
1056-
UI_ASSET_MANIFEST = $(BUILD_DIR)/generated/ui_asset_manifest.c
1057-
UI_ASSET_DIST ?= graph-ui/dist
1058-
UI_ASSET_PREBUILT ?= 0
1059-
ifeq ($(UI_ASSET_PREBUILT),1)
1060-
UI_ASSET_BUILD_PREREQ :=
1061-
else
1062-
UI_ASSET_BUILD_PREREQ := frontend
1063-
endif
1064-
PROD_SRCS_WITH_ASSETS = $(subst src/ui/asset_pack_stub.c,src/ui/asset_pack.c $(UI_ASSET_MANIFEST),$(PROD_SRCS))
1034+
# Swap embedded_stub.c for the generated embedded_assets.c
1035+
UI_SRCS_WITH_ASSETS = $(subst src/ui/embedded_stub.c,src/ui/embedded_assets.c,$(UI_SRCS))
1036+
PROD_SRCS_WITH_ASSETS = $(subst src/ui/embedded_stub.c,src/ui/embedded_assets.c,$(PROD_SRCS))
1037+
1038+
# Embedded asset object files (generated by embed script)
1039+
EMBED_OBJS = $(wildcard $(BUILD_DIR)/embedded/embed_*.o)
10651040

10661041
frontend:
10671042
cd graph-ui && npm ci && npm run build
10681043

1069-
$(UI_ASSET_MANIFEST): $(UI_ASSET_BUILD_PREREQ) scripts/pack-ui-assets.mjs | $(BUILD_DIR)
1070-
node scripts/pack-ui-assets.mjs $(UI_ASSET_DIST) $(BUILD_DIR) $@
1071-
1072-
ui-pack: $(UI_ASSET_MANIFEST)
1044+
embed: frontend
1045+
scripts/embed-frontend.sh graph-ui/dist $(BUILD_DIR)/embedded
10731046

1074-
# $(INTEGRATIONS_HASH_HDR): generated header included by integration_assets.c.
1075-
# The standard target gets it via $(PROJECT_HDRS); the UI target compiles in one
1076-
# shot and must list it too, or the build fails with "cbm_integrations_hash.h
1077-
# file not found" (seen on the Windows UI build).
1078-
cbm-with-ui: ui-pack $(INTEGRATIONS_HASH_HDR) $(OBJS_VENDORED_PROD)
1047+
cbm-with-ui: embed $(OBJS_VENDORED_PROD)
10791048
$(CC) $(CFLAGS_PROD) -o $(BUILD_DIR)/codebase-memory-mcp \
10801049
$(MAIN_SRC) $(PROD_SRCS_WITH_ASSETS) \
10811050
$(EXTRACTION_SRCS) $(AC_LZ4_SRCS) $(ZSTD_SRCS) $(SQLITE_WRITER_SRC) \
10821051
$(OBJS_VENDORED_PROD) \
1052+
$(wildcard $(BUILD_DIR)/embedded/embed_*.o) \
10831053
$(LDFLAGS)
1084-
@echo "Built with UI asset pack: $(BUILD_DIR)/codebase-memory-mcp"
1054+
@echo "Built with UI: $(BUILD_DIR)/codebase-memory-mcp"
10851055

10861056
clean-c: export BUILD_DIR := $(BUILD_DIR)
10871057
clean-c:
@@ -1114,7 +1084,7 @@ lint-tidy:
11141084
@$(CLANG_TIDY) --quiet $(LINT_SRCS) -- $(CFLAGS_COMMON) $(SYSROOT_FLAG)
11151085

11161086
# cppcheck: complementary analysis (config in .cppcheck)
1117-
lint-cppcheck: $(INTEGRATIONS_HASH_HDR)
1087+
lint-cppcheck:
11181088
@echo "=== cppcheck ==="
11191089
@$(CPPCHECK) --enable=warning,style,performance,portability \
11201090
--std=c11 --language=c \

‎THIRD_PARTY.md‎

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ License summary:
6666
- **Copyright:** (c) 2025 InterSystems Corporation
6767
- **Vendored at:** `internal/cbm/vendored/grammars/objectscript_udl/`, `internal/cbm/vendored/grammars/objectscript_routine/`
6868
- **Pinned commit:** `a7ffcdf`
69-
- **Notes:** InterSystems-maintained grammar for the ObjectScript language (InterSystems IRIS / Caché). Vendor-maintained; not in nvim-treesitter or Helix registries. Each `scanner.c`'s upstream `#include "../../common/scanner.h"` is repointed to a per-directory `objectscript_common.h` copied from upstream `common/scanner.h`; two loop counters in that copy are widened from `uint8_t` to `int` as documented in `internal/cbm/vendored/grammars/MANIFEST.md`.
69+
- **Notes:** InterSystems-maintained grammar for the ObjectScript language (InterSystems IRIS / Caché). Vendor-maintained; not in nvim-treesitter or Helix registries. Each `scanner.c`'s upstream `#include "../../common/scanner.h"` is repointed to a per-directory `objectscript_common.h` (verbatim copy of upstream `common/scanner.h`).
7070

7171
## Vendored C/C++ Libraries
7272

@@ -142,17 +142,13 @@ follows:
142142
documentation and language specifications; no upstream source code was
143143
extracted or transcribed.
144144

145-
## External Graph UI asset pack
145+
## Embedded Graph UI
146146

147-
Release builds made with `--with-ui` ship the compiled `graph-ui/` frontend in
148-
a deterministic, content-addressed `cbm-ui-<sha256>.pack` beside the native
149-
executable. The executable contains only the expected pack name, size, and
150-
SHA-256; it does not contain the HTML, JavaScript, or CSS payload.
151-
152-
The pack's npm dependencies (React, three.js, @react-three/*, radix-ui,
153-
lucide-react, tailwindcss, and friends) are all under permissive licenses
154-
(MIT / ISC / Apache-2.0 / Zlib). The exact set is recorded in
147+
Release binaries built with `--with-ui` embed the compiled `graph-ui/`
148+
frontend bundle. Its npm dependencies (React, three.js, @react-three/*,
149+
radix-ui, lucide-react, tailwindcss, and friends) are all under permissive
150+
licenses (MIT / ISC / Apache-2.0 / Zlib); the exact set is recorded in
155151
`graph-ui/package.json` and `graph-ui/package-lock.json`, and the per-package
156152
license texts of the production bundle are appended to the
157-
`THIRD_PARTY_NOTICES.md` shipped inside each `-ui` release archive (generated
158-
by `scripts/gen-ui-licenses.py`).
153+
`THIRD_PARTY_NOTICES.md` shipped inside the `-ui` release archives
154+
(generated by `scripts/gen-ui-licenses.py`).

0 commit comments

Comments
 (0)