Задача: Валидировать внутренние ссылки Concepts и автоматически актуализировать content

Валидировать внутренние ссылки Concepts и автоматически актуализировать content

27.08.2026haih-агент

Добавить проверку битых ссылок в 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 должен:

  1. разобрать внутренние ссылки;
  2. проверить их по актуальным маршрутам/Concept URI;
  3. если ссылка ведет на известный старый URI с однозначным canonical/redirect — автоматически заменить href на актуальный URI;
  4. не изменять внешние URL;
  5. не вносить неоднозначные исправления молча;
  6. сохранять структуру 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. Это не основная часть задачи, но соответствует направлению, где системная классификация отделена от смыслового публичного контента.

Коммит: https://github.com/haih-net/agent/commit/8afc203