Skip to content

fix(releases): generate site changelog from release content#312

Merged
phrazzld merged 2 commits into
masterfrom
linejam-919-site-changelog-release-pipeline
Jul 8, 2026
Merged

fix(releases): generate site changelog from release content#312
phrazzld merged 2 commits into
masterfrom
linejam-919-site-changelog-release-pipeline

Conversation

@phrazzld

@phrazzld phrazzld commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Summary

  • generate site/changelog.html from the same CHANGELOG.md-derived release records used by /releases
  • fix the release parser for semantic-release headings, dates, sections, and markdown PR/commit refs
  • run release generation in Pages before upload and after the Release workflow completes successfully

Source of truth

CHANGELOG.md parsed by scripts/generate-releases.ts into content/releases/ now feeds both the app /releases page and site/changelog.html.

Verification

  • pnpm vitest run tests/lib/releases/parser.test.ts tests/scripts/site-changelog.test.ts
  • OPENROUTER_API_KEY= pnpm generate:releases
  • pnpm generate:releases --dry-run
  • pnpm ci:prepush in clean worktree /tmp/linejam-919-gate: typecheck, lint, and 124 Vitest files passed (1265 passed, 1 skipped)
  • git push pre-push hook reran typecheck, lint, and test from the clean worktree

Agent: codex-gpt-5.5
Agent-Surface: Codex CLI
Agent-Model: openai/gpt-5.5
Agent-Task: linejam-919

Summary by CodeRabbit

  • New Features

    • Added a new releases page with clearer formatting and expanded version history.
    • Release notes now include more user-facing summaries across recent versions.
  • Bug Fixes

    • Improved release generation reliability and fallback handling.
    • Fixed release parsing so more changelog formats are recognized correctly.
    • Updated deployment flow to publish the marketing site more consistently.

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@vercel

vercel Bot commented Jul 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
linejam Ready Ready Preview, Comment Jul 8, 2026 5:19pm

@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Changes are limited to release generation, static marketing content, and CI deploy steps; no runtime app or auth logic is modified, though Pages deploy now depends on the generate step succeeding.

Overview
Unifies release notes so CHANGELOG.mdpnpm generate:releases feeds both content/releases/ (used by /releases) and a newly generated site/changelog.html, via scripts/releases/site-changelog.ts and updated scripts/generate-releases.ts (including simpler fallback notes when the LLM is unavailable).

Parser updates in lib/releases/parser.ts and lib/releases/types.ts add support for semantic-release headings, Features / Bug Fixes sections, markdown PR/commit links, and **scope:** bullets; Vitest covers parser and HTML rendering.

GitHub Pages (.github/workflows/pages.yml) now runs on successful Release workflow completion, checks out master, installs with pnpm, runs pnpm generate:releases before staging site/, and skips deploy when the triggering release failed.

The PR also backfills content/releases/ (manifest through v1.15.1) and refreshes the committed marketing changelog HTML to match the shared source.

Reviewed by Cursor Bugbot for commit 23e9848. Configure here.

@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_81b0fc09-6307-4a5d-8f4f-727105c39da0)

@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 40 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 046d7ad3-ca5e-4292-af7e-6e3eb6cd3333

📥 Commits

Reviewing files that changed from the base of the PR and between 9460853 and 23e9848.

