From nexa-claude-nextjs
Runs a comprehensive implementation audit for a delivered use case. Checks Definition of Done, i18n completeness and correctness, error message i18n, accessibility, visual fidelity against the design, and loading/error states. Run after /deliver-use-case or before /sprint-complete for a quality deep-dive. Results are advisory — Critical and Major findings should be fixed; Minor findings are observations.
How this skill is triggered — by the user, by Claude, or both
Slash command
/nexa-claude-nextjs:auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit the implementation of $ARGUMENTS (a use case ID like `UC-XXX`) against its specification,
Audit the implementation of $ARGUMENTS (a use case ID like UC-XXX) against its specification,
design, and quality standards. This is an independent quality review intended to catch issues
that unit and E2E tests do not surface.
Run the lenses below sequentially. Collect all findings before producing the final report.
| Input | Location |
|---|---|
| Use case specification | docs/use_cases/$ARGUMENTS.md |
| Frontend design | docs/designs/$ARGUMENTS-design.html |
| Entity model | docs/entity_model.md |
| Definition of Done | ${CLAUDE_PLUGIN_ROOT}/shared/readiness/DEFINITION_OF_DONE.md |
| i18n config | i18n/config.ts (supported locales) |
| Message files | messages/*.json (one per locale) |
Before running Lenses 1–3, check whether the project uses i18n:
<!-- NEXA_I18N_CONFIGURED --> in the project's CLAUDE.md, ormessages/ or i18n/ directoryIf none found, mark Lenses 1–3 as N/A and skip them.
Read the Definition of Done checklist. For every item, independently verify whether the implementation satisfies it by reading the code, spec, and entity model.
For each item, report:
Key verification points:
npx next build; verify input validation at system boundaries;
verify error states surface meaningful feedback.gitignore covers sensitive filesIdentify every user-facing string introduced or modified for $ARGUMENTS:
t('key'), getTranslations, useTranslations),
not a hardcoded literal. Search .tsx and .ts files for:
placeholder, title, aria-label, alt) that are not keysmessages/[TRANSLATE] prefix (placeholder not yet translated)For every translation key used by $ARGUMENTS, compare values across all locales:
{name}, {count}) match across locales — same names, same count{count} used, check one/other forms)Search all implementation files for $ARGUMENTS and identify every error-handling path:
catch blocks displaying messages to the usererror.tsx boundary componentsFor each, verify the message uses a translation key, not a hardcoded string. Hardcoded strings
like "Something went wrong", "Invalid input", or "Please try again" are findings.
Start the dev server if not running (npm run dev). For each screen in the frontend design:
browser_navigatebrowser_evaluate:
await import('https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.9.1/axe.min.js');
return axe.run();
<img> has a non-empty alt (or alt="" with role="presentation" for decorative)<label> or aria-labelbrowser_press_key)For each screen in the frontend design:
browser_navigate to the file path)browser_snapshot)For each screen that performs async operations (data fetching, form submissions):
loading.tsx or a loading skeleton exists and renderserror.tsx boundary exists for the route segmentSkip if e2e/helpers/traced.ts does not exist (project has not adopted the
traceability helper yet).
Otherwise, for every spec under e2e/**/*.spec.ts:
Build the ignore set. If e2e/.tracedignore exists, parse it as a
gitignore-style list (one path per line, # comments, blank lines skipped)
and exclude matching specs from the rest of the lens.
Check imports. Read each remaining spec and verify it imports at least
one of uc, meta, or bug from a ./helpers/traced path (relative forms
like './helpers/traced' or '../helpers/traced' are both fine). test
and expect imported from @playwright/test are expected and required —
they are not violations.
Check test.describe(...) calls. Every UC group is declared with
test.describe('UC-NNN: ...', uc('UC-NNN'), () => { ... }). A
test.describe(...) call whose second arg is not a uc('UC-NNN') literal
(e.g., raw { tag: [...] }, or only two args — title and body) is a
violation. Lift it to uc() so the UC doc is validated at registration.
Check test(...) calls. Walk every test('...', ..., async (...) => ...)
call in the file (excluding framework hooks like test.beforeAll,
test.afterEach, test.afterAll). Each one must pass a meta(...) or
bug(...) call as its second argument:
test.describe('UC-NNN: ...', uc('UC-NNN'), () => { ... })
body, each test() must use meta('UC-NNN', { scenario, verifies?, fixes? }),
with the first arg matching the enclosing describe's UC id.test.describe()), each test() must use
bug('BUG-NNN').
A test() call whose second arg is a plain object literal, a non-helper
function call, or absent is a violation.Check references. For every uc('UC-NNN'), meta('UC-NNN', { scenario: '...', verifies: ['CR-NNN', ...], fixes: ['BUG-NNN', ...] }),
and bug('BUG-NNN') literal: confirm the referenced doc exists under
docs/use_cases/, docs/change_requests/, or docs/bugs/. The helper
enforces this at runtime; the audit catches it before a test run.
Check the spec for a BUG-NNN referenced in fixes: or via bug().
If the bug file shows a status of RESOLVED (or equivalent), this is
correct. If the status is still OPEN, the test is guarding against a
regression of an unfixed bug — flag as Minor and ask whether the bug should
be marked resolved.
For each violation, report file path, line number, and the specific rule broken. Severity: Major during rollout (advisory). Once one full sprint has been delivered cleanly under the helper, escalate to Critical and have the audit fail sprint completion.
Produce one section per lens. For each finding:
Severity guide:
End with a summary:
npx claudepluginhub nexadevapp/nexa-claude-skills-marketplace --plugin nexa-claude-nextjsCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.