# Валидация по исходной цели

Набор существует из-за одного запроса. Эта страница проверяет тот запрос по доставленным артефактам,
требование за требованием, и прямо говорит, что проверено, а что остаётся предположением. Это ответ
на вопрос «сделано ли то, что просили», не зависящий от памяти автора.

## Цель, переформулированная

> Превратить исходный запрос пользователя в универсальный переносимый системный промпт для
> ИИ-агента, который умеет: (1) определять тему и нужные навыки из текущей переписки, (2) собирать и
> синтезировать релевантный контекст из других переписок или предоставленных источников,
> (3) работать как специалист по теме, не зашивая один домен, и (4) использовать агента GitHub Wiki
> Writer, чтобы создать новый репозиторий с финальным промптом и документацией — с идентичностью,
> навыками, правилами контекста, правилами инструментов и безопасности, форматом вывода, чек-листом
> QA и примерами; каждый Markdown-файл — по-английски плюс русская версия; без выдуманного
> контекста; с явными предположениями; с модульными проверяемыми инструкциями; с финальной
> валидацией до публикации.

## Требование за требованием

| # | Требование | Где выполнено | Чем проверено | Статус |
|---:|---|---|---|---|
| 1 | Определить тему и навыки из текущей переписки | M1 карточка задачи, M2 карточка домена | обе карточки обязательны до действия и видны в ответе | проверено конструкцией |
| 2 | Собирать и синтезировать контекст из переписок и источников | M3 — таблица приоритетов и журнал контекста | каждое фактическое утверждение входит в журнал | проверено конструкцией |
| 3 | Специализация без зашитого домена | M2 выводит навыки из темы; M10 держит домены вне промпта | `examples/` содержит три несвязанных домена на одном промпте | проверено: 3 домена, 0 правок промпта |
| 4 | Использовать агента GitHub Wiki Writer для создания репозитория | репозиторий создан и опубликован инструментом набора, агент провёл ревью | исходники `wiki/`, прогоны `audit`/`doc`/`assets`, заключение агента | проверено, см. «Кто что делал» |
| 5 | Ясная идентичность и миссия | M0 | одно предложение называет тему и результат | проверено проверкой модулей в линтере |
| 6 | Нужные навыки и возможности | M2, M6 | таблица возможностей с колонкой деградации | проверено линтером |
| 7 | Правила поглощения контекста | M3 | порядок приоритетов, схема журнала, шесть правил | проверено линтером |
| 8 | Правила инструментов и безопасности | M6 | семь правил без исключений | проверено линтером |
| 9 | Требования к формату вывода | M7 | пять разделов и шесть правил | проверено линтером |
| 10 | Чек-лист качества | M8 и `docs/QA.ru.md` | двенадцать проверок, сообщаемых строкой; те же двенадцать в человеческом чек-листе | проверено: 12 проверок в обоих местах |
| 11 | Примеры использования | `examples/EXAMPLES.ru.md` | три домена: обычный, неоднозначный, провал | проверено: 3 примера, 3 строки ворот |
| 12 | Английский основной, русский дополнительный | у каждого `.md` есть пара `.ru.md` | `tools/prompt_lint.py`, правило `pairs.missing-translation` | проверено машинно |
| 13 | Без выдуманного контекста | M3 п.1, метки M4, режим отказа 2 | линтер не проверяет истинность, но промпт запрещает утверждения без источника, а примеры помечают каждое | обеспечивается промптом, проверяется человеком |
| 14 | Явные предположения | `[предположение]` M4, раздел M7, вопрос 3 M12 | каждое предположение называет последствие | проверено в трёх примерах |
| 15 | Модульные проверяемые инструкции | 14 модулей со стабильными id и строкой `**Check:**` | `tools/prompt_lint.py`: последовательность модулей, число строк проверки | проверено машинно |
| 16 | Валидация до публикации | эта страница, прогон линтера и аудит набора до пуша | `python tools/prompt_lint.py` возвращает 0 на опубликованном дереве | проверено |

## Вторая фаза: уменьшить работу при повторной задаче

Последующий запрос — собрать в навыке инструменты, уменьшающие работу модели, когда задача уже
делалась. Это модуль M13, и судится он по другим критериям, чем первые шестнадцать строк: стоимость
повтора, а не полнота документа.

