canon-execute
Skill1 starsChanged 7 months agoMITView on GitHub
Use when an implementing agent receives a phase prompt and needs to execute it correctly. Enforces pre-flight checks (read CLAUDE.md, verify state), branch hygiene (feature branch, never main), spec-gap reporting (flag mismatches BEFORE coding), implementation discipline (atomic transactions, idempotency, brand compliance), and pre-merge gates (tsc/lint/db:generate/build + manual T-scenarios). For the agent that executes a single phase in a single session.
- Deletes or force-pushes
- Commits and pushes
In this repository11 other files it gives its agents.
- braindump-to-canonSkill
- canon-debugSkill
- canon-parallelSkill
- canon-receive-reviewSkill
- canon-reviewSkill
- canon-roadmapSkill
- canon-tddSkill
- canon-verifySkill
- canon-worktreeSkill
- design-canonSkill
- using-canon-devSkill
The file
Files
canon-execute
🚀 Стадия 5 в pipeline canon-dev: дисциплина реализации одной фазы
Этот скилл — для агента-реализатора в отдельной сессии, не для координатора. Если ты координатор — твой скилл
canon-roadmap. Если получил phase prompt и собираешься писать код — это твой скилл.
Когда использовать
- Получил самодостаточный phase prompt от координатора
- Нужно реализовать одну фазу за одну сессию и открыть PR
- Любая работа над production-кодом из канон-driven проекта
Когда НЕ использовать
- Нет промпта, есть только идея → координатору нужен
canon-roadmap - Нужно проверить готовый код →
canon-verify - Нужно создать каноны →
braindump-to-canon
Философия скилла
Реализатор — дисциплинированный исполнитель. Не «спонтанный творец». Это означает:
- Самодостаточный промпт — закон. Не догадывайся, не improvise за пределы. Что в промпте — реализуй; чего нет — не добавляй.
- Spec-gaps — флаг ДО кодинга. Если промпт расходится с реальностью кода/схемы — остановись, доложи координатору, жди подтверждения. Это спасает день.
- Branch hygiene. Никогда на main. Feature branch. Чистый pull main first.
- Atomic discipline. Все critical-flow в
db.transaction. Все user-facing creates с idempotency-key. - Pre-merge gates обязательны.
tsc,lint,build, brand-grep — пройти ДО открытия PR. - Honest reporting. В PR description указать deviations от плана, acknowledged debt, T-сценарии прошедшие/упавшие. Не приукрашать.
Структура процесса
┌───────────────────────────────────────────────────────┐
│ Phase 1 — Pre-flight (read context, verify state) │
└───────────────────────────────────────────────────────┘
↓
┌───────────────────────────────────────────────────────┐
│ Phase 2 — Spec-gap reporting (если есть расхождения) │
└───────────────────────────────────────────────────────┘
↓
┌───────────────────────────────────────────────────────┐
│ Phase 3 — Branch setup (feature branch from main) │
└───────────────────────────────────────────────────────┘
↓
┌───────────────────────────────────────────────────────┐
│ Phase 4 — Implementation (с дисциплиной) │
└───────────────────────────────────────────────────────┘
↓
┌───────────────────────────────────────────────────────┐
│ Phase 5 — Self-verification (T-scenarios + gates) │
└───────────────────────────────────────────────────────┘
↓
┌───────────────────────────────────────────────────────┐
│ Phase 6 — PR open (с honest description) │
└───────────────────────────────────────────────────────┘Phase 1 — Pre-flight
Step 1. Read CLAUDE.md (или эквивалент)
Найди и прочитай полностью:
CLAUDE.mdв корне репоBUSINESS-RF/CLAUDE.mdесли monorepo- Любой
.cursorrules/.codiumrules/ project-specific instructions
Цель: понять стек, конвенции, миграционный workflow, дизайн-правила. Не пропускай — это база.
Step 2. Read the phase prompt
Прочитай промпт полностью, не сокращённо. Особенно:
- §0.4 (out-of-scope) — что НЕ трогать
- §0.5 (canon sources) — какие правила применяются
- §1 (brand rules) — visual constraints
- §N+2 (out-of-scope повтор) — для verification
Сделай ментальный inventory:
- Какие файлы создаются?
- Какие файлы изменяются?
- Какие НЕ трогать?
- Какие проверки выполнить локально?
Step 3. Verify current state matches prompt assumptions
Промпт предполагает что определённые файлы / таблицы / API уже существуют. Проверь:
# Например, если промпт ссылается на src/lib/finance/operations.ts:
ls src/lib/finance/operations.ts && grep -n "export function postOperation" src/lib/finance/operations.ts
# Например, если предполагается определённая таблица:
grep -n "export const taxProfile" src/db/schema/
# Проверь актуальный git state:
git status --short
git log --oneline -5
git branch --show-currentStep 4. Verify dependencies merged
Промпт может говорить «зависит от Phase {prev}». Проверь что:
- Соответствующий PR действительно merged в main
- main fast-forwarded локально
- Нет uncommitted changes которые помешают
git fetch --all --prune
git checkout main
git pull --ff-only
git status --short # should be cleanPhase 2 — Spec-gap reporting (если есть)
Если на Phase 1 нашёл расхождения между промптом и реальностью — остановись. Не пиши код. Сообщи координатору:
Шаблон отчёта
Перед началом реализации обнаружил {N} расхождений между промптом и текущим состоянием:
1. **API signature mismatch:**
- Промпт §X.Y предполагает `createFoo({ field1, field2 })`
- Актуально в `src/lib/foo/bar.ts:42`: `createFoo({ fieldOne, fieldTwo })`
- Адаптация: использую актуальные имена
2. **Schema deviation:**
- Промпт §Z говорит «колонка `code` существует на `categories`»
- Актуальная схема не содержит `code` — есть только `name` (см. `src/db/schema/categories.ts`)
- Адаптация: использую name-based lookup matching pattern из `ensureCategoriesByName`
3. **Major architectural finding:**
- Промпт §W предполагает создание `financial_operation` с null financeAccountId для accruals
- Schema constraint: `financialOperation.financeAccountId NOT NULL`
- Этого не описано в промпте
- **Предлагаемое решение:** {описать workaround} — нужно явное подтверждение координатора
Подтверди адаптации 1-2 и реши по #3 — после ответа начну.Не начинай кодинг пока не получил подтверждение. Это правило золотое — нарушение стоит дня rework'а.
Phase 3 — Branch setup
Standard branch naming
feat/{module}-{phase-slug}Например:
feat/taxes-4d1-foundationfeat/auth-onboarding-redesignfeat/landing-v2-rework
Setup commands
git fetch --all --prune
git checkout main
git pull --ff-only
git checkout -b feat/{module}-{phase-slug}Verify clean start
git status --short # should be empty
git log --oneline -1 # should match remote mainAnti-patterns
❌ Работа на main — никогда. Если случайно закоммитил на main:
# Save commit:
git log --oneline -1 # запомни SHA
# Reset main back:
git reset --hard origin/main
# Cherry-pick on new branch:
git checkout -b feat/{name}
git cherry-pick {sha}❌ Branch from feature-branch другого PR — только если этот PR merged или explicitly базовая ветка для последовательности (например, 4D.2 базируется на 4D.1).
Phase 4 — Implementation
General discipline
Read before write. Перед изменением файла — прочитай его. Не предполагай содержимое.
Reference canons. В комментариях к нетривиальной логике — ссылка на canon-секцию:
/**
* Канон §16: НДС квартальный split на 3 равные доли
* с balancing на 3-ю для precision-loss защиты.
*/
function splitNds(total: number): [number, number, number] {
const part1 = Math.floor(total / 3);
const part2 = Math.floor(total / 3);
const part3 = total - part1 - part2; // balancing
return [part1, part2, part3];
}Atomic transactions. Critical-flow обёрнут в db.transaction:
await db.transaction(async (tx) => {
// 1. UPDATE existing entity (mark old version)
await tx.update(table).set({ isCurrent: false }).where(...);
// 2. INSERT new entity
const [newRow] = await tx.insert(table).values(...).returning();
// 3. Audit log
await tx.insert(auditLog).values(...);
});Idempotency keys для user-facing creates:
const idempotencyKey = `${module}-${entityId}-${action}`;
// Pre-check or rely on unique partial indexMoney as integer. Никогда float для денег. Все суммы в копейках/центах:
amountKopecks: bigint("amount_kopecks", { mode: "number" }).notNull(),
// CHECK constraint:
check("amount_non_negative", sql`amount_kopecks >= 0`),Brand compliance
Перед коммитом каждого UI-файла — mental scan:
- Использую ли только токены (
var(--brand-700)), не hex literals? - Никаких
font-bold/font-semibold? - Никаких эмодзи в production UI?
- Цвета только из brand-палитры (no purple/teal/orange)?
Migration workflow
Если изменил src/db/schema/:
pnpm db:generate
# Создаёт src/db/migrations/{N}_{name}.sql + meta/{N}_snapshot.jsonЗакоммить и schema, и migration файл вместе в одном коммите. Не push schema без migration — production deploy сломается.
Documentation alongside code
- Сложная функция → JSDoc с canon-ref
- Новый module → README в module-folder если требуется (для нетривиальных архитектур)
- Workaround / deviation → in-code комментарий
// TODO(Phase X): ...со ссылкой на ROADMAP §10.4
Anti-patterns
❌ «Я добавлю эту фичу заодно — она маленькая» — нет. Out-of-scope = out-of-scope. Если действительно нужно — спроси координатора.
❌ «Перепишу старый legacy код раз уж рядом» — нет. Refactor = отдельный PR. Этот PR — только scope текущей фазы.
❌ «Skip this CHECK constraint, добавлю позже» — нет. CHECK constraints критичны для data integrity. Добавляй сразу.
❌ «Use any тут потому что некогда разбираться с types» — нет. Если type-safety мешает — это сигнал что архитектура где-то расходится. Разберись сразу.
Phase 5 — Self-verification
Step 1. Run pre-merge gates
pnpm exec tsc --noEmit # 0 errors
pnpm lint # 0 errors, 0 warnings
pnpm db:generate # "no schema changes" если schema не трогал;
# либо создаёт migration если трогал
pnpm build # successКаждый шаг — должен пройти. Если упал — fix перед continue.
Step 2. Brand-compliance grep
Из промпта возьми grep-команды. Запусти. Все должны вернуть 0 results:
grep -rn "font-bold\|font-semibold" src/{paths-changed}/ 2>/dev/null
grep -rn "purple\|violet\|teal\|emerald\|orange\|amber" src/{paths-changed}/ 2>/dev/null
grep -rn "text-black\|bg-black" src/{paths-changed}/ 2>/dev/null
grep -rn "console\.log" src/{paths-changed}/ 2>/dev/null # log-cleanupStep 3. T-сценарии
Промпт содержит T-сценарии (T-01..T-N). Пройди каждый локально:
- Запусти
pnpm dev - Открой соответствующий URL
- Выполни сценарий
- Проверь ожидаемый результат
Записывай статус: ✅ pass / ⚠️ partial / ❌ fail. Если ❌ — fix перед PR.
Note: если auth-gated UI и dev-окружение не имеет рабочей auth — отметь как «verifiable on staging only» и упомяни в PR description.
Step 4. Verify deliverables list
Промпт обещал N deliverables. Пройди по списку:
- Schema: все таблицы созданы
- API endpoints: все работают (curl-test или DevTools)
- UI: все pages/components рендерятся
- Migration: файл закоммичен
- Cross-module hooks: интегрированы
Phase 6 — PR open
Commit message
feat({module}): {краткое описание} (Phase {N})
{Несколько строк деталей если нужно}
Co-Authored-By: {standard footer}Push branch
git push -u origin feat/{module}-{phase-slug}Open PR
Используй промпт §10 (PR-описание шаблон) как baseline. Honest filling:
## Контекст
PR Phase {N}.{X} из фазы {parent}. Зависит от Phase {prev} (PR #{num}).
## Что сделано
- Schema: {list}
- API: {list endpoints}
- UI: {list components}
- Tests: T-01..T-N — {N pass / M partial / 0 fail}
## Acknowledged deviations
(если есть)
1. **Plan §X.Y предполагал {expected}** — реализовано как **{actual}** из-за **{constraint}**. См. inline-комментарий в `{file}:{line}`. Acknowledged debt — TODO в `{file}` для будущего пересмотра.
## Pre-merge gates
- [x] `pnpm exec tsc --noEmit` — 0 errors
- [x] `pnpm lint` — 0 errors, 0 warnings
- [x] `pnpm build` — success
- [x] `pnpm db:generate` — migration file committed
- [x] Brand grep clean
- [x] T-сценарии: {N}/{N} pass
## Coordinator review notes
(если есть что-то требующее внимания координатора)
- Architectural decision: {описание}, see `{file}` README
- Verify on staging: T-{N} cannot be tested locally due to {reason}
## Screenshots
(desktop / tablet / mobile)Wait for review
Не делай дополнительных коммитов после открытия PR пока не получил code-review feedback. Если случилась срочная правка (e.g., CI упал) — отдельный коммит с понятным message.
Anti-patterns (общие)
❌ «Промпт в общих чертах понял, начну, по ходу разберусь» — нет. Полное чтение перед началом.
❌ «Sounds reasonable, я знаю как сделать лучше чем в промпте» — нет. Если есть улучшение — флаг spec-gap, обсуди с координатором.
❌ «Брендовые правила — necesary evil, главное чтобы работало» — нет. Brand-compliance — это про доверие пользователя к продукту.
❌ «Pre-merge gates — formality, я уже проверил вручную» — нет. Gates запускаются. Если упали — fix.
❌ «PR description короткий, важно code» — нет. PR description — единственный способ для ревьюера понять что сделано без полного чтения diff'а.
Critical principles
- Промпт — самодостаточен. Не дополняй из памяти, не сокращай.
- Spec-gaps — стоп-сигнал. Доложи, не угадывай.
- Feature branch always. Никогда на main.
- Atomic + idempotent. Critical-flow в transaction, creates с key.
- Pre-merge gates — closeable list. Все ✅ перед PR.
- Honest PR description. Deviations явно, T-scenarios честно.
- Out-of-scope — святой. Не делай больше чем просили.
Templates и references
references/agent-discipline.md— расширенные anti-patterns + примерыreferences/pre-merge-gates.md— детальный gate-checklistreferences/spec-gap-reporting.md— шаблоны spec-gap отчётов
Финальная заметка
Хороший реализатор — предсказуемый. Координатор передаёт промпт и знает: код будет таким как в промпте, deviations будут зафиксированы явно, gates пройдены, PR honest.
Это даёт координатору возможность параллельно работать над next-phase planning, не отвлекаясь на «что там агент мутит». А значит — pipeline ускоряется и качество растёт.
Не сокращай дисциплину. Каждый shortcut окупается shortcuts'ом ревьюера, который не доверяет твоему PR.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

