Files
main/audits/2026-10-11/reports/14-ai-agent-workflow-efficiency.md
T
ksv741 2b63bde934
Conventional commits / commits (pull_request) Successful in 13s
docs: archive technical audit 2026-10-11 in develop (#36)
2026-10-17 19:30:38 +03:00

66 KiB
Raw Blame History

Аудит 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 <command> до каждого 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.

Решения с подтверждением проверки

  1. AGENT-001: согласовать install/targeted/final verification tiers в двух существующих engineering sections. Сначала сохранить full final gate и сравнить реальные вызовы на одной bounded delivery; explicit approved task checks не сокращать автоматически.
  2. 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