📒 Files selected for processing (49)
  • .github/workflows/pages.yml
  • content/releases/manifest.json
  • content/releases/v1.1.0/changelog.json
  • content/releases/v1.1.0/notes.md
  • content/releases/v1.1.1/changelog.json
  • content/releases/v1.1.1/notes.md
  • content/releases/v1.1.2/changelog.json
  • content/releases/v1.1.2/notes.md
  • content/releases/v1.1.3/changelog.json
  • content/releases/v1.1.3/notes.md
  • content/releases/v1.10.0/changelog.json
  • content/releases/v1.10.0/notes.md
  • content/releases/v1.11.0/changelog.json
  • content/releases/v1.11.0/notes.md
  • content/releases/v1.12.0/changelog.json
  • content/releases/v1.12.0/notes.md
  • content/releases/v1.13.0/changelog.json
  • content/releases/v1.13.0/notes.md
  • content/releases/v1.14.0/changelog.json
  • content/releases/v1.14.0/notes.md
  • content/releases/v1.15.0/changelog.json
  • content/releases/v1.15.0/notes.md
  • content/releases/v1.15.1/changelog.json
  • content/releases/v1.15.1/notes.md
  • content/releases/v1.2.0/changelog.json
  • content/releases/v1.2.0/notes.md
  • content/releases/v1.3.0/changelog.json
  • content/releases/v1.3.0/notes.md
  • content/releases/v1.4.0/changelog.json
  • content/releases/v1.4.0/notes.md
  • content/releases/v1.5.0/changelog.json
  • content/releases/v1.5.0/notes.md
  • content/releases/v1.6.0/changelog.json
  • content/releases/v1.6.0/notes.md
  • content/releases/v1.7.0/changelog.json
  • content/releases/v1.7.0/notes.md
  • content/releases/v1.8.0/changelog.json
  • content/releases/v1.8.0/notes.md
  • content/releases/v1.9.0/changelog.json
  • content/releases/v1.9.0/notes.md
  • content/releases/v1.9.1/changelog.json
  • content/releases/v1.9.1/notes.md
  • lib/releases/parser.ts
  • lib/releases/types.ts
  • scripts/generate-releases.ts
  • scripts/releases/site-changelog.ts
  • site/changelog.html
  • tests/lib/releases/parser.test.ts
  • tests/scripts/site-changelog.test.ts
📝 Walkthrough

Walkthrough

The changelog parser now handles semantic-release markdown references and scoped bullets. A new site-changelog HTML renderer is added and wired into the release generation script, which now also produces site/changelog.html. The Pages workflow runs release generation before deploying. Numerous per-version release content files and the manifest were regenerated.

Changes

Release generation, parser, and site changelog

Layer / File(s) Summary
Parser: semantic-release references and scope support
lib/releases/parser.ts, lib/releases/types.ts, tests/lib/releases/parser.test.ts
Regex patterns are expanded for version headers, generalized section capture, markdown reference extraction, and **scope:** prefix parsing; SECTION_TO_TYPE gains Features/Bug Fixes mappings; new tests validate parsing.
Site changelog HTML renderer
scripts/releases/site-changelog.ts, tests/scripts/site-changelog.test.ts
New renderSiteChangelogHtml function builds an escaped, evidence-labeled HTML document from release data, with helper functions and tests.
generate-releases.ts wiring
scripts/generate-releases.ts
Imports the renderer, adjusts OpenRouter error logging, rewrites fallback note generation, and adds readProductNotes/writeSiteChangelog, invoked from main() on both early-exit and success paths.
Pages workflow update
.github/workflows/pages.yml
Adds a workflow_run trigger for the Release workflow and updates the deploy job to checkout master, set up Node/pnpm, install deps, and run pnpm generate:releases before deploying.
Regenerated manifest and site output
content/releases/manifest.json, site/changelog.html
Manifest latest/versions/generatedAt updated; site/changelog.html rewritten with standardized version headings, single-line bullets, and normalized evidence labels.
Per-version release content
content/releases/v1.1.0/... through content/releases/v1.15.1/...
Adds/updates changelog.json and notes.md for each release version documenting individual changes.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
    participant Workflow as Pages Workflow
    participant Script as generate-releases.ts
    participant Parser as lib/releases/parser.ts
    participant Renderer as site-changelog.ts
    participant Site as site/changelog.html

    Workflow->>Script: run pnpm generate:releases
    Script->>Parser: parseChangelog(CHANGELOG.md)
    Parser-->>Script: releases with changes
    Script->>Script: readProductNotes(release)
    Script->>Renderer: renderSiteChangelogHtml(releases)
    Renderer-->>Script: HTML document string
    Script->>Site: write site/changelog.html
    Script->>Script: update manifest.json
Loading

