ahel is live on Product Hunt today. Upvote

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 user runs /cop-review, says "pre-merge review", "review before merging", "check my PR against <branch>", or invokes the angular-cop agent.

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

  • /cop-review <target> slash command
  • User asks for review before merging a PR
  • User specifies a target branch and wants a diff review
  • angular-cop agent is 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,design,ddd,a11y
--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 / *.component.html / *.component.css -> signals.md, rxjs.md, clean-architecture.md, design-system.md, a11y
         *.facade.ts / *.store.ts -> flurryx.md, clean-architecture.md
         *.adapter.ts / *.port.ts -> clean-architecture.md
         *.ts                     -> typescript-strict.md
         domain/**/*.ts           -> angular-ddd
     - 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-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-design-system]] — Kourou v0 design-token / color / spacing / typography bypass severity (load for *.html and template-bearing files)
  • [[angular-ddd]] — DDD tactical patterns (entities, value objects, aggregates, repositories) and strategic design (bounded contexts, ubiquitous language, ACL) for domain-layer code
  • [[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
172
Forks
10
Last commit
Sep 2026

ahel review

  • K1binfo
    installs-packages (in enforcement-tooling.md)

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Catalog kind
skill
Gateway key
angular-cop
Source
github.com/fmflurry/settings-opencode