Parent epic: #3
Normative spec: 02 — URL/link/SEO compatibility
Scope
Create a deterministic, versioned inventory tool that combines committed generated sites and a production crawl for main/docs/FAQ/Podwiki/current course platform. Record source path, public/status/redirect/canonical, metadata, headings, language/robots, structured data, fragments, links/forms/assets, main-content fingerprint, and sitemap/lastmod state. Classify each row preserve/redirect/retire with reviewable exceptions.
Non-goals
Do not implement Django replacement pages, modify production, follow unsafe arbitrary networks, or auto-approve differences.
Acceptance criteria
Test scenarios
- Fixture site covers redirect chain/loop, soft 404, Unicode/percent case, trailing slash, relative links, fragments, JSON, forms, assets, canonicals, JSON-LD, robots/sitemap, and external query strings.
- Interrupted/repeated crawl is deterministic and cannot escape allowlisted hosts.
- Removing a known route/fragment/asset or changing a canonical produces an actionable diff.
No product Playwright UI is added; use browser/network crawl tooling only where server-rendered output requires it.
Dependencies
Depends on #1. #16 is not a prerequisite for baseline capture; it supplies consumer owner/auth/volume/migration inputs required before approving legacy-course-host redirects or Lambda activation. Blocks all parity adapter exit gates.
Parent epic: #3
Normative spec: 02 — URL/link/SEO compatibility
Scope
Create a deterministic, versioned inventory tool that combines committed generated sites and a production crawl for main/docs/FAQ/Podwiki/current course platform. Record source path, public/status/redirect/canonical, metadata, headings, language/robots, structured data, fragments, links/forms/assets, main-content fingerprint, and sitemap/lastmod state. Classify each row preserve/redirect/retire with reviewable exceptions.
Non-goals
Do not implement Django replacement pages, modify production, follow unsafe arbitrary networks, or auto-approve differences.
Acceptance criteria
Test scenarios
No product Playwright UI is added; use browser/network crawl tooling only where server-rendered output requires it.
Dependencies
Depends on #1. #16 is not a prerequisite for baseline capture; it supplies consumer owner/auth/volume/migration inputs required before approving legacy-course-host redirects or Lambda activation. Blocks all parity adapter exit gates.