Campfire conformance — compiled

ONCE Campfire's own Minitest suite, run against a Roundhouse emit of the same commit. A failure here mostly names a Rails construct not yet modeled; some are answers that came out wrong with nothing raised, and some have not been triaged at all. That makes their tests the worklist generator — so the ranked causes below, not the pass count, are what this page is for.

This is the compiled lane: each test file compiled to its own native binary by spinel, then run. The same emitted source runs on the interpreted lane, so a difference between the two is the compiler's, not the app's — and this lane can report a status its sibling cannot. 7 of 89 files never linked, and their tests are counted against their first compile error rather than against anything the emit got wrong.

Unpassed tests by who can act: 115 untriaged · 24 roundhouse.

campfire c8f74a0b0e1e · roundhouse 60c5bad9265c · spinel ccc7f2889 · 2026-10-31T04:33:23Z
491/630 tests pass56 of 89 files green7 never linkedemit 1,697 files, 0 errors
491 passing · 139 not passing · 7 file(s) never linked · 1 more never ran a test
What this measures. Two questions, kept apart. Whether the emit compiles is the never-linked column — spinel is a strict target, so an unmodeled construct is a compile error rather than a gap emitted through. Whether it behaves is everything else: their suite asserts test by test, so a failure below names a construct that compiled and then answered wrongly. A file in the first column has not yet been asked the second question. The emit is produced fresh by scripts/campfire-suite and is compiled by spinel ccc7f2889.

The app is pinned at c8f74a0b0e1e; the compiler is not. This lane compiles 54 whole programs, which is too much to run per commit, so it runs on a schedule and its spinel is whatever the publisher pulled and built that morning. That makes a movement here two-sided: it belongs to a Roundhouse change or to a compiler change, and the two are told apart by the spinel version recorded above — not by this page. Read a regression by checking that version first.

The file list is theirs. Every test file campfire's own suite declares, read from the emitted Makefile's SPINEL_TESTS rather than restated here — a `find test -name '*_test.rb'` would also sweep in the scaffold's own tests, which are not campfire's.

Each run stands alone. There is no history here and no comparison to previous runs: a chart of a number that moves for a dozen reasons is not the point of a worklist.

Todos, by tests blocked

Occurrences churn; causes are the unit of work, so each carries a stable slug you can still refer to forty commits later. Owner says who can act: most of this is Roundhouse's own modeling debt.

Counts are how many tests are currently stopped by each cause, not how many will pass when it lands: a test is attributed to the first thing that stopped it, so clearing one cause routinely reveals another behind it. Each unpassed test carries its own message; a file that never ran contributes its whole count against its load error.

BlockedCauseOwner
13
SQLite WAL auto-checkpoint / test-thread policy
sqlite-wal-checkpoint
roundhouse
File is mostly green (13/15); remaining: disable WAL auto-checkpoint so commits do not fsync on the writer, and do not start a background thread in test by default. Shared adapter knobs.
5 of 13 tests
  • test/sqlite_wal_checkpoint_test · SqliteWalCheckpointTest#test_does_not_start_a_background_thread_in_test_by_default
    undefined method 'name' for an instance of Thread
  • test/sqlite_wal_checkpoint_test · SqliteWalCheckpointTest#test_start_with_enabled_true_runs_a_named_contender_thread_that_stop_joins
    no implicit conversion of Hash into Integer
  • test/sqlite_wal_checkpoint_test · SqliteWalCheckpointTest#test_stop_before_start_again_mimics_a_fork_safe_worker_boot
    no implicit conversion of Hash into Integer
  • test/sqlite_wal_checkpoint_test · SqliteWalCheckpointTest#test_stop_interrupts_a_long_checkpoint_interval
    no implicit conversion of Hash into Integer
  • test/sqlite_wal_checkpoint_test · SqliteWalCheckpointTest#test_stop_interrupts_checkpoint_error_backoff
    no implicit conversion of Hash into Integer
