diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml new file mode 100644 index 0000000..c491a16 --- /dev/null +++ b/.buildkite/pipeline.yml @@ -0,0 +1,91 @@ +env: + CARGO_TERM_COLOR: always + +steps: + - label: ":linux: Linux ARM64" + key: linux-arm64 + concurrency: 2 + concurrency_group: "big-cabbage/tart-ci" + agents: + queue: "ci-linux-arm64" + plugins: + - github.com/Bande-a-Bonnot/tart-ci#v0.1.1: + image: "ci-linux-arm64-rust-bazel" + os: "linux" + always_pull: false + headless: true + command: | + set -euo pipefail + + if [[ -z "$${HOME:-}" || "$$HOME" == "/" ]]; then + export HOME=/home/admin + fi + export CARGO_HOME="$${CARGO_HOME:-$$HOME/.cargo}" + export RUSTUP_HOME="$${RUSTUP_HOME:-/opt/rustup}" + export PATH="/usr/local/bin:/opt/cargo/bin:$$CARGO_HOME/bin:$$PATH" + + rustc --version + cargo --version + python3 --version + + cd middens + cargo fmt --check + cargo test --locked --lib + cargo test --locked --test cucumber -- --input tests/features/smoke.feature + cargo build --release --locked + + smoke_output="$$(mktemp -d)" + smoke_xdg="$$(mktemp -d)" + XDG_DATA_HOME="$$smoke_xdg" ./target/release/middens analyze tests/fixtures --split --no-python --output "$$smoke_output" + test -f "$$smoke_output/interactive/markov.json" + test -f "$$smoke_output/subagent/markov.json" + test -f "$$smoke_output/autonomous/markov.json" + + - label: ":mac: macOS Apple Silicon" + key: macos-apple-silicon + concurrency: 2 + concurrency_group: "big-cabbage/tart-ci" + agents: + queue: "ci-macos-apple-silicon" + plugins: + - github.com/Bande-a-Bonnot/tart-ci#v0.1.1: + image: "ghcr.io/cirruslabs/macos-sequoia-base:latest" + os: "macos" + always_pull: false + headless: true + command: | + set -euo pipefail + + if [[ -z "$${HOME:-}" ]]; then + export HOME=/Users/admin + fi + export CARGO_HOME="$${CARGO_HOME:-$$HOME/.cargo}" + export RUSTUP_HOME="$${RUSTUP_HOME:-$$HOME/.rustup}" + export PATH="$$CARGO_HOME/bin:/opt/homebrew/bin:/usr/local/bin:$$PATH" + + if ! command -v cargo >/dev/null 2>&1; then + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ + | HOME="$$HOME" CARGO_HOME="$$CARGO_HOME" RUSTUP_HOME="$$RUSTUP_HOME" sh -s -- -y --profile minimal --no-modify-path + . "$$CARGO_HOME/env" + fi + + if command -v rustup >/dev/null 2>&1; then + rustup component add rustfmt + fi + + rustc --version + cargo --version + python3 --version + + cd middens + cargo fmt --check + cargo test --locked --lib + cargo test --locked --test cucumber -- --input tests/features/smoke.feature + cargo build --release --locked + + smoke_output="$$(mktemp -d)" + smoke_xdg="$$(mktemp -d)" + XDG_DATA_HOME="$$smoke_xdg" ./target/release/middens analyze tests/fixtures --split --no-python --output "$$smoke_output" + test -f "$$smoke_output/interactive/markov.json" + test -f "$$smoke_output/subagent/markov.json" + test -f "$$smoke_output/autonomous/markov.json" diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index bc9cff6..c1ae4eb 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,11 +1,17 @@ # Session Handoff -**Last updated:** 2026-06-04 (public results trusted smoke/deploy green) +**Last updated:** 2026-06-09 (Buildkite/Tart CI PR rebased on public-results work) Read this at the start of every session. Update before compaction or at natural milestones. --- +## Current session update — 2026-06-01 + +Started Buildkite/Tart CI migration on branch `chore/buildkite-tart-ci`. Added `.buildkite/pipeline.yml` with two non-credentialed PR jobs using `github.com/Bande-a-Bonnot/tart-ci#v0.1.1`: Linux ARM64 on local image `ci-linux-arm64-rust-bazel`, and macOS Apple Silicon on `ghcr.io/cirruslabs/macos-sequoia-base:latest` with Rust bootstrapped by rustup. The first slice intentionally covers lightweight Middens cross-platform checks: `cargo fmt --check`, `cargo test --locked --lib`, the Cucumber harness smoke feature, `cargo build --release --locked`, and `middens analyze tests/fixtures --split --no-python` with checks for all three stratum outputs. The full Cucumber/HF corpus batteries, scheduled workflows, release artifacts, x86_64 targets, Hugging Face registry/secrets, and large network downloads remain on GitHub Actions/deferred. + +Local validation before PR, after merging latest `origin/main`: `cd middens && cargo fmt --check`, `cargo test --locked --lib` (31 unit tests), Cucumber smoke feature, `cargo build --release --locked`, fixture split/no-python smoke, Buildkite YAML parse with Ruby, `bash -n` over both embedded commands after Buildkite dollar escaping, and `git diff --check` all passed. Full `cargo test --locked` was attempted after the latest main merge but exceeded the local harness timeout twice (>20 minutes), so it is intentionally left to the existing GitHub HF/full test workflow rather than the first Tart smoke slice. A small rustfmt-only fix was included for `middens/tests/steps/split.rs` because latest `main` had one formatting drift that would fail the new CI slice. `cargo clippy --all-targets --locked -- -D warnings` was tried before merging latest `main` but is not included in the first CI slice because current code has many pre-existing clippy warnings under the local/newer toolchain. Remote `buildkite-agent pipeline upload --dry-run` on `big-cabbage` was attempted but blocked by intermittent SSH publickey auth from this session; no host/config/image changes were made. Existing GitHub Actions `Build public results site` initially failed on PR #3; Azure-backed log/artifact downloads were unreachable from this workstation, but workflow inspection found a likely artifact path mismatch where downloaded artifacts may contain `site-data/corpora/...` instead of `.tmp/site-data/corpora/...`. The PR branch now accepts both path shapes in the collector; workflow YAML and a local `find` fixture validated. + ## >>> Read this first <<< **All 23 techniques are working. Zero errors, zero timeouts on 13,423 sessions (commit `867f57b`).** diff --git a/middens/tests/steps/split.rs b/middens/tests/steps/split.rs index bb3ac08..4eb3c62 100644 --- a/middens/tests/steps/split.rs +++ b/middens/tests/steps/split.rs @@ -206,7 +206,13 @@ fn when_run_middens_analyze_with_split_on_the_mixed_corpus_using_technique( run_analyze_with_args( world, true, - &["--techniques", technique.as_str(), "--timeout", "1800", "--force"], + &[ + "--techniques", + technique.as_str(), + "--timeout", + "1800", + "--force", + ], ); }