row 178: a capability-equality cell's own test must run in CI, not only its root cell by MattJackson · Pull Request #1476 · GetBusbar/busbar · GitHub
Skip to content

row 178: a capability-equality cell's own test must run in CI, not only its root cell - #1476

Merged
MattJackson merged 5 commits into
devfrom
lane-row178-ledger-runs-in-ci
Oct 24, 2026
Merged

MattJackson merged 5 commits into
devfrom
lane-row178-ledger-runs-in-ci

Conversation

@MattJackson

@MattJackson MattJackson commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Status row 178 (Law 10, docs/design/BUSBAR-1.6.0.md "Law 10"): a proof ledger may only cite a test that runs in CI.

What was left after #1306

#1306 held the root column of qa/teller-steps.json and qa/capability-equality.json to the build CI's test check compiles, using xtask/src/ci_cfg.rs. The capability-equality ledger's own column was still checked as text by crates/busbar/tests/capability_equality.rs. As a result, audit-chain×llm stayed proven by crates/busbar/src/root/tests/plane_node.rs::every_unit_the_node_answers_served_or_refused_seals_one_record_on_one_tamper_evident_chain. That file compiles only under #[cfg(all(test, linked_axis_node))] (root/plane_node.rs:2973), which no CI build enables.

The fix

teller-steps:equality-root-cells now also checks each proven cell's own test when it cites the composition root's build:

  • a file busbar's module tree reaches (door cells included);
  • any file under crates/busbar/src/ (if no mod reaches it, that is a refusal);
  • an integration-test target crates/busbar/tests/<name>.rs, resolved over that target's own module tree. It is refused when its [[test]] required-features are not in CI's default build.

Every workspace crate, not only the root (cba5331)

The first cut skipped citations into other workspace members. 7 own-column citations into busbar-kernel and busbar-plane-llm were never judged. CiView::judge now resolves a cited file in the target that compiles it, under that target's crate's build:

  • the root's binary;
  • the root's integration-test targets, [[test]] paths and auto-discovered tests/<x>.rs / tests/<x>/main.rs. libtest_path now follows hook_parity_driver's generated driver_proofs.rs include to the plane crate's tests/on_driver/, keyed by the driver-proofs row's feature;
  • any other member's lib, bin and test targets, under ci_cfg::CiBuild::of_member_manifest. Its build is cfg(test), plus the closure of default and of the self dev-dependency's features as a floor. Any other feature is unknown, because --workspace unifies features. No linked_* cfg applies.

A file of a workspace crate that no target reaches is refused. Files in pinned plugin repos (a2a, mcp, streaming) are left to those repos' own CI.

Module trees now cache file items by text, so the walks repeated for each plant stay inside the selftest budget.

RED plants (selftest)

  • A cell's own test under cfg(linked_axis_node) turns the row red and names the cfg.
  • A cell's own test in a target whose required-features CI lacks turns the row red and names required-features.
  • A kernel cell under a feature its CI build is not shown to enable turns the row red and names that feature.
  • A cited cell in a kernel file that no target reaches turns the row red with "reached by no target".

Unit tests: equality_target_tests, a_driver_proofs_include_reaches_the_rows_plane_crate_cases, a_member_build_is_its_default_and_self_dev_closure_and_other_features_are_unknown.

GREEN twin

audit-chain×llm is repointed to a new door-path cell, serve_tests.rs::the_pools_door_seals_every_unit_served_or_refused_on_one_tamper_evident_chain (cfg(linked_driver_proofs), on by default). The test serves one unit and has a second refused because its budget is spent. That gives two records, contiguous and linked. AuditChain::verify_window passes on them and fails on a forged copy.

Guarded files: xtask/src/gates/teller_steps.rs, qa/capability-equality.json.

…o (row 178)

#1306 held the root column of both ledgers to the build CI's test check
runs. The capability-equality ledger's own column was still read as text:
audit-chain x llm stayed proven by root/tests/plane_node.rs, a node-axis
cell compiled under cfg(linked_axis_node), which no CI build enables
(Law 10, docs/design/BUSBAR-1.6.0.md).

- teller-steps:equality-root-cells now judges each proven cell's own test
  wherever it cites the composition root's build: a file its module tree
  reaches (door cells included), anything under crates/busbar/src/, or one
  of crates/busbar/tests/<name>.rs, resolved over that target's own tree
  and refused when its [[test]] required-features are off in CI's build.
- RED plants: a cell's own test under cfg(linked_axis_node), and one in a
  target whose required-features CI lacks. Unit tests for the target and
  required-features reading.
- audit-chain x llm is repointed to a new door-path cell,
  the_pools_door_seals_every_unit_served_or_refused_on_one_tamper_evident_chain:
  a served and a budget-refused unit seal two linked records, the window
  verifies, and a record altered after its seal breaks it.
…es no plane (row 178)

The own-column check refused egress-auth x llm's cell under
cfg(all(test, linked_every_auth)) as a cfg it could not answer. build.rs
emits it when every row on the auths axis is enabled, which the default
row does; ci_cfg now derives it the same way, with a unit test.

The new audit-chain door cell named the plane twice (instance name and
doc), growing busbar x plane's Law 0 count 350 -> 352; both words go.
…, driver-proofs cases included (row 178)

The own column was judged only when it cited the composition root's
build; citations into other workspace members (busbar-kernel,
busbar-plane-llm) were skipped. CiView::judge now resolves a cited file
in the target that compiles it: the root's binary, its integration-test
targets (the hook_parity_driver target's generated driver_proofs.rs
include is now followed to the plane crate's tests/on_driver/), and any
other member's lib, bin and test targets, each under that crate's
build (ci_cfg::CiBuild::of_member_manifest: cfg(test), the default and
self dev-dependency closure as a floor, other features unknown).
A workspace file no target reaches is a refusal. Pinned plugin repos'
files stay with their own CI.

RED plants: a kernel cell under a feature CI is not shown to enable,
and a kernel file no target reaches. Module trees memoise file items by
text so the per-plant walks stay inside the selftest budget.
@MattJackson
MattJackson merged commit c10f988 into dev Oct 24, 2026
1 check failed
@MattJackson
MattJackson deleted the lane-row178-ledger-runs-in-ci branch October 24, 2026 03:00
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