executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
enhance-arch-boundariesEnforce architecture boundaries in CI with dependency-cruiser or eslint-boundaries: layer direction, feature isolation, forbidden imports. Use when "enforce module boundaries" or "stop spaghetti imports". Advice only → audit-backend-architecture.
Independent GitHub snapshot · Automated classification · Original documentation governs
Degree of freedom: MIXED. Recovering the model
[HIGH freedom]; do-not-invent, shrink-only baseline, and deliberate-violation
probes [LOW freedom — run exactly].
Codify the repo's intended structure as rules that block merge. Import spaghetti is how agents degrade architecture: each import looks locally reasonable, no single diff is wrong, and after forty sessions the layering is gone. A rule in AGENTS.md is advisory. A dependency-cruiser rule in the aggregator gate is physics.
| Skill | Owns |
|---|---|
| enhance-arch-boundaries (this) | Mechanical boundary rules + shrink-only baseline |
audit-backend-architecture | Advises which pattern to adopt — does not enforce |
housekeep-gates | Wires this check into the aggregator |
docs-adr | Records why the model was chosen |
enhance-agent-guardrails | Broader guard install; this owns the import graph |
Observe:
app/dashboard/page.tsximports@/lib/supabase/admin(service-role). No boundary rule. Interpret: the intended split exists in folder names but is not physics. Classify: forbidden edge — client → server-only. Fix: dependency-cruiser / eslint-boundaries rule; grandfather other violations into a shrink-only baseline; probe a new forbidden import fails CI.
The rules must encode the architecture the repo means to have.
features/*, app/,
lib/, server/, components/, monorepo packages).audit-backend-architecture output if it exists — that is the
drift to stop.ui → application → domain → infrastructure, never reverse), feature
units that must stay isolated, special zones (server-only, secrets,
generated).State the model in ten lines before writing any rule. If the repo genuinely has no intended structure, stop and say so — enforcing a structure nobody chose creates fights, not quality. Propose a minimal layering first.
Tool by stack: dependency-cruiser (framework-agnostic JS/TS), eslint-plugin-boundaries (when living inside ESLint is preferable), Nx module-boundary tags, import-linter (Python).
Core rules, each mapped to the confirmed model:
features/x/index.ts), never deep paths. Shared code goes
through shared/, not sideways.plan-rls-audit / plan-secrets-audit), UI
importing the DB layer directly, production importing test utilities,
anything importing generated internals.workflow-housekeep).devDependencies from shipped code;
deprecated internals marked un-importable so migration ratchets.Do not weaken the rules to fit existing violations, and do not block the repo on fixing them all.
housekeep-gates.housekeep-gates)
and mirror it in local hooks (same command, two callers).docs-adr) so a future
session knows the layering was chosen, by whom, and why the rejected
alternative lost.docs-adraudit-backend-architecture; why → docs-adrhousekeep-gatesApplied directly (enhance-family). Pause for approval only on the model confirmation and before committing the baseline.