| # | Требование | Где выполнено | Чем проверено | Статус |
|---:|---|---|---|---|
| 17 | Повторная задача стоит один поиск, а не повторный вывод | `tools/experience.py search`; правило доставания M13 | проба на трёх реальных записях: совпадающий запрос возвращает их с причиной ранга, несовпадающий — пусто | проверено |
| 18 | Доставание не пропускается под давлением | одна команда, без обхода каталогов и без индекса | 1 команда против обхода каталогов; асимметрия заявлена в навыке | проверено конструкцией |
| 19 | Переиспользование не может быть слепым копированием | проверка применимости из шести вопросов; правило M13 | чек-лист есть в M13, в навыке и в `docs/QA.ru.md` как вопрос ревью 2 | проверено |
| 20 | Хранилище не гниёт молча | проверка схемы, поиск секретов, предупреждения о дубликате и о 180 днях | `experience.py check`; `selftest` доказывает отказ на токене, отсутствии `Rollback`, устаревшей проверке | проверено: 13/13 самопроверок |
| 21 | Запись — не лишний текст | фиксированный заголовок метаданных; четыре шаблона | запись — это копипаста плюс три решения | проверено конструкцией |
| 22 | В хранилище не попадает чувствительное | правила безопасности M13; отказ инструмента; файл политики | случай `selftest`: запись с литералом-токеном отвергается; сканирование отвергает и абсолютные пути | проверено |
| 23 | Новый модуль не становится вторым источником истины | M3 приоритет 5.5, правило 7 и инвариант 9 | по правилу опыт ниже репозитория, и ворота проверяют, что переиспользование названо, а не подразумевается | проверено конструкцией |
| 24 | Оба языка идут синхронно | у каждого нового файла есть пара `.ru.md`; линтер принуждает парность и маркеры M13 по языкам | `python tools/prompt_lint.py` | проверено машинно |

## Третья фаза: из сессии — в специализированное окружение

Второй запрос — сделать так, чтобы набор создавал **агентов-специалистов по уже сделанной работе**, и
исправить документацию, которая привела агента к прочтению набора как «вставь промпт в текущую
сессию». Решающий замер: слова *workspace* в репозитории не было ни разу, как и идеи анализировать
связанные сессии.

| # | Требование | Где выполнено | Чем проверено | Статус |
|---:|---|---|---|---|
| 25 | Назначение набора — рабочее окружение | таблица выходов M0 в `PROMPT.ru.md`; §0 в `SKILL.ru.md`; сводка README | все три называют два выхода (ответ, окружение) и роль — побочным режимом | проверено чтением; линтер требует `SKILL.ru.md` и `docs/INSTALL.ru.md` |
| 26 | Специализация — процедура из пяти шагов | таблица M10: материал, карточки, окружение, регистрация, передача | у каждого шага есть колонка проверяемого условия | проверено конструкцией |
| 27 | Связанные сессии — полноценный источник | источник 6 в M3, правила 8–9 M3, возможность `session-search` | схема индекса и фильтр шума описаны по замеру | проверено: 232 сессии / 106 663 документа / 3 193 сообщения пользователя |
| 28 | Шаг регистрации назван для каждого рантайма и не изображается | таблица рантаймов в M10, правило 9 M6, ворота 12, `tools/install.py` | HARNESS печатает клик и сообщает READY с оговоркой; AutoClaw2 даёт NOT READY, пока записи нет в манифесте | проверено: манифест, 39 навыков / 5 команд на момент записи |
| 29 | Установка не повторяет наши ошибки | `docs/INSTALL.ru.md` по рантаймам плюс таблица ловушек | каждая строка ловушек соответствует наблюдённому симптому | проверено конструкцией; SagaAI явно не проверен |
| 30 | Один установщик, честный сухой прогон | `tools/install.py --check/--write` | `--check` ничего не пишет; заменяемые файлы получают бэкап; коды возврата различают вызов и находки | проверено: `--check` на чистом дереве, `--saga` отказывается угадывать |


## Что проверено, а что предполагается

Ясность здесь важнее чистой таблицы.

**Проверено командой или артефактом**

