name: check description: Verify all outputs exist after creating a new component and fix any issues argument-hint: [component-name]
Check Component Skill
Verify that all 8 required outputs exist and are wired correctly after creating a new component.
Instructions
Given a component name (e.g., cyclone, MapCyclone), normalize it to its kebab-case slug (e.g., cyclone) and run through every check below.
Check 1: Component Source File
- File exists:
src/registry/map/{slug}.tsx - Has
"use client"directive (if it uses hooks, event handlers, or browser APIs) - Exports a named component (e.g.,
MapCyclone) - Uses
typenotinterfacefor type definitions - Uses arrow functions with explicit returns
- Default values use
SCREAMING_SNAKE_CASEconstants above the component - Required props come before optional props in the type definition
- Cleanup in useEffect return functions (removes layers, sources, markers, event listeners)
Check 2: Barrel Export
src/registry/map/index.tsxhas an export line for the component- If the component exposes a control hook, it is also exported (e.g.,
useCycloneControl)
Check 3: Registry Entry
registry.jsonhas an entry initemswith:namein kebab-case (e.g.,cyclone)registryDependenciesincludes"https://www.terrae.dev/map.json"files[0].pathmatches the source file pathfiles[0].targetfollowscomponents/ui/map/{slug}.tsx
Check 4: Example Files
- At least one example exists:
src/app/docs/_components/examples/{slug}-example.tsx - Examples import from
@/registry/map - Examples wrap the map in
<div className="h-full w-full"> - Examples use
process.env.NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN || ""as access token - Examples that use hooks or event handlers have
"use client"
Check 5: Documentation Page
- File exists:
src/app/docs/{slug}/page.tsx - Exports
metadatawith atitle - Uses
DocsLayoutwithtitle,description,prev, andnext - First section is "Installation" with two
CodeBlocks (base map + component) - Basic
ComponentPreviewappears directly after Installation - Every example rendered on the page has a matching
getExampleSourcecall - If the component has configurable props, a properties
Tablesection exists - All documented props match the actual component props (no missing, no extra)
Check 6: Sidebar Navigation
src/app/docs/_components/docs-sidebar.tsxhas aNavItemfor the component- The
hrefmatches/docs/{slug} - Has
badge: "new" - Placed in the correct section (
"Core"or"Features") - The Lucide icon is imported
Check 7: Components Page
src/app/docs/components/page.tsxhas aComponentItementry- The
hrefmatches/docs/{slug} - Has
isNew: true categorymatches the sidebar sectioninstallCommandURL matcheshttps://www.terrae.dev/{registry-name}.json- The Lucide icon is imported
Check 8: Changelog
src/app/docs/changelog/page.tsxhas an entry in the most recentChangelogEntry- Entry has
title,description(with<code>tag for component name), andhref hrefmatches/docs/{slug}
Output Format
Present results as a checklist table:
| # | Output | Status | Notes |
| --- | ------------------ | ------ | ----------------------- |
| 1 | Component source | pass | |
| 2 | Barrel export | pass | |
| 3 | Registry entry | fail | Missing target path |
| 4 | Examples | pass | 3 examples found |
| 5 | Documentation page | warn | Missing props: `scale` |
| 6 | Sidebar navigation | pass | |
| 7 | Components page | pass | |
| 8 | Changelog | pass | |
- pass: Everything correct
- warn: Works but has minor issues (e.g., missing optional prop in docs table)
- fail: Missing or broken, needs fixing
After the table, list specific issues with file paths and line numbers.
Fix Phase
If any checks have fail or warn status, fix them automatically:
- Work through issues in check order (1–8)
- Apply the minimal change needed for each issue
- After all fixes, re-run the checks to confirm everything passes
- Present the updated checklist table showing all checks as pass
If a fix requires a decision (e.g., which sidebar section to place the component in), ask the user before proceeding.