Skip to content

Build master @ bc50cd5bunreleased — 31 commits past v1.282.0Last reviewed Last changed Grade fresh (aging >90d, stale >180d)Source / History

BoB 1.275.0 — release notes ​

Released: 2026-09-21 · Tag: v1.275.0 · Previous: 1.274.1 (2026-09-18)

This is the first BoB release with written release notes. The generated change list stays in CHANGELOG.md and on the GitHub Release. This page says what the release means for you and what to run.

Highlights ​

  • Maintenance work has its own issue type. Use /task to file a dependency bump, CVE fix, runtime upgrade or cleanup. It has a Verification checklist in place of acceptance criteria. Warp-drive, /what-next, grooming and flight plans all accept tasks, and a task's checklist is its definition of done. (#1957, #1958, #1959, #1960)
  • Briefings are things you can find. Every brief gets its own issue and an HTML page (bob brief --html). A generated index sorts them by recency and priority, and each area label can have its own brief (bob brief --area). bob brief --publish puts them on the web. A timer can post a brief after every farm tick. (#2790–#2793, #2820, #2872, #2246)
  • The docs keep themselves honest. Every page shows when it was last changed and last reviewed, and stale pages are graded and gated. Every bob command is reachable from a how-to, and every error you can hit has an entry on one troubleshooting page. There is also a one-page bob CLI reference, organised by job. (#2551–#2554, #2562, #2607)
  • Cheaper, smarter model use. A written model-assignment policy decides which model does which job. Duplicate detection for incoming issues runs on Jev, a fast judgment model. A project manifest can declare its own _workflow settings. (#2680, #2672, #2681, #2703)
  • Background servers are visible. bob doctor lists running dashboard servers with their age and address. bob dash serve --stop --all stops them. (#2563)
  • Two new tutorials. "Your First Product with BoB" and "Coming Back to a Project" form a learning path in the docs. (#2412, #2413, #2415)

Fixed ​

  • Deploying beside a running session. deploy.sh no longer counts Claude Code's pre-warmed spare processes as live sessions. It no longer crashes on a manifest without a project name, and its guard only refuses for the real hazard. (#2746, #2763, #2766)
  • Warp-drive runs. A self-hosted run no longer blocks itself after its own first merge. Hooks no longer act on another session's run, and a repeated checkpoint is idempotent. (#2136, #2306, #2168)
  • Git dirt after provisioning. The managed ignore block now matches across machines, and a provision overlay no longer leaks into .gitignore. (#2093, #2247)
  • Test isolation. Test suites no longer write into your real operator repo. (#2679, #2776)
  • Viz and dashboards. bob viz shows the machines again, and bob warp viz reports a tailnet-bound dashboard instead of timing out. (#2544, #2560, #2640)
  • Releases. bob release no longer exits 0 when GitHub refuses an oversized release body. (#2557)
  • Dev environments. bob dev up now provisions test users through the d1, sqlite and supabase adapters. bob init no longer writes a broken dev.json into a repo that ignores it. (#2452, #2463)
  • A flight plan no longer reads "no longer depends on #NN" as a dependency. cap-status no longer follows another repo's issue by number. (#2310, #2686)
  • The whole bug pile from flight plan 2778 is closed (47 of 47). (#2873)

Upgrade: every machine ​

Close every Claude Code window on the machine first. A deploy refuses while a session is live, because it would switch off the hooks in running sessions until they restart.

bash
bob update --to v1.275.0      # fetch, move the checkout to the tag, deploy, then bob doctor

Or by hand, from the BoB source checkout:

bash
cd ~/projects/bigbrain && git fetch --tags && git checkout master && git pull --ff-only
scripts/deploy.sh && bob doctor

Expected: bob doctor ends green. Its version line names the release, or checkout with the source SHA when you run master.

Farm workers only: check that the unattended tick timer and the snapshot timer are installed:

bash
systemctl --user list-timers | grep -E 'bob-(tick|snapshot)'

Upgrade: every project ​

In each project checkout on each machine:

bash
cd <project> && bob ready

bob ready retargets .claude links to this machine, adds the new task label, projects the port band and checks the manifests. Expected: READY — <project> is warp-drive-ready on this machine.

If the project still commits its .claude links (git shows M/D under .claude/ after every bob ready), migrate it once:

bash
bob provision untrack            # report only
bob provision untrack --apply    # untrack, ignore, one local commit; add --push to push it

Action needed (one time) ​

WhatWhoCommand
Add the task label to every project repoeach projectbob ready (it reconciles labels)
Operator repo must resolve (manifests moved out of BoB)every machinebob operator show → exit 0
Briefing timer (optional)the farmbob brief --install-timer
Jev key for duplicate detection (optional)the machine that groomsbob secrets check names it if missing
Stop stale dashboard serversany machinebob dash serve --stop --all

Breaking changes ​

None. Project manifests now live in your operator repo, not in BoB's source. That moved in 1.274.x, and the old location still works (with a warning) until 2026-10-31.

Known issues ​

  • On some machines make check fails at check-projects (a project listed with no manifest) and at check-pipefail-sigpipe in one test file. Both are tracked bugs and do not affect running BoB. (#2890, #2945)
  • A few legacy .claude/journal/templates links are reported as "uncovered" by bob provision untrack and left tracked. They are harmless.

Changes ​

Full change list — 154 entries (the generated CHANGELOG.md section)

Features ​

  • #1957: /task registry command for maintenance work (a4888e7), closes #1957 #2597 #2615
  • #1957: task label in the standard label set (0a0190a), closes #1957
  • #1958: /what-next ranks and labels tasks; task queue-and-ready test (03e4de5), closes #1958 #2597 #2615
  • #1958: flight plans seat task items; groom readiness exempts task from ACs (4f3a207), closes #1958
  • #1958: the warp-drive queue admits approved task issues (034cb3f), closes #1958
  • #1959: task addendum and the Verification-checklist DoD gate (2190f43), closes #1959
  • #1959: task is a third work_type with its own phase labels (cf47a6e), closes #1959
  • #2246: the bob-brief timer and a briefing at the end of every tick (50ef681), closes #2246 #2888
  • #2246: the briefing's schedule, quiet hours, retention and dir are declared (51e1daa), closes #2246
  • #2412: the tutorials index is a learning path — order: and prerequisites: in frontmatter, a derived "Next tutorial" line (158332e), closes #2412
  • #2412: tutorial registry — render-scenarios renders every declared tutorial, the drift gate judges each entry (9522d79), closes #2412
  • #2551: every docs page renders last changed and last reviewed (bc73132), closes #2551
  • #2551: every published page carries a review date, gated in docs-check (f8e0b42), closes #2551
  • #2552: /doc-audit reports each page's staleness grade (2a8cd1c), closes #2552
  • #2552: grade docs fresh / aging / stale against a declared per-mode policy (08d1eb2), closes #2552
  • #2553: every shipped bob command is reachable from a how-to — make check-howto-coverage gates the routing table, reference-only is declared on the row (1313e57), closes #2553
  • #2554: docs currency is a named gate on every stable release and promote (213af41), closes #2554 #2552 #2553 #2236
  • #2562: make check-troubleshooting — a stale troubleshooting entry fails the build (34010b9), closes #2562
  • #2563: bob doctor lists running dashboard servers with age, bind and staleness (515a4d3), closes #2563
  • #2563: enumerate running dashboard servers; bob dash serve --stop --all (d76e244), closes #2563
  • #2607: declared docs-site nav — sidebar order, collapsed sections, pinned Start here, search scope (8e0897d), closes #2607
  • #2607: one-page bob CLI reference, organised by job (ae7e3cc), closes #2607
  • #2672: Jev client primitive, one batched call with a pinned version that fails open (ad14ade), closes #2672
  • #2672: vendor the TypeSafe agent skill and declare the Jev API key (6ededb7), closes #2672 #1
  • #2680: agent model tiers follow the model-assignment policy (e6f7571), closes #2680 #2701
  • #2680: model-assignment policy in the llm-tiering skill; intake stays on Opus (0246ff9), closes #2680 #2649 #2680 #2699
  • #2681: dedupe eval against the 2026-09-19 intake burst: precision 1.00, recall 0.30 at 0.85 (ba08489), closes #2681 #2647 -#2675 #2649 #1974 #2672 #2667 #2681 #2649 #2659 #2667 #1831
  • #2681: issue-dedupe flags an incoming issue that duplicates an older open one, on Jev (221f82a), closes #2681 #2672
  • #2681: Jev vs Haiku 4.5 benchmark on the dedupe set; declare the bodfeed API key (f7ad719), closes #2681 #2681
  • #2703: a provision manifest can declare _workflow keys (d53a63d), closes #2703 #2680 #2270 #2041
  • #2718: unwire strip-ai-boilerplate; attribution is off in the Claude Code settings instead (861843f), closes #2718
  • #2735: /requirement is one universal command (2524fc9), closes #2735 #2741
  • #2735: make check refuses an item name that exists on both sides (a7083f0), closes #2735 #2748
  • #2740: make check fails when a derived phase-instruction copy diverges (9336bca), closes #2740 #2757
  • #2790: a brief with no state, or two, is drift the gate reports (ae1b19a), closes #2790
  • #2790: the brief vocabulary is declared once and gated (cb1a31b), closes #2790
  • #2791: bob brief --html renders the page; stdout is one line (b091e8d), closes #2791
  • #2792: a generated briefings index, sortable by date and priority (30c1b15), closes #2792 #2793
  • #2793: adopt the six published briefs as brief entities (1b4157e), closes #2793 #2798 -#2803
  • #2793: every adopted brief links back to its issue (f6ea0ca), closes #2793 #2798 -#2803
  • #2817: the decide() seam, built before the second Jev call site (c923106), closes #2817 #2798 #2798
  • #2818: a brief proposes its own next action, and says so when it cannot (71c7040), closes #2818 #2817 #2789
  • #2819: the in-page write path — a tick goes to the issue, verified (dab1d4f), closes #2819 #2818 #2789 #2267 #2823 -#2870
  • #2820: a brief per area label, to plan BoB's next moves (fba59dd), closes #2820 #2818
  • #2872: bob brief --publish copies the set to the declared target (d9170a3), closes #2872
  • #2872: every generated page says whether it is live (2283d69), closes #2872
  • #2872: the brief publish target is declared operator data (693cdd6), closes #2872
  • todo-writing: todos are written for zero context (be9de25)
  • www: a sixth briefing on waking a stale project (772ef00)
  • www: five session briefings at www/bob/briefings (366647c)

Bug Fixes ​

Documentation ​

  • #1959: /warp-drive selects work_type task; task loop documented (3b701ab), closes #1959 #2597 #2615
  • #1960: /groom treats a parentless task as well-formed (6b97b38), closes #1960
  • #1960: task documented as a work type; warp status shows its label (e7019bc), closes #1960 #1956
  • #2246: regenerate docs/reference/cli.md from the routing table (45f8bee), closes #2246 #2805
  • #2412: the tutorial registry, the learning path and "Next tutorial" — verification-system, documentation standard, scenarios authoring note (0dae7e0), closes #2412
  • #2413: Your First Product with BoB, Monday and Tuesday — vision, two capabilities, four requirements, groom, flight plan (055b42c), closes #2413
  • #2413: Your First Product with BoB, Wednesday to Friday — dev up, a forked wave, the integration branch, finalize, release, retro and journal (78f842c), closes #2413
  • #2415: Coming Back to a BoB Project — why the first hour back is a fixed routine, stop by stop (9d6172d)
  • #2415: the Coming Back to a Project tutorial — step 3 on the learning path, generated through the registry (f292c3e), closes #2415
  • #2536: declare bob provision ignore-paths and the coverage rule (d1e86ab), closes #2536
  • #2551: the documentation standard states the two-signal page-age rule (8a4fb32), closes #2551
  • #2552: triage the 17 pages dated 2026-06-22; standard §3.4 staleness policy (12fb73d), closes #2552 #2270
  • #2553: how-tos for bob operator and bob secrets — the first-time operator setup in order, the scaffold-shadowing recovery, and the secrets presence check (31d2003), closes #2553
  • #2553: how-tos for bob ritual, bob brief, bob tour and bob provision untrack (b7aa21e), closes #2553 #2544
  • #2554: versioning how-to documents the docs currency gate (b73503e), closes #2554
  • #2557: versioning how-to — when the GitHub Release does not publish (183916b), closes #2557
  • #2560: troubleshooting entry for the warp viz bind conflict (761c34c), closes #2560 #2597
  • #2562: link the troubleshooting page from both indexes and bob --help (8b60a5d), closes #2562
  • #2562: troubleshooting page keyed by the verbatim error text (7d2f471), closes #2562 #2560 #2270 #2463
  • #2563: running dashboards in bob doctor — troubleshooting entry and CLI how-to (32b4d37), closes #2563 #2560
  • #2607: Start here on the docs home, CLI reference first under Reference (707d349), closes #2607
  • #2635: a bare checkout is expected to fail check-provisions (69bb54c), closes #2635 #2509 #1479
  • #2667: jev-model-router evaluated, no-go; the model-assignment policy names the router's role (e84a796), closes #2667 #2680 #2672 #2711
  • #2672: the llm-tiering skill takes Jev as a backend, with a worked triage example (311f16a), closes #2672
  • #2680: bigbrain declares delegate_mechanical_chunks in its manifest (ac0bc0b), closes #2680 #2680 #2703 #2719 #2704 #2705
  • #2680: delegate_mechanical_chunks recommendation; per-project opt-in, fleet default off (d710b2c), closes #2680 #2704 #2705 #2703
  • #2681: /groom Step 2b runs the dedupe pass; duplicate is a declared label (19c203a), closes #2681 #2715
  • #2685: document the subagent bucket and per-model pricing (ce0a497), closes #2685 #2589
  • #2740: warp-drive-internals states where instructions and config come from (c24d256), closes #2740
  • #2772: name the issue that owns the named-file case (2fa48f8), closes #2772 #2787 #2772 #2772 #2787 #1837
  • groom: fold business cases #2207 and #1670 into vision §Roadmap; personas and the single-developer non-goal revised per #2207 (13c407d), closes #2023 #2214 #2220 #1665 #2214 #2220

Tests ​

  • #2640: hold --list to the resolver, not to a URL it composes itself (9414442), closes #2640
  • #2689: the no-operator workarounds become the operator-independence check (1a46adb), closes #2689 #2679 #2689
  • #2703: the manifest _workflow layer, proved and documented (fc32e52), closes #2703 #2679 #2725 #2703
  • #2719: js-leak keeps the _workflow chokepoint enforced (1741542), closes #2719 #2719
  • #2749: hold that the CI-runner todo's assignee is read, not written in (8db229b), closes #2749 #2749 #2749 #2772
  • #2763: pin the #2040 refusal and the captured spare fixture (c1d6bf9), closes #2763
  • #2766: the guard that must never throw is held to it (c8dfa56), closes #2766
  • #2872: the gate refuses, orphans survive, a dirty checkout is not deployed (c65f360), closes #2872
  • #2873: two suites that were right on macOS and wrong on the farm runner (4c5068b), closes #2873 #2248