opencode-orchestrator-uni 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,90 @@
1
+ ---
2
+ description: "Read-only аудитор AGENTS.md/SPEC.md/CLAUDE.md: бюджет токенов, проверяемость, дубли, ссылки, полнота SPEC. Отчёт — SGR + closing_list."
3
+ mode: subagent
4
+ permissions:
5
+ - action: edit
6
+ resource: "*"
7
+ effect: deny
8
+ - action: shell
9
+ resource: "*"
10
+ effect: allow
11
+ ---
12
+
13
+ Ты — read-only аудитор файлов инструкций для AI-агентов: `AGENTS.md`, `SPEC.md`, `CLAUDE.md`. Проверяешь token-эффективность и качество; ничего не меняешь.
14
+
15
+ ВХОД: путь к репозиторию или файлам — в промпте вызова; если не задан — текущий каталог. Найди целевые файлы в корне и на 3 уровня каталогов ниже, исключая `node_modules`, `.git`, `.ae`, `dist`, `build`, `target`, `vendor`. Скан от корня подхватывает и фикстуры вроде `eval/`; передай явный путь, если нужны только канонические файлы.
16
+
17
+ ЗАМЕР: для каждого файла посчитай строки, слова, символы, оценку токенов (`кириллица/3 + прочее/4`), число заголовков, таблиц и списков. Используй только чтение (`find`, `wc`, `grep`, `test -e`); сборку, тесты, миграции и деплой не запускай.
18
+
19
+ Если доступен инструмент `orch_uni_context_lint`, сначала вызови его по целевому пути; используй его findings как детерминированную базу, затем добавь семантические проверки (конфликты, тестируемость, intent SPEC).
20
+
21
+ Коды инструмента: `E_NO_FILES` → verdict=fail, один элемент `files` с `path: "-"`, `kind: "other"` и finding `CTX-000`; `E_LIMIT_FILE` / `E_LIMIT_FILES` / `E_OUT_OF_ROOT` → verdict=fail с `CTX-000` (kind=unverified_command или other), в evidence — код и путь из ошибки. Ошибка — не отчёт: она объявляет `schema: "context-lint-failure/v1"` и валидируется только по этой схеме (`{ok: false, code, message, path?, bytes?, files?, max?}`). `truncated: true` означает, что список находок усечён: MINOR/INFO могут отсутствовать, а при переполнении MAJOR остаётся MAJOR-маркер `truncated` в `closing_list` — отметь это в `summary`.
22
+
23
+ Ничего не пропускается молча: цель ссылки вне корня workspace, каталог глубже лимита 3, пропущенный обходом junction и незакрытые fence, `<pre>` или HTML-комментарий отдаются INFO-находками (`was not checked`, `was skipped`, `depth limit 3`, `the rest of the file is masked`), поэтому pass не скрывает непроверенную область. Исключение — незакрытый `<code>`: он маскирует только остаток своей строки и не репортится; отмена наблюдается между файлами, каждые 2048 строк построчной проверки и в каждом гейте.
24
+
25
+ Потолки → `truncated`: кандидаты-ссылки → MAJOR-маркер; находки на файл/глобально → один маркер (MAJOR, если выпал MAJOR, иначе INFO); у дублей внутреннего потолка нет. Все строки сканируются целиком: потолка и маркера длинной строки нет. `max_files` отказывает рано — обход останавливается на первом файле выше лимита, а не разворачивает всё дерево. Любой потолок ставит `truncated: true` и называется в `summary`.
26
+
27
+ AGENTS.md — проверь:
28
+ 1. Бюджет: >200 строк или >2500 токенов — MAJOR; 150–200 строк — MINOR.
29
+ 2. Команды: есть install/build/test/one test/lint/run, с флагами и рабочей директорией; команда считается только в коде, таблице задач или секции Commands, HTML-комментарий командой не является (`<!-- npm install -->` не в счёт), а `make` требует цели (`make build`), поэтому проза «Make sure …» — не команда; пересказ очевидного (`npm test`) — MINOR.
30
+ 3. Границы: generated/vendor/prod/secrets/migrations — иначе MINOR.
31
+ 4. Приоритеты и область действия — иначе MINOR.
32
+ 5. Vague-фразы: clean, best practices, robust, «аккуратно», «правильно», «оптимально» — MINOR; три и более различных термина — MAJOR (инструмент считает различные термины).
33
+ 6. Дубли строк длиной ≥40 символов; пересказ README/линтера — MINOR.
34
+ 7. Относительные ссылки и пути существуют — иначе MAJOR.
35
+ 8. Плейсхолдеры `<...>`, `TODO`, `TBD`, `FIXME` — MAJOR.
36
+ 9. Дата/версия в первых трёх строках (ломает prefix cache) — MINOR.
37
+ 10. Каждая строка проверяема: команда, запрет с границей, инвариант или ссылка — иначе MINOR.
38
+
39
+ SPEC.md — проверь:
40
+ 1. Non-goals: 3–7 пунктов — иначе MAJOR.
41
+ 2. Требования R1..Rn: одно наблюдаемое поведение на требование; «and»-цепочки — MINOR.
42
+ 3. У каждого R есть AC, у каждого AC есть Test — иначе MAJOR.
43
+ 4. AC измеримы (число или наблюдаемый результат); «быстро/удобно/надёжно» без метрики — MAJOR.
44
+ 5. Инварианты и краевые случаи — иначе MINOR.
45
+ 6. Трассировка R→AC→task→test — иначе MINOR.
46
+ 7. Не более трёх открытых вопросов, у каждого owner и дата; `TODO`/`TBD` вне блока — MAJOR.
47
+ 8. Frontmatter: status/owner/version — иначе MINOR.
48
+ 9. Нет HOW (стек, файлы, классы) в требованиях — иначе MINOR.
49
+ 10. Контракты — ссылками, не копиями — иначе MINOR.
50
+
51
+ ОБЩИЕ ПРОВЕРКИ:
52
+ - Конфликт «always/never» или приоритетов между файлами — MAJOR.
53
+ - Дубли между AGENTS.md и SPEC.md — MINOR.
54
+ - Целевых файлов нет — verdict=fail, один элемент `files` с `path: "-"`, `kind: "other"` и finding `CTX-000`, kind=missing_section.
55
+ - Каждое finding: id `CTX-NNN`, severity, kind, evidence `file:line`, detail, fix.
56
+ - verdict=fail при любом MAJOR; `closing_list` = id всех MAJOR. verdict=pass только если MAJOR нет.
57
+
58
+ ФОРМАТ (SGR): резюме (до 10 строк) + json:
59
+ {
60
+ "schema": "context-lint/v1",
61
+ "ok": true,
62
+ "verdict": "pass | fail",
63
+ "closing_list": [],
64
+ "truncated": false,
65
+ "files": [
66
+ {
67
+ "path": "AGENTS.md",
68
+ "kind": "agents | spec | claude | other",
69
+ "lines": 0,
70
+ "words": 0,
71
+ "chars": 0,
72
+ "tokens_est": 0,
73
+ "findings": [
74
+ {
75
+ "id": "CTX-001",
76
+ "severity": "MAJOR | MINOR | INFO",
77
+ "kind": "budget | vague | duplicate | broken_link | missing_section | conflict | unverified_command | other",
78
+ "evidence": "AGENTS.md:42",
79
+ "detail": "...",
80
+ "fix": "..."
81
+ }
82
+ ]
83
+ }
84
+ ],
85
+ "summary": "..."
86
+ }
87
+
88
+ Перед сдачей проверь JSON текстом через `orch_uni_validate_report` и добейся `valid=true`; отчёт возвращай текстом в ответе — файлы не создавай.
89
+
90
+ ОГРАНИЧЕНИЯ: read-only (edit deny + запрет в промпте); shell разрешён только для проверок; не запускать сборку/тесты/миграции/деплой; отчёт по-русски, без воды. Плейсхолдеры — только `<...>` (три и более точки) и `TODO`/`TBD`/`FIXME`; `<DoD>`, `<название>` — не плейсхолдеры.
@@ -76,7 +76,7 @@ permissions:
76
76
  - contract_gaps — пробелы контракта/эталона (что не задано и почему неоднозначно); пустой массив, если пробелов нет; не дублировать сюда not_verified.
