From c027508b972ccd7cb875d681bc7776ccce04d50d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Thu, 9 Jul 2026 00:54:19 -0400 Subject: [PATCH] Retire the 1.0.0 installer and take dead macOS links off the site Deleting the old Windows build from R2 surfaced something worse: the two macOS DMG links had no objects behind them at all - the mac builds were never uploaded, so every mac download click has been a 404. - R2 now holds exactly one desktop artifact: AC/AgentCompany-1.1.0-x64 .exe (old exe deleted on operator instruction, verified 404) - The release manifest drops the macOS entry with a comment explaining how it comes back (upload real DMGs first); footer mac links removed; hero reads "Available on Windows - macOS build coming soon" - Root fix in platform-support: FAQ/JSON-LD copy now derives from whatever platforms the manifest actually ships instead of hard-requiring macos+windows, so the site structurally cannot advertise a platform without a real artifact behind it - Landing e2e updated (>=1 tracked asset) and green; redeployed and verified live: no r2.dev leaks, no mac links, coming-soon copy shown, tracked download 302s to the 1.1.0 installer --- landing/components/layout/footer.tsx | 2 -- landing/lib/platform-support.ts | 27 ++++++++++++++++---------- landing/lib/product-narrative.ts | 4 ++-- landing/lib/release-links.generated.ts | 25 +++--------------------- landing/tests/e2e/landing.spec.ts | 4 +++- 5 files changed, 25 insertions(+), 37 deletions(-) diff --git a/landing/components/layout/footer.tsx b/landing/components/layout/footer.tsx index 5d62babc..68e04c7b 100644 --- a/landing/components/layout/footer.tsx +++ b/landing/components/layout/footer.tsx @@ -21,8 +21,6 @@ const footerGroups: { title: string; links: FooterLink[] }[] = [ { title: "Downloads", links: [ - { label: "Apple Silicon", href: getTrackedDownloadHref("macos-arm64-dmg"), external: true }, - { label: "Intel Mac", href: getTrackedDownloadHref("macos-x64-dmg"), external: true }, { label: "Windows Installer", href: getTrackedDownloadHref("windows-x64-installer"), external: true }, ], }, diff --git a/landing/lib/platform-support.ts b/landing/lib/platform-support.ts index 3879d457..e6659995 100644 --- a/landing/lib/platform-support.ts +++ b/landing/lib/platform-support.ts @@ -14,26 +14,33 @@ export type PlatformSupportSummary = { export const platformSupportSummary = buildPlatformSupportSummary(platformDownloads); +/** + * Copy derives from whatever platforms the release manifest actually ships, + * so the download matrix stays the single source of truth and the site can + * never advertise a platform without a real artifact behind it. + */ export function buildPlatformSupportSummary(downloads: PlatformDownload[]): PlatformSupportSummary { - const macos = requirePlatform(downloads, "macos"); - const windows = requirePlatform(downloads, "windows"); - + if (downloads.length === 0) { + throw new Error("Release download metadata must include at least one platform."); + } return { downloadAnswer: `Use the download section on this page to choose the build that matches your architecture and package format. ` + - `${formatDownloadSentence(macos)} ${formatDownloadSentence(windows)}`, + downloads.map(formatDownloadSentence).join(" "), platformAnswer: - `AgentCompany is available on ${formatAvailability(macos)} and ${formatAvailability(windows)}. ` + + `AgentCompany is available on ${joinWithAnd(downloads.map(formatAvailability))}. ` + `It is built with Electron and the desktop feature set stays aligned across all supported targets.`, }; } -function requirePlatform(downloads: PlatformDownload[], id: PlatformDownload["id"]): PlatformDownload { - const platform = downloads.find((download) => download.id === id); - if (!platform) { - throw new Error(`Missing ${id} release download metadata.`); +function joinWithAnd(parts: string[]): string { + if (parts.length === 1) { + return parts[0]; } - return platform; + if (parts.length === 2) { + return `${parts[0]} and ${parts[1]}`; + } + return `${parts.slice(0, -1).join(", ")}, and ${parts.at(-1)}`; } function formatDownloadSentence(download: PlatformDownload): string { diff --git a/landing/lib/product-narrative.ts b/landing/lib/product-narrative.ts index f203e780..300a2c99 100644 --- a/landing/lib/product-narrative.ts +++ b/landing/lib/product-narrative.ts @@ -6,7 +6,7 @@ export const landingHeroNarrative = { titleLine2: "from Your Desktop", description: "Run AI CEO by default, switch to AI Co-Founder for human-reviewed decisions, and launch the first mission from a local desktop setup.", - availability: "Available on macOS and Windows", + availability: "Available on Windows · macOS build coming soon", } as const; export const onboardingFlowNarrative = { @@ -75,6 +75,6 @@ export const landingStructuredDataNarrative = { "AI CEO autonomous operating mode", "AI Co-Founder human-reviewed operating mode", "Local-first SQLite storage", - "Desktop releases for macOS and Windows", + "Desktop releases for Windows (macOS build coming soon)", ], }; diff --git a/landing/lib/release-links.generated.ts b/landing/lib/release-links.generated.ts index e78d1e8e..f21312d8 100644 --- a/landing/lib/release-links.generated.ts +++ b/landing/lib/release-links.generated.ts @@ -18,29 +18,10 @@ export type PlatformDownload = { export const releaseVersion = "1.1.0"; +// macOS is intentionally absent: its builds were never uploaded to R2, so +// every DMG link 404'd. Re-add the entry (and the footer links) only after +// the mac machine actually ships AC/AgentCompany--*.dmg. export const platformDownloads: PlatformDownload[] = [ - { - id: "macos", - packageDescription: "signed and notarized DMG builds", - title: "macOS", - note: "Signed + notarized DMG builds", - assets: [ - { - architectures: ["arm64"], - id: "macos-arm64-dmg", - label: "Apple Silicon DMG", - href: "https://pub-a19a3a2c1d2e4fa3a9c120b184024448.r2.dev/AC/AgentCompany-1.0.0-arm64.dmg", - note: "arm64 · v1.0.0", - }, - { - architectures: ["x64"], - id: "macos-x64-dmg", - label: "Intel Mac DMG", - href: "https://pub-a19a3a2c1d2e4fa3a9c120b184024448.r2.dev/AC/AgentCompany-1.0.0.dmg", - note: "x64 · v1.0.0", - }, - ], - }, { id: "windows", packageDescription: "a signed NSIS installer build", diff --git a/landing/tests/e2e/landing.spec.ts b/landing/tests/e2e/landing.spec.ts index 408f5b5d..41df6ca7 100644 --- a/landing/tests/e2e/landing.spec.ts +++ b/landing/tests/e2e/landing.spec.ts @@ -40,8 +40,10 @@ test("download links use the tracked endpoint and never expose R2 URLs", async ( await page.goto("/"); await scrollThrough(page); + // Every advertised platform asset routes through the tracked endpoint + // (currently Windows only - macOS returns once its build ships to R2). const tracked = page.locator('#download a[href^="/api/download?asset="]'); - expect(await tracked.count()).toBeGreaterThanOrEqual(3); + expect(await tracked.count()).toBeGreaterThanOrEqual(1); // Real release URLs must stay behind the server-side redirect. expect(await page.locator('a[href*="r2.dev"]').count()).toBe(0);