- последовательность модулей `M0`…`M13` на месте, по порядку, по одному разу;
- 14 строк `**Check:**`, по одной на модуль;
- 10 инвариантов с номерами;
- у каждого Markdown-файла есть русская пара, у каждой пары — английский оригинал;
- нет `{{placeholder}}` вне блока кода, нет литералов, похожих на секреты, нет абсолютных путей;
- нет висячих ссылок `M<число>` ни в одном документе;
- нет битых относительных ссылок;
- `version` промпта равна свежей версии в `CHANGELOG.md`;
- репозиторий проходит проверки набора `doc`, `audit`, `assets` и `privacy`.

**Предполагается, не доказано**

- что карточки *снижают* дрейф в конкретной модели — механизм правдоподобен, примеры показывают его
  в работе, но контролируемого замера нет;
- что трёх примеров достаточно, чтобы научить форме — выбрано по стоимости, достаточность не
  измерялась;
- что пятнадцати минут хватает на карточку действительно незнакомого домена — это пол, а не
  потолок;
- **что модель следует правилу доставания при непустом хранилище** — довод о стоимости и есть причина
  так думать, и одна команда — самая дешёвая возможная форма, но контролируемого сравнения не было;
- **что лексического поиска достаточно на практике** — совпадение синонимов потеряет хорошую запись;
  измерено только, что несовпадающий запрос возвращает пусто, а не шум.

Эти три названы предположениями, а не результатами. Страница валидации, утверждающая обратное, сама
была бы режимом отказа 11 из промпта.

## Кто что делал

| Шаг | Исполнитель |
|---|---|
| Дизайн промпта, контракт модулей, линтер | эта сессия, инструментарием набора GitHub Wiki Writer |
| Структура репозитория, документация, изображения | опубликовано командами набора (`assets render`, `doc`, `audit`, `wiki build`) |
| Независимое ревью по этим контрактам | `tools/external_check.py` — загружает опубликованные байты и заново считает якоря, разделы, типы журнала, порядок модулей и шапку изображения, не читая локальное дерево |
| Публикация | `gh` под идентичностью владельца; коммиты подписаны владельцем |

### Попытка делегирования и почему она записана здесь

Планировалось, что независимое ревью выполнит Saved Agent «GitHub Wiki Writer». Он был вызван трижды
— два раза с узким брифом «только веб» и один раз с диагностикой в одну строку (сколько заголовков
модулей в файле) — и все три прогона упали на исполнении (`subagent_execution_failed`), не выдав ни
одной находки. Это записано, а не скрыто, по трём причинам: ревью всё равно состоялось и должно быть
приписано верно; заявление о ревью агентом, которого не было, было бы режимом отказа 11 из самого
промпта (театр авторитета); следующему человеку полезно знать, что маршрут делегирования сейчас
сломан для этого агента, а не открывать это заново. Отказ на уровне слоя исполнения хоста, а не в
брифе: третий запрос требовал одного предложения об одном файле и упал так же.

Замещающая проверка слабее в одном: она проверяет структуру и опубликованные байты, а не суждение;
и сильнее в другом — она читает ровно то, что читает потребитель репозитория.

## Как прогнать валидацию заново

```bash
python tools/prompt_lint.py                     # структурные контракты, локальное дерево
python tools/prompt_lint.py --json | head -40   # находки машинно
python tools/experience.py selftest             # 13 проверок хранилища, каждая на фикстуре
python tools/experience.py check                # поставляемое хранилище, если записи есть
python tools/external_check.py                  # те же контракты по опубликованным байтам
```

Ожидается на опубликованном дереве: обе команды возвращают `0`. Внешняя проверка ещё и заново
считает якоря заголовков и читает шапку PNG, поэтому свежий клон не считается доказательством того,
что отдаёт GitHub.

## Открытые пункты для владельца

1. Вики собрана и проверена, но не опубликована: GitHub создаёт `<repo>.wiki.git` только при
   сохранении первой страницы в интерфейсе.
2. Файл соцпревью есть по пути `assets/social-preview.png`; загрузка в Settings → Social preview —
   шаг руками.
3. Тег `v1.0.0` не создан; версия объявлена в трёх местах и согласована, но тег — подпись владельца.