7
Fragment / collection cache identity and bounded store
fragment-cache-identity
roundhouse
Five fails in one file: `assert_same` on the bounded MemoryStore, jbuilder HTML token state, detached-broadcast `to_html` on nil, cross-room content-validated hits, plus the `ActionView::Base` constant (also matched above when that message wins). Shared view/cache runtime — largest file-green opportunity on the tip suite.
5 of 7 tests
  • test/fragment_rendering_test · FragmentRenderingTest#test_native_collection_caching_uses_the_bounded_store_without_replacing_shared_stores
    undefined method 'stubs' for an instance of ResponseCache
  • test/fragment_rendering_test · FragmentRenderingTest#test_disabled_page_caching_retains_fresh_native_fragments_after_foreign_leaf_writes
    undefined method 'stubs' for an instance of ResponseCache
  • test/fragment_rendering_test · FragmentRenderingTest#test_message_controls_survive_creator_edits_while_the_author_is_rendered_fresh
    mocha: ActionView::Base.any_instance_expects(:form_with) with 1 chained link(s) is not a stub
  • test/fragment_rendering_test · FragmentRenderingTest#test_a_commit_in_another_room_retains_content_validated_message_collection_hits
    undefined method 'stubs' for an instance of ResponseCache
  • test/fragment_rendering_test · FragmentRenderingTest#test_a_foreign_commit_after_capture_bypasses_old_native_fragment_lookups
    undefined method 'stubs' for an instance of ResponseCache
6
The emit ran and answered differently
silent-divergence
untriaged
NOT a root cause — the bucket of tests that still need one. Nothing raised: the emitted code ran to completion and produced a different answer, so each of these has to be followed down its own chain. This is the most valuable cluster on the page and the most expensive: a missing method names itself, a wrong answer does not.
5 of 6 tests
  • test/first_runs_controller_test · FirstRunsControllerTest#test_create_is_not_vulnerable_to_race_conditions
    assert_equal failed
  • test/messages_boosts_controller_test · Messages::BoostsControllerTest#test_index_looks_up_the_boosters_of_all_boosts_at_once
    assert_equal failed
  • test/messages_caching_test · MessagesCachingTest#test_boosts_are_cached_inside_their_message_instead_of_one_fragment_each
    expected "#message_4 #boost_4" in response body
  • test/qr_code_controller_test · QrCodeControllerTest#test_show_rejects_an_id_that_isn_t_base64
    expected response :bad_request, got status=200 body="<?xml version=\"1.0\" standalone=\"yes\"?><svg version=\"1.1\" xmlns=\"http://
  • test/user_test · UserTest#test_memberships_granted_to_the_open_rooms_are_like_any_other
    assert_equal failed
1
Room destroy — per-message txs and member connection reset broadcast
room-destroy-batching
roundhouse
`assert_broadcast_on` for connection reset after late destroy, and per-message destroy transaction interleaving. Shared cable recording + destroy batching.
1 test
  • test/room_test · RoomTest#test_a_room_destroyed_later_resets_the_connections_of_its_former_members_as_revoking_their_memberships_would
    assert_broadcast_on failed: no broadcast to "action_cable/Z2lkOi8vY2FtcGZpcm
1
Cached direct room still sorts by latest message when already unread
sidebar-cached-direct-sort
roundhouse
Silent DOM divergence: expected `data-sorted-list-number` for a cached unread direct. Peel after cache/304 work.
1 test
  • test/users_sidebars_controller_test · Users::SidebarsControllerTest#test_a_cached_direct_that_is_already_unread_still_sorts_by_its_latest_message
    no implicit conversion of Symbol into String
1
An emitted method's arity does not match its caller
arity-divergence
roundhouse
The receiver exists and the name resolves; the shape does not. Usually a lowering that dropped or added a parameter — kwargs folded into a positional, a block-form helper emitted in its non-block shape. Each needs the emitted definition read against its call site.
1 test
  • test/message_attachment_test · Message::AttachmentTest#test_creating_a_message_keeps_a_video_that_can_t_be_decoded
    wrong number of arguments (given 1, expected 0)
