atproto relay in zig zlay.waow.tech
relay zig atproto

refactor: extract util/ and atproto/ packages from sprawling src root master

slurper.zig was carrying ~160 lines of generic parsing/network primitives (hostname validation, SSRF checks, raw HTTP header parsing) that had nothing to do with crawl orchestration. several helpers were also copy-pasted across modules — getenv/parseEnvInt in 4 files, timestamp variants in 5+. centralize into two packages, mirroring tigerbeetle's stdx and ghostty's thematic-package conventions: - src/util/ — std extensions (env, time), flat namespace, no domain knowledge - src/atproto/ — relay domain logic (hostname parsing+validation, host_check describeServer/SSRF/relay-loop detection) folds the duplicate hostname parser (slurper + validator each had one) into a single atproto.extractHostFromUrl/validateHostname. slurper drops to pure orchestration. call sites keep old names via file-local aliases, so no churn. docs/design.md gains a "code organization" section defining where new helpers go. .claude/ harness state added to .gitignore. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>