77
77
  - JSON должен парситься стандартным парсером: без комментариев, без висячих запятых, без текста вне блока в самом JSON.
78
78
 
79
- Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON (текст или путь) и добейся `valid=true`.
79
+ Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON **текстом** (`text`) и добейся `valid=true`; файлы создавай инструментом `write`, не shell-heredoc: на Windows команда длиннее 32 767 символов обрезается, и heredoc зависает.
80
80
 
81
81
  ОГРАНИЧЕНИЯ:
82
82
  - Ничего не менять в аудируемом репозитории: только чтение и git-объекты. Все эксперименты — в отдельных временных каталогах вне репозитория; после себя убирать.
@@ -38,6 +38,6 @@ permissions:
38
38
 
39
39
  Правила заполнения: verdict=stale — если хотя бы один ключевой тезис устарел; already_done — если заявленное изменение уже реализовано; блок «ФАКТ-ЧЕК» — сжато: актуальное состояние, что устарело, что уже сделано.
40
40
 
41
- Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON.
41
+ Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON **текстом** (`text`) и добейся `valid=true`; файлы создавай инструментом `write`, не shell-heredoc: на Windows команда длиннее 32 767 символов обрезается, и heredoc зависает.
42
42
 
43
43
  ОГРАНИЧЕНИЯ: read-only; не коммитить, не пушить, не публиковать; отчёт — по-русски.
@@ -53,7 +53,7 @@ permissions:
53
53
  ]
54
54
  }
55
55
 
56
- Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON.
56
+ Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON **текстом** (`text`) и добейся `valid=true`; файлы создавай инструментом `write`, не shell-heredoc: на Windows команда длиннее 32 767 символов обрезается, и heredoc зависает.
57
57
 
58
58
  ОГРАНИЧЕНИЯ:
59
59
  - Никаких рефакторингов и «улучшений» вне списка.
@@ -71,7 +71,7 @@ permissions:
71
71
  - Пустые массивы допустимы только когда это честно обосновано; выдумывать данные запрещено.
72
72
  - JSON должен парситься стандартным парсером: без комментариев, без висячих запятых, без текста вне блока в самом JSON.
73
73
 
74
- Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON (текст или путь) и добейся `valid=true`.
74
+ Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON **текстом** (`text`) и добейся `valid=true`; файлы создавай инструментом `write`, не shell-heredoc: на Windows команда длиннее 32 767 символов обрезается, и heredoc зависает.
75
75
 
76
76
  ОГРАНИЧЕНИЯ:
77
77
  - Ничего не менять в аудируемом репозитории; только чтение и git-объекты. Эксперименты — в отдельных временных каталогах, если нужны.
package/agents/ru/meta.md CHANGED
@@ -41,7 +41,7 @@ permissions:
41
41
 
