* fix(#3121): implement commands verb in SDK native registry - Add commandsList handler — returns sorted JSON array of all registered verb strings; satisfies workstream-flag.md + agent tooling discoverability - Register ['commands', commandsList] in DECISION_ROUTING_STATIC_CATALOG - Add golden-policy exemption (SDK-only, no CJS mirror needed) - check.decision-coverage-plan/verify were already registered; commands was the remaining gap Closes #3121 * fix(#3135): restore workflows/add-backlog.md — capture --backlog had no workflow to load Root cause: PR #2824 consolidated add-backlog into gsd-capture --backlog and wired capture.md to delegate to workflows/add-backlog.md via execution_context. The workflow file was never created (same gap class as reapply-patches.md which was caught and fixed in the same PR). With no file to load, the agent had no implementation steps to follow when --backlog was invoked. Fix: - Restore get-shit-done/workflows/add-backlog.md with full process from deleted commands/gsd/add-backlog.md (phase.next-decimal, ROADMAP write, mkdir, commit) - Preserve #2280 ordering invariant: ROADMAP entry written before directory - Fix docs/INVENTORY.md: remove incorrect attribution of --backlog to add-todo.md, add add-backlog.md row, bump workflow count 84→85 - Update docs/INVENTORY-MANIFEST.json - Add regression test: every execution_context @-reference in commands/gsd/*.md must resolve to an existing workflow file on disk Closes #3135
Changeset Fragments
This directory holds per-PR CHANGELOG fragments. Every PR with user-facing changes drops one (or more) <random-name>.md files here describing its CHANGELOG entry. Fragments are consolidated into the top-level CHANGELOG.md at release time.
Why
Two PRs that both edit the ### Fixed block of CHANGELOG.md always conflict on merge — git can't pick a serialization order without human input. Two PRs that each add a fresh .changeset/<unique-name>.md never conflict because they don't share lines.
See #2975 for the full rationale.
Adding a fragment
node scripts/changeset/new.cjs \
--type Fixed \
--pr 1234 \
--body "fix the thing — explain the user-visible change in one sentence"
This writes .changeset/<adjective>-<noun>-<noun>.md with frontmatter and a body. Three random words → concurrent PRs don't collide.
Format
---
type: Fixed
pr: 1234
---
**`/gsd-foo` no longer drops trailing slashes** — explain the user-visible change.
Allowed type: values follow Keep a Changelog: Added, Changed, Deprecated, Removed, Fixed, Security.
Opting out
PRs that legitimately have no user-facing impact can add the no-changelog label. CI honors it. When unsure, add the fragment.
At release time
node scripts/changeset/cli.cjs render --version vX.Y.Z --date YYYY-MM-DD
Reads every fragment, groups bullets by type:, replaces ## [Unreleased] with a new ## [vX.Y.Z] - YYYY-MM-DD block, opens a fresh ## [Unreleased] above, deletes consumed fragments. Idempotent.