Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@
{
"name": "bitwarden-delivery-tools",
"source": "./plugins/bitwarden-delivery-tools",
"version": "3.1.0",
"description": "Delivery lifecycle skills for Bitwarden initiatives — initiative funnel navigation, work transitions, architectural judgment, commits, pull requests, preflight checks, change labeling, and Jira ticket filing."
"version": "3.2.0",
"description": "Delivery lifecycle skills for Bitwarden initiatives — initiative funnel navigation, work transitions, architectural judgment, commits, pull requests, stacked pull requests, preflight checks, change labeling, and Jira ticket filing."
},
{
"name": "bitwarden-designer",
Expand Down
1 change: 1 addition & 0 deletions .cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
"mcp",
"MECE",
"metacharacters",
"mktemp",
"modelcontextprotocol",
"msword",
"MVVM",
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ A curated collection of plugins for AI-assisted development at Bitwarden. Enable
| [bitwarden-shepherd](plugins/bitwarden-shepherd/) | 1.0.1 | Champion of a technical strategy — shepherds a TSI through evaluation into the funnel, then through to adoption |
| [bitwarden-atlassian-tools](plugins/bitwarden-atlassian-tools/) | 2.7.0 | Atlassian access via MCP server with deep Jira issue research skill and opt-in Jira write tools |
| [bitwarden-code-review](plugins/bitwarden-code-review/) | 2.1.0 | Autonomous code review agent following Bitwarden engineering standards with GitHub integration |
| [bitwarden-delivery-tools](plugins/bitwarden-delivery-tools/) | 3.1.0 | Delivery lifecycle skills: initiative funnel navigation, work transitions, architectural judgment, commits, PRs, preflight, labeling, Jira ticket filing |
| [bitwarden-delivery-tools](plugins/bitwarden-delivery-tools/) | 3.2.0 | Delivery lifecycle skills: initiative funnel, work transitions, architectural judgment, commits, PRs and stacks, preflight, labeling, Jira filing |
| [bitwarden-designer](plugins/bitwarden-designer/) | 0.1.0 | Product designer persona: Code of Conduct and 30/60/90 critique, critique facilitation; dispatches into bitwarden-design-tools |
| [bitwarden-design-tools](plugins/bitwarden-design-tools/) | 0.1.0 | Design toolkit: content style guide, Figma Dev Mode MCP, Bitwarden brand application, handoff prep, Design System governance, Product and Design Jira |
| [bitwarden-devops-engineer](plugins/bitwarden-devops-engineer/) | 0.3.0 | DevOps engineering assistant: workflow compliance linting, action security auditing, and org-wide CI/CD remediation |
Expand Down
5 changes: 3 additions & 2 deletions plugins/bitwarden-delivery-tools/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "bitwarden-delivery-tools",
"version": "3.1.0",
"description": "Delivery lifecycle skills for Bitwarden initiatives — initiative funnel navigation, work transitions, architectural judgment, commits, pull requests, preflight checks, change labeling, and Jira ticket filing.",
"version": "3.2.0",
"description": "Delivery lifecycle skills for Bitwarden initiatives — initiative funnel navigation, work transitions, architectural judgment, commits, pull requests, stacked pull requests, preflight checks, change labeling, and Jira ticket filing.",
"author": {
"name": "Bitwarden",
"url": "https://github.com/bitwarden"
Expand All @@ -15,6 +15,7 @@
"work-transition",
"commit",
"pull-request",
"stacked-pull-requests",
"preflight",
"labeling",
"jira"
Expand Down
26 changes: 26 additions & 0 deletions plugins/bitwarden-delivery-tools/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,32 @@ All notable changes to the `bitwarden-delivery-tools` plugin will be documented
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [3.2.0] - 2026-08-26

### Added

- **`stacking-pull-requests` skill** — Bitwarden's per-PR conventions across a chain of dependent pull requests: layer planning, per-layer gates, a stack-level submission preview, lower-layer feedback, and merging. `gh stack` mechanics are delegated to GitHub's `gh-stack` skill and extension, with an availability check and a single-branch fallback
- `references/submitting-a-stack.md` — the two paths that carry a title, body, and `t:` label onto every layer; `gh stack link` is passed `--base` so the bottom layer's base is not silently rewritten to the repository default branch
- `references/installing-gh-stack.md` and `creating-pull-request/references/caller-integration.md`, holding install and caller-routing detail out of the always-loaded files
- `skills/stacking-pull-requests/evals/` — 20-case trigger eval, runner, and README. The runner denies the mutating tools, loads no MCP servers, and runs each subprocess in a temp directory, since the query set is imperative. No baseline is committed
- `perform-preflight`: Stacked Branches section covering the current layer, with its own stack-detection test; a skipped section is reported rather than passing silently
- `stacking-pull-requests` Step 1 registers the planned layers with `gh stack init`, so submission does not fail after every layer has been gated and previewed
- `stacking-pull-requests` Step 5 confirms before rebasing layers above a fix, and Step 6 confirms before both the draft flip and the merge
- `perform-preflight`: a failed rebase checkbox is reported rather than auto-fixed, since the fix force-pushes every layer above

### Changed

- `creating-pull-request`: routes to `stacking-pull-requests` on the user's intent to open a chain, and never when that skill is the caller; per-layer callbacks run its Steps 2–3, with the label question asked once for the stack
- `creating-pull-request`: Step 1b names the base ref instead of hardcoding `origin/HEAD`. Only the `Substantial` path can be scoped to one layer
- `creating-pull-request`: the nested-caller exemption applies only when the caller actually ran a review
- `creating-pull-request`: Step 6 passes `--base <branch>` for a branch cut from `rc`, `hotfix-rc`, or another release branch, which `gh pr create` would otherwise point at the repository default branch
- `force-multiplier`: announces itself when invoking `creating-pull-request`, so that skill's review gate does not fire mid-campaign
- `committing-changes`: the full commit format applies per layer, and preflight is scoped to the layer being committed to
- Stack detection reads `gh stack view --json`'s exit code and requires a payload naming the current branch; `stacking-pull-requests` Step 0 owns what each status means
- `creating-pull-request`: stack exclusion added to `description`; its eval baseline needs regenerating before release
- `committing-changes` gains a single-layer eval case for its new scope clause. The stack boundary cannot be measured from these skills' own eval sets — correct routing goes to `stacking-pull-requests`, which then invokes them per layer, and the runner matches its token anywhere in the response — so it is measured from `stacking-pull-requests/evals/` only. Both baselines, and that one, still need recording before release
- `plugin.json`: description and `stacked-pull-requests` keyword added; marketplace and README catalog entries follow
Comment thread
withinfocus marked this conversation as resolved.

## [3.1.0] - 2026-08-19

### Added
Expand Down
23 changes: 21 additions & 2 deletions plugins/bitwarden-delivery-tools/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Bitwarden Delivery Tools

Delivery lifecycle skills for Bitwarden initiatives — from routing work through the Software Initiative Funnel and running cross-team work transitions, down to the day-to-day mechanics of committing, opening pull requests, running preflight checks, and labeling changes.
Delivery lifecycle skills for Bitwarden initiatives — from routing work through the Software Initiative Funnel and running cross-team work transitions, down to the day-to-day mechanics of committing, opening pull requests and stacks of them, running preflight checks, and labeling changes.

## Overview

Expand Down Expand Up @@ -40,7 +40,8 @@ Any agent (tech-lead, software-engineer, shepherds, others) can compose these sk
| `filing-breakdown-tasks` | "tickets from tasks.md", "file the epic and stories" | Turn a breakdown's `tasks.md` into epic + child ticket drafts for `filing-jira-tickets` to file |
| `force-multiplier` | "across all repos", "in bulk" | Fan one change across many repos or monorepo projects as isolated, piloted draft PRs |
| `labeling-changes` | "label", "change type" | Conventional commit type keywords, CI label mapping |
| `perform-preflight` | "preflight", "self review" | Pre-commit quality gate checklist |
| `perform-preflight` | "preflight", "self review" | Pre-commit quality gate checklist, including the per-layer checks for a stacked branch |
| `stacking-pull-requests` | "stack these PRs", "stacked diffs" | Bitwarden conventions across a chain of dependent PRs; mechanics delegated to `gh-stack` |

## Design Principle

Expand All @@ -56,6 +57,20 @@ Several skills in this plugin reference tools or skills provided by sibling plug
- **`bitwarden-security-engineer`** — provides `Skill(bitwarden-security-context)`, referenced from `architecting-solutions`.
- **`bitwarden-code-review`** — provides `/bitwarden-code-review:code-review-local` and `Skill(performing-multi-agent-code-review)`, the code-review gate `creating-pull-request` runs before opening a PR. If it is absent, `creating-pull-request` prompts you to install it rather than skip the review.

`stacking-pull-requests` also invokes `Skill(addressing-code-review-comments)` from `bitwarden-code-review` when handling feedback on a lower layer, and treats it as optional.

It additionally depends on two pieces of tooling outside this marketplace, both from GitHub's [`gh-stack`](https://github.com/github/gh-stack) repository, which owns the `gh stack` command surface. Install both — with only the extension, every stack request takes the single-branch fallback.

1. The CLI extension:

```bash
gh extension install github/gh-stack --pin v0.1.0
```

2. The `gh-stack` skill, from that repository's `skills/gh-stack/` directory. `gh extension install` fetches a platform binary only and never places the skill, so install it as a Claude skill separately.

`stacking-pull-requests` checks for both up front and falls back to a single-branch PR rather than improvising the commands. The documented flag sets were verified against `gh-stack` v0.1.0, the first release containing `gh stack merge`. It is pre-1.0 and still moving.

## Installation

```bash
Expand All @@ -82,6 +97,10 @@ Commit these changes
Create a PR for this branch
```

```
Split this into a stack of dependent PRs
```

```
Run preflight before I commit
```
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: committing-changes
description: Git commit conventions and workflow for Bitwarden repositories. Use when committing code, writing commit messages, or preparing changes for commit. Triggered by "commit", "git commit", "commit message", "prepare commit", "stage changes".
description: Git commit conventions and workflow for Bitwarden repositories. Use when committing code, writing commit messages, or preparing changes for commit. Triggered by "commit", "git commit", "commit message", "prepare commit", "stage changes", including commits on a layer you are still building. Not for planning, gating, submitting, merging a stack, or fixing a layer that already has an open pull request (all stacking-pull-requests).
---

# Git Commit Conventions
Expand Down Expand Up @@ -49,8 +49,10 @@ Only the first commit on a branch needs the full format (ticket prefix, type key
Update error handling in login flow
```

In a stack every layer becomes its own pull request, so "first commit on a branch" means per layer: each layer's first commit carries the full format, and the type keyword is chosen for that layer rather than inherited from the layer below.

---

## Pre-Commit Quality Gate

Before staging, run the `perform-preflight` skill for the full quality gate checklist (tests, lint, security, architecture). Consult the repo's CLAUDE.md for platform-specific build and lint commands.
Before staging, run the `perform-preflight` skill for the full quality gate checklist (tests, lint, security, architecture). Consult the repo's CLAUDE.md for platform-specific build and lint commands. On a stack, that checklist covers the layer you are committing to; `Skill(stacking-pull-requests)` runs it across every layer. Once a layer has an open pull request, a fix on it belongs to that skill's Step 5, which rebases and force-pushes the layers above behind a confirmation — do not commit it here and stop.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Two eval sets. Run the one that matches what changed.

## Trigger eval

Does the skill activate on the right phrasings and stay silent on near-misses? `trigger-eval.json` holds 13 queries; `run_real_eval.py` runs them (see `../../creating-pull-request/evals/run_real_eval.py` for why this runner exists instead of the skill-creator harness); `baseline.json` is the last known-good run. Requires Python 3.10+ and an authenticated `claude` CLI.
Does the skill activate on the right phrasings and stay silent on near-misses? `trigger-eval.json` holds 14 queries; the `stacking-pull-requests` boundary is not measurable from here, since a correctly-routed stack phrasing invokes this skill per layer and the runner matches its token anywhere in the response; `run_real_eval.py` runs them (see `../../creating-pull-request/evals/run_real_eval.py` for why this runner exists instead of the skill-creator harness); `baseline.json` is the last known-good run — **stale as of the stack-scope description change**: it holds 13 results against the current 14 queries. Regenerate before relying on the diff below — and note this runner takes no `--plugin-dir`, so it loads the installed plugin cache. Record the baseline after this version ships, not before, or it captures the description the change replaced. Requires Python 3.10+ and an authenticated `claude` CLI.

```bash
python3 run_real_eval.py --eval-set trigger-eval.json --runs-per-query 3 \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,9 @@
{
"query": "create a new branch for the PM-33210 work before I start coding, nothing to commit yet",
"should_trigger": false
},
{
"query": "commit what I have on this layer before I start the next one",
"should_trigger": true
}
]
Loading
Loading