Suggested labels: released

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change: generating the site changelog from release content, while staying concise and specific.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch linejam-919-site-changelog-release-pipeline

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9460853bda

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread lib/releases/parser.ts
* # [1.0.0](https://example.test/compare) (2024-01-15)
*/
const VERSION_REGEX =
/^#{1,2}\s+\[([^\]]+)\](?:\([^)]+\))?(?:\s+(?:-\s*)?\(?(\d{4}-\d{2}-\d{2})\)?)?/;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Recognize unbracketed release headings

The current CHANGELOG.md has an unbracketed semantic-release heading, # 1.0.0 (2026-01-25), but this regex only matches [version] headings. When pnpm generate:releases runs, it never closes the v1.1.0 release at that point, so the v1.0.0 bullets are appended to content/releases/v1.1.0/changelog.json and no content/releases/v1.0.0 entry is generated. Please accept the unlinked heading form before regenerating the release content.

Useful? React with 👍 / 👎.

Comment on lines +31 to +34
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Install pnpm before enabling setup-node cache

This Pages job enables cache: pnpm before any step installs or enables pnpm, while pnpm's GitHub Actions CI example installs pnpm before actions/setup-node with cache: "pnpm" (https://pnpm.io/continuous-integration#github-actions). On hosted images where pnpm is only available after Corepack/pnpm setup, setup-node can fail while resolving the pnpm store before it ever reaches the later corepack enable step, preventing release-triggered Pages deploys; install/enable pnpm first or remove the cache option here.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

♻️ Duplicate comments (1)
site/changelog.html (1)

300-312: 🎯 Functional Correctness | 🟠 Major

Raw markdown link syntax leaks into public-facing content.

