Skip to content

Make root crate tests fail on a missing fixture or axis, never skip - #712

Merged
MattJackson merged 19 commits into
predevfrom
lane-task-row-114b-root-crate-silent-skips
Oct 12, 2026
Merged

MattJackson merged 19 commits into
predevfrom
lane-task-row-114b-root-crate-silent-skips

Conversation

@MattJackson

Copy link
Copy Markdown
Collaborator

Status row 114, the root crate's share (row 114b). No test in crates/busbar passes by returning early when its subject is absent.

What changed (tests only)

  • One panic per missing fixture: crates/busbar/tests/common/plugins.rs::missing(name, command) -> ! panics with the <name> cdylib is not built: run first (this test never skips). The commands are BUILD_BUSBAR_EXAMPLES (cargo build -p busbar --examples), BUILD_LOADER_EXAMPLES (cargo build -p busbar-plugin-loader --examples) and BUILD_PINNED (cargo test -p busbar --no-run). The root unit tests already mount this file as crate::root::test_plugins, so they call the same helper. No second copy exists.
  • Fixture probes return the artifact or panic, in every run. Every std::env::var_os("CI") special case is gone:
    • serve_planes::dropped_path / bound;
    • serve_money::governed* (they return Governed, not Option) and neutral_framers;
    • registry::dropped_doors;
    • export_plugin_dropped_in_serves::export_cdylib, export_scrape_is_first_party::metrics_sink_cdylib and transport_dropped_in_serves::transport_cdylib;
    • the tcp drop-in in linked_export_sinks_boot_as_their_own_kind and the otlp cdylib in traces_stream_both_doors;
    • plane_driver::dropped_path / plane_rider::dropped_path. Their ways() always include Dropped, so the dropped door is no longer skipped quietly.
    • Every let Some(x) = probe() else { eprintln!("skip: …"); return; }; is now let x = probe();.
  • mcp_stdio_serve.rs: install_auth_plugin returns () and panics when the cdylib is absent. record_skip, BUSBAR_TEST_SKIP_LEDGER and the ledger text are deleted.
  • store_adapter_verb_seam.rs: adapter_over_published_schema() and adapter_at() return StoreAdapter. The 8 dead guards are deleted.
  • Linkage probes are now gates. Each attribute sits beside its #[test], and the test asserts its subject inside:
    • export_otlp_delivers_spans: #[cfg(all(feature = "transport-tcp", feature = "export-otlp"))] with assert!(LINKED_TRANSPORTS…tcp) and assert!(otlp_linked(&dir));
    • traces_stream_both_doors: #[cfg(feature = "transport-tcp")] with the tcp assertion;
    • linked_export_sinks_boot_as_their_own_kind: #[cfg(linked_axis_export_doors)] with assert!(!sinks.is_empty());
    • migration_corpus (both tests): #[cfg(feature = "auth-admin-tokens")];
    • cli_validate::validate_orders_a_webhook_sinks_refusals_among_the_limits_as_before: #[cfg(all(linked_axis_body_ingress, feature = "export-webhook"))] with assert!(!probed.contains("unknown exporter 'request-log-webhook'"), "{probed}");
    • plane_isomorphism (both tests): see the judgment call below, with assert!(!decls.is_empty()).
  • Left unchanged as the task says: serve_money.rs NODE_HOOKS_ARM (the re-exec harness).

Judgment calls

  • plane_isomorphism is gated on #[cfg(linked_axis_plane)], not linked_every_plane. The probe was installed_decls().is_empty(), and LINKED_PLANES holds exactly the enabled rows that carry the plane axis. linked_axis_plane is the build-script cfg that names that subject. linked_every_plane would also stop compiling both tests on every partial-plane build. The test bodies pass cfg!(linked_every_plane) into verify_scoped so that partial rosters still run. every_installed_plane_is_answered_by_a_root_leg's doc says it must run on every build, and "used to be cfg-gated … ran in exactly one build configuration" is the regression it records.
  • More var_os("CI") sites than the table lists (plane_driver.rs, plane_rider.rs, serve_money::neutral_framers, the tcp and otlp drop-ins). Scanner rule (b) refuses every one of them, so they are converted the same way.
  • Unit-test helper: the task asked for a sibling helper in src/root/tests/. The root tree already mounts tests/common/plugins.rs as crate::root::test_plugins, so it calls the same missing instead of keeping a copy.
  • Scanner rule (d) also follows a plain let binding of a probe's answer, e.g. let decls = installed_decls(); if decls.is_empty() { return; }. Without that, the plane_isomorphism and linked_export_sinks guards would get past it.