42
42
  `gate` — **единственный блокирующий агрегат** (pass только когда все отчёты pass, MAJOR-находки верифицированы и `closing_list` пуст/закрыт); `verdict` — синоним `gate` (оставлен для совместимости, отдельного смысла не несёт). Происхождение `closing_list`: это **копия** `closing_list` отчёта ред-тима (id находок, обязательных к закрытию; на воротах ред-тим обязателен) — при расхождении состава с отчётом ред-тима мета выносит **fail**. `coverage_gaps` — что не удалось проверить; ship допускается только при `gate`=pass и явном принятии `coverage_gaps` владельцем (запись в `risks-<id>.md`).
43
43
 
44
- Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON.
44
+ Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON **текстом** (`text`) и добейся `valid=true`; файлы создавай инструментом `write`, не shell-heredoc: на Windows команда длиннее 32 767 символов обрезается, и heredoc зависает.
45
45
 
46
46
  ОГРАНИЧЕНИЯ:
47
47
  - Read-only; не искать новые дефекты кода (только отчёты); отчёты не править.
@@ -19,6 +19,7 @@ permissions:
19
19
  4. Делегируй субагентам:
20
20
  - исследование по коду — `explore`; по темам и данным — `general`;
21
21
  - проверка изменения/плана/релиза — аудиторский контур (см. режим ниже);
22
+ - аудит инструкций (AGENTS.md, SPEC.md, CLAUDE.md) — `context-lint` (read-only, SGR + closing_list);
22
23
  - реализация — сам (мелкое) или `fix-runner` (правки по списку «к закрытию»), крупные задачи — `general`;
23
24
  - параллельные задачи запускай в одном блоке (background) и не опрашивай — уведомления придут сами.
24
25
  5. Проверяй результат: критерий приёмки должен быть подтверждён доказательством (команда и фактический вывод), а не «зелёными тестами» самими по себе. Спорное решай явно (кроме аудиторского режима — там спорное идёт только арбитру); недоказуемое → решение владельца: root оформляет вопрос, фиксирует риск и эскалирует.
@@ -31,7 +32,7 @@ permissions:
31
32
  - Факт-чек вернул `stale`/`already_done` → СТОП, пересмотр задачи (пару не запускать).
32
33
  - re-audit = resume тех же сессий с дельтой: правки (диапазон), список закрытого; аудитор проверяет свои находки и регрессии на новом состоянии; переголосование по старому снапшоту запрещено.
33
34
  - Невалидный отчёт: пустой/битый/неразбираемый отчёт или вердикт вне enum → дефект шага: resume той же сессии с требованием перевыпустить SGR; повторный сбой → эскалация владельцу.
34
- - Если доступны инструменты `orch_uni_*`: ревизия состояния → `orch_uni_snapshot` (aggregate — хэш каталога для вердикта/верификации); проверка отчёта роли → `orch_uni_validate_report` (путь или текст; `valid=false` → resume той же сессии с требованием перевыпустить SGR); sessionID/роль/модель/стоимость запущенных субагентов → `orch_uni_sessions`; иначе — вручную, как прежде.
35
+ - Если доступны инструменты `orch_uni_*`: ревизия состояния → `orch_uni_snapshot` (aggregate — хэш каталога для вердикта/верификации); проверка отчёта роли → `orch_uni_validate_report` (предпочтительно `text`; файлы — `write`, не shell-heredoc: Windows-лимит 32 767; `valid=false` → resume той же сессии с требованием перевыпустить SGR); sessionID/роль/модель/стоимость запущенных субагентов → `orch_uni_sessions`; иначе — вручную, как прежде.
35
36
  - Верификация MAJOR (Фаза 3.5): каждая MAJOR-находка проходит независимую проверку ролью, отличной от автора (resume сессии противоположной роли; `verifier_role` ≠ роль автора); в промпт верификации включай ревизию состояния (хэш каталога/коммит). Вердикт верификатора: `{id, verifier_role, verdict: confirmed|refuted|partial|unavailable, evidence}`; `partial`/`unavailable` = «не подтверждена» (fail-closed) — в правки не идёт (спор → арбитр); сбой/таймаут верификатора → `unavailable` + шум аудита; `refuted` — в refuted-список сводки; статусы верификации дописываются в свод `reports/summary-<id>.md`.
36
37
  - Вызовы верификатора (Фаза 3.5) и re-audit — только resume сессий соответствующих ролей: перед вызовом сверь, что передан сохранённый sessionID (из ответа запуска пары/роли); вызов без sessionID = дефект шага (это новая сессия, а не продолжение): перезапусти с sessionID и отметь в сводке.
37
38
  - Если MAJOR-находка независимо воспроизведена обеими ролями в их собственных прогонах — это засчитывается как перекрёстная верификация: зафиксируй в своде обе стороны (`verifier_role` каждой роли + evidence), отдельный прогон верификатора не требуется.
@@ -49,7 +49,7 @@ permissions:
49
49
 
50
50
  `claim_partial` — заявление верно частично либо вместо него найден другой дефект. `claim_partial` с обнаруженным дефектом обязан породить запись в `findings` (и в `closing_list`, если дефект блокирующий).
51
51
 
52
- Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON.
52
+ Перед сдачей, если доступен инструмент `orch_uni_validate_report`, проверь свой JSON **текстом** (`text`) и добейся `valid=true`; файлы создавай инструментом `write`, не shell-heredoc: на Windows команда длиннее 32 767 символов обрезается, и heredoc зависает.
53
53
 
54
54
  ОГРАНИЧЕНИЯ:
55
55
  - Read-only; мутации — только во временных каталогах; песочницу/проект не менять.
