]+class="mock-input"[^>]+title="Choose sync target"[^>]*>/],
['WebSocket status', /\s*\{\{MOCK_27\}\}/]
];
for (const [label, pattern] of themeSensitiveControls) {
const match = mockup.match(pattern);
if (!match) throw new Error(`Could not locate ${label} in the extension mockup`);
if (!/color:\s*var\(--text\)/.test(match[0])) {
throw new Error(`${label} must use var(--text) so it remains readable in both themes`);
}
}
const landingStylesheets = [...template.matchAll(/]*\brel="stylesheet"[^>]*\bhref="\{\{ASSET_PATH\}\}landing[^">]*"[^>]*>/g)];
if (landingStylesheets.length !== 1) {
throw new Error(`Landing must load exactly one render-blocking stylesheet; found ${landingStylesheets.length}`);
}
const llmsLinks = [...template.matchAll(/]*\brel="alternate"[^>]*\btype="text\/markdown"[^>]*\bhref="https:\/\/sync\.koalastuff\.net\/llms\.txt"[^>]*>/g)];
if (llmsLinks.length !== 1) {
throw new Error(`Landing head must link exactly one canonical llms.txt document; found ${llmsLinks.length}`);
}
const requiredLlmsSections = [
'## Quick fit assessment',
'## How it works',
'## Privacy and security',
'## Supported environments',
'## Install KoalaSync',
'## Technical information'
];
for (const section of requiredLlmsSections) {
if (!llmsText.includes(section)) throw new Error(`llms.txt is missing ${section}`);
}
if (/\bWebRTC\b|\bport 54000\b|peer-to-peer by design/i.test(llmsText)) {
throw new Error('llms.txt must describe the current WebSocket relay architecture without obsolete WebRTC or port claims');
}
if (!llmsText.includes('- built-in voice, video or webcam chat') || llmsText.includes('- built-in text, voice or webcam chat')) {
throw new Error('llms.txt must distinguish built-in encrypted text chat from unsupported voice, video or webcam chat');
}
if (!llmsText.includes(`Current website release: ${websiteVersion}`)) {
throw new Error(`llms.txt release must match website/version.json (${websiteVersion})`);
}
const requiredSupportSocialMetadata = [
'',
'name="twitter:card" content="summary_large_image"',
'name="twitter:title"',
'name="twitter:description"',
'name="twitter:image"',
'"datePublished"',
'"dateModified"',
'"mainEntityOfPage"'
];
for (const metadata of requiredSupportSocialMetadata) {
if (!siteAccessHelpPage.includes(metadata)) {
throw new Error(`site-access-help.html is missing SEO metadata: ${metadata}`);
}
}
const requiredHelpMetadata = [
'',
'type="text/markdown" href="https://sync.koalastuff.net/llms.txt"',
'name="twitter:card" content="summary_large_image"',
'property="og:image:alt"',
'name="twitter:image:alt"',
'"@type": ["CollectionPage", "FAQPage"]',
'"@type": "BreadcrumbList"',
'"datePublished"',
'"dateModified"'
];
for (const metadata of requiredHelpMetadata) {
if (!helpPage.includes(metadata)) {
throw new Error(`help.html is missing SEO/AEO metadata: ${metadata}`);
}
}
const helpStructuredDataMatch = helpPage.match(/