See workspace policy: /Users/home/Workspace/CLAUDE.md
/Users/home/Workspace/CLAUDE.md/Users/home/Workspace/Apps/AGENTS.md/Users/home/Workspace/Apps/4Charm/AGENTS.md← nearest, wins on conflicts- Relevant
~/.skills/guides
- Purpose: High-performance native macOS 4chan media downloader
- Package:
four_charm| Entry:python -m four_charm.main - Launch:
./run_preview.sh - Build:
4charmbuildorrazorbuild 4Charm| Push:4charmpushorrazorpush 4Charm - Toolchain:
uv sync→uv run ruff check .→uv run ty check src --python-version 3.13 - Tests:
uv run pytest tests/ -v - razorcore: editable dep at
../.razorcore ⚠️ Always usesanitize_filename()from razorcore.filesystem — 4chan thread titles contain/,:,\0that causeOSErroron macOS without sanitization⚠️ Rate limiting mandatory: 1 req/s to 4chan API (time.sleep(1)between all requests); 429s require exponential backoff
transport/session.py— HTTP session factory (no Qt dependency);create_session()returns configuredrequests.Sessioncore/dedup.py— thread-safe SHA-256 dedup viathreading.Lock(not QMutex);DedupTracker.check_and_register()/.add()core/scraper.py— orchestrator only; imports fromtransport.sessionandcore.dedup