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",