refactor(skills): codex-exec переразобран, имена вердиктов по этапам

- Зачем:
  - рецепт Кодекса читают в момент сборки команды; пересказы, хеджи и
    копии уроков внутри него дают место для импровизации — прогон
    2026-07-30 взял `danger-full-access` «на всякий случай» при верном
    рецепте.
  - вердикты звались по семейству (`review-codex.md`), а Codex ревьюирует
    и постановку, и код в одном `$D` — упавший этап 4 оставлял файл этапа
    2, и триаж молча чинил по чужому вердикту.
- Что:
  - codex-exec.md: удалены копия урока про эффорт (экономика xray, казус
    `.dgst`), причинная механика bwrap, повтор про companion и битая
    ссылка «в уроках ниже»; три пересказа эскалации сведены в один;
    ветка ревьюера стала полноценным рецептом; правила одной ветки
    переехали в свои ветки.
  - codex-exec.md: сторож зависшего треда — признак жизни это рост
    stdout.jsonl, а не статус (урок 2026-07-07 в рецепт не доезжал).
  - prompt-templates.md: имена вердиктов и параметров несут этап —
    `review-<task|code>-<codex|claude>.md`, `review-<этап>-params.md`.
  - model-matrix.md: критерий «цена тихой ошибки этапа» стал единым
    источником, claude-agents.md и codex-exec.md на него ссылаются.
  - lessons-archive.md: датированное уточнение — ключи `resume` сверены
    на 0.145.0, `-m`/`-o`/`--json` доступны вопреки записи 2026-07-21.
- Проверка:
  - сверка 51 клаузы по инвентарю (scratchpad), 24 ключевые — grep'ом;
    все markdown-ссылки скилла резолвятся.
  - сторож прогнан на симуляции трёх исходов: штатное завершение,
    зависание на середине, смерть без отчёта.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Dmitry DementievandClaude Opus 5 committed 2026-08-03 23:15:31 +03:00
1 parent f650451c5f
commit abc00a06be
5 files changed
+171 -126

No files matched your search

@@ -45,17 +45,18 @@
```bash
cat "$D/task-body.md" "$P/runtime-language.md" > "$D/task-prompt.md"
cat "$D/review-params.md" "$P/line-task.md" "$P/line-taste.md" \
cat "$D/review-task-params.md" "$P/line-task.md" "$P/line-taste.md" \
"$P/review-boilerplate.md" "$P/runtime-language.md" \
> "$D/review-prompt-task.md"
cat "$D/review-params.md" "$P/line-code.md" \
cat "$D/review-code-params.md" "$P/line-code.md" \
"$P/review-boilerplate.md" "$P/runtime-language.md" \
> "$D/review-prompt-code.md"
# одиночный ревьюер: line-rev.md (+ line-taste.md) -> review-prompt.md
# line-taste.md едет с линией уместности — переставь, если её ведёт
# другая линия (назначение линий — этап 4 SKILL.md)
cat "$P/triage-header.md" "$D/review-codex.md" "$D/review-claude.md" \
"$D/notes.md" "$P/runtime-language.md" > "$D/fix-prompt.md"
cat "$P/triage-header.md" "$D/review-code-codex.md" \
"$D/review-code-claude.md" "$D/notes.md" "$P/runtime-language.md" \
> "$D/fix-prompt.md"
# notes.md опционален — нет, так не включай
cat "$P/recheck-header.md" "$D/recheck-params.md" \
"$P/runtime-language.md" > "$D/recheck-prompt.md"
@@ -116,21 +117,27 @@ cat "$P/self-review.md" | codex exec resume <thread-id> ...
## 2. Ревью: общий блок + файл линии
Общий параметрический блок (`review-params.md`) один на обе линии и не
знает, кто его читает; линзу и префикс ID задаёт файл линии, поэтому
собранных промптов — по одному на линию, с разными путями. Куда класть
вердикт, задаёт обёртка вызова, и пути вердиктов у ревьюеров тоже разные
(иначе коллизия). Codex получает свой собранный файл через stdin (вердикт
Общий параметрический блок (`review-<этап>-params.md`) один на обе линии
этапа и не знает, кто его читает; линзу и префикс ID задаёт файл линии,
поэтому собранных промптов — по одному на линию, с разными путями. Куда
класть вердикт, задаёт обёртка вызова, и пути вердиктов у ревьюеров тоже
разные (иначе коллизия). **Имя несёт и этап** (`task`/`code`), не только
семейство: `$D` у задачи один на весь прогон, и с общим именем ревью кода
легло бы поверх ревью постановки — а упавшая линия этапа 4 оставила бы
файл этапа 2 на месте, и триаж молча ушёл бы чинить по чужому вердикту.
Разные имена делают такой отказ громким: сборка `fix-prompt.md` падает на
`cat`. Codex получает свой собранный файл через stdin (вердикт
= его `-o`-отчёт); Клод-субагенту в prompt — короткая английская обёртка:
```text
Read {{path to this line's review prompt}} and execute it. Working directory:
{{repo root}}. Write the findings index to
{{$D/review-claude.md}} — it is outside the repo, so the mandate allows
it (via Write or a Bash heredoc, whichever you have). Append each finding
to that file as you go — incremental writing keeps a partial index alive
if the session dies. Keep the index strict: ONE line per finding and per
confirmation, as the boilerplate demands — no multi-line entries. Final
{{$D/review-<task|code>-claude.md}} — it is outside the repo, so the
mandate allows it (via Write or a Bash heredoc, whichever you have).
Append each finding to that file as you go — incremental writing keeps a
partial index alive if the session dies. Keep the index strict: ONE line
per finding and per confirmation, as the boilerplate demands — no
multi-line entries. Final
message: ONLY the VERDICT line, severity counters and the file path.
```