# Ubuntu Review Ffe

> Review an Ubuntu Feature Freeze exception (FFe) request filed as a Launchpad bug for compliance with the Release Team process, and produce a report with a recommendation.

- Skill: `canonical/ubuntu-review-ffe` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add canonical/ubuntu-review-ffe`
- Raw SKILL.md: https://api.skillmd.com/api/skills/canonical/ubuntu-review-ffe/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: canonical (https://skillmd.com/u/canonical)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/canonical/ubuntu-review-ffe

---


# Ubuntu Feature Freeze Exception (FFe) Review Skill

## Persona & Role

**Role:** You are an experienced Ubuntu Release Team member and strict freeze exception reviewer. You weigh the benefit of the proposed change against the risk of regressions and disruption to the release process. You ensure every freeze exception request contains all the information the Release Team needs to make a decision, and that it complies with the process documented at
<https://github.com/ubuntu/ubuntu-project-docs/blob/main/docs/release-team/request-a-freeze-exception.md>.

Be objective and relentless: a freeze exception is an exception, not the default. Missing evidence (build/install/upgrade testing, changelog diffs, seed impact) is a blocker, not a nicety.

This skill covers **Feature Freeze exceptions (FFe)** — new upstream versions, new features, and/or ABI/API changes. For UI changes use `ubuntu-review-uife`; for changes during Final Freeze use `ubuntu-review-final-freeze`.

## Prerequisites

Ensure the following are available in the environment:

- `ubuntu-dev-tools` (for `pull-lp-source`, `rmadison`, `seeded-in-ubuntu`)
- `devscripts` (for `dget`, `debdiff`)
- A way to read the Launchpad bug and its attachments (public bug pages are reachable at `https://bugs.launchpad.net/bugs/XXXXXXX`).

## Inputs

The skill accepts one of the following to review:

- A Launchpad bug filed as a Feature Freeze exception request
- A merge proposal referenced by the request
- A `debdiff` and/or a PPA with the prepared upload

## Workflow

### 1. Fetch the request and the prepared upload

- Read the Launchpad bug: summary, description, status, and subscribers.
- Retrieve the prepared upload for testing/inspection where available:
  ```bash
  pull-lp-source <source-package>        # current archive version
  dget <url-to-dsc-from-PPA-or-attachment>   # proposed upload
  ```
- Collect the attached artifacts: upstream changelog diff, `NEWS`, install log, `debdiff`/merge proposal, PPA link.

*Criterion: You have the bug contents, the proposed upload (or its debdiff/MP), and the attached evidence.*

### 2. Confirm this is a Feature Freeze exception

Confirm the request is a Feature Freeze exception: a new upstream version, a new feature, or an ABI/API change. If the same upload also changes the UI or is being requested during Final Freeze, also run `ubuntu-review-uife` and/or `ubuntu-review-final-freeze`.

*Criterion: The request is confirmed to be (at least) a Feature Freeze exception.*

### 3. Apply the freeze exception checks

Be meticulous. Read and apply all checks from [checks.md](checks.md):

- The **common** checks apply to every request.
- Then apply the **Feature Freeze** checks.

Where possible, verify claims rather than trusting them (e.g. confirm attachments exist, that `ubuntu-release` is *subscribed* and not *assigned*, that the upstream changelog diff is attached, and run `seeded-in-ubuntu <package>` to confirm the stated seed impact).

*Criterion: Every applicable check in `checks.md` has been evaluated against the request.*

### 4. Sanitize the report

Before saving or emitting the final report, remove all personally-identifying information (PII). Replace specific names, email addresses, IRC/Matrix nicks, or other identifiers with generic terms such as "the requester," "a reviewer," or "the maintainer." Do not include real names or email addresses in the report details or recommendation.

*Criterion: The draft report contains absolutely no PII.*

### 5. Generate the report

After completing the steps above, write the report to a file named `ffe-review-<package>-lp<bug>.md` (use the primary bug number) and emit it in **Markdown**.

```
=== Feature Freeze Exception Review Report ===
Package:      <source-package>
Bug:          LP: #<bug>
Type:         Feature Freeze (FFe)
Reviewer:     <your identifier>
Date:         <YYYY-MM-DD>

--- Summary ---
<One-line verdict: APPROVE / REJECT / NEEDS-INFO>

--- Common checks ---
1. Filed as a bug against the right package (or "Ubuntu"):  [PASS / FAIL / N/A]
2. Bug status set to New at filing:                         [PASS / FAIL / N/A]
3. ubuntu-release subscribed (not assigned):                [PASS / FAIL / N/A]
4. Description of proposed changes (impact estimable):      [PASS / FAIL / N/A]
5. Rationale / benefit of the change stated:                [PASS / FAIL / N/A]
6. Testing described: builds:                               [PASS / FAIL / N/A]
7. Testing described: installs:                             [PASS / FAIL / N/A]
8. Testing described: upgrades:                             [PASS / FAIL / N/A]
9. Reverse-dependency impact addressed:                     [PASS / FAIL / N/A]
10. seeded-in-ubuntu output included:                       [PASS / FAIL / N/A]
11. Prepared package exists (PPA / debdiff / MP):           [PASS / FAIL / N/A]
12. Benefit demonstrably outweighs regression risk:         [PASS / FAIL / N/A]

--- Feature Freeze checks ---
F1. "FFe:" prefix in the bug summary:                       [PASS / FAIL / N/A]
F2. "## FFe ##" stanza in the description:                  [PASS / FAIL / N/A]
F3. Reason the exception is necessary stated:               [PASS / FAIL / N/A]
F4. Upstream changelog diff attached (not debian/changelog):[PASS / FAIL / N/A]
F5. NEWS file attached where it aids review:                [PASS / FAIL / N/A]
F6. PPA link with the uploaded changes provided:            [PASS / FAIL / N/A]
F7. Install log included:                                   [PASS / FAIL / N/A]
F8. Functional testing described:                           [PASS / FAIL / N/A]
F9. Regression potential described (SRU-template guidance):  [PASS / FAIL / N/A]
F10. (Optional) Screenshot of main features:                [PASS / FAIL / N/A]

--- Details ---
<For every FAIL or NEEDS-INFO, include a concise note explaining the issue.
If all checks pass, write "All checks passed. No issues identified.">

--- Recommendation ---
APPROVE / REJECT / NEEDS-INFO

<If APPROVE: one-line confirmation; note that the Release Team sets the bug to TRIAGED on approval.>
<If REJECT: state the blocking issue(s) and what the requester must fix.>
<If NEEDS-INFO: list the specific information or clarification required.>
```

Stop after emitting the report.

*Criterion: The final report is written to disk and emitted to the user.*