Tests

  • crates/busbar/tests/no_silent_skip.rs scans every .rs under src/root/tests/ and tests/ (itself excluded). Comments are stripped by common::classify. It fails and lists file:line on:
    • (a) a skip:/SKIP print;
    • (b) var_os("CI")/var("CI");
    • (c) record_skip(;
    • (d) a let-else or if guard that only prints and return;s, around a probe name or cfg!(feature.
  • Two selftests show the scan can say no. Every removed shape is refused by its rule, and every replacement shape passes: the panicking probe, the #[cfg] with its assertion, a non-probe guard, and a guard that does more than skip.
  • RED arm of the helper: root::serve::planes_tests::a_missing_fixture_cdylib_fails_the_test_and_names_its_build is #[should_panic(expected = "is not built: run")].

RED: what the scanner reports at the base (origin/predev 39374ec)

The lane rules forbid building or running tests locally, so this list was not produced by a run of the scanner. It was derived by applying the scanner's rules with git grep at the base commit and reading the guard sites. CI runs the real thing on this head. At the base the test fails with N silent skip(s): …, followed by:

src/root/tests/registry.rs:862: (b) a fixture that fails only under CI
src/root/tests/registry.rs:929: (d) a let-else whose else only skips
src/root/tests/registry.rs:930: (a) a print announcing a skip
src/root/tests/registry.rs:965: (d) a let-else whose else only skips
src/root/tests/registry.rs:966: (a) a print announcing a skip
src/root/tests/serve_framed.rs:67,92,110,148,201,220: (d) a let-else whose else only skips
src/root/tests/serve_framed.rs:68,93,111,149,202,221: (a) a print announcing a skip
src/root/tests/serve_money.rs:357,378,393,411,432,481,502,522,563,587,607,720,782: (d) a let-else whose else only skips
src/root/tests/serve_money.rs:358,379,394,412,433,482,503,523,564,588,608,730,783: (a) a print announcing a skip
src/root/tests/serve_money.rs:892: (b) a fixture that fails only under CI
src/root/tests/serve_planes.rs:60: (b) a fixture that fails only under CI
src/root/tests/serve_planes.rs:125,174: (d) a let-else whose else only skips
src/root/tests/serve_planes.rs:126,175: (a) a print announcing a skip
tests/export_otlp_delivers_spans.rs:138,145: (d) an `if` guard whose body only skips
tests/export_plugin_dropped_in_serves.rs:52: (b) a fixture that fails only under CI
tests/export_plugin_dropped_in_serves.rs:170,289: (d) a let-else whose else only skips
tests/export_plugin_dropped_in_serves.rs:171,290: (a) a print announcing a skip
tests/export_scrape_is_first_party.rs:47: (b) a fixture that fails only under CI
tests/export_scrape_is_first_party.rs:225: (d) a let-else whose else only skips
tests/export_scrape_is_first_party.rs:226: (a) a print announcing a skip
tests/linked_export_sinks_boot_as_their_own_kind.rs:179: (d) an `if` guard whose body only skips
tests/linked_export_sinks_boot_as_their_own_kind.rs:197: (b) a fixture that fails only under CI
tests/mcp_stdio_serve.rs:166: (c) a skip ledger
tests/mcp_stdio_serve.rs:172: (b) a fixture that fails only under CI
tests/mcp_stdio_serve.rs:220: (c) a skip ledger
tests/mcp_stdio_serve.rs:500,524,549,631,664,734: (d) an `if` guard whose body only skips
tests/migration_corpus.rs:363,526: (d) an `if` guard whose body only skips
tests/migration_corpus.rs:364,527: (a) a print announcing a skip
tests/plane_driver.rs:73: (b) a fixture that fails only under CI
tests/plane_isomorphism.rs:344,406: (d) an `if` guard whose body only skips
tests/plane_rider.rs:62: (b) a fixture that fails only under CI
tests/store_adapter_verb_seam.rs:128,147,160,201,229,243,309,341: (d) a let-else whose else only skips
tests/traces_stream_both_doors.rs:127: (d) an `if` guard whose body only skips
tests/traces_stream_both_doors.rs:132: (b) a fixture that fails only under CI
tests/transport_dropped_in_serves.rs:68: (b) a fixture that fails only under CI
tests/transport_dropped_in_serves.rs:278: (d) a let-else whose else only skips
tests/transport_dropped_in_serves.rs:279: (a) a print announcing a skip

Comma-separated line numbers stand for one row each. cli_validate.rs:1673 is converted by this PR but is not a scanner finding at the base: its probe, run_busbar, is not on the (d) name list.

PR #590 and PR #570 (auth_plugin_chain.rs) had not merged when this branched, so neither is touched.

A missing fixture cdylib now panics through common::plugins::missing, naming
the command that builds it, in every run (no CI special case). Linkage probes
become cfg gates on the test with an in-body assertion of the subject. The
mcp_stdio_serve skip ledger and the store adapter's dead guards are removed.
tests/no_silent_skip.rs scans the root crate's test trees for skip prints, CI
switches, skip ledgers and early-return guards around fixture or axis probes.
@MattJackson
MattJackson enabled auto-merge October 9, 2026 21:09
@MattJackson MattJackson added fixing and removed fixing labels Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

promote into predev: all green @b673ae7b0

Already red on predev, not this PR's: 10
gate row detail
construction one-pick-site 3 production call site(s) of 'pick_among(' (ceiling 2): crates/busbar-kernel-egress/src/walk.rs:298; crates/busbar-llm/src/engine/exhaustion/fallback.rs:120; crates/busbar-llm/src/engine/pipeline.rs:8
kind-isolation kind-isolation:deps 3 finding(s), 93 shipped edge instance(s) over 30 class(es), 93 declaration(s); 56 '[[dep]]' row(s), 0 question(s): unlisted-dep-edge legacy -> plane busbar-llm -> busbar-plane-llm is a shipped edge w
kind-isolation kind-isolation:law0 5 hit(s) off the [[law0]] ceilings, 3 finding(s) over 14 neutral crate(s): law0-rise busbar × instance:secret 37 hit(s) against a ceiling of 35: this landing grew a neutral crate's instance vocabulary
kind-isolation-ship kind-isolation:deps 10 finding(s) over 93 shipped edge(s): ship-edge kernel -> hooks busbar-kernel -> busbar-hook-ranking is 'not-allowed': the architecture grants no kernel -> hooks edge, and the ship criterion is the a
kind-isolation-ship kind-isolation:test-deps 8 finding(s) over 32 test edge(s): ship-edge cleanliness -> export busbar-core-admin -> busbar-export-prometheus is 'not-allowed': the architecture grants no cleanliness -> export edge, and the ship c
kind-isolation-ship kind-isolation:law0 5 hit(s) off the [[law0]] ceilings, 3 finding(s) over 14 neutral crate(s): law0-rise busbar × instance:secret 37 hit(s) against a ceiling of 35: this landing grew a neutral crate's instance vocabulary
kind-isolation-ship kind-isolation:faces 2 finding(s) over 40 crate(s): foreign-entry crates/busbar busbar is kind 'root' and implements 'Transport' 1 time(s) in shipped source — the entry face of kind 'transport'. A trait implementation is
kind-isolation-ship kind-isolation:legacy-drain 3 finding(s): transitional-live qa/kind-isolation.toml 'busbar-a2a -> busbar-core-admin' (legacy drain: the retiring A2A engine's tests drive the admin surface that drained into the cleanliness tier)
ship-ready ship-ready:ship-twin 'kind-isolation-ship' is not green: kind-isolation:deps (a dependency the architecture does not grant is still in the graph); kind-isolation:test-deps (a dependency the architecture does not grant is
structure-lint structure-lint:plane-dup:unledgered 22 finding(s): PLANE-DUPLICATE (module): 'config.rs' — a2a:crates/busbar-a2a/src/a2a/config.rs decisions:crates/busbar-plane-decisions/src/config.rs voice:crates/busbar-voice/src/config.rs (the ledger

tests passed: 5296, failed: 0. Run: https://github.com/GetBusbar/busbar/actions/runs/38276974807 . Artifact verdict-b673ae7b0b4cb7921b3e8c0e751fbcf58938c0e1 (failures.json, junit.xml, raw.log; 90 days).

Gating a test on a cfg left the helpers only it reads uncompiled-but-present
in builds without that cfg, which clippy -D warnings rejects:
- plane_isomorphism: the plane-axis-only helpers, the linked_planes include
  and their path import are gated on linked_axis_plane as the tests are.
- migration_corpus: the helpers the two admin-minted corpus tests read are
  allowed dead in a build without the admin credential's plugin.
- traces_stream_both_doors, export_otlp_delivers_spans and
  linked_export_sinks_boot_as_their_own_kind: the export-door axis cfg moves
  to the file, as each holds one test.

The tests no longer name plugin features in cfgs (instance-noun-neutrality:tcp
and kind-isolation:law0 busbar x export, 15 -> 18):
- The two OTLP tests drop the tcp wire in when the build does not link its
  row (the pattern linked_export_sinks already uses) instead of compiling
  out, and gate on the export-door axis, asserting the binary links otlp.
- The webhook-ordering test gates on the export-door axis and asserts the
  binary links the sink.
- no_silent_skip's fixtures name no transport instance.

Proved on Latchkey: clippy -p busbar --tests with --no-default-features and
with --features proto-llm (-D warnings) clean; gates instance-noun-neutrality
green, kind-isolation and kind-isolation-ship law0 back to the base's 18
findings; the both-doors, OTLP delivery and no-silent-skip scan tests pass.
@MattJackson
MattJackson added this pull request to the merge queue Oct 10, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 10, 2026
@MattJackson MattJackson added fixing and removed fixing labels Oct 10, 2026
- serve_money: the three local-unit tests merged in from #644 still skipped on a missing test
  plane; they now take the infallible governed() fixture like the rest.
- store_adapter_verb_seam: StoreAdapter::speaks_new_ops is gone on predev (every loadable store
  speaks ABI v3); the fixture check asserts the adapter's payload schema is the published one.
- qa/kind-isolation.toml: busbar x auth measures 49 on this head (law0-slack in the CI report;
  the 11 -> 13 figure rise is exactly that 2-hit slack), so its [[law0]] ceiling is lowered
  51 -> 49 in the commit that drained it.

Not proved on Latchkey: the run budget is spent (RUN_CAP 4000/4000); the PR's CI is the proof.
@MattJackson
MattJackson added this pull request to the merge queue Oct 10, 2026
@MattJackson
MattJackson removed this pull request from the merge queue due to a manual request Oct 10, 2026
@MattJackson
MattJackson added this pull request to the merge queue Oct 10, 2026
@MattJackson
MattJackson removed this pull request from the merge queue due to a manual request Oct 10, 2026
@MattJackson
MattJackson added this pull request to the merge queue Oct 10, 2026
@MattJackson
MattJackson removed this pull request from the merge queue due to a manual request Oct 10, 2026
@MattJackson MattJackson added fixing and removed fixing labels Oct 10, 2026
@MattJackson MattJackson added fixing and removed fixing labels Oct 10, 2026
@MattJackson MattJackson added fixing and removed fixing labels Oct 10, 2026
The busbar x auth lowering (51 -> 49) made this candidate arm the
kind-isolation:law0 row. That row is red at the tree for four standing
rises this branch did not cause and cannot drain here (busbar x
instance:secret 37/35, busbar x plane 824/822, busbar x vendor 90/89,
busbar-plugin-loader x transport 190/186, plus the busbar-kernel x
plane slack). So the turnstile denied it as "armed red".

qa/kind-isolation.toml goes back to predev's bytes. The row's figure
returns to the base's 13 (the 2-hit busbar x auth slack this branch
drained, now with no ledger edit), so it stays a standing red and is
not worse. The slack licenses nothing: kind-isolation:law0-base (#747)
judges every neutral cell against the merge-base, so a hit written into
it is still red. Lowering the row is for the landing that makes law0
green.

Not proved on Latchkey: the run budget is spent (RUN_CAP 4000/4000).
Reasoned from the CI verdict of run 38090752431 (law0 figure 13 -> 11,
base 13, armed red only because the ledger changed). The PR's CI is the
proof.
Ruling: the drain lowers its [[law0]] row. BUSBAR-1.6.0.md:2093 (Law 9,
origin/predev): "The drain runs behind it, ratcheting the ceiling down."
The gate says the same: law0-slack "lower the `[[law0]]` row to {now} in
the commit that drained it" (xtask kind_isolation/matrix.rs).

Why the lane was stuck: the row's figure is |measured - ceiling| summed
per cell (law0_off), so the two auth hits this lane removed with its
skip text read as 2 hits of slack, 11 -> 13, with the ledger untouched
(214973e). With it lowered the figure is the base's 11, but engine
7ab2191 charged the whole row as "armed red" for predev's standing
cells (instance:secret, plane, vendor, loader x transport). That is the
row-wide rule busbar-release 5a1380d (dev) replaced: an armed row is
charged only with the cells its ledger change moves or grows. This lane
moves busbar x auth only, which stands at 49 = 49.

So this lands green once ENGINE_REF carries busbar-release 5a1380d.
Under 7ab2191 it reads armed red, as 0efa8f5 did.

Not proved on Latchkey: run budget spent (RUN_CAP 4000/4000). The
measure 49 is run 38090752431's (figure 13 -> 11 with this row at 49).
@MattJackson MattJackson added fixing and removed fixing labels Oct 11, 2026
@MattJackson

Copy link
Copy Markdown
Collaborator Author

Claim released by busbar-release: the fixing label had no live agent behind it: no push and no new claim for 18h03m (the longest agent's hard timeout is 2h00m), so it is off and the PR is back in the pipeline.

@MattJackson

Copy link
Copy Markdown
Collaborator Author

Re-run by busbar-release: the engine pin ENGINE_REF 937eae641 now contains busbar-release 5a1380d, which the owner question this PR was held on names; the failed jobs of 0e1090f are re-run and the hold is lifted.

- busbar tests/mcp_stdio_serve.rs: record_skip stays deleted and a missing OIDC cdylib still
  panics through common::plugins::missing; predev's harness first-party key and the first-party
  signed tarball are kept.
@MattJackson
MattJackson added this pull request to the merge queue Oct 12, 2026
Merged via the queue into predev with commit 0d85cbf Oct 12, 2026
11 checks passed
@MattJackson
MattJackson deleted the lane-task-row-114b-root-crate-silent-skips branch October 12, 2026 17:19
MattJackson added a commit that referenced this pull request Oct 12, 2026
MattJackson added a commit that referenced this pull request Oct 12, 2026
…skip (#712's no-silent-skip); the collapse plant keeps the door's other renderer

- crates/busbar `linked-section`: plane-streaming = "streams", so the build sets
  `linked_section_streams` where the door that declares `streams` is linked (held to the door's
  Statement by root::linked's test, as the tools and decisions rows are)
- serve_tests `session_door` and secret_source's two session-door cells are compiled under that cfg
  and fail, never skip, when the door is not found (no_silent_skip named the four `skip:` prints)
- p_item_refusal_reason_collapse: the plant puts `refusal_body` back the old way inside the door's
  real source, so `refusal_render` is still read (and clean) and the plant's two findings stay exact
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.

1 participant