av-dev-pipeline: починены находки ревью, бриф заводится скиллом

- скилл project-brief: бриф собирается из CLAUDE.md, архитектуры, Taskfile
  и конвенций и показывается человеку. Раньше единственная инструкция по
  его созданию лежала внутри шаблона, поэтому деградированный режим был не
  аварийным, а единственным: critical по основанию «нарушен инвариант»
  недостижим ни на одной задаче
- rebase перенесён внутрь worktree задачи: прежняя форма падала на занятой
  ветке, и агент уводил весь батч в провалившиеся с ложной причиной
- контракт брифа дополнен восемью слотами; проверен заполнением на обоих
  проектах, незаполнимых нет. Прецедент healthlog вынут из общего charter'а
  в бриф — там он вмёрз вместе с числами
- шов: пайплайн задачу не закрывает и записи учёта не трогает, урожай
  отдаёт списком, правило остатка — ссылкой на av-dev-tasks
- деградированный абзац во всех девяти проходах, вопрос 9 в ops,
  пространство имён в вызовах, раздел предпосылок
This commit is contained in:
av
2026-08-03 11:45:40 +03:00
parent 20dca29add
commit 0eca206460
18 changed files with 1021 additions and 214 deletions
+18 -8
View File
@@ -18,9 +18,14 @@ color: red
## Модель угроз — из брифа, и не расширяй её самовольно
Раздел **`## Модель угроз`** брифа отвечает на четыре вещи: что недоверенное и
каким каналом приходит; что разграничивает доступ; что чувствительнее чего; **что
вне модели**.
**Первая строка раздела `## Модель угроз` — периметр,** и она задаёт смысл всему
остальному. «Открыт наружу, злоумышленник в локальной сети неинтересен» и «контур
доверенный, публичного интернета здесь нет» — противоположные постановки под
одним заголовком, а код в обоих случаях выглядит одинаково. Прочитай периметр
**до** всего прочего и держи его над каждой постановкой.
Дальше раздел отвечает на четыре вещи: что недоверенное и каким каналом
приходит; что разграничивает доступ; что чувствительнее чего; **что вне модели**.
Последнее так же обязательно, как первое. Угроза вне модели даёт уверенно
звучащую находку, которая никогда не будет исправлена, и обесценивает весь
@@ -28,12 +33,17 @@ color: red
поставщика, если бриф их исключил.
Ещё берёшь: **`## Инварианты`** (нарушение — основание для `critical`),
**`## Прод и поток`** (что необратимо и какие объёмы реальны), **`## Карта`**
(где `testdata` и куда нельзя писать).
**`## Прод и поток`** (что необратимо, какие объёмы реальны и — отдельно — чем
физически лежит запись и какие настройки хранилища имеют числовое значение: из
этого строятся пути к отказу в обслуживании), **`## Прецеденты`** (что здесь уже
пробивалось и чем это было воспроизведено), **`## Карта`** (где `testdata` и куда
нельзя писать), **`## Вопросы к проходам`** (если там есть блок `adversary`
эти вопросы задаются дополнительно к четырём постановкам).
Брифа нет — работай по общей рамке ниже, `critical` по основанию «нарушен
инвариант» не присваивай и скажи в границах покрытия, что модель угроз ты
предположила сама.
**Брифа нет** — работай по общей рамке ниже, `critical` по основанию «нарушен
инвариант проекта» не присваивай и дай в границы покрытия строку: «брифа проекта
нет: периметр и модель угроз предположены проходом; находки могут лежать вне
периметра и потому никогда не будут исправлены».
## Четыре постановки. Работай ими, а не списком