Bullets for v1.2.0 (line 304), v1.1.3 (line 318), and v1.1.0 (lines 360-361) contain unrendered markdown reference links (e.g. closes [#27248473133](https://...)), which will display literally to site visitors. This is a downstream effect of the parser gap in lib/releases/parser.ts (see comment there) — flagging here only as the visible symptom.

Also applies to: 314-326, 356-371

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/changelog.html` around lines 300 - 312, The release notes rendered in
the changelog are leaking raw markdown links into public content, so update the
changelog generation path to ensure those issue references are parsed into
proper HTML links before display. Fix the markdown handling in the release
rendering flow that produces the sections for v1.2.0, v1.1.3, and v1.1.0, and
verify the output from the parser used by the changelog page no longer contains
literal reference-link syntax in the visible text.
🧹 Nitpick comments (1)
.github/workflows/pages.yml (1)

28-30: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Consider disabling credential persistence on checkout.

Static analysis flags this checkout for not setting persist-credentials: false. Since subsequent steps run pnpm install/build scripts, an untrusted or compromised dependency could exfiltrate the persisted GITHUB_TOKEN.

🔒 Proposed fix
       - uses: actions/checkout@v4
         with:
           ref: master
+          persist-credentials: false
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pages.yml around lines 28 - 30, The checkout step in the
pages workflow is persisting the default GitHub credentials, which can expose
the token to later install/build steps. Update the actions/checkout usage to
disable credential persistence by setting persist-credentials to false in the
checkout configuration, keeping the existing ref setting intact.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/pages.yml:
- Around line 31-41: The workflow currently enables pnpm after
actions/setup-node@v4 has already tried to configure pnpm caching, which can
break cache resolution. Update the Pages job so corepack enable runs before
setup-node, then keep the existing cache: pnpm configuration and subsequent
install/release steps unchanged; use the setup-node and Enable pnpm steps as the
anchors when reordering.

In `@content/releases/v1.1.0/changelog.json`:
- Around line 8-823: The changelog entry data in changelog.json is not
normalized and the final record is truncated, so regenerate this release
artifact from the parser output used by lib/releases/parser.ts rather than
editing descriptions manually. Ensure semantic-release references like closes
[#…](…) are moved into metadata instead of staying in description, and verify
the last chore entry is completed so the JSON is valid and fully populated.

In `@content/releases/v1.1.0/notes.md`:
- Around line 1-7: The release notes text in the rendered changelog still
contains raw issue-link markup and duplicate links, so clean up the entries in
notes.md to plain prose. Update the release note bullets to remove the markdown
link fragments like closes [`#151`](...) and repeated references, keeping only
readable summary text. Use the existing release note items in notes.md as the
target content to rewrite.

In `@content/releases/v1.6.0/notes.md`:
- Line 7: The release note text contains a typo in the realtime description:
“unstrandable” should be corrected before publishing. Update the wording in this
note entry to use the intended spelling, and keep the rest of the release note
sentence unchanged.

In `@lib/releases/parser.ts`:
- Around line 26-30: Update parseBullet in parser.ts so it strips standalone
markdown reference links like [`#151`](url) from bullet text before assigning
description, not just the parenthesized forms handled by REF_REGEX and
MARKDOWN_REF_REGEX. Reuse or extend the existing reference parsing logic around
parseBullet so both semantic-release markdown references and inline links are
removed consistently while preserving the rest of the bullet content.

In `@scripts/generate-releases.ts`:
- Around line 233-245: The site changelog is rendered from the incoming release
array order in writeSiteChangelog, so it can drift from the semver-descending
order used by writeManifest and /releases. Update writeSiteChangelog to sort the
releases by semver descending before mapping to ReleaseWithNotes and passing
them to renderSiteChangelogHtml, keeping the ordering logic consistent with
writeManifest and the release display.

---

Duplicate comments:
In `@site/changelog.html`:
- Around line 300-312: The release notes rendered in the changelog are leaking
raw markdown links into public content, so update the changelog generation path
to ensure those issue references are parsed into proper HTML links before
display. Fix the markdown handling in the release rendering flow that produces
the sections for v1.2.0, v1.1.3, and v1.1.0, and verify the output from the
parser used by the changelog page no longer contains literal reference-link
syntax in the visible text.

---

Nitpick comments:
In @.github/workflows/pages.yml:
- Around line 28-30: The checkout step in the pages workflow is persisting the
default GitHub credentials, which can expose the token to later install/build
steps. Update the actions/checkout usage to disable credential persistence by
setting persist-credentials to false in the checkout configuration, keeping the
existing ref setting intact.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2694b045-588d-4a32-bff4-8f8267f10037

📥 Commits

Reviewing files that changed from the base of the PR and between 23179c1 and 9460853.

📒 Files selected for processing (49)
  • .github/workflows/pages.yml
  • content/releases/manifest.json
  • content/releases/v1.1.0/changelog.json
  • content/releases/v1.1.0/notes.md
  • content/releases/v1.1.1/changelog.json
  • content/releases/v1.1.1/notes.md
  • content/releases/v1.1.2/changelog.json
  • content/releases/v1.1.2/notes.md
  • content/releases/v1.1.3/changelog.json
  • content/releases/v1.1.3/notes.md
  • content/releases/v1.10.0/changelog.json
  • content/releases/v1.10.0/notes.md
  • content/releases/v1.11.0/changelog.json
  • content/releases/v1.11.0/notes.md
  • content/releases/v1.12.0/changelog.json
  • content/releases/v1.12.0/notes.md
  • content/releases/v1.13.0/changelog.json
  • content/releases/v1.13.0/notes.md
  • content/releases/v1.14.0/changelog.json
  • content/releases/v1.14.0/notes.md
  • content/releases/v1.15.0/changelog.json
  • content/releases/v1.15.0/notes.md
  • content/releases/v1.15.1/changelog.json
  • content/releases/v1.15.1/notes.md
  • content/releases/v1.2.0/changelog.json
  • content/releases/v1.2.0/notes.md
  • content/releases/v1.3.0/changelog.json
  • content/releases/v1.3.0/notes.md
  • content/releases/v1.4.0/changelog.json
  • content/releases/v1.4.0/notes.md
  • content/releases/v1.5.0/changelog.json
  • content/releases/v1.5.0/notes.md
  • content/releases/v1.6.0/changelog.json
  • content/releases/v1.6.0/notes.md
  • content/releases/v1.7.0/changelog.json
  • content/releases/v1.7.0/notes.md
  • content/releases/v1.8.0/changelog.json
  • content/releases/v1.8.0/notes.md
  • content/releases/v1.9.0/changelog.json
  • content/releases/v1.9.0/notes.md
  • content/releases/v1.9.1/changelog.json
  • content/releases/v1.9.1/notes.md
  • lib/releases/parser.ts
  • lib/releases/types.ts
  • scripts/generate-releases.ts
  • scripts/releases/site-changelog.ts
  • site/changelog.html
  • tests/lib/releases/parser.test.ts
  • tests/scripts/site-changelog.test.ts

Comment on lines +31 to 41
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- name: Enable pnpm
run: corepack enable
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Generate release notes
run: pnpm generate:releases
- name: Stage the marketing site

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

sed -n '1,120p' .github/workflows/pages.yml

Repository: misty-step/linejam

Length of output: 1299


🌐 Web query:

actions/setup-node pnpm cache requires pnpm on PATH store path corepack enable order

💡 Result:

When using actions/setup-node to cache pnpm dependencies (via cache: 'pnpm'), the action internally executes the command pnpm store path --silent to determine the cache directory [1]. Consequently, pnpm must be installed and available on the runner's PATH before the actions/setup-node step runs, or the caching process will fail [2][3][4]. If you are using Corepack to manage your pnpm installation, you must ensure it is enabled and the pnpm version is activated before the setup-node step [4]. The recommended workflow order is: 1. Setup Node.js (e.g., via actions/setup-node) [4]. 2. Enable and prepare Corepack (e.g., run: corepack enable && corepack prepare pnpm@latest --activate) [4][5]. 3. Configure the dependency cache using actions/setup-node with cache: 'pnpm' [4]. Alternatively, many users avoid potential ordering issues by using the pnpm/action-setup action before the actions/setup-node step [2][6][4]. This dedicated action ensures pnpm is correctly installed, configured, and added to the PATH, which satisfies the requirements for actions/setup-node to successfully locate the store path [2][4]. Recent versions of actions/setup-node (v5+) include improvements to handle cases where pnpm might be missing, often logging a warning and skipping the cache rather than causing a total workflow failure [7]. However, to reliably benefit from dependency caching, ensuring pnpm is correctly initialized on the PATH remains the best practice [4].

Citations:


🌐 Web query:

actions/setup-node v4 cache pnpm pnpm store path missing pnpm failure

💡 Result:

The error Path Validation Error: Path(s) specified in the action for caching do(es) not exist occurs in GitHub Actions when the caching mechanism (either in actions/setup-node or pnpm/action-setup) attempts to save a pnpm store directory that has not been created [1][2][3]. This commonly happens when the workflow job fails to execute a pnpm command (like pnpm install) that would otherwise generate the store directory, or when there is a mismatch between the expected store path and the actual location [1][2][4]. Common causes and solutions include: 1. No Install Step: If your workflow uses cache: 'pnpm' or equivalent but does not actually run pnpm install, the pnpm store is never initialized [1]. Because the post-job step attempts to cache a non-existent path, the job fails [1][2]. - Solution: Ensure pnpm install runs before the job ends [1], or remove the cache configuration if it is unnecessary for that specific job [1]. 2. Path Resolution Mismatch: Sometimes the action fails to correctly identify the path to the pnpm store [5][6]. This can happen if pnpm outputs unexpected logging (e.g., hooks warnings) when running pnpm store path [5][6]. - Solution: Set the environment variable loglevel=warn or loglevel=error in your.npmrc file to silence extra output that interferes with path resolution [5]. Alternatively, ensure you are using the latest version of your setup actions [5][7]. 3. Missing Directory: The caching action expects the directory to exist before it attempts to save it [2]. - Solution: You can explicitly create the directory if it is missing before the caching step triggers, or use a workaround to verify and create the directory if necessary [2]. 4. Version Compatibility: Differences between actions/setup-node and pnpm/action-setup versions can lead to path conflicts [3][6]. - Recommendation: If you encounter this after upgrading (e.g., to pnpm/action-setup v6), check GitHub issues for that specific version, as regressions in path resolution are occasionally reported [3]. Ensure your configuration aligns with the latest documentation, which often recommends using the cache built into pnpm/action-setup rather than layering multiple caching mechanisms [8][7].

Citations:


Move pnpm enablement before setup-node caching

actions/setup-node@v4 with cache: pnpm needs pnpm available when it resolves the store path, so corepack enable should run first or the job can fail.

Proposed fix
       steps:
       - uses: actions/checkout@v4
         with:
           ref: master
+      - name: Enable pnpm
+        run: corepack enable
       - uses: actions/setup-node@v4
         with:
           node-version: 22
           cache: pnpm
-      - name: Enable pnpm
-        run: corepack enable
       - name: Install dependencies
         run: pnpm install --frozen-lockfile
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- name: Enable pnpm
run: corepack enable
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Generate release notes
run: pnpm generate:releases
- name: Stage the marketing site
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- name: Enable pnpm
run: corepack enable
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Generate release notes
run: pnpm generate:releases
- name: Stage the marketing site
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pages.yml around lines 31 - 41, The workflow currently
enables pnpm after actions/setup-node@v4 has already tried to configure pnpm
caching, which can break cache resolution. Update the Pages job so corepack
enable runs before setup-node, then keep the existing cache: pnpm configuration
and subsequent install/release steps unchanged; use the setup-node and Enable
pnpm steps as the anchors when reordering.

Comment thread content/releases/v1.1.0/changelog.json
Comment on lines +1 to +7
a11y: use theme-aware focus ring token instead of hardcoded primary , closes [#151](https://github.com/misty-step/linejam/issues/151).

auth: show error state with retry on guest auth failure , closes [#144](https://github.com/misty-step/linejam/issues/144) [#144](https://github.com/misty-step/linejam/issues/144).

ci: pin trufflehog scanner version.

ci: settle trufflehog workflow.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Strip the raw issue-link markup from the rendered notes.

notes.md is displayed verbatim by the site changelog renderer, so these closes [#…](…) fragments and duplicate links will show up in the published HTML. Keep the bullets as plain prose.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/releases/v1.1.0/notes.md` around lines 1 - 7, The release notes text
in the rendered changelog still contains raw issue-link markup and duplicate
links, so clean up the entries in notes.md to plain prose. Update the release
note bullets to remove the markdown link fragments like closes [`#151`](...) and
repeated references, keeping only readable summary text. Use the existing
release note items in notes.md as the target content to rewrite.


game: make rules data and ship Rhyme Relay + Quick Jam modes.

realtime: make the room unstrandable — rescue, rematch, self-heal.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the spelling in this release note.

unstrandable appears to be a typo and should be corrected before publishing.

🧰 Tools
🪛 LanguageTool

[grammar] ~7-~7: Ensure spelling is correct
Context: ...ick Jam modes. realtime: make the room unstrandable — rescue, rematch, self-heal.

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/releases/v1.6.0/notes.md` at line 7, The release note text contains a
typo in the realtime description: “unstrandable” should be corrected before
publishing. Update the wording in this note entry to use the intended spelling,
and keep the rest of the release note sentence unchanged.

Source: Linters/SAST tools

Comment thread lib/releases/parser.ts
Comment on lines +233 to +245
function writeSiteChangelog(releases: Release[]): void {
const releasesWithNotes: ReleaseWithNotes[] = releases.map((release) => ({
...release,
productNotes: readProductNotes(release),
}));

fs.writeFileSync(
SITE_CHANGELOG_PATH,
renderSiteChangelogHtml(releasesWithNotes)
);

console.log(' ✅ Updated site/changelog.html');
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

ast-grep outline scripts/generate-releases.ts --view expanded

Repository: misty-step/linejam

Length of output: 1157


🏁 Script executed:

rg -n "parseChangelog|writeManifest|writeSiteChangelog|renderSiteChangelogHtml|sortReleasesDescending" scripts/generate-releases.ts

Repository: misty-step/linejam

Length of output: 642


🏁 Script executed:

sed -n '175,255p' scripts/generate-releases.ts

Repository: misty-step/linejam

Length of output: 2268


🏁 Script executed:

sed -n '1,220p' scripts/releases/site-changelog.ts

Repository: misty-step/linejam

Length of output: 6184


🏁 Script executed:

sed -n '1,220p' lib/releases/parser.ts

Repository: misty-step/linejam

Length of output: 5265


🏁 Script executed:

sed -n '266,350p' scripts/generate-releases.ts

Repository: misty-step/linejam

Length of output: 2648


Sort writeSiteChangelog before rendering renderSiteChangelogHtml uses the array order it receives, while writeManifest re-sorts by semver descending. If CHANGELOG.md drifts out of order, site/changelog.html will no longer match the release order shown in /releases.

🧰 Tools
🪛 ast-grep (0.44.1)

[warning] 238-241: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(
SITE_CHANGELOG_PATH,
renderSiteChangelogHtml(releasesWithNotes)
)
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename-typescript)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/generate-releases.ts` around lines 233 - 245, The site changelog is
rendered from the incoming release array order in writeSiteChangelog, so it can
drift from the semver-descending order used by writeManifest and /releases.
Update writeSiteChangelog to sort the releases by semver descending before
mapping to ReleaseWithNotes and passing them to renderSiteChangelogHtml, keeping
the ordering logic consistent with writeManifest and the release display.

Generate site/changelog.html from the same CHANGELOG.md-derived release content as /releases.

Pages runs the generator before upload and also after Release finishes successfully.

Agent: codex-gpt-5.5
Agent-Surface: Codex CLI
Agent-Model: openai/gpt-5.5
Agent-Task: linejam-919
@phrazzld phrazzld force-pushed the linejam-919-site-changelog-release-pipeline branch from 9460853 to 66c126e Compare July 8, 2026 02:20
@cursor

cursor Bot commented Jul 8, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_12136def-bd36-4383-acb2-08c95b54b4de)

@phrazzld phrazzld merged commit 15cf3b1 into master Jul 8, 2026
12 checks passed
@phrazzld phrazzld deleted the linejam-919-site-changelog-release-pipeline branch July 8, 2026 17:25
github-actions Bot pushed a commit that referenced this pull request Jul 8, 2026
# [1.16.0](v1.15.1...v1.16.0) (2026-07-08)

### Bug Fixes

* clarify core loop submit readiness ([#310](#310)) ([e953882](e953882))
* **convex:** drop legacy mode columns ([#298](#298)) ([684de32](684de32))
* **csp:** allow the production Clerk custom domain ([#299](#299)) ([8b8da91](8b8da91)), closes [#291](#291)
* **deps:** remove unused production dependencies ([#313](#313)) ([415bbf1](415bbf1))
* **e2e:** isolate remaining guest session contexts ([#316](#316)) ([866d788](866d788))
* **e2e:** stabilize guest archive and reveal share ([#315](#315)) ([e7a8091](e7a8091)), closes [#308](#308)
* **errors:** ConvexError taxonomy so friendly messages survive production ([#303](#303)) ([9a02299](9a02299))
* **evidence:** wrap static theme evidence server to suppress stale Convex/Canary noise ([b90c6ae](b90c6ae))
* **identity:** guest archive access + themed Clerk auth ([#307](#307)) ([d29f6fd](d29f6fd))
* **releases:** generate site changelog from release content ([#312](#312)) ([15cf3b1](15cf3b1))
* **ui:** lobby roster collision and sticky-chrome heading overlap ([#306](#306)) ([ebce842](ebce842)), closes [#2](#2)
* **ui:** wire themed design tokens ([de6597e](de6597e))

### Features

* **agent:** add CLI + MCP faces over the Convex core, plus the skill ([e3376af](e3376af))
* **artifact:** add poem image and print exports ([#308](#308)) ([23179c1](23179c1))
* **site:** add marketing proof assets ([#311](#311)) ([3e2ab28](3e2ab28))
* **site:** add public marketing site from the Aesthetic site-kit ([7678974](7678974))
* **stage:** host presentation mode — lobby and reveal as a room-scale stage ([#309](#309)) ([af774e1](af774e1))
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 1.16.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant