Skip to content

Commit 1095047

Browse files
snapsynapseclaude
andcommitted
Exempt non-HTML sitemap entries from production page assertions
The production checker applied HTML assertions to the assistant guide, reporting three defects for a plain-text surface that cannot carry a canonical link or JSON-LD. It now honours nonHtmlSitemapPaths the same way the offline checker does, checking reachability only. Records the 2026-08-28 machine-lane observations: both contracts clean against deployed 1484e31, with live date agreement spot-checked. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 1484e31 commit 1095047

2 files changed

Lines changed: 19 additions & 4 deletions

File tree

‎ops/search-indexing.md‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,17 @@ because provider state later changed; add a new dated file instead.
149149

150150
## Current classified state
151151

152-
As of 2026-08-20. Evidence: [`ops/search/GoogleSearchConsole/2026-08-20/audit.md`](search/GoogleSearchConsole/2026-08-20/audit.md).
152+
Machine lanes as of 2026-08-28; console lane as of 2026-08-20. Console
153+
evidence: [`ops/search/GoogleSearchConsole/2026-08-20/audit.md`](search/GoogleSearchConsole/2026-08-20/audit.md).
153154

154155
| Lane | Date | Result |
155156
|---|---|---|
156-
| Repository and generated artifact | 2026-08-20 | Pass. All gates green at `49c9317`. |
157-
| Production HTTP | 2026-08-20 | Pass against deployed `93feb3d`, spot-checked on `49c9317`. 24 of 24 sitemap URLs 200, canonical-exact, unique non-empty descriptions. |
158-
| Google Search Console | 2026-08-20, Page indexing report dated 2026-08-16 | Five defects resolved. Two rows pending recrawl. |
157+
| Repository and generated artifact | 2026-08-28 | Pass. All gates green at `1484e31`, CI green on Node 18 and 20. Offline search contract: 24 sitemap pages, 0 defects. |
158+
| Production HTTP | 2026-08-28 | Pass against deployed `1484e31`. Production search contract: 24 sitemap pages, 0 defects, 0 infrastructure failures. Spot-checked live JSON-LD and sitemap `lastmod` / `article:modified_time` / JSON-LD `dateModified` agreement on `/demo/container/nist-csf/`. |
159+
| Google Search Console | 2026-08-20, Page indexing report dated 2026-08-16 | Five defects resolved. Two rows pending recrawl. Not re-observed since; see "Next review". |
160+
161+
Both machine lanes are now contract-checked rather than hand-verified. The
162+
2026-08-20 observations they replace remain in the dated evidence file above.
159163

160164
Provider state at observation: 2 indexed, 8 not indexed, 10 known URLs against
161165
24 declared targets. Both sitemaps now read Success on 2026-08-20 with 2 and 22

‎scripts/check-production-search.mjs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
// change_summary: Revalidated unchanged for the v5 bundle; the portable repository contract remains v4.
88
// Upstream: portfolio-search-indexing-audit contract v4.
99
// Release-triggered HTTP validation. Exit 2 means infrastructure is unavailable.
10+
// Local adaptation for this repository: sitemap entries listed in
11+
// config.nonHtmlSitemapPaths (the assistant guide, an unresolved sitemap-policy
12+
// decision) are checked for reachability only, matching scripts/check-search.mjs.
1013
'use strict';
1114

1215
import fs from 'node:fs';
@@ -262,6 +265,14 @@ function lastmodAgreement(html, url, sitemapLastmod) {
262265

263266
async function checkPage(canonical) {
264267
const target = deployedUrl(canonical);
268+
// Non-HTML sitemap entries (this property publishes the assistant guide as
269+
// one) are checked for reachability only; canonical, JSON-LD, and noindex
270+
// assertions do not apply to a plain-text surface.
271+
if ((config.nonHtmlSitemapPaths || []).includes(new URL(canonical).pathname)) {
272+
const plain = await fetchText(target, { contentTypes: ['text/plain'] });
273+
if (plain && plain.response.url !== target) report('defect', `${target}: final URL is ${plain.response.url}`);
274+
return;
275+
}
265276
const result = await fetchText(target, { contentTypes: ['text/html'] });
266277
if (!result) return;
267278
if (result.response.url !== target) report('defect', `${target}: final URL is ${result.response.url}`);

0 commit comments

Comments
 (0)