refactor: retire the hand-written site
Deletes the pre-Astro pages, scripts, and stylesheets that the migration replaced, and moves the ones it did not replace out of the way. Deleted (32 files): app.js, responsive.css, landing.css, rules/app.js, rules/styles.css, skills/app.js, the ten route index.html files, and the root hands-on/ copy, which is byte-identical to public/hands-on/ -- the one the build actually ships. Moved to legacy/ (12 files): styles.css, full-guide/audit.css, chapters.css, skills/styles.css, skills-review/styles.css, skills-review/change-lens.css, and the skills-review/app.js module graph. These are not dead. The Astro pages import them and the build fails without them, which the plan had not accounted for. They go to legacy/ rather than src/ because check-tokens.mjs sweeps src, and these files are full of raw hex and unnamed breakpoints: moving one into src/ should mean migrating it to tokens in the same change, not adding a scan exclusion. The prettier, stylelint, and eslint ignore lists that already named these files at their old paths now name legacy/ instead. verify.mjs no longer reads app.js. The 102 Portuguese strings were extracted from its translations.pt object before deletion into .agents/snapshots/full-guide-pt.json -- a legacy capture, not a snapshot of the Astro build, so the assertion still compares against an independent source. The brace-matching helper's assertion is replaced by one that rejects an empty snapshot entry, without which trimming the snapshot would make the presence check pass vacuously. Count stays at 84. audit-ui.mjs reads the ten pages from dist/ and resolves Astro's base-absolute hrefs against it. Before deleting anything, rendered-text-diff was run across all ten routes plus both Portuguese pages: every one at parity, 0 missing and 0 extra. That comparison is not repeatable once the legacy files are gone. computed-style-diff on /full-guide/ stays at 32 differences, so the moves are style-neutral. Docs updated to match: README, AGENTS.md, GATES.md, the architecture context, the operations guide's lab instructions, and the three skills that told you to serve the vanilla site. Publishing is not part of this commit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+10
-26
@@ -46,7 +46,7 @@ const source = {
|
||||
read('src/content/providers/claude.json'),
|
||||
read('src/content/providers/gemini.json'),
|
||||
].join('\n'),
|
||||
starter: read('hands-on/starter/app.js'),
|
||||
starter: read('public/hands-on/starter/app.js'),
|
||||
voteService: read('vote-service/main.go'),
|
||||
ndoReview: read('src/content/reviews/ndo-repro.md'),
|
||||
};
|
||||
@@ -73,32 +73,16 @@ if (rendered(html.starter) !== snapshot('hands-on/starter.txt'))
|
||||
if (rendered(html.labRules) !== snapshot('hands-on/rules.txt'))
|
||||
throw new Error('rules lab rendered-text snapshot changed');
|
||||
|
||||
const braceMatch = (source, open) => {
|
||||
let depth = 0;
|
||||
let quote = '';
|
||||
let escaped = false;
|
||||
for (let index = open; index < source.length; index += 1) {
|
||||
const character = source[index];
|
||||
if (quote) {
|
||||
if (escaped) escaped = false;
|
||||
else if (character === '\\') escaped = true;
|
||||
else if (character === quote) quote = '';
|
||||
continue;
|
||||
}
|
||||
if (character === "'" || character === '"' || character === '`') quote = character;
|
||||
else if (character === '{') depth += 1;
|
||||
else if (character === '}' && --depth === 0) return index;
|
||||
}
|
||||
throw new Error('could not brace-match legacy Portuguese translations');
|
||||
};
|
||||
const legacyGuide = read('app.js');
|
||||
const translationsStart = legacyGuide.indexOf('const translations =');
|
||||
const objectStart = legacyGuide.indexOf('{', translationsStart);
|
||||
const objectEnd = braceMatch(legacyGuide, objectStart);
|
||||
const translations = Function(`return (${legacyGuide.slice(objectStart, objectEnd + 1)})`)();
|
||||
const portuguese = Object.values(translations.pt).map(rendered);
|
||||
// The 102 Portuguese strings were extracted verbatim from the legacy
|
||||
// `app.js` `translations.pt` object at cutover, before that file was deleted.
|
||||
// This is a legacy capture, not a snapshot of the Astro build: it still asserts
|
||||
// against an independent source, which is the whole point of the check.
|
||||
const portuguese = JSON.parse(read('.agents/snapshots/full-guide-pt.json')).map(rendered);
|
||||
if (portuguese.length !== 102)
|
||||
throw new Error('full-guide Portuguese source no longer has 102 translated strings');
|
||||
throw new Error('full-guide Portuguese snapshot no longer has 102 translated strings');
|
||||
// Without this, trimming the snapshot would make the check below pass vacuously.
|
||||
if (portuguese.some((value) => !value.trim()))
|
||||
throw new Error('full-guide Portuguese snapshot has an empty entry');
|
||||
if (!portuguese.every((value) => rendered(html.guide).includes(value)))
|
||||
throw new Error('built full-guide lost a Portuguese translation');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user