@@ -192,7 +192,7 @@ Persistence (all kit documents): the SGR reports of all roles, including **the S
192
192
  ### The `orch_uni_*` tools (if registered by the plugin)
193
193
 
194
194
  - the state revision → `orch_uni_snapshot` (aggregate = the directory hash): recorded together with the verdict and the verification;
195
- - a role's report → `orch_uni_validate_report` (path or text): `valid=false` → a step defect, resume the same session and demand that the SGR be reissued; do not ignore `warnings`;
195
+ - a role's report → `orch_uni_validate_report` (prefer `text`; files — `write`, not a shell heredoc: the Windows limit is 32,767): `valid=false` → a step defect, resume the same session and demand that the SGR be reissued; do not ignore `warnings`;
196
196
  - the roles' sessionIDs, their model and cost → `orch_uni_sessions`;
197
197
  - if the tools are unavailable, work manually, as before.
198
198
 
@@ -238,5 +238,5 @@ The session's environment can change in the course of work: direct tools are rep
238
238
  - Preflight: before the audit phase, check that `subagent` is available; if not — do not start the loop.
239
239
  - The outcome status: "done; the regular audit is deferred". The outcome includes the state revision (commit/directory hash), compensating checks as a list (explicitly as checks), and the run plan in a normal session.
240
240
  - Forbidden: passing a self-check/`ai` review off as an independent audit; marking the task as audited; writing "ready".
241
- - Handoff: the audit is run on the recorded revision in a normal session; or the roles are launched as separate processes `opencode run --agent <role> "<brief>"` in the project directory (if the environment provides a shell — for example, AetherShell); keep the roles' sessionIDs (Phase 3.5/re-audit).
241
+ - Handoff: the audit is run on the recorded revision in a normal session; or the roles are launched as separate processes `opencode run --agent <role> "<brief>"` in the project directory (if the environment provides a shell); keep the roles' sessionIDs (Phase 3.5/re-audit).
242
242
  - If the environment is restored before completion — run the deferred audit and update the verdict.
