Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Make targets & CI workflows

When to read this: You want the exact command a make target runs, or which GitHub workflow does what and when it fires.

The Makefile mirrors .github/workflows/ci.yml; the workflow is the ground truth, and the two are kept in step by hand. Full context for the release pipeline is in the Release process.

Make targets

TargetRuns
make / make helpLists the targets below
make setupLinux: scripts/setup-linux.sh (apt packages for GPUI + rustup target add wasm32-wasip2). Other OSes: prints instructions and adds the wasm target
make buildcargo build
make build-releasecargo build --release
make testcargo test --all-features (matches CI)
make test-fastcargo test -p chatty-core --lib
make test-tuicargo test -p chatty-tui
make test-gpuicargo test -p chatty-gpui
make test-gatewaycargo test -p chatty-protocol-gateway
make lintcargo clippy --all-features -- -D warnings
make fmtcargo fmt
make fmt-checkcargo fmt --check
make typecheckcargo check --all-features
make wasm-modulesRuns scripts/build-wasm-fixtures.sh: builds the echo and benford plugins and every modules/fixtures/ crate for wasm32-wasip2 (release) and stages each at target/wasm-fixtures/<name>/<name>.wasm next to its module.toml
make run-gpuicargo run -p chatty-gpui
make run-tuicargo run -p chatty-tui
make ciwasm-modules, test, fmt-check, lint, scripts/check-reserved.sh, scripts/check-rig-pins.sh
make cleancargo clean
make docs-genscripts/gen-docs-reference.sh → docs/generated/*.md
make docs-syncscripts/docs-sync.sh — copies repo markdown (and docs-sized GIFs) into docs-site/src
make docsdocs-gen + docs-sync + mdbook build docs-site, then installs llms.txt / llms-full.txt into the book
make docs-servedocs-gen + docs-sync + mdbook serve docs-site --open (port 3000)
make docs-check-linksdocs, then scripts/check-docs-links.sh (lychee over the sources) and scripts/check-docs-site-links.sh (relative links on the built site)
make docs-check-navscripts/check-docs-nav-drift.sh — docs/INDEX.md and SUMMARY.md completeness
make docs-check-frontmatterscripts/check-docs-frontmatter.sh — optional YAML frontmatter schema
make docs-check-leakagescripts/check-docs-user-leakage.sh — user guides carry no contributor material
make docs-check-referencescripts/check-docs-reference-drift.sh — reference tables match tool_registry.rs, StreamManagerEvent, event enums and settings structs
make docs-checkAll five docs-check-* targets
make animationsscripts/animations/record.sh --all — re-records the README/docs GIFs

Note

Two things the CI workflow runs that make ci does not: clippy is invoked with --all-targets as well (cargo clippy --all-features --all-targets -- -D warnings, so lints in tests/ are reported), and scripts/check-no-core-reexports.sh runs after the rig-pin check. Run both before pushing a change to test code or to the chatty-gpui/chatty-tui module trees.

GitHub workflows

WorkflowTriggerPurpose
CI (ci.yml)PR / push to mainTests, formatting, clippy, reserved-symbol, rig-pin and re-export checks. Docs-only diffs skip compile (the required test job still passes). Stale PR runs are cancelled. Swatinem/rust-cache is warmed on main (never with cache-on-failure: a cancelled run would save a partial target/ that is then never re-saved). On pushes to main, warm-release-cache also builds --release on Linux, macOS and Windows once per Cargo.lock + rustc and saves each under the key from scripts/release-cache-key.sh.
Docs (docs.yml)Push to main / PR touching documentation pathsgen-docs-reference.sh, docs-sync.sh, then every check behind make docs-check (links on sources and built site, nav, frontmatter, user-guide leakage, reference drift); a deploy job publishes the site.
cargo-deny (deny.yml)PR / push to main / merge group / daily 04:17 UTCcargo deny check for advisories, sources, bans and licenses against deny.toml. Every advisory exception names its tracking issue (AGE-829). Job name cargo-deny (AGE-734).
Prepare Release (prepare-release.yml)PR merged with release:patch/release:minor/release:major label, or manual workflow_dispatchBumps version via a cut-release PR (main is protected), generates changelog, tags, creates the GitHub Release, then calls Release via workflow_call.
Release (release.yml)Called by Prepare Release via workflow_call, or manual GitHub Release publishBuilds cross-platform artifacts (Linux AppImage, macOS DMG, Windows EXE), generates checksums, uploads to release. Restore-only cache: each platform restores the release cache that CI’s warm-release-cache matrix built on main.
Claude Code Review (claude-code-review.yml)PR opened/updated (Rust/CI paths only)Automated AI code review via Claude. Skipped for docs-only PRs.
Rig canary (rig-canary.yml)Weekly, or PR that touches Cargo manifestsInformational cargo update + cargo check against latest rig.
Plugin e2e (plugin-e2e.yml)Nightly, or manualThe chatty × Hive contract and trust suite (PL-E6): builds private hive main (read with HIVE_READ_TOKEN) against this chatty2’s chatty-wasm-runtime, brings up hive’s compose e2e stack, seeds it with the WASM fixtures, runs cargo test -p hive-e2e -- --ignored and posts the per-row table as the job summary. Local equivalent: scripts/hive-e2e.sh all.
Claude (claude.yml)@claude mention on issues/PRsInteractive AI assistance.
Update user docs (update-readme.yml)PR merged to mainClaude analyzes the diff; if user-facing features changed, opens a follow-up PR updating docs-site/src/user/*.md (README stays a short landing page, edited only for download/install/positioning/links). Add skip-readme label to opt out.
Update Agent Docs (update-agent-docs.yml)PR merged to mainClaude analyzes the merged PR for guidance drift and opens a follow-up PR to sync CLAUDE.md / AGENTS.md when needed. Add skip-agent-docs label to opt out.
UI Sync Check (ui-sync-check.yml)PR merged to mainClaude checks if one UI crate (chatty-gpui/chatty-tui) changed without the other; creates a ui-sync labeled issue if sync needed. Add skip-sync-check label to opt out.
Reserved symbols (reserved.yml)PR / push to main / merge groupRequired check: fails if a symbol listed in RESERVED.md is implemented without its todo!("human: …") marker or a // HUMAN-WRITTEN: attestation (scripts/check-reserved.sh).
Auto-arm (auto-arm.yml)PR opened / reopened / marked ready for reviewArms GitHub auto-merge (squash) on same-repo PRs from the repository owner, github-actions[bot] or a docs bot’s docs/* branch, so every ordinary PR lands by itself once required checks are green and the branch is current. Hold a PR back by opening it as a draft. Uses AUTO_UPDATE_TOKEN so the merge still triggers the push-to-main workflows.
Update next queued PR (update-next-queued-pr.yml)Push to main, auto-merge enabled on a PR, every 30 min, or manualThe one-lane queue: presses “update branch” on the oldest auto-merge-armed PR so PRs land one at a time under the branch-must-be-current ruleset.
PR nurse (pr-nurse.yml)Hourly, after any CI / Reserved / Ship-auto guard run completes, or manualPicks one auto-merge-armed PR that is conflicted or has a red required check and has a Sonnet session fix it (scripts/pr-nurse-triage.sh), pushing a nurse: commit; after two attempts it disarms auto-merge and labels blocked:human. Never merges.
Ship-auto guard (ship-auto-guard.yml)PR opened / synchronized / (un)labeled, merge groupRequired check that no-ops on ordinary PRs; on a release:*-labeled PR enforces the path deny-list, and for ship:auto additionally patch-only and an auto/* branch.
Ship-auto merge (ship-auto-merge.yml)PR opened / reopened / labeled / synchronized / ready for reviewEnables squash auto-merge for ship:auto PRs from same-repo heads when the sender is the owner or github-actions[bot] — the zero-human patch-release path.
Privileged labels (privileged-labels.yml)PR labeledOnly the repository owner and github-actions[bot] may apply ship:auto, `release:patch
Dependency Check (dependency-check.yml)Weekly (Monday 9:00 UTC) or manualChecks crates.io for dependency updates, files grouped work in Linear only (auto-ship, agent tech debt, or human tech debt track) — no GitHub issues; requires LINEAR_API_KEY.

A merge only releases if the PR carried a release label before the merge; the label is read from the merged pull request. Prepare Release still shows a run for an unlabeled merge, with conclusion skipped. Details, including the docs-branch exclusion and the changelog rules, are in the Release process.