1
Message create transaction — FTS index / unread / outer rollback
message-creation-tx
roundhouse
Creation commit ordering, failed index/unread rollback, outer rollback restoring counter/jobs, and searchable reindex word replace. High density if one AR transaction / after_create_commit seam is wrong.
1 test
  • test/message_creation_commit_test · MessageCreationCommitTest#test_creation_commits_its_index_and_unread_writes_once_before_enqueuing_push
    mocha: Room::PushMessageJob.expects(:perform_later) with 1 chained link(s) is not a stub sh
109
Not yet triaged
unclassified
untriaged
No rule in bench/campfire/suite-causes.json matches these. Triage, then add a rule.
12 of 109 tests
  • test/accounts_controller_test · AccountsControllerTest#test_edit_lists_a_page_of_members_and_the_next_page_carries_on_from_it
    no implicit conversion of Integer into String
  • test/cached_responses_test · (file did not run)
    spinel: 2 refusals, nothing written
  • test/message_attachment_test · Message::AttachmentTest#test_creating_a_message_creates_video_preview
    undefined method 'const_defined?' for class TimeLimitedVideoPreviewer
  • test/message_attachment_test · Message::AttachmentTest#test_creating_a_message_keeps_an_image_that_can_t_be_decoded
    undefined method 'webpsave_buffer' for an instance of Vips::Image
  • test/message_attachment_test · Message::AttachmentTest#test_creating_a_message_makes_the_video_poster_that_the_room_shows
    undefined method 'const_defined?' for class TimeLimitedVideoPreviewer
  • test/message_attachment_test · Message::AttachmentTest#test_creating_a_message_gives_up_on_a_video_preview_that_takes_longer_than_the_time_limit
    stub_const(TimeLimitedVideoPreviewer, :TIME_LIMIT) has no compiled form here: th
  • test/message_creation_test · (file did not run)
    spinel: 3 refusals, nothing written
  • test/messages_boosts_controller_test · Messages::BoostsControllerTest#test_quick_boost_controls_submit_their_displayed_reaction_to_the_message
    no implicit conversion of Symbol into String
  • test/messages_caching_test · MessagesCachingTest#test_messages_render_their_preloaded_boosts_in_order_without_querying_them_again
    no implicit conversion of Symbol into String
  • test/messages_caching_test · MessagesCachingTest#test_a_page_of_messages_loads_whether_their_previews_were_made_along_with_the_messages_not_one_at_a_time
    undefined method 'const_defined?' for class TimeLimitedVideoPreviewer
  • test/messages_controller_test · MessagesControllerTest#test_creating_a_message_broadcasts_the_message_to_the_room
    mocha: ContentFilters::TextMessagePresentationFilters.expects(:apply) with 3 chained link(s) is not a stub shape
  • test/messages_controller_test · MessagesControllerTest#test_creating_a_message_with_an_image_that_can_t_be_decoded_broadcasts_the_message_to_the_room
    undefined method 'webpsave_buffer' for an instance of Vips::Image

Rules that matched nothing

A rule at zero is kept, not deleted: it is the tripwire that catches the fix coming undone. What it means depends on why it is at zero.

