- Window: 2026-05-25 → 2026-06-05
- Status: Not started
- SOW-DEL covered: SOW-DEL-002, SOW-DEL-004
- Owner: KeyCode17
Build the parts that have no Chromium dependency: the domain model + PX detector + cookie cache. Everything in this phase is unit-testable in milliseconds and forms the seam every later crate depends on.
- Phase 00 marked Done.
-
px-core,px-detector,px-cache,px-errors,px-typescrates exist as stubs from Phase 00.
- SOW-DEL-002 — PX detection & domain model (
px-core,px-detector)-
px-core::domaindefinesPxAppId(String),PxCookieBundle,PxChallenge,SolveRequest,SolveOutcome,CacheKey { domain, app_id, fingerprint_key }. -
px-detector::application::detect_pxreturnsPxDetection { app_id, init_js_path, collector_path, mode }. - Fixtures (already captured + sanitized as of 2026-05-16):
px-detector/tests/fixtures/pedidosya-block.html(HTTP 403, no captcha, appIdeT15wiaE).px-detector/tests/fixtures/hannaandersson-block.html(HTTP 307, captcha mode, appIdfeReLYy8, full_px*global suite).px-detector/tests/fixtures/non-px-control.html(synthetic negative).px-detector/tests/fixtures/havenwellwithin-non-px.html(real-world Cloudflare + Salesforce Commerce Cloud negative — must returnDetected::No).
-
_pxhdparser per ADR-0012: accept^[0-9a-f]{64}:<UUIDv1>$, reject malformed. - 100% branch coverage on the detector (verified with
cargo tarpaulin --packages px-detector).
-
- SOW-DEL-004 — Cookie cache layer (
px-cache)-
px-cache::domain::CookieCachetrait withget,put,invalidate,metrics_snapshot. -
InMemoryCookieCache(DashMap + tokio GC task at 60 s). -
RedisCookieCachebehind--features redis(compile-only smoke test for v1; full integration deferred). - Loom-style concurrency test for the in-memory backend (8 parallel writers, no panics, contract preserved).
-
cargo test -p px-core -p px-detector -p px-cachepasses on all three OS targets in CI (linux-x86_64 only for v1).- Detector returns the correct
PxDetectionon the pedidosya fixture without any network IO in tests. - Cache loom test runs clean.
- No public API on
px-core::domaincarriesserdederives (axum-best-practice rule #4). - Run
cargo xtask phase 01→ version becomes0.2.0per ADR-0017.
- R-01-1: detector becomes a leaky abstraction (carries Chromium-specific assumptions). Mitigation: detector input is an
&strof HTML; nochromiumoxidetypes cross the crate boundary. - R-01-2: loom tests are slow and flaky. Mitigation: cap iteration count, run loom only in
--releaseCI lane.
Append-only.