- Support Angular in code-to-design description, prerequisites, and discovery
- Expand extract-design-md/references/angular.md with Tailwind v4, PrimeNG Aura, and modern Angular standalone/zoneless patterns
- Document Angular CLI (--wait 2000) and auth-gated page handling (--auth-script) in extract-static-html
The find calls for locating the global CSS file, counting installed
ui components, and locating utils.ts all searched the whole project
tree with no node_modules exclusion. Any dependency shipping its own
index.css, components/ui/*.tsx, or lib/utils.ts got picked up
instead of (or counted alongside) the real project files, e.g.
inflating the reported component count. Exclude node_modules from
all three.
The workflow only validated react-components' gold-standard example;
react-native's validator was never exercised in CI. Add a mirroring
job for react-native, plus the package-lock.json it needs for `npm
ci` (react-native had none, unlike react-components).
fs.readFileSync ran before the try block with no argv[2] check, so
running validate.js with no argument or a bad path threw an unhandled
exception (raw Node stack trace) instead of a clean error. Add a
usage check and move the read inside the try/catch in both
react-components and react-native validate.js.
HEX_COLOR_REGEX required exactly 6 hex digits, so short-form colors
like #fff and #ffff (valid CSS/Tailwind hex) went undetected. Align
with react-native's validator: allow 3-8 hex digits with a trailing
word boundary.
curl without -f treats an HTTP error response as success, so an
expired signed URL saved the 403 XML error page as the output .png
and the script reported a successful download. The else branch was
also unreachable: with set -e the script exits before the exit-code
check runs.
Add -f so curl fails on HTTP errors, move curl into an if condition
so the failure branch is reachable under set -e, and remove the
partial output file on failure.
The walk() helper recursed into every enumerable object property,
including the span metadata ({start, end, ctxt}) attached to every
SWC node, so the walker visited 2-4x more objects than the AST
actually contains and re-ran all type checks on each of them.
Restrict recursion to arrays and real AST nodes (objects with a
string `type`) and skip span. Measured on the bundled examples this
cuts object visits to 25-46% of the previous count (~4-5x faster)
with byte-identical validation results on both the gold-standard
and failing components.
Applies to both copies of the walker:
- react-components/scripts/validate.js
- react-native/scripts/validate.js (parent tracking preserved:
arrays forward the original parent so ExportDeclaration detection
is unchanged)
- Update react-components and react-native skills to make Phase 4 audits optional
- Require explicit user permission before starting dev servers, packagers, or simulators
- Keep TypeScript compilation verification mandatory but adjust gate rules
- Restructure react-components and react-native skills into four phases
- Add explicit quality gates, anti-patterns, and troubleshooting for each phase
- Explicitly cover syncing and updating existing components to align with the latest Stitch designs
- Restore name field in react-components to stitch::react-components for consistency
Add Agent Skill for React + Vite dashboards with TanStack Query, DESIGN.md tokens, and Web3 read patterns. Document docs URL workaround for stitch-skills#69.
- upload_to_stitch.py: Add .md extension / text/markdown MIME mapping
- upload_to_stitch.py: Add --generated-by argument to set the generatedBy field on HTML/Markdown screens
- upload_to_stitch.py: Add warning when --generated-by is passed on image uploads (ignored)
- upload_to_stitch.py: Define global SSL context using certifi.where() fallback if package is available
- upload-to-stitch/SKILL.md: Add .md to supported formats and document new CLI options
- code-to-design/SKILL.md: Update Steps 4 & 5 to pass --generated-by with corresponding skill identifiers
- manage-design-system/SKILL.md: Update DESIGN.md upload example with --generated-by <GENERATED_BY> placeholder and document how to set it
* add react-native skill
* fix code review issues in react-native skill
* refactor: update name to match `stitch::` convention
---------
Co-authored-by: David East <davideast@users.noreply.github.com>
The hex-color check in scripts/validate.js is silently a no-op. The guard
reads node.name.name === 'className', but SWC's AST exposes the
JSXAttribute identifier on .name.value. The condition is always false,
so the inner regex test never runs and tailwindIssues stays empty
regardless of input.
Effect today: validate.js correctly enforces the Props-interface rule
but does not enforce the no-hardcoded-hex rule. Components like
<div className="bg-[#ff0000]">...</div>
pass validation. The CI smoke test happens to be green because
gold-standard-card.tsx has no hex codes.
Fix: accept both AST shapes (.name?.value and .name?.name) so the guard
stays correct against the current SWC release and against any future
revision that flips the field back. Optional chaining added so a
malformed node can't NPE the walker.
Reproducer (before patch, prints '0 hex codes'):
echo 'export function X(){return <div className="bg-[#ff0000]">x</div>;}' > /tmp/bad.tsx
node scripts/validate.js /tmp/bad.tsx
After patch, the same input prints '1 hardcoded hex codes' and exits 1.
The existing examples/gold-standard-card.tsx continues to validate clean.