Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
29d8132
plane/approvals: delete the kernel's dead copy of the plane's ask-sta…
MattJackson Oct 8, 2026
d11b869
approvals_tests: rustfmt
MattJackson Oct 8, 2026
1bf3604
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
8e3ea4f
qa/kind-isolation: lower busbar-kernel x instance:secret law0 ceiling…
MattJackson Oct 10, 2026
a296d86
Merge remote-tracking branch 'origin/predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
66b2cfa
Merge remote-tracking branch 'origin/predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
03fc0f3
qa/kind-isolation: lower busbar-kernel x plane law0 ceiling 1175 -> 1171
MattJackson Oct 10, 2026
7fb5838
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
3c571e8
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
0605d1f
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
ac8cde5
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
c305ab5
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
682e211
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
f9045ea
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
28ce5ca
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
be88259
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
7b49e62
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
3c1d467
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 10, 2026
16c0116
qa/kind-isolation: lower busbar-kernel × plane law0 ceiling 1171 -> 1169
MattJackson Oct 11, 2026
9096eea
Merge remote-tracking branch 'origin/predev' into q128-k2-h3-askstate
MattJackson Oct 11, 2026
2b6b6a6
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 11, 2026
866c871
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 11, 2026
fcb2a4c
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 11, 2026
ca12c6d
Merge branch 'predev' into q128-k2-h3-askstate
MattJackson Oct 11, 2026
388ec30
Merge origin/predev 1617e9f019 into q128-k2-h3-askstate
MattJackson Oct 12, 2026
eb31830
row 130 E1: the hyper serve loop leaves busbar-kernel; the kernel's n…
MattJackson Oct 12, 2026
bc8fb93
row 130 E2: net_guard leaves busbar-kernel; the kernel resolves no na…
MattJackson Oct 12, 2026
1378e88
decisions: a request routes by its model, and upstream_model is splic…
MattJackson Oct 12, 2026
fd8bf00
decisions: a success bills one decision or its count, and its tokens …
MattJackson Oct 12, 2026
4809d85
decisions: a unit's state ends with the unit, live units are never ev…
MattJackson Oct 12, 2026
7ff46e3
decisions: the second dialect, nanojev, on /api/evaluate, metered by …
MattJackson Oct 12, 2026
b8a165c
row 130 E2: ledgers follow the net_guard deletion
MattJackson Oct 12, 2026
40e416c
Merge origin/predev into q128-k2-h3-askstate; kind-isolation busbar-k…
MattJackson Oct 12, 2026
161a883
Merge remote-tracking branch 'origin/predev' into lane-egress-e1-list…
MattJackson Oct 12, 2026
c8c1574
Merge branch 'lane-egress-e1-listener' into lane-egress-e2-net-guard
MattJackson Oct 12, 2026
cce32ac
Merge origin/predev into q128-k2-h3-askstate
MattJackson Oct 13, 2026
8fbaf72
Merge remote-tracking branch 'origin/predev' into lane-egress-e2-net-…
MattJackson Oct 13, 2026
7680dd6
Merge origin/predev into lane-audit-decisions-nanojev
MattJackson Oct 13, 2026
028c1d7
Merge remote-tracking branch 'origin/predev' into lane-egress-e2-net-…
MattJackson Oct 13, 2026
681f145
Merge remote-tracking branch 'origin/predev' into wt807
MattJackson Oct 13, 2026
ed735b2
cli_validate: the new dialect cells name the kind, not the instance (…
MattJackson Oct 13, 2026
f98fb10
Merge remote-tracking branch 'origin/predev' into lane-egress-e2-net-…
MattJackson Oct 13, 2026
f190d4e
row 130 E2: the kernel's name lookup is the connector's host I/O
MattJackson Oct 13, 2026
29b7ca3
Merge origin/predev into q128-k2-h3-askstate; kernel x plane = predev…
MattJackson Oct 13, 2026
eccc0a9
Merge remote-tracking branch 'origin/predev' into lane-audit-decision…
MattJackson Oct 13, 2026
77c5f4f
Merge origin/predev (c89729d6b1) into lane-egress-e2-net-guard
MattJackson Oct 13, 2026
891c394
decisions plane: the arrival count is the SDK's per-instance keyed st…
MattJackson Oct 13, 2026
9a66bfa
Merge remote-tracking branch 'origin/predev' into lane-egress-e2-net-…
MattJackson Oct 13, 2026
d91c2c2
Merge origin/predev into q128-k2-h3-askstate; kernel x plane = predev…
MattJackson Oct 13, 2026
9ed8689
flakes (rows 161, 162): drain-scaling test judges CPU time; neutralit…
MattJackson Oct 13, 2026
c032f25
flake (row 160): ledger_identity waits for the admin door to answer b…
MattJackson Oct 13, 2026
5ae1e6f
no-silent-skip sweep (row 114): the scrape-sink test is cfg-gated on …
MattJackson Oct 13, 2026
442a2d6
no-silent-skip: drop the busbar-llm edit (row 155 deletes the crate)
MattJackson Oct 13, 2026
74a45bd
connector: the datagram driver presents the keying-material item once…
MattJackson Oct 13, 2026
4801121
plane money: a served unit's declared class counts reach its plane's …
MattJackson Oct 13, 2026
ea9c2a0
connector: the dialling datagram association judges every candidate b…
MattJackson Oct 13, 2026
06e22ef
connector: one datagram port carries many associations, each found by…
MattJackson Oct 13, 2026
e07e83a
linked.rs: gate the scrape-sink test on the linked export-doors axis …
MattJackson Oct 13, 2026
da4748d
connector datagram driver: the framer's answered datagram is sent by …
MattJackson Oct 13, 2026
f55a21a
Merge branch 'lane-webrtc-terminate' into lane-webrtc-terminate-dial
MattJackson Oct 13, 2026
fdc9ddb
Merge branch 'lane-webrtc-terminate-dial' into lane-webrtc-terminate-…
MattJackson Oct 13, 2026
6b3fd07
approvals_tests: drop the spend-once cell; SpentTokenLedger::spend le…
MattJackson Oct 13, 2026
943d7dd
kind-isolation: the kernel names no store crate; its tests link an in…
MattJackson Oct 13, 2026
07a23cb
retire busbar-release from busbar: delete promote.yml; ModernCI alone…
MattJackson Oct 13, 2026
58f9510
ci: test-gated check runs the feature-gated suites (row 164); default…
MattJackson Oct 13, 2026
98026e8
row 155: the door path serves budget `on_exhaust: downgrade` as 1.5.5…
MattJackson Oct 13, 2026
8cf3559
root: one shutdown tail; stdio serve mode drains the journal lane and…
MattJackson Oct 13, 2026
82ebb08
Merge pull request #674 from GetBusbar/q128-k2-h3-askstate
MattJackson Oct 13, 2026
e8544d0
Merge pull request #828 from GetBusbar/lane-ki-kernel-store-edge
MattJackson Oct 13, 2026
2e35aa6
Merge pull request #807 from GetBusbar/lane-audit-decisions-nanojev
MattJackson Oct 13, 2026
91f44b0
Merge pull request #816 from GetBusbar/lane-no-silent-skip
MattJackson Oct 13, 2026
5b5bae3
Merge pull request #814 from GetBusbar/lane-p6-flakes-11
MattJackson Oct 13, 2026
5c99bef
Merge pull request #822 from GetBusbar/lane-money-123
MattJackson Oct 13, 2026
79283d5
.ci/predev.yaml: the predev -> dev move is judged absolute and from p…
MattJackson Oct 13, 2026
18c234c
llm codec $: image answers' token counts are recorded, not billed, as…
MattJackson Oct 13, 2026
eb57696
row 155: the downgrade tests name their pools in neutral words (kind-…
MattJackson Oct 13, 2026
a1003c6
row 155 (L1#1): the llm door keeps a retried unit for the kernel's ne…
MattJackson Oct 13, 2026
54bc2cc
spec §11.11 R4: the secret kind's file source may use the bounded dis…
MattJackson Oct 13, 2026
561901f
row 159: the shared comment scanner keeps string state across lines, …
MattJackson Oct 13, 2026
69b70f7
Merge origin/predev (5c99befcfa) into lane-egress-e1-listener
MattJackson Oct 13, 2026
2583e80
Merge #796 (lane-egress-e1-listener 69b70f7816, carrying predev 5c99b…
MattJackson Oct 13, 2026
13cb80a
register: the fidelity-rule byte moves of the Chat, Responses and Gem…
MattJackson Oct 13, 2026
b89d432
llm codec: no process-global or per-thread state in the entropy seam …
MattJackson Oct 13, 2026
d3166b0
llm codec: the event-stream drain's linearity is counted in work unit…
MattJackson Oct 14, 2026
e00f1d1
llm codec: Gemini moderation and rerank always target :generateConten…
MattJackson Oct 14, 2026
9c867d1
tests: child halves and an opt-in measurement no longer pass by retur…
MattJackson Oct 14, 2026
3a4c79c
Merge remote-tracking branch 'origin/lane-p3-plane-cut-final' into la…
MattJackson Oct 14, 2026
6d5642b
Merge pull request #800 from GetBusbar/lane-egress-e2-net-guard
MattJackson Oct 14, 2026
7e2dcb7
Merge pull request #829 from GetBusbar/lane-retire-brel-promote
MattJackson Oct 14, 2026
afd4bb0
Merge pull request #851 from GetBusbar/lane-row166-r4-spec
MattJackson Oct 14, 2026
9c248f1
Merge pull request #889 from GetBusbar/lane-p6-silent-skip-2
MattJackson Oct 14, 2026
2e32124
Merge pull request #882 from GetBusbar/lane-llm-codec-gemini-path
MattJackson Oct 14, 2026
163843d
Merge pull request #815 from GetBusbar/lane-p6-flakes-12
MattJackson Oct 14, 2026
50ab540
Merge remote-tracking branch 'origin/predev' into lane-retire-brel-de…
MattJackson Oct 14, 2026
47fe06a
Merge origin/predev into lane-llm-codec-eventstream-linear: the drain…
MattJackson Oct 14, 2026
1d37d86
Merge pull request #867 from GetBusbar/lane-llm-codec-register
MattJackson Oct 14, 2026
b3d2dad
bin/oracle: on Linux the judge is fetched, busbar-release's published…
MattJackson Oct 14, 2026
6913fd6
connector: read_terms copies the stated fingerprint after the bounds …
MattJackson Oct 14, 2026
701f3a3
Merge lane-webrtc-terminate (#819: the fingerprint borrow and the see…
MattJackson Oct 14, 2026
5767d66
Merge lane-webrtc-terminate-dial (carrying #819's compile fix) into l…
MattJackson Oct 14, 2026
796beae
connector tests: the scripted framer reads its own password before it…
MattJackson Oct 14, 2026
bd4d35d
.ci/predev.yaml: the oracle check obtains its judge through bin/oracl…
MattJackson Oct 14, 2026
488c02d
.ci/predev.yaml: deadline 8h (plane-delete --all, two LTO release bui…
MattJackson Oct 14, 2026
41fd7c5
Merge pull request #855 from GetBusbar/lane-audit-xtask-comment-scanner
MattJackson Oct 14, 2026
c2c3f54
xtask: RED — a suite step must build the example cdylibs its tests lo…
MattJackson Oct 14, 2026
f6ada72
ci: the suite steps build the loader's and busbar's example cdylibs b…
MattJackson Oct 14, 2026
c83d790
llm codec $: an unreadable image token count is a refusal, never a re…
MattJackson Oct 14, 2026
461acdb
llm codec $: an unreadable image token count is UNKNOWN; the answer i…
MattJackson Oct 14, 2026
52f970f
Merge origin/predev into lane-llm-billing-image-tokens: the Imagen wr…
MattJackson Oct 14, 2026
6f04f4e
Merge pull request #872 from GetBusbar/lane-llm-codec-eventstream-linear
MattJackson Oct 14, 2026
c81fb63
Merge pull request #846 from GetBusbar/lane-llm-billing-image-tokens
MattJackson Oct 14, 2026
276a156
Merge pull request #869 from GetBusbar/lane-llm-codec-state
MattJackson Oct 14, 2026
93f25e2
connector tests: the datagram rig's into_host is deliver (clippy wron…
MattJackson Oct 14, 2026
a5f7a22
Merge lane-webrtc-terminate (#819: the rig's into_host is deliver) in…
MattJackson Oct 14, 2026
c24b772
Merge lane-webrtc-terminate-dial (#819's deliver rename) into lane-we…
MattJackson Oct 14, 2026
4f9a948
Merge pull request #827 from GetBusbar/lane-webrtc-terminate-port
MattJackson Oct 14, 2026
1d111f2
Merge pull request #833 from GetBusbar/lane-p3-llm-downgrade
MattJackson Oct 14, 2026
a2f879a
row 155: the usage-tap fault leaves the contract; the door returns it…
MattJackson Oct 14, 2026
4e3f943
row 155: the linked engine's relay end hands its usage-tap fault to t…
MattJackson Oct 14, 2026
eaf3bde
row 155: keep the tap-fault hunks off #890's (the door names TAP_FAUL…
MattJackson Oct 14, 2026
e567561
row 155: the tap-fault byte is a closed enum; the kernel counts any o…
MattJackson Oct 14, 2026
ec167b0
row 155 (#1030 compile red): the legacy engine counts the tap fault t…
MattJackson Oct 14, 2026
14fe4c7
Merge pull request #839 from GetBusbar/lane-audit-stdio-drain
MattJackson Oct 14, 2026
8d5c345
Merge remote-tracking branch 'origin/predev' into lane-p3-llm-codec-t…
MattJackson Oct 14, 2026
4788be0
row 155 (#1030 clippy red): drop the now-unused usage_tap_fault impor…
MattJackson Oct 14, 2026
d7c652d
Merge pull request #924 from GetBusbar/lane-ci-test-examples
MattJackson Oct 14, 2026
3e3df04
Merge origin/predev (d7c652d440, #924) into lane-retire-brel-dev-abso…
MattJackson Oct 14, 2026
bad5943
Merge pull request #1030 from GetBusbar/lane-p3-llm-codec-tap-latch
MattJackson Oct 14, 2026
17490ab
Merge pull request #909 from GetBusbar/lane-retire-brel-dev-absolute
MattJackson Oct 14, 2026
f70f567
Merge pull request #911 from GetBusbar/lane-retire-brel-oracle-fetch
MattJackson Oct 14, 2026
f487e84
row 155 (L1#1): the door-unit tests drive the door from tests/conform…
MattJackson Oct 14, 2026
18bebfc
Merge remote-tracking branch 'origin/predev' into lane-p3-llm-retry
MattJackson Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .ci/default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
to: predev
on_green: merge
deadline: 6h
# The PR battery, named explicitly so a check declared below but NOT listed here is on-demand only
# (`modernci call measure {repo, from, check}`), never run on every move.
on:
move: [preflight, gates, clippy, compile, test, doctest, deletion-matrix, deny]
manual: [oracle, test-gated]
env:
RUSTFLAGS: "-D warnings"
CARGO_TERM_COLOR: never
Expand Down Expand Up @@ -44,6 +49,13 @@ checks:
run: |
meta=$(cargo metadata --format-version 1 --locked)
cargo build --locked $(echo "$meta" | jq -r '.workspace_members as $m | .packages[] | select(.id as $i | $m | index($i)) | select(any(.targets[]; .kind | index("cdylib"))) | "-p " + .name')
# The example cdylibs the tests dlopen, built BY NAME and always: the loader's (the neutral frame
# door and the other door fixtures, which busbar's and the connector's tests load too) and
# busbar's test plane. A run scoped to `busbar` alone builds no other package's examples, and a
# test whose fixture is absent fails rather than skips; no variable tells this step the
# affected set, so the build does not wait on one.
cargo build --locked -p busbar-plugin-loader --examples
cargo build --locked -p busbar --examples
plugin() {
man=$(echo "$meta" | jq -r --arg p "$1" 'first(.packages[] | select(.name == $p) | .manifest_path) // empty')
if [ -z "$man" ]; then [ "$3" = optional ] && return 0; echo "busbar resolves no $1"; return 1; fi
Expand Down Expand Up @@ -71,6 +83,44 @@ checks:
# The selftests run the gates over the real tree, merge-base included.
requires: [git-history]
needs: [gates]
test-gated:
# The feature-gated suites the `test` check never builds (row 164): `test` runs default features
# only. A, the busbar/kernel/core-admin gates at once (test-harness, llm-on-driver,
# transport-webrtc, openapi-schema, timing), filtered to the gated binaries and modules so the
# default suites do not run twice; B, the plugin-pack CLI (pack); C, the loom models in release.
run: |
meta=$(cargo metadata --format-version 1 --locked)
cargo build --locked $(echo "$meta" | jq -r '.workspace_members as $m | .packages[] | select(.id as $i | $m | index($i)) | select(any(.targets[]; .kind | index("cdylib"))) | "-p " + .name')
# The example cdylibs the tests dlopen, built BY NAME and always: the loader's (the neutral frame
# door and the other door fixtures, which busbar's and the connector's tests load too) and
# busbar's test plane. A run scoped to `busbar` alone builds no other package's examples, and a
# test whose fixture is absent fails rather than skips; no variable tells this step the
# affected set, so the build does not wait on one.
cargo build --locked -p busbar-plugin-loader --examples
cargo build --locked -p busbar --examples
plugin() {
man=$(echo "$meta" | jq -r --arg p "$1" 'first(.packages[] | select(.name == $p) | .manifest_path) // empty')
if [ -z "$man" ]; then [ "$3" = optional ] && return 0; echo "busbar resolves no $1"; return 1; fi
ws="$(dirname "$man")/Cargo.toml"
pkgs=$(cargo metadata --format-version 1 --no-deps --manifest-path "$ws" | jq -r '.packages[].name')
if ! printf '%s\n' $pkgs | grep -qx "$2"; then [ "$3" = optional ] && return 0; echo "$1 has no $2"; return 1; fi
if [ "$3" = dropped-in ] && cargo metadata --format-version 1 --no-deps --manifest-path "$ws" | jq -e --arg p "$2" '.packages[] | select(.name == $p) | .features | has("dropped-in")' >/dev/null; then
cargo build --locked --manifest-path "$ws" -p "$2" --features dropped-in --target-dir "$PWD/target"
else
cargo build --locked --manifest-path "$ws" -p "$2" --target-dir "$PWD/target"
fi
}
plugin busbar-transport-tcp-plugin busbar-transport-tcp-plugin dropped-in
plugin busbar-transport-http busbar-transport-http-plugin dropped-in
plugin busbar-secret-env busbar-secret-env-plugin optional
plugin busbar-plane-decisions busbar-plane-decisions-plugin optional
cargo build --workspace --locked
cargo nextest run --locked --no-fail-fast -p busbar -p busbar-kernel -p busbar-core-admin --features busbar/test-harness,busbar/llm-on-driver,busbar/transport-webrtc,busbar/openapi-schema,busbar-kernel/timing -E 'binary(mcp_stdio_serve) | binary(hook_parity_driver) | binary(admin_cross_plane) | binary(timing_smoke) | package(busbar-core-admin) | (package(busbar-kernel) & test(/timing::/)) | (package(busbar) & test(/(serve_tests|secret_source|connector|boot)::/))'
cargo nextest run --locked --no-fail-fast -p busbar-plugin-loader --features pack -E 'binary(/busbar-plugin-pack/)'
timeout 3000 cargo test --release --locked -p busbar-kernel --features loom-model txn_loom
baseline: target
requires: [git-history]
needs: [gates]
doctest:
run: cargo test --workspace --doc --locked --no-fail-fast
scope: affected
Expand All @@ -88,3 +138,24 @@ checks:
baseline: target
requires: [cargo-deny]
needs: [preflight]
# ON-DEMAND ONLY (not in on.move): the predev->dev oracle, measurable on a PR head that changes the
# served LLM path (e.g. a plane default flip), so claim C3 is proven before landing, not only at the move.
oracle:
# busbar's own check tool, the pinned busbar-oracle (the backend's busbar-oracle tool sets
# BUSBAR_ORACLE_RUST_BIN): the judge is the one dev's oracle-rust.pin names, run only when its
# sha256 is that pin's for this host (a candidate never picks its own judge); the 1.5.5 golden is
# add-only from dev to this commit; then the candidate's release binary is recorded over the
# corpus and replayed against the committed 1.5.5 golden, strict: green is every cell byte-green
# or forgiven by an owner-signed accepted difference.
run: |
pin=$(git show "$MODERNCI_TO_SHA:testing/shadow-oracle/oracle-rust.pin")
want=$(printf '%s\n' "$pin" | sed -n "s/^sha256_linux_$(uname -m)=//p")
[[ "$want" =~ ^[0-9a-f]{64}$ ]] || { echo "ORACLE-PIN: oracle-rust.pin at $MODERNCI_TO_SHA pins no linux $(uname -m) judge"; exit 1; }
echo "$want $BUSBAR_ORACLE_RUST_BIN" | sha256sum -c -
"$BUSBAR_ORACLE_RUST_BIN" golden-guard --repo . --base "$MODERNCI_TO_SHA" --head HEAD
cargo build --locked --release -p busbar --bin busbar
./bin/oracle fetch-golden
rm -rf target/oracle/recordings/candidate target/oracle/reports/dev
./bin/oracle record --bin target/release/busbar --plane all --out target/oracle/recordings/candidate
./bin/oracle replay --golden testing/shadow-oracle/golden/1.5.5 --candidate target/oracle/recordings/candidate --out target/oracle/reports/dev --strict
needs: [gates]
100 changes: 77 additions & 23 deletions .ci/predev.yaml
Original file line number Diff line number Diff line change
@@ -1,42 +1,52 @@
# What predev must pass to move into dev: busbar-release's `dev` rung (crates/busbar-release-cli/
# ladder.json: gates inherit, oracle, conformance; verdict absolute), the 1.6.0 done-oracle, and the
# Q128 architecture audit (`cargo xtask q128 audit`). ModernCI names a branch file for the branch
# being moved, so the move predev -> dev reads this file. Shadow while busbar-release still decides.
# What predev must pass to move into dev: the `dev` rung (gates, oracle, conformance), the 1.6.0
# done-oracle, and the Q128 architecture audit (`cargo xtask q128 audit`). ModernCI names a branch
# file for the branch being moved, so the move predev -> dev reads this file, and ModernCI alone
# judges it: promote.yml, the busbar-release hop that judged it before, is deleted (OWNER
# 2026-10-12, "ModernCI only"; docs/design/BUSBAR-1.6.0.md Part 6, "BUSBAR-RELEASE RETIRED FROM
# BUSBAR"). Its green landing is DEV-GREEN.
to: dev
on_green: merge
# The owner's approval on the pull request holds the merge too; q128-audit gates the move on the
# audit's record for the commit (no open BLOCK).
approve: true
deadline: 6h
# 8h: plane-delete --all (40-90 min), two LTO release builds and the workspace tests do not fit in 6h.
deadline: 8h
env:
RUSTFLAGS: "-D warnings"
CARGO_TERM_COLOR: never
CARGO_PROFILE_DEV_DEBUG: "0"
CARGO_INCREMENTAL: "0"
on:
move: [gates, oracle, conformance, verify-done, q128-audit]
move: [gates, oracle, conformance, verify-done, q128-audit, test-gated]
checks:
gates:
# The rung inherits predev's boarded gates; here they are re-run on the commit, no worse than
# dev, as the predev file runs them.
# The rung re-runs every registered gate on the commit, ABSOLUTE (no `baseline`: every row
# green, not "no worse than dev"; dev holds no xtask and no ledgers to be measured against).
# The base-relative rules (new edges, minted rows) take predev's own last landed commit as their
# base: every lane move already judged its delta against predev, so dev is never the base.
run: |
export XTASK_CEILING_BASE="$MODERNCI_TO_SHA" XTASK_SHIP_TARGET="$MODERNCI_TO"
export XTASK_CEILING_BASE="$(git rev-parse "$MODERNCI_HEAD~1")" XTASK_SHIP_TARGET="$MODERNCI_TO"
cargo xtask gate --all --format=tsv
baseline: target
rules: ["qa/*.toml"]
# The base-relative rules read history: only a backend with the repo's history runs this check.
requires: [git-history]
oracle:
# busbar's own check tool, the pinned busbar-oracle (the backend's busbar-oracle tool sets
# BUSBAR_ORACLE_RUST_BIN): the judge is the one dev's oracle-rust.pin names, run only when its
# sha256 is that pin's for this host (a candidate never picks its own judge); the 1.5.5 golden is
# add-only from dev to this commit; then the candidate's release binary is recorded over the
# corpus and replayed against the committed 1.5.5 golden, strict: green is every cell byte-green
# or forgiven by an owner-signed accepted difference.
# busbar's own judge, obtained by bin/oracle itself (OWNER 2026-10-13: no hand-installed tools;
# #911): on Linux it fetches busbar-release's published busbar-oracle for the BASE pin's
# release_ref ($MODERNCI_TO_SHA's testing/shadow-oracle/oracle-rust.pin, or this tree's when dev
# holds none: the first move) and runs it only at that pin's sha256 for this architecture, its
# .sig verified against busbar-release's release key; no line for this architecture is no judge.
# BUSBAR_RELEASE_TOKEN (a secret ModernCI gives this check) reads the private release. The 1.5.5
# golden is add-only from dev to this commit wherever dev holds it (none before the first move);
# then the candidate's release binary is recorded over the corpus and replayed against the
# committed 1.5.5 golden, strict: green is every cell byte-green or forgiven by an owner-signed
# accepted difference.
run: |
pin=$(git show "$MODERNCI_TO_SHA:testing/shadow-oracle/oracle-rust.pin")
want=$(printf '%s\n' "$pin" | sed -n "s/^sha256_linux_$(uname -m)=//p")
[[ "$want" =~ ^[0-9a-f]{64}$ ]] || { echo "ORACLE-PIN: oracle-rust.pin at $MODERNCI_TO_SHA pins no linux $(uname -m) judge"; exit 1; }
echo "$want $BUSBAR_ORACLE_RUST_BIN" | sha256sum -c -
"$BUSBAR_ORACLE_RUST_BIN" golden-guard --repo . --base "$MODERNCI_TO_SHA" --head HEAD
./bin/oracle tool-dir >/dev/null
if git cat-file -e "$MODERNCI_TO_SHA:testing/shadow-oracle/golden/1.5.5" 2>/dev/null; then
./bin/oracle golden-guard --repo . --base "$MODERNCI_TO_SHA" --head HEAD
else
echo "golden-guard: dev ($MODERNCI_TO_SHA) holds no golden/1.5.5; nothing to hold add-only"
fi
cargo build --locked --release -p busbar --bin busbar
./bin/oracle fetch-golden
rm -rf target/oracle/recordings/candidate target/oracle/reports/dev
Expand Down Expand Up @@ -87,9 +97,12 @@ checks:
# backend probed to have all of these, and says which one is missing otherwise.
requires: [docker, docker-compose, python3-venv, curl, git]
verify-done:
# The done-oracle, full run: exit 0 only (3 is a --fast, provisional answer).
# The done-oracle, full run: exit 0 only (3 is a --fast, provisional answer). Its PARITY group
# obtains the judge through bin/oracle as the oracle check does (BUSBAR_RELEASE_TOKEN).
run: bash scripts/verify-1.6.0-done.sh
needs: [gates]
# It reads merge-bases and tags (the config-schema baseline is tag v1.5.3): full history and tags.
requires: [git-history]
q128-audit:
# DEV-GREEN item 5 (docs/design/BUSBAR-1.6.0.md l.2910-2912; 1.6.0-QUESTIONS.md Q128, option
# A): one fresh, independent architecture audit on this commit with no open BLOCK, and a clean
Expand All @@ -99,3 +112,44 @@ checks:
# tree, or none, is a BLOCK.
run: cargo xtask q128 audit
needs: [gates]
# The audit is judged against this commit's history: full history and tags.
requires: [git-history]
test-gated:
# The feature-gated suites the `test` check never builds (row 164): `test` runs default features
# only. A, the busbar/kernel/core-admin gates at once (test-harness, llm-on-driver,
# transport-webrtc, openapi-schema, timing), filtered to the gated binaries and modules so the
# default suites do not run twice; B, the plugin-pack CLI (pack); C, the loom models in release.
run: |
meta=$(cargo metadata --format-version 1 --locked)
cargo build --locked $(echo "$meta" | jq -r '.workspace_members as $m | .packages[] | select(.id as $i | $m | index($i)) | select(any(.targets[]; .kind | index("cdylib"))) | "-p " + .name')
# The example cdylibs the tests dlopen, built BY NAME and always: the loader's (the neutral frame
# door and the other door fixtures, which busbar's and the connector's tests load too) and
# busbar's test plane. A run scoped to `busbar` alone builds no other package's examples, and a
# test whose fixture is absent fails rather than skips; no variable tells this step the
# affected set, so the build does not wait on one.
cargo build --locked -p busbar-plugin-loader --examples
cargo build --locked -p busbar --examples
plugin() {
man=$(echo "$meta" | jq -r --arg p "$1" 'first(.packages[] | select(.name == $p) | .manifest_path) // empty')
if [ -z "$man" ]; then [ "$3" = optional ] && return 0; echo "busbar resolves no $1"; return 1; fi
ws="$(dirname "$man")/Cargo.toml"
pkgs=$(cargo metadata --format-version 1 --no-deps --manifest-path "$ws" | jq -r '.packages[].name')
if ! printf '%s\n' $pkgs | grep -qx "$2"; then [ "$3" = optional ] && return 0; echo "$1 has no $2"; return 1; fi
if [ "$3" = dropped-in ] && cargo metadata --format-version 1 --no-deps --manifest-path "$ws" | jq -e --arg p "$2" '.packages[] | select(.name == $p) | .features | has("dropped-in")' >/dev/null; then
cargo build --locked --manifest-path "$ws" -p "$2" --features dropped-in --target-dir "$PWD/target"
else
cargo build --locked --manifest-path "$ws" -p "$2" --target-dir "$PWD/target"
fi
}
plugin busbar-transport-tcp-plugin busbar-transport-tcp-plugin dropped-in
plugin busbar-transport-http busbar-transport-http-plugin dropped-in
plugin busbar-secret-env busbar-secret-env-plugin optional
plugin busbar-plane-decisions busbar-plane-decisions-plugin optional
cargo build --workspace --locked
cargo nextest run --locked --no-fail-fast -p busbar -p busbar-kernel -p busbar-core-admin --features busbar/test-harness,busbar/llm-on-driver,busbar/transport-webrtc,busbar/openapi-schema,busbar-kernel/timing -E 'binary(mcp_stdio_serve) | binary(hook_parity_driver) | binary(admin_cross_plane) | binary(timing_smoke) | package(busbar-core-admin) | (package(busbar-kernel) & test(/timing::/)) | (package(busbar) & test(/(serve_tests|secret_source|connector|boot)::/))'
cargo nextest run --locked --no-fail-fast -p busbar-plugin-loader --features pack -E 'binary(/busbar-plugin-pack/)'
timeout 3000 cargo test --release --locked -p busbar-kernel --features loom-model txn_loom
# Absolute at this rung, as every check of this move (no `baseline`: dev holds no suites to be
# measured against).
requires: [git-history]
needs: [gates]
12 changes: 4 additions & 8 deletions .github/required-status-checks.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,18 @@ Branch protection lives in repository rulesets. No script writes it.
| Branch | Ruleset | Required |
| --- | --- | --- |
| `predev` | 24945926 | ModernCI's `ci` check. ModernCI judges the PR (`.ci/default.yaml`) and lands it. |
| `dev` | 24340358 | `preflight` and `hop`, both from `.github/workflows/promote.yml` (the predev to dev promotion). |
| `dev` | 24340358 | ModernCI's `ci` check on the predev to dev move (`.ci/predev.yaml`). The ruleset still names `preflight` and `hop`, the jobs of the deleted `promote.yml`: the owner replaces them with `ci`. |
| `qa`, `main` | 24334334 | Owner-only; no status check stands in for the owner. |

Use the exact **check-run name** (the job's `name:`), not the workflow name. In `promote.yml`, `hop`
is the job id with no `name:`, so its context reads `hop`.

* `preflight`: formatting, `Cargo.lock` current, the generated C header current, on a free runner.
* `hop`: the pinned busbar-release engine plans the hop and admits the candidate (every registered
`cargo xtask gate`, plus the oracle and conformance where the rung asks for them).
Use the exact **check name** the judge posts. ModernCI posts one check, `ci`, per pull request head.

## Reusable workflows (plugin repos call these)

`plugin-ci.yml`, `plugin-consumer-verify.yml`, `plugin-repin.yml` and `plugin-release.yml` are
`workflow_call` only, called by the plugin repos' rendered callers (busbar-release `template/`,
`busbar-release plugin sync`). Their status bubbles up into the **caller's** job, so require the
caller's job in the plugin repo, never these directly.
caller's job in the plugin repo, never these directly. They stay until each plugin repo is
registered with ModernCI and judged by its own branch files.

## Branch hygiene

Expand Down
Loading