diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 712f000..b76b3d5 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -160,3 +160,16 @@ jobs:
# rewriting the channel. Pushes made with GITHUB_TOKEN do not retrigger workflows.
git push origin "$SHA:refs/heads/release"
echo "::notice::release channel -> $SHA"
+
+ - name: Advance the directory channel (stable) to the released commit
+ if: steps.v.outputs.release == 'true'
+ env:
+ SHA: ${{ steps.v.outputs.sha }}
+ run: |
+ # The claude.ai plugin directory tracks `stable` (#768), not main: it scans every commit on
+ # the branch it tracks and each new one replaces the version in review, so main's daily
+ # commits must not reach it. `stable` moves here and only here, to each released commit -
+ # same rules as `release` above: created on the first release, fast-forwarded after, a
+ # non-fast-forward rejected loudly instead of rewriting what a reviewer already read.
+ git push origin "$SHA:refs/heads/stable"
+ echo "::notice::stable (plugin directory) -> $SHA"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aa30dbe..8ff8d2d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,37 @@
# Changelog
+## [0.45.0] - 2026-10-06
+Ready for the Anthropic plugin directory: safe by default, portable, pinned, and measured with
+Anthropic's own validators. Plus a sandboxed low-cost fleet adapter (pilot) and a declarative
+adapter registry.
+### Added
+- **Declarative CLI adapter registry (#772).** `presets/adapters.json` with preset → user → repo
+ overrides; a cloned repo's file may only set `routing` and `reviewer`, never a command.
+- **Normalized probe codes (#770).** Every CLI probe ends in `OK | AUTH | RATE_LIMIT | QUOTA |
+ CONTEXT_WINDOW | ERROR`; unknown output is `ERROR`, never a false OK.
+- **Fail-closed run-ledger checkpoint and `Board-Handoff -Recover` (#771, #730).** A checkpoint is
+ written before each side-effecting step and the step does not run if it cannot be; `-Recover`
+ rebuilds a session that ended without `-Save` from its local transcript.
+- **dsh as a sandboxed fleet adapter, pilot (#773).** Only in a pinned Docker container, only for
+ Docs/Chore issues of public repos, session-log upload off.
+- **Per-user account map and `/board setup` (#762).** No author defaults ship in the plugin.
+- **Secret scrub for launched sessions (#769).**
+- `PRIVACY.md`, listing links, icon and command argument hints for the directory listing (#768).
+### Changed
+- **Permission bypass is an explicit opt-in (#761).**
+- **Always-on context ~2,810 → ~760 tokens (#763).**
+- **Cross-platform PowerShell 7 core (#767):** Windows, macOS and Linux; CI runs on Windows and
+ Ubuntu.
+- **Every runtime install pinned, no `Invoke-Expression` (#765).**
+- `Board-Work.ps1` split below 256 KiB (#759); README inside the plugin folder (#760).
+- The test suite moved out of the shipped plugin folder to `tests/agentic-board/` (#768).
+### Fixed
+- The brake fails closed when an armed run has no `pwsh` (#764).
+- The brake precheck no longer names a parent path (`COMMAND_PATH_ABOVE_PLUGIN`, #768).
+- `abios-feedback` loads before asking for details; `/expert` opens its engine first (#764).
+- Skill-reviewer and plugin-validator findings (#764).
+
## [0.44.0] - 2026-09-29
`/scan` goes from untracked work to a ready board in one command, `/skills` can create and improve a
skill end to end, and the whole tool now speaks English: the agent translates for the user.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bfebd93..0439061 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -182,12 +182,13 @@ exit-code clean (0 ok / 1 drift) so a CI gate can call it.
### What happens after the version-bump lands on `main`
-Two channels, so users never install whatever `main` HEAD happens to be:
+Three channels, so users never install whatever `main` HEAD happens to be:
- **`main`** is the development channel — every merged PR lands here.
- **`release`** is the branch installs actually fetch. `marketplace.json`'s plugin `source` is a
`git-subdir` pinned at `ref: release` (#323), so a fresh install or `plugin update` gets the
`release` commit, not `main` HEAD.
+- **`stable`** is the branch the claude.ai plugin directory tracks; it moves with `release`.
When a `chore(release): X.Y.Z` commit changes `plugin.json`'s version on `main`, the **Release**
workflow (`.github/workflows/release.yml`, #322) fires automatically and:
@@ -195,11 +196,27 @@ workflow (`.github/workflows/release.yml`, #322) fires automatically and:
1. creates the git tag `vX.Y.Z` + a GitHub Release, notes taken from that version's `CHANGELOG.md`
block (`scripts/Get-ReleaseNotes.ps1`), on the exact commit that set the version, and
2. fast-forwards the `release` branch to that commit — the one push that moves pinned installs.
+3. fast-forwards the `stable` branch to the same commit — the one the plugin directory tracks.
So tagging and the release channel are **no longer manual**: land the version bump on `main` and CI
does the rest. `plugin.json`'s `version` is still what drives `plugin update` detection for users, so
it must change on every release (the bump commit is exactly that).
+### Releases and the plugin directory
+
+The claude.ai plugin directory tracks the **`stable`** branch, not `main`. It scans every commit
+that lands on the branch it tracks and puts each one in review, replacing the one before, so a
+push to a tracked `main` would restart the review every day. `stable` moves only when a release is
+published (the step above), so `main` can take commits every day.
+
+- **Batch the work.** A release is a review cycle measured in days, not a deploy.
+- **Test before merging the release commit**, in Claude Code against the local plugin
+ (`claude --plugin-dir plugins/agentic-board`): what is on claude.ai is only ever what the
+ reviewer approved.
+- **Do not release while a version is in review**, unless it carries a security fix: the new
+ version replaces the one the reviewer is reading.
+- Never push to `stable` by hand outside a release, and never force it.
+
## Good first issues
New here? Look for the [`good first issue`](https://github.com/CSalcedoDataBI/agentic-board/labels/good%20first%20issue)
diff --git a/README.md b/README.md
index 15fb082..03a9011 100644
--- a/README.md
+++ b/README.md
@@ -357,4 +357,4 @@ MIT — see [LICENSE](./LICENSE).
---
-agentic-board v0.44.0 · docs generated by `plugins/agentic-board/scripts/Update-Docs.ps1`
+agentic-board v0.45.0 · docs generated by `plugins/agentic-board/scripts/Update-Docs.ps1`
diff --git a/plugins/agentic-board/.claude-plugin/plugin.json b/plugins/agentic-board/.claude-plugin/plugin.json
index 23af1c0..1dfe013 100644
--- a/plugins/agentic-board/.claude-plugin/plugin.json
+++ b/plugins/agentic-board/.claude-plugin/plugin.json
@@ -1,7 +1,7 @@
{
"name": "agentic-board",
"displayName": "Agentic Board",
- "version": "0.44.0",
+ "version": "0.45.0",
"description": "Run coding agents off your real GitHub Projects board: a quota-aware, review-gated coordinator, not another local Kanban.",
"author": {
"name": "CSalcedoDataBI",