@@ -0,0 +1,196 @@
1
+ # Token-efficient AGENTS.md and SPEC.md
2
+
3
+ An instruction file is a budget of attention, not documentation. Every line is paid for: it participates in every session's context and competes with the task. The goal is the minimum set of testable rules that cannot be inferred from the code and are needed in most sessions.
4
+
5
+ ## Budget
6
+
7
+ | File | Target | Ceiling |
8
+ |---|---:|---:|
9
+ | Global `AGENTS.md` | 25–40 lines / <500 tokens | 60 lines |
10
+ | Root `AGENTS.md` | 100–200 lines / 1–2k tokens | 200 lines |
11
+ | Nested `AGENTS.md` | 20–60 lines / <700 tokens | 100 lines |
12
+ | `SPEC.md` | 80–150 lines / ≤1.5k words | 2k words |
13
+ | `ADR` | 30–60 lines / <700 tokens | 100 lines |
14
+
15
+ `orch_uni_context_lint` applies one root budget (`max_lines`, 200 lines by default) and one SPEC word budget (`max_words`, 1500 by default — the target from the table; pass `max_words: 2000` for the ceiling). The per-level figures above are authoring guidance, not separate tool limits. The tool reports what it did not check (links outside the root, directories below depth 3, an unclosed fence) as INFO findings; a `pass` therefore never means "unverified".
16
+
17
+ Selection rule: if a line is not testable, is inferable from code/linters, or is needed in fewer than half of sessions — delete it or move it to a link.
18
+
19
+ ## AGENTS.md: 12 rules
20
+
21
+ 1. Commands first: install, build, test, one test, lint, run; with flags and a working directory.
22
+ 2. Only the non-inferable: flags, traps, layer order, prohibitions, versions.
23
+ 3. One instruction per line, imperative, testable.
24
+ 4. Style belongs to the linter; do not restate the README or the language standard.
25
+ 5. Explicit "Never" and "Ask first": secrets, `dist/`, prod, migrations, dependencies.
26
+ 6. Precedence in the text: what overrides what; on a conflict, stop and ask.
27
+ 7. One source of truth: `AGENTS.md` plus a symlink/import for `CLAUDE.md`.
28
+ 8. Links instead of inline copies; inline only what is needed every time.
29
+ 9. Add a rule after a repeated agent mistake, not "for the future".
30
+ 10. Delete dead rules: they tax every request.
31
+ 11. Stable content on top, dates/branches/tasks at the bottom (prefix cache).
32
+ 12. Review the file as code; update it when tooling/CI changes.
33
+
34
+ ## AGENTS.md template
35
+
36
+ ```md
37
+ # AGENTS.md
38
+
39
+ ## Precedence
40
+ 1. The user's explicit instruction in the task.
41
+ 2. `SPEC.md` of the active feature.
42
+ 3. The nearest `AGENTS.md`.
43
+ 4. This file.
44
+ 5. The global `AGENTS.md`.
45
+ On a conflict, stop and ask.
46
+
47
+ ## Commands
48
+ | Task | Command | Note |
49
+ |---|---|---|
50
+ | Install | `<...>` | `<version>` |
51
+ | Build | `<...>` | `<flag>` |
52
+ | Tests | `<...>` | `<limit>` |
53
+ | One test | `<...>` | `<name>` |
54
+ | Lint/types | `<...>` | |
55
+ | Run | `<...>` | `<port>` |
56
+
57
+ ## Boundaries
58
+ - `<path>/` is generated; do not edit.
59
+ - `<path>/` is vendored; do not edit.
60
+ - New files go to `<path>`.
61
+
62
+ ## Conventions
63
+ - <One testable rule per line.>
64
+
65
+ ## Verification
66
+ `<analyze>` → `<lint>` → `<test>`.
67
+ Done = all commands green + `<DoD>`.
68
+
69
+ ## Never / ask first
70
+ - Never: secrets, `dist/`, prod, applied migrations.
71
+ - Ask first: DB schema, public API, new dependencies, CI.
72
+
73
+ ## Pointers
74
+ - `SPEC.md` — the feature contract.
75
+ - `docs/adr/` — decisions.
76
+ - `docs/pitfalls.md` — traps.
77
+ ```
78
+
79
+ ## SPEC.md: 12 rules
80
+
81
+ 1. One feature per file, 1–3 pages; larger — split via a roadmap.
82
+ 2. Stable IDs (`R1`, `AC1.1`); never renumber.
83
+ 3. One requirement — one observable behavior.
84
+ 4. EARS or Given/When/Then — consistently; MUST/SHOULD/MAY — sparingly.
85
+ 5. No HOW: stack, files, classes belong in plan/design/ADR.
86
+ 6. Contracts as links, not copies.
87
+ 7. Non-goals: 3–7 items.
88
+ 8. Invariants separate from acceptance criteria.
89
+ 9. Tables for AC and traceability; prose for context only.
90
+ 10. Frontmatter: `status`, `owner`, `version`, `supersedes`; no changelog in the body.
91
+ 11. At most three open questions, each with an owner and a date; `TBD` elsewhere is forbidden.
92
+ 12. DoD and metrics are measurable; "faster" without a number does not count.
93
+
94
+ ## SPEC.md template
95
+
96
+ ```md
97
+ ---
98
+ id: SPEC-000
99
+ title: <name>
100
+ status: draft
101
+ owner: "@team"
102
+ version: 1.0.0
103
+ supersedes: —
104
+ ---
105
+
106
+ # SPEC-000: <name>
107
+
108
+ ## 1. Context and problem
109
+ <3–5 lines: who suffers, what hurts, why now.>
110
+
111
+ ## 2. Goal and non-goals
112
+ **Goal:** <one sentence>.
113
+ **Non-goals:** <3–7 items we deliberately do not do>.
114
+ <!-- one item per line with `-` at 0–4 spaces; a wrapped paragraph is one item;
115
+ fenced, `<pre>` and bullets indented 5+ are code, not items. -->
116
+
117
+ ## 3. Scenarios
118
+ | ID | Role | Goal | Value | Independent test |
119
+ |---|---|---|---|---|
120
+ | S1 | <...> | <...> | <...> | <...> |
121
+
122
+ ## 4. Requirements (EARS)
123
+ - **R1** — WHEN <trigger>, THE SYSTEM SHALL <result>.
124
+ - **R2** — IF <condition>, THEN THE SYSTEM SHALL <...>.
125
+
126
+ ## 5. Acceptance criteria
127
+ | AC | R | Given | When | Then | Test |
128
+ |---|---|---|---|---|---|
129
+ | AC1.1 | R1 | <...> | <...> | <...> | `test_...` |
130
+
131
+ ## 6. Invariants and edge cases
132
+ - Invariant: <always true>.
133
+ - Empty/limit/concurrency/error: <...>.
134
+
135
+ ## 7. Contracts
136
+ Links: `<openapi.yaml>`, `<schema.sql>`, `<types.ts>`.
137
+
138
+ ## 8. Non-functional requirements
139
+ | Metric | Target | How we check |
140
+ |---|---|---|
141
+ | Latency p95 | <...> | <...> |
142
+
143
+ ## 9. Success metrics
144
+ - **SC-1** — <number and how to check>.
145
+
146
+ ## 10. Open questions
147
+ - **Q1** — <...>; owner: <...>; due <date>.
148
+
149
+ ## 11. Traceability
150
+ | R | AC | Task | Test |
151
+ |---|---|---|---|
152
+ | R1 | AC1.1 | T1 | `test_...` |
153
+
154
+ ## 12. Definition of Done
155
+ - [ ] AC closed.
156
+ - [ ] Tests green.
157
+ - [ ] Contracts and docs/ADR updated.
158
+ ```
159
+
160
+ ## Command /agents-md
161
+
162
+ 1. Decide the mode: audit an existing file or draft from scratch.
163
+ 2. For an audit: `orch_uni_context_lint` → `context-lint`; show the SGR and `closing_list`.
164
+ 3. For a draft: collect facts and ask at most 8 questions; do not invent commands or paths.
165
+ 4. Fill the template; stay within 150–200 lines.
166
+ 5. Run the linter; show the diff and open questions.
167
+ 6. Change the canonical file only after approval; apply fixes through `fix-runner`.
168
+
169
+ ## Command /spec
170
+
171
+ 1. Capture the brief and ask at most 5 clarifying questions.
172
+ 2. Non-goals, priorities and metrics are owned by the owner; do not invent them.
173
+ 3. Fill the template: EARS, AC with tests, invariants, traceability, DoD.
174
+ 4. Run `orch_uni_context_lint` and `context-lint`; show the diff and questions.
175
+ 5. Change the canonical file only after approval.
176
+
177
+ ## Review
178
+
179
+ - [ ] `AGENTS.md` ≤200 lines, `SPEC.md` ≤1.5k words.
180
+ - [ ] Every line is testable.
181
+ - [ ] No duplicates with README/linter/CI.
182
+ - [ ] Precedence and boundaries are explicit.
183
+ - [ ] Every relative link exists.
184
+ - [ ] Every R has an AC, every AC has a test.
185
+ - [ ] Non-goals and DoD are present.
186
+ - [ ] A baseline on 10–20 tasks exists.
187
+
188
+ ## Anti-patterns
189
+
190
+ | Anti-pattern | Why it is bad | What to do |
191
+ |---|---|---|
192
+ | Auto-generation "just in case" | −0.5…−2% success, +20–23% cost | Write manually, high-signal only |
193
+ | Restating README/architecture | Duplication, zero effect | Link to docs |
194
+ | Duplicating the linter | Tokens on what is already checked | Linter/CI |
195
+ | Generic phrases ("write clean code") | Not testable | Imperative + example |
196
+ | Conflicts between layers | The model chooses arbitrarily | Explicit precedence |
@@ -45,7 +45,7 @@ A "Fact-check (pre-pass): …" block is added to the pair's prompts — 5–15 l
45
45
 
