Skip to content

feat: automated AI-assisted changelog (site + in-app + release notes) - #147

Merged
crs48 merged 6 commits into
mainfrom
feat/automated-changelog-0195
Jun 17, 2026
Merged

feat: automated AI-assisted changelog (site + in-app + release notes)#147
crs48 merged 6 commits into
mainfrom
feat/automated-changelog-0195

Conversation

@crs48

@crs48 crs48 commented Jun 17, 2026

Copy link
Copy Markdown
Owner

Implements exploration 0195 — a fully-automated, AI-assisted changelog surfaced in three places, with embedded UI visuals.

What's in this PR

Phase 2 — Public changelog (the data foundation)

  • site/src/data/changelog.ts — one curated, typed, validated source (mirrors roadmap.ts/compare.ts), backfilled with shipped history
  • /changelog Astro timeline page with hero images, highlights, tag chips, PR links, #id anchors
  • /changelog.json (JSON Feed 1.1) + /changelog.xml (RSS 2.0) via Astro endpoints — the in-app surfaces read these
  • validate:changelog build gate; Changelog added to nav + sidebar

Phase 3 — In-app "What's New"

  • Web PWA: a Sparkles button in the StatusBar opens a panel that lazily fetches the feed (no startup network → editor-ux e2e safe) and lists releases with hero images + new-since markers. lastSeenChangelogId persists in the workbench store; VITE_APP_VERSION injected at build. Pure logic unit-tested (9 tests).
  • Desktop: UpdateNotification now renders the releaseNotes the auto-updater already passed over IPC (previously discarded).

Phase 0 — AI-assisted release notes

  • electron-release.yml pipes commits through a self-contained, fail-open enrichment script (scripts/changelog/ai-release-notes.mjs) — rewrites raw commits into user-facing prose when ANTHROPIC_API_KEY is set, no-op passthrough otherwise. Adds --generate-notes so GitHub's label-categorized PR notes (.github/release.yml) append below.

Phase 4 — Author-time automation

  • AGENTS.md instructs agents to prepend a user-facing changelog.ts entry at PR time — the highest-leverage AI integration (the human prose is good before CI runs).

Design refinements vs. the exploration

  • Feed is served by Astro endpoints from a single data module rather than parsing per-package CHANGELOG.md into a separate gh-pages path — avoids --delete exclude juggling, matches repo conventions.
  • "Last seen" keys on entry id (ISO date), not semver — tracks changelog cadence independent of the rarely-bumped app version.
  • Self-contained AI script instead of the external communique binary — no new CI dependency.

Validation

  • validate:changelog + astro build emit page + both feeds ✓
  • xnet-web typecheck clean; web app builds with version injected ✓
  • ESLint + Prettier clean on changed apps/**
  • 56 changed-tests green (incl. existing workbench state.test.ts) ✓
  • release-notes script passthrough verified (exit 0, no key) ✓

Deferred (noted inline in the doc): proactive new-badge without opening the panel, patch-release skip, per-entry permalink pages, the optional Changesets AI hook, and adding the ANTHROPIC_API_KEY repo secret (admin action).

🤖 Generated with Claude Code

xNet Test and others added 5 commits June 17, 2026 11:16
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Single curated data module (site/src/data/changelog.ts) renders three ways:
a /changelog timeline page, a JSON Feed 1.1 (/changelog.json) and an RSS 2.0
feed (/changelog.xml). Build-time validate:changelog gate mirrors validate:compare.
Backfilled with shipped history. Feeds carry hero images for the in-app surfaces.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Web PWA: a Sparkles button in the StatusBar opens a panel that lazily fetches
the public changelog feed (no startup network → e2e-safe) and lists releases
with hero images and new-since markers. lastSeenChangelogId persists in the
workbench store; VITE_APP_VERSION is injected at build. Pure feed logic is unit
tested (9 tests). Desktop: UpdateNotification now renders the releaseNotes the
auto-updater already passed over IPC instead of discarding them.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
electron-release.yml now pipes the commit list through a self-contained,
fail-open enrichment script (scripts/changelog/ai-release-notes.mjs) that
rewrites raw commits into user-facing prose when ANTHROPIC_API_KEY is set, and
adds --generate-notes so GitHub's label-categorized PR notes (.github/release.yml)
append below. AGENTS.md instructs agents to author user-facing changelog entries
at PR time — the highest-leverage AI integration point.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
All four phases implemented: public changelog page + JSON/RSS feeds, in-app
What's New (web + desktop), AI-assisted electron release notes, and author-time
changelog authoring in AGENTS.md. Deferred items noted inline.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@crs48
crs48 temporarily deployed to pr-147 June 17, 2026 18:54 — with GitHub Actions Inactive
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@crs48
crs48 temporarily deployed to pr-147 June 17, 2026 18:56 — with GitHub Actions Inactive
github-actions Bot added a commit that referenced this pull request Jun 17, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🖼️ UI changes in this PR

No visual differences detected in the changed UI.

CI run

@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Preview removed for PR #147.

github-actions Bot added a commit that referenced this pull request Jun 17, 2026
@crs48
crs48 merged commit f348c82 into main Jun 17, 2026
10 of 11 checks passed
github-actions Bot added a commit that referenced this pull request Jun 17, 2026
errors.push(`[${id}] ${msg}`)
}

function checkRequired(e: ChangelogEntry): void {

import type { ChangelogEntry } from '../data/changelog'

export const SITE_URL = 'https://xnet.fyi'
import type { ChangelogEntry } from '../data/changelog'

export const SITE_URL = 'https://xnet.fyi'
export const CHANGELOG_URL = `${SITE_URL}/changelog`
export const CHANGELOG_URL = `${SITE_URL}/changelog`

/** Absolute URL for an entry's anchor on the changelog page. */
export function entryUrl(entry: ChangelogEntry): string {
}

/** Resolve a hero src (absolute path or full URL) to an absolute URL. */
export function absoluteImage(src: string): string {
})
}

async function enrich(version, commits) {
crs48 added a commit that referenced this pull request Jun 18, 2026
…193/0194) (#201)

The `changelog-section` required check was only added in #164, so the
0192/0193/0194 feature batch merged before it never got changelog
entries. This backfills the 12 user-facing features that were missing,
each dated to its merge day with its PR number and contributors:

| PR | Entry |
|----|-------|
| #138 | A safer foundation for plugins |
| #145 | One trust model across plugins and Labs |
| #146 | Reliability you can see for managed hubs |
| #148 | Drive your own coding agent from xNet |
| #149 | AI that can act on your workspace |
| #150 | Your Labs become AI tools |
| #152 | Your agent can use your workspace |
| #154 | AI edits, right inside the editor |
| #155 | An agentic dev loop in your terminal |
| #158 | Review AI edits before they apply |
| #159 | Kick off agentic code tasks from xNet |
| #162 | Plugins run on the Labs runtime |

Skipped: PRs already covered by umbrella entries (#142 plugin ecosystem,
#144 extensibility fabric, #147 automated changelog, #163 agent panel,
#180 changelog gallery), internal-only changes (#139 schema authz — zero
user-facing effect), and meta/test/docs PRs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants