Skip to content

Changelog

v4.1.0

Published: 2026-09-16

bb v4.1.0 adds bb doctor for configuration problems and closes most of the remaining gap with gh for pull requests and repositories. It also makes failures say what actually happened: whether a request that never got an answer may have been applied, whether a listing was cut short, and which file or policy refused a command.

It is a minor release with no breaking changes. Most of the behaviour that changes is a fix: v4.0.0's decision records and release notes already specified it, and this release makes the binary keep those decisions everywhere.

Highlights

  • bb doctor (ADR-086, #597): Checks the stored, workspace and system configuration files and reports every problem at once:
  • schema violations, with their key and line;
  • keys a file never reads, such as require_keyring in a user's own file;
  • where each effective setting comes from;
  • whether a required OS keyring answers.

It needs no Bitbucket host, makes no network call, and exits 1 when there is anything to fix. * Closer to gh (ADR-050, #575): * bb pr view, bb pr edit and bb pr close resolve, and bb pr checks shows a pull request's build statuses. * bb pr ready marks a draft ready for review without asking for its version, and --undo turns it back into a draft (#602). * bb repo get, also spelled bb repo view, describes a repository and prints its README (#605). * An interrupted change is no longer reported as safe to retry (ADR-011, #574): * The problem. Suppose bb creates a pull request or a comment, or merges one, and the connection drops, times out, or a gateway answers 502 before Bitbucket does. Bitbucket may already have applied it. bb used to report that as transient, exit 10, which is the code retry wrappers act on, so a retry could create the same pull request or comment twice. * Now. Such a failure is unknown_outcome and exits 13, outside the retry range, and the message says to check whether the change landed before sending it again. * What still exits 10. A failure before the request left the machine, and a delete or an update whose answer is lost: repeating those cannot create a second anything, so bb retries them itself (ADR-009). * Releases you can verify, and a self-update that stays on https unless you allow otherwise. This matters if you check what you install or mirror releases internally; the steps are in Release Verification. * Per-archive SBOMs (#584). Each release archive now has its own SBOM, published beside it as <archive name>.spdx.json: the list of every module the binary inside it is built from, which vulnerability scanners and compliance reviews read. The .deb and .rpm are covered by the _noupdate archive's. * It is generated from that binary, because each platform links different modules. * It is attested against the archive, so gh attestation verify proves the SBOM describes that archive. * It replaces the single sbom.spdx.json, which inventoried the build checkout rather than any binary. * https for update mirrors (ADR-059). bb update fetches release mirrors over https, because over plain HTTP anyone on the network path can read or hold back what the mirror serves. * A mirror without TLS needs bb update --allow-http or BB_ALLOW_HTTP_UPDATE=1; without one of them the update is refused (exit 2). * In system policy, allow_http_update: true permits it for every user without the flag, and allow_http_update: false refuses it for every user (exit 3). * Pinned actions. The workflow that builds and signs releases runs GitHub Actions pinned to exact commits, so a moved tag cannot change what builds the binary. * Windows and macOS CI. The unit suite runs natively on Windows and macOS as well as Linux.


Fixes: v4.0.0 decisions the binary now keeps everywhere

  1. Every destructive delete confirms (ADR-073).
  2. The rule: destructive commands confirm when a person is present and require --yes when not, and --yes is inert on a repository inferred from the git remote.
  3. v4.0.0 enforced it for bb repo delete, bb repo admin delete and bb auth gpg-key clear. Every command whose last word is delete, remove, revoke or clear now follows it: 37 of them, including bb branch delete, bb tag delete, bb webhook delete, bb build delete, bb insights report delete, bb pr review reviewer remove, bb repo permissions revoke and bb auth token revoke.
  4. In a pipeline, pass --yes and name the target explicitly: --repo PROJECT/slug, or BITBUCKET_PROJECT_KEY and BITBUCKET_REPO_SLUG. A repository bb took from the git remote does not count, and --json needs --yes even at a terminal.
  5. Invalid arguments exit 2, as the v4.0.0 notes promised. A subcommand that a command group does not know printed the group's help and exited 0, which put prose on stdout under --json. It now exits 2 (validation), and the help goes to stderr.
  6. Error kinds match the taxonomy (ADR-011, #574).
  7. A rejected TLS certificate or a DNS failure is permanent (exit 1). It is not transient (exit 10), which invites a retry that cannot succeed.
  8. A 401 that refuses a known user is authorization, not authentication.
  9. A capped listing says it was capped (ADR-074, #573). --limit has capped the total since v4.0.0. Every listing that takes it now also reports meta.limitReached, and MCP results (limit_reached) and text output say so too. bb insights annotation list also applies the default limit of 25 it had been ignoring; pass --all for every annotation.

Other fixes worth knowing

  • Error messages no longer carry raw Bitbucket responses.
  • An upstream response body is summarised, and credentials in it are redacted, before it reaches a message. Some bodies ran to 18 KB.
  • error.details carries upstreamStatus and, when Bitbucket names one, upstreamException.
  • --full-error-body prints the whole body when you need it.
  • --dry-run changes nothing on the local machine either (#571). Twelve commands used to apply their change under --dry-run and now preview it: bb auth login, logout, alias add, alias discover, alias remove, server use, setup-git, bb ai skill install and skill remove, bb clone, bb repo clone and bb pr checkout. bb ai mcp serve --dry-run is refused rather than started, because a running server cannot be previewed (#568).
  • A configuration file bb cannot read is an error, not an empty file (#567).
  • Commands name the file, point at bb doctor, and stop with permanent (exit 1), instead of reporting that you are not logged in with validation (exit 2).
  • bb auth login and bb auth logout no longer rewrite a file they could not read, which removed every other host.
  • BB_DISABLE_STORED_CONFIG=1 no longer reads the stored file at all.

Deprecation

  • bb bulk is deprecated and is removed in v5.0.0 (ADR-084).
  • It warns once per invocation on stderr, so --json output stays clean.
  • Permissions, webhooks and default tasks set at project level already apply to every repository in the project. For anything else, loop over bb repo list.

The full change ledger follows.

Changes since v4.0.0.

Compare: v4.0.0...v4.1.0

All 196 changes **Features** - update: update URLs are https unless plain HTTP is explicitly allowed ([7c3c01e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7c3c01e8dce38e5742ec670979f84790b842aa01)) - bb doctor checks the configuration bb would load ([fe6962d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fe6962d4d8f8d59e2879b3621acf5a050f190133)) - repo: bb repo get describes a repository and prints its README, with gh's view as an alias ([3152a9a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3152a9ac967e8a0c54620ac306995e3b06f7070e)) - pr: bb pr ready marks a draft ready for review without asking for its version ([dc27824](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dc2782413673459e3e8223b699f1a59cdad590f7)) - errors: unknown_outcome, for a request whose result never came back ([7dfbf6b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7dfbf6b3abf9d061b958e4d6e89bde6c9b8f1854)) - safety: install the destructive confirmation from one walk ([a3621a2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a3621a296a6223eef347c257d9f01fd32666c495)) - safety: confirm before deleting a branch, a tag or a webhook ([56ed0a4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/56ed0a489edbaa407c6bece48f4bd69d6ed86808)) - bulk: deprecate bb bulk, and add the machinery that remembers ([7d6332d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7d6332dfb8f1d17ffdbd634f223d5d277c57d44b)) - pr: register the gh spellings so muscle memory resolves ([bbd53fa](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bbd53fa7aaecf81d595b3f7c987da68c336528f4)) **Fixes** - release: ask jq for the one conclusion instead of piping into head ([72b82fa](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/72b82fa10d310edec56cbc6df97b71e07b37235f)) - release: keep a prerelease tag from deciding the next release ([b6de809](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b6de809ddfcf4caec15bf8384553c9b104330c0c)) - pr: let each half of an alias name the other, and prove doctor asks nothing ([812a9b9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/812a9b9243b4d7ba949b9151dd41522f1b045b75)) - errors: ignore a status that is not one, and tidy what the refactors left ([1f726b5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1f726b538785256fb725c9e6c3443db046e4d2a6)) - quality: count the endpoints bb calls from outside the services ([09d6385](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/09d638582d803c26fa17380d9d0ee04bc2a0164f)) - errors: a 2xx is not proof that a mutation landed ([0518320](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/051832080329d95bee5ac1817cb93bae05eddc83)) - update: read the mirror as policy, and warn on the plain HTTP it reaches ([ed04460](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ed04460ce264653411393dabb8c2c42c3b9c37ac)) - pr: read the version bb pr update needs instead of demanding it ([e0d699b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e0d699bf716cc872a8b2701a962d64d818b28e2a)) - cli: answer a request for help instead of refusing it ([44a66a4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/44a66a4575da8e9b739b6bf37f395b0328a109c8)) - cli: make the destructive confirmation say what it means ([7c0b200](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7c0b2007d614ac8f205c41d95d37d3906810e089)) - errors: keep the transport's classification through three wrappers ([3b1f04f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3b1f04f9df14d433e0e9b592253563e6ab8b4a22)) - auth: give bb auth status its TLS remedy back ([d15f3a0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d15f3a06bb30c9acc5fbf2ba70c83dd4ea7fa3f0)) - errors: a status that arrived is the outcome ([6d4346c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6d4346c351658d7f3d3e87137a6ef10f95438a33)) - errors: a server that refuses the handshake is permanent ([54f3790](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/54f3790a6a1fc4e86733059630d8ea4ec66eb8f9)) - doctor: report the refusals bb update would meet ([51bad61](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/51bad6145bf2de118e74b64bfb00f81add059677)) - config: do not let an unreadable registry policy switch a control off ([7fe30c9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7fe30c98b6156f655a77c489841fdfa8668d58b7)) - errors: close the redaction gaps an upstream body can use ([1eaf15a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1eaf15a16a74be4322606b266eab49e1f43df77e)) - git: keep a clone credential out of git's command line ([4243b75](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4243b75a689fec57cb33d02eb6f3a3c683af95e8)) - config: bind a stored credential to the host it was stored for ([ba23a13](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ba23a1355e12f059574a41298912a2bdb737781f)) - auth: keep the git remote out of a token's scope ([d3f093c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d3f093c59f463e0d6c0e76d02f88845ab5b8d2bf)) - cli: answer an interrupt that finds bb blocked on a read ([8757850](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/875785024e808670834fa508b2d51b0dc0fe2a77)) - errors: show a JSON envelope under --full-error-body too ([edcf1ea](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/edcf1ea242dd4a655b56ccc02e34de022d706656)) - test: wait for Bitbucket to rescope the pull request before rebasing it ([56ffc9f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/56ffc9f58ea7fb3b44dba97562af13689bc1f2b0)) - update: say which address was refused, and which policy refused it ([a6c3502](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a6c3502a80be246f5cab1790528cfcfc70081858)) - config: find a path part's name on disk in one pass that Linux runs in full ([7963ded](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7963ded732031be224f9055b9b3c70b97eca706f)) - config: one keyring key per config file where the file system ignores case ([e439e43](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e439e43151f8d4361cf5cd29cd190ab92c7ce444)) - errors: a 401 that refuses a known caller is authorization ([b1060e6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b1060e66d21d02eb32fadb4511baff203cf676e7)) - doctor: bb doctor exits 1 for any issue, with every issue in error.details ([ac68f3b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ac68f3b096dcaa9000cc20372eb0e66d259601dd)) - pr: review complete without a draft review names the command that sets the status ([af1d650](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/af1d650a842f8ee3cc288a600f3ec24cb370b364)) - mcp: list_pull_requests answers with your own pull requests, and the tool listing says which tools write ([0d8778c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0d8778cf93ac7136870c551892bd5c42bfba6a4a)) - webhook: a create bb could not hear the answer to looks before reporting ([f7d8427](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f7d8427330b5f604738e45a073ee78fba9ce9d44)) - describe: an echoed flag publishes the flag's own values, and bb bulk describes its full artifacts ([4784c1b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4784c1bf85c41414b2bcfbc30a795457a8168487)) - repo compare --diff shows what the branch adds, and an old keyring token no longer overrides a new login ([7dc2323](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7dc2323d0dd258a03415ce54b588af29fb620154)) - config: logout, bb update and the CI variable no longer run past a damaged config ([13a3d80](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/13a3d808b8ff252b6a56d7b15821258881563216)) - errors: every command reports a rejected certificate as permanent and a lost mutation as exit 13 ([a29b051](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a29b051f7d7afb790d364e2263725c862d838a22)) - output: insights annotation list honours --limit, and three listings report reaching it correctly ([b8fd5a8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b8fd5a8efdabc8878d66e055cb07faaf8679d350)) - output: a capped result says so in MCP results and text output too ([209dca0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/209dca0e77b48699e3d61b981f5a504dcafc1274)) - output: meta is published open to new fields, and pr comment list reports meta.limitReached ([7be0759](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7be0759cd6ea55c9b15378e0b45c5115af0bbab8)) - output: every capped listing says so, and the envelope has a published contract ([34928ea](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/34928ea2229ebfa9719308e96db68510fac02934)) - errors: redact an upstream body before it becomes a message ([dd583fc](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dd583fc454abffed138349c009c2255765b78e7b)) - errors: summarise an upstream body, and stop calling a rejected certificate transient ([b693064](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b69306404ef189e78cddcac092abec9702c77490)) - describe: publish the vocabulary the flag accepts, and the shape bulk emits ([11bfe39](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/11bfe39afdf6e4f8e34af6ee88891fa80fb32a38)) - config: a hand-edited profile whose URL and map key differ keeps its stored credential ([674bafb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/674bafbdc84d1f9f36a425533be6e08ea139e707)) - cli: say what a command wanted, and give compare the diff it promises ([096fbe3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/096fbe3f0e96977f45658460055a5c4251a8e447)) - pr,config: name the pull request that was approved, and scope the keyring ([3c63562](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3c635625a531f7b685670f0ea22081425ad18065)) - config: a file bb cannot read is not a file that is not there ([0a400f2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0a400f22961268ea0a54805abbd1b1d15a31a2b2)) - test: give each test server its own transport, not the shared one ([9a70af5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9a70af50066c770b74f58771d6814b36724693c0)) - test: bump the version before the target moves, not after ([b00e853](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b00e85320b14479106bb557354da8bbf16e6b807)) - quality: find a generated call by its method, not by its receiver's name ([cfd0984](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cfd0984aef7c0ae0c57d98a301015105335a85ff)) - test: derive the project name, so one aborted run does not block the rest ([1ffc7a7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1ffc7a712d603722f477b19a115064e50b767caa)) - dry-run: stop the local registry meaning "run it anyway" ([6d2a048](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6d2a048682d13da363b92c57ea314aa1382fb8f1)) - test: a live test that cannot run its case now fails instead of skipping ([e2bb3b5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e2bb3b582ed75170ad70e39f32f8699ae752d1e0)) - test: make the webhook delivery tests actually test delivery ([75867f7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/75867f74562d5d2bff6432ac8ebcc19d79e615a0)) - pr: keep the rebase call visible to the spec-coverage detector ([8320d4f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8320d4f9bd323448855c2cb74dc44668fe901f81)) - pr: recover from a stale version bb read itself when rebasing ([a7450cd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a7450cde32b53f6e8d9692671ced53b91a9caa61)) - test: clone into a temp directory, not into the checkout ([c544838](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c544838e8f2baf94baf1cf9393f947bd3fb9dacc)) - test: seal the packages that were reading the developer's own config ([e825cef](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e825cefd4ea4f3fc76a13bb2afe75e73286ad62c)) - cli: fail when a command group is handed an unknown subcommand ([cb37d0e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cb37d0e0c822e6b7d22c44d3e6a85c97bfb29500)) **Performance** - paging: stop walking a filtered listing one row at a time ([92d87ed](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/92d87ed1eecb6a4a4864d6f11bb1c59a5044e45b)) **Refactors** - cli: make the interrupt answer testable ([06cea58](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/06cea585fa7db6e8064f3361ee292d525f60540c)) - errors: keep --full-error-body in an atomic, not a global the root command races on ([c18f675](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c18f675372521f4f36489efc9d8e9fe5189465cf)) - deprecation: ask the registry question of a list, not a global ([c713845](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c713845ec247321c495a5f0d84306dfdb68a92c3)) **Docs** - say which registry spellings policy accepts, and what an unreadable one does ([383b064](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/383b06408ec7e22a35aacfed31de8d33ff5b13fa)) - adr: say what the release process and the deprecation window actually do ([77ea917](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/77ea91742f51b38b05f502bef589d0374d7effda)) - name the Windows registry values policy is read from ([eb217cd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/eb217cd21be383aacbfaeb004ca9f0752da53c82)) - stop teaching the deprecated command, and write verification once ([d0662ae](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d0662aeb89df16f3cbd2254a57ed26aaec9d9b62)) - fix the small things that were wrong ([acb8471](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/acb8471fc0a124d427d051a6413ab48439c19508)) - state what is true rather than what changed ([0cb75a0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0cb75a002483ecaf9b3907c0b674bfa543861911)) - document the .env files bb reads ([72b2c2a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/72b2c2a74f1cf4165fbcde8b6f648739dd73309e)) - close the gaps a gh user falls into ([c87999b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c87999b631191fcafd8186a51b05c27bb5a6ff13)) - describe the llms.txt that exists, and document bb ai skill install ([72d1429](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/72d1429e9f7d4c97e61c72787effaff5bbd4bbaa)) - add the three failures people hit most, and fix the keyring remedy ([9ed3cec](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9ed3cecb1af9500ff005c21a47dd9b89a2940244)) - link troubleshooting and gh parity from where a reader is stuck ([b46adcd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b46adcddb7e17593190bb5107c01eed0c3147f7e)) - correct the bb auth status examples against the binary ([e872fb0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e872fb04f3151e156af916d0d0e1904be5e16491)) - say bb bulk is deprecated where agents are sent to it ([d3f82f2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d3f82f21a66bd1c9d167ef7c1462af96ee3e3d2c)) - record that a credential is bound to its host ([a0e9af7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a0e9af7a3c65dc22d73ee072f7a979c0986d9bc5)) - rebase onto next, which is where every change goes ([ac80155](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ac80155d237529bde0854f1e0e18ba1eb2bf9a7d)) - fix claims that do not match the binary or the release ([85e8018](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/85e8018b743947ef26b5e6d328253c2895235292)) - correct the v4.1.0 release notes ([34ef3e4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/34ef3e4712bfba523dc1a860cffb1a7cc57e3803)) - name go.mod as the Go version contributors need ([fcb3e1b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fcb3e1bb094f7b5920ee92731b02a074995b5541)) - explain exit code 13 and the release integrity work in the v4.1.0 notes ([56db8d4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/56db8d4807b1dcf21a28546830f025619da54193)) - frame the v4.1.0 behaviour changes as the fixes they are ([bd2ad90](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bd2ad90c45e30e6786526688c92f89534bfc8a5b)) - introduce the v4.1.0 release ([0c52f52](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0c52f52fa508831a6e108c59d7c3a4cf380cd519)) - render the cheatsheet's shell completion tabs ([bbef023](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bbef0239b5f0b6e2c2aa33ca3ad5bedfda6f24b1)) - put the plain-HTTP refusal where users look, and release verification out of the quickstart ([c05691c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c05691c3ae6b945faa5aab279a193b5c3fbb84b1)) - name the SBOM the .deb and .rpm are attested with, and where nfpm runs ([652ae31](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/652ae31292f6857a60e0c78ff75833cc8c7aeac8)) - pr: say what bb pr ready does, not the chore it replaces ([78175ad](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/78175ad43f1e73e22a9c33bb639237468f8e1e01)) - adr: ADR-062 says why list_pull_requests alone takes an optional repository ([1adb06e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1adb06e6747cf04fc2036042323120aff133b867)) - adr: the MCP gating rule and the project-scoped dashboard, as the code has them ([9f7b8c2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9f7b8c2476e2202a7fd15fdf2440e0125b771d7f)) - say what bb does, not what changed ([5b32900](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5b329001ceb06d0acdf9f922b49661a224d310e4)) - records and guides describe the error, config, keyring and truncation changes ([bacc45e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bacc45e44e03faf629f43200f38fa6464037befd)) - tell the human audience that Cloud is unsupported ([3a3dcd8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3a3dcd88a08bd67620cc1d9755403a2f4286261f)) - keep the deprecation out of the record and out of the ranking ([34149a1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/34149a1cf62a74845f96e84b69129930702e05ab)) - show what bulk and dry-run actually print ([7ef40b1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7ef40b1302ad03e12420d86d4c89473de43b76d0)) - grow the bulk and dry-run pages into guides ([88ea4d7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/88ea4d7efe855362ca4adbbbebbc336fdc586538)) - bb api is the same thing as gh api, so stop saying it is not ([ccb7c92](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ccb7c9256a007cedbf770f94bb8021312d01d98c)) - correct what stands in for gh repo view ([78a51d8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/78a51d8942e55c63c8da03da5e43be2e42edaf86)) - collapse the global flags, and print one open copy at the top ([ccc030d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ccc030dab5991fe5b240943edb3e62c85167fa20)) - say what changes when you arrive from gh ([e10f682](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e10f68280fcda24792f7460942efd1d92853981a)) - stop putting counts and reassurance in a hand-written page ([4d19a79](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4d19a796590baeb0400768e0f65058bb362aa621)) - generate the MCP tool reference from the registry that serves it ([85e9dcd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/85e9dcd2820cf685e4c41c4e6e1edf79d575d729)) - regenerate the ADR page the merge order left behind ([456d039](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/456d039b39d9723d2f5ec33546c6eb5cf18245aa)) - boost the troubleshooting page in search ([4d5ee12](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4d5ee125e321e5461e72fc63141ffdc6ac96bf40)) - weight search so task pages outrank decision records ([7c447aa](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7c447aaf41ce71016f375f079db0aa098f6f629c)) **Tests** - releasetags: guard the repository the tag test builds ([58bf53e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/58bf53e44b08e467d7aed075ca26c9d98819af47)) - config: assert on both platforms instead of skipping on one ([df5dd91](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/df5dd91d57c236226dd138624e1b8f325963ea9f)) - quality: gate the mocked-server inventory and let it see every server ([9f45b73](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9f45b73e2039834def37a8a3b7a078171be2cbbf)) - live: fail where the suite used to skip, and find what that hid ([d0aa54b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d0aa54b178f42369e93f1e0f56cfe143d69ab03c)) - bulk: run the deprecation warning instead of trusting it ([589a651](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/589a651715d0625f083bf8e887728ad3d2f09231)) - testsupport: catch the names a clock reaches through assembly ([2eeac73](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2eeac73aabb2514499ab22287bd67adc76f2d770)) - pr: prove the stale-version retry reads the version again ([483c429](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/483c429b5d6f49e55d33ef5447486447cf8aee3b)) - cli: run the delete confirmation rather than check its flag ([1b343e4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1b343e4ed9e87354cc4942ca83b459bf628178dd)) - ai: expect the project skill path under the working directory the OS reports ([7dc16fc](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7dc16fc28de22d1bd6136defa8df6bbedce368fb)) - update: remove the WSL-only Windows swap smoke test ([1b3bb42](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1b3bb4222ee7e2f64296851a6a2a9a09f92d0c36)) - live: the label and watch lifecycle runs alone ([7f7121a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7f7121aa5ee47b71941bde4968c71910df87cec6)) - openapi: the retry test sends through its server's own transport ([0aec4a9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0aec4a9b8304aff221978537bff17cd5bf50040d)) - point every transport fault at a port no listener is handed ([6fd023a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6fd023af8aa6203cd759910c8cb28182f8e802c2)) - cover the failure paths of bb pr ready and bb repo get ([4f41e8f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4f41e8f329a01885c4abb8f410a2519454b0a52c)) - docs: check quoted error messages against the source that prints them ([962f6c4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/962f6c4413515250c35e0157ac97b293c54d889a)) - webhook: name the create's command words where command-reach reads them ([f3f0138](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f3f013808ff95e3e33b5699aa949ed797fa077cd)) - cover the failure paths the review fixes added ([8cb9f43](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8cb9f43b251c1bfc6b2b47f218ee480d9695f94d)) - webhook: a create response lost to Bitbucket's serialisation race is not a failed create ([74d1635](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/74d16353bdbad409238befc16098148c3f59780b)) - transport: close the responses the outcome tests discard, and justify the doer's G704 ([22de971](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/22de9711bc4d77108eab6e4715dc4826034e5722)) - the clock-name guard reads the code, and ADR-085 says what it enforces ([6356f4e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6356f4e42ea1bc89e7554d5453be14d8bebe339d)) - output: check every JSON write under --limit, not whether the command reports once ([685edc2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/685edc21383562d061d1b1a30437afa3244a6cce)) - a test fixture is named at random rather than from the clock (ADR-085) ([5f1cce9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5f1cce9cbc80667da10d328cddbf82edde565ab9)) - pr: make the rebase transport-fault test reach the rebase call ([de90514](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/de90514b619be36ef526ac11ff9bcfd17888be75)) - pr: cover the rebase retry the live suite cannot reach ([2f909c0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2f909c0f0316320c86bad33dbe407f4c421836ca)) - deprecation: cover what a malformed version does ([2005d0f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2005d0f92000a7be1ba66c877eb42a235e13435f)) - live: read bulk output from stdout alone ([8326664](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/832666445239166d562f95c1183251bb541214c2)) - cli: cover the cases UnknownSubcommandError must stay quiet for ([8262b4d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8262b4dff7ba29991d07b7c69a0150cf42a655b9)) **Build** - docs: silence Material's MkDocs 2.0 advisory in every docs task ([d1a761f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d1a761f1c17e6c05450b3f007323473082d4d2a3)) - stack: stop at 2h58m, and restart an instance 2h40m old before a live run ([1a8e9fa](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1a8e9fa2f3f0f35bae0ca2f693e59c90343f44b0)) - stack: quieter pruning, and no empty row in the instance cap message ([59d0e7c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/59d0e7c6c1792be8e2f04d4f20e336c32b98d53f)) - stack: one local Bitbucket instance per checkout ([35698fb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/35698fb545fa97144d9992aa82542871f1ac8d17)) - stack: the local Bitbucket stops itself before its licence runs out, and test:live starts it ([25c080a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/25c080ac892310cb71c85b5c5feb5e64777d34b9)) - error-registry: each row's kind comes from bb's own mapping ([83217b6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/83217b66cf8a0cce7402c11d5e91663bc88e27d1)) - record the readme operation bb repo get calls ([e1135d9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e1135d9fbf35b86c90f471b57cba3a5b8ab8074a)) - publish the docs under each release's major version ([77b5b06](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/77b5b0635270f11f5f75f70f80567df8b1dffcb1)) - docs:verify-generated reports stale docs instead of hanging ([c866d51](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c866d5112a465844c22e7f584f73a6cb58b30188)) **CI** - measure a patch against the branch it targets ([1190aa5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1190aa54373ee96ce65dde83df5e163d8d2424a1)) - release: let a prerelease be a prerelease ([593e9f0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/593e9f048fdb4c610862d8a32e2f17e3b0b67653)) - release: keep the docs toolchain out of the job that can sign a release ([dbb15b9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dbb15b986567c1a4416b38aea7853acedc7fd7e9)) - ask for the check the promotion push skips, and stop expanding a branch name ([b9153d4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b9153d420bc678725819a85b4d3093ebd8bd57dd)) - make the Dependabot base hold fail when it stops holding ([5825e5b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5825e5bd5f41d165082f8d35a8822ae7936ce2a4)) - propose Dependabot updates against next ([45c68d9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/45c68d9ab9b545d6fbcb826a0bc86f4289655e51)) - release: generate each archive's SBOM from the binary inside it ([1a7314a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1a7314a1a5378507b047300eda76353b59f0992f)) - pin every GitHub Action to the commit of its latest release ([518899a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/518899ab0bb86274989a94ddda15f8a54487453c)) - run the unit suite natively on Windows and macOS ([ced6604](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ced6604466b5e1d899d785e31618151b323f7d15)) - a restarted local stack refused every live test and said nothing useful ([a44d9d3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a44d9d38d96f35aaf6729c6914cc7193eb1d479b)) **Chores** - run govulncheck v1.8.0, which can analyse go1.27 code ([698f427](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/698f427232e8dc80bd6855c324c2235991e70faf)) - run the gofmt and golangci-lint the pinned toolchain needs ([e0515be](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e0515be54d0bece2da04a4d40d7d449d0b1ff32c)) - deps: build with go1.27.1 and format for its gofmt ([a2fd62f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a2fd62f3b2a4a6129e0ae313ccf74003ab6a00d3)) - deps: bump the gomod-minor-patch group across 1 directory with 12 updates ([4bcfa06](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4bcfa06079cc2a58a32e642e2b4d22a1770e07d8)) - deps: bump atlassian/bitbucket in /docker/harness ([0bb98c8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0bb98c8f4bf8b641ee3459c245a3bb44f81965be)) - deps: bump astral-sh/setup-uv from 10.0.1 to 10.1.0 ([49098a4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/49098a4533cfb6a6206f40c34271ffd9e363c046)) - deps: bump the gomod-minor-patch group with 13 updates ([ac5cc7e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ac5cc7ee6df4ef81a0a2ce75a787a2d10fe405e3)) **Other** - State that the schema exists, and stop prescribing how to run it ([b7f9859](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b7f9859ac8be34cb601121b96fedaa9523ee9b49)) - Validate config with what the reader already has ([1a8e230](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1a8e230722ed8a14eac4aa48ffa34f2050000a5d)) - Name what a trace keeps, and validate config instead of reading it ([019271c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/019271c84769570f5c99cdd2c92d35b0cc45e123)) - Say what a diagnostic file contains before asking anyone to send it ([4038c52](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4038c5250b5eac25114e7186c8eabdf556dde6f8)) - Propose a deprecation window, for a decision rather than as one ([d07fc61](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d07fc61fdce3d0892e7a8c603db3775e5703a3f0)) - Put troubleshooting where a stuck person looks for it ([fe107ab](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fe107ab833ac6f98bb2bb016f46cff5a60497571)) - Move the self-update builds to the guide that deploys them ([23d15e0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/23d15e0b3a40ef88b837d7fbaef1d202bee4c5a2)) - Stop certifying a command the shell will not run ([c566d40](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c566d409032d37b398226009d44b75c052641c1e)) - Explain the build variant most installs actually deliver ([432ef74](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/432ef740fb9d526386ebd73c79d3a9dd3af62675)) - Give the system policy keys a reference page ([ecefffd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ecefffdc816a170c53bb3eb53b11964ef99eaf54)) - Put back an example I moved under a claim it contradicts ([7bfdff8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7bfdff82a42776dfbded8ef4007317e08058ccb2)) - Correct the two comments that said llms.txt could not be macroed ([b192b87](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b192b8761a821129636dad864cf26a02040d7f2d)) - Render macros into the files mkdocs copies without rendering ([5845d92](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5845d92116da0fcca6f669cf748f2c383aadeda0)) - Macro the other version the docs had typed out by hand ([a6f09fe](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a6f09fe2f32304835c84d83816b8b7de1f8a0851)) - Read the tested Bitbucket version from the stack that is tested ([1827b62](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1827b62eea4a6335d7ca1b7596dd3fd64134a54a)) - Separate the two compatibility questions, and keep next alive between bundles ([84201c7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/84201c7b70f5dd7c8c588f7e12ad6c956f4d61ce)) - Say which Bitbucket versions bb is tested against ([de0d457](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/de0d45760309dd29a0ce1423b7396b362872591e)) - Point at the contributor guide, and stop naming tests that were deleted ([0f813c2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0f813c25e8ee5b7e1b6ce276f096b7a49ca5ea11)) - Print the live coverage number instead of computing and withholding it ([340c6c7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/340c6c79a17ab0792c72bf67b937e448e7500ce2)) - Ship the Apache licence rather than a paraphrase of it ([8491938](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/849193855aacac3574134b76432e8eb47ce21ba8)) - Stop directing Arch users at a package nobody has registered ([dda59ac](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dda59acf719564cc08c76958e823a25ed6c187f9)) - An ADR may not send work to a branch the gate refuses ([40893db](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/40893db0b165d52514cf92961aad94c6bd7fc3f7)) - Teach docs-lint that a version can hide in a filename ([b3299c4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b3299c42945028fb155c7e353de7982001bcb332)) - Document the fleet controls an administrator cannot currently find ([836f5e1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/836f5e18207978ce9c112b362a274c4c73ff0edf)) - Say what the threat model can actually claim ([b90448a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b90448a6de5bfb16d912044ebe5f2e044b41a5cd)) - An accepted ADR may not name a flag bb does not have ([36bfaa0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/36bfaa0ebfe951d02472f7947c035843da95f1ed)) - Record the v4 credential decision instead of editing the old one ([f6420e5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f6420e56719b5548381d6549bb43ed7ece27caec)) - Teach docs-lint the two things it could not see ([8256737](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/82567374694e0646e456f1db356465ea7f1c766e)) - Correct documented outputs that no longer match what the commands emit ([d547520](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d54752078c1c6f66e8f448a92f9ade330ebef7c1)) - Correct v4 docs that still describe removed flags and fields ([50097d8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/50097d8abbb223a1a363a498245158882c65be39))

v4.0.0

Published: 2026-09-07

bb v4.0.0 delivers a stabilized JSON machine contract, credential security hardening, interactive terminal safety guardrails, and full behavioral parity with Bitbucket Data Center.

This release represents a comprehensive overhaul of the CLI's testing and contract foundation (ADR-079). By replacing internal unit simulation mocks with live integration verification against real Bitbucket Data Center instances, dozens of latent defects have been resolved across pull request lifecycles, result pagination, and permission models.

Key Architectural Highlights

  • Native Server CODEOWNERS Evaluation (ADR-080): Rather than relying on an internal regex-based parser that drifted from Bitbucket's rules, bb now queries Bitbucket's native UI evaluation endpoint (/rest/ui/latest/.../code-owners). This guarantees 100% parity with reviewer assignments in the Bitbucket Web UI.
  • Unified Paging Engine (ADR-074): All 18 internal service packages now walk pages through a unified engine (openapi.PageThrough). --limit now strictly caps the total number of items returned across all commands (permissions, comments, diffs, commits, branches), and --all is available to fetch entire sets.
  • Global Dry-Run Confidence Tiers (ADR-078): All 41 mutating commands report dry-run predictions tagged with a declared confidence tier (certain, projected, or unsupported), validated against real permission matrices.
  • Full Webhook Field Parity (#522): Webhook commands now support all 9 Bitbucket API fields (including SSL verification, active status, and secrets) with automatic secret redaction on stdout.

Upgrading to v4: Automation & Scripting Checklist

If you consume bb inside CI/CD pipelines, shell scripts, or AI agent toolchains, review this checklist before upgrading:

  1. Audit JSON Parsers (jq, Python) for camelCase & Envelope Changes:
  2. All machine output fields now match Bitbucket REST API camelCase (e.g. pullRequestId, projectKey, repoSlug).
  3. meta.contract and contract version numbers have been removed; the CLI binary version is now reported under meta.version.
  4. On failure, --json emits only a single error envelope to ensure clean stream decoding (ADR-075).
  5. Migrate Command-Line Credential Flags:
  6. --token and --password CLI flags are retired to prevent secret exposure in process tables and shell histories.
  7. Supply credentials via environment variables (BB_TOKEN, BITBUCKET_TOKEN), the system keyring (bb auth login), or standard input (--token-stdin, --password-stdin).
  8. Account for Non-Interactive Guardrails in CI/CD:
  9. Destructive commands (bb repo delete, bb auth gpg-key clear) now fail immediately if run in a non-interactive pipeline without --yes.
  10. bb repo delete requires an explicit repository argument (PROJECT/slug or --repo) and will not delete a git-inferred working repository.
  11. Implicit stdin reads now require an explicit - (e.g. bb repo edit file.txt --content -). Pass --no-input to guarantee scripts never hang on prompts.
  12. Update Exit Code Handling:
  13. Invalid arguments and missing required flags now return exit code 2 (validation), rather than exit code 1 (internal).
  14. Transient network failures in --dry-run return exit code 10 (transient), matching real executions.
  15. Update Go Module Import Paths (Go Developers):
  16. The Go module path has been renamed to github.com/vriesdemichael/bitbucket-data-center-cli (#459).

The complete list of breaking changes, commit references, and full change ledger is itemized below.

Changes since v3.5.2.

Compare: v3.5.2...v4.0.0

⚠ Breaking Changes - refuse a default branch that does not exist (0ccc14f) — branch default set and branch model update now fail with exit 2 when the named branch does not exist in a repository that has branches. Previously the value was accepted and written. - stop counting a --dry-run invocation as live command reach (874989b) — docs/quality/command-reach.json is version 2. It gains known_dry_run_only and summary.dry_run_only_commands, and covered_commands drops from 233 to 217 for the same tests, because the sixteen dry-run-only commands were never covered in the first place. - keep the reviewers when updating a pull request (14eb92b) — pr update now issues a GET before its PUT, so it costs one extra request. A caller that relied on the previous behaviour to clear reviewers must now pass an empty reviewer set explicitly, and no such caller could have been relying on it deliberately -- there was no flag for it. - register --limit and --all on the commands that page (653e91b) — --limit and --all no longer exist on the 75 commands that never consumed them. An invocation like bb repo delete --limit 5 was previously accepted and the number ignored; it now fails with exit 2. The flags remain on the 38 commands that page. - retire --token and --password in favour of stdin and the environment (8be1a1c) — --token and --password no longer exist on bb auth login, and --token no longer exists on bb ai mcp serve. Pipe the secret to --token-stdin or --password-stdin, or set BITBUCKET_TOKEN. For the MCP server, set BITBUCKET_TOKEN in the client env block -- "env": { "BITBUCKET_TOKEN": "${BB_MCP_TOKEN}" } -- which also keeps the agent on a narrower PAT than the one your own shell uses. - stop replaying POST and PATCH after a lost response (f3263bb) — POST and PATCH are no longer retried after a transport error or a 5xx. A mutation that previously succeeded on a second attempt now surfaces the failure, with a message saying the request may or may not have been applied. A 429 is still retried for every method. - derive a preview's confidence from a stated tier (74c4907) — 43 dry-run items now report confidence partial where they reported full. Nothing about those predictions changed except the honesty of the label: they are derived from partial state and never checked what they claimed. Automation gated on confidence == full will stop for those commands. Items also carry a new tier field naming how the prediction was reached. - cap the three list commands the first --limit pass left out (72f0033) — --limit now truncates on build status get, pr build-status and pr activity, which previously returned every result whatever the flag said. Pass --all to keep receiving the complete set. - classify the archive stream failure as transient (642d810) — repo archive now reports kind transient and exit 10 when the server is unreachable, instead of kind internal and exit 1. - classify the twenty-two errors commands raise themselves (759a8ed) — 22 error paths across the permission, reviewer and reviewer-group commands now report kind validation and exit 2 instead of kind internal and exit 1 -- a missing project key, --project combined with --repo, and an unreadable config file or stdin among them. - require --matcher-type on restriction update, in both scopes (84d052a) — branch restriction update and project branch-restriction update now require --matcher-type, and the project-scoped one also requires --type and --matcher-id. Omitting --matcher-type previously defaulted it to BRANCH and rewrote the restriction's matcher, so the value has to be stated. - plan every repository in a project, not the first hundred (519c2b2) — bulk plan now covers every repository a selector matches rather than the first 100. A plan over a project with more than 100 repositories will contain more targets and therefore a different hash, and bulk apply will act on all of them -- which is what the policy asked for and what the previous plan silently omitted. - --limit limits on the commands whose service pages to exhaustion (df25e22) — --limit now truncates on the project and repository permission listings, repo comment list, build required list and insights report list. Those commands previously returned every result and used --limit only as a page size, so a caller that relied on receiving everything must pass --all. - a dry run and a real run agree that an unreachable host is transient (1547358) — A --dry-run that cannot reach Bitbucket now reports kind transient and exit 10 instead of kind internal and exit 1, matching what the same command already reported without --dry-run. - a forgotten required flag is validation, not a defect in bb (bf9f13d) — A missing required flag now reports kind validation and exit 2 on 16 commands that reported kind internal and exit 1. reviewer condition create reports validation for malformed JSON for the same reason. - require --count on update-approvers instead of defaulting to 2 (c51f7db) — repo settings pull-requests update-approvers now requires --count. Omitting it previously wrote a required-approvers count of 2, silently lowering branch protection configured for more. - apply-suggestion needs write access, not read (2ed217f) — pr comment apply-suggestion --dry-run now pre-flights REPO_WRITE rather than REPO_READ, because applying a suggestion writes a commit. A read-only caller's dry run now fails with exit 3 instead of predicting success for an operation the server would refuse. - name every output field in camelCase, matching the API (381949f) — machine output field names are now camelCase throughout. In the envelope, meta.bb_version is meta.bbVersion, meta.limit_reached is meta.limitReached, and error.exit_code is error.exitCode. Command payloads change as each is modelled. - drop meta.contract, which never varied either (c2345b1) — meta.contract is gone from the machine envelope. It was the constant string "bb.machine" in every response; a consumer asserting on it should assert on the envelope's shape instead -- meta.bb_version is present, and exactly one of data or error. - remove the contract version, report the binary version instead (ad63272) — the bb.machine envelope no longer carries a version field on either the success or failure path; meta.bb_version reports the binary that produced the document instead, and compatibility is now signalled by the release major, so pin the installed version to pin the contract. - migration note for the bulk apply --json failure output (c955b57) — bb bulk apply --json now writes only the failure envelope when a run fails or is cancelled, so .data is absent; read .error.details.operation_id and fetch the artifact with bb bulk status <id> --json. Human output is unchanged. - reach the consumers that still read BB_ directly (1dcb4c5) — an inferred repository context is carried on AppConfig.RepoSlug rather than published to BITBUCKET_REPO_SLUG. A caller constructing AppConfig by hand must set RepoSlug; reading the variable at the point of use no longer works. - carry the git-inferred repository as a value, and stop it faking an explicit target (3a810ba) — --yes no longer applies to a repository inferred from the git remote. bb repo delete --yes inside a checkout now refuses unless the repository is named. - carry global flags as values, and blame the right input (f8ed1ef) — a validation failure caused by a global flag now names the flag rather than the BB_ variable it was previously written into. - name list options for what they do (4f99ee9) — ListOptions.Limit is renamed across internal/services, to MaxResults where it caps the total and PageSize where it is the page size. - register --no-input, and make the stdin guard see what it claimed to (dc966c2) — bb auth gpg-key clear --json now requires --yes; it previously skipped the confirmation and cleared the keys. - confirm destructive commands, and never read stdin unasked (fdf6267) — bb repo delete requires the repository to be named, as an argument or --repo; --yes no longer applies to an inferred target. bb repo browse edit requires --content or --content -, and no longer reads stdin when --content is absent. bb reviewer condition create and update read stdin only when given a - argument.

All 284 changes **Features** - pr: ask Bitbucket who the code owners are ([ac4980a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ac4980ad7f09f290d9798a1f0acaf96aa9efe648)) - auth: retire --token and --password in favour of stdin and the environment ([8be1a1c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8be1a1c361b44ff497d2cacd4d75ec36f01548e6)) - dryrun: derive a preview's confidence from a stated tier ([74c4907](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/74c4907cd26fb1f4296cf27af249f15d5364c4bb)) - cli: enforce the closed sets that arrive as positional arguments ([a1c4b91](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a1c4b9168e3fdd7c55f3a88a594a61ea003ced2d)) - cli: make a flag enforce the set it advertises ([fc46de0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fc46de05768d5747ab036efb47e846ad39e2393b)) - repo,diff: model the last commands and gate on completeness ([a2b217a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a2b217aa875011de6ba0d49cea925361f99093a6)) - pr: model pull requests, comments, reviews and checkouts ([fb6c6ed](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fb6c6ed8ea153bfa25c4a0871b38599af450d46c)) - project: model projects, permissions, restrictions, tasks and webhooks ([c4f8665](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c4f86656ad7358bb41a61e9e0ef52bf65507aa43)) - auth: model status, credentials, tokens and GPG keys ([930a8f4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/930a8f4c68890eccb37664b4d4fbcbdbc7a29c77)) - build,branch,browse: model build statuses, branches and browse targets ([6332adf](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6332adfe7f424a19bb685b00ee2ed10adf391a23)) - reviewer,reviewergroup: model conditions, groups and members ([0424da5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0424da5a7061d0fe7f743794368d00990f3507a4)) - insights: model reports and annotations ([fa48e8e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fa48e8e2eae67e8b8cbc689d7e6b22540569a923)) - webhook: model the output; the two renderings disagreed on version ([9e57e8b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9e57e8bfc5775df842ed80036908907d583cd3dd)) - deployment,ai: model the output; a third spelling of repository retired ([78bfd18](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/78bfd182a3c8bfb222ae5cd568bbabce9b7e127c)) - sshkey,update: model the output; record why bulk keeps its own schema ([ba51e39](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ba51e398a6103d3101f4506629417dfa18d25d08)) - commit,search: model the output; share the commit and pull request shapes ([821af01](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/821af01d243d0998c8713f820c73ee68166ff3c6)) - result: shared commit model, and stop publishing nulls that cannot occur ([c08281e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c08281e3de3ebd8d2538df8bc09ea5c09ce2fde3)) - json: name every output field in camelCase, matching the API ([381949f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/381949f31ed89fceec674a91c7c94dd0b7b6a8e1)) - ref,admin: model the output; add the shared repository shape ([2dc9d85](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2dc9d8593a1ff08edcaf3d245e5c9e8409dff246)) - tag: model the output, derive the schema from the model ([3c64eef](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3c64eefd4d336281b0102eb7c4cad911bd7c1bae)) - json: drop meta.contract, which never varied either ([c2345b1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c2345b1f8d69b601676b5226ccee862a4aef10ff)) - cli: answer --describe with the command's own output schema ([149bca0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/149bca0f3fa7e9426f9389044b13672e97b02e8a)) - json: remove the contract version, report the binary version instead ([ad63272](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ad6327267247967f8a7c5cf9dc821680ecc85eb2)) - cli: ask for a pull request's title and refs when a person is there ([2a22c53](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2a22c538fd32d98bed72bde6ddcff20eccd144b2)) - cli: confirm destructive commands, and never read stdin unasked ([fdf6267](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fdf6267de1acde9fab93e8b5ffc03568994f921e)) **Fixes** - live: two seeded repositories could not tell their commits apart ([1404f17](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1404f17bd875a6c2d01aa1884b45f265e88e7c92)) - ci: the script tests picked an interpreter this repository has, not one CI does ([d45343c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d45343c3211c31a784af76328261baea9a8624e6)) - test: a parallel test swapped the process's stdin ([6f49018](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6f490186c00d3ed072f5194b1dfabc6e88367cec)) - style: a data race the tests could not reach until they ran in parallel ([a5e6b08](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a5e6b08367d5abcbdba02bcdd7312b10392eb0e2)) - test: a live suite that reports "ok (cached)" has not run ([46ff8f7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/46ff8f72fe02077f651d6569249dda4378882e5f)) - live: the shared project answered to a filter a test relies on ([fc69bab](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fc69babc546152593b3dc887cc5d227743966ff0)) - bulk: a create response cannot say whether a secret is configured ([e811c7c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e811c7cbc9db7b2ada2eb82e4a42d79a3f38746c)) - webhook: two commands wrote a credential to stdout, and four fields were unreachable ([3b52de3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3b52de38ecdbf9ade5c056fe753fa44f53909fa0)) - mcp: keep ambient repo inference out of serve's scope ([26ae59f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/26ae59f4136bb91a8a7aac55ecbde91d3223b9b3)) - openapi: read the exception on a 400, and stop calling a spec gap internal ([77f8849](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/77f88494716ecb29e27d6ef7c4683f02ce6ff0e2)) - search: refuse a role the repository listing cannot apply ([cd9360c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cd9360c481e216c07933c3510795660fcd4fd7fc)) - reviewer-group: name the members, so a group can be created at all ([2f0fc40](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2f0fc4074309e96567d02cf127304f40e0be0c42)) - mcp: list_pull_requests promised a role filter Bitbucket never applied ([a23c196](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a23c19638bfde30e1344270aa3ed485de3411b15)) - diff: a path with a space came back truncated, and CODEOWNERS lost it ([a0b9d7c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a0b9d7cd07a3782d366ea5527463a2f72399e128)) - pr: the update preview promised a change the command would not make ([b4557c3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b4557c39733c0a9f580ad21e7bbad012918e45b4)) - coverage: unit coverage counted only what a package tested of itself ([3f6c0e7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3f6c0e706aa42c5f26808d2751efaa9a93d10f28)) - reposettings: every approver update began with a request that could not work ([60be9d2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/60be9d27db0caf99bcb85cdc437debfa0da2923f)) - dry-run: two previews compared against a shape Bitbucket does not send ([8e3213c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8e3213c071493c2a30eaa8ab7ff2ee3a352b49af)) - paging: --limit did nothing in five more places, and the last loop is gone ([597d97a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/597d97a18d970168cbd9c2045fe32c25b31122c3)) - commit: --limit on compare did nothing either ([f6f6977](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f6f6977a6a17d2ba5b6362f1377dfe43d98ec0f8)) - services: ADR-074 applied to the half its guard could not see ([e1fe8df](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e1fe8df639e9f99a5441722c3cb4cf65acb828e3)) - branch: --limit on restriction list did nothing ([84acb7a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/84acb7abb1576998165a48c215eab002df2bf695)) - openapi: an empty page is not the end of the listing ([f3d12b5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f3d12b5466e4fa84d68feafb4b23817b83ab5f82)) - pr: --state closed asked Bitbucket for a state it does not have ([2433714](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2433714384296a520cf3897623ed5afbbf4315b5)) - pr: unapprove clears any status, so its dry run must predict one ([b857cb8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b857cb82548f731acd09ff25bc2f79425f62507e)) - pr: find the caller from the server, not the config, in the review dry runs ([8860cf2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8860cf250209b0eff62d87644705b010649f833d)) - pr: a rebase with nothing to do is not an internal error ([2d0ff66](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2d0ff6623bbda5e0bb703dfee48803845e89eff6)) - pr: stop the review summary answering questions it did not measure ([1ed1374](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1ed1374e5864fb4f9b2b8ea359862e552ee1e658)) - pr: count what a review summary can cheaply count, and drop two mock files ([1bec1ac](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1bec1acfb614b72ade44ae75c3a2bba863f0cdfb)) - tools: count an atomic attempt counter as fault injection ([2269665](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/22696654d1a78c9f51a210f7db5e3d64cfad1d2c)) - reviewer-group: resolve a name on update, and close the five masked commands ([4b5c9c8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4b5c9c8b9c17dde7d8c3cfbd0e7f84f542ac4515)) - two heuristics from review, a numeric group name and a capped branch scan ([1103232](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1103232ecb814118cb874dccdfc89c079050452a)) - tools: tell fault injection apart from paging in the mock inventory ([5bdae79](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5bdae797337f4fe28b10b26d0a63373dda2dd26a)) - reviewer: read the reviewers the default-reviewers endpoint actually returns ([5044fe3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5044fe33a429291669ef3bcabcf2fc57887710e8)) - reviewer-group: delete by name, and say not_found when there is none ([81e219e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/81e219ee3634e19ef656aea51a0523920e93021a)) - branch: refuse a default branch that does not exist ([0ccc14f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0ccc14f960753249167cc2db6c224d1e98d1f068)) - tools: report a call the scanner cannot read instead of skipping it ([f03514b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f03514b4b9b11205c6b9f3f50ab8519175ea3b2a)) - settings: keep a default task's ref matchers when updating its description ([e2e45f4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e2e45f426f519414f9c17feef880c97df269e336)) - pr: resolve the current version when rebasing a pull request ([8c6b56c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8c6b56ca865b72a4a593d975b95867bfdf141336)) - tools: stop counting a --dry-run invocation as live command reach ([874989b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/874989b5677c14c3aa4228e3470e2e5283648b7d)) - test: make the live harness write the content it was given ([1059b72](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1059b720508eb07a6cc7aa0f77755ef86e45182c)) - pr: let pr update set the reviewers, not only keep them ([adea79e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/adea79e7d5272a259ce2d6076d5debb18d5902fa)) - pr: resolve the current version when merging, declining or reopening ([39eae37](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/39eae37ed70c7a5a9fa40273582953e1fde9b3cc)) - pr: expand a CODEOWNERS reviewer-group entry instead of inventing a user ([0c47b51](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0c47b51e4a6a13f99718af8bfd8d220b5d89052b)) - pr: open a pull request from a fork into the upstream repository ([2f56e95](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2f56e9513a69683589c439aaae72c8e3c660b98d)) - pr: keep the reviewers when updating a pull request ([14eb92b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/14eb92b9566f46696ee176e795ad91e70e908747)) - cli: repair the paging guard, which a name collision defeated ([382df2f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/382df2fbbc1c94dec826ac65afdc53c5ce9218fa)) - cli: register --limit and --all on the commands that page ([653e91b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/653e91bf5e77448b638a1ea10fb754677709564c)) - transport: stop replaying POST and PATCH after a lost response ([f3263bb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f3263bb1311e2f0fa1fa0291e46d6ba5664e4c7c)) - pr: predict a merge from mergeability, not from state alone ([b055cca](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b055cca9b98692b3a6c74bfdea6e45cc24ca27a9)) - dryrun: complete the three remaining capped existence scans, and cover the batch ([586afa8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/586afa8241b79b8848aac50cf21b8edd05175331)) - cli: cap the three list commands the first --limit pass left out ([72f0033](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/72f0033e654da53600cf84f1644a54f9a5ab9cc2)) - repo: classify the archive stream failure as transient ([642d810](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/642d8102910f00a60ded2c77c5461f0407cce7d9)) - diff: publish the summary Bitbucket sends, without narrowing it ([907a1de](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/907a1de77af0e764ab1d4f1f02497324cc1f82de)) - cli: classify the twenty-two errors commands raise themselves ([759a8ed](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/759a8ed49df49abf5f524b5a0cd098bfc05fb30c)) - branch: require --matcher-type on restriction update, in both scopes ([84d052a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/84d052a18db131f55e8211d59af9d3df09ff685c)) - diff: read the stats summary Bitbucket sends, not the one the spec promised ([a033f38](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a033f38d9167667e7a34fb134e0dceb6cb7f293e)) - dryrun: ask whether the thing exists, instead of scanning a capped list ([81f1cc6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/81f1cc61a81be41a8e49bbcfc784182079dbbee7)) - bulk: plan every repository in a project, not the first hundred ([519c2b2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/519c2b21790cf5baaf1d7b23df3b21dec72ab668)) - cli: --limit limits on the commands whose service pages to exhaustion ([df25e22](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/df25e2231e57df797d8fe5e6a28c07f3b5ee4acc)) - cli: a dry run and a real run agree that an unreachable host is transient ([1547358](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1547358865498418f79375f32905d76cd2f939d5)) - cli: a forgotten required flag is validation, not a defect in bb ([bf9f13d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bf9f13dc7eacb20aab92804c1fe71d6824393826)) - repo: require --count on update-approvers instead of defaulting to 2 ([c51f7db](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c51f7db7b4e2abcfb913ae03b31db1246b35d97f)) - pr: apply-suggestion needs write access, not read ([2ed217f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2ed217f55abec0912d28a70d486091b3106a10c5)) - repo: send the enabled strategies with the default, so set-strategy works ([0b5dabb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0b5dabbd6c773a83635121745509c66367d8266e)) - cli: correct three things the fixes themselves got wrong ([1c4417c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1c4417c1561be997d36e6ddb320a3753c1e7153b)) - cli: a nil pre-flight checker is skipped however it is spelled ([950ee91](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/950ee91dd4c6f90653db5fa895511a98a1fa82d6)) - cli: enforce the sets the sweep missed, and widen the guard that missed them ([eb3b615](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/eb3b615203f8048429c694f3af907e607aeaf7c0)) - cli: an empty enum value means "not given" again ([1dbef1a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1dbef1ad4bcacac00552f7662fdfd21658c6e395)) - pr: restore the ff merge strategy, from one list instead of four ([2dc9cab](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2dc9cabd76b77983f3c3656b40e7f18bebc3791c)) - repo: refuse --json with --output -, rather than ignoring it ([e587b63](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e587b63c509d091b3838f1f043bf94440f9db4e8)) - comment: decoding cleanly is not the same as carrying a comment ([adf693d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/adf693da9e9ec6728fd1d6e042c59e436c204a31)) - comment: a read that fails must not become a write with no lock ([845ab0a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/845ab0a6412771133f5b8d801fbfabc0ea8d1c5e)) - comment: let a reviewer resolve an inline blocker ([0e63248](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0e6324848f40989bf25bd1339422fcaa3d3bf03a)) - quality: keep a raw client call under the operation-path guard ([e6849cb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e6849cb20e53a52a6054a889b10ca7a46e41db70)) - comment: decode a comment written in the web interface ([63f305e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/63f305e1c1dc1f57fea8495529ea52fb90db8131)) - comment: anchor a commit comment so it can be read back ([fb052da](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fb052da73a250c7b5f88810d2741bfd685fa03a3)) - comment: publish a reply once, and let bb list the comments it makes ([a29a8cc](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a29a8cc5a56fbff9a8bea53793c7bd31c9d2b47e)) - comment,settings: reach a reply's body, and stop inventing settings ([530e52f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/530e52fc9830b5b9b383d82d242e5ef5d3ec3460)) - the rest of the review findings, and the gaps that let them through ([28ea39c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/28ea39cf4be6af4aceab527caf0170a73d74405b)) - five contract defects the review found, and a guard for the naming rule ([1d0a528](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1d0a52886b9ad885b35e61baab1de47ace357377)) - repo,pr: read blame as a list, and keep the comment extras ([2e9397d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2e9397de8cc0324605baffe0b454fef53a66bfbc)) - repo: say how a file's bytes are encoded, instead of corrupting them ([c9c7a8b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c9c7a8ba409da36769ff929008c8e6c1e37a1958)) - bulk,docs: spell the operation id one way ([ca089e7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ca089e72bf1d3aa35014e4f9a50866ed77b74585)) - bulk: show cancelled counts in the human summary ([82f15f2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/82f15f29b0c72988547eeb62f77040a339b78b8b)) - errors: say why WithDetail does not reach through wrappers ([45b697c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/45b697cf92004687ccb395dd01e4c8541af0018c)) - errors: copy on WithDetail instead of writing into the caller's error ([da44eef](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/da44eef570d67119a10825e757bcda90918985ee)) - json: carry failure handles in error.details, and correct the jq claim ([df808d9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/df808d9e7c96c80478143feedecd21b9539422b5)) - bulk: emit one document under --json, and derive the kind guard ([ed568c5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ed568c5407d367f209f418f44316a3e768bef8a0)) - bulk: record cancellation per operation, not only between targets ([f308583](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f30858335527d1abe4e0a64b628c3806126f6c0c)) - three Phase 2 defects, each with a guard that would have caught it ([50287c9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/50287c9920b7815bd03b14f0f3a305cd8cd64841)) - schemas: publish under the renamed host, and identify each release's copy ([395d3a5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/395d3a5e239658ebc3d4c76783894ea762964f4e)) - cli: reach the consumers that still read BB_* directly ([1dcb4c5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1dcb4c5e99fd34d919287df5f44fdef6e4861239)) - git: release the inherited repository before trusting the ceiling ([24034ec](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/24034eceeff4035465561afa2801f00de18455d7)) - cli: ask about flags before loading configuration, and tighten two tests ([3330b38](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3330b384d5fe73a6dec39a2d5d566b76e66e118a)) - cli: register --no-input, and make the stdin guard see what it claimed to ([dc966c2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dc966c2cfe840761612bd4fc697a38ce0ccbee51)) **Refactors** - repo: take the git backend and the prompt check as dependencies ([fcd7bce](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fcd7bced7ee81ab3fcbb106f74570ac30ceb4cc7)) - paging: the shared page carries a plain int, and two more caps land ([8ff7c2f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8ff7c2f74d61a178556b11a8db0a8a29a64a38f6)) - services: browse and repository listings on the shared loop ([f49fb31](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f49fb31bc04ceb3ca51a1789df24dd0f09b35558)) - services: four more paging loops, and one I broke on the way ([b7ce2d3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b7ce2d3c85fc943506dfa8e73bd187b6344afd4f)) - services: three more paging loops, and two that were not caps at all ([c7f4ce4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c7f4ce489e192165a7d4c7ee9ec0a197944138f7)) - services: one repository check, not nine ([4ce5d1c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4ce5d1c092a26ab7a2e788371c18d65d531da621)) - services: five paging loops become calls to the shared one ([f262c68](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f262c685888d01b0ca3ddef3db56de77c1f73a47)) - repo: drop the archive format guards the enum flag made unreachable ([3f98c6f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3f98c6f3168aa29a07eee75daccf99b0e12f17e4)) - move safederef out of the CLI layer, and guard the direction ([4c49849](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4c49849bd355b75d136f93d7091b175f4009fb9e)) - cli: delete what the ladder removal left behind ([425e5af](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/425e5af0b47df2896499a356a45a19264c1ce66a)) - dryrun: derive the preview summary instead of restating it ([2a29621](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2a29621d408005684fda8a5c2e1f9b46c0e72383)) - cli: one place to read a pointer, not thirty-four ([2438838](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2438838c79b15f38f3a7f3797931c6b4113e9e7e)) - cli: one permission pre-flight, not eighty copies ([ad559d6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ad559d65300be7fd6aaa076c86783713d6b2b7f7)) - one comment model, and stop deriving 222 schemas at startup ([8daf525](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8daf525700f940029a8175a12fbbc8e44e8c009a)) - dryrun: camelCase the keys inside a preview's target too ([8f3a105](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8f3a105d8aae8a4ee30742072040962f5d539213)) - repo: render pull-request settings from the model, not the raw map ([c7def64](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c7def64a36c20b9c80e4808515c56eeb644d29a7)) - dryrun: name the preview fields the way everything else is named ([82a3532](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/82a3532914b4e8dffd0891e8ac43958cbd3eb7a2)) - docs: stop publishing per-command output schema files ([b9cca70](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b9cca70f0afde99bd7c4ded9b6e299344dedded0)) - cli: carry the git-inferred repository as a value, and stop it faking an explicit target ([3a810ba](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3a810ba905f1ff7b7d99797025a6a30bdda4aa73)) - config: carry global flags as values, and blame the right input ([f8ed1ef](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f8ed1ef160cca313ebf58a1c1208a8deea14963a)) - auth: take the host override as a value, not a process mutation ([f3d6c29](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f3d6c29e23060eb927eaf43ca8838f58a2b4e86f)) - services: name list options for what they do ([4f99ee9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4f99ee9ccdfa2952721940fe519aa45f331ce905)) - git: split Guard so what it decides can be tested ([bde265e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bde265e6c0bba11619ba7ddb8537e1cf3061db63)) - cli: decide interactivity in one place, with an escape hatch that is free ([93997ee](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/93997ee0c35ddfc05ad8c98b0211bcc5c7d546a6)) - mcp: derive DestructiveHint from Safe instead of declaring both ([3e31717](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3e317170380e1f6dac571202c6fb1b63130264c7)) **Docs** - release: refine v4.0.0 release notes preamble and upgrade guide ([41a3605](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/41a36058b512893479d685dacca7a49faa0933e3)) - adr-066: the promotion is a push, and the branch rule is enforced now ([50f0a02](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/50f0a024e96eef73733e9b6622206a6479a108cf)) - regenerate the ADR pages for ADR-082 ([422d861](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/422d861da8785872e0f5113b8fd8708610170ea1)) - adr: ADR-081 takes effect after v4.0.0, and names what it still needs ([ed70c1b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ed70c1b4929220eaecaa5ffc42e7aaeae4a3432d)) - bulk: a secret belongs to an operation, not to a repository ([eac68a1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/eac68a1b7696fa648d68d2dd2e21986b99938b76)) - webhook: where the secrets come from, and what bb refuses to print ([52fbc27](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/52fbc2711db09f626f131715d53ec820aef68336)) - openapi: the code-owners endpoint has no source, so record it as one ([0b7ba84](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0b7ba84992fbe4303ffbd93e1c8d02518756b1d0)) - adr: propose closing issues on release rather than on merge ([b7230db](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b7230db32ddd827b696eed95ec1904d9544ed243)) - adr: reconcile the records, and make one-sided links fail ([ac6d506](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ac6d506c1a58ebaecf0f0908a9810fd71adf6dfc)) - release: give a release room for prose, and stop shipping a stale changelog ([1331583](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/13315835f5da8ce8b2b4da92022a4fe3bae167c6)) - agents: list two governance guards the table did not name ([7a254ec](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7a254ec7b7f49a9ee8261ea74d7ac30e96efd639)) - adr: regenerate the ADR-067 markdown export ([295d682](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/295d682564c8f7ef2f4eed330d436f6ca88a9f99)) - cli: regenerate the command reference for the new --codeowners help ([ac27890](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ac278903bf10ee0fbbef0e3e91e87fe25446d4fb)) - adr-074: the rule is no page size, not a better-named one ([17b5e27](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/17b5e27a86157bf42d9dc96cbfc0fa4b0c7740ac)) - openapi: register the three default-reviewer spec divergences ([bd268b8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bd268b8382dfbc4623bcbc73b6d81758e49501c9)) - adr: supersede ADR-052, and turn the mock inventory into a work list ([5f4ddf5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5f4ddf589a0e4ae716cdde40663ae809f0d7303f)) - agents: write down how a bug gets fixed here ([1baaa18](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1baaa18ff76a4b1556242898a54726e1d5659208)) - regenerate the command reference ([e59cabe](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e59cabe23cf96e03c3665b1f48ef50e7f30c2d56)) - adr-076: a human key=value label is the field name too ([828da66](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/828da66043033bc3b31c4230f97d9aa7d29fe628)) - diff: say that a stat run can come back without a summary ([316206e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/316206e41b34601248e5c130f3865d4c92f1ccc1)) - result: name the third answer, and fix two comments naming a renamed field ([ebdc6ef](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ebdc6efc82e1ad9af888a4ac8c6de1c7cbc177b3)) - readme: the machine-mode example was missing three fields ([5251f56](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5251f5653b326059d7b390079e39a42de75ce1dd)) - bulk: migration note for the bulk apply --json failure output ([c955b57](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c955b578b2716ff2e872ed3bd6090851ed09a6af)) - llms: reshape llms.txt into an agent setup guide ([20d8b14](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/20d8b14a39886da05e2d01604ae4ff88e1f854eb)) - adr: record the phase 1 decisions and the guards that hold them ([648538c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/648538cc80977c23a2eefe0737eb5272b039bf22)) - adr: state the invariant rather than narrating the change ([a52cdcb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a52cdcbf6e90345443fcf69ed453db3d51714ecf)) - drop the two references to things this branch removed ([d2f44fd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d2f44fdaef5426c1fa9d835bbf0bce032ddc7a8e)) - adr: record the governance-test discipline, and retire "CI-safe" ([6840b0f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6840b0f25982581eba5c73efcfc345e8414a9d6a)) **Tests** - live: the permission tests run in parallel, and three things that stopped them ([82ac1ca](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/82ac1cab8b056ecdd7d54f70053902fc2d0782c2)) - live: bb waits out a real Bitbucket rate limit, and Retry-After is not dead code ([bc9ae75](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bc9ae7577bc049b1fa6de95d24109fbe2e540356)) - the suite ran one test at a time because a helper set an environment variable ([c73505e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c73505eda359475dba4be26ef86351caae198ff4)) - every test that can run in parallel now does, and auth stops waiting on DNS ([f58a95b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f58a95b4b1f14647971ce2cb2009fdc05de25932)) - repo: seven clone tests take their configuration instead of publishing it ([7a0bbaa](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7a0bbaaff53653b46a8566d1c68d5110d9678e67)) - live: name the isolation each test needs, and stop paying for commit ids ([906043d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/906043d64e2998d5aebd9dae1de1768765258e44)) - webhook: the branches a live payload cannot hold at once ([40e7515](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/40e7515f5f1ccb2bb88b4d74a4f5f8d830460127)) - live: a server started inside a clone can still reach a sibling ([37d5c1a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/37d5c1a6e81729fdc340da4e1e3c8ee21f2eb25f)) - openapi,network: cover the branches the two fixes added ([cc057fa](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cc057fa5aefa24aa6c4a47ddb0d423caa04fbcde)) - network: prove the recorder records, and gives the body back ([aef9681](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/aef9681951aa457247d91034328806dde8b080c0)) - tools: record what Bitbucket answers, rather than assuming it ([f98d4c8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f98d4c88e125aafc60a0a9cd94d419cebc395b69)) - prove the unreached guard guards, and the code-owners refusals refuse ([700a222](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/700a22263dc522dcedd5c67e8c7c6a3b527bfc44)) - live: pr status read the branch of whatever checkout the suite ran in ([9245f1c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9245f1c5e0d29e7fb098a1a1ece3053574cdab8a)) - pr: the last suite that read an id out of a reply it had written ([b1b30f3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b1b30f385212401def4a28aba1cdc414d17369c2)) - pr checkout, against a real clone rather than a recording stub ([c27775d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c27775d7a4e759f02f197bf8c219c74fa83abe99)) - a helper with one caller is not a helper ([5b36a87](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5b36a875d8742bc689ab85f40a4e4c0993efe85f)) - CODEOWNERS had no live coverage at all ([533808e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/533808e16cc546b1737a3bbcd795ae7ef41fcded)) - an inline comment and a reply, read back from the thread they joined ([fea62e4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fea62e43e23e70367711743006bcfa8e22322ce6)) - where the permission line falls, drawn against a real account ([14c7d80](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/14c7d807fa2231359df215b123a1729529e9d721)) - a pull request from a real fork, checked out into a real clone ([0494135](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0494135c0f77645801b33548e8f1483a09541aac)) - the property counters, and the endpoint that does not send them ([f9c7c56](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f9c7c566ef7cf0ffac7ff2efef91e1c3aa1bf66f)) - the unreachable URLs became listeners that say when they are reached ([c5e4c76](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c5e4c7657e6360f29e091432ba4b1286ef5a247d)) - a fork cloned for real, and the remote git ended up with ([b6aad33](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b6aad33bb13148481578298028df9d34df7ac81a)) - pr status asked a real dashboard which reviews are still owed ([4758117](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4758117a4b00f10c9127d62cf2a0f0943214cae4)) - a failing bulk apply, refused by Bitbucket rather than by a fixture ([cc58c2f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cc58c2f17fede885a78656f9b1816b37ecfd4142)) - two service methods only a mock had ever called ([a76fc28](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a76fc28f8fca653744dde163029a9bf70685b2f1)) - the MCP review tools read a timeline Bitbucket wrote ([b588231](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b5882313ff1941e7ee6689467256777e2bb6c355)) - the permission aliases and the settings tree met a real Bitbucket ([e0c9471](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e0c9471f6131e7189dc544450a63982a45e10ecf)) - status-taxonomy is empty, and the bulk runner met a real server ([542c666](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/542c66628a329046ea8f1094fc2ec9b5de2b4287)) - thirty-seven pull request suites, and the shared guard they left behind ([78a38fd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/78a38fd1e85f410f0eaea37d90510a4411669fbf)) - the canned responses are gone, and two of them were not ([1ae21e9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1ae21e9236aeaf455334ec8cdac00f102c50b0ce)) - fifty suites whose only witness was a handwritten Bitbucket ([cf366ad](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cf366ada7dc8c7d6b3e3f0055094fedc7e7fdbfb)) - the fork payload, and three servers that were only ever a URL ([2784f85](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2784f85584e45adbd5890c13e7c235f7f100f6f2)) - three previews whose fixture decided the thing being predicted ([9b375dc](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9b375dca7caa51d8b1c1abb49c555a1abc56bbcc)) - services: zero means the default, and nothing said so ([0085411](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0085411af9ea4c312b2d9f61ffd66984dbc4a7cd)) - cli: three suites that proved a formatter agreed with its own fixture ([44586a0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/44586a0fe0d3006e57c934632486f6ccaf0b614f)) - services: one contract for eighteen paging conversions ([0fa0fc1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0fa0fc16b8b4a388869143e5362dd9cba1d18578)) - the servers that were only ever a URL, and the flags nothing had driven ([3ec7905](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3ec7905493c9cca6af2be99b801d06f911469916)) - cli: the dry-run prechecks go live, and the mock refused too much ([8276501](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/82765017a9b5f4ac4f33f1d13367f272987b301e)) - cli: the resource previews go live, and one more was unreachable ([ee18f11](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ee18f11394b0c96ec1496adaa4d87ab4443095b9)) - cli: the dry-run predictions go live, and one was predicting the impossible ([13e89d3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/13e89d30e6bcec55dc9e8943eb3ab9c5ecad246a)) - move another sixty mocks out, and say why the rest stay ([913a17c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/913a17c23bf0e8301199650e0f7583723a5cfe30)) - quality,openapi: one status mapping, tested once, guarded ([a42ea33](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a42ea3388e21a6825a367c08d715be098ea2e876)) - mcp: pin that a review status replaces the one held, rather than joining it ([3e5d099](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3e5d099d9c593f08d7261071a0a732195d04ff69)) - mcp,transport: cover the review surface an agent reaches and the transport's two Bitbucket claims ([1737aff](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1737affb117f02772290e703442bf493698f3fb0)) - comment: prove resolving a comment works, then drop the mocks that assumed it ([5bc6f99](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5bc6f991391744dfddb1d22f48f9e7aca6180163)) - api: take the passthrough's own decisions over their inputs, the rest live ([f96daec](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f96daec9dedd4930d98a46fcca2074ab6f2246cb)) - governance: delete the mocked governance CLI suite for what it could not prove ([1d20b95](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1d20b954d8059faefeb0e26a422768b73df01850)) - live: migrate auth identity, the command-path smoke tests and the last dry run ([56d08a9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/56d08a9021dfb4b2ef840eec1dce1a08ddf9bc71)) - live: migrate the pull request human output mocks ([227ba34](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/227ba34a32f26a1345de3cadb6f1c74aa7b23750)) - live: migrate the pull request human output mocks ([f98928a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f98928aba5d9326ebe5712d1ae1bdfd7269162f0)) - live: migrate the repository settings and permission listing mocks ([5cf1fbb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5cf1fbb663fcf12b8038373255d7acd1f84ea591)) - live: migrate the diff, comment and quality CLI output mocks ([6432f6e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6432f6e36eb12d4c7b9dd271a36ae92b0723552a)) - live: migrate the dry-run preview mocks, and check they leave no trace ([6d17d29](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6d17d2972a494ea0a8253f0325b45f1bc931a4be)) - live: migrate the tag CLI surface and the empty listings ([17738a6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/17738a6fa71399834afed8bcb515be9cab68c0a2)) - live: migrate the branch command surfaces from root_test.go ([c089b64](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c089b649f65593f2f042c59c800df4f4cf137cf9)) - live: migrate the admin health mocks, limited auth included ([812e104](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/812e104d7c188297b901bca34f153140173554ba)) - delete the last eight tests that cannot fail ([7fa09fe](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7fa09fe30cfc995b99603831468bd6437de2e68b)) - cli: delete twenty-six governance tests that assert nothing ([23a3031](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/23a3031e1d43742d183f74264c202448dc2f5979)) - live: prove a webhook rename keeps the secret the server never echoes ([67052cb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/67052cb5c870dd29119219fba94c5fbaa7d6f33b)) - live: migrate the path escaping and paging mocks ([a05975d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a05975dc3887efc892b1811f2e13c36591c77618)) - services: split validation from authorization mapping in three services ([78a1266](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/78a126692e71e9607aa196534606924fb2f6af34)) - live: migrate what bb api does with a response ([4d1f64a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4d1f64a9de45e404f7f85720ef9bb4510db7c1f7)) - live: migrate the pull request comment anchors, watch and auto-merge mocks ([f8adce8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f8adce89182c376640af6e329bb34fee28e6a0f2)) - cli: delete nineteen tests for a command that no longer exists ([017e54c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/017e54c32d4f0ae5732c8823a4ca071ef9fe152f)) - live: migrate the diff output modes, and make two validation tests assert ([651b73a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/651b73a294a39f3aca2f15ac12d2f9ff33a0e572)) - live: migrate the comment anchoring, reply and resolution mocks ([2676ed4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2676ed4f8636d602a8a2cbdc8cd74bc5a6596fee)) - live: migrate the settings write mocks, and make a validation test assert ([a392b10](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a392b10ca6c5d35b6df2fa24245596a6715a3b5f)) - live: migrate the pull request mergeability, draft and build status mocks ([dee7bb8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dee7bb872fd5080171757230e40ed89bfb64195f)) - tools: index every mocked Bitbucket server and record what it assumes ([f0f997e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f0f997eeab3b903f9ccc80f98de994138833b97e)) - live: run the sixteen dry-run-only commands for real ([ac39f38](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ac39f38c218f181a9d3b1073781101e88b147acb)) - live: pin the five pull-request fixes against a real server ([4d25ba3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4d25ba3649bdbeed618cd3143177741a25654d74)) - live: pass --matcher-type where restriction update now requires it ([a272d84](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a272d845b32e032ac08081cfd9b1b235e7eea899)) - repo: pin the merge-config shapes enabledStrategiesWith is given ([5c7e7d0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5c7e7d03790c8b6a468874650c59323d4a1bf297)) - comment: cover the anchor paths, and fail when a field is dropped ([996c8c4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/996c8c4baf0968e615c6a820a7f485caae0b450d)) - live: assert what only a real server can show ([6e2d3d0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6e2d3d0d9ded73b4637daf1380c20df075af85ba)) - cover the converters, which is where the payload is actually decided ([2be4d79](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2be4d79fbe992773fbf9d719dc03235d2af6d136)) - live: assert the repository group listing too, not only the project one ([702a12e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/702a12e2375bc4ffca35c630c300677c2a0d2e4d)) - cover the three gaps the patch gate found in the folded-in work ([450e941](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/450e9415d2770603387d8ec06cd69f4914d12978)) - git: cover the branch where there is no repository to place ([1a19d90](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1a19d909e33a513ccdcc025bd27865c9562234e2)) - git: make the ambient repository unreachable, not merely watched ([d810384](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d81038481f610fd154c6c02ce377c208889180d2)) - git: stop sibling worktrees failing the ambient config guard ([816e452](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/816e452035e2f58116ac95f10e4513dccef5d20b)) - cover FillMissing's prompting path ([796b75e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/796b75ec6a373be1ba2d40d0dd7771c429ad9913)) - cover the prompting paths the patch gate found bare ([65c59cb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/65c59cbeccfd77b1fd7bc9f284065d0efcb1a529)) - live: name the repository and confirm when deleting it ([548d873](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/548d87360d04011a83a6470ef899831a8a8a2fd7)) - governance: catch a record that cites a record that was never written ([d4ad619](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d4ad61991e47d6cc6575cff6d65132d9a0044bb2)) - mcp: cover the annotation fallback in toolSpec ([09ce36a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/09ce36a24a835cf597d65b29bb85c93f8b2f3a05)) - mcp: check the safety flag against the annotations in both directions ([4738f35](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4738f35df1054749952274806ecb27b6bc616c14)) - verify the governance guards fail, and replace the one that could not ([de98974](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/de9897449bc6c7264a95a6dfd27af1ac03577121)) **Build** - lint: stop rebuilding golangci-lint on every CI run ([3041a95](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3041a9503dc5265eb23096e379c82fd55f734d48)) **CI** - the release flow reads Go, not Python ([10f57b2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/10f57b20bf2d5806153ed5e2eb6e00d40ddd895c)) - refuse a pull request into main that is not part of the release flow ([fbf9fbd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fbf9fbd82e711daf7dfdf0f1b82ecfbf808e9fea)) - release: ask the remote which versions exist before publishing one ([8a2aa30](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8a2aa303e0dc10d06eb759963a2bde481fc85870)) - let the Codecov poll actually retry ([9e19b87](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9e19b8719dbbeb6f12576ea95d25454110671ac7)) - release: capture the whole BREAKING CHANGE footer, not its first line ([bc50f8c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bc50f8c2b156befb2e1698887e7be6776437e40f)) - pin setup-uv to an exact version, not a major tag ([6aabc79](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6aabc797c709b5616f8ece05152e03ac3fbb97ad)) **Chores** - deps: bump the gomod-minor-patch group with 10 updates ([e194543](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e1945430d1e6251fe3e9d08faec910c874a1a581)) - release: drop AUR publishing rather than keep pretending ([30ed55e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/30ed55e1205bf30bba88946ca53e74a61be89a86)) - correct three mock totals I inferred instead of reading ([23f8d0d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/23f8d0dd5c973ee5a8559e3b3f2defc1478e3bd7)) - docs: two webhook endpoints are uncovered because nothing calls them ([9dd3236](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9dd32362bc08d268e5901c50948871674e6ae069)) - docs: the two deleted webhook methods leave the operation-path index ([4753bfa](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4753bfa30265673a8c77e0bf6dd52491da3f67b1)) - retire the old slug, and make it stay retired ([a028530](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a0285305b678dcefa898ba7fd9e6ca4e4228e7dc)) - rename the Go module to match the repository ([86ee21c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/86ee21cc0f5af3873a9202f5426f87ca43ecd7a4)) - deps: bump astral-sh/setup-uv from 7 to 10 ([ec18c4d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ec18c4decfc668df85cdc2b8ac1430e4b8c51c01)) - hooks: drop the retired CI-safe vocabulary from the pre-commit job name ([18c71cc](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/18c71cc0709cbef6fc9ba40d2eb2803f7305cc49)) - deps: bump actions/download-artifact from 7 to 8 ([14c478c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/14c478c3f21d37fe0111af74ca3275b0a668e6fc)) - fix an ADR that named a filename as a tool, and two CI cascade faults ([e5e0026](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e5e002615a43349a0569b42e73c24abf8ad0e011)) - deps: bump the gomod-minor-patch group with 10 updates ([adde115](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/adde115eea39b0ff72383adca77d9a55104e0733)) - deps: bump anchore/sbom-action from 0.24.0 to 0.24.2 ([816839b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/816839b75f4093741aeca1671152adede6316053)) **Other** - Revert to a project per test: sharing broke four tests to save 0.8% ([f7cfcbb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f7cfcbb6c0fa8a633da46060115f27124f636f44))

v3.5.2

Published: 2026-08-31

Changes since v3.5.1.

Compare: v3.5.1...v3.5.2

Fixes - repo: make the archive close failure reachable in test (2a229c2)

Docs - adr: record the next branch and that only main releases (bbb4e0f) - adr: record where linear history is enforced, and stop quoting figures (c1d881a) - adr: record what the quality apparatus measures, and enforce gate parity (c84030a)

CI - run on the next integration branch (367ebd8) - stop Codecov searching for coverage in languages this repo does not use (0c01087) - stop the Bitbucket stack step writing 9,900 lines of terminal redraw (818b692) - add linting and vulnerability scanning, take unit tests off the live path (4c0f1c1)

Chores - lint: clear the golangci-lint baseline and turn the gate on (ebb12c9) - quality: delete contract coverage, rename command reach, split the CI jobs (80ccdc4)

v3.5.1

Published: 2026-08-30

Changes since v3.5.0.

Compare: v3.5.0...v3.5.1

Fixes - tools: stop operation-path scanning from reading other branches' checkouts (378788c) - config: validate update_tuf_url properly and name the lever that disabled self-update (a261dbb)

Refactors - config: make the policy origin naming testable on every platform (8c72a31)

Tests - live: assert the update killswitch message names its lever (332f201)

Chores - ci: align the local gate list with CI and compile the live tests locally (d1f53dd)

v3.5.0

Published: 2026-08-29

Changes since v3.4.0.

Compare: v3.4.0...v3.5.0

Features - update: verify releases offline and gate update trust to policy (c171d75)

Fixes - config: stop the environment from relocating administrative policy (f075d81)

v3.4.0

Published: 2026-08-29

Changes since v3.3.2.

Compare: v3.3.2...v3.4.0

Features - mcp: scope the server to a project or repository and log tool invocations (bd50d08) - mcp: adopt the official MCP SDK and give tools an output contract (d2acc90)

Tests - mcp: drive the server surface in the live suite (3b4c302)

v3.3.2

Published: 2026-08-29

Changes since v3.3.1.

Compare: v3.3.1...v3.3.2

Fixes - update: apply system TLS policy to the update path (fb3a2b1)

CI - release: publish noupdate binaries for package managers (#445) (b7e04cb)

v3.3.1

Published: 2026-08-28

Changes since v3.3.0.

Compare: v3.3.0...v3.3.1

Fixes - update: provide clean human-friendly output on update (b2c02f3)

v3.3.0

Published: 2026-08-28

Changes since v3.2.0.

Compare: v3.2.0...v3.3.0

Features - pr: support inline comments and replies in pr comment add (#442) (2912851) - webhook: add create and delete subcommands (#440) (4df0d02)

Fixes - cli: correct inline anchors, --host targeting, and MSYS2 path recovery (ea62a5c) - api: detect HTML login responses, sanitize mangled MSYS2 paths, and support --host (#441) (0718daf)

Tests - commentanchor: cover the shared anchor rules directly (d4f826a)

v3.2.0

Published: 2026-08-28

Changes since v3.1.0.

Compare: v3.1.0...v3.2.0

Features - transport: support mutual TLS (mTLS) client certificate authentication (#422) (49e9f51)

Fixes - config: restrict mTLS schema properties to host profile scope (47791ba)

Chores - deps: bump the gomod-minor-patch group with 3 updates (ee2600b) - deps: bump mkdocs-macros-plugin (8b9c3a7)

v3.1.0

Published: 2026-08-27

Changes since v3.0.0.

Compare: v3.0.0...v3.1.0

Features - config: system-wide policy enforcement and enterprise update controls (b2d3a4e)

Docs - inject the release version at build time instead of pinning it (7c38b00)

Tests - live: exercise SaveLogin in live keyring warning test (92224b7) - live: remove unused io import and streamline keyring live test (651b05c) - live: fix policy warning writer capture in live keyring test (b226df0) - live: add live tests for auth login, raw api, and keyring policy enforcement (537209c) - live,config: add enterprise policy live tests and expand coverage (910cac6)

Build - release: publish version-less asset aliases so install docs name no version (43bdd1e)

v3.0.0

Published: 2026-08-27

Changes since v2.13.0.

Compare: v2.13.0...v3.0.0

⚠ Breaking Changes - derive the vendored spec from the harness release and bump to 10.4 (c23a071)

Features - openapi: derive the vendored spec from the harness release and bump to 10.4 (c23a071)

Docs - openapi: record what each fix's cause is, and whether it was re-observed (25fd950)

Tests - cli: assert every command's permission requirement and that refusal stops it (0522914)

Chores - docs: sync documented release version to 2.13.0 (b62fd78)

v2.13.0

Published: 2026-08-26

Changes since v2.12.0.

Compare: v2.12.0...v2.13.0

Features - pr: support reviewer groups, default reviewers, and CODEOWNERS (#405) (399924d)

Fixes - pr: address self-review of the reviewer automation fixes (6e4f444) - pr: correct reviewer automation defects found in review (10d14d6)

Docs - pr: stop asserting Bitbucket version floors (96cd997) - pr: keep the reviewer section at basic-usage depth (1369da1)

Chores - quality: refresh spec coverage for the repository lookup (f317737)

v2.12.0

Published: 2026-08-26

Changes since v2.11.0.

Compare: v2.11.0...v2.12.0

Features - docs: enforce latest release version across documentation (149bcf3)

v2.11.0

Published: 2026-08-26

Changes since v2.10.0.

Compare: v2.10.0...v2.11.0

Features - cli: enforce NoArgs on zero-arg commands and harden docs-lint (b376695)

Fixes - docs-lint: regex tool extraction, LaTeX check, and summary formatting (4a264e5)

Docs - site: fix mermaid rendering and refine verification commands (569ff7c) - site: address peer review on runbook and threat model (ce7e8b2) - site: refine fleet runbook and multi-OS threat model (ec46f77) - site: add enterprise hardening guide and threat model (9eeba7f)

Tests - cli: add unit tests for positional placeholder checks and enforceNoArgsDefaults (45aa407)

v2.10.0

Published: 2026-08-26

Changes since v2.9.1.

Compare: v2.9.1...v2.10.0

Features - ai: add dedicated skill for bulk operations and enhance skill CLI commands (7e4dbfa)

Docs - document flexible URL, branch, and hash resolution for PRs and repos (5dd7ebf) - align developer cheatsheet with human workflows and expand agent skill workflows (cf00e9f) - site: add developer cheatsheet and common workflows cookbook (2921702)

Chores - deps: bump github.com/google/go-containerregistry (7218f2f)

v2.9.1

Published: 2026-08-25

Changes since v2.9.0.

Compare: v2.9.0...v2.9.1

Fixes - mcp: decide structuredContent shape on encoded bytes (57c7a68) - mcp: wrap slice structuredContent as JSON object (b344c0c)

Chores - deps: bump the gomod-minor-patch group with 13 updates (0eb6cb4) - deps: bump the gomod-minor-patch group across 1 directory with 3 updates (a1af93d) - deps: bump github.com/go-openapi/swag from 0.28.0 to 0.29.0 (66f250e) - deps: bump github.com/go-openapi/swag/cmdutils (69cbfb5) - deps: bump github.com/go-openapi/swag/netutils (d566417) - deps: bump github.com/mattn/go-runewidth (804046a)

v2.9.0

Published: 2026-08-20

Changes since v2.8.0.

Compare: v2.8.0...v2.9.0

Features - cli: enhance gh-style ergonomics and formalize non-interactive contract (#392) (51e15b2)

v2.8.0

Published: 2026-08-20

Changes since v2.7.3.

Compare: v2.7.3...v2.8.0

Features - api: add bb api raw REST passthrough escape hatch (#330) (c9fdcc4)

v2.7.3

Published: 2026-08-20

Changes since v2.7.2.

Compare: v2.7.2...v2.7.3

Fixes - dryrun: exhaustively classify commands and prevent fail-open on auth gpg-key clear (#391) (8b0639a)

Chores - ci: restore patch coverage threshold to 85% (8849281)

v2.7.2

Published: 2026-08-20

Changes since v2.7.1.

Compare: v2.7.1...v2.7.2

Fixes - test: align live pagination schemas and error taxonomy assertions (911d676) - test: extract PR version with zero fallback in live PR suites (a741cfa) - test: pass expected version parameter on PR transition commands in live suites (202c9f5) - test: align PR state machine steps with Bitbucket author restrictions (322a372) - test: remove unused imports in pr state machine live test (cf1ceea) - test: use harness branch push and clone verification in live PR tests (e95940e) - test: configure git identity in temporary repos before committing in live tests (31ca3d4) - test: correct branch create and pr create flag bindings in live integration suites (c5cb91e) - live: fix live test compilation imports and admin user env resolution (04711b4)

Refactors - cli: modularize command tree into domain packages per ADR-032 (#337) (7d9e149)

Docs - adr: sharpen ADR-052 with client-side algorithm testing policy (1ed8033) - adr: add ADR-052 on layer-boundary testing and mock elimination (070451b)

Tests - ci: adjust patch coverage threshold to 75% for command tree modularization (644cf44) - cli: add defaults and validation tests for browse, update, tag, sshkey, and webhook (607615a) - cli: expand unit tests across project, repo, pr, branch, and diff commands (9aa9b0a) - cli: expand unit test coverage for reviewer, sshkey, tag, webhook, and ref command packages (3ca96aa) - cli: expand unit test coverage for repo command package (0b6412c) - cli: expand unit test coverage for branch command package (199a145) - cli: expand unit test coverage for pull request command package (fa690da) - cli: expand unit coverage for commit and diff command packages (b7c4ca3) - cli: expand unit coverage for build status and code insights commands (8bd6f69) - cli: add unit test coverage for repo comments, misc, ref, and tag commands (30a73e5) - cli: expand unit coverage for reviewer, reviewergroup, repo, pr, and branch commands (eebdeeb) - expand live reviewer governance suite and unit coverage across CLI command packages (e3f2498) - live: add error taxonomy, stream pagination, PR lifecycle, git wire roundtrip, and webhook ping suites (4cc1f5d) - cli: add property-based fuzz tests for repo selector and git URL parsers (b12932d) - live: eliminate masked t.Skip calls and fix required build check schema in live tests (defa8f4) - services: prune pass-through mock-echoing tests across services per ADR-052 (3d0bcc8) - services: prune pass-through mock-echoing tests from branch and comment services per ADR-052 (60ec7d9)

v2.7.1

Published: 2026-08-19

Changes since v2.7.0.

Compare: v2.7.0...v2.7.1

Fixes - auth: stop alias discovery and login from deleting stored aliases (6425afe)

v2.7.0

Published: 2026-08-19

Changes since v2.6.2.

Compare: v2.6.2...v2.7.0

Features - pr: replace the dead pr task commands with comment resolve/reopen (32e14e4)

Tests - pr: cover the error paths on comment resolve and reopen (1bd3eb6)

Chores - deps: bump github.com/oapi-codegen/runtime (b6b2a8b)

v2.6.2

Published: 2026-08-18

Changes since v2.6.1.

Compare: v2.6.1...v2.6.2

Fixes - webhook: make update mean update, and agree on one output shape (449f362) - remove server-side hook management (258cd43) - repair six commands that had never worked against a real server (6457b0b) - webhook: send the url the test endpoint requires (5d8d926)

Docs - openapi: register the webhook test url divergence (4cf4036)

Tests - live: cover the auth surface (532bbe8) - live: cover pull request inspection, and confirm pr task is dead (a28153b) - live: correct batch 1 against a real Bitbucket (0f09c76) - live: cover deployments, webhooks, repo policies, search and labels (f21c2ad)

v2.6.1

Published: 2026-08-18

Changes since v2.6.0.

Compare: v2.6.0...v2.6.1

Fixes - pr: arm auto-merge through the merge endpoint (b05afe7)

v2.6.0

Published: 2026-08-18

Changes since v2.5.0.

Compare: v2.5.0...v2.6.0

Features - auth: make bb auth status verify the setup instead of describing it (daf6d8a)

Fixes - auth: treat the git credential helper as advisory, not a failure (01be204)

Docs - document proxies, TLS and the environment variable surface (944909b) - add issue and pull request templates (d1c13ff)

Tests - auth: inject the git backend the status check reads (6dcdec3) - live: fail fast when the local SDK licence has expired (c696da2)

Build - drop the python3 dependency from the bootstrap script (d872e37)

CI - release: publish and attest an SBOM with every release (27d4084)

Chores - deps: bump github.com/go-openapi/loads (20f1d48)

v2.5.0

Published: 2026-08-18

Changes since v2.4.0.

Compare: v2.4.0...v2.5.0

Features - pr: add bb pr checkout (263134a)

Fixes - pr: supply credentials to the checkout fetch (90272e1)

Tests - pr: fix the dirty-tree assertion in the live checkout test (a6ba2cd) - pr: clear the whole credential fallback chain in checkout tests (d815461) - stop the suite waiting on backoff and DNS (024ae1d)

v2.4.0

Published: 2026-08-17

Changes since v2.3.0.

Compare: v2.3.0...v2.4.0

Features - cli: shallow permission aliases and bb pr status (fa279e6)

v2.3.0

Published: 2026-08-17

Changes since v2.2.1.

Compare: v2.2.1...v2.3.0

Features - pr: add bb pr diff as a gh-shaped alias for bb diff pr (250893c)

v2.2.0

Published: 2026-08-17

Changes since v2.1.0.

Compare: v2.1.0...v2.2.0

Features - cli: report limit_reached in the JSON envelope for list commands (c4c090e)

v2.1.0

Published: 2026-08-17

Changes since v2.0.7.

Compare: v2.0.7...v2.1.0

Features - cli: unify --limit across list commands and add --all (b92ed81)

Fixes - pr: cap bb pr list results at --limit (0484696)

Tests - cli: cover the paging helper and the oversized-page trim (4dca30b)

Chores - deps: bump pygments from 2.19.2 to 2.20.0 in /docs (b7a57c0) - deps: bump actions/upload-artifact from 4 to 7 (9c767ff)

v2.0.7

Published: 2026-08-17

Changes since v2.0.6.

Compare: v2.0.6...v2.0.7

Fixes - ai: drop the last version-accuracy claim from the skill (43c7aae) - ai: surface MCP tool gating and stop the skill overstating itself (c1009c1)

Docs - ai: state that the MCP server is optional in the skill (9166d50) - ai: lead the skill install options with the offline path (77591be)

Chores - deps: bump golang.org/x/mod in the gomod-minor-patch group (255a571)

v2.0.6

Published: 2026-08-17

Changes since v2.0.5.

Compare: v2.0.5...v2.0.6

Fixes - docs: validate documented bb invocations against the command tree (ecec3ca)

Docs - record that tools/ stays out of the coverage gate but gets tests (611d6e5)

Chores - pin line endings to LF and enforce formatting (5161a68)

v2.0.5

Published: 2026-08-16

Changes since v2.0.4.

Compare: v2.0.4...v2.0.5

Fixes - auth: decide plaintext storage from the credential in use, not AuthSource (15db240) - auth: keep credentials off the command line and make keyring storage enforceable (22cca3b)

v2.0.4

Published: 2026-08-16

Changes since v2.0.3.

Compare: v2.0.3...v2.0.4

Fixes - json: classify malformed invocations as validation (2d90001) - json: emit an error envelope on the --json failure path (46a73cf)

CI - compute coverage instead of committing it (b42766e)

v2.0.3

Published: 2026-08-16

Changes since v2.0.2.

Compare: v2.0.2...v2.0.3

Fixes - auth: stop writing credentials into cloned repositories (e0a014d) - openapi: decode createdDate as epoch milliseconds (8b07377)

Docs - add SECURITY.md, CONTRIBUTING.md and CODE_OF_CONDUCT.md (cd61906)

CI - deps: gate Dependabot auto-merge on update type (93651eb) - release: release only user-visible change types (291e8ca) - stack: provision the live test instance via the Atlassian Plugin SDK (15104d4)

Chores - deps: bump idna from 3.11 to 3.15 in /docs (5440467) - deps: bump requests from 2.32.5 to 2.33.0 in /docs (98eb62a) - deps: bump pymdown-extensions from 10.21 to 11.0.1 in /docs (b5b82db) - deps: bump urllib3 from 2.6.3 to 2.7.0 in /docs (510f36e) - deps: bump the gomod-minor-patch group with 5 updates (29537ab)

v2.0.2

Published: 2026-08-14

Changes since v2.0.1.

Compare: v2.0.1...v2.0.2

Chores - deps: bump the gomod-minor-patch group with 2 updates (66eb52f) - deps: bump github.com/xo/terminfo (ffecfb4) - deps: bump github.com/go-openapi/validate (7bf9238) - deps: bump the gomod-minor-patch group with 2 updates (4c91d0e)

Other - Restore Codecov ingestion after the repository rename (46f34d9)

v2.0.1

Published: 2026-08-11

Changes since v2.0.0.

Compare: v2.0.0...v2.0.1

CI - scripts: fix WebSudo endpoint, parameters, and temp file creation in bootstrap (b75dbaa) - scripts: use basic auth and websudo fallback when enabling basicauth in bootstrap (c1ebff7)

Other - bump bitbucket image version to 10.4.2 (6bd836e) - update sed pattern to handle spaces in build.properties (4683ba1) - fix build.timestamp format and set build.commit.timestamp in Dockerfile (44e2ed5) - bump bitbucket image to 10.3.0 and patch build.timestamp (0d3a7e4)

v2.0.0

Published: 2026-08-11

Changes since v1.38.2.

Compare: v1.38.2...v2.0.0

⚠ Breaking Changes - vendor the Bitbucket 10.2 OpenAPI spec (52320e8) — models generated from the 10.2 spec expose required fields as - surface unresolved PR comments and tasks to agents (52d9882) — bb pr comment list --json emits a summarised thread view

Features - vendor the Bitbucket 10.2 OpenAPI spec (52320e8) - surface unresolved PR comments and tasks to agents (52d9882)

Fixes - openapi: make generated client reproducible and unblock newer specs (a032c9b)

Tests - git: fail tests that reconfigure the repository they run inside (689168c) - quality: gate CLI commands on live coverage that can actually fail (9423937)

Chores - quality: refresh coverage artifacts for the ambient git config guard (8f84078) - quality: refresh coverage artifacts for the Bitbucket 10.2 spec (1a59ba9) - quality: refresh generated coverage artifacts (395b914) - deps: bump the gomod-minor-patch group with 4 updates (8c28a4f) - deps: bump the gomod-minor-patch group with 4 updates (b34b039)

v1.38.2

Published: 2026-08-06

Changes since v1.38.1.

Compare: v1.38.1...v1.38.2

Docs - track the newest containerisable Bitbucket version instead of a pin (fde0dc7)

v1.38.1

Published: 2026-08-06

Changes since v1.38.0.

Compare: v1.38.0...v1.38.1

Fixes - git: scope git subprocesses by working directory, not ambient GIT_DIR (3a646c5)

Chores - deps: bump github.com/lucasb-eyer/go-colorful (52f22fe)

v1.38.0

Published: 2026-08-05

Changes since v1.37.3.

Compare: v1.37.3...v1.38.0

Features - enhance MCP tools, fix browse raw path encoding, and improve PR reviewer handling (91e0168)

Fixes - browse: correct tree path encoding and browse content negotiation (e972e6a) - browse: escape file path segments and share the raw transport path (31b20e9)

Chores - quality: refresh spec coverage artifact for the browse transport move (fa96c35) - deps: bump the gomod-minor-patch group with 4 updates (8a42e62) - deps: bump github.com/sigstore/sigstore-go (95a8e0c) - deps: bump the gomod-minor-patch group with 2 updates (32cb1c2) - deps: bump github.com/letsencrypt/boulder (9569427) - deps: bump the gomod-minor-patch group with 14 updates (d29b5c9) - deps: bump go.yaml.in/yaml/v3 in the gomod-minor-patch group (9d41a80) - deps: bump the gomod-minor-patch group with 4 updates (1a9ef05) - deps: bump the gomod-minor-patch group with 2 updates (bbbe880) - deps: bump the gomod-minor-patch group with 18 updates (80bcbdd) - deps: bump the gomod-minor-patch group with 12 updates (8eb3b74) - deps: bump actions/setup-python from 6 to 7 (0388c2f) - deps: bump mkdocs-material (fd63092) - deps: bump the gomod-minor-patch group with 5 updates (b7baaed) - deps: bump google.golang.org/grpc in the gomod-minor-patch group (213642b) - deps: bump actions/setup-go from 6 to 7 (653fafd) - deps: bump github.com/letsencrypt/boulder (03374e1) - deps: bump github.com/oapi-codegen/runtime (584c072) - deps: bump github.com/mark3labs/mcp-go (b463fce) - deps: bump the gomod-minor-patch group with 7 updates (2c99e9e) - deps: bump github.com/go-openapi/jsonreference (116cbab) - deps: bump github.com/go-openapi/jsonpointer from 0.24.0 to 1.0.0 (aaa13b3) - deps: bump the gomod-minor-patch group with 2 updates (656c7e6) - deps: bump the gomod-minor-patch group with 2 updates (0cb2f50) - deps: bump github.com/sigstore/rekor (eee744b)

v1.37.3

Published: 2026-07-01

Changes since v1.37.2.

Compare: v1.37.2...v1.37.3

Fixes - auth: resolve user identity using X-AUSERNAME header (0e67ae0)

v1.37.2

Published: 2026-07-01

Changes since v1.37.1.

Compare: v1.37.1...v1.37.2

Fixes - clone: support user namespaces (tilde) in repository selectors and clone URLs (1f85343)

Chores - deps: bump the gomod-minor-patch group with 2 updates (eaee5a3) - deps: bump the gomod-minor-patch group with 14 updates (12d4aae) - deps: bump the gomod-minor-patch group with 2 updates (44752aa) - deps: bump github.com/mark3labs/mcp-go (592a14e) - deps: bump github.com/letsencrypt/boulder (f363d8a) - deps: bump the gomod-minor-patch group with 3 updates (28b4375) - deps: bump actions/checkout from 6 to 7 (96ba673)

v1.37.1

Published: 2026-06-18

Changes since v1.37.0.

Compare: v1.37.0...v1.37.1

Chores - deps: update docs lockfile (3642db1) - repo: update references to bitbucket-data-center-cli (1958c70) - deps: bump github.com/google/go-containerregistry (f160235)

v1.37.0

Published: 2026-06-17

Changes since v1.36.0.

Compare: v1.36.0...v1.37.0

Features - dryrun/docs: update target to Bitbucket Data Center and validate dry-run coverage (closes #248, closes #259) (b9b9cdd)

v1.36.0

Published: 2026-06-17

Changes since v1.35.2.

Compare: v1.35.2...v1.36.0

Features - webhook: add repo webhook listing and service-layer pagination limit/start controls (438dca9)

Docs - regenerate CLI command reference with webhook list and start flags (a991390)

Chores - deps: bump github.com/mark3labs/mcp-go (7cb74bb) - deps: bump github.com/letsencrypt/boulder (754f538)

Other - update coverage profiles and reports for Issues 254 and 255 (f690ad5)

v1.35.2

Published: 2026-06-15

Changes since v1.35.1.

Compare: v1.35.1...v1.35.2

CI - release: remove failing AUR publishing job (6d4d2f2)

v1.35.1

Published: 2026-06-15

Changes since v1.35.0.

Compare: v1.35.0...v1.35.1

Fixes - release: expand env vars in nfpm contents src (0a02526)

Chores - deps: bump github.com/go-openapi/spec (284e1bd)

v1.21.0

Published: 2026-06-03

Changes since v1.20.1.

Compare: v1.20.1...v1.21.0

Features - pr: add --draft flag and auto-merge commands (24d33ed)

Fixes - pr: support --dry-run for pr auto-merge enable/disable (e15fae9)

Docs - skill: document draft PRs and auto-merge in bb skill (c9d7667)

Tests - pr: cover draft flag and auto-merge CLI commands (6a88ee3)

Other - pr: gofmt CreateInput alignment and trailing newline (000b08b)

v1.20.1

Published: 2026-06-02

Changes since v1.20.0.

Compare: v1.20.0...v1.20.1

Fixes - use POST /participants instead of PUT /participants/{userSlug} for adding reviewers (60b28ca)

Tests - update CLI reviewer-add mock to POST /participants (5f7c00c)

v1.20.0

Published: 2026-06-02

Changes since v1.19.2.

Compare: v1.19.2...v1.20.0

Features - pr: add --reviewers flag to pr create command (0e55bc0)

Refactors - pr: align --reviewers flag with repo conventions and document (b358fa1)

Tests - mcp: cover parseCommaList reviewer parsing (d68a303)

Chores - deps: bump the gomod-minor-patch group with 5 updates (6886b88) - deps: bump github.com/sigstore/sigstore (945f9d6) - deps: bump the gomod-minor-patch group with 5 updates (2c9dce0) - deps: bump the gomod-minor-patch group with 8 updates (fad3b8b) - deps: bump the gomod-minor-patch group with 3 updates (a55d61b) - deps: bump the gomod-minor-patch group with 4 updates (54a0874) - deps: bump the gomod-minor-patch group with 2 updates (105b38d) - deps: bump the gomod-minor-patch group with 2 updates (0694f0d) - deps: bump the gomod-minor-patch group with 2 updates (4a6e0e8) - deps: bump github.com/letsencrypt/boulder (9b22f17) - deps: bump github.com/mark3labs/mcp-go (3f50ddb) - deps: bump the gomod-minor-patch group with 6 updates (74d9916) - deps: bump sigstore/cosign-installer from 4.1.1 to 4.1.2 (dba7da4) - deps: bump github.com/mark3labs/mcp-go (9d4df33) - deps: bump the gomod-minor-patch group with 4 updates (26c39de) - deps: bump google.golang.org/grpc in the gomod-minor-patch group (abbb82a) - deps: bump github.com/mark3labs/mcp-go (3cfebbd) - deps: bump github.com/go-openapi/strfmt (8e4a3c4) - deps: bump github.com/letsencrypt/boulder (7fa8082) - deps: bump the gomod-minor-patch group with 7 updates (a6b0fc6) - deps: bump the gomod-minor-patch group with 33 updates (e3035dc)

v1.19.2

Published: 2026-04-27

Changes since v1.19.1.

Compare: v1.19.1...v1.19.2

Chores - dependabot: configure updates for indirect deps and docker-compose (3fdd88f) - deps: bump github.com/mark3labs/mcp-go (c106f12) - deps: bump github.com/go-openapi/runtime (2582a5b) - deps: bump the gomod-minor-patch group with 2 updates (85bbdc2)

v1.19.1

Published: 2026-04-16

Changes since v1.19.0.

Compare: v1.19.0...v1.19.1

Chores - dependabot: ignore bitbucket image updates (6e3e486)

v1.19.0

Published: 2026-04-16

Changes since v1.18.12.

Compare: v1.18.12...v1.19.0

Features - update: add background Windows self-update (7c7fffe)

Fixes - update: address review feedback (02d4ad2)

Tests - update: raise Windows patch coverage (3b42d68) - update: cover Windows swap launcher helpers (9b23380)

v1.18.12

Published: 2026-04-16

Changes since v1.18.11.

Compare: v1.18.11...v1.18.12

Chores - deps: bump codecov/codecov-action from 4 to 6 (52c113a) - deps: bump github.com/sigstore/sigstore-go from 0.6.2 to 1.1.4 (139c634) - deps: bump actions/checkout from 4 to 6 (7215a62) - deps: bump actions/github-script from 7 to 9 (daa2001)

v1.18.11

Published: 2026-04-16

Changes since v1.18.10.

Compare: v1.18.10...v1.18.11

Chores - deps: bump actions/setup-go from 5 to 6 (ac3abdb) - deps: bump the gomod-minor-patch group with 6 updates (047d40f) - deps: bump actions/setup-python from 5 to 6 (7dd2dd7)

v1.18.10

Published: 2026-04-16

Changes since v1.18.9.

Compare: v1.18.9...v1.18.10

Fixes - ci: merge clean dependabot prs directly (e83bb71)

v1.18.9

Published: 2026-04-16

Changes since v1.18.8.

Compare: v1.18.8...v1.18.9

Fixes - ci: re-enable basic auth after bootstrap (fb1d6dd) - ci: retry apt metadata refresh in faketime build (64fdddc) - update: support Bitbucket 10.2.1 and sigstore-go 1.1.4 (9c90a98)

Docs - update: clarify bootstrap license fallback comment (30d506b)

v1.18.8

Published: 2026-04-15

Changes since v1.18.7.

Compare: v1.18.7...v1.18.8

Chores - deps: bump actions/upload-artifact from 4 to 7 (14f708f) - deps: bump sigstore/cosign-installer from 3.8.1 to 4.1.1 (7075c7e) - deps: bump actions/attest-build-provenance from 2 to 4 (d92ad1d) - deps: bump actions/download-artifact from 4 to 8 (df7253d) - deps: bump the python-docs-minor-patch group (e8a16b6) - deps: bump the gomod-minor-patch group with 6 updates (038b5fe)

v1.18.7

Published: 2026-04-15

Changes since v1.18.6.

Compare: v1.18.6...v1.18.7

Chores - deps: bump astral-sh/setup-uv from 5 to 7 (3281d8c)

v1.18.6

Published: 2026-04-15

Changes since v1.18.5.

Compare: v1.18.5...v1.18.6

Fixes - ci: revalidate dependabot PR state before merge actions (fd3c10f) - ci: add dependabot auto-merge workflow (4b25cff)

v1.18.5

Published: 2026-04-15

Changes since v1.18.4.

Compare: v1.18.4...v1.18.5

Fixes - deps: use uv for docs dependabot updates (ce939d5)

Chores - deps: add dependabot config (2e5ea16)

v1.18.4

Published: 2026-04-14

Changes since v1.18.3.

Compare: v1.18.3...v1.18.4

Fixes - update: accept legacy sigstore bundles (a5c725b)

v1.18.3

Published: 2026-04-13

Changes since v1.18.2.

Compare: v1.18.2...v1.18.3

Fixes - release: address workflow review comments (1622f86) - release: sync winget fork before publish (bfbf08e)

v1.18.2

Published: 2026-04-12

Changes since v1.18.1.

Compare: v1.18.1...v1.18.2

Fixes - update: require sigstore verification for self-update (ebdef3b)

Tests - update: address PR review feedback (feb9092)

v1.18.1

Published: 2026-04-12

Changes since v1.18.0.

Compare: v1.18.0...v1.18.1

Fixes - release: use computed winget release tag (fdb09a4)

v1.18.0

Published: 2026-04-11

Changes since v1.17.2.

Compare: v1.17.2...v1.18.0

Features - harden Windows binary to reduce Defender false positives (9cdb88d) - add Apache 2.0 license; fix scoop workflow token handling and Python setup (2dd0c67) - add Scoop bucket release job and install docs (27a6232) - publish releases to WinGet via vedantmgoyal9/winget-releaser (432e9be)

Fixes - use vriesdemichael as Scoop bucket alias in install commands (d25c94d) - rename Scoop bucket repo from scoop-bb to scoop (0f3eadf) - lowercase winget identifier to vriesdemichael.bb (fe4437d)

v1.17.2

Published: 2026-04-09

Changes since v1.17.1.

Compare: v1.17.1...v1.17.2

Fixes - auth: preserve canonical clone base paths (eeadaca)

v1.17.1

Published: 2026-04-09

Changes since v1.17.0.

Compare: v1.17.0...v1.17.1

Fixes - auth: resolve host alias review follow-up (d11136b)

v1.17.0

Published: 2026-04-09

Changes since v1.16.0.

Compare: v1.16.0...v1.17.0

Features - auth: add host aliases and clone-url discovery (875e52a)

Tests - auth: raise alias discovery patch coverage (d7d3aac)

v1.16.0

Published: 2026-04-08

Changes since v1.15.0.

Compare: v1.15.0...v1.16.0

Features - pr: add pull request mergeability status (1d81448)

v1.15.0

Published: 2026-04-08

Changes since v1.14.1.

Compare: v1.14.1...v1.15.0

Features - add bb update command (e992cbc)

Fixes - address update command review feedback (36d68d5)

v1.14.1

Published: 2026-04-08

Changes since v1.14.0.

Compare: v1.14.0...v1.14.1

Fixes - wire repo inference for pr commands (8265d6a)

v1.14.0

Published: 2026-04-08

Changes since v1.13.0.

Compare: v1.13.0...v1.14.0

Features - add aggregate pull request comment retrieval (932c556) - add pull request comment list command (9c1b708)

v1.13.0

Published: 2026-04-07

Changes since v1.12.0.

Compare: v1.12.0...v1.13.0

Features - improve clone command ergonomics (d071aac)

Fixes - normalize http clone fallback for ssh urls (69028a1) - allow token auth with username (44d403c)

Docs - regenerate command reference (e4e2421)

v1.12.0

Published: 2026-04-07

Changes since v1.11.9.

Compare: v1.11.9...v1.12.0

Features - repo: filter repo list by project (aa21aa9)

v1.11.9

Published: 2026-04-06

Changes since v1.11.8.

Compare: v1.11.8...v1.11.9

Docs - limit changelog TOC to versions (a1adc7f)

v1.11.8

Published: 2026-04-06

Changes since v1.11.7.

Compare: v1.11.7...v1.11.8

Fixes - harden docs changelog renderer (31da64a)

Docs - fix changelog publishing and refresh llms guide (0b8a352)

v1.11.7

Published: 2026-04-06

Changes since v1.11.6.

Compare: v1.11.6...v1.11.7

Docs - improve nav and table legibility (9540d95)

v1.11.6

Published: 2026-04-06

Changes since v1.11.5.

Compare: v1.11.5...v1.11.6

Docs - tune landing page scale and secondary buttons (6366fb0)

v1.11.5

Published: 2026-04-06

Changes since v1.11.4.

Compare: v1.11.4...v1.11.5

Docs - refine landing page readability (31cd30d)

v1.11.4

Published: 2026-04-06

Changes since v1.11.3.

Compare: v1.11.3...v1.11.4

Docs - fix scrolling docs background (30e3728)

v1.11.3

Published: 2026-04-06

Changes since v1.11.2.

Compare: v1.11.2...v1.11.3

Docs - fix homepage front matter indentation (280094d) - customize MkDocs visual design (e539d3a) - enable mike version picker in MkDocs Material (17ec68d) - add llms.txt for LLM-friendly site discovery (989b40b)

v1.11.2

Published: 2026-04-03

Changes since v1.11.1.

Compare: v1.11.1...v1.11.2

Docs - improve README quick start section (ce4f869)

v1.11.1

Published: 2026-04-03

Changes since v1.11.0.

Compare: v1.11.0...v1.11.1

CI - add repo-token to setup-task to bypass rate limiting (105722e)

v1.11.0

Published: 2026-04-03

Changes since v1.10.1.

Compare: v1.10.1...v1.11.0

Features - publish JSON schemas for per-command --json output contract (496bf79) - publish changelog to docs site on each release (f0d1ec0)

Tests - add coverage for output schema functions to satisfy patch gate (6307f89)

CI - remove changelog push-to-main step from release workflow (6167767)

v1.10.1

Published: 2026-04-03

Changes since v1.10.0.

Compare: v1.10.0...v1.10.1

Fixes - ci: switch changelog to release-asset download, add CHANGELOG.md reference (f14f498)

CI - remove unused os import and html-escape changelog fields (6286421)

v1.10.0

Published: 2026-04-03

Changes since v1.9.2.

Compare: v1.9.2...v1.10.0

Features - publish changelog to docs site on each release (c55bbd7)

Docs - generate missing ADR markdown exports for 038-040 (b2468d1)

v1.9.2

Published: 2026-04-03

Changes since v1.9.1.

Compare: v1.9.1...v1.9.2

Fixes - ci: drop byte-for-byte coverage report verify (20c9af4) - ci: vendor libfaketime tarball to eliminate network dependency in Docker build (b0d18e3) - ci: two-stage Dockerfile build + license apply in bootstrap (fe7d0d6) - ci: address Copilot review comments on live-tests job (73b05a6) - ci: correct bootstrap script and switch to named volumes (5a24737)

Docs - quality: refresh coverage artifacts (409cdf0)

CI - opt into Node.js 24 actions + move Codecov upload to live-tests (9f6c34a) - remove coverage-report-policy job (superseded by live-tests) (c2c057d) - add live integration test job with Bitbucket DC bootstrap (56eb25b)

v1.9.1

Published: 2026-04-02

Changes since v1.9.0.

Compare: v1.9.0...v1.9.1

Fixes - mcp: move set_build_status behind --yolo (4bebe4c)

v1.9.0

Published: 2026-04-02

Changes since v1.8.2.

Compare: v1.8.2...v1.9.0

Features - mcp: restrict serve to safe tools by default; add --yolo for full access (2d6cac1)

Fixes - config: default bare hostnames to https:// in normalizeURL (a50a2af)

v1.8.2

Published: 2026-04-02

Changes since v1.8.1.

Compare: v1.8.1...v1.8.2

Refactors - dryrun: merge dryRunProfiles and dryRunPassthroughPaths into unified map (2076c3d)

v1.8.1

Published: 2026-04-02

Changes since v1.8.0.

Compare: v1.8.0...v1.8.1

Chores - docs: remove outdated migration checklist (5b88d15)

v1.8.0

Published: 2026-04-02

Changes since v1.7.0.

Compare: v1.7.0...v1.8.0

Features - ai: add bb ai mcp and bb ai skill CLI commands (e708036) - ai: add internal/mcp package with 20 MCP tool specs (afcc856) - ai: add skills/bb/SKILL.md agent skill for coding sessions (b226ca7)

Docs - decisions: add ADRs 038-040 for bb ai subcommand, MCP server and skill distribution (e96f894)

Chores - deps: add github.com/mark3labs/mcp-go v0.46.0 (f931ed9)

v1.7.0

Published: 2026-04-02

Changes since v1.6.0.

Compare: v1.6.0...v1.7.0

Features - rich colored terminal output with lipgloss (73a122d)

Refactors - style: address Copilot PR review comments (61431ae)

v1.6.0

Published: 2026-04-02

Changes since v1.5.0.

Compare: v1.5.0...v1.6.0

Features - cli: add agent notice to bb --help for issue reporting (a4f86e9)

Fixes - cli: use American spelling 'behavior' for consistency (87a87bc)

v1.5.0

Published: 2026-04-02

Changes since v1.4.1.

Compare: v1.4.1...v1.5.0

Features - pr: add pr build status subcommand (de7263d) - cli: expose --version flag via cobra Version field (1350092)

Fixes - multi: address PR review comments (44c76c0) - auth: token-url resolves per-user PAT URL when authenticated (13c5d24) - config: resolve stored credentials across http/https schemes (f1f5bf7) - repo-clone: implement ssh→token→prompt auth fallback order (fb685f9)

Docs - quality: refresh coverage artifacts after PR comment fixes (5be4af5) - quality: re-sync coverage artifacts after fresh live run (f9c2902) - quality: refresh coverage report artifacts for issues #88 #90 #91 #92 #94 (bfa888d)

Chores - add AGENTS.md with rebase + quality-artifact instructions (e781c6b) - docker: update dev environment with faketime support and postgres 17 (5355d57)

v1.4.1

Published: 2026-03-30

Changes since v1.4.0.

Compare: v1.4.0...v1.4.1

Fixes - address PR review feedback on repo list tests and docs (1d2d495) - remove hardcoded host fallback, make auth login host positional, cap repo list --limit as total (e201db9)

Docs - quality: sync coverage artifacts with current live run (e53f3cb) - quality: refresh coverage artifacts after review fixes (151de6f)

v1.4.0

Published: 2026-03-15

Changes since v1.3.1.

Compare: v1.3.1...v1.4.0

Features - cli: add repo/project permissions show commands (issue #81) (de7674d)

Fixes - test: replace t.Context() with context.Background() for Go 1.22 compat (ca51e50) - review: address PR #83 Copilot review comments (04ed3d6)

Docs - quality: refresh committed coverage report artifacts (ea2e36c) - quality: refresh coverage report and command reference artifacts (c7f0568)

v1.3.1

Published: 2026-03-14

Changes since v1.3.0.

Compare: v1.3.0...v1.3.1

Fixes - test: stabilize dry-run tests in CI (3a6d3c9) - test: support Go 1.22 in permission checker tests (7997b99) - cli: address permission precheck review feedback (8afb652) - cli: surface dry-run auth failures before planning (8f9b3cc)

Docs - quality: refresh committed coverage report artifacts (62faaa5) - quality: refresh committed coverage report artifacts (285a892)

v1.3.0

Published: 2026-03-14

Changes since v1.2.0.

Compare: v1.2.0...v1.3.0

Features - cli: add gh-style browse and repo clone parity for Bitbucket (0e74130)

Fixes - cli: address review comments for browse and clone commands (133252b)

Docs - quality: refresh committed coverage report artifacts (0b32584) - quality: refresh committed coverage report artifacts (5245340)

v1.2.0

Published: 2026-03-13

Changes since v1.1.1.

Compare: v1.1.1...v1.2.0

Features - auth: add whoami identity and PAT onboarding (f56b8d3)

Docs - quality: refresh coverage report artifacts (09f0a6c) - quality: refresh coverage report artifacts (67afad4)

v1.1.1

Published: 2026-03-13

Changes since v1.1.0.

Compare: v1.1.0...v1.1.1

Docs - readme: reposition as adopter-focused landing page (1890372) - site: address PR feedback on auth examples and precedence (de93894) - site: add repo discovery and server switching guidance (122ae89)

v1.1.0

Published: 2026-03-13

Changes since v1.0.2.

Compare: v1.0.2...v1.1.0

Features - docs: restructure docs and automate generated references (c86b87a)

Docs - quality: refresh committed coverage report artifacts (1d3cd03) - quality: refresh committed coverage report artifacts (51b80d5)

v1.0.2

Published: 2026-03-13

Changes since v1.0.1.

Compare: v1.0.1...v1.0.2

Docs - quality: refresh committed coverage report artifacts (2548a9f)

CI - codecov: report scoped coverage only (c7d7bb3)

v1.0.1

Published: 2026-03-13

Changes since v1.0.0.

Compare: v1.0.0...v1.0.1

CI - release: install docs tooling before docs deploy step (5452c0b)

v1.0.0

Published: 2026-03-13

Changes since v0.3.0.

Compare: v0.3.0...v1.0.0

⚠ Breaking Changes - rename public bbsc surface to bb (10463c7) — switch CLI identity to bb with BB_* env variables, bb.machine v2 envelope, bb.io/v1alpha1 bulk API identifiers, and bb release artifacts.

Features - docs: add versioned mkdocs foundation with uv (f925f86) - cli: rename public bbsc surface to bb (10463c7)

Docs - quality: refresh committed coverage report artifacts (9e9400e)

CI - hooks: run docs validation before coverage verify (ee02b63) - docs: add bootstrap + pre-push mkdocs validation (018cb69)

v0.3.0

Published: 2026-03-12

Changes since v0.2.1.

Compare: v0.2.1...v0.3.0

Features - cli: version machine-mode JSON output envelope (e900993)

Refactors - cli: centralize JSON envelope writer contract (1e6c5c0)

Docs - quality: refresh committed coverage report artifacts (ef45ac1) - quality: refresh committed coverage report artifacts (91aab37) - quality: refresh committed coverage report artifacts (4dc078d) - quality: refresh committed coverage report artifacts (52d8dee)

v0.2.1

Published: 2026-03-12

Changes since v0.2.0.

Compare: v0.2.0...v0.2.1

Docs - quality: refresh committed coverage report artifacts (e4ca425) - quality: refresh committed coverage report artifacts (10d58af) - openapi: record requiredApprovers payload deviation (2321d88)

v0.2.0

Published: 2026-03-12

Changes since v0.1.0.

Compare: v0.1.0...v0.2.0

Features - cli: expand stateful dry-run coverage (0be9363) - cli: add global dry-run planning previews for server mutations (53d15d3)

Fixes - cli: address dry-run review feedback (b294681)

Docs - quality: refresh committed coverage artifacts (dec36d0)

v0.1.0

Published: 2026-03-11

Changes since v0.0.4.

Compare: v0.0.4...v0.1.0

Features - ci: automate main-branch release flow (246c641) - cli: add server switching and git context inference (5e3e445) - bulk: add runtime JSON schema validation for bulk plan and apply (8478e89) - diagnostics: add structured safe logging controls (1af91e5) - cli: modularize root command construction (32be3ae)

Fixes - cli: address PR review feedback and document context inference (ebd1c35) - quality-report: align patch coverage with line-level overlap semantics (e093e7b) - config: bound dotenv lookup and harden bulk/live assertions (f417f27) - diagnostics: address PR review feedback (66e80bc) - cli: guard auth command dependencies (3c3013e)

Docs - quality: refresh committed coverage report artifacts (7178a4d) - quality: refresh report after strict patch coverage alignment (bf7f31a) - quality: update coverage report for bulk feature (47188ec) - quality: refresh coverage report after review fixes (eef5d76)

Tests - coverage: raise bulk patch coverage above threshold (9b5fa0b) - config: make dotenv tests hermetic (d21e7d5)

Chores - quality: refresh committed coverage report (8905912) - quality: refresh coverage artifacts after auth fix (d2b166a) - quality: refresh coverage artifacts (8a389e2)

v0.0.4

Published: 2026-03-06

Changes since v0.0.3.

Features - feat: add search command group for repos, commits, and prs - feat(transport): add configurable TLS and retry policy controls - feat(test): implement network isolation for unit testing - feat(reposettings): implement robust fallback for requiredApprovers payload - feat(governance): harden governance commands and standardize error handling

Fixes - fix(codecov): scope default status and keep raw comparator - fix(ci): quote workflow step name with colon - fix(coverage): address PR review on profile ranges and CI guards - fix(test): align ADR with project standards and finalize isolation - fix(governance): address remaining PR review comments - fix(governance): resolve regressions and satisfy coverage gate

Docs - docs(quality): refresh committed coverage report after linear rebase - docs(quality): update coverage report after addressing review comments - docs(quality): update coverage report for requiredApprovers fallback

Tests - test(network): add safe transport coverage and refresh report

CI - true - ci(coverage): add committed combined codecov profiles and thresholds

Chores - chore(codecov): add components and tighten generated exclusions - chore(coverage): refresh committed artifacts for codecov config update - chore(coverage): refresh committed coverage artifacts - chore(workflow): enforce linear PR history and deterministic rebase flow

v0.0.3

Published: 2026-03-05

Changes since v0.0.2.

Features - feat: implement governance commands (permissions, hooks, reviewers, PR settings) - feat: implement CLI commands for project, repo, browse, and commit/ref - feat(branch): add branch lifecycle and restriction commands - feat(pr): implement lifecycle, review, and task operations

Fixes - fix: address PR review comments - fix: address PR review on branch restrictions - fix(pr): address review feedback on validation and coverage gating

Tests - test(branch): raise coverage to satisfy policy gates

CI - true

Chores - chore: update coverage report artifact - chore: refresh coverage report artifact - chore(quality): enforce global combined and patch coverage gates

v0.0.2

Published: 2026-03-02

Changes since v0.0.1.

Features - feat(release): publish cross-platform binaries with checksums and provenance - feat(cli): implement pr list and remove issue placeholder

Fixes - fix(release): address PR review feedback - fix: address PR review comments

Tests - test: expand behavior coverage and unify cli setup wiring

CI - true

Chores - chore(quality): refresh committed coverage report

v0.0.1

Published: 2026-02-27

Initial release changes.

Features - feat(ci): add GitHub Actions CI and release workflows - feat: add tag, build status, and insights commands - feat(comment): unify commit and PR comment operations - feat: implement issues #1 and #2 repo settings and diff parity - feat: establish go-first scaffold with openapi generation and live parity

CI - true - ci: add CI Complete aggregate check and explicit unit test job

Chores - chore: restore upstream vendored openapi artifact - chore: scaffold live-bitbucket cli repo with migration plan