Replaced the TODO stub in src/steps/1-crawl.ts with a
full PlaywrightCrawler implementation. The crawler now discovers all article URLs from
the site sitemap, extracts all required fields, and writes both output files correctly.
sitemap.xml — discoverUrlsFromSitemap() with fallback on fetch errortitle, content, published_at, category_name, author_name, featured_image_url, WMaker node_iddata/articles.json (array of crawled articles) and data/url-map.csv (including /node/NNNNN aliases for WMaker IDs)2 req/s via CRAWL_MAX_RPS env var (configurable)../lib/.
.env.example added with all required environment variables.
| Check | Result | Detail |
|---|---|---|
| tsc --noEmit |
PASS
|
Zero type errors after fixing Buffer→Uint8Array and unused import |
| vitest run |
PASS
|
45 / 45 tests passing across 4 test files |
| docker build |
N/A
|
CLI scripts — no Dockerfile in scope |
| cargo check / clippy |
N/A
|
Node.js / TypeScript project |