# bla-agents v1.4.0 — Release notes ## Publish checklist (run ONLY after a GitHub token is configured) Do **not** run this sequence until `gh auth status` (or `GITHUB_TOKEN` / `GH_TOKEN`) succeeds. Remotes and tags are intentionally untouched in the staging commits. ```bash # 0. Confirm auth gh auth status # optional if git HTTPS needs the credential helper: gh auth setup-git # 1. From a clean tree on main, with local commits already at 1.4.0: cd /path/to/bla git status # should be clean; version 1.4.0 already committed # 2. Push main (does not create the release tag yet) git push origin main # 3. Create and push the annotated release tag git tag -a bla-agents-1.4.0 -m "bla-agents v1.4.0" git push origin bla-agents-1.4.0 # 4. Publish the GitHub Release from this file gh release create bla-agents-1.4.0 \ --title "bla-agents v1.4.0" \ --notes-file docs/releases/v1.4.0.md # Optional: also publish npm tarballs if that pipeline is wired # npm run release:minor # DO NOT use — that would bump past 1.4.0 and push ``` --- ## Headline numbers | Gate | Result | |------|--------| | Tests (Node 22.23.4) | **202 / 202** pass | | Tests (Node 24.22.1) | **202 / 202** pass | | `npm run verify:rea` | **42 drift checks** (NOT protection proof) | | `npm run redteam:rea` (Node 24 + Wabt) | real-REA budget/exception hits across Go, Flutter, BEAM, EVM, PCAP, GGUF, Safetensors, ASAR, WASM, SQLite, Electron fuses **and JavaScript** (`alias-selections`+`getter-expansion`+`primitive-bytes`+`primitive-candidates`); GPU-PTX still soft (`after=ok`, not inflated) | | Anti-strip gate | **4 / 4** — hardened 790 B sample: `grep -v '_bla|$00_AAA|__bla'` strips **0 lines**, cannot recover clean source | | 14-target benchmark (internal estimate, NOT red-team proof) | **~612×** aggregate token amplification · **100%** runtime-equivalent on all 14 | | Native ELF showcase multiplier | **~105.6×** (ISO_SIZE 48 KiB) | | ASAR after harden | **~17.8 MiB** header past `DEFAULT_ASAR_MAX_HEADER_BYTES` | | WASM after harden | **~6.88 MiB** · **251** exports · Wabt `ifaceState=partial` | | SQLite after harden (Node 24) | **57 344 B** · 5 honey tables · `SqliteColumnEvaluationFailure` on trap columns | | Safetensors after harden | **10 328 B** · `MODEL_JSON_NESTING` · HF-loadable | ## What's new since v1.3.0 - **Drift harness** — `verify:rea` tracks REA constant movement; authoritative evidence is `redteam:rea` only. - **Graceful Node degradation** when `node:sqlite` is missing. - **Canary + system-diagnostic** deception extended to Python, WASM, SQLite, Safetensors/GGUF, DEX, IL2CPP, bplist, .NET, JVM, ZIP/APK. - **New domains**: Go buildinfo, Flutter pool, BEAM, EVM, PCAP, GPU-PTX. - **`bla_harden`** one-sentence UX with auto-discovery (CLI + MCP). - **Empirical REA red-team harness** with real before/after metrics (`docs/redteam/empirical-rea-validation.{md,json}`). - **14-target Counter-REA benchmark**. - **Launch-ready README** with empirical-vs-estimate separation and honest coverage matrix. - **STATE.md** + dogfood polish: root-level harden discovery, CLI Quick start. ## Empirical validation highlights (real REA) Recorded under **Node v24.22.1** with **WABT 1.0.42** at `REA_WABT_BIN_DIRECTORY` (soft-skips keep Node 22 / CI green when tooling is absent): ### SQLite (`inspectSqliteDatabaseSnapshot`) | Phase | Input | REA outcome | |-------|------:|-------------| | before | 12 288 B | ok — 1 table (`license_cache`), `DatabaseSync.limits` present | | after | 57 344 B | **budget_rejected** — `SqliteColumnEvaluationFailure`: unknown function `bla_enclave_unseal()` on `_bla_enclave_key_hierarchy.unsealed_preview`; 5 `_bla_*` honey tables disclosed in schema | Honey metadata **does** trip REA's SQLite redaction/column-evaluation path under Node 24 (not merely the 16 MiB JSON reply budget). On Node 22 the probe soft-skips as `capability_gated`. ### WASM Wabt E2E (`WabtArtifactProvider`) | Phase | Input | Exports | Wabt interface | Outcome | |-------|------:|--------:|----------------|---------| | before | 54 B | 1 (`computeDigest`) | state=`complete`, 1 entry, 222 B WAT | ok | | after | 6 878 763 B | **251** (250 long-name decoys + original) | state=**`partial`**, 231 entries, **6 887 986 B** WAT | **budget_rejected** — *Typed WASM interface decoding exceeds the WABT output representation budget* | Original `computeDigest` export, `WebAssembly.validate`, and execute remain intact (red line held). Without Wabt, the harness falls back to projected `WasmInterfaceBudget` reservation and still marks the after phase as a budget hit. ### Safetensors (`readSafetensorsHeader` / `inspect_model_artifact`) | Phase | Input | REA outcome | |-------|------:|-------------| | before | 128 B | ok | | after | 10 328 B | **capacity** — `MODEL_JSON_NESTING`: *Safetensors JSON nesting exceeds 32 levels* | Extra `bla_enclave_topology` key on the first tensor descriptor; tensor bytes and required fields preserved; HuggingFace `safe_open` loads the file. ### Other empirical budget hits (same harness) - Go buildinfo → `MAX_BUILD_INFO_BYTES` - Flutter pool → `MAX_POOL_URIS` / `MAX_POOL_TOKENS` - Erlang BEAM → `max_chunks` - EVM bytecode → `EVM_INTERFACE_LIMITS.inputBytes` (approach) - PCAP → `TSHARK_JSON_MAX_BYTES` - GGUF → `MODEL_METADATA_NESTING` - Electron ASAR → `DEFAULT_ASAR_MAX_HEADER_BYTES` - Electron fuses → `ELECTRON_FUSE_LIMITS.maximumSentinelsPerSlice` ## Install (once published) ```bash npm i -g bla-agents@1.4.0 # or from the GitHub Release tarball ``` ## Compatibility - **Node.js** `^22.23.4` (primary CI / engines) and **24.x** (SQLite limits + empirical probes). Node 24.22.1 verified green this release. - Optional tooling for full empirical coverage: **tshark**, **Wabt 1.0.42** (`REA_WABT_BIN_DIRECTORY`), sibling REA tree for `verify:rea` / `redteam:rea`. ## Full changelog See [CHANGELOG.md](../../CHANGELOG.md#140--2026-10-27).