Oleksandr Bezdieniezhnykh
|
90f4ac78f4
|
[AZ-316] Implement C11 HttpTileDownloader (batch 40)
Lands the operator-side pre-flight download path: authenticated
httpx GETs against satellite-provider, RESTRICT-SAT-4 (>= 0.5 m/px)
enforcement at the C11 boundary, c6 writes via consumer-side cuts
(_TileWriterLike, _BudgetEnforcerLike), per-(flight_id, request_hash)
journal under cache_root/.c11/journal/ for idempotent re-runs (AC-8,
AC-12), 429 Retry-After + 5xx exponential backoff handling, fail-fast
on TLS / 401 / 403, and a redacted-bearer auth-header policy.
Architecture:
- AZ-507 cross-component rule held: tile_downloader.py imports zero
c6 symbols; the composition-root _C6DownloadAdapter in
runtime_root/c11_factory.py absorbs c6's TileMetadata / TileSource /
FreshnessLabel / VotingStatus enum assembly.
- Sleep-callable injection (not full Clock) per Batch 39 precedent;
default routes through WallClock.sleep_until_ns to keep the AZ-398
invariant intact.
- No FDR records on the download path; spec mandates structured logs
only (8 log kinds wired: session.start/end, resolution_rejected,
freshness_rejected_summary, freshness_downgraded, batch.retry,
provider.failed, budget.exceeded, idempotent_no_op).
Tests: 14 new downloader unit tests covering AC-1..AC-9, AC-11, AC-12
plus throughput NFR + 429 HTTP-date + 429 budget exhaustion; 2 new
TileDownloader Protocol conformance tests (AC-10). Full unit suite:
1420 passed, 80 skipped (env-gated), 0 failed.
Code review: PASS_WITH_WARNINGS (5 Low findings, all documentation
or downstream-blocked). See _docs/03_implementation/reviews/
batch_40_review.md and batch_40_cycle1_report.md.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-05-13 07:01:14 +03:00 |
|