a11y-fixes
Resolve axe-core accessibility violations reported by Vitest (test/a11y.ts), Playwright (.playwright/a11y.ts), or the code-audit-frontend agent's a11y bucket.…
Resolve specific ESLint errors and warnings that appear in this project. Use when fixing lint failures, ESLint reported issues, or autofix conflicts (e.g. no-void, canonical/export-specifier-newline vs prettier, no-shadow trailing underscores, sonarjs/deprecation,
$ npx -y skills add gaia-react/gaia --skill eslint-fixes --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/eslint-fixesContext preview
The summary Claude sees to decide when to auto-load this skill.
Resolve specific ESLint errors and warnings that appear in this project. Use when fixing lint failures, ESLint reported issues, or autofix conflicts (e.g. no-void, canonical/export-specifier-newline vs prettier, no-shadow trailing underscores, sonarjs/deprecation,
name: eslint-fixes description: Resolve specific ESLint errors and warnings that appear in this project. Use when fixing lint failures, ESLint reported issues, or autofix conflicts (e.g. no-void, canonical/export-specifier-newline vs prettier, no-shadow trailing underscores, sonarjs/deprecation, you-dont-need-lodash-underscore, testing-library/prefer-screen-queries, testing-library/await-async-events, jest-dom/prefer-*). model: haiku
How to resolve specific ESLint errors in this project.
Don't use the `void` operator in event listener functions. Instead, make the function `async` and `await` the promise.
// BAD
const handleClickNavigate = () => {
void navigate('/path');
};
// GOOD
const handleClickNavigate = async () => {
await navigate('/path');
};Use inline `export const` declarations instead of a grouped `export { ... }` statement to avoid circular fix warnings between these two rules.
// BAD, causes circular fix between prettier and canonical
export {DAYS, DURATIONS, FITNESS_GOALS};
// GOOD, declare with export directly
export const DAYS = ['mon', 'tue'] as const;
export const DURATIONS = [15, 30, 45] as const;
export const FITNESS_GOALS = ['weight_loss'] as const;ESLint's `no-shadow` autofixes by appending `_`. Once shadowing is resolved, remove the trailing `_`.
Never suppress with `eslint-disable`. Always fix the underlying deprecation.
Common case: Zod v4 deprecated `z.string().email()` in favor of `z.email()`.
// BAD, suppressing the warning // eslint-disable-next-line sonarjs/deprecation email: z.string().email(), // GOOD, use the non-deprecated API email: z.email(),
Use native JavaScript instead of lodash/underscore equivalents.
// BAD import _ from 'lodash'; const first = _.find(items, (item) => item.active); const names = _.map(items, (item) => item.name); // GOOD const first = items.find((item) => item.active); const names = items.map((item) => item.name);
Use `screen` queries instead of destructuring from `render()`.
// BAD
const {getByText, getByRole} = render(<MyComponent />);
// GOOD
render(<MyComponent />);
screen.getByText('...');
screen.getByRole('button');`userEvent` methods are async, always `await` them.
// BAD userEvent.click(button); // GOOD await userEvent.click(button);
Use jest-dom matchers instead of raw DOM property checks.
// BAD
expect(input.value).toBe('hello');
expect(checkbox.checked).toBe(true);
expect(el.textContent).toBe('Hello');
// GOOD
expect(input).toHaveValue('hello');
expect(checkbox).toBeChecked();
expect(el).toHaveTextContent('Hello');Claude is raw power. GAIA is order and focus. The foundation that keeps Claude-shipped code production-grade as your team scales. The React frontend is handled. You build the rest of your app on top. Every convention enforced in code.
Repo: gaia-react/gaia
Resolve axe-core accessibility violations reported by Vitest (test/a11y.ts), Playwright (.playwright/a11y.ts), or the code-audit-frontend agent's a11y bucket.…
File a new tech-debt GitHub issue for an out-of-scope code-review finding, building the dedup key, checking for an existing open or declined-closed match, and…
Generate a comprehensive GAIA session handoff document, accomplishments, decisions, current state, open questions, so context can be cleared or compacted…
Restore context from the most recent GAIA session handoff and suggest the next action. Trigger on `/gaia-pickup` or natural-language asks like "pick up where…
Diagnose React render performance by driving a micro-interaction, capturing real renders, and surfacing memo-defeating reference instability with a recommended…
GAIA wiki maintenance, sync, consolidate, lint. Runs the full chain with no sub-arg, or a single stage when named (sync | consolidate | lint); append --force…