Skip to content
This repository was archived by the owner on Sep 28, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
9b0589a
fix(public): point brief-requested links at clean non-307 paths
nish3451 Aug 11, 2026
825946b
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
5d365f6
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
edc128a
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
47d42e7
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
d528c77
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
b92c1af
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
7fe35ee
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
db3f3bd
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
e30341b
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
9e5b413
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
c04def9
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
28dda3e
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
8fbedbc
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
babd9eb
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
84070b3
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
cb93c9e
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 12, 2026
169b238
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
9aaa581
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
314482a
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
bf66463
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
7b629b5
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
db4c381
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
e362999
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
f463517
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
6a25b93
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
798f1ea
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
eb63fb6
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
b5fa4cd
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
4047a7f
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
ce8aeec
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
8da0d64
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
1b4139a
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
4c81fd4
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
c1cd4fb
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
ef53651
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
0659838
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
9cab3ba
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
6409b3e
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
57cbb3f
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
61e4a80
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
336eed4
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
b47e92d
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
a68969b
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
f6d7b25
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
dc8e659
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 13, 2026
601cdbe
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
0189c35
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
71d8b95
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
5359b52
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
bb1c217
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
f5589ba
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
30c2673
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
6682409
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
24e06b6
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
74d21a3
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
3144763
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 2026
3459a9d
Merge branch 'main' into fix/brief-requested-clean-links-lane1
nish3451 Aug 14, 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
10 changes: 5 additions & 5 deletions public/brief-requested.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@
<body>
<div class="wrap">
<nav>
<a class="logo" href="index.html">Tiny<span>Studio</span></a>
<a class="logo" href="/">Tiny<span>Studio</span></a>
<div class="navlinks">
<a href="audit.html">The appraisal</a>
<a href="agents.html">The desk</a>
<a href="pricing.html">Pricing</a>
<a href="/audit">The appraisal</a>
<a href="/agents">The desk</a>
<a href="/pricing">Pricing</a>
</div>
</nav>

Expand All @@ -52,7 +52,7 @@ <h1>That's it. <em>Nothing else needed from you.</em></h1>
</div>
</div>

<a class="back" href="index.html">Back to the site</a>
<a class="back" href="/">Back to the site</a>
</div>

<footer>
Expand Down
15 changes: 9 additions & 6 deletions scripts/check-site.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1508,17 +1508,20 @@ for (const [pageName, pageHtml, pageUrl] of structuredDataPages) {
// point at the final destination URL: the dogfood run reported every .html
// navigation target on home ("index.html" -> "/", "audit.html" -> "/audit",
// "agents.html" -> "/agents", "pricing.html" -> "/pricing", "specimen.html" ->
// "/specimen") as a redirecting internal link. The five public pages must
// therefore point every page link at the clean URL the worker serves, never
// at a .html file that resolves to it. These are STATIC SOURCE GUARDS (regex
// over the served files): CI has no browser, so they assert the .html target
// shape cannot return, not that the redirects are absent on the network.
// "/specimen") as a redirecting internal link. The five public pages (and the
// /brief-requested post-signup page, which carries the same logo/nav/back
// shell) must therefore point every page link at the clean URL the worker
// serves, never at a .html file that resolves to it. These are STATIC SOURCE
// GUARDS (regex over the served files): CI has no browser, so they assert the
// .html target shape cannot return, not that the redirects are absent on the
// network.
const internalLinkPages = [
["homepage", siteHome],
["audit page", siteAudit],
["desk page", read("public/agents.html")],
["pricing page", read("public/pricing.html")],
["specimen page", read("public/specimen.html")]
["specimen page", read("public/specimen.html")],
["brief-requested page", read("public/brief-requested.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.

P2 Badge Normalize root-relative URLs in the new link guard

When a future edit on this newly guarded page uses a root-relative redirecting URL such as href="/audit.html", the check still passes: target remains /audit.html, while htmlPageTargets only contains the bare audit.html key. This permits the same 307-producing link shape the guard claims to prevent; normalize leading / and ./ forms (or parse the pathname) before the lookup.

Useful? React with 👍 / 👎.

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 Add brief-requested.html to the forbidden targets

When any guarded page contains href="brief-requested.html", the check still passes because that target is absent from htmlPageTargets, even though the deployed .html URL redirects to /brief-requested. Adding this page only to internalLinkPages scans links originating from it; it does not guard links pointing to it. I confirmed this by inserting such an anchor into public/index.html and running npm run check, which still passed.

Useful? React with 👍 / 👎.

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 single-quoted href values in the new guard

When a future edit on the newly guarded confirmation page uses valid single-quoted markup such as href='audit.html', the downstream href="..." matcher returns an empty target, so npm run check passes while browsers still follow the redirecting .html URL. Parse both HTML quote styles before comparing the target so adding this page actually prevents the link shape from returning.

Useful? React with 👍 / 👎.

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 Strip queries before checking redirecting page targets

When a link on the newly guarded confirmation page includes a query string, such as href="audit.html?source=confirmation", href.split("#")[0] remains audit.html?source=confirmation, so the lookup misses it and npm run check passes (confirmed with this negative probe). The browser still requests the redirecting /audit.html pathname regardless of the query; parse the href pathname or strip both query and fragment components before comparing it.

Useful? React with 👍 / 👎.

];

const htmlPageTargets = {
Expand Down
Loading