Changelog¶
v6.1.0¶
Published: 2026-10-26
bb v6.1.0 gives administrators who set bb's policy through Group Policy a template to do it with, and sets up shell completion for Windows PowerShell 5.1 when you run the setup from PowerShell 7.
It is a minor release with no breaking changes.
For administrators
- A Group Policy template for bb's Windows policy (#776):
bb reads its machine policy from HKEY_LOCAL_MACHINE\Software\Policies\bb, but there was no administrative template for it, so setting it through Group Policy meant writing registry items by hand. Each release now publishes bb_policy_templates.zip, holding bb.admx and en-US/bb.adml. Extract it into the PolicyDefinitions folder of your central store, and every value bb reads is a setting under Computer Configuration > Administrative Templates > bb, the Bitbucket Data Center CLI, with help that names the registry value it writes. Take the template from the release you deploy, since it offers the values that release reads. Fleet deployment has the steps.
Fixes worth knowing
bb completion installrun from PowerShell 7 sets up Windows PowerShell 5.1 as well (#819):
It set PowerShell 7 up, then printed a block of PowerShell error text and left Windows PowerShell 5.1 without completion. Both are set up now, and bb doctor and bb completion remove find the 5.1 profile too. If you ran the setup from PowerShell 7 before, run it again to add 5.1:
bb completion install --shell powershell
Changes since v6.0.0.
Compare: v6.0.0...v6.1.0
Features - policy: publish a Group Policy template for the registry values bb reads (959a6d6)
Fixes - completion: ask Windows PowerShell 5.1 without PowerShell 7's module path (2ad5409)
Refactors - pr: move helpers used by one group next to it (c4db3f3) - pr: build each group of pr subcommands in its own file (124eb46)
Docs - release: write the v6.1.0 notes for the upgrader (30033a5)
Tests - pr: hold every pr command to a configuration it cannot load and a malformed --repo (14358ec)
Build - release: check that the local next is origin/next before a promotion (140294e)
CI - link the rules and say how to rebase in the retarget comment (1faecc8) - move a pull request opened against main to next (543112f) - live: keep Bitbucket's whole log when the live job fails (9ad7101)
Chores - deps: Bump certifi in /docs in the uv group across 1 directory (b8e3262) - deps: Bump astral-sh/setup-uv from 10.3.0 to 10.3.2 (e6209fa) - quality: stop counting three commit endpoints pr.go only matched by name (4a96415) - deps: Bump the gomod-minor-patch group with 4 updates (780c82b) - deps: Bump actions/setup-python from 7.0.0 to 7.1.0 (1014382) - deps: Bump the gomod-minor-patch group with 4 updates (1004711)
v6.0.0¶
Published: 2026-10-22
bb v6.0.0 makes its MCP server one you can hand to an agent without watching every call. It only reads unless you let it write, leaves approving a pull request to you, ends what it publishes with a line saying an AI agent wrote it, and asks you first only when you want it to. A repository you clone can no longer steer bb, and the commands that read a pull request find it from the branch you are on.
It is a major release. Seven changes can break a script, a pipeline or an MCP configuration. They are under "Before you upgrade", each with what to change, and are the part to read first if bb runs in CI, in scripts or under an AI agent. What v5.0.0 deprecated is gone. What this release deprecates keeps working until v7.0.0 and is listed at the end.
New at the command line
In a checkout, bb pr view, bb pr checks, bb pr diff and the other commands that only read one pull request need no number. They read the open pull request from the checked-out branch, as gh pr view does, and name it on stderr. A branch with none, or with several, is refused, naming what was found. In a fork's checkout it is the pull request from the fork into its upstream.
git switch feature/refunds
bb pr checks
bb pr comment deletedeletes a comment or a task (#785):
Bitbucket keeps a task as a comment, so one command removes either. --dry-run says what Bitbucket will do first: a comment with replies, somebody else's comment you do not administer, and a comment that changed since the --version you name are each refused.
bb pr comment delete 42 1389396
- Guides for the jobs people ask about (#774, #775): a How do I section, with running bb in a CI pipeline, setting up the MCP server in each client, and changing many repositories at once.
New in the MCP server
A pull request description, a comment or a tag message written through the MCP server goes out under your name. bb ends each with a line saying an agent wrote it for you, so the people who read it know who they are answering:
Retries a declined refund once before failing it.
_Written by an AI agent for @alice, via bb._
Where an organisation cannot allow the line, --ai-disclosure=false or mcp_ai_disclosure: false turns it off. The server then publishes nothing the agent wrote under your name at once: it does not offer create_pull_request or update_pull_request, it refuses a tag message, and comments still wait in your review until you publish it.
For administrators
The MCP server's settings, in your own configuration file, and the policy keys that decide them for everyone on a machine:
| Key | Registry value | Effect |
|---|---|---|
mcp_allow_writes |
true in your own file lets the server change Bitbucket, as --allow-writes does. The read_only policy keeps it read-only whatever this says. |
|
mcp_elicitation_opt_in |
MCPElicitationOptIn |
true makes the server ask before each call of a tool that decides a merge, as --elicitation-opt-in does. As policy it requires asking, and false does not switch asking off. |
mcp_ai_disclosure |
MCPAIDisclosure |
false turns off the line saying an AI agent wrote a text, as --ai-disclosure=false does. As policy it decides for everyone, either way. |
Set a key in your own config.yaml, or as policy at the top level of the system file or under HKLM\Software\Policies\bb on Windows (System Policy).
Before you upgrade
- The MCP server only reads unless you let it write (ADR-103, #799):
bb ai mcp serveoffers the tools that read, and nothing that changes Bitbucket. A client configuration whose agent creates or updates pull requests, comments, merges, reports build statuses or creates tags adds--allow-writesto the server's args, or setsmcp_allow_writes: truein your configuration file.bb ai mcp toolslists what a server with the same flags offers: the tools that read, and with--allow-writesevery tool.- The MCP server asks you only when you opt in (ADR-103, #795):
- Merging, turning auto-merge on or off, reporting a build status, creating a tag and changing a pull request's draft flag no longer ask you in the client first, and a client that cannot ask is no longer refused them with
-32021. Your MCP client decides whether a call runs, through its own prompts and rules, as it does for its other tools. - To keep the confirmations, start the server with
--elicitation-opt-in, setmcp_elicitation_opt_in: truein your configuration file, or set the policy key for everyone. - An agent prepares a review for you to publish, rather than approving (ADR-104, #796):
submit_pr_reviewis gone, and nothing through MCP approves, requests changes or publishes a review.prepare_pr_reviewtells the agent where your review waits and the status it suggests, and you publish it in Bitbucket with Finish review.add_pr_commentadds a pending comment to your review rather than publishing it. Nobody else sees it until you publish the review.- A prompt or instruction that has the agent call
submit_pr_reviewhas it callprepare_pr_reviewand tell you where the review is. - MCP tools take a pull request's id as a number (#809):
-
pr_idon every pull request tool, andidonshow, is an integer, as every answer carries it. A string is refused with a schema error:*{"name": "get_pull_request", "arguments": {"project": "PAY", "repo": "ledger", "pr_id": 42}}get_pull_requeststill takes its formeridargument as a string. It is deprecated. 5. A repository's files no longer steer bb (ADR-058, #770): * A repository's.envsets only bb's credentials, repository context, timeouts, retries, webhook secrets, logging and prompts, each in capitals; Environment Variables lists them. Anything else in it is not applied, among itBITBUCKET_URL,BB_CONFIG_PATH,HTTPS_PROXY,BB_CA_FILE,BB_INSECURE_SKIP_VERIFYandBB_DISABLE_STORED_CONFIG. A cloned repository could otherwise send your token to a host, or through a proxy, of its choosing. * A workspace.bb/config.yamlno longer setsdefault_hostorupdate_base_url. It still setsproject_key. * bb warns once about each setting of its own it did not take, naming the file, andbb doctorshows it. Set the host in your environment, with--host, or withbb auth server use, and anything else in your environment or your own configuration file. 6. A group's flag works only on the commands that read it (#722): * Commands that ignored a flag of their group now refuse it:--filteronbb tag create,viewanddelete;--starton everybb branchcommand butlist, and onbb commit get,compareandprs;--config-fileonbb reviewer condition listanddelete. Remove the flag: it never had an effect there. 7. What v5.0.0 deprecated is gone (ADR-084): *bb ai mcp serve --yolo,bb ai mcp tools --safe-only, and thesafeandexposurefields ofbb ai mcp tools --json. Readwritesandasks:*{ "data": [ { "name": "merge_pull_request", "description": "Merge a pull request. ...", "writes": true, "asks": "always" } ], "meta": { "command": "ai mcp tools", "bbVersion": "..." } }--matcher-displayonbb branch restriction createandupdateand onbb project branch-restriction createandupdate. Bitbucket names the matcher from--matcher-id, as it always did. *--include-uniqueonbb build status stats,getandset. *--limitand--allonbb build required delete. *scheduled,staged,paths.stagedandpaths.swapResultinbb update --json, which were always false or empty. Readappliedfor whether the new binary is in place;pathsholdsinstallalone. Withreleaseandtrustleft out:{ "data": { "currentVersion": "v5.0.1", "latestVersion": "v6.0.0", "updateAvailable": true, "upToDate": false, "comparison": "upgrade_available", "currentVersionComparable": true, "latestVersionComparable": true, "dryRun": false, "applied": true, "plannedAction": "replace", "paths": { "install": "/usr/local/bin/bb" }, "platform": "linux/amd64" }, "meta": { "command": "update", "bbVersion": "..." } }
Other fixes worth knowing
- A user whose login name holds an
@or a+, as names under LDAP and SSO often do, is known to bb:bb auth identitynames them and their slug,bb pr review setfinds them among the reviewers, and a view knows whose card it shows (#807). - The git credential helper hands git an access token in a form Bitbucket takes (#801), and names bb by a path that survives an upgrade (#777).
bb pr createfrom a branch Bitbucket does not have says to push it first (#767).create_pull_requestwithout a target opens the pull request into the repository's default branch, andmerge_pull_requestsays what Bitbucket needs before it merges (#772).--dry-runonbb pr comment deleteandbb repo comment deletepredicts the refusal of a stale--version, and, on a token, of somebody else's comment.
Deprecation
These keep working, warn on stderr, and are removed in v7.0.0:
--read-onlyonbb ai mcp serveandbb ai mcp tools. The server only reads unless--allow-writesis passed, so remove it.- The
idargument of the MCP toolget_pull_request. Sendpr_id.
Changes since v5.0.1.
Compare: v5.0.1...v6.0.0
⚠ Breaking Changes - remove --limit and --all from bb build required delete, deprecated in v5.0.0 (0c5bc25) — bb build required delete no longer takes --limit or --all; remove them. - remove --include-unique, deprecated in v5.0.0 (8ca4f92) — bb build status stats, get and set no longer take --include-unique; remove it. bb build status get lists each build with its state. - remove --matcher-display, deprecated in v5.0.0 (bbcbf2b) — bb branch restriction create and update and bb project branch-restriction create and update no longer take --matcher-display; remove it. Bitbucket names the matcher from --matcher-id as before. - remove --yolo, --safe-only, and the safe and exposure fields deprecated in v5.0.0 (4a09bbc) — bb ai mcp serve no longer takes --yolo, and bb ai mcp tools no longer takes --safe-only: remove them from a client configuration or script, which now fails with an unknown flag. bb ai mcp tools --json has no safe or exposure field: read writes for whether a tool changes anything, and asks for whether it asks first. - remove the swap fields deprecated in v5.0.0 from bb update --json (26da64d) — bb update --json has no scheduled, staged, paths.staged or paths.swapResult. They were always false or empty; read applied for whether the new binary is in place. - let a repository's .env set only bb's own credentials, context and preferences (402e894) — a repository's .env sets only BITBUCKET_TOKEN, BITBUCKET_USERNAME, BITBUCKET_USER, BITBUCKET_PASSWORD, ADMIN_USER, ADMIN_PASSWORD, BITBUCKET_PROJECT_KEY, BITBUCKET_REPO_SLUG, BITBUCKET_VERSION_TARGET, BB_REQUEST_TIMEOUT, BB_RETRY_COUNT, BB_RETRY_BACKOFF, BB_WEBHOOK_SECRET, BB_WEBHOOK_PASSWORD, BB_LOG_LEVEL, BB_LOG_FORMAT, NO_COLOR, BB_NO_PROMPT, BB_NO_PROMPT_VARS, BB_REQUIRE_KEYRING and BB_DISABLE_UPDATE, in capitals. Anything else in it, such as HTTPS_PROXY, BB_CA_FILE, BB_INSECURE_SKIP_VERIFY, BB_CLIENT_CERT or BB_DISABLE_STORED_CONFIG, is not applied: set it in your environment. update_base_url in a workspace file is not read: set it in your own configuration file. - take every pull request ID as the integer the answers carry (dfd2a79) — the MCP tools take pr_id, and show and refresh_view take id, as an integer: send "pr_id": 42, not "pr_id": "42". A string is refused with a schema error. get_pull_request's former id argument is still a string. - take a group's flag only on the commands that read it (2ba0ced) — commands that ignored a flag of their group now refuse it: --filter on bb tag create, view and delete; --start on every bb branch command but list and on bb commit get, compare and prs; --config-file on bb reviewer condition list and delete. Remove the flag; it never had an effect there. - let no repository file choose the Bitbucket host (d489338) — a repository's .env and .bb/config.yaml no longer choose the Bitbucket host. Set BITBUCKET_URL in your environment, pass --host, or run bb auth server use; a workspace file still sets project_key. - prepare a review for the person to publish instead of approving (ee7ead0) — the MCP tool submit_pr_review is gone, and nothing through MCP approves, requests changes or publishes a review. Call prepare_pr_review instead and tell the person where their review waits; they publish it in Bitbucket. add_pr_comment now adds a pending comment to the person's review rather than publishing it. - serve only the tools that read unless --allow-writes is passed (b85e4d7) — bb ai mcp serve exposes only the tools that read by default. A client configuration that creates or updates pull requests, comments, merges, reviews, reports build statuses or creates tags through MCP has to add --allow-writes to the server's args, or set mcp_allow_writes: true in the configuration file. bb ai mcp tools without flags lists only the tools that read; pass --allow-writes for every tool. - ask the person only on a server started with --elicitation-opt-in (c17b60d) — bb ai mcp serve no longer asks before merge_pull_request, enable_auto_merge, disable_auto_merge, submit_pr_review, set_build_status, create_tag, or update_pull_request setting draft, and no longer refuses them with -32021 to a client that cannot ask. To keep the confirmations, start the server with --elicitation-opt-in, set mcp_elicitation_opt_in: true in your configuration file, or set the mcp_elicitation_opt_in policy key for every user on a machine.
All 58 changes
**Features** - build: remove --limit and --all from bb build required delete, deprecated in v5.0.0 ([0c5bc25](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0c5bc25)) - build: remove --include-unique, deprecated in v5.0.0 ([8ca4f92](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8ca4f92)) - branch: remove --matcher-display, deprecated in v5.0.0 ([bbcbf2b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bbcbf2b)) - mcp: remove --yolo, --safe-only, and the safe and exposure fields deprecated in v5.0.0 ([4a09bbc](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4a09bbc)) - update: remove the swap fields deprecated in v5.0.0 from bb update --json ([26da64d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/26da64d)) - cli: take a group's flag only on the commands that read it ([2ba0ced](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2ba0ced)) - mcp: end what an agent writes through MCP with a line saying so ([2db9ab6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2db9ab6)) - mcp: prepare a review for the person to publish instead of approving ([ee7ead0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ee7ead0)) - mcp: serve only the tools that read unless --allow-writes is passed ([b85e4d7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b85e4d7)) - mcp: ask the person only on a server started with --elicitation-opt-in ([c17b60d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c17b60d)) - pr: delete a pull request comment or task with bb pr comment delete ([ff227f2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ff227f2)) - pr: read the checked-out branch's pull request when no number is given ([9c46464](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9c46464)) **Fixes** - mcp: list get_pull_request's former id among the deprecations ([c9e944a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c9e944a)) - mcp: say when Bitbucket publishes a comment add_pr_comment meant to leave pending ([7cc2c3d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7cc2c3d)) - mcp: refuse a tag message before asking the person about the tag ([9a5fe82](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9a5fe82)) - pr: predict a comment delete with its version and the caller Bitbucket names ([c5dd35e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c5dd35e)) - pr: take the checked-out branch's pull request from this repository ([5b28548](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5b28548)) - config: let a repository's .env set only bb's own credentials, context and preferences ([402e894](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/402e894)) - mcp: take every pull request ID as the integer the answers carry ([dfd2a79](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dfd2a79)) - auth: tell the caller's login name from their slug ([18b0f67](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/18b0f67)) - config: let no repository file choose the Bitbucket host ([d489338](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d489338)) - mcp: open a pull request into the default branch when create_pull_request names no target ([532ce3c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/532ce3c)) - auth: name bb in the git helper line by the path an upgrade keeps ([6b569f7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6b569f7)) - pr: say to push a branch Bitbucket does not have before creating from it ([245f553](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/245f553)) - mcp: hold every tool's four hints as clients receive them ([dfb2944](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dfb2944)) - mcp: let get_pull_request take pr_id like every pull request tool ([5ced2c6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5ced2c6)) - mcp: say what merge_pull_request needs as Bitbucket decides it ([f5f7c9e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f5f7c9e)) - auth: send git an access token the way Bitbucket takes it ([9d96f93](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9d96f93)) - deps: build with Go 1.27.3 ([98635f2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/98635f2)) - deps: build with Go 1.27.2 and golang.org/x/net v0.60.0 ([a5533cb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a5533cb)) **Docs** - release: write the v6.0.0 notes for the upgrader ([0a12759](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0a12759)) - correct what the review of next found ([34228c1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/34228c1)) - add a how-do-I section, a CI pipeline page and MCP setup per client ([e9452cf](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e9452cf)) - add a guide to changing many repositories ([65d2a3a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/65d2a3a)) - skill: leave the verdict on a review to the person, and say an AI agent wrote it ([abfceed](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/abfceed)) - security: describe the MCP guards that hold whatever the client does ([928159d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/928159d)) - mcp: list copying a file into a write in the threat model, and set up a scoped server first ([de921bb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/de921bb)) - versions: say CI tests the newest release and when the others last passed ([e48349d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e48349d)) - auth: say how the git credential helper sends a token ([fb692d6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fb692d6)) **Tests** - live: record that every release in the window passed on 0c5bc25a ([888bd53](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/888bd53)) - cli: hold the flag refusal test to a command that exists ([1f01924](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1f01924)) - live: take each release's answer for a repository token's username ([e5a75ca](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e5a75ca)) - live: end the window of releases tested with 10.5.1 ([22b5fad](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/22b5fad)) **Build** - lint: lint with golangci-lint v2.14.0, which reads Go 1.27.2 ([9621551](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9621551)) **Chores** - deps: Bump github.com/chromedp/cdproto ([b2f9c42](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b2f9c42)) - deps: Bump the gomod-minor-patch group with 2 updates ([05684c3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/05684c3)) - deps: Bump the gomod-minor-patch group across 1 directory with 7 updates ([f412bd1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f412bd1)) - deps: Bump actions/upload-artifact from 7.0.1 to 7.0.2 ([81de97f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/81de97f)) - deps: Bump actions/download-artifact from 8.0.1 to 8.0.2 ([83a9b93](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/83a9b93)) - deps: Bump the gomod-minor-patch group across 1 directory with 14 updates ([ecd59e0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ecd59e0)) - deps: Bump astral-sh/setup-uv from 10.2.0 to 10.3.0 ([8790765](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8790765)) - deps: Bump atlassian/bitbucket in /docker/harness ([a0f0e5f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a0f0e5f)) - deps: Bump vedantmgoyal9/winget-releaser ([598f085](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/598f085)) - deps: Bump github.com/dlclark/regexp2/v2 ([79bca2d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/79bca2d)) - deps: Bump the gomod-minor-patch group with 4 updates ([32f0dc3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/32f0dc3)) - deps: bump the gomod group and move the view tests to chromedp v0.20 ([184c948](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/184c948)) - deps: Bump github.com/dlclark/regexp2/v2 ([451a34f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/451a34f)) - deps: Bump anchore/sbom-action from 0.24.2 to 0.24.3 ([4fdf268](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4fdf268))v5.0.1¶
Published: 2026-10-02
Changes since v5.0.0.
Compare: v5.0.0...v5.0.1
Fixes - reviewer: predict and refuse what each Bitbucket release does with a condition's reviewers and a DEFAULT_BRANCH matcher (e2b7a3b) - output: name DEFAULT_BRANCH among the ref matcher types (55adb0d)
Tests - reviewer: pin each release's condition rules without a server (c596c82) - live: reach Bitbucket's HTML error page by a path every release answers with one (f261c3e) - live: stop testing Bitbucket 9.2, which Atlassian no longer supports (c382f63)
Build - openapi: adopt Bitbucket 10.5: vendor its reference and test against 10.5.0 (4ea9654) - openapi: keep unset nullable fields out of generated request bodies (9bf7781)
Chores - deps: Bump atlassian/bitbucket in /docker/harness (f028a35)
v5.0.0¶
Published: 2026-10-01
bb v5.0.0 works with every Bitbucket Data Center release Atlassian supports, completes what you type from your own Bitbucket, and makes its MCP server something you work with: it asks you before it merges, takes the pull request or file you hand it, and shows what it found as a view in your client.
It is a major release. Seven changes can break a script, a pipeline or an MCP configuration. They are under "Before you upgrade", each with what to change, and are the part to read first if bb runs in CI, in scripts or under an AI agent. What is deprecated keeps working until v6.0.0 and is listed at the end.
New at the command line
bb was built against the newest Bitbucket release and tested against that one alone. It now works with every release Atlassian supports, each tested against a real instance of it, and a release keeps working after Atlassian's support for it ends.
An older release behaves like the newest except where it lacks something a later one added. There bb answers as the newest release would where it can, and otherwise refuses before it sends anything, naming the release that can do it:
$ bb branch restriction create --repo PROJ/app --type no-creates --matcher-id refs/heads/main
unsupported: a no-creates branch restriction is not supported by this Bitbucket version (9.2.1); it needs 9.4.0 or later
Before, Bitbucket accepted such a request and dropped the part it did not know, so a required build meant to spare pull requests blocked every one of them. unsupported, exit 14, is a new error kind: a script that lists the kinds or exit codes it handles gains one. Bitbucket Versions lists the four places where a release differs.
Press tab after bb pr merge and bb lists the open pull requests of the repository you are in, by number and title. After bb branch delete it lists the branches, each with its latest commit message. Projects, repositories, tags, reviewers, file paths and the values a flag accepts complete the same way, read from your Bitbucket with your own credentials, in bash, zsh, fish and PowerShell.
Homebrew and the .deb and .rpm packages set it up for bash, zsh and fish when they install bb, and Scoop sets it up for PowerShell, along with the agent skill. Anywhere else one command does it, and bb doctor says whether it is in place:
bb completion install
Standing on a pushed branch, bb pr create is enough. The source is the branch that is checked out, the target is the repository's default branch, and the title is the commit's subject when the branch holds exactly one commit. At a terminal each is offered for you to accept or change. With nobody to ask they are used as they are and named on stderr, and a branch that holds several commits still needs --title. It prints the pull request's link, which every reported pull request now carries as url.
git push -u origin feature/refunds
bb pr create
bb pr merge 42 --strategy squash
--strategy takes any strategy the repository enables, and its default applies without it. --dry-run says so first when the repository has not enabled the one asked for.
bb search prstakes a period, so it can answer "what did I work on" (#697):
What it lists has not changed. Without --repo that is every pull request you are involved in across every repository, whether you wrote it, are a reviewer on it or took part in it, and --role picks one of the three. What is new is the period: --since and --until bound the listing on the created, updated or closed date that --date-field names, and --group-by week or repo arranges the text output. With --since the listing holds the whole period rather than the first 25.
bb search prs --role author --state all --since 2026-07-20 --until 2026-09-27 --group-by week
--statetakesmergedanddeclined, inbb pr listtoo, andallandclosedno longer fail across repositories.-
A pull request reports
closedDateonce it is merged or declined, and the issue keys its title and source branch mention:{ "data": { "pullRequests": [ { "id": 6, "title": "PAY-12: retry a declined refund", "state": "MERGED", "open": false, "closed": true, "repository": { "projectKey": "PAY", "slug": "ledger" }, "sourceRepository": { "projectKey": "PAY", "slug": "ledger" }, "version": 2, "author": "Administrator", "authorUsername": "admin", "sourceBranch": "feature/refunds", "targetBranch": "master", "sourceCommit": "6b9cb2216ad56a58f976325627a2d87ad41d6a2a", "createdDate": 1790758330929, "updatedDate": 1790758331777, "closedDate": 1790758331777, "url": "https://bitbucket.example.com/projects/PAY/repos/ledger/pull-requests/6", "issueKeys": ["PAY-12"], "commentCount": 0, "openTaskCount": 0, "resolvedTaskCount": 0 } ] }, "meta": { "command": "search prs", "limitReached": true, "bbVersion": "..." } } -
bb branch list --detailsprints the details. It lists what Bitbucket's branch page shows beside each branch: how far it is ahead of and behind the default branch, its last commit, its builds and its pull requests.--basemeasures against another branch, tag or commit, and asks for the details by itself. Both flags used to be accepted and change nothing.
$ bb branch list --repo PAY/ledger --details
feature/refunds refs/heads/feature/refunds 6b9cb2216ad56a58f976325627a2d87ad41d6a2a default=false ahead=2 behind=1 2026-09-28 alice pr=#42 OPEN builds=1 successful, 1 failed
master refs/heads/master 0d4e1c7a9b3f52e86a1d7c40b9e2f35a6c8d1e07 default=true 2026-09-27 bob
Under --json each branch gains ahead, behind, lastCommit, builds and pullRequests, each left out when Bitbucket has nothing to report: the base has no counts, and a branch nobody built has no builds. Bitbucket names the pull request when a branch has exactly one, as only, and gives the counts alone when it has more:
{
"data": {
"repository": { "projectKey": "PAY", "slug": "ledger" },
"branches": [
{
"id": "refs/heads/feature/refunds",
"displayId": "feature/refunds",
"latestCommit": "6b9cb2216ad56a58f976325627a2d87ad41d6a2a",
"default": false,
"ahead": 2,
"behind": 1,
"lastCommit": {
"id": "6b9cb2216ad56a58f976325627a2d87ad41d6a2a",
"displayId": "6b9cb2216ad",
"message": "PAY-12: retry a declined refund",
"author": { "name": "alice", "emailAddress": "alice@example.com" },
"authorTimestamp": 1790586000000,
"committer": { "name": "alice", "emailAddress": "alice@example.com" },
"committerTimestamp": 1790586000000,
"parents": ["0d4e1c7a9b3f52e86a1d7c40b9e2f35a6c8d1e07"]
},
"builds": { "successful": 1, "failed": 1, "inProgress": 0, "unknown": 0, "cancelled": 0 },
"pullRequests": {
"open": 1,
"merged": 0,
"declined": 0,
"only": { "id": 42, "title": "PAY-12: retry a declined refund", "state": "OPEN" }
}
}
]
},
"meta": { "command": "branch list", "limitReached": false, "bbVersion": "..." }
}
Every command that takes --json takes --yaml, and prints the same document as YAML, for a pipeline that keeps its data in YAML or for reading a long answer at a terminal. --dry-run and --describe follow it too. bb --yaml branch list --repo PAY/ledger --filter develop:
data:
repository:
projectKey: PAY
slug: ledger
branches:
- id: refs/heads/develop
displayId: develop
latestCommit: f62bfb84cba2a12ef7f2437dfc8c084ac61c489d
default: false
meta:
command: branch list
limitReached: false
bbVersion: "..."
The help of every command ends with examples to copy, showing the values a flag's description leaves you to guess. The command reference on the site has a page per command in place of one long page, with each flag under the command it comes from.
New in the MCP server
The server also asks you before a tool merges, or decides what merges. That changes an existing setup, so it is under "Before you upgrade".
Until now the AI only saw what it went and fetched through bb's tools, so you had to hope it found the right pull request or file. Now you can hand it Bitbucket content yourself, the way you attach a file to a message: the pull request you are reviewing, its diff or its open comments, a file on any branch, tag or commit, or a single commit. Your MCP client helps you find it, suggesting projects, repositories, pull requests, paths and branches as you type, and it lists your own open pull requests and the ones waiting on your review, so the one you want is usually a click away.
In VS Code, for example, choose Add Context > MCP Resources, pick the diff of pull request 42 in PAYMENTS/ledger, and ask what could break. Or type /bitbucket.review_pull_request to attach a pull request with its diff and open comments and ask for a review in one step. It works the same in any MCP client, including chat apps without a terminal, and everything still goes through bb, with its token, its --project and --repo scope and its audit trail. Your client never talks to Bitbucket itself.
In clients that render MCP Apps, such as Claude Desktop, VS Code and Goose, the AI can now put what it found in front of you instead of describing it: a pull request with its reviewers' avatars and decisions, its builds and the ones its target branch requires, open tasks, its formatted description and its activity, comments included; a list of pull requests; or its diff, a file at a time, highlighted, with each comment on its line. It looks and reads like Bitbucket, and anything you click opens there.
Ask for PAYMENTS/ledger#42 and the answer comes with its card; open the card for the full overview and its activity, or its diff. In the diff, select lines to add them to the chat, to ask about them or to comment on them; reply to a comment, and approve or request changes, without leaving the conversation. Ask the AI to open a pull request and it opens it; when you want a say in its description or reviewers first, it hands you its draft as a form to finish and submit, with the default reviewers and code owners filled in as Bitbucket's create page does. A view carries what it shows, so it still renders when you come back to the conversation, even without bb running, and it says when it was read. While it is on screen it keeps itself current: watch a build finish or a comment arrive without asking again, and the AI is told what changed. Terminal agents such as Claude Code show the usual text.


Views in your agent shows all five: the card, the overview with its activity, a list, the diff and the form.
- Files reach the AI in a format it can ingest (ADR-094):
get_file_content passed every file as one string, whatever its size, and a file that is not text as unreadable characters. It now converts the file on the server: text as a window of numbered lines, so a long file is read a part at a time; an image as an image; a Word, PowerPoint or Excel file as its text; an archive as a list of its entries. Anything else is described by its type and size, with its page in Bitbucket. This is the MCP server's tool; bb repo cat still prints a file as it is.
For administrators
Three new system policy settings, which no flag, environment variable or user configuration overrides:
| Setting | Registry value | Effect |
|---|---|---|
disable_mcp_server |
DisableMCPServer |
bb ai mcp serve is refused; the rest of bb keeps working. |
read_only |
ReadOnly |
Commands that change Bitbucket are refused, bb api sends only GET and HEAD, and the MCP server offers only the tools that read. |
disable_bb |
DisableBB |
Every command is refused except help, --describe, --version, bb doctor and the completion scripts. |
Set them in /etc/bb/config.yaml, or %ProgramData%\bb\config.yaml on Windows:
policy:
read_only: true
Or through Group Policy, as the registry value set to 1 under HKLM\Software\Policies\bb.
- Running and auditing the MCP server (ADR-098, ADR-099, ADR-101):
- A tool that asks records the answer: the audit record has
confirmation(accepted,declined,cancelledorunavailable), and a call the confirmation stops isstatus: denied. The question is a record of its own,status: asked, written before the person answers, so an agent that asks and never answers still leaves a trace. - The audit trail redacts credentials wherever they appear in an argument or a resource URI (#731). An argument was redacted only when its name marked it secret or its whole value was a URL, and the
resourcefield not at all, so a credential inside a path, a ref or a title was written to the audit file. Both now get the redactionerror_messagegets, which also catchestoken=...as Bitbucket quotes it back andBITBUCKET_TOKEN=.... A redacted URL reads[REDACTED]rather than%5BREDACTED%5D. -
--toolsand--excludedecide which resources and prompts are offered, as they decide the tools. The audit trail records reads, the resource list and prompts asmcp_resource_read,mcp_resource_listandmcp_prompt_get, withresourceorpromptin place oftool; completions are not recorded. A SIEM rule that expects every record to name a tool needs to allow for them:{"timestamp":"2026-08-29T09:32:40Z","event":"mcp_resource_read","resource":"bitbucket://projects/PAYMENTS/repos/ledger/pull-requests/42/diff","project":"PAYMENTS","repo":"ledger","status":"success","duration_ms":61,"user_identity":"alice","host":"https://bitbucket.example.com","scope":"PAYMENTS"} -
A view has no network access; bb fetches the avatars with its own credentials and puts them in the result.
--exclude showturns views off. A view keeps current by callingrefresh_view, and the form suggests values throughsuggest_form_values: read-only tools only views are offered, each call recorded in the audit log like any other;--exclude refresh_viewkeeps views as they were drawn. What you do in a view goes through the AI's own tools, with their confirmations, and a view has no connection of its own to Bitbucket. The server tells agents to show views only to a person who is there, never in unattended work. Of Svelte, ERB, PHTML, Go HTML and Jinja templates only the markup is highlighted;--highlight-templateshighlights the code in them too, with lexers a crafted file can keep busy for seconds, though no view waits for them. -
For MCP clients: every tool declares all four MCP hints and a title as the specification defines them, so a client that decides its own prompts from the hints may prompt for different tools.
openWorldHintis false on every tool, andupdate_pull_requestanddisable_auto_mergeare destructive.bb ai mcp toolshasasks(always,neverorwhen-setting-draft) and takes--read-only.bb ai mcp tools --jsonfor one tool:{ "name": "merge_pull_request", "description": "Merge a pull request. All required build checks must pass and all reviewers must have approved. Asks the person to confirm in the client before it runs.", "writes": true, "asks": "always", "safe": true, "exposure": "SAFE" }
bb update installs the new binary itself before it exits, on every operating system. On Windows it used to leave the swap to a PowerShell helper that ran after bb had exited. Application control such as AppLocker or WDAC blocked the helper, and bb had already reported success.
Behind a release mirror, every download now goes through the mirror, with the CA and the client certificate it was configured with, and a mirror whose certificate this host does not trust is reported as a failure to fix, no longer as one to retry. bb update --dry-run verifies the release the mirror serves, its signature, its checksums and the archive itself, also when nothing newer is there. That makes it the check to run on a host after a rollout. A slow link no longer fails the download at the request timeout.
- Requests name bb (#702). Every request carries
User-Agent: bb/<version> (<os>/<arch>), ending inmcpwhen the MCP server sends it, so an administrator can find bb's traffic, and an agent's, in Bitbucket's access log or at a proxy.
Before you upgrade
If you consume bb inside CI/CD pipelines, shell scripts, or AI agent toolchains, review this checklist before upgrading:
bb pr checksgates on CI the waygh pr checksdoes (ADR-091, #646):- Without
--json,bb pr checksandbb pr build statusexit1when a build failed, and8when none failed and one is still in progress or has no result. They used to exit0whatever the builds said, so a gate written forgh,bb pr checks 42 || exit 1, let every pull request through. - A failed build wins over one still running, and a cancelled build counts as neither. The exit status covers every build, not only the
--limitshown. When it is not0, a line on stderr says how many builds failed or are still running. - Exit
8is new tobb. It is not an error kind, and only these two commands use it. - Under
--jsonboth commands still exit0, with each build's state indata.statuses, asgh pr checks --jsondoes. - A script that runs either command for its output and relies on exit
0adds|| true, or passes--json. bb bulkis gone, as the v4.1.0 notes announced (ADR-084, #608):bb bulk plan,bb bulk applyandbb bulk statusno longer exist, nor doBB_BULK_STATUS_DIRand the bulk policy, plan and apply-status schemas.- Set permissions, webhooks, default tasks and branch restrictions once on the project, with
bb project permissions,bb project webhook,bb project default-taskandbb project branch-restriction. Bitbucket applies them to every repository in the project. - For a setting Bitbucket keeps per repository, loop over
bb repo list --project PROJ --jsonand run thebb repo settingscommand for each, previewing with--dry-run. The loop is safe to run again: a webhook create that finds its webhook already there reports it rather than adding a second. - The bb-bulk agent skill is gone too, so
bb ai skill install bulkexits2. Delete any copy an earlier bb installed, in.agents/skills/bb-bulkor.claude/skills/bb-bulk, in a project or in your home directory.bb doctornames every copy it finds. --dry-runanswers with a verdict, in its own member (ADR-096, #616):-
Under
--json, a dry run answers inpreviewrather thandata: atier, one effect per change with itsaction,target,outcome(would-apply,no-oporwould-fail) andreasons, and theerrorthe real run would fail with.dryRun,planningMode,capability,summary, and per itemintent,predictedAction,supported,confidence,requiredStateandblockingReasonsare gone; a script readingsummaryreadseffectsinstead.bb --json pr merge 42 --dry-run, for a pull request that is already merged:* A command that only reads still runs, and its data is in{ "preview": { "tier": "preconditions-checked", "effects": [ { "action": "update", "target": { "id": "42", "repository": "PROJ/app" }, "outcome": "would-fail", "reasons": ["pull request is already merged"] } ], "error": { "kind": "conflict", "message": "pull request is already merged", "exitCode": 5 } }, "meta": { "command": "pr merge", "bbVersion": "..." } }preview.data. A failure the check runs into, such as invalid arguments or a missing pull request, ispreview.errorrather than a top-levelerror, which under--dry-runnow means only that no verdict was reached:10Bitbucket did not answer,12interrupted,1a bug in bb. * Without--json, a dry run that finds the run would fail exits with the code the real run would, sobb pr merge 42 --dry-run && bb pr merge 42stops at the check. It used to exit0. Under--jsonor--yamla verdict exits0, with the verdict in the document. * The text output names each change and why it would or would not go through, in place of theintent=... action=...lines. *bb ai mcp serveno longer takes--dry-run. * There is no warning period: one document cannot carry the old preview beside the new one. 4.--describedescribes the whole document, for a run and for a dry run (ADR-097, #616): * Under--jsonit answers indescriptionrather thandata.run.outputSchemais the JSON Schema of the whole document a run writes, meta and the error included, anddryRun.outputSchemathe one--dry-runwrites, besidedryRun.behaviouranddryRun.tier.describedis gone,commandismeta.commandandreasonisrun.reason. A script readingschemareadsrun.outputSchema.oneOf[0].properties.data, or better, validates the whole document againstrun.outputSchema. * Without--jsonor--yamlit prints an outline of the fields for people, rather than the JSON Schema. *bb <group> --describeandbb --describelist their commands with what--dry-rundoes for each, rather than saying a group has nothing to describe. A path that names no command answers withdescription.error, exiting0under--json. * There is no warning period: one document cannot carry the old description beside the new one. 5. The MCP server asks your permission in your MCP client, and offers every tool by default (ADR-098, #620): *bb ai mcp servemoves to MCP's newer way of asking for permission, elicitation: the server asks, and your MCP client shows you the question. By default it offers every tool, as it did with--yolo, but a tool that merges, or decides what merges or gets released, asks you first. That covers merging, turning auto-merge on or off, approving or requesting changes, reporting a build status, creating a tag, and moving a pull request into or out of draft. Your client shows what the call will do, and it runs only once you accept. Before, the server hid most of these unless it started with--yolo, and then nobody was asked. * Locking the server down is now opt-in: with--read-onlyit offers only the tools that read.--yoloand--allow-writesdo nothing, and warn. * You accept the pull request you were shown. If someone pushes to it before you accept, the merge or auto-merge is refused. * Those tools need a client that supports elicitation. One that does not gets error-32021for them, and nothing changes in Bitbucket. * What changes in the audit record, in the hints a client reads and inbb ai mcp toolsis under "For administrators". 6.bb apiauthenticates like every other command (ADR-083, #707): *-Hwith anAuthorization,Proxy-AuthorizationorCookieheader exits2, and so does a user or password in the endpoint URL or--host. A secret on the command line is readable in the process list and lands in shell history. * A script that passed its token that way stores it once withbb auth login https://bitbucket.example.com --token-stdin, or setsBITBUCKET_TOKENin the environment. 7. A stored credential goes only to the host it was stored for (#730): * A credentialbb auth loginstored for one Bitbucket is sent to that host alone. A command pointed at another host, by--host,BITBUCKET_URL, a.env, a workspace.bb/config.yamlor a full URL given tobb api, sends that host no credential unless one is stored for it too, and Bitbucket answers401for anything that is not public. The same holds for the fork lookup afterbb repo cloneof another host's URL, which also no longer shows that host your default host's client certificate. An alias of the stored host still counts as the same host. * A host profile in a workspace.bb/config.yamlgives that host itsurlandusername, and nothing that acts as you: it never makes bb send a stored token or password, and itsclient_certandclient_keyare ignored. A profile keyed to another host with itsurlset to your Bitbucket, or one naming another host as an alias of yours, was handed your token. If a workspace file set a client certificate, set it with--client-certand--client-keyonbb auth login, or inBB_CLIENT_CERTandBB_CLIENT_KEY. * A credential stored forhttps://is not sent to the same host overhttp://, so a.envor.bb/config.yamlnaming your Bitbucket overhttp://can no longer send your token in the clear, andbb cloneno longer passes it to git for anhttp://clone link. A login stored forhttp://still answers overhttps://. * Before v4.1.0 a host with nothing stored for it got the default host's credential, which sent your token to whatever host a cloned repository's.envor workspace file named. v4.1.0 closed that everywhere butbb apiand the clone's fork lookup, without saying so in its notes; v5.0.0 closes those two. * A script that relied on the old fallback logs in to each host it talks to,bb auth login <host>, or setsBITBUCKET_TOKENfor the run. 8. A credential goes into the configuration file in plaintext only when you ask (ADR-047): * Where the OS keyring cannot hold the secret, on a headless server, in most containers, or in WSL withoutgnome-keyring,bb auth loginexits1and stores nothing. It used to write the secret into the configuration file in plaintext, with a warning on stderr, without being asked. * This affects a login on a machine with no keyring. Where a keyring works, nothing changes. The tokenbb repo cloneasks for when nothing is stored for the host is then used for that clone and not stored. * To keep the old behaviour, pass--allow-insecure-storagetobb auth login. Better, in CI and containers, setBITBUCKET_TOKENin the environment and do not log in at all.BB_REQUIRE_KEYRING=1and therequire_keyringpolicy refuse plaintext even with the flag, and--require-keyringcannot be combined with it. * A credential already stored in plaintext keeps working, with its warning, so nobody is locked out by the upgrade. Only a new login needs the flag. * Where a keyring is required, byBB_REQUIRE_KEYRING=1or therequire_keyringpolicy, a credential stored in plaintext is refused wherever it is read: git no longer gets it frombb auth git-credentialand falls through to its own prompt, andbb repo clonesays to log in again where the keyring works. 9.--yesis refused unless the repository is on the command line (ADR-073, #752): * A command that deletes, removes, revokes or clears something in a repository, given--yeswith the repository fromBITBUCKET_PROJECT_KEYandBITBUCKET_REPO_SLUG, now refuses: it exits2, changes nothing, and says how to name the repository. It used to go ahead in the repository the variables named. A repository from the git remote was already refused this way. * What to do: add--repo PROJ/repoto the command, for examplebb branch delete feature/x --repo PROJ/repo --yes. Forbb reviewer-group,bb reviewer conditionandbb repo ssh-key,--project PROJdoes it too;BITBUCKET_PROJECT_KEYno longer does. An argument that names the repository also counts: thePROJECT/slugofbb repo delete, or a pull request's URL. * Without--yesnothing changes: a person at a terminal is still asked to type back what is about to be destroyed, and with nobody to ask the command still refuses.
Other fixes worth knowing
* A project key or repository slug cannot carry a path. A slug such as repo/pull-requests/7/merge?version=3# turned a request into one for another endpoint, so through the MCP server a tool that never asks could merge a pull request. A key or slug holding a slash, ?, #, % or whitespace is refused.
* A repository command no longer changes what its project defines (#657). A repository's branch restrictions, default reviewer conditions and default tasks include the ones it inherits from its project. bb branch restriction delete --repo, given the id of an inherited one, deleted it from the project, and so from every repository in it. These commands now refuse an inherited entry and name the project command that changes it, and the listings mark what is inherited.
* A branch restriction survives an update that is refused, and --user and --access-key-id work. An update deleted the old restriction before it created the new one, so a refusal, for a user name that does not exist for instance, left the branch unprotected. The two flags had failed on every call.
* A long transfer is no longer cut off. bb clone was stopped after 60 seconds whatever it was doing, and bb repo archive, bb repo cat and the download in bb update had to finish within request_timeout. Each now runs for as long as it makes progress, and a failed bb repo archive leaves no partial file.
* bb ai skill install reaches Claude Code. It wrote the skill to .agents/skills, which Claude Code does not read. It writes .claude/skills as well now, and bb ai skill remove takes out both.
* Git authenticates as the login bb auth setup-git set up (#733). The helper line named bb and nothing else, so git pushed as whichever configuration file BB_CONFIG_PATH named when git ran, and two logins for one host could not be kept apart. The line now names the configuration file setup-git read, and bb auth git-credential takes it as --config. Run bb auth setup-git again to pin an existing setup; it replaces bb's own earlier line without --force.
* bb pr checkout keeps the credential off git's command line, where any local account could read it while git ran, as bb clone already did.
* --project inside a clone means the project (#725). In a clone, bb filled in the clone's repository beside --project, so bb reviewer-group and bb repo ssh-key refused it for naming both, and bb reviewer condition acted on the repository instead: create --project wrote the condition there. bb search prs --role was refused the same way. A scope you name now keeps the clone out of it. bb reviewer condition refuses --project and --repo together, as bb reviewer-group does.
* bb build required delete --dry-run finds the check wherever it is (#728). The preview looked for the check among the first --limit checks only, 25 by default, and predicted no-op, "not found", for one further down, which the real run then deleted. It reads every check now.
* An https:// URL for a server that speaks plain HTTP is permanent (exit 1) (#704). It was transient (exit 10) and tried three times, though the answer cannot change. The message says to check whether the URL should begin with http://.
* Creating a webhook that is already there reports it (#729). Bitbucket stores a second webhook with the name, URL and settings of one it has, and both fire, so a setup script run twice made two. bb webhook create, bb project webhook create and bb repo settings workflow webhooks create now report the webhook that is there and exit 0, with created: false under --json. One with the same name and URL and other settings is refused as a conflict (exit 5) that names it and what differs; change it with update. --dry-run predicts both. Bitbucket never returns a webhook's endpoint password, so a password you pass is not compared, and a note on stderr says so.
{
"data": {
"status": "ok",
"repository": { "projectKey": "PROJ", "slug": "repo" },
"webhook": {
"id": 12,
"name": "ci",
"url": "https://ci.example.com/hooks/bitbucket",
"active": true,
"events": ["repo:refs_changed"],
"sslVerificationRequired": true,
"scopeType": "repository",
"secretConfigured": false
},
"created": false
},
"meta": { "command": "webhook create", "bbVersion": "..." }
}
- An HTML error page is reported by its title (#704). The message used to show the page's first 300 characters, which were all markup. Now it says what the page is:
validation: bitbucket API returned 400: an HTML page titled "Bad request - Bitbucket" (18389 characters; pass --full-error-body to see all of it)
bb auth git-credentialhonoursBB_DISABLE_STORED_CONFIG=1. With it set, git gets no stored credential from bb, the same as every other command.bb cloneandbb repo cloneask for no token under--no-input. They report that no credential is stored for the host instead.- Repository inference honours the global flags. It loaded its configuration from the environment alone, so a
--request-timeoutgiven beside a brokenBB_REQUEST_TIMEOUTturned inference off without a word. - Output that was wrong, for a script that reads it:
bb pr getlists a pull request's reviewers. It listed everyone who took part, so whoever merged it or commented in passing appeared as a reviewer, and the review summary counted a real approval as missing.- A resolved comment thread counts as resolved, in
bb pr comment listand in the unresolved count of a pull request. bb branch listmarks the default branch (#658). Every branch readdefault: false.bb diff pr --name-onlyprints each path as it is, no longer asdst://path, and names binary files.bb diff refs --statcounts the change the diff shows; it counted the reverse.--pathonbb diff commitandbb diff refsprints a unified diff; it printed JSON.bb deployment getreports the commit that was deployed astoCommit.fromCommitis the commit the previous deployment deployed, which is what Bitbucket means by it.bb api --jsoncarries a body that is not text as base64 and says so inmeta.encoding. It used to replace every byte that was not valid text.bb clonereports"meta": {"command": "repo clone"}, the command it is an alias of, as every alias does. It reportedclone.
Deprecation
bb update --json:scheduled,staged,paths.stagedandpaths.swapResultare deprecated and are removed in v6.0.0 (ADR-084, ADR-092).bb updateinstalls the new binary itself before it exits, on every operating system, so these fields are always false or empty. Readappliedinstead.bb ai mcp serve --yoloand--allow-writes,bb ai mcp tools --safe-only, and thesafeandexposurefields ofbb ai mcp tools --jsonare deprecated and are removed in v6.0.0 (ADR-084, ADR-098).- Every tool is exposed without
--yolo, so the flags do nothing,--safe-onlylists every tool,safeis always true andexposurealwaysSAFE. Pass--read-onlyfor a server that only reads, and readasksandwritesinstead of the fields. --matcher-displayonbb branch restriction createandupdateand onbb project branch-restriction createandupdate, and--include-uniqueonbb build status stats,getandset, are deprecated and are removed in v6.0.0 (ADR-084).- Neither ever changed a result. Bitbucket works out a matcher's display name from the matcher and ignores the one it is sent, and bb printed the same build counts with
--include-uniqueand without it. Both are still accepted and print a warning on stderr; remove them from scripts.bb build status getlists each build with its state. --limitand--allonbb build required deleteare deprecated and are removed in v6.0.0 (ADR-084).- They bounded the checks the preview looked through, and it looks through all of them now. Both are still accepted and print a warning on stderr; remove them from scripts.
The complete list of breaking changes, commit references, and full change ledger is itemized below.
Changes since v4.1.0.
Compare: v4.1.0...v5.0.0
⚠ Breaking Changes
- let --yes apply only to a repository named on the command line (2a9e249) — a destructive command given --yes with its repository from BITBUCKET_PROJECT_KEY and BITBUCKET_REPO_SLUG exits 2; pass --repo.
- store a credential in plaintext only when asked to (d681004)
- tools that decide a merge ask the person through the client (4ba9aa1) — bb ai mcp serve lists every tool, and a client that cannot show an elicitation gets error -32021 for the tools that ask instead of not seeing them. --yolo no longer makes them run unasked.
- --describe describes the whole document in every mode (7141b0a) — --describe --json answers in description rather than data, and command, described, schema and reason are gone; without --json it prints an outline rather than JSON Schema.
- --dry-run answers with a verdict, in its own member (0064ca0) — under --json, --dry-run answers in preview rather than data; dryRun, planningMode, capability, summary and the per-item intent, predictedAction, supported, confidence, requiredState and blockingReasons are gone. A text dry run that finds the run would fail exits with the real run's code rather than 0. bb ai mcp serve rejects --dry-run.
- exit as gh pr checks does when a build failed or is running (000b68a) — bb pr checks and bb pr build status without --json exit 1 when a build failed and 8 when one is in progress or has no result, as gh pr checks does, where they exited 0. A script that ran them for their output and relied on exit 0 adds || true or passes --json, which still exits 0.
- remove bb bulk, and the skill that taught agents to use it (1d79484) — bb bulk (plan, apply and status) no longer exists, nor do the bb-bulk agent skill (bb ai skill install|show|remove bulk), BB_BULK_STATUS_DIR, or the bulk policy, plan and apply-status schemas. Set permissions, webhooks, default tasks and branch restrictions once on the project with bb project permissions, bb project webhook, bb project default-task and bb project branch-restriction, where Bitbucket cascades them to every repository in it. For a setting Bitbucket scopes only to a repository, loop over bb repo list --project PROJ --json and run the bb repo settings command for each, previewing with --dry-run. Delete the bb-bulk skill wherever an earlier bb installed it -- .agents/skills/bb-bulk and .claude/skills/bb-bulk, in a project or in your home directory; bb doctor names every copy.
All 500 changes
**Features** - auth: store a credential in plaintext only when asked to ([d681004](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d681004)) - branch: list --details prints the details ([bddfdc4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bddfdc4)) - cli: deprecate --matcher-display and --include-unique ([5029d82](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5029d82)) - search: take a period as ISO 8601 writes a date ([3f7d731](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3f7d731)) - search: list your pull requests by state and by period ([4864bb3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4864bb3)) - pr: work out pr create's branches and title from the checkout ([136df3c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/136df3c)) - pr: say where a pull request is, and merge with a chosen strategy ([e850ef3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e850ef3)) - mcp: say how to go on when a view is not drawn ([dfcebe5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dfcebe5)) - mcp: open a pull request asked for, and show the form for a say ([bff970c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bff970c)) - mcp: tell agents that views are for a person who is there ([7fa884e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7fa884e)) - mcp: keep the reviewer search beside the form's last chip ([b3c35c1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b3c35c1)) - mcp: leave the author out of the form's reviewers, whoever names them ([15932cc](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/15932cc)) - mcp: pick the form's branches and reviewers as Bitbucket does ([e03204a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e03204a)) - mcp: fill in the form's reviewers as Bitbucket's create page does ([824da2c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/824da2c)) - mcp: count a card's builds as its pull request page does ([31e07f2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/31e07f2)) - mcp: highlight the lines a comment in the activity is shown among ([322a793](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/322a793)) - mcp: put comments where Bitbucket has them, and drop the file viewer ([de5a938](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/de5a938)) - mcp: highlight a template's markup, and its code on request ([258c6f2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/258c6f2)) - mcp: highlight the code in diffs and files ([12ef8e0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/12ef8e0)) - mcp: tokenize code for the views to highlight ([3717272](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3717272)) - mcp: show the builds a pull request must pass on its card ([272a857](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/272a857)) - mcp: work out the builds a pull request must pass ([1034d80](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1034d80)) - mcp: show a file as what it is ([3e2fc35](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3e2fc35)) - mcp: hand the person a pull request to finish and submit ([78e89de](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/78e89de)) - mcp: approve or request changes from the overview and the diff ([169b596](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/169b596)) - mcp: draw a diff's comments on their lines and comment on one ([ea5caef](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ea5caef)) - mcp: reply to a thread and comment from the comments view ([9e1aff5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9e1aff5)) - mcp: open a pull request's diff and comments in the same view ([99ac9e7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/99ac9e7)) - transport: name bb in the User-Agent of every request ([f15c587](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f15c587)) - mcp: check a view in motion every 15 seconds ([5b1cb52](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5b1cb52)) - mcp: keep a view current while it is on screen ([b6d14d1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b6d14d1)) - mcp: list a threads card's comments where they are ([679585d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/679585d)) - mcp: show a pull request's comment threads as a view ([d19ca8e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d19ca8e)) - mcp: read whether a client opens links before asking it to ([6f47fc7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6f47fc7)) - mcp: say when a client will not open a link, and ask about fullscreen ([f543219](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f543219)) - mcp: make the inline views glanceable ([ad85c8c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ad85c8c)) - mcp: lay the views out tighter and clearer ([7cf803e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7cf803e)) - mcp: keep views true at any size and draw Markdown descriptions ([3052471](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3052471)) - mcp: show pull requests, lists and diffs as views in MCP clients ([1dfde81](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1dfde81)) - policy: let administrators switch bb off, switch its MCP server off, or make it read-only ([67d6c4f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/67d6c4f)) - mcp: serve pull requests, diffs, files and commits as resources, with prompts and completions ([1e74130](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1e74130)) - mcp: tools that decide a merge ask the person through the client ([4ba9aa1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4ba9aa1)) - describe: --describe describes the whole document in every mode ([7141b0a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7141b0a)) - outline: one sentence per field, on lines up to 120 columns ([5d5ff71](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5d5ff71)) - outline: print a JSON Schema as an outline of fields ([491d523](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/491d523)) - dry-run: --dry-run answers with a verdict, in its own member ([0064ca0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0064ca0)) - jsonoutput: encode a document as YAML that means the same as its JSON ([80265b4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/80265b4)) - output: --yaml prints the document --json prints, as YAML ([b4e94f9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b4e94f9)) - mcp: list bzip2-compressed tar archives ([7608828](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7608828)) - mcp: convert BMP and TIFF images to PNG or JPEG ([77c25c4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/77c25c4)) - mcp: turn a photograph upright from its EXIF orientation ([7d4e85a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7d4e85a)) - mcp: return short audio and video as media, and describe the rest ([753aaa0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/753aaa0)) - mcp: extract the text of Word, PowerPoint and Excel files, and list archives ([ba7c66e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ba7c66e)) - mcp: return an image file as an image, scaled to fit, and say so ([3712330](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3712330)) - mcp: read a file in numbered windows, and describe what is not text ([1e92978](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1e92978)) - update: deprecate the --json fields of a swap left for later ([60a436e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/60a436e)) - pr: exit as gh pr checks does when a build failed or is running ([000b68a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/000b68a)) - doctor: report a skill this bb no longer carries ([03c736e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/03c736e)) - bulk: remove bb bulk, and the skill that taught agents to use it ([1d79484](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1d79484)) - doctor: report shell completion and agent skills ([eb12b5d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/eb12b5d)) - skill: install the skill where Claude Code reads it too ([a656e9a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a656e9a)) - completion: set shell completion up with bb completion install ([cb07323](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cb07323)) - completion: describe every branch by its latest commit ([219b929](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/219b929)) - completion: offer the bulk runs saved on this machine ([fa5dc13](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fa5dc13)) - completion: complete the values that come from a fixed vocabulary ([cbbbc9f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cbbbc9f)) - completion: follow --matcher-type when completing --matcher-id ([a2047e7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a2047e7)) - completion: complete the ids a person cannot remember ([7d7c268](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7d7c268)) - completion: complete the keys on a commit and on your account ([6eae307](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6eae307)) - completion: complete a path one segment at a time ([2352859](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2352859)) - completion: complete repositories and projects ([1e24130](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1e24130)) - completion: offer the people a slot can actually name ([abbc55b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/abbc55b)) - completion: complete branches, tags, refs and commit-ish values ([6160e8a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6160e8a)) - completion: complete the values that need nothing asked ([dd5223c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dd5223c)) - completion: declare what every argument and flag accepts ([767ae8e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/767ae8e)) - compat: make an older Bitbucket release answer as the newest does, or refuse what it cannot do ([5e8d7ca](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5e8d7ca)) - errors: report what a Bitbucket release cannot do as unsupported, exit 14 ([6ff86e0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6ff86e0)) **Fixes** - release: keep the release body under GitHub's limit, and stop before the tag when it is not ([89036c3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/89036c3)) - cli: refuse a malformed --repo before asking to confirm a delete ([a080963](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a080963)) - cli: let --yes apply only to a repository named on the command line ([2a9e249](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2a9e249)) - network: hand a body cut short back cut short under the error recorder ([75eb470](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/75eb470)) - cli: infer the repository with the host and flags the command was given ([b5356f5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b5356f5)) - clone: register bb clone as the alias of bb repo clone ([d897907](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d897907)) - clone: refuse the token prompt under --no-input ([71801a7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/71801a7)) - auth: answer git from no stored credential under BB_DISABLE_STORED_CONFIG ([cbd583e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cbd583e)) - config: refuse a plaintext credential to git and a clone under the keyring requirement ([599a39a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/599a39a)) - repo: suggest only what names the repository when --yes is refused ([e8e3c84](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e8e3c84)) - clone: use a token the keyring cannot hold for that clone, not fail it ([6c132b6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6c132b6)) - config: never let a workspace host profile release a credential ([ff88306](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ff88306)) - webhook: report a webhook a create finds already there ([b47cbfd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b47cbfd)) - cli: declare the status field the output carries ([7f1ed99](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7f1ed99)) - mcp: audit the question a tool that asks puts, answered or not ([3c6bd5a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3c6bd5a)) - mcp: redact credentials in audit arguments and resources as free text ([ff69a7d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ff69a7d)) - auth: pin the login git authenticates as in the setup-git helper line ([9aee5a6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9aee5a6)) - config: never send a credential stored for https over plain http ([db21902](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/db21902)) - git: keep the credential off git's command line in a fetch ([53bea88](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/53bea88)) - build: find a required check past --limit in the delete preview ([8d1ba3a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8d1ba3a)) - cli: keep the checkout out of a scope named with --project ([70559e8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/70559e8)) - auth: report a failed user lookup in bb auth token by its cause ([7467e71](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7467e71)) - pr: merge, decline and reopen again when the version just moved ([faed97f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/faed97f)) - mcp: fill in the default reviewers on the pull request form ([5071e8c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5071e8c)) - repo: show a clone host only the client certificate meant for it ([273a606](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/273a606)) - transport: say when an https:// URL meets a plain-HTTP server ([164a91e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/164a91e)) - repo: ask a clone host about forks with its own credential ([cf3d28e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/cf3d28e)) - auth: let token-url name its host before any login ([f52a0e2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f52a0e2)) - api: refuse a credential in a URL, and never repeat one in an error ([d38cab2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d38cab2)) - api: refuse a header that carries a credential ([79f5a36](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/79f5a36)) - api: refuse an endpoint URL's second host before a dry run ([ce2dbdf](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ce2dbdf)) - api: send an endpoint URL only its own host's credential ([34ff3f5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/34ff3f5)) - mcp: count a task once on the pull request card ([1286238](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1286238)) - pr: count a resolved comment thread as resolved ([33872fa](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/33872fa)) - pr: report a pull request's reviewers, not everyone who took part ([c0ff9d0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c0ff9d0)) - mcp: hold auto-merge to the version shown, and let a late refusal stand ([42d290c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/42d290c)) - repo: refuse a project key or slug that would leave its path segment ([e0f5a6a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e0f5a6a)) - git: a clone runs while it makes progress, and a stopped git says why ([b9d8ecb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b9d8ecb)) - describe: bb update's dry-run schema holds its report ([0bd9bc6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0bd9bc6)) - describe: wrap the prose around an outline at its width ([49945ad](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/49945ad)) - describe: a preview whose verdict is predicted predicts ([8788746](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8788746)) - describe: bb api's dry run carries data, and its description says so ([4831d79](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4831d79)) - update: a dry run names the binary it would replace ([59383c8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/59383c8)) - dry-run: predict the failure a real run meets where no-op was predicted ([f04d86f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f04d86f)) - output: meta.command names the canonical command for a shallow alias ([f0a9360](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f0a9360)) - dry-run: declare the tier each stateful command's preview reaches ([6e66584](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6e66584)) - dry-run: refuse a project name already in use ([481ec33](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/481ec33)) - dry-run: stop refusing a duplicate webhook, and name a missing task ([96355ed](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/96355ed)) - dry-run: follow who Bitbucket lets change a comment ([c6c5d2a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c6c5d2a)) - dry-run: check reviewer groups the way Bitbucket does ([44a37f1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/44a37f1)) - dry-run: predict what Bitbucket does with a reviewer condition ([155c70e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/155c70e)) - dry-run: give each pull request effect the reason a verdict prints ([0e45307](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0e45307)) - dry-run: write branch delete's verdict through the preview writer ([80d1932](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/80d1932)) - dry-run: predict the upsert a matching restriction create is ([225043f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/225043f)) - dry-run: name the kind a refused pull request change fails with ([1b13c4f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1b13c4f)) - output: hint about a gh field list only when the command took it as one ([a320afc](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a320afc)) - api: carry a body that is not text as base64 under --json ([61ba58b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/61ba58b)) - mcp: stop converting a file when the call is cancelled ([15d4bf9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/15d4bf9)) - browse: escape a file path once, so a name with a space opens its page ([4a72922](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4a72922)) - api: write a body that is not text byte for byte ([d4b07d4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d4b07d4)) - repo: stream bb repo cat and browse raw, and report a failed write ([fcd54ee](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fcd54ee)) - repo: stream bb repo archive without a deadline, and leave no partial file ([5a46ae3](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5a46ae3)) - update: download a release without a deadline on the transfer, capped and retried ([ad49cb9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ad49cb9)) - update: replace the file a symbolic link to bb names, and keep the link ([9d71e3c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9d71e3c)) - update: replace the running bb.exe before bb update exits ([3c052ad](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3c052ad)) - update: replace the binary on Linux and macOS with one rename ([650f96f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/650f96f)) - update: say that a mirror wanting a login is not supported ([f83f52e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f83f52e)) - update: keep bb update on its mirror, with the TLS and trust it was given ([3ee9b7e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3ee9b7e)) - errors: send again an idempotent request whose answer Bitbucket failed to write ([89545a7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/89545a7)) - webhook: show the secret --reveal-secret asks for as text ([78efb9d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/78efb9d)) - webhook: publish the webhook a read returns after a create or update ([de37163](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/de37163)) - update: fail a dry run whose mirror serves an older release ([d091183](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d091183)) - update: verify the release a mirror serves on every dry run ([4f43f25](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4f43f25)) - branch: mark the default branch in bb branch list ([0669e1b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0669e1b)) - keep a repository's commands off what its project defines ([3465be4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/3465be4)) - repo: list every default task, not the first 25 ([2510b8e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2510b8e)) - skill: take the skill's emptied directory out on remove ([72c979a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/72c979a)) - doctor: count a quoted path to bb as completion set up by hand ([6a1a740](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6a1a740)) - completion: stop waiting for a shell that does not answer ([816a6e9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/816a6e9)) - completion: change a startup file where it is rather than replace it ([7730a61](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7730a61)) - completion: read a Windows SHELL path the same on every OS ([0a8d46d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0a8d46d)) - doctor: find a project's skills from anywhere in its repository ([6f10061](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/6f10061)) - completion: take out a PowerShell profile that held only bb's block ([7d3cc67](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7d3cc67)) - completion: say when a branch category is switched off ([4ddb900](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4ddb900)) - completion: describe an instance logged in with a token ([e6333ca](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e6333ca)) - completion: keep fish from adding a space after a list element ([660abcb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/660abcb)) - completion: describe what each log level adds, not what the flag is for ([537680b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/537680b)) - completion: cut a description between characters, not bytes ([8839dbd](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8839dbd)) - completion: let an argument that takes a path ask the shell for one ([d759750](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d759750)) - docs-lint: fold the version wrapper into the function that takes one ([f9e20ad](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f9e20ad)) - completion: make a tab press behave in PowerShell ([16088f7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/16088f7)) - completion: stop refusing every positional completion ([9355e13](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9355e13)) - default-task: say which kind of ref each matcher of a default task matches ([fb318d2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fb318d2)) - deployment: report the commit a deployment deployed ([f86ccad](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f86ccad)) - commit: let bb commit get read a branch whose name has a slash in it ([03d2aee](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/03d2aee)) - repo: let auto-decline set --enabled=false switch the policy off ([746b157](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/746b157)) - comment: report a draft comment as pending and an inline comment as anchored ([46dfc7c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/46dfc7c)) - restriction: refuse a restriction id that is not a number instead of failing as transient ([5219d1f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5219d1f)) - diff: name changed files by their path in bb diff pr --name-only, not as dst://path ([f65e4ee](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f65e4ee)) - diff: print a unified diff from bb diff commit --path and bb diff refs --path ([41604bb](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/41604bb)) - diff: bb diff refs --stat counts the change the diff shows, not its reverse ([9733cd6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/9733cd6)) - project: report access to a project whose name is part of another project's name ([0d52c1c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0d52c1c)) - project: refuse a dry-run project create to an account that may not create projects ([53cca7b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/53cca7b)) - restriction: keep a restriction when its update is refused ([1e3f506](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1e3f506)) - restriction: make --user and --access-key-id work on branch restrictions ([ec4ed7a](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ec4ed7a)) **Refactors** - jsonoutput: remove EnvelopeSchemaFor, which only tests used ([bbbc0e6](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bbbc0e6)) - jsonoutput: derive the published meta member from EnvelopeMeta ([ab0dee1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ab0dee1)) - config: drop the system-file CA fallback nothing could reach ([5e3833f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/5e3833f)) - auth: write setup-git's helper through the git backend factory ([e1eea16](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e1eea16)) - jsonoutput: derive the published error member from EnvelopeError ([0c33164](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0c33164)) - reviewer: remove SelectMembers ([8c5fcb0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/8c5fcb0)) - completion: list projects, repositories and directories from one place ([53a09c2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/53a09c2)) - transport: add a downloader that waits on silence, not on the whole body ([7750442](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7750442)) - completion: read the checkout's remotes through the invocation ([f6874a0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/f6874a0)) - cli: name each positional argument after what it accepts ([d89f671](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d89f671)) **Docs** - security: update threat model for v5.0.0 release (#724) ([4545212](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/4545212)) - release: say the --yes change refuses, and what to do about it ([adc8ea7](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/adc8ea7)) - release: name the credential, clone and inference fixes in the v5 notes ([daaca75](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/daaca75)) - state the rule in the transport and openapi-spec package comments ([bb562b4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/bb562b4)) - adr: list every governance test in ADR-067 ([c2c276f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c2c276f)) - adr: merge four groups of records that state one rule ([1a0f452](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1a0f452)) - adr: say each thing once, and restore the rules the review found missing ([c9363b4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c9363b4)) - adr: refuse a record that names what replaced it, and say each thing once ([0df41a4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0df41a4)) - adr: restore what the rewrite dropped, and trim ([e9c7e5e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/e9c7e5e)) - adr: state the process and release records as the rules that hold now ([33e6c4c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/33e6c4c)) - adr: restore what the rewrite dropped, and trim ([2037639](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2037639)) - say linear history is enforced, and fix comments that name what is gone ([2e9ad9c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/2e9ad9c)) - adr: state the testing and quality records as the rules that hold now ([814da38](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/814da38)) - adr: restore three points the MCP rewrite dropped ([a82779f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a82779f)) - adr: restore what the rewrite dropped, and trim ([1ac7d21](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1ac7d21)) - harness: name no Bitbucket release in the Dockerfile's comments ([fbf1dae](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/fbf1dae)) - adr: state the release, transport and distribution records as the rules that hold now ([7add7df](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/7add7df)) - adr: restore what the rewrite dropped, and trim ([418504f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/418504f)) - drop stale CRLF advice and name the comment decoder that exists ([c03566b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/c03566b)) - adr: state the interactivity and command-tree records as the rules that hold now ([46dac44](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/46dac44)) - adr: restore what the rewrite dropped, and trim ([04b4b93](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/04b4b93)) - adr: say a workspace host profile releases no credential ([96d6d54](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/96d6d54)) - stop describing a --token flag in comments ([ade9599](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ade9599)) - adr: state the auth and configuration records as the rules that hold now ([a9cf34e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/a9cf34e)) - adr: restore what the rewrite dropped, and trim ([dcbab35](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dcbab35)) - drop the --token flag and the history from two comments ([933b813](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/933b813)) - adr: state the output, error and dry-run records as the rules that hold now ([dbc0a68](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/dbc0a68)) - name no release in the README and skill output examples ([96b9fd2](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/96b9fd2)) - adr: state the MCP records as the rules that hold now ([53db452](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/53db452)) - release: place what next fixed since the restructure ([d95f53b](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/d95f53b)) - adr: stop describing bb bulk, which v5 removed ([0928d5c](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0928d5c)) - adr: keep the decision records as Markdown pages ([99ee98e](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/99ee98e)) - release: announce that a stored credential goes only to its own host ([faeabb0](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/faeabb0)) - reference: name each MCP tool for people, and keep the model's text as it is ([ca2364f](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/ca2364f)) - split the hardening guide into the four things it covers ([243bf6d](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/243bf6d)) - state the security pages' claims as facts, not guarantees ([38d86f9](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/38d86f9)) - say what a token lets bb do, and what a refused one looks like ([32bb0e8](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/32bb0e8)) - help: say where bb api --raw-field puts its parameter ([0fbb919](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/0fbb919)) - help: shorten bb doctor's help, and stop bb api's repeating its flags ([df544d5](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/df544d5)) - agents: give coverage artifacts and the gates a section each ([b1f9bd4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/b1f9bd4)) - quickstart: say how to keep bb up to date ([22685f4](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/22685f4)) - one example host and project across the pages ([1b38b42](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/1b38b42)) - contributing: make the rules CONTRIBUTING and AGENTS.md both state agree ([693b942](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/693b942)) - explain each topic on the page that owns it, and link from the rest ([aafda60](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/aafda60)) - reference: one page for where every setting comes from ([58032f1](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/58032f1)) - threat-model: say when the analysis was made, and what changed since ([193eefe](https://github.com/vriesdemichael/bitbucket-data-center-cli/commit/193eefe)) - help: say whatv4.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_keyringin 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
- Every destructive delete confirms (ADR-073).
- The rule: destructive commands confirm when a person is present and require
--yeswhen not, and--yesis inert on a repository inferred from the git remote. - v4.0.0 enforced it for
bb repo delete,bb repo admin deleteandbb auth gpg-key clear. Every command whose last word is delete, remove, revoke or clear now follows it: 37 of them, includingbb branch delete,bb tag delete,bb webhook delete,bb build delete,bb insights report delete,bb pr review reviewer remove,bb repo permissions revokeandbb auth token revoke. - In a pipeline, pass
--yesand name the target explicitly:--repo PROJECT/slug, orBITBUCKET_PROJECT_KEYandBITBUCKET_REPO_SLUG. A repository bb took from the git remote does not count, and--jsonneeds--yeseven at a terminal. - 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 exited0, which put prose on stdout under--json. It now exits2(validation), and the help goes to stderr. - Error kinds match the taxonomy (ADR-011, #574).
- A rejected TLS certificate or a DNS failure is
permanent(exit1). It is nottransient(exit10), which invites a retry that cannot succeed. - A
401that refuses a known user isauthorization, notauthentication. - A capped listing says it was capped (ADR-074, #573).
--limithas capped the total since v4.0.0. Every listing that takes it now also reportsmeta.limitReached, and MCP results (limit_reached) and text output say so too.bb insights annotation listalso applies the default limit of 25 it had been ignoring; pass--allfor 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.detailscarriesupstreamStatusand, when Bitbucket names one,upstreamException.--full-error-bodyprints the whole body when you need it.--dry-runchanges nothing on the local machine either (#571). Twelve commands used to apply their change under--dry-runand now preview it:bb auth login,logout,alias add,alias discover,alias remove,server use,setup-git,bb ai skill installandskill remove,bb clone,bb repo cloneandbb pr checkout.bb ai mcp serve --dry-runis 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 withpermanent(exit1), instead of reporting that you are not logged in withvalidation(exit2). bb auth loginandbb auth logoutno longer rewrite a file they could not read, which removed every other host.BB_DISABLE_STORED_CONFIG=1no longer reads the stored file at all.
Deprecation
bb bulkis deprecated and is removed in v5.0.0 (ADR-084).- It warns once per invocation on stderr, so
--jsonoutput 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,
bbnow 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).--limitnow strictly caps the total number of items returned across all commands (permissions, comments, diffs, commits, branches), and--allis 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 (
server-validated,preconditions-checked,predicted, orunsupported), 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:
- Audit JSON Parsers (
jq, Python) forcamelCase& Envelope Changes: - All machine output fields now match Bitbucket REST API camelCase (e.g.
pullRequestId,projectKey,repoSlug). meta.contractand contract version numbers have been removed; the CLI binary version is now reported undermeta.version.- On failure,
--jsonemits only a single error envelope to ensure clean stream decoding (ADR-075). - Migrate Command-Line Credential Flags:
--tokenand--passwordCLI flags are retired to prevent secret exposure in process tables and shell histories.- Supply credentials via environment variables (
BB_TOKEN,BITBUCKET_TOKEN), the system keyring (bb auth login), or standard input (--token-stdin,--password-stdin). - Account for Non-Interactive Guardrails in CI/CD:
- Destructive commands (
bb repo delete,bb auth gpg-key clear) now fail immediately if run in a non-interactive pipeline without--yes. bb repo deleterequires an explicit repository argument (PROJECT/slugor--repo) and will not delete a git-inferred working repository.- Implicit stdin reads now require an explicit
-(e.g.bb repo edit file.txt --content -). Pass--no-inputto guarantee scripts never hang on prompts. - Update Exit Code Handling:
- Invalid arguments and missing required flags now return exit code
2(validation), rather than exit code1(internal). - Transient network failures in
--dry-runreturn exit code10(transient), matching real executions. - Update Go Module Import Paths (Go Developers):
- 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