[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-automattic-diagnose":3,"mdc-sfq5ij-key":36,"related-repo-automattic-diagnose":3197,"related-org-automattic-diagnose":3303},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"diagnose","debug failed data extraction processes","Debug failed or low-quality extractions by analyzing logs, probing the source site, and identifying root causes",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"automattic","Automattic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fautomattic.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Logs","logs","tag",{"name":17,"slug":18,"type":15},"Data Engineering","data-engineering",{"name":20,"slug":21,"type":15},"QA","qa",{"name":23,"slug":24,"type":15},"Debugging","debugging",31,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fdata-liberation-agent","2026-05-10T05:48:11.267642",null,1,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"Extract content from closed web platforms into WordPress-compatible WXR files.","https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fdata-liberation-agent\u002Ftree\u002FHEAD\u002Fskills\u002Fdiagnose","---\nname: diagnose\ndescription: Debug failed or low-quality extractions by analyzing logs, probing the source site, and identifying root causes\nallowed-tools:\n  - Bash\n  - Read\n  - Write\n  - Edit\n  - Glob\n  - Grep\n  - AskUserQuestion\n  - WebSearch\n---\n\n# Diagnose — Debug Extraction Failures\n\nSystematically investigate why an extraction failed or produced poor results. Identify root causes and fix them.\n\n## When to Use\n\n- Extraction completed but many pages failed\n- Extraction completed but content quality is low\n- Extraction hung or crashed mid-way\n- The user reports missing content after import\n\n## Setup\n\nAsk for or detect:\n\n| Parameter | How to find it |\n|-----------|---------------|\n| Output directory | Call `liberate_paths({ url })` to resolve `siteDir`; default base is `~\u002FStudio\u002F_liberations\u002F\u003Chost>` |\n| WXR file | `output.wxr` in the output directory |\n| Extraction log | `extraction-log.jsonl` in the output directory |\n| Source URL | From the WXR's `\u003Clink>` element or ask the user |\n\n## Phase 1: Triage — What Happened?\n\n**Start with `liberate_verify`** — it gives you a structured overview in one call:\n- WXR item counts (pages, posts, media)\n- Failed URLs and failed media downloads\n- Stale CDN URLs still in content\n- Quality score breakdown (high\u002Fmedium\u002Flow)\n- A \"needs attention\" summary\n\nThis replaces manual log grepping for the initial assessment. If you need more detail, then dig into the raw log:\n\n```bash\n# Count successes vs failures\ngrep -c '\"type\":\"processed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\ngrep -c '\"type\":\"failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\ngrep -c '\"type\":\"media_failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\n```\n\n### Classify the problem:\n\n**A. High failure rate (>30% failed)**\nSomething systematic is wrong — the site is blocking requests, the adapter can't parse the platform, or there's an auth issue.\n\n**B. Low failure rate (\u003C30%) with specific pages failing**\nIndividual page issues — timeouts, unusual page structures, dynamic content.\n\n**C. No failures but low quality content**\nThe adapter extracted something but it's the wrong content — nav bars, footers, cookie banners instead of the actual page body.\n\n**D. Crash \u002F incomplete extraction**\nThe process died mid-way. Check for the lock file, partial WXR, and the last log entry.\n\n**E. Missing or incorrect products**\nProducts were expected but `products.csv` is missing, empty, or has wrong data.\n\n## Phase 2: Investigate\n\n### For high failure rate (Type A):\n\n1. **Read the error messages** from failed entries:\n   ```bash\n   grep '\"type\":\"failed\"' extraction-log.jsonl | head -5\n   ```\n\n2. **Common causes and fixes:**\n\n   | Error pattern | Cause | Fix |\n   |--------------|-------|-----|\n   | `timeout` \u002F `AbortError` | Site is slow or blocking | Increase `--delay`, try with browser via `--cdp-port` |\n   | `403 Forbidden` | Rate limiting or bot detection | Increase delay, use CDP with a real browser session |\n   | `404 Not Found` | Stale sitemap, pages moved | Re-run discovery, check if site restructured |\n   | `TypeError: fetch failed` | Network issue, wrong protocol | Check if site uses http vs https, check DNS |\n   | `Navigation failed` | Playwright can't load the page | Check if site requires JavaScript, cookies, or auth |\n\n3. **Probe a failed URL manually:**\n   ```bash\n   curl -sI \u003Cfailed-url> | head -20\n   ```\n   Check: status code, redirects, `Content-Type`, security headers.\n\n4. **Deep browser probe (if the user has Chrome with CDP running):**\n   Call `liberate_probe` with the CDP port and site URL. This connects to the browser and reports:\n   - **Window globals** — platform-specific data objects (GoDaddy W+M: `_BLOG_DATA`, Shopify: `Shopify.*`, Squarespace: `__NEXT_DATA__`, Wix: `__WIX_DATA__`)\n   - **Cookies** — names, domains, flags (helps diagnose auth\u002Fsession issues)\n   - **localStorage** — cached config and state\n   - **Performance API network entries** — what API calls the page made (useful when extraction misses data)\n   - **Platform identity** — site IDs, visitor IDs, view mode (helps identify auth context)\n\n   This is especially useful for:\n   - Verifying the user is actually logged in (check for session cookies)\n   - Finding alternate data sources when API interception fails\n   - Understanding why content is empty (check if globals are populated)\n\n5. **Check if the platform is detected correctly:**\n   ```bash\n   npx tsx src\u002Fcli.ts inspect \u003Csite-url>\n   ```\n   If detection is wrong, the wrong adapter is running.\n\n### For individual page failures (Type B):\n\n1. **Group failures by error type:**\n   ```bash\n   grep '\"type\":\"failed\"' extraction-log.jsonl | jq -r .error | sort | uniq -c | sort -rn\n   ```\n\n2. **Spot-check the worst offenders** — fetch the URL manually and compare against what the adapter tried to do.\n\n3. **Check for pattern:** Are all failures the same URL type (e.g. all blog posts fail but pages succeed)? This points to a type-specific extraction bug.\n\n### For low quality content (Type C):\n\n1. **Run `\u002Fqa`** to compare WXR content against the origin site. This gives per-page quality grades.\n\n2. **Read a few low-scoring pages** from the WXR:\n   - Is the content just navigation\u002Ffooter\u002Fboilerplate?\n   - Is the main content area missing?\n   - Are images referenced but missing?\n\n3. **Check the adapter's content selector.** Each adapter targets specific HTML containers:\n   - Wix: extracts from DOM via Playwright\n   - Squarespace: `?format=json` API or admin API via CDP\n   - Webflow: `.w-richtext` containers\n   - Shopify: `article` or `.rte` containers\n   - GoDaddy W+M: blog posts parse `window._BLOG_DATA` and convert Draft.js `post.fullContent` to HTML; pages strip `HEADER_SECTION` \u002F `FOOTER_*` \u002F section-title \u002F hero-image widgets from the DOM\n\n   If the site uses a non-standard template, the selector may miss the content.\n\n4. **Fetch the origin page and inspect its structure:**\n   ```bash\n   curl -s \u003Cpage-url> | grep -o '\u003Cmain\\|\u003Carticle\\|class=\"content\\|class=\"post-body\\|class=\"entry-content' | head -10\n   ```\n\n### For crashes (Type D):\n\n1. **Check for lock file:** `.liberation-lock` in the output directory means the process didn't clean up.\n2. **Check the last log entry** — this is the page that was being processed when it crashed.\n3. **Check WXR integrity** — if streaming was active, the WXR may be truncated (missing `\u003C\u002Fchannel>\u003C\u002Frss>`).\n4. **Fix and resume:** Delete the lock file, then re-run with `--resume`.\n\n### For product issues (Type E):\n\n1. **Check if products.csv and products.jsonl exist:**\n   ```bash\n   ls -la \u003CoutputDir>\u002Fproducts.csv \u003CoutputDir>\u002Fproducts.jsonl\n   ```\n\n2. **If both are missing** — no products were detected during extraction. Investigate:\n   - Were product pages in the sitemap? Check the extraction log for product URLs.\n   - Does the site use JSON-LD `@type: Product`? Fetch a product page and check:\n     ```bash\n     curl -s \u003Cproduct-url> | grep -o 'application\u002Fld+json' | head -3\n     curl -s \u003Cproduct-url> | grep -o '\"@type\":\"Product\"'\n     ```\n   - If no JSON-LD, the platform may need a custom `extractProduct` function in its adapter.\n   - Were the URLs classified as `product` type? Check `classifyUrl` in `src\u002Flib\u002Fextraction\u002Fsitemap.ts` for the URL patterns it recognizes.\n\n3. **If products.jsonl exists but products.csv is missing or empty** — the JSONL→CSV conversion failed. Read products.jsonl to check data quality:\n   ```bash\n   head -3 \u003CoutputDir>\u002Fproducts.jsonl | jq .\n   ```\n   Check: do products have names? Prices? Are fields malformed?\n\n4. **If products.csv exists but data is wrong:**\n   - **Missing prices** — the JSON-LD `offers` array may be structured differently than expected. Fetch a product page and inspect the JSON-LD.\n   - **Missing images** — check if images are in `ld.image` as strings, objects with `.url`, or in a different field.\n   - **Missing variants** — the generic JSON-LD extractor only produces simple products. Variants require platform-specific extraction (Shopify and Wix have this; other platforms may need it added via `\u002Fadapt`).\n   - **Duplicate products** — if both the adapter's custom extractor and the shared JSON-LD extractor fire for the same page, products may be doubled. Check if `extractProduct` is passed to `runExtractionLoop` alongside the generic fallback.\n\n5. **Check product count vs expectations:**\n   ```bash\n   wc -l \u003CoutputDir>\u002Fproducts.jsonl\n   grep -c '\"type\":\"product\"' \u003CoutputDir>\u002Fextraction-log.jsonl || echo \"no product type in log\"\n   ```\n\n## Phase 3: Fix\n\nBased on the diagnosis:\n\n### Adapter-level fixes\n\nIf the content selector is wrong for this site's template:\n1. Read the adapter's `extractPage` function\n2. Identify the correct content container\n3. Add a fallback selector or adjust the existing one\n4. Re-extract affected pages with `--resume`\n\n### Configuration fixes\n\nIf the issue is rate limiting, timeouts, or auth:\n1. Suggest the right `--delay` value\n2. Suggest using `--cdp-port` with an authenticated browser session\n3. Suggest providing a `--token` if the platform supports API keys\n\n### Data fixes\n\nIf the WXR has issues but re-extraction isn't needed:\n1. Use `\u002Fqa` to identify and patch specific content gaps\n2. Manually fix truncated WXR (add closing tags)\n\n## Phase 4: Verify\n\nAfter applying fixes:\n\n1. **Re-extract** with `--resume` (only re-processes failed URLs)\n2. **Run `\u002Fqa`** to check content quality\n3. **Compare failure counts** before and after\n\n## Phase 5: Document\n\nIf you discovered a platform-specific issue or workaround:\n1. Add a `DISCOVERIES.md` entry\n2. If the fix is adapter code, commit it with a descriptive message\n\n## Common Diagnostic Commands\n\n```bash\n# Overview of extraction results\nwc -l \u003CoutputDir>\u002Fextraction-log.jsonl\ngrep -c '\"processed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\ngrep -c '\"failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\n\n# Most common errors\ngrep '\"failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl | grep -o '\"error\":\"[^\"]*\"' | sort | uniq -c | sort -rn\n\n# Slowest pages\ngrep '\"processed\"' \u003CoutputDir>\u002Fextraction-log.jsonl | grep -o '\"durationMs\":[0-9]*' | sort -t: -k2 -rn | head -10\n\n# Check WXR size and item count\nwc -c \u003CoutputDir>\u002Foutput.wxr\ngrep -c '\u003Citem>' \u003CoutputDir>\u002Foutput.wxr\n\n# Check media downloads\nls \u003CoutputDir>\u002Fmedia\u002F | wc -l\ngrep -c '\"media_failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\n\n# Check if extraction is complete\ntest -f \u003CoutputDir>\u002F.discovery-complete && echo \"Complete\" || echo \"Incomplete\"\n\n# Product diagnostics\nwc -l \u003CoutputDir>\u002Fproducts.jsonl 2>\u002Fdev\u002Fnull || echo \"No products.jsonl\"\nwc -l \u003CoutputDir>\u002Fproducts.csv 2>\u002Fdev\u002Fnull || echo \"No products.csv\"\nhead -3 \u003CoutputDir>\u002Fproducts.jsonl 2>\u002Fdev\u002Fnull | python3 -m json.tool 2>\u002Fdev\u002Fnull || true\n```\n\n## Important Rules\n\n1. **Read the logs first.** The extraction log tells you exactly what happened — don't guess.\n2. **Probe before fixing.** Understand the root cause before changing code.\n3. **One fix at a time.** Change one thing, re-test, confirm it helped.\n4. **Don't mask failures.** If a page genuinely can't be extracted, that's information — don't silence the error.\n5. **Document what you find.** Platform quirks discovered during diagnosis are valuable for DISCOVERIES.md.\n",{"data":37,"body":47},{"name":4,"description":6,"allowed-tools":38},[39,40,41,42,43,44,45,46],"Bash","Read","Write","Edit","Glob","Grep","AskUserQuestion","WebSearch",{"type":48,"children":49},"root",[50,59,65,72,97,103,108,230,236,253,281,286,456,463,473,483,493,503,521,527,533,1020,1026,1141,1147,1383,1389,1456,1462,2019,2025,2030,2036,2041,2077,2083,2088,2128,2134,2139,2159,2165,2170,2214,2220,2225,2246,2252,3132,3138,3191],{"type":51,"tag":52,"props":53,"children":55},"element","h1",{"id":54},"diagnose-debug-extraction-failures",[56],{"type":57,"value":58},"text","Diagnose — Debug Extraction Failures",{"type":51,"tag":60,"props":61,"children":62},"p",{},[63],{"type":57,"value":64},"Systematically investigate why an extraction failed or produced poor results. Identify root causes and fix them.",{"type":51,"tag":66,"props":67,"children":69},"h2",{"id":68},"when-to-use",[70],{"type":57,"value":71},"When to Use",{"type":51,"tag":73,"props":74,"children":75},"ul",{},[76,82,87,92],{"type":51,"tag":77,"props":78,"children":79},"li",{},[80],{"type":57,"value":81},"Extraction completed but many pages failed",{"type":51,"tag":77,"props":83,"children":84},{},[85],{"type":57,"value":86},"Extraction completed but content quality is low",{"type":51,"tag":77,"props":88,"children":89},{},[90],{"type":57,"value":91},"Extraction hung or crashed mid-way",{"type":51,"tag":77,"props":93,"children":94},{},[95],{"type":57,"value":96},"The user reports missing content after import",{"type":51,"tag":66,"props":98,"children":100},{"id":99},"setup",[101],{"type":57,"value":102},"Setup",{"type":51,"tag":60,"props":104,"children":105},{},[106],{"type":57,"value":107},"Ask for or detect:",{"type":51,"tag":109,"props":110,"children":111},"table",{},[112,131],{"type":51,"tag":113,"props":114,"children":115},"thead",{},[116],{"type":51,"tag":117,"props":118,"children":119},"tr",{},[120,126],{"type":51,"tag":121,"props":122,"children":123},"th",{},[124],{"type":57,"value":125},"Parameter",{"type":51,"tag":121,"props":127,"children":128},{},[129],{"type":57,"value":130},"How to find it",{"type":51,"tag":132,"props":133,"children":134},"tbody",{},[135,172,191,209],{"type":51,"tag":117,"props":136,"children":137},{},[138,144],{"type":51,"tag":139,"props":140,"children":141},"td",{},[142],{"type":57,"value":143},"Output directory",{"type":51,"tag":139,"props":145,"children":146},{},[147,149,156,158,164,166],{"type":57,"value":148},"Call ",{"type":51,"tag":150,"props":151,"children":153},"code",{"className":152},[],[154],{"type":57,"value":155},"liberate_paths({ url })",{"type":57,"value":157}," to resolve ",{"type":51,"tag":150,"props":159,"children":161},{"className":160},[],[162],{"type":57,"value":163},"siteDir",{"type":57,"value":165},"; default base is ",{"type":51,"tag":150,"props":167,"children":169},{"className":168},[],[170],{"type":57,"value":171},"~\u002FStudio\u002F_liberations\u002F\u003Chost>",{"type":51,"tag":117,"props":173,"children":174},{},[175,180],{"type":51,"tag":139,"props":176,"children":177},{},[178],{"type":57,"value":179},"WXR file",{"type":51,"tag":139,"props":181,"children":182},{},[183,189],{"type":51,"tag":150,"props":184,"children":186},{"className":185},[],[187],{"type":57,"value":188},"output.wxr",{"type":57,"value":190}," in the output directory",{"type":51,"tag":117,"props":192,"children":193},{},[194,199],{"type":51,"tag":139,"props":195,"children":196},{},[197],{"type":57,"value":198},"Extraction log",{"type":51,"tag":139,"props":200,"children":201},{},[202,208],{"type":51,"tag":150,"props":203,"children":205},{"className":204},[],[206],{"type":57,"value":207},"extraction-log.jsonl",{"type":57,"value":190},{"type":51,"tag":117,"props":210,"children":211},{},[212,217],{"type":51,"tag":139,"props":213,"children":214},{},[215],{"type":57,"value":216},"Source URL",{"type":51,"tag":139,"props":218,"children":219},{},[220,222,228],{"type":57,"value":221},"From the WXR's ",{"type":51,"tag":150,"props":223,"children":225},{"className":224},[],[226],{"type":57,"value":227},"\u003Clink>",{"type":57,"value":229}," element or ask the user",{"type":51,"tag":66,"props":231,"children":233},{"id":232},"phase-1-triage-what-happened",[234],{"type":57,"value":235},"Phase 1: Triage — What Happened?",{"type":51,"tag":60,"props":237,"children":238},{},[239,251],{"type":51,"tag":240,"props":241,"children":242},"strong",{},[243,245],{"type":57,"value":244},"Start with ",{"type":51,"tag":150,"props":246,"children":248},{"className":247},[],[249],{"type":57,"value":250},"liberate_verify",{"type":57,"value":252}," — it gives you a structured overview in one call:",{"type":51,"tag":73,"props":254,"children":255},{},[256,261,266,271,276],{"type":51,"tag":77,"props":257,"children":258},{},[259],{"type":57,"value":260},"WXR item counts (pages, posts, media)",{"type":51,"tag":77,"props":262,"children":263},{},[264],{"type":57,"value":265},"Failed URLs and failed media downloads",{"type":51,"tag":77,"props":267,"children":268},{},[269],{"type":57,"value":270},"Stale CDN URLs still in content",{"type":51,"tag":77,"props":272,"children":273},{},[274],{"type":57,"value":275},"Quality score breakdown (high\u002Fmedium\u002Flow)",{"type":51,"tag":77,"props":277,"children":278},{},[279],{"type":57,"value":280},"A \"needs attention\" summary",{"type":51,"tag":60,"props":282,"children":283},{},[284],{"type":57,"value":285},"This replaces manual log grepping for the initial assessment. If you need more detail, then dig into the raw log:",{"type":51,"tag":287,"props":288,"children":293},"pre",{"className":289,"code":290,"language":291,"meta":292,"style":292},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Count successes vs failures\ngrep -c '\"type\":\"processed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\ngrep -c '\"type\":\"failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\ngrep -c '\"type\":\"media_failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\n","bash","",[294],{"type":51,"tag":150,"props":295,"children":296},{"__ignoreMap":292},[297,308,366,411],{"type":51,"tag":298,"props":299,"children":301},"span",{"class":300,"line":29},"line",[302],{"type":51,"tag":298,"props":303,"children":305},{"style":304},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[306],{"type":57,"value":307},"# Count successes vs failures\n",{"type":51,"tag":298,"props":309,"children":311},{"class":300,"line":310},2,[312,318,324,330,335,340,345,350,356,361],{"type":51,"tag":298,"props":313,"children":315},{"style":314},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[316],{"type":57,"value":317},"grep",{"type":51,"tag":298,"props":319,"children":321},{"style":320},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[322],{"type":57,"value":323}," -c",{"type":51,"tag":298,"props":325,"children":327},{"style":326},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[328],{"type":57,"value":329}," '",{"type":51,"tag":298,"props":331,"children":332},{"style":320},[333],{"type":57,"value":334},"\"type\":\"processed\"",{"type":51,"tag":298,"props":336,"children":337},{"style":326},[338],{"type":57,"value":339},"'",{"type":51,"tag":298,"props":341,"children":342},{"style":326},[343],{"type":57,"value":344}," \u003C",{"type":51,"tag":298,"props":346,"children":347},{"style":320},[348],{"type":57,"value":349},"outputDi",{"type":51,"tag":298,"props":351,"children":353},{"style":352},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[354],{"type":57,"value":355},"r",{"type":51,"tag":298,"props":357,"children":358},{"style":326},[359],{"type":57,"value":360},">",{"type":51,"tag":298,"props":362,"children":363},{"style":320},[364],{"type":57,"value":365},"\u002Fextraction-log.jsonl\n",{"type":51,"tag":298,"props":367,"children":369},{"class":300,"line":368},3,[370,374,378,382,387,391,395,399,403,407],{"type":51,"tag":298,"props":371,"children":372},{"style":314},[373],{"type":57,"value":317},{"type":51,"tag":298,"props":375,"children":376},{"style":320},[377],{"type":57,"value":323},{"type":51,"tag":298,"props":379,"children":380},{"style":326},[381],{"type":57,"value":329},{"type":51,"tag":298,"props":383,"children":384},{"style":320},[385],{"type":57,"value":386},"\"type\":\"failed\"",{"type":51,"tag":298,"props":388,"children":389},{"style":326},[390],{"type":57,"value":339},{"type":51,"tag":298,"props":392,"children":393},{"style":326},[394],{"type":57,"value":344},{"type":51,"tag":298,"props":396,"children":397},{"style":320},[398],{"type":57,"value":349},{"type":51,"tag":298,"props":400,"children":401},{"style":352},[402],{"type":57,"value":355},{"type":51,"tag":298,"props":404,"children":405},{"style":326},[406],{"type":57,"value":360},{"type":51,"tag":298,"props":408,"children":409},{"style":320},[410],{"type":57,"value":365},{"type":51,"tag":298,"props":412,"children":414},{"class":300,"line":413},4,[415,419,423,427,432,436,440,444,448,452],{"type":51,"tag":298,"props":416,"children":417},{"style":314},[418],{"type":57,"value":317},{"type":51,"tag":298,"props":420,"children":421},{"style":320},[422],{"type":57,"value":323},{"type":51,"tag":298,"props":424,"children":425},{"style":326},[426],{"type":57,"value":329},{"type":51,"tag":298,"props":428,"children":429},{"style":320},[430],{"type":57,"value":431},"\"type\":\"media_failed\"",{"type":51,"tag":298,"props":433,"children":434},{"style":326},[435],{"type":57,"value":339},{"type":51,"tag":298,"props":437,"children":438},{"style":326},[439],{"type":57,"value":344},{"type":51,"tag":298,"props":441,"children":442},{"style":320},[443],{"type":57,"value":349},{"type":51,"tag":298,"props":445,"children":446},{"style":352},[447],{"type":57,"value":355},{"type":51,"tag":298,"props":449,"children":450},{"style":326},[451],{"type":57,"value":360},{"type":51,"tag":298,"props":453,"children":454},{"style":320},[455],{"type":57,"value":365},{"type":51,"tag":457,"props":458,"children":460},"h3",{"id":459},"classify-the-problem",[461],{"type":57,"value":462},"Classify the problem:",{"type":51,"tag":60,"props":464,"children":465},{},[466,471],{"type":51,"tag":240,"props":467,"children":468},{},[469],{"type":57,"value":470},"A. High failure rate (>30% failed)",{"type":57,"value":472},"\nSomething systematic is wrong — the site is blocking requests, the adapter can't parse the platform, or there's an auth issue.",{"type":51,"tag":60,"props":474,"children":475},{},[476,481],{"type":51,"tag":240,"props":477,"children":478},{},[479],{"type":57,"value":480},"B. Low failure rate (\u003C30%) with specific pages failing",{"type":57,"value":482},"\nIndividual page issues — timeouts, unusual page structures, dynamic content.",{"type":51,"tag":60,"props":484,"children":485},{},[486,491],{"type":51,"tag":240,"props":487,"children":488},{},[489],{"type":57,"value":490},"C. No failures but low quality content",{"type":57,"value":492},"\nThe adapter extracted something but it's the wrong content — nav bars, footers, cookie banners instead of the actual page body.",{"type":51,"tag":60,"props":494,"children":495},{},[496,501],{"type":51,"tag":240,"props":497,"children":498},{},[499],{"type":57,"value":500},"D. Crash \u002F incomplete extraction",{"type":57,"value":502},"\nThe process died mid-way. Check for the lock file, partial WXR, and the last log entry.",{"type":51,"tag":60,"props":504,"children":505},{},[506,511,513,519],{"type":51,"tag":240,"props":507,"children":508},{},[509],{"type":57,"value":510},"E. Missing or incorrect products",{"type":57,"value":512},"\nProducts were expected but ",{"type":51,"tag":150,"props":514,"children":516},{"className":515},[],[517],{"type":57,"value":518},"products.csv",{"type":57,"value":520}," is missing, empty, or has wrong data.",{"type":51,"tag":66,"props":522,"children":524},{"id":523},"phase-2-investigate",[525],{"type":57,"value":526},"Phase 2: Investigate",{"type":51,"tag":457,"props":528,"children":530},{"id":529},"for-high-failure-rate-type-a",[531],{"type":57,"value":532},"For high failure rate (Type A):",{"type":51,"tag":534,"props":535,"children":536},"ol",{},[537,593,760,833,959],{"type":51,"tag":77,"props":538,"children":539},{},[540,545,547],{"type":51,"tag":240,"props":541,"children":542},{},[543],{"type":57,"value":544},"Read the error messages",{"type":57,"value":546}," from failed entries:",{"type":51,"tag":287,"props":548,"children":550},{"className":289,"code":549,"language":291,"meta":292,"style":292},"grep '\"type\":\"failed\"' extraction-log.jsonl | head -5\n",[551],{"type":51,"tag":150,"props":552,"children":553},{"__ignoreMap":292},[554],{"type":51,"tag":298,"props":555,"children":556},{"class":300,"line":29},[557,561,565,569,573,578,583,588],{"type":51,"tag":298,"props":558,"children":559},{"style":314},[560],{"type":57,"value":317},{"type":51,"tag":298,"props":562,"children":563},{"style":326},[564],{"type":57,"value":329},{"type":51,"tag":298,"props":566,"children":567},{"style":320},[568],{"type":57,"value":386},{"type":51,"tag":298,"props":570,"children":571},{"style":326},[572],{"type":57,"value":339},{"type":51,"tag":298,"props":574,"children":575},{"style":320},[576],{"type":57,"value":577}," extraction-log.jsonl",{"type":51,"tag":298,"props":579,"children":580},{"style":326},[581],{"type":57,"value":582}," |",{"type":51,"tag":298,"props":584,"children":585},{"style":314},[586],{"type":57,"value":587}," head",{"type":51,"tag":298,"props":589,"children":590},{"style":320},[591],{"type":57,"value":592}," -5\n",{"type":51,"tag":77,"props":594,"children":595},{},[596,601],{"type":51,"tag":240,"props":597,"children":598},{},[599],{"type":57,"value":600},"Common causes and fixes:",{"type":51,"tag":109,"props":602,"children":603},{},[604,625],{"type":51,"tag":113,"props":605,"children":606},{},[607],{"type":51,"tag":117,"props":608,"children":609},{},[610,615,620],{"type":51,"tag":121,"props":611,"children":612},{},[613],{"type":57,"value":614},"Error pattern",{"type":51,"tag":121,"props":616,"children":617},{},[618],{"type":57,"value":619},"Cause",{"type":51,"tag":121,"props":621,"children":622},{},[623],{"type":57,"value":624},"Fix",{"type":51,"tag":132,"props":626,"children":627},{},[628,672,694,716,738],{"type":51,"tag":117,"props":629,"children":630},{},[631,648,653],{"type":51,"tag":139,"props":632,"children":633},{},[634,640,642],{"type":51,"tag":150,"props":635,"children":637},{"className":636},[],[638],{"type":57,"value":639},"timeout",{"type":57,"value":641}," \u002F ",{"type":51,"tag":150,"props":643,"children":645},{"className":644},[],[646],{"type":57,"value":647},"AbortError",{"type":51,"tag":139,"props":649,"children":650},{},[651],{"type":57,"value":652},"Site is slow or blocking",{"type":51,"tag":139,"props":654,"children":655},{},[656,658,664,666],{"type":57,"value":657},"Increase ",{"type":51,"tag":150,"props":659,"children":661},{"className":660},[],[662],{"type":57,"value":663},"--delay",{"type":57,"value":665},", try with browser via ",{"type":51,"tag":150,"props":667,"children":669},{"className":668},[],[670],{"type":57,"value":671},"--cdp-port",{"type":51,"tag":117,"props":673,"children":674},{},[675,684,689],{"type":51,"tag":139,"props":676,"children":677},{},[678],{"type":51,"tag":150,"props":679,"children":681},{"className":680},[],[682],{"type":57,"value":683},"403 Forbidden",{"type":51,"tag":139,"props":685,"children":686},{},[687],{"type":57,"value":688},"Rate limiting or bot detection",{"type":51,"tag":139,"props":690,"children":691},{},[692],{"type":57,"value":693},"Increase delay, use CDP with a real browser session",{"type":51,"tag":117,"props":695,"children":696},{},[697,706,711],{"type":51,"tag":139,"props":698,"children":699},{},[700],{"type":51,"tag":150,"props":701,"children":703},{"className":702},[],[704],{"type":57,"value":705},"404 Not Found",{"type":51,"tag":139,"props":707,"children":708},{},[709],{"type":57,"value":710},"Stale sitemap, pages moved",{"type":51,"tag":139,"props":712,"children":713},{},[714],{"type":57,"value":715},"Re-run discovery, check if site restructured",{"type":51,"tag":117,"props":717,"children":718},{},[719,728,733],{"type":51,"tag":139,"props":720,"children":721},{},[722],{"type":51,"tag":150,"props":723,"children":725},{"className":724},[],[726],{"type":57,"value":727},"TypeError: fetch failed",{"type":51,"tag":139,"props":729,"children":730},{},[731],{"type":57,"value":732},"Network issue, wrong protocol",{"type":51,"tag":139,"props":734,"children":735},{},[736],{"type":57,"value":737},"Check if site uses http vs https, check DNS",{"type":51,"tag":117,"props":739,"children":740},{},[741,750,755],{"type":51,"tag":139,"props":742,"children":743},{},[744],{"type":51,"tag":150,"props":745,"children":747},{"className":746},[],[748],{"type":57,"value":749},"Navigation failed",{"type":51,"tag":139,"props":751,"children":752},{},[753],{"type":57,"value":754},"Playwright can't load the page",{"type":51,"tag":139,"props":756,"children":757},{},[758],{"type":57,"value":759},"Check if site requires JavaScript, cookies, or auth",{"type":51,"tag":77,"props":761,"children":762},{},[763,768,819,823,825,831],{"type":51,"tag":240,"props":764,"children":765},{},[766],{"type":57,"value":767},"Probe a failed URL manually:",{"type":51,"tag":287,"props":769,"children":771},{"className":289,"code":770,"language":291,"meta":292,"style":292},"curl -sI \u003Cfailed-url> | head -20\n",[772],{"type":51,"tag":150,"props":773,"children":774},{"__ignoreMap":292},[775],{"type":51,"tag":298,"props":776,"children":777},{"class":300,"line":29},[778,783,788,792,797,802,806,810,814],{"type":51,"tag":298,"props":779,"children":780},{"style":314},[781],{"type":57,"value":782},"curl",{"type":51,"tag":298,"props":784,"children":785},{"style":320},[786],{"type":57,"value":787}," -sI",{"type":51,"tag":298,"props":789,"children":790},{"style":326},[791],{"type":57,"value":344},{"type":51,"tag":298,"props":793,"children":794},{"style":320},[795],{"type":57,"value":796},"failed-ur",{"type":51,"tag":298,"props":798,"children":799},{"style":352},[800],{"type":57,"value":801},"l",{"type":51,"tag":298,"props":803,"children":804},{"style":326},[805],{"type":57,"value":360},{"type":51,"tag":298,"props":807,"children":808},{"style":326},[809],{"type":57,"value":582},{"type":51,"tag":298,"props":811,"children":812},{"style":314},[813],{"type":57,"value":587},{"type":51,"tag":298,"props":815,"children":816},{"style":320},[817],{"type":57,"value":818}," -20\n",{"type":51,"tag":820,"props":821,"children":822},"br",{},[],{"type":57,"value":824},"Check: status code, redirects, ",{"type":51,"tag":150,"props":826,"children":828},{"className":827},[],[829],{"type":57,"value":830},"Content-Type",{"type":57,"value":832},", security headers.",{"type":51,"tag":77,"props":834,"children":835},{},[836,841,843,849,851,936,939,941],{"type":51,"tag":240,"props":837,"children":838},{},[839],{"type":57,"value":840},"Deep browser probe (if the user has Chrome with CDP running):",{"type":57,"value":842},"\nCall ",{"type":51,"tag":150,"props":844,"children":846},{"className":845},[],[847],{"type":57,"value":848},"liberate_probe",{"type":57,"value":850}," with the CDP port and site URL. This connects to the browser and reports:",{"type":51,"tag":73,"props":852,"children":853},{},[854,896,906,916,926],{"type":51,"tag":77,"props":855,"children":856},{},[857,862,864,870,872,878,880,886,888,894],{"type":51,"tag":240,"props":858,"children":859},{},[860],{"type":57,"value":861},"Window globals",{"type":57,"value":863}," — platform-specific data objects (GoDaddy W+M: ",{"type":51,"tag":150,"props":865,"children":867},{"className":866},[],[868],{"type":57,"value":869},"_BLOG_DATA",{"type":57,"value":871},", Shopify: ",{"type":51,"tag":150,"props":873,"children":875},{"className":874},[],[876],{"type":57,"value":877},"Shopify.*",{"type":57,"value":879},", Squarespace: ",{"type":51,"tag":150,"props":881,"children":883},{"className":882},[],[884],{"type":57,"value":885},"__NEXT_DATA__",{"type":57,"value":887},", Wix: ",{"type":51,"tag":150,"props":889,"children":891},{"className":890},[],[892],{"type":57,"value":893},"__WIX_DATA__",{"type":57,"value":895},")",{"type":51,"tag":77,"props":897,"children":898},{},[899,904],{"type":51,"tag":240,"props":900,"children":901},{},[902],{"type":57,"value":903},"Cookies",{"type":57,"value":905}," — names, domains, flags (helps diagnose auth\u002Fsession issues)",{"type":51,"tag":77,"props":907,"children":908},{},[909,914],{"type":51,"tag":240,"props":910,"children":911},{},[912],{"type":57,"value":913},"localStorage",{"type":57,"value":915}," — cached config and state",{"type":51,"tag":77,"props":917,"children":918},{},[919,924],{"type":51,"tag":240,"props":920,"children":921},{},[922],{"type":57,"value":923},"Performance API network entries",{"type":57,"value":925}," — what API calls the page made (useful when extraction misses data)",{"type":51,"tag":77,"props":927,"children":928},{},[929,934],{"type":51,"tag":240,"props":930,"children":931},{},[932],{"type":57,"value":933},"Platform identity",{"type":57,"value":935}," — site IDs, visitor IDs, view mode (helps identify auth context)",{"type":51,"tag":820,"props":937,"children":938},{},[],{"type":57,"value":940},"This is especially useful for:",{"type":51,"tag":73,"props":942,"children":943},{},[944,949,954],{"type":51,"tag":77,"props":945,"children":946},{},[947],{"type":57,"value":948},"Verifying the user is actually logged in (check for session cookies)",{"type":51,"tag":77,"props":950,"children":951},{},[952],{"type":57,"value":953},"Finding alternate data sources when API interception fails",{"type":51,"tag":77,"props":955,"children":956},{},[957],{"type":57,"value":958},"Understanding why content is empty (check if globals are populated)",{"type":51,"tag":77,"props":960,"children":961},{},[962,967,1015,1018],{"type":51,"tag":240,"props":963,"children":964},{},[965],{"type":57,"value":966},"Check if the platform is detected correctly:",{"type":51,"tag":287,"props":968,"children":970},{"className":289,"code":969,"language":291,"meta":292,"style":292},"npx tsx src\u002Fcli.ts inspect \u003Csite-url>\n",[971],{"type":51,"tag":150,"props":972,"children":973},{"__ignoreMap":292},[974],{"type":51,"tag":298,"props":975,"children":976},{"class":300,"line":29},[977,982,987,992,997,1001,1006,1010],{"type":51,"tag":298,"props":978,"children":979},{"style":314},[980],{"type":57,"value":981},"npx",{"type":51,"tag":298,"props":983,"children":984},{"style":320},[985],{"type":57,"value":986}," tsx",{"type":51,"tag":298,"props":988,"children":989},{"style":320},[990],{"type":57,"value":991}," src\u002Fcli.ts",{"type":51,"tag":298,"props":993,"children":994},{"style":320},[995],{"type":57,"value":996}," inspect",{"type":51,"tag":298,"props":998,"children":999},{"style":326},[1000],{"type":57,"value":344},{"type":51,"tag":298,"props":1002,"children":1003},{"style":320},[1004],{"type":57,"value":1005},"site-ur",{"type":51,"tag":298,"props":1007,"children":1008},{"style":352},[1009],{"type":57,"value":801},{"type":51,"tag":298,"props":1011,"children":1012},{"style":326},[1013],{"type":57,"value":1014},">\n",{"type":51,"tag":820,"props":1016,"children":1017},{},[],{"type":57,"value":1019},"If detection is wrong, the wrong adapter is running.",{"type":51,"tag":457,"props":1021,"children":1023},{"id":1022},"for-individual-page-failures-type-b",[1024],{"type":57,"value":1025},"For individual page failures (Type B):",{"type":51,"tag":534,"props":1027,"children":1028},{},[1029,1121,1131],{"type":51,"tag":77,"props":1030,"children":1031},{},[1032,1037],{"type":51,"tag":240,"props":1033,"children":1034},{},[1035],{"type":57,"value":1036},"Group failures by error type:",{"type":51,"tag":287,"props":1038,"children":1040},{"className":289,"code":1039,"language":291,"meta":292,"style":292},"grep '\"type\":\"failed\"' extraction-log.jsonl | jq -r .error | sort | uniq -c | sort -rn\n",[1041],{"type":51,"tag":150,"props":1042,"children":1043},{"__ignoreMap":292},[1044],{"type":51,"tag":298,"props":1045,"children":1046},{"class":300,"line":29},[1047,1051,1055,1059,1063,1067,1071,1076,1081,1086,1090,1095,1099,1104,1108,1112,1116],{"type":51,"tag":298,"props":1048,"children":1049},{"style":314},[1050],{"type":57,"value":317},{"type":51,"tag":298,"props":1052,"children":1053},{"style":326},[1054],{"type":57,"value":329},{"type":51,"tag":298,"props":1056,"children":1057},{"style":320},[1058],{"type":57,"value":386},{"type":51,"tag":298,"props":1060,"children":1061},{"style":326},[1062],{"type":57,"value":339},{"type":51,"tag":298,"props":1064,"children":1065},{"style":320},[1066],{"type":57,"value":577},{"type":51,"tag":298,"props":1068,"children":1069},{"style":326},[1070],{"type":57,"value":582},{"type":51,"tag":298,"props":1072,"children":1073},{"style":314},[1074],{"type":57,"value":1075}," jq",{"type":51,"tag":298,"props":1077,"children":1078},{"style":320},[1079],{"type":57,"value":1080}," -r",{"type":51,"tag":298,"props":1082,"children":1083},{"style":320},[1084],{"type":57,"value":1085}," .error",{"type":51,"tag":298,"props":1087,"children":1088},{"style":326},[1089],{"type":57,"value":582},{"type":51,"tag":298,"props":1091,"children":1092},{"style":314},[1093],{"type":57,"value":1094}," sort",{"type":51,"tag":298,"props":1096,"children":1097},{"style":326},[1098],{"type":57,"value":582},{"type":51,"tag":298,"props":1100,"children":1101},{"style":314},[1102],{"type":57,"value":1103}," uniq",{"type":51,"tag":298,"props":1105,"children":1106},{"style":320},[1107],{"type":57,"value":323},{"type":51,"tag":298,"props":1109,"children":1110},{"style":326},[1111],{"type":57,"value":582},{"type":51,"tag":298,"props":1113,"children":1114},{"style":314},[1115],{"type":57,"value":1094},{"type":51,"tag":298,"props":1117,"children":1118},{"style":320},[1119],{"type":57,"value":1120}," -rn\n",{"type":51,"tag":77,"props":1122,"children":1123},{},[1124,1129],{"type":51,"tag":240,"props":1125,"children":1126},{},[1127],{"type":57,"value":1128},"Spot-check the worst offenders",{"type":57,"value":1130}," — fetch the URL manually and compare against what the adapter tried to do.",{"type":51,"tag":77,"props":1132,"children":1133},{},[1134,1139],{"type":51,"tag":240,"props":1135,"children":1136},{},[1137],{"type":57,"value":1138},"Check for pattern:",{"type":57,"value":1140}," Are all failures the same URL type (e.g. all blog posts fail but pages succeed)? This points to a type-specific extraction bug.",{"type":51,"tag":457,"props":1142,"children":1144},{"id":1143},"for-low-quality-content-type-c",[1145],{"type":57,"value":1146},"For low quality content (Type C):",{"type":51,"tag":534,"props":1148,"children":1149},{},[1150,1166,1194,1299],{"type":51,"tag":77,"props":1151,"children":1152},{},[1153,1164],{"type":51,"tag":240,"props":1154,"children":1155},{},[1156,1158],{"type":57,"value":1157},"Run ",{"type":51,"tag":150,"props":1159,"children":1161},{"className":1160},[],[1162],{"type":57,"value":1163},"\u002Fqa",{"type":57,"value":1165}," to compare WXR content against the origin site. This gives per-page quality grades.",{"type":51,"tag":77,"props":1167,"children":1168},{},[1169,1174,1176],{"type":51,"tag":240,"props":1170,"children":1171},{},[1172],{"type":57,"value":1173},"Read a few low-scoring pages",{"type":57,"value":1175}," from the WXR:",{"type":51,"tag":73,"props":1177,"children":1178},{},[1179,1184,1189],{"type":51,"tag":77,"props":1180,"children":1181},{},[1182],{"type":57,"value":1183},"Is the content just navigation\u002Ffooter\u002Fboilerplate?",{"type":51,"tag":77,"props":1185,"children":1186},{},[1187],{"type":57,"value":1188},"Is the main content area missing?",{"type":51,"tag":77,"props":1190,"children":1191},{},[1192],{"type":57,"value":1193},"Are images referenced but missing?",{"type":51,"tag":77,"props":1195,"children":1196},{},[1197,1202,1204,1294,1297],{"type":51,"tag":240,"props":1198,"children":1199},{},[1200],{"type":57,"value":1201},"Check the adapter's content selector.",{"type":57,"value":1203}," Each adapter targets specific HTML containers:",{"type":51,"tag":73,"props":1205,"children":1206},{},[1207,1212,1225,1238,1258],{"type":51,"tag":77,"props":1208,"children":1209},{},[1210],{"type":57,"value":1211},"Wix: extracts from DOM via Playwright",{"type":51,"tag":77,"props":1213,"children":1214},{},[1215,1217,1223],{"type":57,"value":1216},"Squarespace: ",{"type":51,"tag":150,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":57,"value":1222},"?format=json",{"type":57,"value":1224}," API or admin API via CDP",{"type":51,"tag":77,"props":1226,"children":1227},{},[1228,1230,1236],{"type":57,"value":1229},"Webflow: ",{"type":51,"tag":150,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":57,"value":1235},".w-richtext",{"type":57,"value":1237}," containers",{"type":51,"tag":77,"props":1239,"children":1240},{},[1241,1243,1249,1251,1257],{"type":57,"value":1242},"Shopify: ",{"type":51,"tag":150,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":57,"value":1248},"article",{"type":57,"value":1250}," or ",{"type":51,"tag":150,"props":1252,"children":1254},{"className":1253},[],[1255],{"type":57,"value":1256},".rte",{"type":57,"value":1237},{"type":51,"tag":77,"props":1259,"children":1260},{},[1261,1263,1269,1271,1277,1279,1285,1286,1292],{"type":57,"value":1262},"GoDaddy W+M: blog posts parse ",{"type":51,"tag":150,"props":1264,"children":1266},{"className":1265},[],[1267],{"type":57,"value":1268},"window._BLOG_DATA",{"type":57,"value":1270}," and convert Draft.js ",{"type":51,"tag":150,"props":1272,"children":1274},{"className":1273},[],[1275],{"type":57,"value":1276},"post.fullContent",{"type":57,"value":1278}," to HTML; pages strip ",{"type":51,"tag":150,"props":1280,"children":1282},{"className":1281},[],[1283],{"type":57,"value":1284},"HEADER_SECTION",{"type":57,"value":641},{"type":51,"tag":150,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":57,"value":1291},"FOOTER_*",{"type":57,"value":1293}," \u002F section-title \u002F hero-image widgets from the DOM",{"type":51,"tag":820,"props":1295,"children":1296},{},[],{"type":57,"value":1298},"If the site uses a non-standard template, the selector may miss the content.",{"type":51,"tag":77,"props":1300,"children":1301},{},[1302,1307],{"type":51,"tag":240,"props":1303,"children":1304},{},[1305],{"type":57,"value":1306},"Fetch the origin page and inspect its structure:",{"type":51,"tag":287,"props":1308,"children":1310},{"className":289,"code":1309,"language":291,"meta":292,"style":292},"curl -s \u003Cpage-url> | grep -o '\u003Cmain\\|\u003Carticle\\|class=\"content\\|class=\"post-body\\|class=\"entry-content' | head -10\n",[1311],{"type":51,"tag":150,"props":1312,"children":1313},{"__ignoreMap":292},[1314],{"type":51,"tag":298,"props":1315,"children":1316},{"class":300,"line":29},[1317,1321,1326,1330,1335,1339,1343,1347,1352,1357,1361,1366,1370,1374,1378],{"type":51,"tag":298,"props":1318,"children":1319},{"style":314},[1320],{"type":57,"value":782},{"type":51,"tag":298,"props":1322,"children":1323},{"style":320},[1324],{"type":57,"value":1325}," -s",{"type":51,"tag":298,"props":1327,"children":1328},{"style":326},[1329],{"type":57,"value":344},{"type":51,"tag":298,"props":1331,"children":1332},{"style":320},[1333],{"type":57,"value":1334},"page-ur",{"type":51,"tag":298,"props":1336,"children":1337},{"style":352},[1338],{"type":57,"value":801},{"type":51,"tag":298,"props":1340,"children":1341},{"style":326},[1342],{"type":57,"value":360},{"type":51,"tag":298,"props":1344,"children":1345},{"style":326},[1346],{"type":57,"value":582},{"type":51,"tag":298,"props":1348,"children":1349},{"style":314},[1350],{"type":57,"value":1351}," grep",{"type":51,"tag":298,"props":1353,"children":1354},{"style":320},[1355],{"type":57,"value":1356}," -o",{"type":51,"tag":298,"props":1358,"children":1359},{"style":326},[1360],{"type":57,"value":329},{"type":51,"tag":298,"props":1362,"children":1363},{"style":320},[1364],{"type":57,"value":1365},"\u003Cmain\\|\u003Carticle\\|class=\"content\\|class=\"post-body\\|class=\"entry-content",{"type":51,"tag":298,"props":1367,"children":1368},{"style":326},[1369],{"type":57,"value":339},{"type":51,"tag":298,"props":1371,"children":1372},{"style":326},[1373],{"type":57,"value":582},{"type":51,"tag":298,"props":1375,"children":1376},{"style":314},[1377],{"type":57,"value":587},{"type":51,"tag":298,"props":1379,"children":1380},{"style":320},[1381],{"type":57,"value":1382}," -10\n",{"type":51,"tag":457,"props":1384,"children":1386},{"id":1385},"for-crashes-type-d",[1387],{"type":57,"value":1388},"For crashes (Type D):",{"type":51,"tag":534,"props":1390,"children":1391},{},[1392,1410,1420,1438],{"type":51,"tag":77,"props":1393,"children":1394},{},[1395,1400,1402,1408],{"type":51,"tag":240,"props":1396,"children":1397},{},[1398],{"type":57,"value":1399},"Check for lock file:",{"type":57,"value":1401}," ",{"type":51,"tag":150,"props":1403,"children":1405},{"className":1404},[],[1406],{"type":57,"value":1407},".liberation-lock",{"type":57,"value":1409}," in the output directory means the process didn't clean up.",{"type":51,"tag":77,"props":1411,"children":1412},{},[1413,1418],{"type":51,"tag":240,"props":1414,"children":1415},{},[1416],{"type":57,"value":1417},"Check the last log entry",{"type":57,"value":1419}," — this is the page that was being processed when it crashed.",{"type":51,"tag":77,"props":1421,"children":1422},{},[1423,1428,1430,1436],{"type":51,"tag":240,"props":1424,"children":1425},{},[1426],{"type":57,"value":1427},"Check WXR integrity",{"type":57,"value":1429}," — if streaming was active, the WXR may be truncated (missing ",{"type":51,"tag":150,"props":1431,"children":1433},{"className":1432},[],[1434],{"type":57,"value":1435},"\u003C\u002Fchannel>\u003C\u002Frss>",{"type":57,"value":1437},").",{"type":51,"tag":77,"props":1439,"children":1440},{},[1441,1446,1448,1454],{"type":51,"tag":240,"props":1442,"children":1443},{},[1444],{"type":57,"value":1445},"Fix and resume:",{"type":57,"value":1447}," Delete the lock file, then re-run with ",{"type":51,"tag":150,"props":1449,"children":1451},{"className":1450},[],[1452],{"type":57,"value":1453},"--resume",{"type":57,"value":1455},".",{"type":51,"tag":457,"props":1457,"children":1459},{"id":1458},"for-product-issues-type-e",[1460],{"type":57,"value":1461},"For product issues (Type E):",{"type":51,"tag":534,"props":1463,"children":1464},{},[1465,1535,1734,1803,1900],{"type":51,"tag":77,"props":1466,"children":1467},{},[1468,1473],{"type":51,"tag":240,"props":1469,"children":1470},{},[1471],{"type":57,"value":1472},"Check if products.csv and products.jsonl exist:",{"type":51,"tag":287,"props":1474,"children":1476},{"className":289,"code":1475,"language":291,"meta":292,"style":292},"ls -la \u003CoutputDir>\u002Fproducts.csv \u003CoutputDir>\u002Fproducts.jsonl\n",[1477],{"type":51,"tag":150,"props":1478,"children":1479},{"__ignoreMap":292},[1480],{"type":51,"tag":298,"props":1481,"children":1482},{"class":300,"line":29},[1483,1488,1493,1497,1501,1505,1509,1514,1518,1522,1526,1530],{"type":51,"tag":298,"props":1484,"children":1485},{"style":314},[1486],{"type":57,"value":1487},"ls",{"type":51,"tag":298,"props":1489,"children":1490},{"style":320},[1491],{"type":57,"value":1492}," -la",{"type":51,"tag":298,"props":1494,"children":1495},{"style":326},[1496],{"type":57,"value":344},{"type":51,"tag":298,"props":1498,"children":1499},{"style":320},[1500],{"type":57,"value":349},{"type":51,"tag":298,"props":1502,"children":1503},{"style":352},[1504],{"type":57,"value":355},{"type":51,"tag":298,"props":1506,"children":1507},{"style":326},[1508],{"type":57,"value":360},{"type":51,"tag":298,"props":1510,"children":1511},{"style":320},[1512],{"type":57,"value":1513},"\u002Fproducts.csv",{"type":51,"tag":298,"props":1515,"children":1516},{"style":326},[1517],{"type":57,"value":344},{"type":51,"tag":298,"props":1519,"children":1520},{"style":320},[1521],{"type":57,"value":349},{"type":51,"tag":298,"props":1523,"children":1524},{"style":352},[1525],{"type":57,"value":355},{"type":51,"tag":298,"props":1527,"children":1528},{"style":326},[1529],{"type":57,"value":360},{"type":51,"tag":298,"props":1531,"children":1532},{"style":320},[1533],{"type":57,"value":1534},"\u002Fproducts.jsonl\n",{"type":51,"tag":77,"props":1536,"children":1537},{},[1538,1543,1545],{"type":51,"tag":240,"props":1539,"children":1540},{},[1541],{"type":57,"value":1542},"If both are missing",{"type":57,"value":1544}," — no products were detected during extraction. Investigate:",{"type":51,"tag":73,"props":1546,"children":1547},{},[1548,1553,1692,1705],{"type":51,"tag":77,"props":1549,"children":1550},{},[1551],{"type":57,"value":1552},"Were product pages in the sitemap? Check the extraction log for product URLs.",{"type":51,"tag":77,"props":1554,"children":1555},{},[1556,1558,1564,1566],{"type":57,"value":1557},"Does the site use JSON-LD ",{"type":51,"tag":150,"props":1559,"children":1561},{"className":1560},[],[1562],{"type":57,"value":1563},"@type: Product",{"type":57,"value":1565},"? Fetch a product page and check:\n",{"type":51,"tag":287,"props":1567,"children":1569},{"className":289,"code":1568,"language":291,"meta":292,"style":292},"curl -s \u003Cproduct-url> | grep -o 'application\u002Fld+json' | head -3\ncurl -s \u003Cproduct-url> | grep -o '\"@type\":\"Product\"'\n",[1570],{"type":51,"tag":150,"props":1571,"children":1572},{"__ignoreMap":292},[1573,1639],{"type":51,"tag":298,"props":1574,"children":1575},{"class":300,"line":29},[1576,1580,1584,1588,1593,1597,1601,1605,1609,1613,1617,1622,1626,1630,1634],{"type":51,"tag":298,"props":1577,"children":1578},{"style":314},[1579],{"type":57,"value":782},{"type":51,"tag":298,"props":1581,"children":1582},{"style":320},[1583],{"type":57,"value":1325},{"type":51,"tag":298,"props":1585,"children":1586},{"style":326},[1587],{"type":57,"value":344},{"type":51,"tag":298,"props":1589,"children":1590},{"style":320},[1591],{"type":57,"value":1592},"product-ur",{"type":51,"tag":298,"props":1594,"children":1595},{"style":352},[1596],{"type":57,"value":801},{"type":51,"tag":298,"props":1598,"children":1599},{"style":326},[1600],{"type":57,"value":360},{"type":51,"tag":298,"props":1602,"children":1603},{"style":326},[1604],{"type":57,"value":582},{"type":51,"tag":298,"props":1606,"children":1607},{"style":314},[1608],{"type":57,"value":1351},{"type":51,"tag":298,"props":1610,"children":1611},{"style":320},[1612],{"type":57,"value":1356},{"type":51,"tag":298,"props":1614,"children":1615},{"style":326},[1616],{"type":57,"value":329},{"type":51,"tag":298,"props":1618,"children":1619},{"style":320},[1620],{"type":57,"value":1621},"application\u002Fld+json",{"type":51,"tag":298,"props":1623,"children":1624},{"style":326},[1625],{"type":57,"value":339},{"type":51,"tag":298,"props":1627,"children":1628},{"style":326},[1629],{"type":57,"value":582},{"type":51,"tag":298,"props":1631,"children":1632},{"style":314},[1633],{"type":57,"value":587},{"type":51,"tag":298,"props":1635,"children":1636},{"style":320},[1637],{"type":57,"value":1638}," -3\n",{"type":51,"tag":298,"props":1640,"children":1641},{"class":300,"line":310},[1642,1646,1650,1654,1658,1662,1666,1670,1674,1678,1682,1687],{"type":51,"tag":298,"props":1643,"children":1644},{"style":314},[1645],{"type":57,"value":782},{"type":51,"tag":298,"props":1647,"children":1648},{"style":320},[1649],{"type":57,"value":1325},{"type":51,"tag":298,"props":1651,"children":1652},{"style":326},[1653],{"type":57,"value":344},{"type":51,"tag":298,"props":1655,"children":1656},{"style":320},[1657],{"type":57,"value":1592},{"type":51,"tag":298,"props":1659,"children":1660},{"style":352},[1661],{"type":57,"value":801},{"type":51,"tag":298,"props":1663,"children":1664},{"style":326},[1665],{"type":57,"value":360},{"type":51,"tag":298,"props":1667,"children":1668},{"style":326},[1669],{"type":57,"value":582},{"type":51,"tag":298,"props":1671,"children":1672},{"style":314},[1673],{"type":57,"value":1351},{"type":51,"tag":298,"props":1675,"children":1676},{"style":320},[1677],{"type":57,"value":1356},{"type":51,"tag":298,"props":1679,"children":1680},{"style":326},[1681],{"type":57,"value":329},{"type":51,"tag":298,"props":1683,"children":1684},{"style":320},[1685],{"type":57,"value":1686},"\"@type\":\"Product\"",{"type":51,"tag":298,"props":1688,"children":1689},{"style":326},[1690],{"type":57,"value":1691},"'\n",{"type":51,"tag":77,"props":1693,"children":1694},{},[1695,1697,1703],{"type":57,"value":1696},"If no JSON-LD, the platform may need a custom ",{"type":51,"tag":150,"props":1698,"children":1700},{"className":1699},[],[1701],{"type":57,"value":1702},"extractProduct",{"type":57,"value":1704}," function in its adapter.",{"type":51,"tag":77,"props":1706,"children":1707},{},[1708,1710,1716,1718,1724,1726,1732],{"type":57,"value":1709},"Were the URLs classified as ",{"type":51,"tag":150,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":57,"value":1715},"product",{"type":57,"value":1717}," type? Check ",{"type":51,"tag":150,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":57,"value":1723},"classifyUrl",{"type":57,"value":1725}," in ",{"type":51,"tag":150,"props":1727,"children":1729},{"className":1728},[],[1730],{"type":57,"value":1731},"src\u002Flib\u002Fextraction\u002Fsitemap.ts",{"type":57,"value":1733}," for the URL patterns it recognizes.",{"type":51,"tag":77,"props":1735,"children":1736},{},[1737,1742,1744,1798,1801],{"type":51,"tag":240,"props":1738,"children":1739},{},[1740],{"type":57,"value":1741},"If products.jsonl exists but products.csv is missing or empty",{"type":57,"value":1743}," — the JSONL→CSV conversion failed. Read products.jsonl to check data quality:",{"type":51,"tag":287,"props":1745,"children":1747},{"className":289,"code":1746,"language":291,"meta":292,"style":292},"head -3 \u003CoutputDir>\u002Fproducts.jsonl | jq .\n",[1748],{"type":51,"tag":150,"props":1749,"children":1750},{"__ignoreMap":292},[1751],{"type":51,"tag":298,"props":1752,"children":1753},{"class":300,"line":29},[1754,1759,1764,1768,1772,1776,1780,1785,1789,1793],{"type":51,"tag":298,"props":1755,"children":1756},{"style":314},[1757],{"type":57,"value":1758},"head",{"type":51,"tag":298,"props":1760,"children":1761},{"style":320},[1762],{"type":57,"value":1763}," -3",{"type":51,"tag":298,"props":1765,"children":1766},{"style":326},[1767],{"type":57,"value":344},{"type":51,"tag":298,"props":1769,"children":1770},{"style":320},[1771],{"type":57,"value":349},{"type":51,"tag":298,"props":1773,"children":1774},{"style":352},[1775],{"type":57,"value":355},{"type":51,"tag":298,"props":1777,"children":1778},{"style":326},[1779],{"type":57,"value":360},{"type":51,"tag":298,"props":1781,"children":1782},{"style":320},[1783],{"type":57,"value":1784},"\u002Fproducts.jsonl",{"type":51,"tag":298,"props":1786,"children":1787},{"style":326},[1788],{"type":57,"value":582},{"type":51,"tag":298,"props":1790,"children":1791},{"style":314},[1792],{"type":57,"value":1075},{"type":51,"tag":298,"props":1794,"children":1795},{"style":320},[1796],{"type":57,"value":1797}," .\n",{"type":51,"tag":820,"props":1799,"children":1800},{},[],{"type":57,"value":1802},"Check: do products have names? Prices? Are fields malformed?",{"type":51,"tag":77,"props":1804,"children":1805},{},[1806,1811],{"type":51,"tag":240,"props":1807,"children":1808},{},[1809],{"type":57,"value":1810},"If products.csv exists but data is wrong:",{"type":51,"tag":73,"props":1812,"children":1813},{},[1814,1832,1858,1875],{"type":51,"tag":77,"props":1815,"children":1816},{},[1817,1822,1824,1830],{"type":51,"tag":240,"props":1818,"children":1819},{},[1820],{"type":57,"value":1821},"Missing prices",{"type":57,"value":1823}," — the JSON-LD ",{"type":51,"tag":150,"props":1825,"children":1827},{"className":1826},[],[1828],{"type":57,"value":1829},"offers",{"type":57,"value":1831}," array may be structured differently than expected. Fetch a product page and inspect the JSON-LD.",{"type":51,"tag":77,"props":1833,"children":1834},{},[1835,1840,1842,1848,1850,1856],{"type":51,"tag":240,"props":1836,"children":1837},{},[1838],{"type":57,"value":1839},"Missing images",{"type":57,"value":1841}," — check if images are in ",{"type":51,"tag":150,"props":1843,"children":1845},{"className":1844},[],[1846],{"type":57,"value":1847},"ld.image",{"type":57,"value":1849}," as strings, objects with ",{"type":51,"tag":150,"props":1851,"children":1853},{"className":1852},[],[1854],{"type":57,"value":1855},".url",{"type":57,"value":1857},", or in a different field.",{"type":51,"tag":77,"props":1859,"children":1860},{},[1861,1866,1868,1874],{"type":51,"tag":240,"props":1862,"children":1863},{},[1864],{"type":57,"value":1865},"Missing variants",{"type":57,"value":1867}," — the generic JSON-LD extractor only produces simple products. Variants require platform-specific extraction (Shopify and Wix have this; other platforms may need it added via ",{"type":51,"tag":150,"props":1869,"children":1871},{"className":1870},[],[1872],{"type":57,"value":1873},"\u002Fadapt",{"type":57,"value":1437},{"type":51,"tag":77,"props":1876,"children":1877},{},[1878,1883,1885,1890,1892,1898],{"type":51,"tag":240,"props":1879,"children":1880},{},[1881],{"type":57,"value":1882},"Duplicate products",{"type":57,"value":1884}," — if both the adapter's custom extractor and the shared JSON-LD extractor fire for the same page, products may be doubled. Check if ",{"type":51,"tag":150,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":57,"value":1702},{"type":57,"value":1891}," is passed to ",{"type":51,"tag":150,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":57,"value":1897},"runExtractionLoop",{"type":57,"value":1899}," alongside the generic fallback.",{"type":51,"tag":77,"props":1901,"children":1902},{},[1903,1908],{"type":51,"tag":240,"props":1904,"children":1905},{},[1906],{"type":57,"value":1907},"Check product count vs expectations:",{"type":51,"tag":287,"props":1909,"children":1911},{"className":289,"code":1910,"language":291,"meta":292,"style":292},"wc -l \u003CoutputDir>\u002Fproducts.jsonl\ngrep -c '\"type\":\"product\"' \u003CoutputDir>\u002Fextraction-log.jsonl || echo \"no product type in log\"\n",[1912],{"type":51,"tag":150,"props":1913,"children":1914},{"__ignoreMap":292},[1915,1948],{"type":51,"tag":298,"props":1916,"children":1917},{"class":300,"line":29},[1918,1923,1928,1932,1936,1940,1944],{"type":51,"tag":298,"props":1919,"children":1920},{"style":314},[1921],{"type":57,"value":1922},"wc",{"type":51,"tag":298,"props":1924,"children":1925},{"style":320},[1926],{"type":57,"value":1927}," -l",{"type":51,"tag":298,"props":1929,"children":1930},{"style":326},[1931],{"type":57,"value":344},{"type":51,"tag":298,"props":1933,"children":1934},{"style":320},[1935],{"type":57,"value":349},{"type":51,"tag":298,"props":1937,"children":1938},{"style":352},[1939],{"type":57,"value":355},{"type":51,"tag":298,"props":1941,"children":1942},{"style":326},[1943],{"type":57,"value":360},{"type":51,"tag":298,"props":1945,"children":1946},{"style":320},[1947],{"type":57,"value":1534},{"type":51,"tag":298,"props":1949,"children":1950},{"class":300,"line":310},[1951,1955,1959,1963,1968,1972,1976,1980,1984,1988,1993,1998,2004,2009,2014],{"type":51,"tag":298,"props":1952,"children":1953},{"style":314},[1954],{"type":57,"value":317},{"type":51,"tag":298,"props":1956,"children":1957},{"style":320},[1958],{"type":57,"value":323},{"type":51,"tag":298,"props":1960,"children":1961},{"style":326},[1962],{"type":57,"value":329},{"type":51,"tag":298,"props":1964,"children":1965},{"style":320},[1966],{"type":57,"value":1967},"\"type\":\"product\"",{"type":51,"tag":298,"props":1969,"children":1970},{"style":326},[1971],{"type":57,"value":339},{"type":51,"tag":298,"props":1973,"children":1974},{"style":326},[1975],{"type":57,"value":344},{"type":51,"tag":298,"props":1977,"children":1978},{"style":320},[1979],{"type":57,"value":349},{"type":51,"tag":298,"props":1981,"children":1982},{"style":352},[1983],{"type":57,"value":355},{"type":51,"tag":298,"props":1985,"children":1986},{"style":326},[1987],{"type":57,"value":360},{"type":51,"tag":298,"props":1989,"children":1990},{"style":320},[1991],{"type":57,"value":1992},"\u002Fextraction-log.jsonl",{"type":51,"tag":298,"props":1994,"children":1995},{"style":326},[1996],{"type":57,"value":1997}," ||",{"type":51,"tag":298,"props":1999,"children":2001},{"style":2000},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[2002],{"type":57,"value":2003}," echo",{"type":51,"tag":298,"props":2005,"children":2006},{"style":326},[2007],{"type":57,"value":2008}," \"",{"type":51,"tag":298,"props":2010,"children":2011},{"style":320},[2012],{"type":57,"value":2013},"no product type in log",{"type":51,"tag":298,"props":2015,"children":2016},{"style":326},[2017],{"type":57,"value":2018},"\"\n",{"type":51,"tag":66,"props":2020,"children":2022},{"id":2021},"phase-3-fix",[2023],{"type":57,"value":2024},"Phase 3: Fix",{"type":51,"tag":60,"props":2026,"children":2027},{},[2028],{"type":57,"value":2029},"Based on the diagnosis:",{"type":51,"tag":457,"props":2031,"children":2033},{"id":2032},"adapter-level-fixes",[2034],{"type":57,"value":2035},"Adapter-level fixes",{"type":51,"tag":60,"props":2037,"children":2038},{},[2039],{"type":57,"value":2040},"If the content selector is wrong for this site's template:",{"type":51,"tag":534,"props":2042,"children":2043},{},[2044,2057,2062,2067],{"type":51,"tag":77,"props":2045,"children":2046},{},[2047,2049,2055],{"type":57,"value":2048},"Read the adapter's ",{"type":51,"tag":150,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":57,"value":2054},"extractPage",{"type":57,"value":2056}," function",{"type":51,"tag":77,"props":2058,"children":2059},{},[2060],{"type":57,"value":2061},"Identify the correct content container",{"type":51,"tag":77,"props":2063,"children":2064},{},[2065],{"type":57,"value":2066},"Add a fallback selector or adjust the existing one",{"type":51,"tag":77,"props":2068,"children":2069},{},[2070,2072],{"type":57,"value":2071},"Re-extract affected pages with ",{"type":51,"tag":150,"props":2073,"children":2075},{"className":2074},[],[2076],{"type":57,"value":1453},{"type":51,"tag":457,"props":2078,"children":2080},{"id":2079},"configuration-fixes",[2081],{"type":57,"value":2082},"Configuration fixes",{"type":51,"tag":60,"props":2084,"children":2085},{},[2086],{"type":57,"value":2087},"If the issue is rate limiting, timeouts, or auth:",{"type":51,"tag":534,"props":2089,"children":2090},{},[2091,2103,2115],{"type":51,"tag":77,"props":2092,"children":2093},{},[2094,2096,2101],{"type":57,"value":2095},"Suggest the right ",{"type":51,"tag":150,"props":2097,"children":2099},{"className":2098},[],[2100],{"type":57,"value":663},{"type":57,"value":2102}," value",{"type":51,"tag":77,"props":2104,"children":2105},{},[2106,2108,2113],{"type":57,"value":2107},"Suggest using ",{"type":51,"tag":150,"props":2109,"children":2111},{"className":2110},[],[2112],{"type":57,"value":671},{"type":57,"value":2114}," with an authenticated browser session",{"type":51,"tag":77,"props":2116,"children":2117},{},[2118,2120,2126],{"type":57,"value":2119},"Suggest providing a ",{"type":51,"tag":150,"props":2121,"children":2123},{"className":2122},[],[2124],{"type":57,"value":2125},"--token",{"type":57,"value":2127}," if the platform supports API keys",{"type":51,"tag":457,"props":2129,"children":2131},{"id":2130},"data-fixes",[2132],{"type":57,"value":2133},"Data fixes",{"type":51,"tag":60,"props":2135,"children":2136},{},[2137],{"type":57,"value":2138},"If the WXR has issues but re-extraction isn't needed:",{"type":51,"tag":534,"props":2140,"children":2141},{},[2142,2154],{"type":51,"tag":77,"props":2143,"children":2144},{},[2145,2147,2152],{"type":57,"value":2146},"Use ",{"type":51,"tag":150,"props":2148,"children":2150},{"className":2149},[],[2151],{"type":57,"value":1163},{"type":57,"value":2153}," to identify and patch specific content gaps",{"type":51,"tag":77,"props":2155,"children":2156},{},[2157],{"type":57,"value":2158},"Manually fix truncated WXR (add closing tags)",{"type":51,"tag":66,"props":2160,"children":2162},{"id":2161},"phase-4-verify",[2163],{"type":57,"value":2164},"Phase 4: Verify",{"type":51,"tag":60,"props":2166,"children":2167},{},[2168],{"type":57,"value":2169},"After applying fixes:",{"type":51,"tag":534,"props":2171,"children":2172},{},[2173,2190,2204],{"type":51,"tag":77,"props":2174,"children":2175},{},[2176,2181,2183,2188],{"type":51,"tag":240,"props":2177,"children":2178},{},[2179],{"type":57,"value":2180},"Re-extract",{"type":57,"value":2182}," with ",{"type":51,"tag":150,"props":2184,"children":2186},{"className":2185},[],[2187],{"type":57,"value":1453},{"type":57,"value":2189}," (only re-processes failed URLs)",{"type":51,"tag":77,"props":2191,"children":2192},{},[2193,2202],{"type":51,"tag":240,"props":2194,"children":2195},{},[2196,2197],{"type":57,"value":1157},{"type":51,"tag":150,"props":2198,"children":2200},{"className":2199},[],[2201],{"type":57,"value":1163},{"type":57,"value":2203}," to check content quality",{"type":51,"tag":77,"props":2205,"children":2206},{},[2207,2212],{"type":51,"tag":240,"props":2208,"children":2209},{},[2210],{"type":57,"value":2211},"Compare failure counts",{"type":57,"value":2213}," before and after",{"type":51,"tag":66,"props":2215,"children":2217},{"id":2216},"phase-5-document",[2218],{"type":57,"value":2219},"Phase 5: Document",{"type":51,"tag":60,"props":2221,"children":2222},{},[2223],{"type":57,"value":2224},"If you discovered a platform-specific issue or workaround:",{"type":51,"tag":534,"props":2226,"children":2227},{},[2228,2241],{"type":51,"tag":77,"props":2229,"children":2230},{},[2231,2233,2239],{"type":57,"value":2232},"Add a ",{"type":51,"tag":150,"props":2234,"children":2236},{"className":2235},[],[2237],{"type":57,"value":2238},"DISCOVERIES.md",{"type":57,"value":2240}," entry",{"type":51,"tag":77,"props":2242,"children":2243},{},[2244],{"type":57,"value":2245},"If the fix is adapter code, commit it with a descriptive message",{"type":51,"tag":66,"props":2247,"children":2249},{"id":2248},"common-diagnostic-commands",[2250],{"type":57,"value":2251},"Common Diagnostic Commands",{"type":51,"tag":287,"props":2253,"children":2255},{"className":289,"code":2254,"language":291,"meta":292,"style":292},"# Overview of extraction results\nwc -l \u003CoutputDir>\u002Fextraction-log.jsonl\ngrep -c '\"processed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\ngrep -c '\"failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\n\n# Most common errors\ngrep '\"failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl | grep -o '\"error\":\"[^\"]*\"' | sort | uniq -c | sort -rn\n\n# Slowest pages\ngrep '\"processed\"' \u003CoutputDir>\u002Fextraction-log.jsonl | grep -o '\"durationMs\":[0-9]*' | sort -t: -k2 -rn | head -10\n\n# Check WXR size and item count\nwc -c \u003CoutputDir>\u002Foutput.wxr\ngrep -c '\u003Citem>' \u003CoutputDir>\u002Foutput.wxr\n\n# Check media downloads\nls \u003CoutputDir>\u002Fmedia\u002F | wc -l\ngrep -c '\"media_failed\"' \u003CoutputDir>\u002Fextraction-log.jsonl\n\n# Check if extraction is complete\ntest -f \u003CoutputDir>\u002F.discovery-complete && echo \"Complete\" || echo \"Incomplete\"\n\n# Product diagnostics\nwc -l \u003CoutputDir>\u002Fproducts.jsonl 2>\u002Fdev\u002Fnull || echo \"No products.jsonl\"\nwc -l \u003CoutputDir>\u002Fproducts.csv 2>\u002Fdev\u002Fnull || echo \"No products.csv\"\nhead -3 \u003CoutputDir>\u002Fproducts.jsonl 2>\u002Fdev\u002Fnull | python3 -m json.tool 2>\u002Fdev\u002Fnull || true\n",[2256],{"type":51,"tag":150,"props":2257,"children":2258},{"__ignoreMap":292},[2259,2267,2298,2342,2386,2396,2405,2502,2510,2519,2619,2627,2636,2669,2714,2722,2731,2774,2819,2827,2836,2915,2923,2932,2995,3056],{"type":51,"tag":298,"props":2260,"children":2261},{"class":300,"line":29},[2262],{"type":51,"tag":298,"props":2263,"children":2264},{"style":304},[2265],{"type":57,"value":2266},"# Overview of extraction results\n",{"type":51,"tag":298,"props":2268,"children":2269},{"class":300,"line":310},[2270,2274,2278,2282,2286,2290,2294],{"type":51,"tag":298,"props":2271,"children":2272},{"style":314},[2273],{"type":57,"value":1922},{"type":51,"tag":298,"props":2275,"children":2276},{"style":320},[2277],{"type":57,"value":1927},{"type":51,"tag":298,"props":2279,"children":2280},{"style":326},[2281],{"type":57,"value":344},{"type":51,"tag":298,"props":2283,"children":2284},{"style":320},[2285],{"type":57,"value":349},{"type":51,"tag":298,"props":2287,"children":2288},{"style":352},[2289],{"type":57,"value":355},{"type":51,"tag":298,"props":2291,"children":2292},{"style":326},[2293],{"type":57,"value":360},{"type":51,"tag":298,"props":2295,"children":2296},{"style":320},[2297],{"type":57,"value":365},{"type":51,"tag":298,"props":2299,"children":2300},{"class":300,"line":368},[2301,2305,2309,2313,2318,2322,2326,2330,2334,2338],{"type":51,"tag":298,"props":2302,"children":2303},{"style":314},[2304],{"type":57,"value":317},{"type":51,"tag":298,"props":2306,"children":2307},{"style":320},[2308],{"type":57,"value":323},{"type":51,"tag":298,"props":2310,"children":2311},{"style":326},[2312],{"type":57,"value":329},{"type":51,"tag":298,"props":2314,"children":2315},{"style":320},[2316],{"type":57,"value":2317},"\"processed\"",{"type":51,"tag":298,"props":2319,"children":2320},{"style":326},[2321],{"type":57,"value":339},{"type":51,"tag":298,"props":2323,"children":2324},{"style":326},[2325],{"type":57,"value":344},{"type":51,"tag":298,"props":2327,"children":2328},{"style":320},[2329],{"type":57,"value":349},{"type":51,"tag":298,"props":2331,"children":2332},{"style":352},[2333],{"type":57,"value":355},{"type":51,"tag":298,"props":2335,"children":2336},{"style":326},[2337],{"type":57,"value":360},{"type":51,"tag":298,"props":2339,"children":2340},{"style":320},[2341],{"type":57,"value":365},{"type":51,"tag":298,"props":2343,"children":2344},{"class":300,"line":413},[2345,2349,2353,2357,2362,2366,2370,2374,2378,2382],{"type":51,"tag":298,"props":2346,"children":2347},{"style":314},[2348],{"type":57,"value":317},{"type":51,"tag":298,"props":2350,"children":2351},{"style":320},[2352],{"type":57,"value":323},{"type":51,"tag":298,"props":2354,"children":2355},{"style":326},[2356],{"type":57,"value":329},{"type":51,"tag":298,"props":2358,"children":2359},{"style":320},[2360],{"type":57,"value":2361},"\"failed\"",{"type":51,"tag":298,"props":2363,"children":2364},{"style":326},[2365],{"type":57,"value":339},{"type":51,"tag":298,"props":2367,"children":2368},{"style":326},[2369],{"type":57,"value":344},{"type":51,"tag":298,"props":2371,"children":2372},{"style":320},[2373],{"type":57,"value":349},{"type":51,"tag":298,"props":2375,"children":2376},{"style":352},[2377],{"type":57,"value":355},{"type":51,"tag":298,"props":2379,"children":2380},{"style":326},[2381],{"type":57,"value":360},{"type":51,"tag":298,"props":2383,"children":2384},{"style":320},[2385],{"type":57,"value":365},{"type":51,"tag":298,"props":2387,"children":2389},{"class":300,"line":2388},5,[2390],{"type":51,"tag":298,"props":2391,"children":2393},{"emptyLinePlaceholder":2392},true,[2394],{"type":57,"value":2395},"\n",{"type":51,"tag":298,"props":2397,"children":2399},{"class":300,"line":2398},6,[2400],{"type":51,"tag":298,"props":2401,"children":2402},{"style":304},[2403],{"type":57,"value":2404},"# Most common errors\n",{"type":51,"tag":298,"props":2406,"children":2408},{"class":300,"line":2407},7,[2409,2413,2417,2421,2425,2429,2433,2437,2441,2445,2449,2453,2457,2461,2466,2470,2474,2478,2482,2486,2490,2494,2498],{"type":51,"tag":298,"props":2410,"children":2411},{"style":314},[2412],{"type":57,"value":317},{"type":51,"tag":298,"props":2414,"children":2415},{"style":326},[2416],{"type":57,"value":329},{"type":51,"tag":298,"props":2418,"children":2419},{"style":320},[2420],{"type":57,"value":2361},{"type":51,"tag":298,"props":2422,"children":2423},{"style":326},[2424],{"type":57,"value":339},{"type":51,"tag":298,"props":2426,"children":2427},{"style":326},[2428],{"type":57,"value":344},{"type":51,"tag":298,"props":2430,"children":2431},{"style":320},[2432],{"type":57,"value":349},{"type":51,"tag":298,"props":2434,"children":2435},{"style":352},[2436],{"type":57,"value":355},{"type":51,"tag":298,"props":2438,"children":2439},{"style":326},[2440],{"type":57,"value":360},{"type":51,"tag":298,"props":2442,"children":2443},{"style":320},[2444],{"type":57,"value":1992},{"type":51,"tag":298,"props":2446,"children":2447},{"style":326},[2448],{"type":57,"value":582},{"type":51,"tag":298,"props":2450,"children":2451},{"style":314},[2452],{"type":57,"value":1351},{"type":51,"tag":298,"props":2454,"children":2455},{"style":320},[2456],{"type":57,"value":1356},{"type":51,"tag":298,"props":2458,"children":2459},{"style":326},[2460],{"type":57,"value":329},{"type":51,"tag":298,"props":2462,"children":2463},{"style":320},[2464],{"type":57,"value":2465},"\"error\":\"[^\"]*\"",{"type":51,"tag":298,"props":2467,"children":2468},{"style":326},[2469],{"type":57,"value":339},{"type":51,"tag":298,"props":2471,"children":2472},{"style":326},[2473],{"type":57,"value":582},{"type":51,"tag":298,"props":2475,"children":2476},{"style":314},[2477],{"type":57,"value":1094},{"type":51,"tag":298,"props":2479,"children":2480},{"style":326},[2481],{"type":57,"value":582},{"type":51,"tag":298,"props":2483,"children":2484},{"style":314},[2485],{"type":57,"value":1103},{"type":51,"tag":298,"props":2487,"children":2488},{"style":320},[2489],{"type":57,"value":323},{"type":51,"tag":298,"props":2491,"children":2492},{"style":326},[2493],{"type":57,"value":582},{"type":51,"tag":298,"props":2495,"children":2496},{"style":314},[2497],{"type":57,"value":1094},{"type":51,"tag":298,"props":2499,"children":2500},{"style":320},[2501],{"type":57,"value":1120},{"type":51,"tag":298,"props":2503,"children":2505},{"class":300,"line":2504},8,[2506],{"type":51,"tag":298,"props":2507,"children":2508},{"emptyLinePlaceholder":2392},[2509],{"type":57,"value":2395},{"type":51,"tag":298,"props":2511,"children":2513},{"class":300,"line":2512},9,[2514],{"type":51,"tag":298,"props":2515,"children":2516},{"style":304},[2517],{"type":57,"value":2518},"# Slowest pages\n",{"type":51,"tag":298,"props":2520,"children":2522},{"class":300,"line":2521},10,[2523,2527,2531,2535,2539,2543,2547,2551,2555,2559,2563,2567,2571,2575,2580,2584,2588,2592,2597,2602,2607,2611,2615],{"type":51,"tag":298,"props":2524,"children":2525},{"style":314},[2526],{"type":57,"value":317},{"type":51,"tag":298,"props":2528,"children":2529},{"style":326},[2530],{"type":57,"value":329},{"type":51,"tag":298,"props":2532,"children":2533},{"style":320},[2534],{"type":57,"value":2317},{"type":51,"tag":298,"props":2536,"children":2537},{"style":326},[2538],{"type":57,"value":339},{"type":51,"tag":298,"props":2540,"children":2541},{"style":326},[2542],{"type":57,"value":344},{"type":51,"tag":298,"props":2544,"children":2545},{"style":320},[2546],{"type":57,"value":349},{"type":51,"tag":298,"props":2548,"children":2549},{"style":352},[2550],{"type":57,"value":355},{"type":51,"tag":298,"props":2552,"children":2553},{"style":326},[2554],{"type":57,"value":360},{"type":51,"tag":298,"props":2556,"children":2557},{"style":320},[2558],{"type":57,"value":1992},{"type":51,"tag":298,"props":2560,"children":2561},{"style":326},[2562],{"type":57,"value":582},{"type":51,"tag":298,"props":2564,"children":2565},{"style":314},[2566],{"type":57,"value":1351},{"type":51,"tag":298,"props":2568,"children":2569},{"style":320},[2570],{"type":57,"value":1356},{"type":51,"tag":298,"props":2572,"children":2573},{"style":326},[2574],{"type":57,"value":329},{"type":51,"tag":298,"props":2576,"children":2577},{"style":320},[2578],{"type":57,"value":2579},"\"durationMs\":[0-9]*",{"type":51,"tag":298,"props":2581,"children":2582},{"style":326},[2583],{"type":57,"value":339},{"type":51,"tag":298,"props":2585,"children":2586},{"style":326},[2587],{"type":57,"value":582},{"type":51,"tag":298,"props":2589,"children":2590},{"style":314},[2591],{"type":57,"value":1094},{"type":51,"tag":298,"props":2593,"children":2594},{"style":320},[2595],{"type":57,"value":2596}," -t:",{"type":51,"tag":298,"props":2598,"children":2599},{"style":320},[2600],{"type":57,"value":2601}," -k2",{"type":51,"tag":298,"props":2603,"children":2604},{"style":320},[2605],{"type":57,"value":2606}," -rn",{"type":51,"tag":298,"props":2608,"children":2609},{"style":326},[2610],{"type":57,"value":582},{"type":51,"tag":298,"props":2612,"children":2613},{"style":314},[2614],{"type":57,"value":587},{"type":51,"tag":298,"props":2616,"children":2617},{"style":320},[2618],{"type":57,"value":1382},{"type":51,"tag":298,"props":2620,"children":2622},{"class":300,"line":2621},11,[2623],{"type":51,"tag":298,"props":2624,"children":2625},{"emptyLinePlaceholder":2392},[2626],{"type":57,"value":2395},{"type":51,"tag":298,"props":2628,"children":2630},{"class":300,"line":2629},12,[2631],{"type":51,"tag":298,"props":2632,"children":2633},{"style":304},[2634],{"type":57,"value":2635},"# Check WXR size and item count\n",{"type":51,"tag":298,"props":2637,"children":2639},{"class":300,"line":2638},13,[2640,2644,2648,2652,2656,2660,2664],{"type":51,"tag":298,"props":2641,"children":2642},{"style":314},[2643],{"type":57,"value":1922},{"type":51,"tag":298,"props":2645,"children":2646},{"style":320},[2647],{"type":57,"value":323},{"type":51,"tag":298,"props":2649,"children":2650},{"style":326},[2651],{"type":57,"value":344},{"type":51,"tag":298,"props":2653,"children":2654},{"style":320},[2655],{"type":57,"value":349},{"type":51,"tag":298,"props":2657,"children":2658},{"style":352},[2659],{"type":57,"value":355},{"type":51,"tag":298,"props":2661,"children":2662},{"style":326},[2663],{"type":57,"value":360},{"type":51,"tag":298,"props":2665,"children":2666},{"style":320},[2667],{"type":57,"value":2668},"\u002Foutput.wxr\n",{"type":51,"tag":298,"props":2670,"children":2672},{"class":300,"line":2671},14,[2673,2677,2681,2685,2690,2694,2698,2702,2706,2710],{"type":51,"tag":298,"props":2674,"children":2675},{"style":314},[2676],{"type":57,"value":317},{"type":51,"tag":298,"props":2678,"children":2679},{"style":320},[2680],{"type":57,"value":323},{"type":51,"tag":298,"props":2682,"children":2683},{"style":326},[2684],{"type":57,"value":329},{"type":51,"tag":298,"props":2686,"children":2687},{"style":320},[2688],{"type":57,"value":2689},"\u003Citem>",{"type":51,"tag":298,"props":2691,"children":2692},{"style":326},[2693],{"type":57,"value":339},{"type":51,"tag":298,"props":2695,"children":2696},{"style":326},[2697],{"type":57,"value":344},{"type":51,"tag":298,"props":2699,"children":2700},{"style":320},[2701],{"type":57,"value":349},{"type":51,"tag":298,"props":2703,"children":2704},{"style":352},[2705],{"type":57,"value":355},{"type":51,"tag":298,"props":2707,"children":2708},{"style":326},[2709],{"type":57,"value":360},{"type":51,"tag":298,"props":2711,"children":2712},{"style":320},[2713],{"type":57,"value":2668},{"type":51,"tag":298,"props":2715,"children":2717},{"class":300,"line":2716},15,[2718],{"type":51,"tag":298,"props":2719,"children":2720},{"emptyLinePlaceholder":2392},[2721],{"type":57,"value":2395},{"type":51,"tag":298,"props":2723,"children":2725},{"class":300,"line":2724},16,[2726],{"type":51,"tag":298,"props":2727,"children":2728},{"style":304},[2729],{"type":57,"value":2730},"# Check media downloads\n",{"type":51,"tag":298,"props":2732,"children":2734},{"class":300,"line":2733},17,[2735,2739,2743,2747,2751,2755,2760,2764,2769],{"type":51,"tag":298,"props":2736,"children":2737},{"style":314},[2738],{"type":57,"value":1487},{"type":51,"tag":298,"props":2740,"children":2741},{"style":326},[2742],{"type":57,"value":344},{"type":51,"tag":298,"props":2744,"children":2745},{"style":320},[2746],{"type":57,"value":349},{"type":51,"tag":298,"props":2748,"children":2749},{"style":352},[2750],{"type":57,"value":355},{"type":51,"tag":298,"props":2752,"children":2753},{"style":326},[2754],{"type":57,"value":360},{"type":51,"tag":298,"props":2756,"children":2757},{"style":320},[2758],{"type":57,"value":2759},"\u002Fmedia\u002F",{"type":51,"tag":298,"props":2761,"children":2762},{"style":326},[2763],{"type":57,"value":582},{"type":51,"tag":298,"props":2765,"children":2766},{"style":314},[2767],{"type":57,"value":2768}," wc",{"type":51,"tag":298,"props":2770,"children":2771},{"style":320},[2772],{"type":57,"value":2773}," -l\n",{"type":51,"tag":298,"props":2775,"children":2777},{"class":300,"line":2776},18,[2778,2782,2786,2790,2795,2799,2803,2807,2811,2815],{"type":51,"tag":298,"props":2779,"children":2780},{"style":314},[2781],{"type":57,"value":317},{"type":51,"tag":298,"props":2783,"children":2784},{"style":320},[2785],{"type":57,"value":323},{"type":51,"tag":298,"props":2787,"children":2788},{"style":326},[2789],{"type":57,"value":329},{"type":51,"tag":298,"props":2791,"children":2792},{"style":320},[2793],{"type":57,"value":2794},"\"media_failed\"",{"type":51,"tag":298,"props":2796,"children":2797},{"style":326},[2798],{"type":57,"value":339},{"type":51,"tag":298,"props":2800,"children":2801},{"style":326},[2802],{"type":57,"value":344},{"type":51,"tag":298,"props":2804,"children":2805},{"style":320},[2806],{"type":57,"value":349},{"type":51,"tag":298,"props":2808,"children":2809},{"style":352},[2810],{"type":57,"value":355},{"type":51,"tag":298,"props":2812,"children":2813},{"style":326},[2814],{"type":57,"value":360},{"type":51,"tag":298,"props":2816,"children":2817},{"style":320},[2818],{"type":57,"value":365},{"type":51,"tag":298,"props":2820,"children":2822},{"class":300,"line":2821},19,[2823],{"type":51,"tag":298,"props":2824,"children":2825},{"emptyLinePlaceholder":2392},[2826],{"type":57,"value":2395},{"type":51,"tag":298,"props":2828,"children":2830},{"class":300,"line":2829},20,[2831],{"type":51,"tag":298,"props":2832,"children":2833},{"style":304},[2834],{"type":57,"value":2835},"# Check if extraction is complete\n",{"type":51,"tag":298,"props":2837,"children":2839},{"class":300,"line":2838},21,[2840,2845,2850,2854,2858,2862,2866,2871,2876,2880,2884,2889,2894,2898,2902,2906,2911],{"type":51,"tag":298,"props":2841,"children":2842},{"style":2000},[2843],{"type":57,"value":2844},"test",{"type":51,"tag":298,"props":2846,"children":2847},{"style":320},[2848],{"type":57,"value":2849}," -f",{"type":51,"tag":298,"props":2851,"children":2852},{"style":326},[2853],{"type":57,"value":344},{"type":51,"tag":298,"props":2855,"children":2856},{"style":320},[2857],{"type":57,"value":349},{"type":51,"tag":298,"props":2859,"children":2860},{"style":352},[2861],{"type":57,"value":355},{"type":51,"tag":298,"props":2863,"children":2864},{"style":326},[2865],{"type":57,"value":360},{"type":51,"tag":298,"props":2867,"children":2868},{"style":320},[2869],{"type":57,"value":2870},"\u002F.discovery-complete",{"type":51,"tag":298,"props":2872,"children":2873},{"style":326},[2874],{"type":57,"value":2875}," &&",{"type":51,"tag":298,"props":2877,"children":2878},{"style":2000},[2879],{"type":57,"value":2003},{"type":51,"tag":298,"props":2881,"children":2882},{"style":326},[2883],{"type":57,"value":2008},{"type":51,"tag":298,"props":2885,"children":2886},{"style":320},[2887],{"type":57,"value":2888},"Complete",{"type":51,"tag":298,"props":2890,"children":2891},{"style":326},[2892],{"type":57,"value":2893},"\"",{"type":51,"tag":298,"props":2895,"children":2896},{"style":326},[2897],{"type":57,"value":1997},{"type":51,"tag":298,"props":2899,"children":2900},{"style":2000},[2901],{"type":57,"value":2003},{"type":51,"tag":298,"props":2903,"children":2904},{"style":326},[2905],{"type":57,"value":2008},{"type":51,"tag":298,"props":2907,"children":2908},{"style":320},[2909],{"type":57,"value":2910},"Incomplete",{"type":51,"tag":298,"props":2912,"children":2913},{"style":326},[2914],{"type":57,"value":2018},{"type":51,"tag":298,"props":2916,"children":2918},{"class":300,"line":2917},22,[2919],{"type":51,"tag":298,"props":2920,"children":2921},{"emptyLinePlaceholder":2392},[2922],{"type":57,"value":2395},{"type":51,"tag":298,"props":2924,"children":2926},{"class":300,"line":2925},23,[2927],{"type":51,"tag":298,"props":2928,"children":2929},{"style":304},[2930],{"type":57,"value":2931},"# Product diagnostics\n",{"type":51,"tag":298,"props":2933,"children":2935},{"class":300,"line":2934},24,[2936,2940,2944,2948,2952,2956,2960,2964,2969,2974,2978,2982,2986,2991],{"type":51,"tag":298,"props":2937,"children":2938},{"style":314},[2939],{"type":57,"value":1922},{"type":51,"tag":298,"props":2941,"children":2942},{"style":320},[2943],{"type":57,"value":1927},{"type":51,"tag":298,"props":2945,"children":2946},{"style":326},[2947],{"type":57,"value":344},{"type":51,"tag":298,"props":2949,"children":2950},{"style":320},[2951],{"type":57,"value":349},{"type":51,"tag":298,"props":2953,"children":2954},{"style":352},[2955],{"type":57,"value":355},{"type":51,"tag":298,"props":2957,"children":2958},{"style":326},[2959],{"type":57,"value":360},{"type":51,"tag":298,"props":2961,"children":2962},{"style":320},[2963],{"type":57,"value":1784},{"type":51,"tag":298,"props":2965,"children":2966},{"style":326},[2967],{"type":57,"value":2968}," 2>",{"type":51,"tag":298,"props":2970,"children":2971},{"style":320},[2972],{"type":57,"value":2973},"\u002Fdev\u002Fnull",{"type":51,"tag":298,"props":2975,"children":2976},{"style":326},[2977],{"type":57,"value":1997},{"type":51,"tag":298,"props":2979,"children":2980},{"style":2000},[2981],{"type":57,"value":2003},{"type":51,"tag":298,"props":2983,"children":2984},{"style":326},[2985],{"type":57,"value":2008},{"type":51,"tag":298,"props":2987,"children":2988},{"style":320},[2989],{"type":57,"value":2990},"No products.jsonl",{"type":51,"tag":298,"props":2992,"children":2993},{"style":326},[2994],{"type":57,"value":2018},{"type":51,"tag":298,"props":2996,"children":2998},{"class":300,"line":2997},25,[2999,3003,3007,3011,3015,3019,3023,3027,3031,3035,3039,3043,3047,3052],{"type":51,"tag":298,"props":3000,"children":3001},{"style":314},[3002],{"type":57,"value":1922},{"type":51,"tag":298,"props":3004,"children":3005},{"style":320},[3006],{"type":57,"value":1927},{"type":51,"tag":298,"props":3008,"children":3009},{"style":326},[3010],{"type":57,"value":344},{"type":51,"tag":298,"props":3012,"children":3013},{"style":320},[3014],{"type":57,"value":349},{"type":51,"tag":298,"props":3016,"children":3017},{"style":352},[3018],{"type":57,"value":355},{"type":51,"tag":298,"props":3020,"children":3021},{"style":326},[3022],{"type":57,"value":360},{"type":51,"tag":298,"props":3024,"children":3025},{"style":320},[3026],{"type":57,"value":1513},{"type":51,"tag":298,"props":3028,"children":3029},{"style":326},[3030],{"type":57,"value":2968},{"type":51,"tag":298,"props":3032,"children":3033},{"style":320},[3034],{"type":57,"value":2973},{"type":51,"tag":298,"props":3036,"children":3037},{"style":326},[3038],{"type":57,"value":1997},{"type":51,"tag":298,"props":3040,"children":3041},{"style":2000},[3042],{"type":57,"value":2003},{"type":51,"tag":298,"props":3044,"children":3045},{"style":326},[3046],{"type":57,"value":2008},{"type":51,"tag":298,"props":3048,"children":3049},{"style":320},[3050],{"type":57,"value":3051},"No products.csv",{"type":51,"tag":298,"props":3053,"children":3054},{"style":326},[3055],{"type":57,"value":2018},{"type":51,"tag":298,"props":3057,"children":3059},{"class":300,"line":3058},26,[3060,3064,3068,3072,3076,3080,3084,3088,3092,3096,3100,3105,3110,3115,3119,3123,3127],{"type":51,"tag":298,"props":3061,"children":3062},{"style":314},[3063],{"type":57,"value":1758},{"type":51,"tag":298,"props":3065,"children":3066},{"style":320},[3067],{"type":57,"value":1763},{"type":51,"tag":298,"props":3069,"children":3070},{"style":326},[3071],{"type":57,"value":344},{"type":51,"tag":298,"props":3073,"children":3074},{"style":320},[3075],{"type":57,"value":349},{"type":51,"tag":298,"props":3077,"children":3078},{"style":352},[3079],{"type":57,"value":355},{"type":51,"tag":298,"props":3081,"children":3082},{"style":326},[3083],{"type":57,"value":360},{"type":51,"tag":298,"props":3085,"children":3086},{"style":320},[3087],{"type":57,"value":1784},{"type":51,"tag":298,"props":3089,"children":3090},{"style":326},[3091],{"type":57,"value":2968},{"type":51,"tag":298,"props":3093,"children":3094},{"style":320},[3095],{"type":57,"value":2973},{"type":51,"tag":298,"props":3097,"children":3098},{"style":326},[3099],{"type":57,"value":582},{"type":51,"tag":298,"props":3101,"children":3102},{"style":314},[3103],{"type":57,"value":3104}," python3",{"type":51,"tag":298,"props":3106,"children":3107},{"style":320},[3108],{"type":57,"value":3109}," -m",{"type":51,"tag":298,"props":3111,"children":3112},{"style":320},[3113],{"type":57,"value":3114}," json.tool",{"type":51,"tag":298,"props":3116,"children":3117},{"style":326},[3118],{"type":57,"value":2968},{"type":51,"tag":298,"props":3120,"children":3121},{"style":320},[3122],{"type":57,"value":2973},{"type":51,"tag":298,"props":3124,"children":3125},{"style":326},[3126],{"type":57,"value":1997},{"type":51,"tag":298,"props":3128,"children":3129},{"style":2000},[3130],{"type":57,"value":3131}," true\n",{"type":51,"tag":66,"props":3133,"children":3135},{"id":3134},"important-rules",[3136],{"type":57,"value":3137},"Important Rules",{"type":51,"tag":534,"props":3139,"children":3140},{},[3141,3151,3161,3171,3181],{"type":51,"tag":77,"props":3142,"children":3143},{},[3144,3149],{"type":51,"tag":240,"props":3145,"children":3146},{},[3147],{"type":57,"value":3148},"Read the logs first.",{"type":57,"value":3150}," The extraction log tells you exactly what happened — don't guess.",{"type":51,"tag":77,"props":3152,"children":3153},{},[3154,3159],{"type":51,"tag":240,"props":3155,"children":3156},{},[3157],{"type":57,"value":3158},"Probe before fixing.",{"type":57,"value":3160}," Understand the root cause before changing code.",{"type":51,"tag":77,"props":3162,"children":3163},{},[3164,3169],{"type":51,"tag":240,"props":3165,"children":3166},{},[3167],{"type":57,"value":3168},"One fix at a time.",{"type":57,"value":3170}," Change one thing, re-test, confirm it helped.",{"type":51,"tag":77,"props":3172,"children":3173},{},[3174,3179],{"type":51,"tag":240,"props":3175,"children":3176},{},[3177],{"type":57,"value":3178},"Don't mask failures.",{"type":57,"value":3180}," If a page genuinely can't be extracted, that's information — don't silence the error.",{"type":51,"tag":77,"props":3182,"children":3183},{},[3184,3189],{"type":51,"tag":240,"props":3185,"children":3186},{},[3187],{"type":57,"value":3188},"Document what you find.",{"type":57,"value":3190}," Platform quirks discovered during diagnosis are valuable for DISCOVERIES.md.",{"type":51,"tag":3192,"props":3193,"children":3194},"style",{},[3195],{"type":57,"value":3196},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3198,"total":2838},[3199,3216,3233,3248,3261,3280,3296],{"slug":3200,"name":3200,"fn":3201,"description":3202,"org":3203,"tags":3204,"stars":25,"repoUrl":26,"updatedAt":3215},"adapt","build platform adapters for content extraction","Build a new platform adapter to extract content from an unsupported platform (Blogger, Ghost, Tumblr, etc.)",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3205,3208,3211,3212],{"name":3206,"slug":3207,"type":15},"Automation","automation",{"name":3209,"slug":3210,"type":15},"Data Cleaning","data-cleaning",{"name":17,"slug":18,"type":15},{"name":3213,"slug":3214,"type":15},"WordPress","wordpress","2026-05-09T05:32:13.987972",{"slug":3217,"name":3217,"fn":3218,"description":3219,"org":3220,"tags":3221,"stars":25,"repoUrl":26,"updatedAt":3232},"compose-page-blocks","compose WordPress block markup from HTML","Compose a single liberated page's WordPress block-editor markup from its rendered HTML and screenshot. Inputs are a sanitized HTML file, a desktop screenshot, the design-foundation tokens, the URL's archetype (page\u002Fpost\u002Fproduct\u002Fetc.), and the source URL. Output is a string of valid block markup that round-trips through parse_blocks, uses theme tokens (no inlined hex colors), and contains only text drawn from the source HTML. Call per-page during the streaming watch loop after extraction has produced HTML+screenshot for that URL. Use when a freshly-imported page needs `post_content` upgraded from raw HTML into block-editor markup so the replica theme's tokens, gradients, and patterns actually render.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3222,3225,3228,3231],{"name":3223,"slug":3224,"type":15},"Block Editor","block-editor",{"name":3226,"slug":3227,"type":15},"Content Creation","content-creation",{"name":3229,"slug":3230,"type":15},"HTML","html",{"name":3213,"slug":3214,"type":15},"2026-06-08T08:17:34.212397",{"slug":3234,"name":3234,"fn":3235,"description":3236,"org":3237,"tags":3238,"stars":25,"repoUrl":26,"updatedAt":3247},"creating-blocks","create new WordPress blocks","Templates and guidelines for creating new WordPress blocks from scratch — load this before generating block files",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3239,3240,3243,3246],{"name":3223,"slug":3224,"type":15},{"name":3241,"slug":3242,"type":15},"Full Site Editing","full-site-editing",{"name":3244,"slug":3245,"type":15},"Plugin Development","plugin-development",{"name":3213,"slug":3214,"type":15},"2026-06-08T08:17:49.413995",{"slug":3249,"name":3249,"fn":3250,"description":3251,"org":3252,"tags":3253,"stars":25,"repoUrl":26,"updatedAt":3260},"creating-themes","create WordPress block themes","Guidelines for creating new WordPress block themes from scratch — load this before generating theme files",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3254,3255,3256,3259],{"name":3223,"slug":3224,"type":15},{"name":3241,"slug":3242,"type":15},{"name":3257,"slug":3258,"type":15},"Themes","themes",{"name":3213,"slug":3214,"type":15},"2026-06-08T08:17:50.666611",{"slug":3262,"name":3262,"fn":3263,"description":3264,"org":3265,"tags":3266,"stars":25,"repoUrl":26,"updatedAt":3279},"design-foundations","build design foundation JSON from sites","Build a coherent design-foundation JSON from a liberated site — semantic color\u002Ftypography\u002Fspacing roles with evidence trails. Consumes the partial scaffold produced by liberate_design_foundation_scaffold plus aggregate HTML\u002FCSS analysis and representative rendered HTML; produces a complete design-foundation matching the schema. Call after liberation, before theme generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3267,3270,3273,3276],{"name":3268,"slug":3269,"type":15},"Data Modeling","data-modeling",{"name":3271,"slug":3272,"type":15},"Design","design",{"name":3274,"slug":3275,"type":15},"Design System","design-system",{"name":3277,"slug":3278,"type":15},"Frontend","frontend","2026-06-08T08:17:44.457834",{"slug":3281,"name":3281,"fn":3282,"description":3283,"org":3284,"tags":3285,"stars":25,"repoUrl":26,"updatedAt":3295},"design-qa","run visual QA on WordPress themes","Visual-QA loop run after replica theme install and content import. Captures replica screenshots, applies a hard responsiveness gate at 390px AND a hard per-section visual-parity gate (measured SectionParity records, verdict computed by buildRunReport), runs qualitative vision review of source\u002Freplica pairs, checks accessibility, and drives a per-section escalation ladder of fixes via editing-themes\u002Fediting-blocks\u002Frebuild-section (R1 CSS → R2 spec-rebuild → R3 re-extract → R4a AI canonical-block rebuild → R4b deterministic styled-island floor) — escalating unresolved divergences to the operator rather than shipping them. Orchestration-internal — invoked by the replicate-with-blocks\u002Fliberate orchestrators, not directly by users.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3286,3287,3290,3293,3294],{"name":20,"slug":21,"type":15},{"name":3288,"slug":3289,"type":15},"Screenshots","screenshots",{"name":3291,"slug":3292,"type":15},"Testing","testing",{"name":3257,"slug":3258,"type":15},{"name":3213,"slug":3214,"type":15},"2026-06-08T08:17:45.698278",{"slug":4,"name":4,"fn":5,"description":6,"org":3297,"tags":3298,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3299,3300,3301,3302],{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"items":3304,"total":3474},[3305,3324,3337,3351,3368,3383,3393,3408,3423,3434,3447,3463],{"slug":3306,"name":3306,"fn":3307,"description":3308,"org":3309,"tags":3310,"stars":3321,"repoUrl":3322,"updatedAt":3323},"annotate","collect visual feedback with browser annotation tools","Open a browser with visual annotation tools. The user clicks elements on their site and leaves feedback — the agent reads annotations and makes changes. Use this when the user wants to point at specific elements to fix, tweak, or redesign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3311,3312,3315,3318],{"name":3277,"slug":3278,"type":15},{"name":3313,"slug":3314,"type":15},"Productivity","productivity",{"name":3316,"slug":3317,"type":15},"UX Copy","ux-copy",{"name":3319,"slug":3320,"type":15},"UX Design","ux-design",484,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fstudio","2026-05-06T05:40:01.516544",{"slug":3325,"name":3325,"fn":3326,"description":3327,"org":3328,"tags":3329,"stars":3321,"repoUrl":3322,"updatedAt":3336},"block-content","write editable WordPress block markup","Write editable WordPress block markup for local Studio sites, including core\u002Fhtml limits, block-theme layout rules, full-width sections, validation, and skeleton-first page\u002FCSS recipes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3330,3331,3334,3335],{"name":3223,"slug":3224,"type":15},{"name":3332,"slug":3333,"type":15},"CSS","css",{"name":3229,"slug":3230,"type":15},{"name":3213,"slug":3214,"type":15},"2026-05-27T07:01:55.629681",{"slug":3338,"name":3338,"fn":3339,"description":3340,"org":3341,"tags":3342,"stars":3321,"repoUrl":3322,"updatedAt":3350},"hosting-plans-helper","provide WordPress.com hosting plan information","Answer WordPress.com plan, pricing, upgrade, and feature-tier questions (plan names, what each tier unlocks — plugins, themes, custom code, SSH, hosting — and current prices) from authoritative live data. Load before answering ANY plan, pricing, or feature-gating question; never answer these from memory.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3343,3346,3349],{"name":3344,"slug":3345,"type":15},"Pricing","pricing",{"name":3347,"slug":3348,"type":15},"Reference","reference",{"name":3213,"slug":3214,"type":15},"2026-07-02T07:42:33.654791",{"slug":3352,"name":3352,"fn":3353,"description":3354,"org":3355,"tags":3356,"stars":3321,"repoUrl":3322,"updatedAt":3367},"liberate","migrate websites to WordPress","Import and rebuild a website from a closed platform (Wix, Squarespace, Webflow, Shopify, GoDaddy, Hostinger, HubSpot, Weebly) into a Studio WordPress site. Extracts pages\u002Fposts\u002Fproducts + media, then reconstructs the design as editable blocks + WooCommerce OR as a high-fidelity replica theme. Invoke when the user wants to migrate, import, liberate, or rebuild a site from one of these platforms.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3357,3360,3363,3366],{"name":3358,"slug":3359,"type":15},"CMS","cms",{"name":3361,"slug":3362,"type":15},"Migration","migration",{"name":3364,"slug":3365,"type":15},"Web Development","web-development",{"name":3213,"slug":3214,"type":15},"2026-07-09T06:47:33.454311",{"slug":3369,"name":3369,"fn":3370,"description":3371,"org":3372,"tags":3373,"stars":3321,"repoUrl":3322,"updatedAt":3382},"need-for-speed","run frontend performance audits for WordPress sites","Run a frontend performance audit on a WordPress site and get actionable optimization recommendations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3374,3377,3378,3381],{"name":3375,"slug":3376,"type":15},"Audit","audit",{"name":3277,"slug":3278,"type":15},{"name":3379,"slug":3380,"type":15},"Performance","performance",{"name":3213,"slug":3214,"type":15},"2026-05-06T05:40:06.433267",{"slug":3384,"name":3384,"fn":3385,"description":3386,"org":3387,"tags":3388,"stars":3321,"repoUrl":3322,"updatedAt":3392},"plugin-recommendations","recommend WordPress plugins for site features","Choose recommended plugins and plugin-provided blocks for features core WordPress blocks do not cover - ecommerce (WooCommerce), forms and newsletters (Jetpack), online courses and quizzes (Sensei LMS), polls, surveys and ratings (Crowdsignal), spam protection (Akismet) - while keeping generated content editable and avoiding raw HTML fallbacks. Any request to sell products or build a shop, store, or storefront requires WooCommerce with products.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3389,3390,3391],{"name":3226,"slug":3227,"type":15},{"name":3244,"slug":3245,"type":15},{"name":3213,"slug":3214,"type":15},"2026-05-27T07:01:58.249105",{"slug":3394,"name":3394,"fn":3395,"description":3396,"org":3397,"tags":3398,"stars":3321,"repoUrl":3322,"updatedAt":3407},"rank-me-up","run on-page SEO audits for WordPress sites","Run an on-page SEO audit on a WordPress site and get actionable recommendations to improve search visibility.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3399,3400,3403,3406],{"name":3375,"slug":3376,"type":15},{"name":3401,"slug":3402,"type":15},"Marketing","marketing",{"name":3404,"slug":3405,"type":15},"SEO","seo",{"name":3213,"slug":3214,"type":15},"2026-05-06T05:40:05.196367",{"slug":3409,"name":3409,"fn":3410,"description":3411,"org":3412,"tags":3413,"stars":3321,"repoUrl":3322,"updatedAt":3422},"site-spec","gather specifications for new WordPress sites","Gather the site name and layout preference before building a WordPress site. Run this before creating any new site.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3414,3415,3418,3421],{"name":3271,"slug":3272,"type":15},{"name":3416,"slug":3417,"type":15},"Product Management","product-management",{"name":3419,"slug":3420,"type":15},"Specs","specs",{"name":3213,"slug":3214,"type":15},"2026-05-06T05:40:02.739409",{"slug":3424,"name":3424,"fn":3425,"description":3426,"org":3427,"tags":3428,"stars":3321,"repoUrl":3322,"updatedAt":3433},"studio-cli","manage local WordPress sites with Studio CLI","Use the Studio CLI to manage local WordPress sites, authentication, and preview sites. Invoke this skill when you need to run Studio CLI commands, manage sites, or troubleshoot site issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3429,3432],{"name":3430,"slug":3431,"type":15},"CLI","cli",{"name":3213,"slug":3214,"type":15},"2026-04-06T18:02:57.150231",{"slug":3435,"name":3435,"fn":3436,"description":3437,"org":3438,"tags":3439,"stars":3321,"repoUrl":3322,"updatedAt":3446},"taxonomist","optimize WordPress category taxonomy","Analyze and optimize a WordPress site's category taxonomy. Exports all posts, uses AI to suggest an improved category structure — merging duplicates, retiring dead categories, creating missing ones, writing descriptions, and re-categorizing posts. Run this when the user wants to clean up or improve their categories.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3440,3443,3444,3445],{"name":3441,"slug":3442,"type":15},"Content Strategy","content-strategy",{"name":3209,"slug":3210,"type":15},{"name":3404,"slug":3405,"type":15},{"name":3213,"slug":3214,"type":15},"2026-05-06T05:40:03.966799",{"slug":3448,"name":3448,"fn":3449,"description":3450,"org":3451,"tags":3452,"stars":3321,"repoUrl":3322,"updatedAt":3462},"visual-design","plan and execute visual design direction","Plan and execute high-quality visual direction for site creation, redesign, layout, typography, color, motion, and visual polish.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3453,3456,3457,3460],{"name":3454,"slug":3455,"type":15},"Animation","animation",{"name":3271,"slug":3272,"type":15},{"name":3458,"slug":3459,"type":15},"Typography","typography",{"name":3461,"slug":3448,"type":15},"Visual Design","2026-07-24T05:40:57.887452",{"slug":3464,"name":3464,"fn":3465,"description":3466,"org":3467,"tags":3468,"stars":3321,"repoUrl":3322,"updatedAt":3473},"visual-polish","verify and polish website visual design","Verify and polish a built or redesigned site by diagnosing rendered-DOM issues against intent and fixing them in a planned, batched screenshot-and-fix loop.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3469,3470,3471,3472],{"name":23,"slug":24,"type":15},{"name":3277,"slug":3278,"type":15},{"name":3288,"slug":3289,"type":15},{"name":3461,"slug":3448,"type":15},"2026-06-06T07:09:59.809812",81]