Skip to content
Merged
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
45 changes: 42 additions & 3 deletions .agents/skills/release-recovery/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,8 @@ Only `npm-ahead` requires recovery.

1. Regenerate bumps + changelogs from the pending change files
2. Verify the result matches npm exactly
3. Open a recovery PR
3. Add `type: none` change files so the PR passes `beachball check`
4. Open a recovery PR

Release tags are not recreated - see the skill's Scope section.
```
Expand Down Expand Up @@ -202,25 +203,59 @@ Every previously `npm-ahead` package must now be `in-sync`. If any version overs
change files landed after the failed release, so a plain replay is not correct — stop, report the
mismatch, and let the user decide. Never hand-edit versions to force a match.

Commit and open a PR:
**Satisfy `beachball check`.** A real release pushes straight to `master` and never faces PR
validation, but a recovery PR does. The `change-files` job in
[.github/workflows/check-packages.yml](../../../.github/workflows/check-packages.yml) runs
`beachball check`, sees the bumped `package.json` files as changed packages, and fails with
`ERROR: Change files are needed!` — because the replay just consumed every change file that covered
them.

Generate `type: none` change files to cover exactly those packages:

```bash
yarn beachball change --type none --no-commit \
--message "release recovery: versions already published to npm by the failed pipeline"
yarn beachball check
```

`--type none` is the correct type: the next release consumes these files without bumping a version
or writing a `CHANGELOG.md` entry. They leave only a `"none"` entry in `CHANGELOG.json`, which is a
useful audit trail of the recovery. Verified empirically on `3.0.0-alpha.7`: a follow-up `bump` with
38 such files produced 0 `package.json` and 0 `CHANGELOG.md` changes.

Do not skip this because a past recovery PR passed without it. [PR #36364](https://github.com/microsoft/fluentui/pull/36364)
did, but only by coincidence — unrelated change files had accumulated for the same packages in the
meantime, and beachball reported `Your local repository already has change files for these packages`.
That is not a property you can rely on.

Commit and open a PR. Stage explicitly rather than with `git add -A`, so unrelated untracked files in
the user's tree are not swept into a release commit:

```bash
git add -A
git add -u # bumps, changelogs, lockfile, consumed change files
git add change/ # the new type:none change files
git commit -m "release: applying package updates (manual recovery)"
git push "$PUSH_REMOTE" HEAD
gh pr create --repo microsoft/fluentui --base master \
--title "release: applying package updates (manual recovery)" \
--body-file "$PR_BODY_FILE"
```

Let the `precommit` git hook run — do not pass `--no-verify`. The manual fixups above replace
beachball's `precommit` hook, not the repository's.

The PR body must state which pipeline failed and that the packages are already on npm.

### Step 6 — Restore and report

```bash
git switch "$START_REF"
yarn install
```

The reinstall matters: the recovery branch rewrote `yarn.lock`, so the restored branch is left with
out-of-date `node_modules` otherwise.

Report:

- Packages recovered, with repo and npm versions.
Expand All @@ -237,6 +272,10 @@ Report:
- Never hand-edit versions to force agreement with npm. Regenerate with beachball so changelogs and
dependency ranges stay consistent, and stop if the result disagrees.
- Never commit directly to `master`; always go through a PR.
- Never bypass PR validation to land a recovery. Make `beachball check` pass with `type: none` change
files rather than merging with an admin override or weakening the `change-files` job.
- Never `git add -A`. The user's tree may hold unrelated untracked work, and a release commit must not
carry it.
- Never create or push release tags as part of recovery. They would point at a commit the release was
not built from, and a single release spans dozens of packages.
- Never assume `origin` points at `microsoft/fluentui` — resolve the remote explicitly.
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/priority-overflow",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-accordion",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "fix: restore named beta prerelease line (9.0.x-0 was published by mistake)",
"packageName": "@fluentui/react-alert",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-alert",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-avatar",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-calendar-compat",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-charts",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "chore: update pinned versions of deprecated packages moved back onto their beta line",
"packageName": "@fluentui/react-components",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"type": "none",
"comment": "chore: verify bundle isolation of base hooks",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-components",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-datepicker-compat",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-dialog",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-drawer",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-headless-components-preview",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "minor",
"comment": "fix: narrow positioning prop to the headless PositioningShorthand",
"packageName": "@fluentui/react-headless-components-preview",
"email": "vgenaev@gmail.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "patch",
"comment": "fix: use global focusgroup typing for MenuListState instead of a local intersection",
"packageName": "@fluentui/react-headless-components-preview",
"email": "dmytrokirpa@microsoft.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "patch",
"comment": "fix: remove focusgroup arrow key navigation from Nav and NavDrawerBody in favor of tab navigation",
"packageName": "@fluentui/react-headless-components-preview",
"email": "dmytrokirpa@microsoft.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-icons-compat",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "fix: restore named beta prerelease line (9.0.x-0 was published by mistake)",
"packageName": "@fluentui/react-infobutton",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-infobutton",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-infolabel",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-list",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-menu",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-menu-grid-preview",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-message-bar",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-migration-v0-v9",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-migration-v8-v9",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "release recovery: versions already published to npm by the failed pipeline",
"packageName": "@fluentui/react-motion",
"email": "martinhochel@microsoft.com",
"dependentChangeType": "none"
}
Loading
Loading