Skip to content

Commit d2b4150

Browse files
committed
fix(gate): ubuntunote greens — os-agnostic e2e asserts, compat_members after build_cljw, size claim covers Linux
Smell-audited: 1: the 4 ubuntunote failures were all release-blocking gate/test defects, no runtime code touched: two e2e asserts hardcoded "Mac OS X"; compat_members ran BEFORE build_cljw and probed a stale binary lacking __dump-host-classes (step moved after the build); the campaign's size growth (mac +98.7KB, linux +~0.5MB — ADR-0172 revision note) pushed Linux past the 7.1MB±10% claim — README now says ~7.5MB, inside the gate band on both platforms.
1 parent d193323 commit d2b4150

5 files changed

Lines changed: 20 additions & 7 deletions

File tree

‎.dev/decisions/0172_binary_size_budget_and_ledger.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,17 @@ dispositions grounded, platform binding declared, peer number measured).
406406

407407
## Revision history
408408

409+
- **2026-07-17 (ADR-0174 feature growth, conscious)**: the host-class
410+
identity & member-surface campaign grew the binary macOS
411+
6,974,584 → 7,073,240 B (+98.7 KB — Thread lifecycle worker + stdio
412+
streams + Duration ISO parser + member tables) and Linux x86_64
413+
≈ 7.5 → 8.01 MB (+~0.5 MB; Linux codegen amplifies the same additions).
414+
Legitimate F-013/F-014 growth, within the 8.8 MB ceiling on both.
415+
README's claim moved 7.1 → "about 7.5 MB" so the ±10% `size_claims`
416+
gate covers BOTH platforms (the Linux gate run compares the same
417+
README number against its own binary — the 2026-07-17 ubuntunote
418+
failure class). Linux at 8.01 MB is ~91% of ceiling — the next
419+
size-relevant feature should re-measure Linux first.
409420
- **2026-07-16 (L2 complete + governance hardening)**: ADR-0173 C5′-b landed
410421
compressed `.clj` sources (7,384,984 → **7,073,080 B**; the ~450 KB
411422
startup gpa copy of raw text is also gone — `rt.source_resolver`

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ still use what other languages have already built.
3333

3434
## Features
3535

36-
- **Small and quick to start** — one static binary of about 7.1 MB with the
36+
- **Small and quick to start** — one static binary of about 7.5 MB with the
3737
Wasm JIT engine included (for scale: babashka's native binary is ~71 MB;
3838
[measured comparison](docs/works/binary_size.md)), starting in ~5 ms, which
3939
suits short-lived, start-and-stop workloads (CLI tools, serverless, scripts).

‎test/e2e/phase14_host_class_identity.sh‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ assert_eq 'date_gettime' "$(run '(.getTime (java.util.Date. 42))')" '42'
7171
assert_eq 'instant_millis' "$(run '(.toEpochMilli (java.time.Instant/ofEpochMilli 7))')" '7'
7272

7373
# --- statics still dispatch (registry keys flipped with the fqcns) ---
74-
assert_eq 'system_getprop' "$(run '(System/getProperty "os.name")' )" '"Mac OS X"'
74+
assert_eq 'system_getprop' "$(run '(string? (System/getProperty "os.name"))' )" 'true'
7575
assert_eq 'thread_static' "$(run '(pos? (System/currentTimeMillis))')" 'true'
7676

7777
# --- Var shadowing still wins over class resolution ---

‎test/e2e/phase14_system_members.sh‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ EOF
2828
}
2929

3030
# --- getProperties: map-shaped, carries the static set + overlay ---
31-
assert_eq 'getprops_osname' "$(run '(println (get (System/getProperties) "os.name"))')" 'Mac OS X'
31+
assert_eq 'getprops_osname' "$(run '(println (= (get (System/getProperties) "os.name") (System/getProperty "os.name")))')" 'true'
3232
assert_eq 'getprops_static' "$(run '(println (get (System/getProperties) "file.separator"))')" '/'
3333
assert_eq 'getprops_overlay' "$(run '(System/setProperty "cljw.test.k" "v1")
3434
(println (get (System/getProperties) "cljw.test.k"))')" 'v1'

‎test/run_all.sh‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -345,10 +345,6 @@ run_step "debt_id_refs" "bash scripts/check_debt_id_refs.sh --gate"
345345
# cannot drift or accept-without-reason. Rule: accepted_divergences.md.
346346
run_step "accepted_divergences" "bash scripts/check_accepted_divergences.sh --gate"
347347

348-
# Host-class member truth (ADR-0174 D9): compat_tiers.yaml per-class member
349-
# lists must match the registered descriptors (both directions) — the gate
350-
# that keeps the one-time refresh from re-rotting. Rule: F-013 clause 3.
351-
run_step "compat_members" "bash scripts/check_compat_members.sh"
352348

353349
# Formatting gate — mirrors CI's ci_gate.sh step (1/2) so a non-canonical
354350
# file fails LOCALLY at smoke time, not 15 minutes later in CI (2026-07-02:
@@ -402,6 +398,12 @@ run_step "size_claims" "bash scripts/binary_size_report.sh --check zig-
402398
run_step "lazy_ns_replay" "bash scripts/check_lazy_ns_replay.sh"
403399
run_step "corpus_regression" "bash scripts/check_corpus_regression.sh"
404400

401+
# Host-class member truth (ADR-0174 D9): compat_tiers.yaml per-class member
402+
# lists must match the registered descriptors (both directions). Runs AFTER
403+
# build_cljw so the dump probes the FRESH binary — on a stale checkout the
404+
# pre-build zig-out binary lacks __dump-host-classes (the ubuntunote miss).
405+
run_step "compat_members" "bash scripts/check_compat_members.sh"
406+
405407
run_step "e2e_phase2_exit" "bash test/e2e/phase2_exit.sh"
406408
run_step "e2e_phase3_cli" "bash test/e2e/phase3_cli.sh"
407409
run_step "e2e_phase3_exit" "bash test/e2e/phase3_exit.sh"

0 commit comments

Comments
 (0)