Skip to content

Development and testing

Four checks guard this repository, and each one covers something different.

Bot Assembly is built by Ian Maurer. It is MIT-licensed (LICENSE) and developed in the open at github.com/botassembly/botassembly.

The gate is the everyday check. It is deterministic, offline, and free, and it calls no model. It runs the full test suite, the entire conformance corpus against the reader, lint, a type check, dependency and cycle checks, and a size ratchet.

Terminal window
sh sdlc/scripts/install # once, and after dependency changes
make check # the whole gate

The smoke ladder is the deliberate check: eleven rungs, ten of them live runs against a real model with real credentials, proving that real auth, a real clock, and a real provider still produce correct sealed records. Rung 6 spends no tokens and inspects what the live rungs left behind, so it runs last. The order is 1 through 5, then 7 through 11, then 6. It costs money, so it is never part of the gate and never runs by accident. Bare make at the repository root prints help instead of spending.

Terminal window
make smoke # the whole ladder, from the repository root
make smoke SMOKE=3 # one rung

The packaging check exercises make install itself. It installs the checkout from a scratch path whose name contains a space and runs the launcher it wrote. Run it after touching the root Makefile.

Terminal window
make installcheck

The platform check runs scratch installation, shipped-example resolution, and a narrow set of process, signal, lock, input, output, and cleanup tests. It accepts Linux and macOS only. It stays offline and never installs into your ordinary home.

Terminal window
make platformcheck

GitHub Actions keeps the complete Ubuntu make check job and also runs make platformcheck on Ubuntu and macOS with the pinned Node version. A second workflow builds this site and publishes it when a push to main changes anything under docs/, specification/, or examples/. Publication waits for both runtime jobs. Native Windows refuses before command work and directs operators to WSL.

Work lives in the repository itself: tickets in sdlc/tickets/, one sealed record per landed ticket in sdlc/records/, decisions in sdlc/planning/adr/. A ticket is done when its record exists.