Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
dbdb176
fix(public): enforce the top-level real-404 deploy proof in the relea…
nish3451 Aug 11, 2026
175e296
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
7800a88
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
c8146ef
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
82f318c
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
12aef8e
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
7eb1249
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
50eb72a
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
bf25c8a
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
641642d
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
a0d8b2c
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 12, 2026
1c5bd07
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 13, 2026
00a354c
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 13, 2026
c9033f2
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 13, 2026
c9b32c8
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 13, 2026
cbdb04a
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 13, 2026
cb04519
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 13, 2026
648e004
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 13, 2026
372a43b
Merge branch 'main' into fix/soft404-bundle-proof-lane1-20260812
nish3451 Aug 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion scripts/prepare-public-deploy-bundle.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
// - post-filter: the bundle must contain none of the forbidden markers and
// must still carry the neutral merged fixes used as deploy proof
// (H2-after-H1 on /promptly/support/ from #18/#20, JSON-LD on /contact/
// from #19, homepage brand disambiguation from #29).
// from #19, homepage brand disambiguation from #29, top-level real 404
// page from #34).
//
// CLI: node scripts/prepare-public-deploy-bundle.mjs --source public --output <dir>
// Defaults: --source ./public, --output to a fresh temp directory (printed).
Expand Down Expand Up @@ -80,6 +81,20 @@ export const NEUTRAL_PROOFS = [
file: "index.html",
test: (html) => html.includes("not affiliated"),
},
{
// The top-level 404 page is what terminates Cloudflare Pages' single-page
// application fallback: without it every unknown URL is served as the
// homepage with HTTP 200 (the soft-404 PR #34 fixed). It must therefore be
// part of the deploy-proof set, not just an existing file: if it is ever
// lost or becomes a homepage clone, the release lane itself fails closed
// instead of publishing a bundle that soft-404s again.
label: "top-level real 404 page (PR #34) - terminates Pages SPA fallback",
file: "404.html",
test: (html) =>
/<title>[^<]*not found[^<]*<\/title>/i.test(html) &&
!html.includes("<title>Tiny Studio | Promptly, Drishti, and 0509") &&
/<meta name="robots" content="noindex">/.test(html),
},
]

// Files that must exist in every bundle.
Expand Down
3 changes: 2 additions & 1 deletion scripts/test-public-deploy-bundle.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
// (PRs #10/#11, snoozed-by-Nish 2026-08-08) and leave nothing behind;
// - every neutral merged public fix used as deploy proof (H2-after-H1 on
// /promptly/support/ #18/#20, JSON-LD on /contact/ #19, homepage brand
// disambiguation #29) must survive the filter untouched.
// disambiguation #29, top-level real 404 page #34) must survive the
// filter untouched.
//
// The bundle is prepared in a temp directory; the worktree is never modified.
import { mkdtempSync, rmSync, existsSync } from "node:fs"
Expand Down