Root cause (definitive, confirmed 2026-05-19)
The #39 Store offline_ok fix (PR #59) made Application.ensure_all_started(:burble) succeed in test (good — it was a total-collapse before). Consequence: ~13 test modules were written assuming the app is NOT running and manually start_supervised app-owned singletons. Those now collide with the live app:
| Signature |
Count |
Cause |
failed to start child {Phoenix.PubSub, name: Burble.PubSub} |
29 |
already started by app |
(EXIT) no process … isn't started |
59 |
cascade from crashed setup |
GenServer.call(Burble.Groove, …) exits |
24 |
Groove setup crashed |
failed to start child {Burble.Timing.Alignment,…} |
13 |
already app-owned |
unknown registry: Burble.RoomRegistry |
8 |
test expects own registry |
MatchError … start_supervised! |
10 |
{:ok,_}=start_supervised! — returns a pid, not {:ok,pid} |
failed to start child Burble.Chat.MessageStore |
3 |
already app-owned |
165 failures total; the above is ~150 of them. Remainder are genuine standalone bugs (DiscordCrypto Not an AEAD cipher ×4, String.Chars not implemented for Tuple ×2, a few assertion mismatches) — those are independently fixable.
Affected modules (≈13)
groove_test, groove/groove_test, chat/message_store_test, timing/alignment_test, rooms/room_test, rooms/room_manager_test, concurrency/session_concurrency_test, text/nntps_backend_test, media/engine_test, e2e/signaling_test, web/room_channel_text_test, web/signaling_channel_test, topology/topology_test.
Decision required (test strategy — owner call)
- App-owned, shared: keep
test_helper booting the app; tests use the running singletons and reset state (e.g. ETS clear) between tests instead of start_supervised. Most idiomatic for an OTP app; touches ~13 modules; must preserve per-test isolation.
- No app in test: drop
ensure_all_started from test_helper; each test starts only what it needs. Reverts engine_test-style tests that expect the app.
- Hybrid minimal tree: app starts a minimal test supervision set (PubSub/registries) via
config :burble, :start_children; tests start the rest.
Cannot be validated locally as authoritative (OTP25≠CI OTP27) and CI is blocked (stuck Actions queue). Recommend (1) but it is a real refactor needing the owner's decision + a green CI signal. Part of Earn-the-Core epic #53; relates to #39 (do not re-arm the gate until this is resolved).
Genuine standalone bugs (fixable now, decision-free) — sub-tasks
Root cause (definitive, confirmed 2026-05-19)
The #39 Store
offline_okfix (PR #59) madeApplication.ensure_all_started(:burble)succeed in test (good — it was a total-collapse before). Consequence: ~13 test modules were written assuming the app is NOT running and manuallystart_supervisedapp-owned singletons. Those now collide with the live app:failed to start child {Phoenix.PubSub, name: Burble.PubSub}(EXIT) no process … isn't startedsetupGenServer.call(Burble.Groove, …)exitsfailed to start child {Burble.Timing.Alignment,…}unknown registry: Burble.RoomRegistryMatchError … start_supervised!{:ok,_}=start_supervised!— returns a pid, not{:ok,pid}failed to start child Burble.Chat.MessageStore165 failures total; the above is ~150 of them. Remainder are genuine standalone bugs (DiscordCrypto
Not an AEAD cipher×4,String.Charsnot implemented for Tuple ×2, a few assertion mismatches) — those are independently fixable.Affected modules (≈13)
groove_test, groove/groove_test, chat/message_store_test, timing/alignment_test, rooms/room_test, rooms/room_manager_test, concurrency/session_concurrency_test, text/nntps_backend_test, media/engine_test, e2e/signaling_test, web/room_channel_text_test, web/signaling_channel_test, topology/topology_test.
Decision required (test strategy — owner call)
test_helperbooting the app; tests use the running singletons and reset state (e.g. ETS clear) between tests instead ofstart_supervised. Most idiomatic for an OTP app; touches ~13 modules; must preserve per-test isolation.ensure_all_startedfromtest_helper; each test starts only what it needs. Reverts engine_test-style tests that expect the app.config :burble, :start_children; tests start the rest.Cannot be validated locally as authoritative (OTP25≠CI OTP27) and CI is blocked (stuck Actions queue). Recommend (1) but it is a real refactor needing the owner's decision + a green CI signal. Part of Earn-the-Core epic #53; relates to #39 (do not re-arm the gate until this is resolved).
Genuine standalone bugs (fixable now, decision-free) — sub-tasks
~c"Not an AEAD cipher"(×4)Protocol.UndefinedError String.Chars for Tuple(×2)message_store_test.exs:25{:ok,_}=start_supervised!API misuse (part of chore(ci): Maximize CI/CD values (Dependabot & Permissions) #1 too)