# Contributor handoff — nextlevelbuilder/ui-ux-pro-max-skill

> Canonical page: https://codevetter.com/unpack/ui-ux-pro-max-skill/agent-handoff

# Contributor handoff — nextlevelbuilder/ui-ux-pro-max-skill

Scanned commit dcc40ff5133ef78276117db0cc34e7b83cc8aeba (2026-09-21). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

Read CLAUDE.md first — it documents the src/ source-of-truth rule and the sync contract. Edit data/scripts/templates only under src/ui-ux-pro-max/, then run `cd cli && npm run sync:assets && npm run check:assets`. Never edit cli/assets/ or .claude/skills/ui-ux-pro-max/{data,scripts} directly (mirrored), but DO edit .claude/skills/ui-ux-pro-max/SKILL.md by hand (it is not generated). The Python layer is stdlib-only — no pip installs. Gate everything through `npm --prefix cli run verify:data` which runs both validators, unittest discovery, the relevance evaluator, both smoke suites, and the asset-sync check.
- Canonical edit boundary: modify CSVs under src/ui-ux-pro-max/data/, Python under src/ui-ux-pro-max/scripts/, templates under src/ui-ux-pro-max/templates/ — then `npm run sync:assets`; the two mirror trees (cli/assets/, .claude/skills/ui-ux-pro-max/{data,scripts}) are regenerated, never hand-edited. — [CLAUDE.md](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/CLAUDE.md) [cli/scripts/sync-assets.mjs#L15-50](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/scripts/sync-assets.mjs#L15-L50) [CONTRIBUTING.md#L46-62](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/CONTRIBUTING.md#L46-L62)
- Exception to the mirror rule: .claude/skills/ui-ux-pro-max/SKILL.md is hand-authored and NOT synced — edit it directly; sync-assets.mjs only mirrors its data/ and scripts/ subdirs. — [cli/scripts/sync-assets.mjs#L30-38](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/scripts/sync-assets.mjs#L30-L38) [.claude/skills/ui-ux-pro-max/SKILL.md](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/.claude/skills/ui-ux-pro-max/SKILL.md)
- Verify loop for any data/script change: `npm --prefix cli run verify:data` = validate:csv + validate:semantic + validate:agent-guide + validate:catalog-summary + unittest discovery + evaluate:relevance + smoke:domains + smoke:stacks + check:assets. — [cli/package.json#L18-28](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/package.json#L18-L28)
- When changing CSV row counts or advertised numbers (styles, palettes, fonts, stacks), regenerate catalog-summary.json via scripts/generate-catalog-summary.py and expect validate-agent-guide.py to recompute the SKILL.md/template description string — stale counts fail CI. — [scripts/generate-catalog-summary.py#L1-30](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/scripts/generate-catalog-summary.py#L1-L30) [scripts/validate-agent-guide.py#L48-76](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/scripts/validate-agent-guide.py#L48-L76)
- Git workflow: never push to main; branch feat/... or fix/..., PR via gh; commits use Conventional Commits because release.yml runs semantic-release (conventionalcommits preset) that versions and publishes the CLI automatically. — [CLAUDE.md](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/CLAUDE.md) [CONTRIBUTING.md#L120-153](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/CONTRIBUTING.md#L120-L153) [.releaserc.json](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/.releaserc.json) [.github/workflows/release.yml#L78-90](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/.github/workflows/release.yml#L78-L90)
- Known trap — path contract: skill docs must use skill-relative script paths ('scripts/search.py', '../<skill>/scripts/...'); ~/.claude/skills/, .claude/skills/, $HOME/, and ${CLAUDE_PLUGIN_ROOT} forms are grep-rejected by CI except in the core SKILL.md. — [.github/workflows/check-asset-sync.yml#L41-95](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/.github/workflows/check-asset-sync.yml#L41-L95) [.claude/skills/ui-ux-pro-max/SKILL.md#L37-45](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/.claude/skills/ui-ux-pro-max/SKILL.md#L37-L45)
- Known trap — Windows/cp1252: search.py and design_system.py rewrap stdout/stderr to UTF-8 at import because emoji/box-drawing output crashes on the Windows default encoding; preserve that block when editing. — [src/ui-ux-pro-max/scripts/search.py#L35-39](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/src/ui-ux-pro-max/scripts/search.py#L35-L39) [src/ui-ux-pro-max/scripts/design_system.py#L30-34](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/src/ui-ux-pro-max/scripts/design_system.py#L30-L34)
- Known trap — line endings: catalog-summary.json pins sha256 hashes of LF-normalized data and .gitattributes forces eol=lf on data files; committing CRLF data or bypassing .gitattributes breaks the hash check on other platforms. — [.gitattributes](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/.gitattributes) [scripts/generate-catalog-summary.py#L18-21](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/scripts/generate-catalog-summary.py#L18-L21)
- Known trap — abstention is intentional: a 0-result search is a feature (calibrated thresholds + suggestions), so don't 'fix' empty results by lowering thresholds without updating the relevance baseline and thresholds fixture. — [src/ui-ux-pro-max/scripts/core.py#L203-213](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/src/ui-ux-pro-max/scripts/core.py#L203-L213) [scripts/evaluate-relevance.py#L236-253](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/scripts/evaluate-relevance.py#L236-L253) [src/ui-ux-pro-max/scripts/tests/fixtures/relevance-thresholds.json](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/src/ui-ux-pro-max/scripts/tests/fixtures/relevance-thresholds.json)
- Files to read first for search changes: core.py (engine + registries), design_system.py (aggregator + persistence), reasoning_contract.py (rule grammar), then test_core.py + test_data_contracts.py to see the locked invariants; for installer changes: template.ts, types/index.ts, detect.ts, one platform JSON. — [src/ui-ux-pro-max/scripts/core.py](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/src/ui-ux-pro-max/scripts/core.py) [src/ui-ux-pro-max/scripts/design_system.py](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/src/ui-ux-pro-max/scripts/design_system.py) [cli/src/utils/template.ts](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/src/utils/template.ts) [cli/src/types/index.ts](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/src/types/index.ts)
- cli/assets/ is .gitignore-adjacent generated output bundled into the npm package ('files': ['dist','assets']); the dry-run e2e specs import TS directly from src/, so CLI tests run without building dist first. — [cli/package.json#L9-12](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/package.json#L9-L12) [cli/tests/e2e/dry-run.spec.ts#L5-8](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/tests/e2e/dry-run.spec.ts#L5-L8) [cli/.npmignore](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/.npmignore)
- CLI dev workflow: `npm run dev` runs via bun, `npm run build` prefers `bun build --target node` and falls back to node_modules tsc; `npm run typecheck` is tsc --noEmit; Playwright e2e needs `npx playwright install --with-deps chromium`. — [cli/package.json#L14-30](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/package.json#L14-L30) [cli/scripts/build.mjs#L15-29](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/scripts/build.mjs#L15-L29) [cli/playwright.config.ts](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill/blob/dcc40ff5133ef78276117db0cc34e7b83cc8aeba/cli/playwright.config.ts)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
