===== AVAILABLE TEST RUNNERS ===== /var/www/vhosts/aiwebpageseo.com/site-audit/public/tests/act-w3c/act-evidence-suite.js /var/www/vhosts/aiwebpageseo.com/site-audit/public/tests/hey-tony-audit.js ===== EXISTING ACT TEST SUITE ===== const fs = require('fs'); const path = require('path'); const ROOT = __dirname; const OUT = '/tmp/aiwebpageseo-act-evidence'; const INDEX = 'https://www.w3.org/WAI/content-assets/wcag-act-rules/testcases.json'; const runner = fs.readFileSync( path.join(ROOT, 'public/a11y-axe/run.js'), 'utf8' ); const lists = [...runner.matchAll( /var\s+(RULES|BEST)\s*=\s*\[([\s\S]*?)\]/g )]; const selected = [...new Set(lists.flatMap(m => [...m[2].matchAll(/'([^']+)'/g)].map(x => x[1]) ))]; const actTagged = [ 'area-alt', 'aria-command-name', 'aria-input-field-name', 'aria-toggle-field-name', 'autocomplete-valid', 'avoid-inline-spacing', 'document-title', 'html-xml-lang-mismatch', 'input-button-name', 'meta-viewport', 'presentation-role-conflict', 'role-img-alt', 'svg-img-alt', 'valid-lang' ]; async function main() { fs.mkdirSync(OUT, {recursive:true}); const response = await fetch(INDEX, { signal: AbortSignal.timeout(15000) }); if (!response.ok) throw Error('W3C HTTP ' + response.status); const source = await response.json(); const cases = source.testcases || []; const groups = {}; for (const test of cases) { (groups[test.ruleId] ||= []).push(test); } const previous = '/tmp/act-2779a5-evidence.json'; const priorEvidence = fs.existsSync(previous) ? JSON.parse(fs.readFileSync(previous, 'utf8')) : null; const manifest = { tool: 'AIWebPageSEO Accessibility Audit', engine: 'axe-core 4.10.2', generated: new Date().toISOString(), source: INDEX, selectedAxeRules: selected, actTaggedAxeRules: actTagged.filter(x => selected.includes(x)), officialActRules: Object.keys(groups).length, officialTestCases: cases.length, existingTitleEvidence: priorEvidence, mappingStatus: 'Requires verified ACT-to-axe mappings', validationStatus: 'Incomplete', ruleInventory: Object.entries(groups).map(([id, tests]) => ({ actRuleId: id, title: tests[0].ruleName || '', testCases: tests.length, status: id === '2779a5' ? 'Existing evidence available' : 'Not yet validated' })) }; fs.writeFileSync( path.join(OUT, 'manifest.json'), JSON.stringify(manifest, null, 2) ); fs.writeFileSync( path.join(OUT, 'official-testcases.json'), JSON.stringify(source, null, 2) ); console.log('Selected axe rules:', selected.length); console.log('ACT-tagged axe rules:', manifest.actTaggedAxeRules.length); console.log('Official W3C ACT rules:', manifest.officialActRules); console.log('Official test cases:', manifest.officialTestCases); console.log('Existing title evidence:', priorEvidence ? 'PRESERVED' : 'NOT FOUND'); console.log('Evidence directory:', OUT); } main().catch(e => { console.error('ERROR:', e.message); process.exitCode = 1; }); ===== INSTALLED BROWSER TEST TOOLS ===== playwright not available from current directory puppeteer not available from current directory jsdom not available from current directory ===== CHROMIUM AVAILABILITY ===== /snap/bin/chromium /usr/bin/chromium-browser ===== ACT VALIDATOR =====