Порядок, безопасность и находимость для 195 разбросанных публикаций. Всё крутится вокруг одного источника правды — реестра _published.json, который уже есть, но дырявый и не оживлён.
obahoba.com нет — центрального индекса не существует, «найти актуальную ссылку» = только память.dich-mars-*, duplo-*, yt-*)._published.json v2 единственный источник правдыВсё (хаб, безопасность, TTL) читает отсюда. Расширяем схему каждого артефакта — добавляем 5 полей к тому что есть:
{ "url": "https://performante-ai.obahoba.com/kost.html", "type": "html|pdf|mp4|docx|site", // что это "title": "...", "source_file": "...", "published_at": "...", "project": "performante-site", // NEW — из какого конверта "audience": "public|client|internal", // NEW — кому можно видеть "lifecycle": "permanent|ephemeral", // NEW — навсегда или одноразовое "expires_at": "2026-09-05", // NEW — для ephemeral (published + TTL) "status": "live|archived" // NEW — живой или уже убран }
Категория (type) даёт фильтр «сайты · КП · презентации · видео · доки · отчёты». project — группировку. Остальное — безопасность и TTL.
obahoba.com корень, под basic-authГенерируемая HTML-страница — твоя точка входа «найти актуальное». Читает ВСЕ _published.json проектов, рендерит каталог. Гейт на весь корень (он показывает всё → сам закрыт). Регенерация — на каждую публикацию (skill дописывает реестр → пересборка хаба) + ручная команда.
Метка «актуальное» = свежайший артефакт своего типа в проекте. Ephemeral показывает возраст и «истекает через N». Клик → сама ссылка.
Три тира аудитории → три политики в Caddy. Дефолт для НОВОЙ публикации — определяется по контексту (lab/ресёрч/гейт = ephemeral+internal; клиентская сдача = client; маркетинг-сайт = public), с возможностью переопределить.
| Тир | Что это | Индексация | Листинг папки | Доступ |
|---|---|---|---|---|
| PUBLIC | Маркетинг-сайты, портфолио | можно | нет (нормальный индекс) | открыто |
| CLIENT | КП, сдачи, демо клиенту | noindex | нет | неугадываемый путь / гейт по желанию |
| INTERNAL | Отчёты, ресёрч, трейдинг, гейты | noindex | нет | basic-auth |
Ключевой фикс: голый file_server browse (28 доменов сейчас перечислимы) заменяется на генерируемый пер-проектный индекс — тот же движок, что и хаб, но с тиром доступа. Enumerable-дыра закрывается по дизайну.
expires_at = published_at + N дней при публикации.mv в архив + status: archived в реестре → хаб перестаёт показывать как live. Никакого rm, только архив._published.json v2 + бэкфилл ~28 неучтённых и полей аудитории/lifecycle к 167 существующим.expires_at + джоба-архиватор (пишет в реестр, домены НЕ трогает).obahoba-publish: спрашивать/выводить тир + lifecycle, дописывать новые поля, дёргать пересборку хаба.obahoba.com + basic-auth, задеплоить хаб..vault/ — на этапе «потом».