windows-iso-downloader/cli
Shekhar Vaidya 9a5f41290d feat: Phase 3 crowdsourced cache contribution
- Redis L2 persistent cache: initRedis() from REDIS_URL env, seed
  in-memory linkCache on startup, write-through on every fresh fetch
  and background refresh (silent fallback to memory-only if unavailable)
- POST /contribute endpoint: validates product catalog, expiry > 1h,
  Microsoft CDN host allow-list, per-IP token bucket (~5/min),
  CONTRIBUTE_SECRET header; writes to in-memory + Redis; logs all
  accepts and rejections
- CLI --no-contribute flag (also MSDL_NO_CONTRIBUTE=1 env var):
  background goroutine posts raw MS JSON to /contribute after every
  consumer fetch; best-effort 5s timeout; opt-out message to stderr

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 14:07:35 +05:30
..
catalog.go feat(cli): product catalog with word-based search 2026-06-18 11:39:09 +05:30
catalog_test.go feat(cli): product catalog with word-based search 2026-06-18 11:39:09 +05:30
go.mod feat(cli): scaffold Go module 2026-06-18 11:36:33 +05:30
main.go feat: Phase 3 crowdsourced cache contribution 2026-06-18 14:07:35 +05:30
microsoft.go feat: Phase 3 crowdsourced cache contribution 2026-06-18 14:07:35 +05:30
microsoft_test.go feat(cli): direct Microsoft client (session, SKU, links, eval scrape) 2026-06-18 11:45:14 +05:30
picker.go fix(cli): guard empty slices in pickers, propagate scanner I/O errors 2026-06-18 12:01:13 +05:30
picker_test.go feat(cli): interactive numbered picker (stdin/stderr separated) 2026-06-18 11:53:59 +05:30