Инвентарь TLS-сертификатов парка хостов. Считает код: SQL по витрине и детерминированный ранжировщик ротации. Ассистент только объясняет — и каждое число, имя хоста, дата и имя CA в его тексте проверяются против результатов запросов этого хода до того, как вы их увидите.
Задайте вопрос — здесь появится исполненный SQL, длительность и число строк.
Сканируются только хосты закрытого списка — имя хоста от пользователя целью подключения стать не может. Порт всегда 443.
Стенд — один статический бинарь на Go (без CGO) и файл витрины SQLite. Парк из 25 000 хостов с инвентарём сертификатов сгенерирован детерминированно по зерну: одно зерно — побайтово один и тот же парк, поэтому показательный ответ можно сверить руками один раз и опираться на него дальше.
sqlite_master и табличные pragma-функции отсекаются здесь.mode=ro плюс query_only.Из результатов инструментов хода собирается индекс фактов — числа, FQDN, даты, серийные номера, имена CA. Черновик ответа сканируется на токены тех же видов, и каждый обязан найтись в индексе. Не нашёлся — модель получает список неподтверждённых значений и одну попытку переписать; второй промах заканчивается отказом, а текст модели выбрасывается целиком. Числа из вашего вопроса подтверждения не требуют: это условие задачи.
docs/ADR-0001-agent-grounding.md — почему валидатор, а не «хороший промпт».docs/ADR-0002-storage.md — SQLite для демо, ClickHouse для парка с историей сканов.docs/ADR-0003-sql-guard.md — барьеры вокруг SQL и границы их применимости.docs/ADR-0004-scan-whitelist.md — почему список хостов закрытый.docs/C4.md — контекст, контейнеры, компоненты (Mermaid).docs/clickhouse-schema.sql — эскиз схемы прод-масштаба.
Парк синтетический и помечен так везде, где показывается. Реальны только строки
scan_results: это настоящие рукопожатия с собственными хостами стенда.