Automated summary
Audits an Angular component spec file against the project's migration guidelines and fixes detected deviations.
Strengths
- Runs a concrete strict ESLint check and treats every reported issue as a FAIL.
- Provides a PASS/FAIL checklist covering structure, dependency-injection style, and coverage.
- Automatically derives the component and template paths and requires an independent review.
- Prescribes fixes using TestBed.inject and jest.spyOn instead of useValue.
Limitations
- Relies on repository-specific files (.claude/rules/angular-specs.md and .eslintrc.strict-specs.js), so it is not portable as-is.
- The supplied SKILL.md ends mid-sentence in Step 3, leaving the fix procedure incomplete.
- Assumes a specific Angular/Jest setup, including non-standalone components and legacy ESLint configuration handling.
Use when auditing or migrating Angular Jest spec files in a repository that already has the described rules and strict ESLint configuration.
Do not use for non-Angular test suites, projects without the referenced configuration, or when a generic Angular testing review is expected.
Security analysis
CautionThe skill is a legitimate Angular test-auditing workflow and does not attempt exfiltration, obfuscation, or destructive commands. However, it executes a shell command with a user-provided path, may invoke `npx` package resolution, and edits files while declaring no allowed tools, so it is best rated caution rather than safe.
- •The skill requires shell execution (`npx eslint`) and file editing, but no allowed-tools are declared, so the agent may need broader permissions than expected.
- •The ESLint command interpolates a user-supplied spec path without explicit quoting or validation; a path containing shell metacharacters could enable command injection.
- •`npx eslint` can download and execute packages if ESLint is not already installed, and it loads a project-local config/plugins, which is legitimate but executes code from the repository.
- •The skill automatically edits the target spec file without an explicit confirmation step; this is expected for the task but is a code-modification risk.
- •Instructs the agent to run `npx eslint` from `src/main/app`, which executes local Node tooling/config and may fetch/install packages via npx if dependencies are missing.
- •Requires file-read and file-edit capabilities to inspect specs/components and modify spec files, although no `allowed-tools` are declared.
- •Edits are scoped to spec files and explicitly forbid touching component source files, limiting blast radius.
Examples
/audit-ng-spec-skill src/main/app/src/app/taken/taken-vrijgeven-dialog/taken-vrijgeven-dialog.component.spec.tsRun the Angular spec audit on src/main/app/src/app/foo/foo.component.spec.ts and fix every FAIL according to .claude/rules/angular-specs.md.Angular Spec Auditor
Independently audit an Angular component spec file against the project's migration guidelines.
Usage: /audit-ng-spec-skill $ARGUMENTS
$ARGUMENTS = path to the spec file (relative from repo root), e.g. src/main/app/src/app/taken/taken-vrijgeven-dialog/taken-vrijgeven-dialog.component.spec.ts
If $ARGUMENTS is omitted, ask the user for the spec path before proceeding.
You did NOT write this spec. Treat it with completely fresh eyes.
Step 1 — Read context
- Read
.claude/rules/angular-specs.md. - Read the spec at
{SPEC_PATH}. - Derive the component path from the spec path (same directory,
.component.tsinstead of.component.spec.ts), read it. - Derive the template path (
.component.html), read it if it exists. - From
src/main/app/, run the check that CI applies to a touched spec, and treat every problem it reports as a FAIL:ESLINT_USE_FLAT_CONFIG=false npx eslint -c .eslintrc.strict-specs.js <spec path relative to src/main/app>. It already coversany,NO_ERRORS_SCHEMA, DOM queries outside Testing Library (By.css,querySelector, node access such as.childrenor.closest()),fireEventinstead ofuserEvent.setup(), rendering inbeforeEach, and object literals cast throughunknown. Fix those as.claude/rules/angular-specs.mddescribes; never replace one banned query with another. It does not catchdebugElement.query(By.directive(…))orwithin(fixture.nativeElement); mark those FAIL yourself.
Step 2 — Audit
For each item, mark PASS or FAIL with a one-line reason and the exact line(s) involved.
Rules
- [ ] No
: voidreturn type annotations anywhere in the spec - [ ] No trivial smoke tests (
it("should create", ...)or similar) - [ ] Variable naming: no single-letter or abbreviated names (
el,f,res,btn). Use full descriptive names (element,fixtureRef,result,button). - [ ] SPDX header: new file →
<current year> INFO.nlonly; existing file →INFO.nladded only if completely absent from the existing line
Spec structure
- [ ]
describe(ClassName.name, ...)— class name reference, not a string literal - [ ]
declarations: [Component]used (component isstandalone: false), ORimports: [Component]if already standalone - [ ] Services should use
TestBed.inject()+jest.spyOn()— avoiduseValue: mockObject.- Reason: type safety.
useValueaccepts any object — typos, missing methods, wrong return types all silently pass.jest.spyOnis checked against the real service type, so the compiler catches mismatches. - Strongly preferred pattern:
providers: [provideHttpClient(), provideRouter([]), MyService], // ... myService = TestBed.inject(MyService); jest.spyOn(myService, "someMethod").mockReturnValue(of(result)); useValueis acceptable when genuinely difficult to avoid (e.g. a service with a deeply complex DI tree that cannot be satisfied without significant setup). Flag it with a comment explaining why.- Always acceptable exceptions: Angular built-in injection tokens (
MAT_DIALOG_DATA,LOCALE_ID,APP_BASE_HREF, etc.) where no real class exists to inject. TranslateService→ useprovideTranslateService()inproviders, thenTestBed.inject(TranslateService)+jest.spyOn.- Services using
ZacHttpClient→ addprovideHttpClient()to providers. - Services using
Router→ addprovideRouter([])to providers.
- Reason: type safety.
- [ ]
provideHttpClient()present if any service in the tree usesZacHttpClient - [ ]
provideRouter([])present if any service in the tree usesRouter
Coverage
- [ ] Every test asserts meaningful behaviour
- [ ] ≥90% of template behaviours covered (buttons, conditionals, outputs, form states)
- [ ] Protected/private members accessed via bracket notation:
component["member"]
Step 3 — Fix
For each FAIL: edit the spec file with the correct fix. Do NOT touch any component source files.
After all fixes are applied, re-read the spec to confirm no violations remain.
Step 4 — Report
AUDIT: PASS (if nothing needed fixing)
AUDIT: PASS (N issues fixed) (if fixes were applied)
Issues fixed:
- Line X: <description of fix>
- ...
If a violation cannot be auto-fixed (e.g. missing test coverage that requires understanding domain logic), list it as a manual action required item and do not mark the audit PASS until the user addresses it.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/angular-spec-auditor-mvj1ocui' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/angular-spec-auditor-mvj1ocui/download' --output '.skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md.part' && mv '.skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md.part' '.skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
This file does not provide a usable name/description header for this native procedure. It remains available to download and inspect; use the manual method below.
Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/angular-spec-auditor-mvj1ocui/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
ClickHouse Performance Comparison
Testing
Evaluate ClickHouse performance test results, check PR performance changes, compare with history, and assess whether a result is actionable.
Analyze CI Performance Reports
Testing
Analyze CI performance comparison reports for a ClickHouse PR. Cross-references master history to distinguish real regressions from flaky tests.
Santa Method
Testing
Multi-agent adversarial verification with two independent reviewers. Output is checked twice and iteratively fixed until both pass before shipping.