import articles from '../data/articles.json' with { type: 'json' };
import { agentRewriteRevisions } from '../data/agent-rewrite-revisions.mjs';
const archiveBySlug = new Map(articles.map((article) => [article.slug, article]));
const forbidden = [
/synthetic-plan-hand-off/i,
/productionEffect/i,
/future-only/i,
/plan\/scenario/i,
/source cutoff/i,
/editorial date/i,
/planDate/i,
/not-collected/i,
/not-attempted/i,
/future owner/i,
/author trajectory/i,
/развитие автора/i,
/План на \d{4}/i,
];
function bodyWithoutSources(content) {
return content
.replace(/
Проверяемые источники<\/h2>[\s\S]*$/, '')
.replace(/<[^>]+>/g, ' ')
.replace(/&(?:quot|amp|lt|gt|#039);/g, ' ')
.replace(/\s+/g, ' ')
.trim();
}
const failures = [];
const seen = new Set();
for (const revision of agentRewriteRevisions) {
const body = bodyWithoutSources(revision.contentHtml || '');
const issues = [];
if (!archiveBySlug.has(revision.slug)) issues.push('slug отсутствует в архиве');
if (seen.has(revision.slug)) issues.push('дубликат slug');
seen.add(revision.slug);
if (!revision.title || !revision.excerpt) issues.push('нет title/excerpt');
if (body.length < 5000 || body.length > 15000) issues.push('основной текст вне 5 000–15 000 знаков');
if (!/
[\s\S]*?]+alt=(?:"[^"<>]+"|'[^'<>]+')[\s\S]*?<\/figure>/.test(revision.contentHtml)) issues.push('нет figure с alt');
if (!/
[\s\S]*?<\/table>/.test(revision.contentHtml)) issues.push('нет table');
if (!/
[\s\S]*?<\/code><\/pre>/.test(revision.contentHtml)) issues.push('нет pre/code');
if (!/[\s\S]*?<\/ol>/.test(revision.contentHtml)) issues.push('нет ol');
if (!/