RuleWhy it reads zero
sti-becomes`becomes!` landed in f2d42854; the rule stays as a regression tripwire.
proc-call-lostspinel#4529 closed by PR #4530 (b93306b6, same day): the fast path's guard is arity-aware; spinel lane 286 -> 290/300 on the merge. The rule stays as the tripwire for the two guards disagreeing again.
actiontext-attachment-from-node`from_node`, `#attachable` and `MissingAttachable` landed with the generated `ActionText::Attachable.locate` (the includer set is the registry); the rule stays as a regression tripwire.
sgid-wire-formatthe wire format is Rails' and the tolerant list is read off the reopen; the rule stays as a regression tripwire for either end drifting (a salt, digest, padding or `?expires_in` change fails the pinned literal first).
socket-interceptionserved 2026-09-17 (sequential Resolv answers + the TcpSocketStub seam); the rule stays as a regression tripwire.
globalid-sgidminting served 2026-09-22; the rule stays as the tripwire for a mint whose model the pass cannot name, which is reported rather than guessed.
turbo-streams-channelthe constant landed in fd1a3259; the rule stays as a regression tripwire.
belongs-to-autosaveserved with #818 tip-compat (FirstRun/grant_to peel); rule stays as a regression tripwire.
conditional-get`fresh_when` / `stale?` landed in 7ea262e2; the rule stays as a regression tripwire.
paginationlanded in 0ef8fb79; the rule stays as a regression tripwire.
id-zero-sentinelzero is the intended reading. This is a deliberate divergence rather than a gap, and the rule exists to catch the day it becomes visible again.
shared-cache-table-lockthe harness opens a per-test file database since 2026-09-17; the rule stays as the tripwire — a reappearance means a shim opened a shared-cache database again.
render-json-encoderthe monomorphized writer landed for the declared-readers case (campfire's only site); the rule stays as a regression tripwire, and names the shapes that would still reach the encoder.
deferred-preload-timingload_records runs includes unless skip_preloading!. message_test is 10/10 on Campfire 11d3fb9, and the page-preload sibling still leaves unrendered rows unloaded. The rule stays as a regression tripwire.
nokogiri-css-classserved by loading ruby-vips after boot so Nokogiri keeps the libxml that accepts `*:` and css-class(). messages_helper_test is 17/17, messages_boosts_controller_test is 5/5, and rooms_refreshes_controller_test is 1/1 on Campfire 11d3fb9. The rule stays as a regression tripwire.
action-view-base-missingserved by the ActionView::Base#form_with peel (b513fa665): fragment_rendering_test is 9/9 on Campfire 11d3fb9. The rule stays as a regression tripwire.
native-validators-304served with #829; rule stays as a regression tripwire.
messages-caching-fixture-txnThe fixture frame is hidden from `transaction_open?`, and an uncommitted write moves the observer's data_version, so the cached page is dropped when the example edits a message. messages_caching_test is 4/4. The rule stays as a regression tripwire.
presentation-preload-introspectionserved 2026-10-09 (`embeds` modeled and preloaded). associations_load_together is cleared with deferred-preload-timing. The rule stays as a regression tripwire.
turbo-signed-stream-nameserved 2026-09-22 (room_messages_channel_test 6/6 + the stock-channel pair 2/2); the rule stays as a regression tripwire.
web-push-pinned-deliveryserved 2026-09-22 on both lanes (web_push_persistent_request_test 2/2 ruby and spinel, through campfire's own PersistentRequest over the real gem / the port); the rule stays as a regression tripwire.
cable-test-caseserved 2026-09-22 (test/channels 20/20 on the ruby lane); the rule stays as a regression tripwire for a harness method going missing.
view-test-caseserved 2026-09-22 (messages_helper_test 3/3); the rule stays as the tripwire for a `view` call no helper defines, which is ActionView::Base's own surface and still unmodeled.
uri-parse-conformancethe space case served upstream 2026-09-22 (matz/spinel#4806 + fd49be64); the rule stays as the tripwire for the colon-form divergences still open in the same parser, and for the guard itself being loosened again.
rails-test-support-classesserved 2026-09-22 (opengraph-embed 8/8, log_scrubbing 6/6); the rule stays as the tripwire for the next Rails test stand-in the corpus reaches for, and names the three it has needed so far.
kwargs-splat-forwardingserved 2026-09-21 (opengraph-embed 7/8, the eighth is `ActionDispatch::TestRequest`); the rule stays as a regression tripwire.
actiontext-fragment-mutationserved 2026-09-21 (Node writes, `Fragment#update`/`at_css`/`css`, and Rails' attachable-driven plain text; content_filters 12/14); the rule stays as a regression tripwire.
activesupport-string-core-ext`squish` served 2026-09-22; the rule stays as the tripwire, and names the three String core exts (`squish!`, `truncate_words`, `remove`) the corpus has not asked for yet.
ipaddr-octets-on-stdlibserved 2026-09-21 (guard 24/24 on the ruby lane); the rule stays as the tripwire for a runtime IPAddr method the stdlib facade does not mirror.
vips-image-constructionserved 2026-10-05: spinel-ruby-vips grew Image.black / #add / #cast / write_to_buffer, so the policy file reaches find_load instead of stopping on unknown. Remaining find_load nils on libvips 8.14 are vips-policy-not-applied-in-tests, not this construction wall.
tempfile-stdlibserved 2026-09-22; the rule stays as the tripwire for the next caller that reaches for a temp file, and for the port's one real difference from Ruby's — it opens by name where Ruby opens O_EXCL and retries.
vips-policy-not-applied-in-testsserved 2026-10-05: the processor wraps Vips.vips_foreign_find_load through VipsExt so a blocked loader is not selected (8.15+ already skips BLOCKED classes in vips_foreign_map; 8.14 does not). 15/15 on this orb's libvips 8.14.1 after the wrap, two skips for loaders the host never built.
test-harness-surfaceserved 2026-09-22; the rule stays as the tripwire for the next harness method the corpus reaches for — `file_fixture`, `fixture_file_upload`, `response`, `parsed_body` and the bare `assert` family are all named in the match because each hides an unknown number of assertions behind it.
attachable-partials-not-renderedboth halves landed: sgid attachables through the generated `Content.render_attachment` (fe2ce576), content-type attachables through their own `from_node` with the partial's local named `model_name.element` and `caption` delegated back through the node, plus the shared `auto_link` running Rails' body pass so the outer node is stripped around the partial on every lane; ruby 294/300, spinel 292/300. The rule stays as the tripwire for an attachment node reaching the page bare again.
test-helper-kwarg-defaultsthe skipped-slot fill landed 2026-09-19 (unfurl 7/7 both lanes); the rule stays as a regression tripwire.
direct-uploads-not-servedserved 2026-09-20 (4/4 both lanes; with the generated filter reopens deleted the anonymous POST creates a blob and the anonymous PUT is not a 401, so the guard is what the tests see); the rule stays as a regression tripwire.
mocha-stub-raisesserved 2026-09-19 (sessions 9/10 spinel, 10/10 ruby); the rule stays as a regression tripwire.
mocha-bare-mockserved 2026-09-20 (sessions 10/10 both lanes; a no-op `disconnect` fails the test with `expected 1 time(s), got 0`); the rule stays as a regression tripwire.

No explanation recorded, so these are the open question: either the cause is cleared and nobody wrote that down, or the failure's message changed and it is now being counted as untriaged above. params-object-representation, fixture-accessors, relation-vs-array, object-extend, rails-module-facade, broadcast-assertions, view-helper-in-helper-module, active-storage-attachments, route-helper-takes-a-record, out-of-scope-gems, allow-browser, params-hash-in-path, ar-database-tasks, record-cache-admit.

What the harness compensates for

Nothing: this run spliced no stubs (--no-stubs), so the numbers above are the emit's own.

By test file

A file that never ran is not the same as a file whose tests failed: it died at load, so its whole count is charged to one error and nothing behind that error has been seen yet.

And on this lane there is a third row: a file that never linked. Its tests are charged to its first compile error, and unlike a load failure it has not been observed to do anything at all — the emit may be perfectly correct behind it. Sort the work by asking which of the three a row is: didn't link, linked and diverged, linked and agreed.

FileTestsPassFailFirst error
test/cached_responses_test14014never linked — spinel: 2 refusals, nothing written
test/web_push_connections_test14014never linked — spinel: once-campfire/test/test_helpers/push_service_test_helper.rb:87: unsupported multiple assignment call target no writer: node 294195 (MultiWriteNode)
test/sqlite_wal_checkpoint_test15213FAIL SqliteWalCheckpointTest#test_does_not_start_a_background_thread_in_test_by_default: undefined method 'name' for an instance of Thread
test/unfurl_links_controller_test12012never linked — spinel: 5 refusals, nothing written
test/users_profiles_controller_test21138FAIL Users::ProfilesControllerTest#test_changing_the_password_signs_out_the_account_s_other_devices_but_not_this_browser: expected a redirect, got status=200 lo
test/fragment_rendering_test927FAIL FragmentRenderingTest#test_native_collection_caching_uses_the_bounded_store_without_replacing_shared_stores: undefined method 'stubs' for an instance of Re
test/message_creation_test606never linked — spinel: 3 refusals, nothing written
test/room_push_test1046FAIL Room::PushTest#test_destroys_invalid_subscriptions: Timeout waiting for pool tasks to complete
test/web_push_persistent_request_test606never linked — spinel: once-campfire/test/test_helpers/push_service_test_helper.rb:87: unsupported multiple assignment call target no writer: node 294176 (MultiWriteNode)
test/message_attachment_test1055FAIL Message::AttachmentTest#test_creating_a_message_creates_video_preview: undefined method 'const_defined?' for class TimeLimitedVideoPreviewer
test/record_cache_test505never linked — Fix the signature or the call.
test/response_cache_test404never ran —
test/room_messages_count_lifecycle_test734FAIL Room::MessagesCountLifecycleTest#test_concurrent_ensure_repairs_leave_triggers_installed_and_counts_accurate: assert_empty failed
test/room_messages_count_tasks_test404never linked — spinel: 1 refusal, nothing written
test/messages_caching_test413FAIL MessagesCachingTest#test_boosts_are_cached_inside_their_message_instead_of_one_fragment_each: expected "#message_4 #boost_4" in response body
test/messages_helper_test17143FAIL MessagesHelperTest#test_plain_text_presentation_is_reused_by_content_rather_than_database_epoch: undefined method 'stubs' for an instance of ActionControll
test/user_test13103FAIL UserTest#test_memberships_granted_to_the_open_rooms_are_like_any_other: assert_equal failed
test/users_push_subscriptions_controller_test1183FAIL Users::PushSubscriptionsControllerTest#test_a_session_signed_out_while_its_request_is_in_flight_doesn_t_register_a_subscription: mocha: Push::Subscription.
test/users_sidebars_controller_test633FAIL Users::SidebarsControllerTest#test_a_cached_direct_that_is_already_unread_still_sorts_by_its_latest_message: no implicit conversion of Symbol into String
test/messages_boosts_controller_test532FAIL Messages::BoostsControllerTest#test_index_looks_up_the_boosters_of_all_boosts_at_once: assert_equal failed
test/messages_controller_test20182FAIL MessagesControllerTest#test_creating_a_message_broadcasts_the_message_to_the_room: mocha: ContentFilters::TextMessagePresentationFilters.expects(:apply) wi
test/accounts_controller_test651FAIL AccountsControllerTest#test_edit_lists_a_page_of_members_and_the_next_page_carries_on_from_it: no implicit conversion of Integer into String
test/first_runs_controller_test431FAIL FirstRunsControllerTest#test_create_is_not_vulnerable_to_race_conditions: assert_equal failed
test/message_creation_commit_test101FAIL MessageCreationCommitTest#test_creation_commits_its_index_and_unread_writes_once_before_enqueuing_push: mocha: Room::PushMessageJob.expects(:perform_later)
test/presence_channel_test761FAIL PresenceChannelTest#test_subscribing_tells_the_user_s_other_tabs_when_they_read_the_room: assert_broadcast_on failed: no broadcast to "user_1_reads" carrie
test/push_subscription_test18171FAIL Push::SubscriptionTest#test_the_badge_defaults_to_the_subscriber_s_unread_room_count: mocha: WebPush.expects(:payload_send) with 1 chained link(s) is not a
test/qr_code_controller_test321FAIL QrCodeControllerTest#test_show_rejects_an_id_that_isn_t_base64: expected response :bad_request, got status=200 body="<?xml version=\"1.0\" standalone=\"yes
test/room_test11101FAIL RoomTest#test_a_room_destroyed_later_resets_the_connections_of_its_former_members_as_revoking_their_memberships_would: assert_broadcast_on failed: no broad
test/sessions_controller_test11101FAIL SessionsControllerTest#test_create_is_refused_when_the_password_changes_after_it_was_checked: mocha: User.stubs(:authenticate_by) with 1 chained link(s) is
test/sessions_transfers_controller_test431FAIL Sessions::TransfersControllerTest#test_update_is_refused_when_the_password_changes_after_the_link_was_checked: mocha: User.stubs(:find_by_transfer_id) with
test/user_transferable_test541FAIL User::TransferableTest#test_a_transfer_id_expires: undefined method '+' for an instance of ActiveSupport::Duration
test/users_push_subscriptions_controller_foreign_write_test101FAIL Users::PushSubscriptionsControllerForeignWriteTest#test_a_subscription_another_connection_registers_while_this_one_validates_isn_t_registered_twice: mocha:
test/web_push_pool_test211FAIL WebPush::PoolTest#test_every_notification_carries_its_subscriber_s_unread_room_count_as_the_badge: mocha: WebPush.stubs(:payload_send) with 1 chained link(
test/account_joinable_test220all green
test/account_test440all green
test/accounts_bots_controller_test550all green
test/accounts_bots_keys_controller_test110all green
test/accounts_custom_styles_controller_test330all green
test/accounts_join_codes_controller_test220all green
test/accounts_logos_controller_test660all green
test/accounts_users_controller_test330all green
test/action_text__attachment_test330all green
test/action_text_attachment_opengraph_embed_test990all green
test/action_text_attachment_test330all green
test/active_storage_authentication_test440all green
test/application_cable_connection_test770all green
test/autocompletable_users_controller_test440all green
test/block_banned_requests_test330all green
test/content_filters_test19190all green
test/fetch_metadata_test770all green
test/first_run_test330all green
test/log_scrubbing_formatter_test660all green
test/membership_test990all green
test/message_mentionee_test220all green
test/message_pagination_test110all green
test/message_searchable_test880all green
test/message_test10100all green
test/messages_boosts_by_bots_controller_test12120all green
test/messages_by_bots_controller_test23230all green
test/opengraph_document_test330all green
test/opengraph_fetch_test12120all green
test/opengraph_location_test770all green
test/opengraph_metadata_test11110all green
test/restricted_http_private_network_guard_test24240all green
test/rich_text_helper_test440all green
test/room_messages_channel_test660all green
test/room_messages_count_test660all green
test/room_messages_via_stock_turbo_channel_test220all green
test/rooms_closeds_controller_test990all green
test/rooms_controller_test10100all green
test/rooms_direct_test550all green
test/rooms_directs_controller_test660all green
test/rooms_involvements_controller_test550all green
test/rooms_open_test220all green
test/rooms_opens_controller_test990all green
test/rooms_refreshes_controller_test110all green
test/searches_controller_test770all green
test/session_test220all green
test/unread_rooms_channel_test330all green
test/user_avatar_test330all green
test/user_bannable_test110all green
test/user_bot_test440all green
test/user_role_test330all green
test/users_avatars_controller_test440all green
test/users_bans_controller_test770all green
test/users_controller_test660all green
test/vips_loader_policy_test15150all green
test/webhook_test660all green
test/welcome_controller_test220all green

Emit diagnostics

From the transpile that produced the tree under test: 1,697 files, 0 errors, 50 warnings. Warnings are a modeling-debt ledger rather than a failure — the Ruby target emits through its gaps — so the COUNTS are not comparable to the test failures above.

They are not independent of them either. send_dispatch_failed in particular names a call the analyzer could not resolve, and three of the fixes on this lane came out of those lines before the suite reached them at all — the analyzer had already written the diagnosis. Read the emit log before the fail log.

DiagnosticCount
lower_residue50
Artifact: summary.json — every number on this page comes from it. Source: basecamp/once-campfire at c8f74a0b0e1e.