angular-cop

SkillDev tools

Pre-merge code review for Angular + TypeScript pull requests. Diffs current branch against a target branch, applies Angular-specific checklists (signals, RxJS, clean architecture, flurryx, TS strict), runs lint + tsc, and emits a tiered report (verbose for juniors, terse for seniors). Auto-loads project AGENTS.md rules. Use when `code-reviewer` selects Angular guidance for /cop-review, or when the angular-cop specialist is explicitly invoked.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the angular-cop skill

What this skill tells your AI

The instructions your AI receives, as published by fmflurry/settings-opencode in skills/angular-cop/SKILL.md and read by ahel’s review.

Pre-merge review. Compares HEAD vs origin/<target>. Angular-aware. Project-aware (reads AGENTS.md). Tooling-aware (runs lint + tsc).

When to Activate

  • Selected by code-reviewer for Angular guidance during /cop-review
  • angular-cop specialist is explicitly invoked

Inputs

ArgRequiredDefaultMeaning
<target>yesTarget branch (e.g. main, develop, release/x)
--levelnoautojunior (verbose teaching) or senior (terse). Auto = senior.
--scopenoallComma list: signals,rxjs,arch,flurryx,ts,a11y,ddd
--no-toolsnofalseSkip lint + tsc (static review only)

Hard Rules

  1. Read-only. Never patch code. Output report only.
  2. Diff window: git merge-base HEAD origin/<target>..HEAD. Never review changes already on target.
  3. Confidence ≥ 80%. Skip uncertain findings. Use ❓ q: instead of speculative 🔴 bug:.
  4. Project rules win. AGENTS.md overrides this skill. Re-read on every run; do not cache between sessions.
  5. flurryx ground truth: load the [[flurryx]] skill before flagging state-management code. Do not invent APIs.
  6. No fluff. No "great work", no restating what the diff already shows.

Pipeline

1. Parse args -> target, level, scope
2. git fetch <remote> <target>          (silent; --quiet)
3. base = git merge-base HEAD <remote>/<target>
4. changed = git diff --name-status base..HEAD
5. Load <repo>/AGENTS.md (if exists) -> project rules
6. For each changed file:
     - Skim full file (not just hunk) for context
     - Apply relevant sub-checklists by extension/role:
          *.component.ts / *.html  -> signals.md, rxjs.md, clean-architecture.md, a11y
         *.facade.ts / *.store.ts -> flurryx.md, clean-architecture.md
         *.adapter.ts / *.port.ts -> clean-architecture.md
         *.ts                     -> typescript-strict.md
     - If --scope includes ddd && domain/ code changed: load [[angular-ddd]] (review-checklist.md) for tactical/strategic DDD checks
7. If !--no-tools:
     - npm run lint -- --quiet (or eslint --quiet) on changed files
     - npx tsc --noEmit (full project; abort early on first 50 errors)
8. Aggregate findings -> render via output-format.md

Severity

TagMeaningAction
🔴 bugbroken behavior, runtime crash, data lossBLOCK merge
🟠 secsecurity risk (XSS, leaked secret, auth bypass)BLOCK merge
🟡 riskworks today, fragile tomorrow (leak, race, missing teardown)Fix before merge
🟢 archviolates project architecture / layeringFix before merge
🔵 nitstyle, naming, micro-optimOptional
❓ qgenuine questionAuthor decides

Promote to BLOCK if AGENTS.md flags the category as mandatory.

Sub-pages (read on demand)

  • [[angular-cop-enforcement]] — BLOCK vs warn severity checklist (load always)
  • [[angular-cop-enforcement-tooling]] — ESLint flat config + architecture plugins for app repos
  • [[angular-cop-signals]] — Angular signals, change detection, OnPush, computed, no-method-in-template
  • [[angular-cop-rxjs]] — RxJS hygiene, takeUntilDestroyed, async pipe, leak patterns
  • [[angular-cop-clean-architecture]] — facade / use-case / port / adapter / store boundaries
  • [[angular-ddd]] (ddd scope) — DDD tactical patterns (entities, value objects, aggregates, repositories) and strategic design (bounded contexts, ubiquitous language, ACL) for domain-layer code. Complements [[angular-cop-clean-architecture]] layering.
  • [[angular-cop-flurryx]] — flurryx-specific rules (decorator order, keyed stores, no manual Record updates)
  • [[angular-cop-typescript-strict]] — no any, immutability, narrowing, no !, readonly
  • [[angular-cop-output-format]] — junior vs senior render templates

AGENTS.md Loading

Always:

test -f AGENTS.md && cat AGENTS.md
test -f .agent/AGENTS.md && cat .agent/AGENTS.md

Parse rule blocks. Where this skill and AGENTS.md disagree, AGENTS.md wins. Cite the AGENTS.md line in the finding: (AGENTS.md §<section>).

Output Contract

Single markdown document, sections in fixed order:

  1. Summary — target, base SHA, head SHA, files changed, finding counts by severity.
  2. Blockers (🔴 / 🟠 / 🟢-when-AGENTS-mandates) — sorted by severity, then file path.
  3. Should-fix (🟡) — same sort.
  4. Optional (🔵 / ❓) — collapsible.
  5. Tooling — lint summary, tsc summary, test status if available.
  6. VerdictAPPROVE / APPROVE-WITH-CHANGES / BLOCK.

See [[angular-cop-output-format]] for full templates.

Boundaries

  • Does not write code fixes. Suggestions only.
  • Does not run e2e or unit tests by default (delegate to e2e-runner / tdd-guide).
  • Does not approve PRs in GitHub/Azure. Author posts the report manually.
  • Does not auto-fix lint. Reports counts only.
  • If no diff (HEAD == base), exit early with "no changes to review".

Signals

GitHub stars
171
Forks
10
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
angular-cop
Source
github.com/fmflurry/settings-opencode