Skip to content
Open
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
74 changes: 73 additions & 1 deletion .github/prompts/generate-release-notes.prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,47 @@ Ask for the following if not provided:
4. **Mode** — `generate` (create a new release notes file or section) or `update` (add new issues to an existing release notes section). If the output file already exists and contains the target version heading, infer `update` mode unless the user explicitly requests `generate`.
5. **Target release section** *(update mode only)* — the specific `## Release <version>` heading to update (e.g., `## Release 7.1.6-r2`). Required when mode is `update`.

## Helper Scripts

Reusable Node.js scripts live in `scripts/release-notes/`. These handle mechanical data transformations so the agent can focus on AI-dependent synthesis. All scripts accept `--help` for usage details.

| Script | Purpose | Invoked In |
|--------|---------|------------|
| `categorize.js` | Categorize JQL results into CVE / Feature / Caveat / Resolved | Step 1 |
| `find-existing-entries.js` | Search existing release notes for reusable entry text | Step 2.0 |
| `collect-cves.js` | Extract and sort all unique CVE identifiers | Step 5 |
| `assemble-section.js` | Combine entries + CVEs into a complete markdown section | Step 5 |
| `insert-section.js` | Insert the assembled section into the target file | Step 6 |

All scripts use file-based I/O. Save intermediate data to `/tmp/rn-*` files.

## Workflow

### Step 0 — Verify MCP Servers Are Running

Before starting any work, confirm that both required MCP servers are available:

1. **JIRA MCP** — Call `mcp_ssr-jira-mcp_get_issue` with a known issue key (e.g., `I95-1`) or any lightweight JIRA MCP tool. If the call fails or times out, stop.
2. **GitHub MCP** — Call `mcp_github_mcp_se_get_me` to verify the GitHub MCP server is reachable. If the call fails or times out, stop.

If **either** server is not running, halt immediately and inform the user:

> "The release notes workflow requires both the **SSR JIRA MCP** and **GitHub MCP** servers to be running. Please start the missing server(s) and re-run this prompt."

Do NOT proceed to Step 1 until both checks pass.

### Step 1 — Fetch Issues

Run the provided JQL query using the SSR JIRA MCP tools. Collect all returned issues. If the JQL query returns zero issues, inform the user and ask them to verify the query or version labels before proceeding.

After fetching, save the raw JQL results JSON to `/tmp/rn-jql-results.json`, then run:

```bash
node scripts/release-notes/categorize.js --input /tmp/rn-jql-results.json --output /tmp/rn-categorized.json
```

This produces a categorized breakdown. Use the output to identify which issues are CVEs (grouped automatically), features, caveats, and resolved issues.

### Step 1.5 — Diff Against Existing Notes (Update Mode Only)

Skip this step entirely if mode is `generate`.
Expand All @@ -43,7 +78,13 @@ For each issue identified as needing processing:
- In **generate** mode: all issues returned by the JQL query.
- In **update** mode: only the **new issues** identified in Step 1.5.

0. **Check for existing release-note language first.** Search the existing release notes under [docs/](../../docs/) (for example, `release_notes_128t_*.md`) for the issue key (e.g., `I95-12345`, `WAN-1234`). If a prior entry for that issue exists in a *different* release section or file, reuse its title and description verbatim and **skip Steps 2.1, 3, and 4** for that issue — do not call the JIRA or GitHub MCP tools for it. Only continue with the steps below if no prior entry exists anywhere.
0. **Check for existing release-note language first.** Write the non-CVE issue keys (features + caveats + resolved from `/tmp/rn-categorized.json`) to `/tmp/rn-non-cve-keys.txt` (one per line), then run:

```bash
node scripts/release-notes/find-existing-entries.js --keys /tmp/rn-non-cve-keys.txt --found /tmp/rn-found-entries.json --not-found /tmp/rn-needs-entries.txt
```

Issues listed in `/tmp/rn-found-entries.json` already have reusable entry text — skip Steps 2.1, 3, and 4 for those. Only process issues listed in `/tmp/rn-needs-entries.txt` through the steps below.
1. Read the JIRA issue and collect all available context:
- **Summary** (title)
- **Description** (full body, often contains root cause and fix details)
Expand Down Expand Up @@ -88,6 +129,27 @@ Do not copy any single source verbatim. Synthesize all inputs into one clear, co

Use the format from [docs/release_notes_128t_7.1.md](../../docs/release_notes_128t_7.1.md) as the template.

#### Using helper scripts for assembly

After synthesizing new entries (Step 4), save them as a JSON mapping to `/tmp/rn-new-entries.json` (format: `{ "KEY": "- **KEY title:** description" }`). Then run:

```bash
# Collect CVEs
node scripts/release-notes/collect-cves.js --input /tmp/rn-jql-results.json --output /tmp/rn-cves.txt

# Assemble the section
node scripts/release-notes/assemble-section.js \
--found /tmp/rn-found-entries.json \
--new /tmp/rn-new-entries.json \
--cves /tmp/rn-cves.txt \
--version "<VERSION>" \
--date "<DATE>" \
--features "<comma-separated feature keys>" \
--output /tmp/rn-section.md
```

