Skip to content
cccskills
FreePublished on GitHub

fix-react-doctor-finding

Use when asked to fix a specific react-doctor finding on the Namias portfolio. Reads the report, locates the file, applies the canonical fix pattern, re-runs the tool, and commits the slice.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md3.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

fix-react-doctor-finding

The fix is always: read → locate → apply the canonical pattern → re-run → commit.

Step 1 — read the report

npm run doctor:json
node -e "
  const r = require('./.react-doctor/report.json');
  console.log(r.summary.errorCount, 'err,', r.summary.warningCount, 'warn');
  r.diagnostics.forEach(d =>
    console.log(d.filePath + ':' + d.line + ':' + d.column + ' [' + d.severity + '] ' + d.rule + ' — ' + d.title)
  );
"

Step 2 — locate the file

The filePath in the report is relative to the repo root. Open it with the read tool, jump to the line number from the report.

Step 3 — apply the canonical pattern

See .agents/skills/run-react-doctor/SKILL.md for the 12-rule catalog. The patterns:

RuleOne-liner
no-dangerimport { JsonLd } from '@/components/seo/JsonLd' and replace <script dangerouslySetInnerHTML={...}> with <JsonLd data={...} />
iframe-missing-sandboxadd sandbox="" (or sandbox="allow-scripts ..." with a justification comment for Cal.com)
no-array-index-as-keyreplace key={i} with key={item.slug ?? item._key ?? item.id ?? item.name}
no-fetch-in-effectconst { data } = useSWR(key, fetcher) and move the fetch into a module-level function
rendering-hydration-mismatch-timehoist const X = computeAtModuleLoad() and use useState(X) + useEffect to refresh
button-has-typeadd type="button" (or submit/reset) as the first prop
control-has-associated-labeladd aria-label="..." to the input
prefer-tag-over-roleswap <div role="x"> for the native element OR add a documented eslint-disable-next-line on the same line as the role attribute
only-export-componentsmove helpers to *.lib.ts and types to *.types.ts; keep a barrel index.ts
no-multi-compextract a sibling file
jsx-no-constructed-context-valuesconst value = useMemo(() => ({...}), [deps])
react-hooks/exhaustive-depsadd the dep, or memoize the value with useMemo / useCallback

Step 4 — re-run

npm run doctor:json

Expect the targeted finding to be gone. The summary should drop by 1.

Step 5 — run the full test suite

npm run test -- --run

All 266 tests across 29 files must pass. The fix must not change visual or functional parity.

Step 6 — commit

One commit per fix. Message format:

fix(doctor): <one-line description> (<rule>, EPIC-<n> S-<x.y>)

Closes:
  - F-NNN file:line: <one-line context>
  - ...

Verified:
- vitest: 29/29 test files, 266/266 tests pass
- doctor:check findings drop from N to N-1

Use the F-NNN id from docs/react-doctor/findings.json (the historical baseline); for findings introduced after baseline, omit the cross-reference and describe the file/line directly.

When NOT to disable a rule

  • If a rule fires on a false positive that is unavoidable (e.g. CSS selector string containing the token button in FOCUSABLE_SELECTOR), the disable comment must:
    1. Sit on the line the rule reports, not the line above
    2. Include a one-paragraph justification that names the alternative and why it was rejected
    3. Use the react-doctor/<rule> namespace (NOT react/<rule>)
  • If you find yourself disabling more than 2 rules per file, stop and ask — the configuration is probably wrong, not the code.

Reference documents

  • docs/react-doctor/scoreboard.md — full journey from 91/100 baseline to 100/100, with the commit hash that closed each category
  • docs/react-doctor/findings.json — frozen F-NNN catalog from the baseline
  • docs/react-doctor/triage.md — strategy for each rule
  • docs/react-doctor/epic-N-report.md — per-epic narrative

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Audit and fix accessibility issues across the portfolio to ensure WCAG 2.1 AA compliance.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 20, 2026

Creates a new blog post document in the Sanity studio. Use when the user wants to write a blog post, publish an article, or schedule a future post.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 20, 2026

Creates a new certification document in the Sanity studio. Use when the user wants to add a credential, certificate, or professional accreditation to the Certifications collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 20, 2026

Adds a new skill MD file to the studio's skills collection. Use when the user wants to author a new step-by-step recipe for the studio's in-app Skills tool or the .agents mirror.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 20, 2026

Creates a new project document in the Sanity studio. Use when the user wants to add a new portfolio project, a case study, or a work sample to the Projects collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 20, 2026

Creates a new experience document in the Sanity studio. Use when the user wants to add a job, role, internship, or work history entry to the Experience collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 20, 2026

See all skills by PP-Namias

Report a problem with this skill