You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Releases: expanded changelog view, authors, RSS, tiers array, and JSON body (#20233)
* Releases changelog: expanded view, authors, RSS, and tiers array (#20221)
Add three features to /releases and formalize the changelog tier field:
- Expanded view: /releases/changelog now renders the full changelog inline,
as a List/Expanded toggle (icon button group) that navigates between
/releases (compact rows + modal) and /releases/changelog. Both share a new
releases/changelog-index.html partial; no JS/persisted state.
- Authors: changelog entries take an optional `authors:` array, rendered as an
"— Name, Name" attribution linked to author pages. Attributed all 14 entries
from the linked blog posts and #product-updates. Added team entries + photos
for Daniel Perlovsky and Jeff Merrick.
- RSS: surface the existing /releases/rss.xml feed with a visible button.
- Tiers: replace the singular `tier:` scalar with a `tiers:` array restricted
to the four pricing tiers (Free/Team/Enterprise/Business Critical), enforced
by checkChangelogTiers in lint-markdown.js. Authors list every applicable
tier (lowest + all above). Aligned the release-page card partials too.
Also adds a reusable .btn-group utility and rounds video/audio corners
(rounded-lg) so embedded changelog media matches the card styling.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Add rendered changelog body (absolute URLs) to the releases JSON feed
Each entry in /releases/index.json now carries an optional `body` field with
the entry's rendered HTML content — the minimal fragment (no page chrome),
present only when the page has a body (changelog items always do). Root-relative
links and assets are rewritten to absolute https://www.pulumi.com/... URLs so
off-domain consumers (e.g. an external app) resolve them; already-absolute and
protocol-relative URLs are left untouched.
Also fixes a grammar slip in the neo-code-reviews entry meta_desc.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Attribute the changelog entries merged from master
Add authors to the two changelog entries that landed on master (from their
linked blog posts): versioned CLI/SDK docs (Cam Soper) and passkey support
(Devon Grove). Neither is tier-gated, so no tiers.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Render only the requested releases view (no CSS-hidden media)
Instead of emitting both the compact rows and expanded bodies and hiding one
with CSS, changelog-item.html now renders only the caller's view — so the
expanded bodies' images and autoplaying videos aren't fetched behind
display:none on the list page. The modal ships only in list view, and .btn-group
now lifts aria-current="page" links (not just aria-pressed buttons).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Use shared badge classes for changelog tier pills
Apply master's new .badge/.badge-secondary/.badge-sm classes to the
tiers array rendering instead of the hand-rolled Tailwind pill.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Attribute the neo-usage-limits changelog entry merged from master
The entry came in from master without an authors field; attribute it to
john-keiser, matching the companion blog post.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Update _index.md
* Attribute changelog entries to Chris; make author a default
Set christian-nunciato as the author on every changelog entry except the
docs dark mode one (jeff-merrick). Make the author byline a default rather
than opt-in: the changelog archetype now pre-fills authors: christian-nunciato,
and the /new-changelog skill treats the field as included-by-default (opting
out is a deliberate choice). Also refreshes the skill's stale notes (render:
never, singular tier:, "no authors").
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Christian Nunciato <c@nunciato.org>
Copy file name to clipboardExpand all lines: .claude/commands/new-changelog.md
+10-5Lines changed: 10 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,8 +12,8 @@ Creates a new changelog entry under `content/releases/changelog/` with the requi
12
12
13
13
- Each entry is a single markdown file in `content/releases/changelog/` (not a leaf bundle). Shared images and videos live in the `images/` and `videos/` subfolders and are referenced by absolute path (e.g. `/releases/changelog/images/foo.png`).
14
14
-**Filenames must be `YYYY-MM-DD-slug.md`**, and the date prefix must match the frontmatter `date:`. `make lint` enforces both (see `scripts/lint/lint-markdown.js`, `checkChangelogFilename`).
15
-
- The section `_index.md` sets `cascade.type: changelog` (routes entries to `layouts/changelog/single.html`) and `build.render: never` (no list page for the folder itself). Don't touch it when adding an entry.
16
-
- These are short announcements — a paragraph or two that lead with what the reader can now do, then link to the announcement blog post and/or docs. There are no authors, tags, categories, feature images, or social copy (unlike blog posts).
15
+
- The section `_index.md` sets `cascade.type: changelog` (routes entries to `layouts/changelog/single.html`) and renders the expanded `/releases/changelog/` view. Don't touch it when adding an entry.
16
+
- These are short announcements — a paragraph or two that lead with what the reader can now do, then link to the announcement blog post and/or docs. They carry an **author byline** (`authors:`, included by default) and an optional pricing-`tiers:` badge, but no tags, categories, feature images, or social copy (unlike blog posts).
17
17
18
18
## Instructions for Claude
19
19
@@ -31,7 +31,8 @@ Ask the user for the following using AskUserQuestion, seeding smart defaults:
31
31
2. label: "Enter a specific date" / description: "You'll provide YYYY-MM-DD"
32
32
- Replace `{current-date}` with the actual current date in `YYYY-MM-DD`. Validate any custom date matches `YYYY-MM-DD`.
33
33
-**Summary (`meta_desc`)**: Suggest a concise one- or two-sentence summary (max 160 characters) based on the title. Required — the linter fails without it.
34
-
-**Tier badge (optional)**: Ask whether the release applies only to a particular Pulumi product tier. Options are Team, Enterprise, and Business Critical. Default is none. Only add the `tier:` field if the user specifies one.
34
+
-**Author (`authors`)**: Included by default — the archetype pre-fills the changelog's usual author (`christian-nunciato`). Confirm it, or set a different team id (from `data/team/team`) when someone else wrote the entry. Only drop the field in the rare case the entry should have no byline; opting out is a deliberate choice, not the default.
35
+
-**Tiers (optional)**: Ask whether the release is gated to particular pricing tiers. The `tiers:` field is a YAML array drawn only from the four pricing tiers (Free, Team, Enterprise, Business Critical). Default is none. If gated, list **every** applicable tier — the lowest one plus all tiers above it (e.g. an Enterprise feature lists both `Enterprise` and `Business Critical`). `make lint` enforces the set and rejects the legacy singular `tier:`.
35
36
36
37
If the user already provided the announcement details or a link to a blog post, use them to draft the body in Step 4 instead of asking again.
37
38
@@ -56,15 +57,19 @@ If Hugo isn't available or errors, write the file directly with this frontmatter
56
57
title: "Title in Title Case"
57
58
date: YYYY-MM-DD
58
59
meta_desc: "One- or two-sentence summary (<= 160 chars)"
59
-
# tier: public preview # optional — remove if no badge
60
+
authors:
61
+
- christian-nunciato # the changelog's usual author — change if someone else wrote it
62
+
# tiers: # optional — omit unless the feature is tier-gated
63
+
# - Enterprise
64
+
# - Business Critical
60
65
---
61
66
```
62
67
63
68
### 4. Fill in the entry
64
69
65
70
1. Remove the archetype's instructional comments from the frontmatter.
66
71
2. Set `title`, `date`, and `meta_desc` to the gathered values (the archetype pre-fills `title`/`date` from the filename — verify and tidy the title).
67
-
3.Add the `tier:` fieldonly if the user specified one; otherwise omit it.
72
+
3.Keep the pre-filled `authors:` field, changing the id if a different person wrote the entry (drop it only in the rare no-byline case). Add `tiers:` only if the user specified tier gating; otherwise omit it.
68
73
4. Replace the placeholder body with the announcement: a short paragraph or two that lead with the reader benefit, then link out to the blog post (`/blog/...`) and/or docs (`/docs/...`). Follow `STYLE-GUIDE.md` (H1 = Title Case, H2+ = Sentence case; sentence-case running prose; lowercase common nouns like "stack").
69
74
5. If the entry needs an image or video, place it in `content/releases/changelog/images/` or `.../videos/`**with a date-prefixed, lowercase-hyphenated filename** (`YYYY-MM-DD-slug.ext`, using this entry's date — e.g. `2026-07-11-command-palette.mp4`), and reference it by absolute path (e.g. `/releases/changelog/images/2026-07-11-foo.png`). `make lint` enforces the asset naming too. Markdown must end with a trailing newline.
Copy file name to clipboardExpand all lines: AGENTS.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -135,6 +135,7 @@ Individual changelog items live in `content/releases/changelog/` — one markdow
135
135
-**Filenames must be `YYYY-MM-DD-<slug>.md`**, and the date prefix must match the frontmatter `date:`. `make lint` enforces both (`checkChangelogFilename` in `scripts/lint/lint-markdown.js`) — a mismatch or non-prefixed name is a hard build failure.
136
136
-**Assets in `images/` and `videos/` must also be date-prefixed** as `YYYY-MM-DD-<slug>.<ext>` (use the referencing entry's date). `make lint` enforces this too (`checkChangelogAssets`). Rename the asset and update its reference together.
137
137
-**Create a new entry with the `/new-changelog` skill** (or `hugo new --kind changelog content/releases/changelog/YYYY-MM-DD-<slug>.md`, which uses `archetypes/changelog.md`). The archetype derives `title` and `date` from the filename.
138
+
-**Optional `tiers:`** is a YAML array marking pricing-tier availability, rendered as badge(s) beside the date. Values are a **closed set** — only the four pricing tiers (`Free`, `Team`, `Enterprise`, `Business Critical`; see `content/pricing/_index.md`), enforced by `checkChangelogTiers` in `scripts/lint/lint-markdown.js` (an out-of-set value or the legacy singular `tier:` is a hard build failure). List **every** tier the feature is available in — since a lower tier implies the tiers above it, that means the lowest applicable tier and all tiers above it (e.g. an Enterprise feature lists both `Enterprise` and `Business Critical`).
138
139
-**Renaming an entry** (changing its slug) changes its URL, so add an `aliases:` entry pointing at the old `/releases/changelog/<old-slug>/` path — same SEO rule as moving any content file.
Copy file name to clipboardExpand all lines: archetypes/changelog.md
+15-3Lines changed: 15 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -22,9 +22,21 @@ date: {{ substr .Name 0 10 }}
22
22
# Required — the build fails the linter without it. Max length 160 characters.
23
23
meta_desc:
24
24
25
-
# Optional tier badge shown beside the date (e.g. "public preview", "ga").
26
-
# Remove this line if you don't need a badge.
27
-
# tier: public preview
25
+
# Who authored the entry — a YAML array of team ids from data/team/team,
26
+
# rendered as an "— Name" byline. Defaults to the changelog's usual author;
27
+
# change it (or, rarely, remove the field) when someone else wrote the entry.
28
+
authors:
29
+
- christian-nunciato
30
+
31
+
# Optional pricing-tier availability, shown as badge(s) beside the date. A YAML
32
+
# array drawn only from the four pricing tiers (Free, Team, Enterprise, Business
33
+
# Critical — see content/pricing/_index.md); `make lint` enforces the set. List
34
+
# every tier the feature is available in — since a lower tier implies the tiers
35
+
# above it, that means the lowest applicable tier and all tiers above it. Remove
36
+
# if not tier-gated.
37
+
# tiers:
38
+
# - Enterprise
39
+
# - Business Critical
28
40
---
29
41
30
42
Describe what shipped in a short paragraph or two. Lead with what the reader can now do, then link out to the announcement post and/or the docs for details.
Copy file name to clipboardExpand all lines: content/releases/changelog/2026-05-04-custom-vcs.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,8 @@ date: 2026-05-04
4
4
aliases:
5
5
- /releases/changelog/custom-vcs/
6
6
meta_desc: Custom VCS integrations allow you to connect any Git or Mercurial server, including self-hosted, to Pulumi Cloud.
7
+
authors:
8
+
- christian-nunciato
7
9
---
8
10
9
11
Custom VCS integrations connect any Git or Mercurial version control system to Pulumi Cloud, including self-hosted and third-party servers. Store your authentication credentials (SSH, basic auth, or a personal access token) in a Pulumi ESC environment, point the integration at your VCS server, and push to your repository to trigger Pulumi Deployments. Pulumi Neo can also clone and push to these repositories using the same credentials.
Copy file name to clipboardExpand all lines: content/releases/changelog/2026-05-05-neo-task-notifications.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,8 @@ date: 2026-05-05
4
4
aliases:
5
5
- /releases/changelog/neo-task-notifications/
6
6
meta_desc: Neo can now notify you when a task needs your input, through native desktop notifications, an audible sound, or both.
7
+
authors:
8
+
- christian-nunciato
7
9
---
8
10
9
11
Neo can now notify you when a task needs your input, either through native desktop notifications, an audible sound, or both. As you delegate more tasks to Neo and work more asynchronously, you'll know right away whenever Neo is finished and waiting for you.
meta_desc: The Pulumi Cloud console has a refreshed look, with richer controls, new navigation, greater information density, and more.
7
+
authors:
8
+
- christian-nunciato
7
9
---
8
10
9
11
The Pulumi Cloud console has a refreshed look: new colors; more consistent controls like inputs, selects, and buttons; a new collapsible sidebar with condensed hierarchical navigation; new layouts for tabular data; a new resource graph display; and much more.
meta_desc: The Members tab in Access Management now indicates which teams every organization member belongs to.
7
+
authors:
8
+
- christian-nunciato
7
9
---
8
10
9
11
The Members tab in Access Management now shows which teams each member of your organization belongs to. Before, you had to open each team individually to see who was on it; now the full picture is on one page, under **Settings** > **Access Management** > **Members**.
meta_desc: Pulumi ESC change requests now separate editing a draft from reviewing one, with deep-linkable modes so several people can co-edit before approval.
7
-
tier: Enterprise
7
+
authors:
8
+
- christian-nunciato
9
+
tiers:
10
+
- Enterprise
11
+
- Business Critical
8
12
---
9
13
10
14
Pulumi ESC change requests now cleanly separate editing a draft from reviewing one. The editor is always where you change the new version, the approval page is a read-only diff, and a banner on the environment lets you flip between the two. Both modes are deep-linkable, so you can send a coworker a URL to review — or co-edit — the same draft before it's approved.
Copy file name to clipboardExpand all lines: content/releases/changelog/2026-05-28-pulumi-service-provider-v1.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,8 @@ date: 2026-05-28
4
4
aliases:
5
5
- /releases/changelog/pulumi-service-provider-v1/
6
6
meta_desc: The Pulumi Service Provider has reached v1.0 and is now generated from the public Pulumi Cloud OpenAPI specification.
7
+
authors:
8
+
- christian-nunciato
7
9
---
8
10
9
11
The [Pulumi Service Provider](/registry/packages/pulumiservice/) has officially [reached v1.0](/blog/generating-a-pulumi-provider-from-an-openapi-spec/#whats-new-in-v10) and is now generated from the public Pulumi Cloud [OpenAPI specification](/docs/reference/cloud-rest-api/), which commits to a stable contract for the existing resource surface and keeps the provider up to date automatically.
Copy file name to clipboardExpand all lines: content/releases/changelog/2026-06-05-git-tag-deployments.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,8 @@ date: 2026-06-05
4
4
aliases:
5
5
- /releases/changelog/git-tag-deployments/
6
6
meta_desc: You can now push a Git tag to trigger a Pulumi deployment from any supported service, including GitHub, GitLab, Bitbucket, Azure DevOps, and more.
7
+
authors:
8
+
- christian-nunciato
7
9
---
8
10
9
11
You can now push a Git tag to your Pulumi Cloud-connected version control system to trigger a Pulumi deployment. Available to all Pulumi Cloud organizations, this new feature also supports optional glob filters and works across any supported VCS, including GitHub, GitLab, Bitbucket, Azure DevOps, and custom integrations.
0 commit comments