Review the output in `/tmp/rn-section.md` before inserting.

#### Update mode — merge new entries into the existing section

When mode is `update`, do NOT regenerate the document from scratch. Instead:
Expand Down Expand Up @@ -159,6 +221,16 @@ If Step 1.5 identified any **stale issues** (entries in the existing section tha

### Step 6 — Review and Save

To insert the assembled section into the target file, run:

```bash
# Insert before an existing section (newer versions go first)
node scripts/release-notes/insert-section.js --file <output-file> --section /tmp/rn-section.md --before "## Release <older-version>"

# Or append to end of file if no later section exists
node scripts/release-notes/insert-section.js --file <output-file> --section /tmp/rn-section.md --append
```

**Generate mode:** Present the complete draft for review. After approval, save to the specified output file.

**Update mode:** Present a summary that includes:
Expand Down
2 changes: 1 addition & 1 deletion docs/about_releases.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ However, issues resolved in `4.3.12`, which was released on 3/12/2021 are not ad
| -- | -- | -- | -- | -- | -- | -- |
| Release 7.2 | [7.2.0](release_notes_128t_7.2.md#release-720-29r1) | July 1, 2026 | [7.2.1](release_notes_128t_7.2.md#release-721-1r1) | LTS | January 1, 2029 | July 1, 2029 |
| Release 7.1 | [7.1.0](release_notes_128t_7.1.md#release-710-50r1) | December 4, 2025 | [7.1.6](release_notes_128t_7.1.md#release-716-7-sts) | STS | March 10, 2027 | September 10, 2027 |
| Release 7.0 | [7.0.1](release_notes_128t_7.0.md#release-701-1r1) | October 14, 2025 | [7.0.1](release_notes_128t_7.0.md#release-701-1r1) | LTS | August 24, 2028 | February 24, 2029 |
| Release 7.0 | [7.0.1](release_notes_128t_7.0.md#release-701-1r1) | October 14, 2025 | [7.0.5](release_notes_128t_7.0.md#release-705-12-lts) | LTS | August 24, 2028 | February 24, 2029 |
| Release 6.3 | [6.3.0](release_notes_128t_6.3.md#release-630-107r1) | September 30, 2024 | [6.3.7-6-sts](release_notes_128t_6.3.md#release-637-6-sts) | STS | May 6, 2026 | November 6, 2026 |
| Release 6.2 | [6.2.0](release_notes_128t_6.2.md#release-620-39r1) | November 16, 2023 | [6.2.13-1-lts](release_notes_128t_6.2.md#release-6213-1-lts) | LTS | September 6, 2026 | March 6, 2027 |

Expand Down
2 changes: 1 addition & 1 deletion docs/release_notes_128t_6.2.md
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ Before upgrading please review the [**Upgrade Considerations**](intro_upgrade_co
------
- **I95-62011 Stats from adjacency traffic engineering throw an exception when a hostname is used:** Resolved an issue where dynamic reconfiguration when adding neighbors/adjacencies that use an FQDN and have adjacency Traffic Engineering enabled, caused the device interface to reach a failure state.
------
- **I95-62071 Multicast Traffic contributing to service area resource contention:** Resolved an issue when we have an mroute with no outgoing interfaces. We now use a Detour Path instead of NoServicePaths to prevent resource contention.
- **I95-62071 Multicast Traffic contributing to service area resource contention:** Resolved an issue when an mroute has no outgoing interfaces. A Detour Path is now used instead of NoServicePaths to prevent resource contention.
------
- **I95-62258 Packet steered to egress non-existent interface causes highway crash:** Added logic to capture the errant packet and prevent the crash. An exception is logged so that the issue can be more easily rectified.
------
Expand Down
2 changes: 1 addition & 1 deletion docs/release_notes_128t_6.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ Beginning with SSR-6.3.5, conductor-managed **routers** running SSR-6.3.5 must b
------
- **I95-62011 Stats from adjacency traffic engineering throw an exception when a hostname is used:** Resolved an issue where dynamic reconfiguration when adding neighbors/adjacencies that use an FQDN and have adjacency Traffic Engineering enabled, caused the device interface to reach a failure state.
------
- **I95-62071 Multicast Traffic contributing to service area resource contention:** Resolved an issue when we have an mroute with no outgoing interfaces. We now use a Detour Path instead of NoServicePaths to prevent resource contention.
- **I95-62071 Multicast Traffic contributing to service area resource contention:** Resolved an issue when an mroute has no outgoing interfaces. A Detour Path is now used instead of NoServicePaths to prevent resource contention.
------
- **I95-62179 Software Lifecycle History not up to date:** Resolved an issue where the software lifecycle page was not showing any history, or in some cases, the history was outdated. Internal functionality has been updated, and both the GUI and CLI outputs now show the correct information.
------
Expand Down
Loading