# Аудит 14 — AI Agent Workflow Efficiency ## 1. Audit metadata - **Дата:** 2026-10-11. - **Основание:** `audit-prompts/14-ai-agent-workflow-efficiency.md`. - **Результат:** этот файл; имя выбрано по прямому запросу пользователя, вместо имени с суффиксом `-report`, указанного в шаблоне. - **Режим:** статический read-only аудит четырех репозиториев и анализ предоставленного локального `session.json`. Единственная запись — итоговый отчет вне четырех репозиториев. - **Workspace/cwd:** `/Users/ksv741/Project/vibe/WealthLedger`; ниже пути относительно него. `~/…` обозначает локальную глобальную конфигурацию, которая не входит в Git проекта. | Repo | Проверенный путь | Точный HEAD | Начальный status | | --- | --- | --- | --- | | root | `/Users/ksv741/Project/vibe/WealthLedger` | `dc030f84c979cedb2628ef4bd97c62d6c63a9256` | clean | | frontend | `/Users/ksv741/Project/vibe/WealthLedger/frontend` | `c8821200ce699dab1ce65360d1968d5877a2e78b` | clean | | backend | `/Users/ksv741/Project/vibe/WealthLedger/backend` | `0ad84ff4f0b4712abc7e69dc299856f14af6eadd` | clean | | specs | `/Users/ksv741/Project/vibe/WealthLedger/specs` | `fcdc805f6c1b3be6a20a7e858e3e80cbd83a9121` | clean | | docs | `/Users/ksv741/Project/vibe/WealthLedger/docs` | `e6fd4f64b81dd73b33959b845a1babcfac1891c8` | clean | **Skills.** В начале через Skill загружен установленный `ponytail-audit`. Применены его критерии удаления процессной сложности, поиска существующих средств и минимального изменения. Его краткий формат расширен обязательной структурой этого аудита; потенциальные строки/зависимости к удалению не выдумываются. Остальные skill-файлы читались как предмет исследования, без запуска их workflow. **Что выполнялось:** Read/Glob/Grep; `git status --short`; `git rev-parse --show-toplevel HEAD`; `git config --show-origin --get core.hooksPath`; `command -v opencode`; `ls` для проверки каталога результата и типа каталогов skills; read-only `jq`-агрегации существующего JSON. При отсутствии `core.hooksPath` запрос Git возвращает отсутствие значения, а не поломку репозитория. Не найденный `specs/.githooks/pre-commit` проверен перечислением каталога: там только `commit-msg`. **Не выполнялось:** install, Node-команды, tests, lint, build, verify, codegen, OpenSpec CLI, hooks, graph generation, обращения к MCP/внешним сервисам, commit/PR, изменения конфигураций или исходников. Команды тестирования внутри исторического trace — наблюдаемые записи прежнего сеанса, не запуски этого аудита. **Ограничения:** глобальные настройки, локальные `.agents/skills` и `session.json` не versioned этим root allowlist; указанный root SHA не фиксирует их содержание. Startup/debug logs текущего harness не исследованы. Не открывались auth-файлы, БД истории, чужие глобальные sessions или банковские данные. Значения credentials из конфигураций не приводятся. `technical-audit-2026-10-11.md` использован только как прежний реестр: отдельного доказательства workflow-проблем он не дает. Отчет локальный и исключен root allowlist (`.gitignore:1–7`); добавление в tracking не выполняется. ## 2. Executive verdict 1. **Факт:** действующие repo routers уже обеспечивают selective context и самостоятельность checkout. Нет обязательного правила читать все четыре репозитория для каждого UI/backend изменения. Это следует сохранить, а не заменять новым общим руководством. 2. **Подтвержденный механизм затрат:** для любого code/dependency change оба engineering-файла требуют `npm ci` и полный `verify`. В SDD task-dispatch это становится требованием каждого исполнителя. Два завершенных исполнителя в trace сообщают о full verify; фактические subprocess traces и длительность этих gates отсутствуют. Размер экономии **not measured**. 3. **Подтвержденные конфликты инструкций:** локальный risk-based testing конкурирует с универсальным TDD; scoped reviewer — с требованием «fresh verification в этом сообщении»; project approval flow — с generic autonomous rulings. Дополнительные отрицания в dispatch prompt сейчас компенсируют часть конфликтов. 4. **Наблюдаемый локальный сбой:** `nvm use --silent` без bootstrap завершился `127`; следующий вызов с загрузкой `nvm.sh` выполнил целевой тест. Это дешевый устранимый retry, а не свидетельство медленных тестов. 5. **Факт о выборке:** родительский SDD export содержит 53 tool parts и записанные token counts. Повторных Read одного пути нет. Две отмены task и повторные dispatch видны; причины отмен и объем потерянной работы **UNVERIFIED**. Обвинять модель или считать все время сеанса overhead нельзя. 6. **Непроверенная гипотеза:** глобальный каталог MCP/skills и широкий graphify trigger увеличивают нерелевантный контекст. Экспозиция инструментов подтверждена, их вклад в tokens/latency — нет. До измерения нужны селективные triggers, а не массовое удаление полезных инструментов. 7. **KEEP:** approval, explicit store, публичные API artifacts, финансовые/DB/auth regression boundaries и независимый semantic review. В исторической второй задаче review действительно выявил нарушение exact-UID требования после зеленых тестов; это контрпример предложению удалить review целиком. **Итог:** пять подтвержденных instruction/config findings и одна исследовательская гипотеза. P0/P1 не установлены. Основной путь улучшения — согласовать существующие правила и единицу verification, без новой инфраструктуры. ## 3. Inventory & coverage ### 3.1. Что реально изучено | Область | Проверенные объекты | Граница выводов | | --- | --- | --- | | Repo entry points | Root и четыре локальных `AGENTS.md`; frontend/backend engineering/testing; frontend architecture/UI/data; backend HTTP API; specs README/AI_INDEX; docs CONTRIBUTING | Правила прочитаны; их соблюдение во всех прежних sessions не доказано | | Verification consumers | frontend/backend/specs/docs `package.json`; frontend `.husky/pre-commit`, `commit-msg`, установленный Husky launcher; specs `.githooks/commit-msg`; Git hooksPath | Прослежены точки запуска, без аудита семантики custom scripts или CI topology | | SDD | `specs/openspec/config.yaml`, v2 `schema.yaml`, установленный стандартный `openspec-apply-change` | Approval/dependencies/context loading; весь массив canonical specs и archives не читался | | Generic workflows | `subagent-driven-development` и implementer/reviewer templates; TDD; verification-before-completion | Проверены реальные противоречия и capability mismatch, без исполнения workflow | | Global OpenCode | `~/.config/opencode/opencode.jsonc`, `plugins/rtk.ts`, установленный Ponytail plugin | Регистрация/триггеры; tool transport startup latency не измерена | | Другие harness | `~/.claude/CLAUDE.md`, RTK.md, settings; пустой `~/.codex/AGENTS.md`, релевантные config declarations и hooks.json | Наличие и регистрация не приравниваются к исполнению в OpenCode | | UI conventions | AccountIncomePage container и BankCardForm consumer; FSD skill sections о selective references/extraction | Проверка обвинения в обязательных пустых VM/wrappers; не frontend architecture audit | | Runtime sample | Workspace `session.json`, parent messages/tool states/token counters | Один незавершенный SDD-сеанс; child tool traces отсутствуют | Frontend — React/TypeScript/Vite с Mantine, Vitest и локальными packages; backend — NestJS/Prisma/SQLite с Jest. Стек проверен по manifests и локальным инструкциям, не принят из старого отчета. На glob по root нельзя полагаться для nested repos: root исключает их из tracking. Поэтому entry points и поиск локальных AGENTS выполнялись с явными repo paths. В охваченном поиске frontend/backend/specs/docs найдено по одному `AGENTS.md`; repo listings не показывают локальных `.opencode`/`.claude` configs. Это не доказательство отсутствия всех возможных environment overrides. ### 3.2. Метрики и метод Источник — JSON export; обход `.messages[].parts[]`, только `type == "tool"`. Считаются вызовы родителя, включая отмененные и незавершенный. Tokens суммированы **один раз** из assistant `.info.tokens`, без повторного учета `step-finish.tokens`; сумма сверена с `.info.tokens` сеанса. Размеры outputs — `utf8bytelength(.state.output)`, без дубликатов из metadata. Байты не конвертируются в tokens. | Метрика | Значение | Охват/интерпретация | | --- | --- | --- | | Сообщения | 42: 38 assistant, 4 user | Только parent export | | Tool parts | 53 | bash 19; read 12; task 9; skill 4; write 3; grep 2; edit 2; todowrite 2 | | Повторное чтение пути | 0 повторов среди 12 Read | Не включает shell reads и инструменты children | | До первого implementer dispatch | 34 tool parts | Включает approvals, необходимые contextFiles и два explore; не означает 34 лишних вызова | | Записанные input tokens | 449369 | Provider/harness counters, не независимый tokenizer | | Записанные cache read tokens | 2601600 | Сумма по turns, не число уникальных tokens контекста | | Записанные output / reasoning tokens | 13682 / 17208 | Отдельные поля export; не суммируются в придуманную billing-модель | | Tool output bytes | 242449 | `.state.output` родителя | | Из них четыре Skill outputs | 58388 | apply, subagent workflow, TDD, verification; без injected system prompt | | Два explore outputs | 25197 | Backend/frontend mapping; полезность каждой строки не измерена | | Самый большой tool output | 33577 bytes | Загрузка subagent-driven-development | | Dispatch prompt bytes | 26357 | Девять task inputs, включая отмены и resume | | Отмены / незавершенный task | 2 / 1 | Отмены сопровождаются MessageAbortedError; последний fix имеет status running | | Bash с nonzero exit | 1 | `nvm` отсутствует; exit 127 | | Интервал export | 2026-10-10 18:59:47–20:17:09 UTC; 4642.105 s | `updated-created`; включает ожидание пользователя и children, не active processing time | Evidence: `session.json:1–34` — metadata; `:2970–2994`, `:3280–3300`, `:3961–3979`, `:4070–4089`, `:4392–4410`, `:4511–4530` — task states; `:3420–3434` — failed shell. Числа получены read-only `jq` с фильтрацией/group_by и суммированием, а не оценкой по размерам файлов. **Стоимость исполнения:** `cost: 0` в export не доказывает бесплатную работу. Полные costs/tokens children, стоимость tool catalog/system instructions, чистый verification runtime и контрфактическая экономия **NOT MEASURED**. Отдельно выделенный **runtime agent overhead NOT MEASURED**, хотя session usage counters доступны. Репрезентативность ограничена: один явно запрошенный SDD feature с делегацией, TDD и review. Нет runtime samples small UI fix или обычного backend contract change; их последовательности ниже — рекомендации, не измерения. Точные HEAD четырех repo в export не установлены; его snapshot hashes не приравниваются к repo commits. Историческое исполнение не приписывается текущим HEAD автоматически. Reports/briefs из прежнего `.superpowers` workspace изучались только по встроенному содержимому export, без подтверждения наличия этих файлов сейчас. ## 4. Instruction Precedence Map | Уровень/источник | Реальное включение | Правило разрешения | | --- | --- | --- | | System/developer текущего harness | Уже передан в текущем сеансе: инструменты, cwd, инструкции OpenCode, правила выбора skills и запрет незапрошенной делегации | Имеет более высокий приоритет, чем project/skill text; каталог навыков не означает загрузку всех тел | | Прямой user request / audit protocol | Пользователь назвал prompt и точный файл результата; protocol прочитан | Read-only ограничения определяют этот аудит; создание feature/SDD артефактов не активировано | | Global `~/.claude/CLAUDE.md` | Прямо объявлен harness как loaded instruction source в текущем сеансе; внутри ссылка `@RTK.md` | Само включение подтверждено; детали loader fallback не установлены. RTK.md дополнительно прочитан вручную, его автоматическое раскрытие не предполагается | | Root `AGENTS.md` | Объявлен loaded source; cwd находится в root | Root правила относятся к root; локальные application conventions не наследуют root conventions (`AGENTS.md:9–13`) | | Repo-local AGENTS | В этом аудите явно прочитаны; при чтении файлов repo harness дополнительно показывает соответствующий reminder | Владелец реализации — affected repo. Повторный reminder не требует второго Read того же файла | | Topic conventions | Через локальные task/path triggers, не все сразу | Объединить применимые темы, убрать дубликаты путей; engineering entry point обязателен в frontend/backend | | SDD context/config/schema | Только при explicit OpenSpec; CLI возвращает contextFiles, selected schema и tasks | Approval/contract — проектный semantic authority; structural readiness не является approval | | Loaded skills | Тело появляется после Skill invocation или целевого чтения | Уточняют способ выполнения, не отменяют user scope, repo safety или утвержденные contracts | | Ponytail plugin | Config registration + `experimental.chat.system.transform`; активный ruleset виден в текущем harness | Это injected text, не отдельный Skill call на каждом turn. Число последовательных копий в prompt не установлено | | Codex/Claude settings/hooks | Конфигурации существуют; нет runtime traces их исполнения в выбранном OpenCode sample | Не переносить их subprocess costs на OpenCode по факту наличия файлов | Evidence: root `AGENTS.md:9–32`; frontend/backend `AGENTS.md:3–26`; specs `AGENTS.md:3–19`; `~/.claude/CLAUDE.md:1–5`; `specs/openspec/config.yaml:55–62`; v2 `schema.yaml:592–609`. Реальный механизм Ponytail: `~/.config/opencode/opencode.jsonc:6–9` → установленный package `.opencode/plugins/ponytail.mjs:51–82`. Каталоги `.agents/skills`, `~/.config/opencode/skills`, `~/.codex/skills`, `~/.claude/skills/graphify` проверены как directories, не top-level symlinks. Это не исключает ссылок глубже. Происхождение global Claude fallback и discovery internals — **UNVERIFIED**; loaded-source declaration и видимый skill catalog достаточны для утверждения об экспозиции, но не для вывода о конкретном loader algorithm. ## 5. Agent Hook/Tool Trigger Matrix | Событие | Агент/prompt | Hook/subprocess | Что установлено | | --- | --- | --- | --- | | Read / Grep / Glob | Router может активировать conventions/skills | В просмотренном OpenCode RTK plugin эти tools отфильтрованы | Нет найденного автоматического lint/test/build при чтении | | Edit / apply_patch | Изменение путей активирует rerouting; code change требует final gates по engineering | Просмотренные RTK/Ponytail hooks не запускают application checks на edit | Проверки выбирает агент; наличие других environment hooks не исключено | | Bash/shell | Команду выбирает агент из task verification/conventions | RTK проверяет binary при инициализации, затем вызывает `rtk rewrite ` до каждого bash/shell | Rewrite — дополнительный subprocess, не test runner; latency NOT MEASURED | | Каждый OpenCode system transform | Активен Ponytail mode | Plugin читает mode и добавляет ruleset к system output | Нет запуска lint/test/build; накопление старых копий не доказано | | `npm ci` frontend | Требуется engineering для code/dependency change | Manifest `prepare: husky` | Может настраивать локальные hooks; это не read-only проверка | | `npm run verify` frontend | Full final gate; может попасть в каждый worker brief | Package build, OpenAPI check, types, ESLint, lint-rule tests, Vitest coverage, Knip, два dependency graphs, app и Storybook builds | Триггер проверен; внутренние дубли/CI topology отнесены audit 11 | | `npm run verify` backend | Аналогичное local требование | Lint, lint-rule tests, два typecheck, Jest coverage, Prisma generate/Nest build | В sample два исполнителя сообщают о запуске; child command traces отсутствуют | | Git commit frontend | Агент обязан видеть результат hooks | Активный `.husky/_`; pre-commit → Gitleaks, lint-staged с ESLint `--fix`, `npm run deps`; commit-msg → commitlint | Depcruise запускает hook, не Read/Edit; lint-staged может изменить staged content | | Git commit specs | Commit metadata | Активный `.githooks`; только `commit-msg` → commitlint | Pre-commit/full validation hook не найден | | Git commit root/backend/docs | Правила подготовки commit | Явный `core.hooksPath` не задан в прочитанной конфигурации | Отсутствие custom hooks в `.git/hooks` не утверждается: их содержимое не проверялось | | Codex PreToolUse/PostToolUse и lifecycle | Не выбранный runtime sample | `~/.codex/hooks.json` регистрирует Caveman adapters, PreToolUse также shrink-hook; config содержит trusted hashes | Регистрация подтверждена; runtime вызовы и стоимость UNVERIFIED | | Claude lifecycle | Global plugins enabled | В `~/.claude/settings.json` собственный `hooks` block не найден | Plugin hooks отдельно не изучены; фраза RTK.md про transparent Claude rewrite не является доказательством его исполнения | | OpenSpec Apply | Store/status/apply context по явному запросу | CLI не является edit hook; после task checkbox стандартный skill требует refresh instructions | Не сокращать через угадывание путей/checkbox line; payload filtering не должно скрывать обязательный context | Evidence: `~/.config/opencode/plugins/rtk.ts:10–36`; Ponytail plugin `:73–95`; `frontend/package.json:14–38`; `.husky/pre-commit:1–3`, `.husky/commit-msg:1`, `.husky/_/h:6–17`; `backend/package.json:12–38`; `specs/package.json:8–14`; `.githooks/commit-msg:1–2`; `~/.codex/hooks.json:23–68`; `~/.codex/config.toml:269–314`; `~/.claude/settings.json:1–33`; OpenSpec apply skill `:104–112`. ## 6. Findings ### AGENT-001 — Verification привязан к каждому code change/worker, включая переустановку - **Decision = SIMPLIFY; Severity = P2; Confidence = High; Effort = S.** - **Evidence:** `frontend/.ai/conventions/engineering.md:58–66`; `backend/.ai/conventions/engineering.md:58–66`; `frontend/package.json:26–27`; `backend/package.json:34`; `session.json:2975–2993,4071–4089`. - **Claim:** единый финальный gate оправдан, но правило `npm ci` + full `verify` не различает восстановление environment, целевую task и готовность repo delivery. - **Current mechanism:** локальный router ведет в engineering; dispatch требует полного backend verify до отчета каждого исполнителя. Worker 1.1 и worker 1.2 сообщают full verify на последовательных состояниях одного checkout. `npm ci` предписан текстом, но его исполнение в этой выборке не видно. - **Impact / actual cost:** лишние install/full checks при уже готовом environment и дроблении feature. Full verify включает coverage/build, у frontend также Storybook. **Impact unmeasured**; две декларации запуска — не измерение двух реальных длительностей. - **Why now:** это прямой consumer локальных инструкций в доступном SDD-сеансе; одинаковое требование применяется и к небольшому UI diff. - **Minimum change:** в существующем разделе gates отделить install при отсутствующих/измененных dependencies, targeted iteration и full verify один раз на итоговом состоянии affected repo. Worker проверяет свою boundary; repo owner закрывает финальный gate. Explicit approved task Verification остается обязательной и не отменяется этой оптимизацией. - **Guarantees at risk:** общий type/build/import graph; fresh Prisma/package artifacts; money/auth/DB/contract regression checks. Полный финальный gate и risk checks сохранить, не заменять их одним changed-file lint. - **Counterarguments / trade-offs:** `npm ci` полезен для подозрительного или несовместимого environment; per-task full gate дает ранний сигнал интеграции. Поэтому исключение должно зависеть от готовности environment и типа diff, а не от желания ускориться. Markdown-only путь уже дешевый — исправлять его не требуется. - **Verification or rollback:** одна small UI задача и одна backend task с неизмененным lockfile; сравнить реальные install/check invocations, сохранив финальный full gate. При ошибке из stale environment восстановить clean install. До согласования локального правила действующее full verify требование сохраняется. - **Related finding IDs:** AGENT-002, AGENT-004. ### AGENT-002 — Несогласованные testing/fresh-evidence rules требуют лишней работы - **Decision = SIMPLIFY; Severity = P2; Confidence = High; Effort = S.** - **Evidence:** `frontend/.ai/conventions/testing.md:13–24`; `backend/.ai/conventions/testing.md:13–20,34–42`; `.agents/skills/workflow/test-driven-development/SKILL.md:18–45,185–193,293–306`; `.agents/skills/workflow/verification-before-completion/SKILL.md:17–35,64–71,100–114`; `.agents/skills/workflow/subagent-driven-development/task-reviewer-prompt.md:73–92`; `session.json:3380–3428,3517–3533`. - **Claim:** project risk-based testing допускает declaration/thin wiring без нового unit test, а generic TDD требует test-first для любого production code и тест каждой новой функции. Отдельно правило fresh evidence «в этом сообщении» конфликтует с переиспользованием проверенного отчета reviewer. - **Current mechanism:** оба skills опубликованы в текущем catalog; в sample оба загружены. Reviewer template запрещает rerun без конкретного сомнения; после review coordinator объявляет independent check и повторно запускает целевой Jest. Начальный user prompt также прямо просил coordinator verification — повтор нельзя целиком приписать skill. - **Impact / actual cost:** один дополнительный успешный parent target-test вызов после worker/reviewer; перед ним одна failed shell попытка. Наличие бессмысленных новых tests из-за TDD в текущих исходниках не доказано. **Impact unmeasured** для общего потока. - **Why now:** правила не дают единого ответа, что считается task proof; агент повторно принимает решение вместо использования одного evidence contract. - **Minimum change:** применимость generic TDD ограничить observable behavior/regression; declaration/generated/low-risk cosmetic changes следуют local testing. Fresh evidence связывать с проверенной версией diff, command, exit и outcome, а не номером текущего сообщения. Reviewer проверяет diff и соответствие evidence; повторяет test при named doubt или изменении проверенного кода. - **Guarantees at risk:** обнаружение реальной регрессии, честный RED/GREEN для bug/новой логики, достоверность worker evidence. Не принимать один `DONE`; если отчет неполный или outcome/версия не совпадают, проверить целевую boundary заново. - **Counterarguments / trade-offs:** independent execution нужен при явном user требовании, подозрительном evidence или чувствительной boundary. В этой sample coordinator rerun имеет такое пользовательское основание. Текущий harness также уже исключает tests для low-risk reversible changes; его более высокий приоритет ограничивает generic TDD. Проблема — конфликт default rules, а не доказанная бесполезность каждого повторного теста. - **Verification or rollback:** сравнить три случая — cosmetic diff, behavior fix, misleading worker report. Первому не добавлять фиктивный test, второму оставить meaningful regression, третий должен вызвать повторную проверку/блокировку. При сомнении в evidence вернуть targeted rerun. - **Related finding IDs:** AGENT-001, AGENT-003, AGENT-004. ### AGENT-003 — Generic autonomous rulings конфликтуют с approval flow SDD - **Decision = FIX; Severity = P2; Confidence = High; Effort = S.** - **Evidence:** `.agents/skills/workflow/subagent-driven-development/SKILL.md:17–31,296–301,366–371,411–428`; `.agents/skills/sdd/openspec-apply-change/SKILL.md:115–120`; `specs/openspec/config.yaml:55–58`; `specs/openspec/schemas/wealth-ledger-sdd-v2/schema.yaml:625–642`; `session.json:57,2977,4073`. - **Claim:** generic controller предлагает самостоятельно решать plan defects/ambiguities и продолжать, тогда как WealthLedger требует остановить downstream при semantic conflict и переутвердить affected artifacts. - **Current mechanism:** user загрузил OpenSpec и subagent workflow вместе. Generic skill объявляет только четыре stop classes и разрешает rulings; OpenSpec отдельно требует surface/ask при scope/design issues. User и worker briefs в sample явно запрещают изменение approved requirements, компенсируя конфликт. - **Impact / actual cost:** дополнительный process text в dispatch и риск неверного continuation/rework при следующем неоднозначном контракте. Нарушение approval в этой sample **не установлено**. **Impact unmeasured**. - **Why now:** противоречие находится в реально загруженной паре workflows, а не в неиспользуемом архиве. - **Minimum change:** сузить generic rulings до implementation choices внутри approved semantics; при SDD ссылаться на существующий project change-control. Убрать универсальную формулу «only four stops» для workflow с внешним approval. Стандартный OpenSpec skill не менять и не форкать. - **Guarantees at risk:** approval provenance, contract compatibility, financial/access invariants и пользовательское управление scope. Никакой token optimization не оправдывает их обход. - **Counterarguments / trade-offs:** автономные локальные решения ускоряют execution и не требуют approval на каждый naming/refactor. Сохранять их для механических решений; semantic changes различать по уже существующей schema, без нового документа принятия решений. - **Verification or rollback:** статический dry-run на двух ситуациях: локальный helper choice продолжает execution; новая wire field/error semantics возвращает к earliest affected artifact. При неоднозначности сохранять downstream stop. - **Related finding IDs:** AGENT-002, AGENT-006. ### AGENT-004 — Инструкция Node bootstrap недостаточна для non-interactive shell - **Decision = FIX; Severity = P2; Confidence = High; Effort = S.** - **Evidence:** `AGENTS.md:26`; `frontend/.ai/conventions/engineering.md:14`; `backend/.ai/conventions/engineering.md:14`; `specs/AGENTS.md:18–19`; `session.json:3420–3434,3517–3533`. - **Claim:** команда `nvm use --silent` предполагает уже загруженную shell function, но tool shell в sample этого не обеспечил. - **Current mechanism:** coordinator вызывает буквально рекомендованную команду в backend cwd; получает `zsh:1: command not found: nvm`, exit 127. Следующий вызов загружает `$HOME/.nvm/nvm.sh`, выбирает local Node и получает 28 passed. - **Impact / actual cost:** подтвержден один failed tool call и следующий исправленный вызов. Записанные tool durations — 13 ms и 1406 ms; это не стоимость reasoning/turn и не прогноз экономии. - **Why now:** это воспроизводимый по trace разрыв между documented command и выбранным tool environment; worker briefs уже содержат bootstrap, но общий entry point — нет. - **Minimum change:** добавить к существующей инструкции короткое условие для non-interactive shell: загрузить установленный `nvm.sh`, затем `nvm use --silent` из repo owner cwd. Не создавать bootstrap script, не менять `.nvmrc`, не ставить Node в этом аудите. - **Guarantees at risk:** pinned local Node и правильный cwd. Их сохранить; использование произвольного системного Node не является исправлением. - **Counterarguments / trade-offs:** в interactive shell исходная команда работает. Не делать безусловный второй bootstrap на каждый вызов, если shell уже предоставляет `nvm`. - **Verification or rollback:** в следующей обычной implementation session проверить bootstrap в том же non-interactive tool shell и local cwd одной безопасной version-командой; этот аудит не запускал Node. - **Related finding IDs:** AGENT-001, AGENT-002. ### AGENT-005 — Глобальный skill/tool routing шире типичных задач; вклад требует измерения - **Decision = INVESTIGATE; Severity = P3; Confidence = Medium; Effort = S.** - **Evidence:** `~/.claude/CLAUDE.md:1–5`; `~/.claude/skills/graphify/SKILL.md:1–4,49–59,65–100`; `~/.config/opencode/opencode.jsonc:84–102`; `~/.cache/opencode/packages/@dietrichgebert/ponytail@latest/node_modules/@dietrichgebert/ponytail/.opencode/plugins/ponytail.mjs:54–82`; текущий harness catalog/tool declarations. - **Claim:** есть risk of inefficiency: global graphify description предлагает обработать любую codebase/project-content question через graph, а глобальная короткая инструкция явно называет `/graphify`. В обычном backend/text task также доступны браузерные и remote-repo tools. - **Current mechanism:** graphify description действительно опубликован в текущем skill catalog; в отсутствие графа полный workflow предполагает install/detect/write. Playwright, Chrome DevTools, Gitea и Context7 доступны в текущем tool surface и зарегистрированы global config. Sample не содержит graphify/browser/MCP вызовов. - **Impact / actual cost:** irrelevance/selection risk и потенциальный prompt/startup cost. Tokens tool schemas, install/startup latency и число ошибочных skill invocations **NOT MEASURED**. Существование двух browser tools не доказывает, что один лишний. - **Why now:** уже видна широкая экспозиция; измерение можно сделать без нового tracing stack и без изменения стандартных OpenSpec skills. - **Minimum change:** проверить resolved startup sources; на обычных задачах выбирать skill по требуемому workflow, не по слову «codebase». Для graphify сравнить narrow explicit-query trigger с текущим broad description; для MCP — доступный task-specific набор при запуске, если harness его поддерживает. Менять default registration только после сравнения. - **Guarantees at risk:** browser/a11y proof для UI, актуальные library docs, remote issue/review operations, полезные существующие graph queries. Для задач с такими boundaries инструменты должны оставаться доступны. - **Counterarguments / trade-offs:** MCP может запускаться лениво, tool schemas могут кэшироваться; graph lookup по готовому графу может экономить чтение. Read-only протокол этого аудита исключает graph generation независимо от broad skill trigger. - **Verification or rollback:** один и тот же bounded task в полном и релевантном tool surface; записать resolved sources, first-response tokens, tool calls и outcomes. Без такого A/B автоматическое удаление MCP/graphify не рекомендовано. - **Related finding IDs:** AGENT-002, AGENT-006. ### AGENT-006 — Обязательный выбор модели не поддержан текущим Task interface - **Decision = SIMPLIFY; Severity = P3; Confidence = High; Effort = S.** - **Evidence:** `.agents/skills/workflow/subagent-driven-development/SKILL.md:184–214`; `.agents/skills/workflow/subagent-driven-development/implementer-prompt.md:6–10`; `.agents/skills/workflow/subagent-driven-development/task-reviewer-prompt.md:11–14,190–204`; текущая declaration `functions.task`; `session.json:2975–2987,3282–3293,4071–4082,4511–4523`. - **Claim:** правило «always specify model explicitly» без capability condition невозможно выполнить через текущий Task tool: он принимает description/prompt/subagent_type/task_id/command, но не model. - **Current mechanism:** все девять task inputs в export без `model`; metadata children совпадает с моделью родительского turn, в том числе после смены parent provider/model. Это подтверждает фактическую выборку, но не раскрывает внутренний routing провайдера. - **Impact / actual cost:** невозможно гарантировать заявленную дешевую роль; агент может тратить время на выбор недоступного параметра или ошибочно обещать экономию. Ни невалидного вызова с model, ни финансового ущерба в sample не наблюдается. **Impact unmeasured**. - **Why now:** несоответствие находится в обязательном template и реальном доступном interface, поэтому повторяется при каждой подготовке dispatch. - **Minimum change:** сделать выбор model условным по tool capability; при неподдерживаемом override использовать доступный default и не заявлять оптимизацию тарифа. Не добавлять custom dispatcher/новый subagent type ради обхода. - **Guarantees at risk:** достаточная модель для сложного review и честное описание фактических capabilities. Не обещать escalation, которую tool не может исполнить. - **Counterarguments / trade-offs:** другой harness может поддерживать model override; правило там полезно. Историческая Task schema не сохранена, поэтому невозможность override доказана для текущего interface, а для sample виден только фактический default routing. - **Verification or rollback:** сверить template с tool schema; следующий нужный dispatch должен быть валидным без выдуманного параметра. При доступном override правило можно применять как раньше. - **Related finding IDs:** AGENT-003, AGENT-005. ## 7. Observed Session Anti-patterns и контрпримеры **Goal → reads → tools → result:** explicit stock-screener SDD/delegation request (`session.json:57`) → store/list/status, approval lookup и tasks → user approval → apply contextFiles → семь дополнительных planning/contract reads, repo entry points → два explore и generic workflow setup → task 1.1 implementer/reviewer → coordinator target check → checkbox/ledger → task 1.2 dispatch, interruption/re-dispatch, review interruption/re-dispatch → выявленный contract defect → fix running при окончании export. | Наблюдение | Evidence | Вывод с границами | | --- | --- | --- | | Generic workflow дает большой payload | Skill output `session.json:2251–2256`; размер 33577 bytes | Содержимое реально попало в parent context; его token attribution не измерена | | Explore возвращают подробную карту в parent | `:2276–2330`; суммарно 25197 bytes | Можно сузить будущий запрос до owner/entry points/named risks; нельзя объявить всю карту ненужной для сложной feature | | Worker full verify заявлен дважды | `:2980`, `:4076`; task-2 report сохранен в `:4176–4184` | Per-worker требование видно; реальные commands/timings children недоступны | | Fresh coordinator test после review | `:3380–3428,3517–3533` | Наблюдаемое повторное исполнение; user explicit verification — существенный контраргумент | | Non-interactive bootstrap retry | `:3421–3428,3519–3526` | Подтвержденная ошибка, AGENT-004 | | Два canceled task заменены свежими dispatch | `:3929–3979,4072–4089,4371–4410,4513–4530` | Отмена/повтор подтверждены. Потеря partial edits, корень отмен, crash модели и возможность safe resume UNVERIFIED | | Последующий fix использует resume | `:4620–4632` | Уже есть экономящий context механизм; результат fix в export отсутствует | | Read loops | Group by `.state.input.filePath` | Не найдены в parent. Нельзя переносить вывод на children | | Review выявляет реальный mismatch | `:4517` | Зеленые worker tests не заменяют semantic review. Здесь удалить review нельзя | Начальные store/status/apply commands и чтение всех возвращенных contextFiles соответствуют explicit user request и стандартному skill. Одинаковые слова `verify`, `AGENTS`, `contract` в разных источниках сами по себе не доказательство DRY-нарушения. Смена модели после interruption сопровождается parent token counters без cache reuse (`session.json:4026–4034`), позже — частичным cache read (`:4467–4475`). Это наблюдение, **не доказательство**, что смена модели вызвала потерю кэша или что непрерывный сеанс стоил бы меньше. ## 8. Minimal Agent Execution Policy Это рекомендуемое сокращение существующей процедуры после согласования AGENT-001/002, а не новый обязательный документ. Сегодня действующие repo gates и explicit task Verification имеют силу. Общий путь: **read once → narrow search → edit batch → targeted check → final affected-repo gate**. Повторный routing — проверка новых границ, а не перечитывание уже актуального файла. Новый Read нужен при смене revision, неполном excerpt или появлении новой ответственности. | Размер / тип | Минимальная последовательность | Verification и stop boundaries | | --- | --- | --- | | S — small UI fix | Явный frontend cwd/status → local AGENTS + engineering entry point → affected component/CSS/i18n и 1 ближайший пример → UI или только strings section; TS/testing темы по реальному diff → одна batch правка | Targeted type/lint, semantic visual/keyboard/narrow viewport по изменению; behavior test только при risk. Full final gate по действующей/согласованной policy. Не читать backend/docs/specs ради чисто визуального diff, не открывать SDD lifecycle | | M — backend contract change | Backend cwd/status → AGENTS/engineering → HTTP API, affected DTO/controller/service, configured HTTP tests → согласованная wire expectation и опубликованный baseline/artifact → errors/security/data только по trigger → batch implementation | Type/lint + relevant HTTP outcome + `test:openapi-contract`; генерация публичного artifact. Money/CAS/transaction changes требуют своей real-boundary proof. Передать artifact потребителю; affected frontend отдельно проверяет snapshot/generated types и relevant behavior. Не читать весь consumer checkout для проектирования DTO | | L — SDD feature | Explicit store selection/status/apply и approvals → все native contextFiles прочитать один раз → dependency/owner map → local AGENTS только affected repo → task-specific upstream sections/contracts → implementation по dependencies; делегация только если явно запрошена/разрешена | Targeted proof в worker; один read-only scoped reviewer на оговоренную границу; fix только findings и covering tests; full verify на итоговом состоянии affected repo с дополнительными contract/DB/auth checks. До task checkbox — approved task Verification; после — refresh native apply instructions. Final semantic comparison target ↔ generated API, docs/QA по approved tasks | **Что действительно нельзя пропустить:** измененный response/status/error shape требует producer/consumer contract lookup, даже если UI diff маленький. Изменение auth/connection cache требует проверки владельца session/generation. Для утвержденного SDD нельзя заменить contextFiles догадкой или пропустить upstream requirement ради smaller context. Structural validation не доказывает runtime contract compatibility. **Контекст соседей:** фактическое число нерелевантных прочитанных файлов определить нельзя. В sample оба application repo и docs входят в explicit delivery scope, поэтому их AGENTS не являются ошибочным чтением. В S UI flow идеальная выборка не требует чтения трех соседних checkout; в M она требует предоставленного API artifact и конкретных consumer expectations, а не исходников всех соседей. ## 9. Keep/Delete/Move Instruction Register | Instruction / mechanism | Решение | Owner / куда относится | Основание | | --- | --- | --- | --- | | Local AGENTS task/path routing | KEEP | Каждый repo | Самостоятельность и selective context уже реализованы; root `AGENTS.md:9–13` | | Одинаковые engineering базовые нормы frontend/backend | KEEP | Оба автономных repo | Общий root файл создал бы обязательную cross-checkout зависимость; одинаковый текст здесь не доказательство лишнего механизма | | Безусловное install для любого code change | SIMPLIFY | Существующий local engineering section | Environment need отделить от source diff, AGENT-001 | | Полный gate на каждую мелкую worker task | SIMPLIFY | Repo delivery owner и approved task Verification | Сохранять final proof; не дублировать по факту слова DONE | | «Каждая функция обязана иметь новый test», «fresh в этом message» | SIMPLIFY | Generic skill applicability | Local risk boundary + evidence version, AGENT-002 | | Autonomous ruling над SDD semantics | FIX | Generic coordinator, project change-control остается owner | AGENT-003; стандартные OpenSpec skills сохраняются | | Обязательное поле model при отсутствии capability | SIMPLIFY | Generic templates | AGENT-006 | | Manual style/sorting/import-rule перепроверка | MOVE responsibility | Существующие ESLint/TypeScript/dependency configs | AGENT prompt оставляет короткий trigger и ссылку; не дублирует deterministic analyzer вручную | | Смысл owner, public error safety, product i18n | KEEP | Semantic review и local conventions | Lint не доказывает смысл; UI `:157–170`, architecture `:86–93` | | Finance page container/VM/view | KEEP | Frontend UI owner | UI `:44–70`; AccountIncomePage `:8–14` — state selection, не пустой wrapper для каждого control | | Запрет passthrough hooks и ненужных VM/wrapper файлов | KEEP | Frontend UI owner | `frontend/.ai/conventions/ui.md:26–28,84–105` уже запрещает механическое дробление; конкретного требования/объекта для удаления не найдено | | FSD skill и local placement profile | KEEP с selective references | Local architecture решает placement | Skill `:24–29,33–50,76–77` допускает selective reading и existing widgets; автоматическая миграция не нужна | | Explicit SDD, approvals, store, contextFiles | KEEP | Specs config/schema + native skill | Project semantic authority и защита cwd/store; не переписывать standard skill ради меньшего payload | | Progress/checkpoint и scoped review | KEEP | Уже выбранный workflow | Защита от повторной работы/пропуска contract; bounded brief/report может быть полезен | | Глобальные graphify/MCP declarations | INVESTIGATE | Harness/global config | Startup/capability cost не измерен, AGENT-005 | | Boy Scout | KEEP | Affected area review | Root code-health `:30–37`, engineering `:25–27` ограничивают low-risk scope; не повод для whole-repo cleanup | ### DELETE / SIMPLIFY / KEEP / INVESTIGATE — сводка | Decision | Объекты | Безопасная граница | | --- | --- | --- | | DELETE | Подтвержденных standalone механизмов для удаления нет | Не удалять проверку только из-за ее размера/повтора названия | | SIMPLIFY | AGENT-001, AGENT-002, AGENT-006 | Reuse environment и evidence, final gate и meaningful regression остаются | | FIX | AGENT-003, AGENT-004 | Approval precedence и pinned Node сохраняются | | KEEP | Local routers; native OpenSpec; target/runtime API comparison; auth/money/real DB/CAS/rollback checks; scheduler lifecycle/idempotency/replay proof по trigger; scoped semantic review | Protected invariants не торгуются на tokens; их runtime реализации в этом аудите не переоценивались | | INVESTIGATE | AGENT-005; cancellation recovery; child overhead | Только bounded measurement, без нового tracing framework | Ponytail-ranked cuts: `shrink:` объединить final verification на repo delivery boundary [AGENT-001]; `shrink:` убрать конкурирующие blanket testing/freshness mandates [AGENT-002]; `yagni:` убрать обязательный неподдерживаемый model override [AGENT-006]. **Net lines/deps possible: not measured; удаление dependencies не предложено.** ## 10. Cost & benefit | Изменение | Класс ожидаемой экономии | Фактическая опора | Необходимые гарантии | | --- | --- | --- | --- | | AGENT-001 | Local runtime, agent turns, install traffic | Два worker full-verify reports; экономия not measured | Fresh final verify, dependency reproducibility, targeted risk suites | | AGENT-002 | Agent tokens/tool calls, test maintenance | Coordinator rerun виден; непродуктивные новые tests не доказаны | Версия evidence, meaningful RED/GREEN, independent semantic review | | AGENT-003 | Cognitive load, dispatch prompt, rework | Конфликт реально загруженных instructions | Approved semantics, safe escalation | | AGENT-004 | Retry/tool call и associated reasoning | Один failed call + corrected run | Local pinned Node/cwd | | AGENT-005 | Возможные prompt tokens/startup latency | Global registration/catalog exposure | Нужные browser/docs/remote tools по actual task | | AGENT-006 | Planning overhead, честность cost policy | Template требует отсутствующую capability | Валидный task interface и достаточная model capability | **CI minutes:** этот аудит не обосновывает сокращение CI. Рассматриваются причины, по которым агент вызывает checks локально; изменение состава pipeline — audit 11. Проценты, ускорение, денежная экономия и сокращение строк не рассчитывались. ## 11. Top actions ### Quick wins 1. **AGENT-004:** дополнить существующий Node entry point non-interactive bootstrap условием; проверить один реальный tool shell без нового скрипта. 2. **AGENT-006:** заменить безусловный model override на capability-aware правило; убрать невыполнимое обязательство из templates. 3. **AGENT-003:** явно подчинить generic rulings существующему SDD change-control; semantic conflicts должны останавливать affected downstream. 4. **AGENT-002:** согласовать generic TDD applicability с local testing; повторную проверку обосновывать изменением diff/named doubt или explicit user requirement. ### Решения с подтверждением проверки 5. **AGENT-001:** согласовать install/targeted/final verification tiers в двух существующих engineering sections. Сначала сохранить full final gate и сравнить реальные вызовы на одной bounded delivery; explicit approved task checks не сокращать автоматически. 6. **AGENT-005:** снять resolved instruction/tool surface для одного запуска, затем A/B релевантного MCP/skill набора. Изменение default global config — только при наблюдаемом выигрыше и сохраненных outcomes. Новый ADR для текста bootstrap или capability caveat не нужен. Если меняется принятая модель SDD approvals/verification authority, сначала нужен owner decision в существующем process source; не создавать отдельную approval инфраструктуру. ## 12. Cross-audit signals - **Audit 11:** возможные повторы build/dependency graph внутри local verify/commit пути — `frontend/package.json:14–34`, `.husky/pre-commit:1–3`; здесь установлены только agent/hook triggers. - **Audit 10:** пригодность generic workflow scripts для no-commit/multi-repo execution — `.agents/skills/workflow/subagent-driven-development/scripts/`; script semantics не исследовались. - **Audit 15:** project SDD artifact/approval granularity и `skip_specs` lifecycle — `specs/README.md:9–14`, v2 `schema.yaml`; текущий аудит не предлагает удалить согласованные артефакты. - **Audit 13:** хранение credentials в global agent config — `~/.config/opencode/opencode.jsonc`; значения не воспроизводятся, отдельное security расследование не проводилось. ## 13. Open questions / verification plan | Вопрос, меняющий решение | Самый дешевый способ проверки | До проверки | | --- | --- | --- | | Сколько full verify/install реально запускают children? | Для следующей одной affected-repo delivery предоставить child export/command log с command, cwd, exit, duration и revision; не собирать все личные sessions | AGENT-001 static finding остается; численную экономию не заявлять | | Есть ли безопасный resume после двух cancellations? | Проверить конкретные child status/report/diff до re-dispatch; сопоставить canceled и replacement task IDs | Не объявлять отмененную task DONE и не удалять checkpoint | | Почему global CLAUDE и skill directory попадают в OpenCode? | Startup resolved-source/config diagnostic для этого cwd без provider secrets; сравнить с loaded declarations | Loader fallback UNVERIFIED; не утверждать наличие symlink или mandatory global reads | | MCP startup/tool schema или skill bodies доминируют в первом prompt? | Один bounded A/B: одинаковая task, model, repo revision; export первых turn counters и tool catalog | Не удалять серверы по количеству зарегистрированных tools | | Дает ли новый verification tier ту же защиту? | Итоговый full verify + applicable HTTP/DB/auth tests на том же конечном diff; убедиться, что dependency/artifact state fresh | Текущие mandatory checks сохраняются | | Возможен ли model override в выбранном runtime? | Текущая tool schema и documented runtime capability; никаких проб с выдуманным parameter | AGENT-006 применим для текущего interface; историческая schema UNVERIFIED | Для минимального последующего измерения достаточно одного существующего session export на каждый из S/M/L типов: tool counts; unique/repeated reads; failed/retried commands; checks по revision; `.info.tokens` отдельно input/cache/output/reasoning; parent/child boundaries; completion outcome. Тела secrets/PII и сырые приватные conversations не нужны. Новые hooks, scripts или multi-agent observability infrastructure не требуются. ### Проверка результата аудита Выполнена ручная смысловая сверка отчета с evidence. `git diff --check` и отдельный `git diff --no-index --check /dev/null audit-results/14-ai-agent-workflow-efficiency.md` завершились без замечаний; отдельная проверка нужна, поскольку файл ignored и обычный diff его не видит. `git check-ignore -v` подтвердил root правило `.gitignore:2`. Финальные `git status --short` четырех checkout пусты, HEAD совпадают с начальной таблицей. Standard OpenSpec skills и исходники не редактировались; tests/build/verify не запускались. Application gates не применяются к единственному Markdown-отчету в root. ## Consolidation table | ID | Decision | Severity | Confidence | Repo | Files | One-line impact | Effort | Related IDs | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | AGENT-001 | SIMPLIFY | P2 | High | frontend,backend | frontend/.ai/conventions/engineering.md; backend/.ai/conventions/engineering.md; frontend/package.json; backend/package.json; session.json | Безусловный install/full verify переносится в каждый worker; экономия не измерена | S | AGENT-002,AGENT-004 | | AGENT-002 | SIMPLIFY | P2 | High | root,frontend,backend | .agents/skills/workflow/test-driven-development/SKILL.md; .agents/skills/workflow/verification-before-completion/SKILL.md; .agents/skills/workflow/subagent-driven-development/task-reviewer-prompt.md; frontend/.ai/conventions/testing.md; backend/.ai/conventions/testing.md; session.json | Конкурирующие blanket testing/fresh-evidence rules затрудняют reuse proof | S | AGENT-001,AGENT-003,AGENT-004 | | AGENT-003 | FIX | P2 | High | root,specs | .agents/skills/workflow/subagent-driven-development/SKILL.md; .agents/skills/sdd/openspec-apply-change/SKILL.md; specs/openspec/config.yaml; specs/openspec/schemas/wealth-ledger-sdd-v2/schema.yaml; session.json | Generic autonomous rulings конфликтуют с approved semantic change-control | S | AGENT-002,AGENT-006 | | AGENT-004 | FIX | P2 | High | root,frontend,backend,specs | AGENTS.md; frontend/.ai/conventions/engineering.md; backend/.ai/conventions/engineering.md; specs/AGENTS.md; session.json | Недостаточный nvm bootstrap вызвал подтвержденный shell retry | S | AGENT-001,AGENT-002 | | AGENT-005 | INVESTIGATE | P3 | Medium | global | ~/.claude/CLAUDE.md; ~/.claude/skills/graphify/SKILL.md; ~/.config/opencode/opencode.jsonc | Широкая skill/tool экспозиция создает risk of inefficiency; стоимость не измерена | S | AGENT-002,AGENT-006 | | AGENT-006 | SIMPLIFY | P3 | High | root | .agents/skills/workflow/subagent-driven-development/SKILL.md; .agents/skills/workflow/subagent-driven-development/implementer-prompt.md; .agents/skills/workflow/subagent-driven-development/task-reviewer-prompt.md; session.json | Обязательный model override отсутствует в текущем Task interface | S | AGENT-003,AGENT-005 |