Задача: Валидировать внутренние ссылки Concepts и автоматически актуализировать content
Валидировать внутренние ссылки Concepts и автоматически актуализировать content
Добавить проверку битых ссылок в content Concepts и общий helper, который автоматически актуализирует ссылки при create/update.
Контекст
Архитектурный источник истины: Система человекопонятных URI в haih-agent сохраняет стабильность адресов и SEO-сигналы.
Сейчас URI самих Concepts уже нормализуются и могут безопасно меняться через 301, но целостность ссылок внутри content не гарантируется. В результате в части AI-generated Concepts уже появились битые внутренние ссылки.
Что нужно сделать
1. Resolver валидации Concepts на битые ссылки
Добавить административный GraphQL resolver, который анализирует content Concepts и находит ссылки на несуществующие внутренние URI.
Подобная реализация уже есть в другом проекте — сначала найти и переиспользовать/адаптировать существующий подход, а не писать алгоритм с нуля.
Resolver должен уметь как минимум:
- проверить один Concept;
- проверить набор/все Concepts;
- извлечь внутренние Markdown/HTML/custom-tag ссылки, которые ведут на маршруты сайта;
- отличать существующий URI от битого;
- возвращать Concept, исходный href и причину ошибки;
- по возможности различать полностью отсутствующий маршрут и URI, для которого известен redirect/canonical replacement.
2. Общий helper для create/update Concept
Вынести обработку ссылок в reusable helper и подключить его к созданию и обновлению Concept.
Перед сохранением content helper должен:
- разобрать внутренние ссылки;
- проверить их по актуальным маршрутам/Concept URI;
- если ссылка ведет на известный старый URI с однозначным canonical/redirect — автоматически заменить href на актуальный URI;
- не изменять внешние URL;
- не вносить неоднозначные исправления молча;
- сохранять структуру Markdown и разрешенных custom tags.
Цель — чтобы AI и пользователь могли ссылаться на Concept по известному адресу, а система сама поддерживала внутреннюю перелинковку в актуальном состоянии.
Почему это важно
В новой модели haih-agent/fi1osof.ru граф Concepts является самим информационным ядром. Битая ссылка — это не просто UX-дефект страницы, а разрыв смыслового графа.
Автоматическая валидация нужна для:
- SEO и crawlability;
- сохранения PageRank/internal-link signals;
- корректной навигации пользователя;
- надежной работы AI, который переходит по Concept links;
- безопасного массового изменения ЧПУ;
- предотвращения накопления технического долга при AI-managed content.
Критерии приемки
- Есть admin resolver проверки одного и множества Concepts на битые внутренние ссылки.
- Сначала изучена и при возможности переиспользована реализация из другого проекта.
- Resolver возвращает конкретные Concept + href + тип проблемы.
- Create/update Concept проходят через общий helper обработки внутренних ссылок.
- Известные старые URI автоматически заменяются на актуальные canonical URI, когда соответствие однозначно.
- Внешние ссылки не переписываются.
- Неоднозначные/неизвестные ссылки не исправляются угадыванием.
- Добавлены тесты на валидную ссылку, 404, redirect/canonical replacement, несколько ссылок, внешнюю ссылку и custom-tag/Markdown content.
- Существующие Concepts можно массово проверить и получить отчет для последующего исправления.
Ворклоги
Прогресс: реализована серверная валидация и нормализация Concept content
Основная часть задачи реализована в коммите: https://github.com/haih-net/agent/commit/5d2a3c1
Добавлено:
- mutation
validateConceptsдля поиска битых внутренних ссылок; - интеграция проверки ссылок в
createConceptиupdateConcept; buildValidUrisSet()для набора допустимых URI;validateInternalLinks()с AST-разбором Markdown/MDX и поддержкой auto-fix;normalizeMarkdownContent()для нормализации MDX/Markdown перед сохранением;- skill-документация для
validateConcepts; write: trueдоступен только sudo-пользователям, обычные пользователи получают только результат валидации и исправляют ссылки вручную.
Таким образом сервер уже начинает обеспечивать целостность AI-managed Concept content, а не полагаться только на корректность текста, который создал пользователь или агент.
Архитектурный контекст зафиксирован в Concept: Система человекопонятных URI в haih-agent сохраняет стабильность адресов и SEO-сигналы.
Соседний коммит 8afc203 рефакторит ConceptItem: list-view начинает опираться на intro/description, а технический type убран из основного публичного представления Concept. Это не основная часть задачи, но соответствует направлению, где системная классификация отделена от смыслового публичного контента.