init project
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
import { readFile, stat } from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import { fail, pass, repositoryRoot } from './lib.mjs';
|
||||
|
||||
const errors = [];
|
||||
const pagePath = path.join(repositoryRoot, 'src/app/[locale]/page.tsx');
|
||||
const cssPath = path.join(repositoryRoot, 'src/app/[locale]/page.module.css');
|
||||
const modelPath = path.join(repositoryRoot, 'src/content/homepage-model.ts');
|
||||
const page = await readFile(pagePath, 'utf8');
|
||||
const css = await readFile(cssPath, 'utf8');
|
||||
const model = await readFile(modelPath, 'utf8');
|
||||
|
||||
for (const sectionId of ['product', 'workflow', 'modules', 'pricing', 'faq']) {
|
||||
if (!page.includes(`id="${sectionId}"`))
|
||||
errors.push(`Homepage section #${sectionId} is missing.`);
|
||||
}
|
||||
|
||||
for (const component of [
|
||||
'ActionLink',
|
||||
'Accordion',
|
||||
'CTA',
|
||||
'Comparison',
|
||||
'FeatureCard',
|
||||
'ProductPreview',
|
||||
'SectionHeader',
|
||||
'Workflow',
|
||||
]) {
|
||||
if (!page.includes(component))
|
||||
errors.push(`Homepage does not compose the approved ${component}.`);
|
||||
}
|
||||
|
||||
if (!page.includes('buildHomepageContent'))
|
||||
errors.push('Homepage does not consume the typed route content model.');
|
||||
if (!page.includes("localizedPath('home', locale)"))
|
||||
errors.push('Homepage actions do not use the locale route helper.');
|
||||
if (page.includes('messages.foundation'))
|
||||
errors.push('Phase 11 foundation placeholder remains in the homepage route.');
|
||||
if (/href=["']#["']/.test(page)) errors.push('Homepage contains href="#".');
|
||||
if (/#[0-9a-f]{3,8}\b|rgba?\(|hsla?\(/i.test(css))
|
||||
errors.push('Homepage CSS contains literal colors.');
|
||||
if (/var\(--color-(?:blue|orange|gray|green|amber|red|navy)-/i.test(css)) {
|
||||
errors.push('Homepage CSS consumes a raw palette token.');
|
||||
}
|
||||
if (!model.includes('disabledReason'))
|
||||
errors.push('Homepage content model does not encode unavailable destinations.');
|
||||
if (!model.includes('PreviewRow'))
|
||||
errors.push('Homepage content model does not type product preview rows.');
|
||||
|
||||
for (const artifact of [
|
||||
'tests/unit/homepage-content.test.ts',
|
||||
'tests/browser/homepage.spec.ts',
|
||||
'tests/a11y/homepage.a11y.spec.ts',
|
||||
'tests/visual/homepage.visual.spec.ts',
|
||||
'docs/phase13/HOMEPAGE_SECTION_MATRIX_v1.0.csv',
|
||||
'docs/phase13/HOMEPAGE_CONTENT_MODEL_v1.0.md',
|
||||
]) {
|
||||
try {
|
||||
await stat(path.join(repositoryRoot, artifact));
|
||||
} catch {
|
||||
errors.push(`Required Phase 13 artifact missing: ${artifact}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (errors.length > 0) fail(errors);
|
||||
else
|
||||
pass(
|
||||
'Phase 13 homepage composition, content model, destination gates, and test artifacts satisfy static controls.',
|
||||
);
|
||||
Reference in New Issue
Block a user