본문으로 건너뛰기
cccskills
무료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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md3.9 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

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

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

PP-Namias/Portfolio22026년 10월 16일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

PP-Namias/Portfolio22026년 10월 16일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

PP-Namias/Portfolio22026년 10월 16일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

PP-Namias/Portfolio22026년 10월 16일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

PP-Namias/Portfolio22026년 10월 16일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

PP-Namias/Portfolio22026년 10월 16일 업데이트

PP-Namias의 스킬 모두 보기

이 스킬의 문제 신고