Skip to content

Tests read their own bridge.conf, not the developer's - #64

Merged
nixfred merged 1 commit into
nixfred:mainfrom
Fileri:test-isolation
Sep 10, 2026
Merged

nixfred merged 1 commit into
nixfred:mainfrom
Fileri:test-isolation

Conversation

@Fileri

@Fileri Fileri commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

What

The test preload now points XDG_CONFIG_HOME at a scratch dir, the way it already does for XDG_CACHE_HOME, so no test reads the developer's own bridge.conf. One test proves the isolation reaches the reader.

Why

contact-search.ts reads country_code= through XDG_CONFIG_HOME (falling back to ~/.config), and the preload never set it. On a machine set up outside North America (country_code=47) five tier2.test.ts cases fail: (404) 555-0123 normalizes to +474045550123. CI has no bridge.conf, so it stays green, and the failures only show up for a contributor who actually runs Blip. That is the wrong way round for a test suite.

How

  • test-setup.ts — one line: XDG_CONFIG_HOME gets a scratch dir beside the cache one; the comment says why.
  • tier2.test.ts — one test in the country-code block: the default country code is 1 in the scratch dir, and a bridge.conf written there is what changes it to 47. It first asserts the variable is set, because without it the scratch path is the literal ./undefined/, which is how stray artifacts of that name get committed.
  • undefined/st.json — removed again. 7d569c3 took it out after 2.2.0 and Retain failed optimistic sends with visible failure reasons #50 brought it back; it is the collector's state file written with an unset directory variable, the same class of artifact this preload exists to prevent.

No production code changes.

How it was verified

  • bun test is green (CI will check) — 474 pass
  • Any send/receive behavior was exercised against my own number only — this change does not send
  • Measured on the machine that had the failures (country_code=47): tier2 went from 80 pass / 5 fail to 85 pass / 0 fail; reproduced on a clean machine with a fake $HOME carrying country_code=47 (5 fail before, 0 after); the new test fails without the preload change
  • UI change → no
  • Touches an invariant in CLAUDE.md → no

test-setup.ts already points XDG_CACHE_HOME at a scratch dir so no test
touches the developer's caches. bridge.conf was not covered: contact-search
reads country_code= through XDG_CONFIG_HOME (falling back to ~/.config),
and the preload never set it. On a machine set up outside North America
(country_code=47) five tier2 cases failed — "(404) 555-0123" normalized
to +474045550123 — while CI, which has no bridge.conf, stayed green.

XDG_CONFIG_HOME now gets a scratch dir beside the cache one. One test
proves the isolation reaches the reader: the default country code is 1
in the scratch dir, and a bridge.conf written there is what changes it.
The test first asserts the variable is set, because without it the
scratch path is the literal ./undefined/, which is how stray artifacts
of that name get committed.

undefined/st.json is removed again: 7d569c3 took it out after 2.2.0 and
nixfred#50 brought it back. It is the collector's state file written with an
unset directory variable — the same class of artifact this preload
exists to prevent.

Measured: five tier2 failures with country_code=47 before, none after,
on the machine that had them and against a fake home on a clean one.
@Fileri
Fileri requested a review from nixfred as a code owner September 10, 2026 15:46
@nixfred
nixfred merged commit bdee1fe into nixfred:main Sep 10, 2026
1 check passed
@Fileri
Fileri deleted the test-isolation branch September 11, 2026 05:35
nixfred added a commit that referenced this pull request Sep 13, 2026
… entry

Release audit before 2.5.0, same method as 2.4.0: every merge since v2.4.0
checked against Unreleased. Missing and now written: #73 (security code on
wl-copy stdin), #50 (failed send keeps its bubble), #51 (accessible composer,
spelling, arrow keys), #52 (resizable panel + compact header), #53 (Ctrl+1-9
pins, back arrow), #55 + 2197e0d (unnamed groups named after people,
composite avatar), #59/#60/#61 (contact scans, read-only card view, vCard
copy/save), #48 (window restores on its workspace), #36 (no uninvited consent
prompt from blip-check). Attributions checked against gh PR authors: #48 is
@jefehoser; #36 reported by @jacobaross. Skipped as not user-facing: #64
(test isolation), #65 (README line), CONTRIBUTORS docs.

No version bump yet: blip-b2 is landing the avatar-cache fix and #62 for
Fred, and 2.5.0 waits for those.

LR-T: changelog, release-audit, 2.5.0, attribution, backfill
LR-D: blip, docs, release
LR-K: audit-the-release-not-assume-it

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PeUtMhaSaA9aiazebBUMS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants