airfleet/airfleet-platform-changelog

Project releases

airfleet-platform-changelog

Release 0.12.2

Added error handling for webhooks and guards for GitHub secrets.

GitHub
View full changelog

Fixed

  • Worker uncaught exception handling: Wrapped the fetch handler's handleWebhook call in a top-level try/catch so any unhandled exception returns a 500 response instead of crashing the Worker with a Cloudflare 1101 error. GitHub retries on 500, so no webhook deliveries are permanently lost.
  • Missing secret guards: Added explicit configuration guards for GITHUB_PRIVATE_KEY (in importPrivateKey) and PAGES_BUILD_HOOK_URL (in maybeTriggerBuild), throwing descriptive errors when either secret is not set rather than a cryptic TypeError.
airfleet-platform-changelog

Release 0.12.1

Fixed GitHub App webhook signature verification to handle empty secrets and ignore draft releases.

GitHub
View full changelog

Fixed

  • GitHub App webhook signature verification: Guarded verifySignature against an undefined or empty GITHUB_WEBHOOK_SECRET, which previously caused crypto.subtle.importKey to throw a DataError (empty HMAC key material) and return a 500 instead of processing the webhook. The worker now throws a descriptive error that is caught and logged clearly. Also added a missing draft release check so draft releases are ignored alongside prereleases.
airfleet-platform-changelog

Release 0.12.0

Introduced local summary generation, changelog stats, and Slack automation while refining UI polish and summary workflows.

GitHub
View full changelog

Added

  • Local summary generation: Added scripts/summarize-local.ts and npm run summarize:local to generate release, weekly, and monthly summaries using a local Ollama model instead of Cloudflare Workers AI. Supports the same --year/--month/--week/--release selectors and --existing/--only modes as the cloud seeding script. An optional --upload flag pushes generated summaries directly to Cloudflare KV. OLLAMA_HOST and OLLAMA_DEFAULT_MODEL env vars configure the Ollama endpoint and default model.
  • Changelog stats: Added a Stats page with all-time repository and release totals, monthly release activity, and per-repository release counts.
  • Seeded previews: Added a preview:seed script to seed live KV data, build the site, and start the local preview server in one command.
  • Selective summary seeding: Added --only flag to npm run data:seed-summaries to control which summary types are regenerated. Accepts a comma-separated list of releases, weekly, and monthly — e.g. --month 2026-04 --only monthly regenerates only the monthly summary without touching release or weekly summaries.
  • Repository exclusion config: Added src/data/excluded-repos.json to exclude repositories from all changelog views. Entries are full repo names (owner/name). airfleet/airfleet-elements-test is excluded by default. Filtering is applied centrally in the data layer across all pages.

Changed

  • Changelog page polish: Refined release-card disclosure controls, simplified the project filter, tightened weekly/monthly summary layouts, added month summaries to archive cards, aligned weekly/monthly archive labels and cards, and added previous/next navigation to archive detail pages.
  • Layout and archive polish: Made the site brand in the header link back to the homepage, refreshed the footer copy to use the product name, surfaced the all-time release count, and aligned archive week pages around the YYYY-Www label plus a clearer week range.
  • Weekly and monthly summaries: Added a Monthly page, promoted summary-aware weekly cards, introduced separate monthly and summary KV paths, and wired the Worker plus a manual backfill workflow to generate Cloudflare-native release/weekly/monthly summaries for closed periods.
  • Summary backfill controls and prompts: Expanded the manual summary seeding workflow and CLI to target a full year, one month, one week, or one release; added explicit refresh/skip/overwrite behavior plus model overrides; switched the shared default model to @cf/zai-org/glm-4.7-flash; and upgraded monthly summaries to use a more narrative grouped prompt.
  • Summary presentation: Tightened release, weekly, and monthly summary prompts to avoid redundant project/version/count phrasing and generic openings; stopped generating unused expanded release summaries; promoted compact summaries on week/month cards; and aligned weekly/monthly landing pages with the archive detail layouts.
  • Monthly summary prompts: Upgraded monthly compact summaries to avoid opening with the month name, year, or any time-period reference — the summary must start with the work itself. Upgraded monthly expanded summaries to produce a richer structured narrative with 2–4 ##-headed sections by capability theme, starting with a one-sentence overview. Prompt version bumped to monthly-v6 with increased token budget.
  • Release card repo label: The repository label on release cards is now a link to the repository's release history page (/repo/{owner}/{name}).
  • Slack digest automation: Added weekly and monthly GitHub Actions workflows plus CLI helpers that post stored summaries to Slack through a Slack app bot, with manual period overrides for reruns.
  • Docs and workflow guidance: Updated README.md and AGENTS.md for the summaries workflow, release checklist, and changelog expectations.

Fixed

  • Homepage load-more page count: Capped getRequiredPageCount() by the total matching release count so filtering to a repo with fewer releases than the visible limit no longer requests non-existent pages and triggers 404 errors.
  • Monthly week overlap filter: Normalized both sides of the week/month overlap comparison to YYYY-MM-DD so full ISO timestamps stored in monthly index items no longer cause boundary weeks to be incorrectly excluded.
  • Markdown protocol-relative URL sanitization: sanitizeUrl now explicitly rejects protocol-relative URLs (//example.com) instead of normalizing them to http: and passing the allowlist check.
  • Weekly Slack digest formatting: Applied the same markdown-to-mrkdwn conversion used by the monthly digest so weekly summaries render bold text, headings, and links correctly in Slack instead of showing raw markdown syntax.
  • KV data download safety: downloadKvData now only deletes public/data after confirming the KV namespace contains keys, preventing an empty build when credentials point at a wrong or temporarily empty namespace.
airfleet-platform-changelog

Release 0.11.0

Historical seed workflow now seeds all repos by default and partial refreshes no longer hide unrelated release history.

GitHub
View full changelog

Changed

  • Historical Seed Workflow: Updated seed-historical.yml so the repos input is optional. Leaving it blank now seeds all repos in the selected organization, while still supporting targeted repo refreshes.

Fixed

  • Historical Seed Partial Refreshes: Updated seed-historical to merge selected repos into the existing KV snapshot before rebuilding shared indexes, so targeted backfills no longer hide unrelated release history from the homepage, weekly views, or archive pages.
airfleet-platform-changelog

Release 0.10.0

Added manual workflow dispatch support to allow rerunning production deployments from GitHub Actions while blocking non-main branch runs.

GitHub
View full changelog

Changed

  • Deploy Workflow: Added manual workflow_dispatch support to deploy.yml so production deploys can be rerun from GitHub Actions, while blocking manual runs from non-main branches.
airfleet-platform-changelog

Release 0.9.1

Updated the seed workflow to use SEED_GITHUB_TOKEN and support legacy environment variables to fix CI seeding.

GitHub
View full changelog

Fixed

  • Historical Seed Workflow: Switched the manual seed workflow to the GitHub Actions-compatible SEED_GITHUB_TOKEN secret name and taught seed-historical to accept both SEED_GITHUB_TOKEN and the legacy GITHUB_SEED_TOKEN env vars so CI seeding works again.
airfleet-platform-changelog

Release 0.9.0

Updated the Seed Historical Workflow to use a shared Node version, clarified the repos input description, and fixed spelling errors.

GitHub
View full changelog

Changed

  • Seed Historical Workflow: Improved .github/workflows/seed-historical.yml to use actions/checkout@v6, a shared NODE_VERSION env variable, and a clarified repos input description that specifies repo names (not owner/repo format). Fixed "organisation" spelling to "organization".
airfleet-platform-changelog

Release 0.8.0

Added a manual workflow to seed historical data and guidelines to omit unreleased changes.

GitHub
View full changelog

Added

  • Seed Historical Workflow: Added .github/workflows/seed-historical.yml, a manual workflow_dispatch workflow to bootstrap KV data from historical GitHub releases for specified repos and organisation. The org input defaults to airfleet; repos is required with no default.
  • CHANGELOG Guidelines: Added a guideline to README.md to omit unreleased changes that are not meaningful to users (e.g. refactorings or bug fixes for code that was never released).
airfleet-platform-changelog

Release 0.7.0

Added a Node 24-based development container and upgraded dependencies, while fixing preview build data loading.

GitHub
View full changelog

Added

  • Development Container: Added .devcontainer/devcontainer.json with a Node 24-based VS Code dev container, GitHub CLI, recommended Astro/Biome/TOML/PR extensions, and a post-create bootstrap that runs npm ci and npm run build:preview.

Changed

  • Dependencies: Upgraded Astro 5.17.16.1.9, Marked 12.0.018.0.2, Biome 2.3.142.4.13, SST 3.17.383.19.3, and tsx 4.8.14.21.0.

Fixed

  • Preview Build Data Loading: Fixed server-side data reads to resolve from the repository public/ directory during Astro builds so preview builds can find generated archive data instead of looking under dist/public/.
airfleet-platform-changelog

Release 0.6.1

Hardcoded the project name in the deploy workflow to fix a deployment failure.

GitHub
View full changelog

Fixed

  • Deploy Workflow: Hardcoded the Cloudflare Pages project name (airfleet-platform-changelog) in deploy.yml instead of referencing the unset vars.CLOUDFLARE_PAGES_PROJECT_NAME variable, which caused wrangler pages deploy to fail with "Must specify a project name."
airfleet-platform-changelog

Release 0.6.0

Added a reusable BrandLogo component, refreshed the design system and release presentation, and fixed lazy-loaded rendering inconsistencies.

GitHub
View full changelog

Added

  • Brand Mark: Added a reusable BrandLogo component and matching favicon so the redesigned header and footer share a consistent Airfleet identity.

Changed

  • Aviation Heritage Design System: Refreshed the global layout with a warmer palette, refined typography, updated spacing, and shared card, pill, and focus styles across the site.
  • Release Presentation: Redesigned release cards and homepage loading controls with stronger metadata hierarchy, GitHub action pills, and improved release-note typography.
  • Repository Filter Styling: Restyled the homepage project filter around the shipped Choices.js searchable select so the redesign keeps type-ahead filtering while matching the new visual system.
  • Weekly and Archive Browsing: Updated weekly summaries, archive listings, and archive detail views to use the new card treatments, spacing, and metadata styling.

Fixed

  • Lazy-loaded Release Rendering: Escaped client-rendered release fields and aligned lazy-loaded date formatting with server-rendered release cards for safer, more consistent homepage results.
airfleet-platform-changelog

Release 0.5.0

Added a script to bulk-delete data keys and removed the manual clearing workflow.

GitHub
View full changelog

Added

  • KV Clear Script: Implemented npm run data:clear to list and bulk-delete data/* keys from Cloudflare KV, with explicit confirmation plus env-var or CLI credential support.

Changed

  • KV Admin Utilities: Expanded src/integrations/kv-client.ts with shared key-listing exports and bulk-delete support so admin scripts can reuse the same Cloudflare KV client.
  • Data Clearing Documentation: Updated README.md to document CLI-based KV clearing and remove the old workflow-based instructions.

Removed

  • Manual Clear Workflow: Removed .github/workflows/clear-data.yml in favor of the standalone npm run data:clear admin script.
airfleet-platform-changelog

Release 0.4.0

Added a searchable select for filtering repositories and a PR checklist to agents.

GitHub
View full changelog

Added

  • Repository Filter Search: Replaced the homepage's custom project dropdown with a Choices.js-powered searchable select so repositories can be filtered faster with type-ahead search.

Changed

  • AI Agent PR Guidance: Added a pull request checklist to AGENTS.md so repository agents consistently run verifications and update release/docs files before opening a PR.
  • Dependencies: Upgraded choices.js to 11.2.2.

Fixed

  • Homepage Project Filtering: Reapplied the selected project filter after lazy-loading additional release cards and scoped the filter header mobile media query so it does not affect unrelated layouts.
airfleet-platform-changelog

Release 0.3.0

Updated the production deploy workflow to explicitly deploy Cloudflare Pages after the production build and Worker deployment.

GitHub
View full changelog

Changed

  • Production Deploy Workflow: Updated deploy.yml to deploy Cloudflare Pages explicitly after the production build and Worker deployment, using the configured Pages project name and branch.
airfleet-platform-changelog

Release 0.2.2

Clarified setup documentation requirements for shell environment variables and runtime secrets.

GitHub
View full changelog

Fixed

  • Setup Documentation: Clarified that npm run sst:secret:set requires CLOUDFLARE_API_TOKEN and CLOUDFLARE_DEFAULT_ACCOUNT_ID to be exported into the shell first, and documented the separate Wrangler-managed Worker secrets (GITHUB_APP_ID, GITHUB_PRIVATE_KEY, GITHUB_WEBHOOK_SECRET, PAGES_BUILD_HOOK_URL) required at runtime.
airfleet-platform-changelog

Release 0.2.1

Updated the Worker name in wrangler.toml to match the Cloudflare Dashboard.

GitHub
View full changelog

Fixed

  • Updated Worker name in wrangler.toml to match the deployed Worker name in the Cloudflare Dashboard.
airfleet-platform-changelog

Release 0.2.0

Added AI Agent Guidance documentation and expanded release process documentation.

GitHub
View full changelog

Added

  • AI Agent Guidance: Added AGENTS.md with repository-specific instructions for coding agents, including architecture, commands, conventions, KV data structure, and CI expectations.

Changed

  • Release Process Documentation: Expanded README.md with the automated release workflow, including .airfleet-release bump selection, required CHANGELOG.md Unreleased entries, and how releases are published after merging to main.
airfleet-platform-changelog

Release 0.1.0

Initial homepage, weekly view, archive routes, SST infrastructure, GitHub workflows, and data management scripts are introduced.

GitHub
View full changelog

Added

  • Homepage Experience: Initial homepage implementation includes a searchable repository dropdown (replacing static filter pills), plus lazy loading with 20 releases on first render and 10 per additional batch.
  • Weekly View: Introduced a weekly page that highlights the current week with full release details and shows the past 3 months as compact, clickable week cards.
  • Archive Information Architecture: Added archive routes and navigation based on week start date using /archive/{year}/{month}/{week} URLs, with year/month browsing and automatic week-level detail pages in a single-column archive layout.
  • Airfleet Branding System: Added Airfleet visual identity with dark blue (#05041F), accent purple (#6079FF), and self-hosted Satoshi typography.
  • Infrastructure as Code: Added SST v3 infrastructure for Cloudflare resources (including KV and secrets) with a hybrid setup that uses wrangler.toml for Worker and Queue bindings.
  • GitHub Workflows:
    • deploy.yml - Production deployment pipeline on push to main with build before deploy.
    • clear-data.yml - Manual admin workflow to clear KV data.
    • test.yml - CI checks for main and release/** branches (lint and build), plus manual runs.
    • lint-release-assets.yml - Pull request and manual validation for release versioning and changelog assets.
    • release-github.yml - Automated GitHub release workflow on push to main (and manual runs) using release-it with Keep a Changelog integration.
  • Pull Request Previews: Handled by the Cloudflare Pages native GitHub integration — no workflow file required. Cloudflare Pages builds and deploys a preview URL automatically on every PR.
  • Code Quality Tooling: Added Biome linting/formatting for Astro and TypeScript, including npm run lint and npm run format commands.
  • Astro Build Integration: Added src/integrations/seed-data.mjs — a custom Astro integration that runs at astro:build:start to download all data/* keys from Cloudflare KV into public/data/ before static page generation. Requires CLOUDFLARE_API_TOKEN, CLOUDFLARE_DEFAULT_ACCOUNT_ID, and KV_NAMESPACE_ID; gracefully warns and skips when credentials are absent, allowing local and test builds to proceed with fake or pre-existing data.
  • Shared KV Client: src/integrations/kv-client.ts as the single source of truth for Cloudflare KV access (key listing with pagination, value fetching, parallel file writes, and single-key writes). Both the Astro integration and the standalone scripts/seed-data.ts import from this module, eliminating duplication.
  • Historical Data Seed: scripts/seed-historical.ts — one-time CLI to bootstrap the KV store from GitHub. Fetches all non-prerelease releases for the specified repos or all non-archived repos in an org, computes every KV artifact the worker would produce (all-releases, repo index, per-repo, weekly index/details, archive hierarchy), and writes them to Cloudflare KV in parallel batches. Uses GITHUB_SEED_TOKEN env var (GitHub PAT) plus Cloudflare credentials from .env. Supports --repos, --org, --github-token, --account-id, --namespace-id, --api-token CLI flags (npm run data:seed-historical).
  • Build Scripts: npm run build fetches live KV data via the Astro integration when credentials are set. npm run build:preview generates fake data then builds, for local development and CI test runs without KV access. npm run data:seed runs the standalone KV downloader outside of a build. npm run data:seed-historical bootstraps KV with historical releases from GitHub.
  • CI Workflows:
    • deploy.yml invokes npm run build with KV_NAMESPACE_ID (repository variable) and Cloudflare credentials, producing production builds from live KV data.
    • test.yml uses npm run build:preview so no KV credentials are required for CI test runs.
  • Data Management Scripts:
    • seed-data.ts - Standalone CLI to download KV data to public/data/ outside of a build (npm run data:seed). Accepts credentials via env vars or --account-id, --namespace-id, --api-token flags.
    • clear-data.ts - Admin CLI tool to clear KV data (npm run data:clear).
  • Project Documentation: Added comprehensive README guidance for setup, development, deployment, and troubleshooting.