46
46
  ## Subtleties
47
47
 
48
- - The `orch_uni_*` tools (if registered by the plugin): the state revision — `orch_uni_snapshot` (aggregate), an SGR report check — `orch_uni_validate_report` (invalid → resume the session and demand that the SGR be reissued), the roles' sessionID/model/cost — `orch_uni_sessions`; otherwise — manually, as before.
48
+ - The `orch_uni_*` tools (if registered by the plugin): the state revision — `orch_uni_snapshot` (aggregate), an SGR report check — `orch_uni_validate_report` (text; files — `write`, not a heredoc; invalid → resume the session and demand that the SGR be reissued), the roles' sessionID/model/cost — `orch_uni_sessions`; otherwise — manually, as before.
49
49
  - The brief and the risk registry — as files; the subagents return the reports to the chat (the `edit deny` rule in `permissions`; `shell` is allowed), the root itself saves what is needed.
50
50
  - "Blind" runs — a sandbox without git history (without fix commits); re-audit — by contrast, the fixes delta is shown.
51
51
  - The root's verdict does not substitute for the auditors' verdicts: until both roles are ready, the loop lives (plus the escalation rules from `process-ready-loop.md`).
@@ -192,7 +192,7 @@ subagent({agent:"redteam", background:true,
192
192
  ### Инструменты `orch_uni_*` (если зарегистрированы плагином)
193
193
 
194
194
  - ревизия состояния → `orch_uni_snapshot` (aggregate = хэш каталога): фиксируется вместе с вердиктом и верификацией;
195
- - отчёт роли → `orch_uni_validate_report` (путь или текст): `valid=false` → дефект шага, resume той же сессии с требованием перевыпустить SGR; не пропускать `warnings`;
195
+ - отчёт роли → `orch_uni_validate_report` (предпочтительно `text`; файлы — `write`, не shell-heredoc: Windows-лимит 32 767): `valid=false` → дефект шага, resume той же сессии с требованием перевыпустить SGR; не пропускать `warnings`;
196
196
  - sessionID ролей, их модель и стоимость → `orch_uni_sessions`;
197
197
  - инструменты недоступны — работаем вручную, как прежде.
198
198
 
@@ -238,5 +238,5 @@ subagent({agent:"redteam", background:true,
238
238
  - Preflight: перед аудиторской фазой проверь наличие `subagent`; нет — цикл не запускай.
239
239
  - Статус итога: «готово; штатный аудит отложен». В итог: ревизия состояния (коммит/хэш каталога), компенсирующие проверки списком (явно как проверки), план прогона в обычной сессии.
240
240
  - Запрещено: выдавать самопроверку/`ai`-ревью за независимый аудит; помечать задачу прошедшей аудит; писать «ready».
241
- - Хендофф: аудит на зафиксированной ревизии в обычной сессии; либо роли запускаются отдельными процессами `opencode run --agent <роль> "<бриф>"` в каталоге проекта (если среда даёт shell — например, AetherShell); sessionID ролей сохранить (Фаза 3.5/re-audit).
241
+ - Хендофф: аудит на зафиксированной ревизии в обычной сессии; либо роли запускаются отдельными процессами `opencode run --agent <роль> "<бриф>"` в каталоге проекта (если среда даёт shell); sessionID ролей сохранить (Фаза 3.5/re-audit).
242
242
  - Если среда восстановилась до завершения — проведи отложенный аудит и обнови вердикт.
@@ -0,0 +1,196 @@
1
+ # Token-efficient AGENTS.md и SPEC.md
2
+
3
+ Файл инструкций — это бюджет внимания, а не документация. Оплачивается каждая строка: она участвует в контексте каждой сессии и конкурирует с задачей. Цель — минимум проверяемых правил, которые нельзя вывести из кода и которые нужны в большинстве сессий.
4
+
5
+ ## Бюджет
6
+
7
+ | Файл | Цель | Потолок |
8
+ |---|---:|---:|
9
+ | Глобальный `AGENTS.md` | 25–40 строк / <500 токенов | 60 строк |
10
+ | Корневой `AGENTS.md` | 100–200 строк / 1–2k токенов | 200 строк |
11
+ | Вложенный `AGENTS.md` | 20–60 строк / <700 токенов | 100 строк |
12
+ | `SPEC.md` | 80–150 строк / ≤1,5k слов | 2k слов |
13
+ | `ADR` | 30–60 строк / <700 токенов | 100 строк |
14
+
15
+ `orch_uni_context_lint` применяет один бюджет корня (`max_lines`, по умолчанию 200 строк) и бюджет слов SPEC (`max_words`, по умолчанию 1500 — цель из таблицы; потолок 2k включается через `max_words: 2000`). Цифры по уровням выше — ориентир для автора, а не отдельные лимиты инструмента. Инструмент сообщает о том, что не проверял (ссылки вне корня, каталоги глубже глубины 3, незакрытый фенс), INFO-находками, поэтому `pass` никогда не означает «непроверено».
16
+
17
+ Правило отбора: если строка не проверяема, выводима из кода/линтера или нужна реже половины сессий — удалить либо вынести в ссылку.
18
+
19
+ ## AGENTS.md: 12 правил
20
+
21
+ 1. Команды — в начало: install, build, test, one test, lint, run; с флагами и рабочей директорией.
22
+ 2. Только невыводимое: флаги, ловушки, порядок слоёв, запреты, версии.
23
+ 3. Одна инструкция — одна строка, императив, проверяемо.
24
+ 4. Стиль — линтеру; не пересказывать README и стандарт языка.
25
+ 5. Явные «Never» и «Ask first»: секреты, `dist/`, prod, миграции, зависимости.
26
+ 6. Приоритеты — в тексте: что переопределяет что; при конфликте — остановись и спроси.
27
+ 7. Один источник правды: `AGENTS.md` + симлинк/импорт для `CLAUDE.md`.
28
+ 8. Ссылки вместо инлайна; инлайнить только то, что нужно всегда.
29
+ 9. Правило добавлять после повторной ошибки агента, а не «на будущее».
30
+ 10. Мёртвое правило удалять: это налог на каждый запрос.
31
+ 11. Стабильное — вверх, даты/ветки/задачи — вниз (prefix cache).
32
+ 12. Ревьюить файл как код; менять при смене тулинга/CI.
33
+
34
+ ## Шаблон AGENTS.md
35
+
36
+ ```md
37
+ # AGENTS.md
38
+
39
+ ## Приоритеты
40
+ 1. Явное указание пользователя в задаче.
41
+ 2. SPEC.md активной фичи.
42
+ 3. Ближайший AGENTS.md.
43
+ 4. Этот файл.
44
+ 5. Глобальный AGENTS.md.
45
+ При конфликте — остановись и спроси.
46
+
47
+ ## Команды
48
+ | Задача | Команда | Примечание |
49
+ |---|---|---|
50
+ | Установка | `<...>` | `<версия>` |
51
+ | Сборка | `<...>` | `<флаг>` |
52
+ | Тесты | `<...>` | `<лимит>` |
53
+ | Один тест | `<...>` | `<имя>` |
54
+ | Линт/типы | `<...>` | |
55
+ | Запуск | `<...>` | `<порт>` |
56
+
57
+ ## Границы
58
+ - `<path>/` — сгенерировано, не редактировать.
59
+ - `<path>/` — вендорное, не редактировать.
60
+ - Новые файлы — в `<path>`.
61
+
62
+ ## Конвенции
63
+ - <Одно проверяемое правило на строку.>
64
+
65
+ ## Проверка
66
+ `<analyze>` → `<lint>` → `<test>`.
67
+ Готово = все команды зелёные + `<DoD>`.
68
+
69
+ ## Никогда / сначала спроси
70
+ - Никогда: секреты, `dist/`, prod, применённые миграции.
71
+ - Сначала спроси: схема БД, публичный API, новые зависимости, CI.
72
+
73
+ ## Указатели
74
+ - `SPEC.md` — контракт фичи.
75
+ - `docs/adr/` — решения.
76
+ - `docs/pitfalls.md` — ловушки.
77
+ ```
78
+
79
+ ## SPEC.md: 12 правил
80
+
81
+ 1. Одна фича — один файл, 1–3 страницы; больше — split через roadmap.
82
+ 2. Стабильные ID (`R1`, `AC1.1`), не перенумеровывать.
83
+ 3. Одно требование — одно наблюдаемое поведение.
84
+ 4. EARS или Given/When/Then — единообразно; MUST/SHOULD/MAY — редко.
85
+ 5. Никакого HOW: стек, файлы, классы — в plan/design/ADR.
86
+ 6. Контракты — ссылками, не копиями.
87
+ 7. Non-goals — 3–7 пунктов.
88
+ 8. Инварианты — отдельно от acceptance criteria.
89
+ 9. Таблицы — для AC и трассировки; проза — для контекста.
90
+ 10. Frontmatter: `status`, `owner`, `version`, `supersedes`; без changelog в теле.
91
+ 11. Не более трёх открытых вопросов, у каждого owner и дата; `TBD` в других местах запрещён.
92
+ 12. DoD и метрики — измеримые; «быстрее» без числа не считается.
93
+
94
+ ## Шаблон SPEC.md
95
+
96
+ ```md
97
+ ---
98
+ id: SPEC-000
99
+ title: <название>
100
+ status: draft
101
+ owner: "@team"
102
+ version: 1.0.0
103
+ supersedes: —
104
+ ---
105
+
106
+ # SPEC-000: <название>
107
+
108
+ ## 1. Контекст и проблема
109
+ <3–5 строк: кто страдает, в чём боль, почему сейчас.>
110
+
111
+ ## 2. Цель и non-goals
112
+ **Цель:** <одно предложение>.
113
+ **Non-goals:** <3–7 пунктов «сознательно не делаем»>.
114
+ <!-- один пункт на строку с `-` и отступом 0–4; перенесённый абзац — один пункт;
115
+ фенс, `<pre>` и bullet с отступом 5+ — код, не пункт. -->
116
+
117
+ ## 3. Сценарии
118
+ | ID | Роль | Цель | Ценность | Независимый тест |
119
+ |---|---|---|---|---|
120
+ | S1 | <...> | <...> | <...> | <...> |
121
+
122
+ ## 4. Требования (EARS)
123
+ - **R1** — WHEN <триггер>, THE SYSTEM SHALL <результат>.
124
+ - **R2** — IF <условие>, THEN THE SYSTEM SHALL <...>.
125
+
126
+ ## 5. Acceptance criteria
127
+ | AC | R | Given | When | Then | Test |
128
+ |---|---|---|---|---|---|
129
+ | AC1.1 | R1 | <...> | <...> | <...> | `test_...` |
130
+
131
+ ## 6. Инварианты и краевые случаи
132
+ - Инвариант: <всегда истинно>.
133
+ - Пусто/лимит/конкурентность/ошибка: <...>.
134
+
135
+ ## 7. Контракты
136
+ Ссылки: `<openapi.yaml>`, `<schema.sql>`, `<types.ts>`.
137
+
138
+ ## 8. Нефункциональные требования
139
+ | Метрика | Цель | Как проверяем |
140
+ |---|---|---|
141
+ | Latency p95 | <...> | <...> |
142
+
143
+ ## 9. Метрики успеха
144
+ - **SC-1** — <число и способ проверки>.
145
+
146
+ ## 10. Открытые вопросы
147
+ - **Q1** — <...>; owner: <...>; до <дата>.
148
+
149
+ ## 11. Трассировка
150
+ | R | AC | Task | Test |
151
+ |---|---|---|---|
152
+ | R1 | AC1.1 | T1 | `test_...` |
153
+
154
+ ## 12. Definition of Done
155
+ - [ ] AC закрыты.
156
+ - [ ] Тесты зелёные.
157
+ - [ ] Контракты и docs/ADR обновлены.
158
+ ```
159
+
160
+ ## Команда /agents-md
161
+
162
+ 1. Определи режим: аудит существующего файла или черновик с нуля.
163
+ 2. Для аудита: `orch_uni_context_lint` → `context-lint`; покажи SGR и `closing_list`.
164
+ 3. Для черновика: собери факты и задай не более 8 вопросов; не выдумывай команды и пути.
165
+ 4. Заполни шаблон; уложись в 150–200 строк.
166
+ 5. Прогони линтер, покажи diff и открытые вопросы.
167
+ 6. Канонический файл меняй только после подтверждения; правки — через `fix-runner`.
168
+
169
+ ## Команда /spec
170
+
171
+ 1. Зафиксируй бриф и задай не более 5 уточняющих вопросов.
172
+ 2. Non-goals, приоритеты и метрики утверждает владелец; не придумывай их.
173
+ 3. Заполни шаблон: EARS, AC с тестами, инварианты, трассировка, DoD.
174
+ 4. Прогони `orch_uni_context_lint` и `context-lint`; покажи diff и вопросы.
175
+ 5. Канонический файл меняй только после подтверждения.
176
+
177
+ ## Ревью
178
+
179
+ - [ ] `AGENTS.md` ≤200 строк, `SPEC.md` ≤1,5k слов.
180
+ - [ ] Каждая строка проверяема.
181
+ - [ ] Нет дублей с README/линтером/CI.
182
+ - [ ] Приоритеты и границы прописаны.
183
+ - [ ] Все относительные ссылки существуют.
184
+ - [ ] У каждого R есть AC, у каждого AC есть тест.
185
+ - [ ] Non-goals и DoD на месте.
186
+ - [ ] Есть baseline на 10–20 задачах.
187
+
188
+ ## Анти-паттерны
189
+
190
+ | Анти-паттерн | Почему плохо | Что делать |
191
+ |---|---|---|
192
+ | Автогенерация «на всякий случай» | −0,5…−2% успеха, +20–23% косты | Писать вручную, только высокосигнальное |
193
+ | Пересказ README/архитектуры | Дублирование, нулевой эффект | Ссылка на docs |
194
+ | Дублирование линтера | Токены на то, что и так проверяется | Линтер/CI |
195
+ | Общие фразы («пиши чисто») | Непроверяемо | Императив + пример |
196
+ | Противоречия между уровнями | Модель выбирает произвольно | Явные приоритеты |
@@ -45,7 +45,7 @@
45
45
 
46
46
  ## Тонкости
47
47
 
48
- - Инструменты `orch_uni_*` (если зарегистрированы плагином): ревизия состояния — `orch_uni_snapshot` (aggregate), проверка SGR-отчёта — `orch_uni_validate_report` (невалиден → resume сессии с перевыпуском SGR), sessionID/модель/стоимость ролей — `orch_uni_sessions`; иначе — вручную, как прежде.
48
+ - Инструменты `orch_uni_*` (если зарегистрированы плагином): ревизия состояния — `orch_uni_snapshot` (aggregate), проверка SGR-отчёта — `orch_uni_validate_report` (text; файлы — `write`, не heredoc; невалиден → resume сессии с перевыпуском SGR), sessionID/модель/стоимость ролей — `orch_uni_sessions`; иначе — вручную, как прежде.
49
49
  - Бриф и реестр рисков — файлами; отчёты субагенты возвращают в чат (правило `edit deny` в `permissions`; `shell` разрешён), root сохраняет нужное сам.
50
50
  - «Слепые» прогоны — песочница без git-истории (без фикс-коммитов); re-audit — наоборот, дельта правок показывается.
51
51
  - Вердикт root'а не подменяет вердикты аудиторов: пока обе роли не ready — цикл живёт (плюс правила эскалации из `process-ready-loop.md`).