windows-iso-downloader/.claude/worktrees/modest-hamilton-53380c/issues.md
Shekhar Vaidya 1c54c36d03 feat: expiry countdown, refresh links, CLI tabs, recently viewed, file size support
- Backend: ?force=true on /proxy bypasses cache for fresh link fetch
- Frontend: parse `se` param for live expiry countdown on download links
- Frontend: show Refresh button when link expires in <6h, force-fetches fresh URL
- Frontend: CliCommand component replaces Aria2Tip — wget/curl/aria2 tabs, persists selection in localStorage
- Frontend: RecentlyViewed component — localStorage, shows active countdown or expired state
- Frontend: FileSize shown alongside arch if returned by Microsoft CDN

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 21:06:17 +05:30

1.3 KiB

Issue Drafts

Inactive products still trigger backend requests

Summary

The new active: false catalog state is not fully enforced on the product detail page.

Inactive products still pass validation and trigger /skuinfo requests before the UI shows the discontinued-product panel.

Affected file

  • frontend/src/pages/ProductDetailPage.tsx

Current behavior

For a catalog entry with active: false:

  • the page loads the product from products.json
  • setIsValidated(true) still runs
  • the follow-up effect calls /skuinfo?product_id=...
  • the backend and Microsoft endpoints are still hit
  • only afterward does the page render the Product Discontinued state

Expected behavior

Inactive products should fail fast on the frontend and should not trigger backend or Microsoft API requests.

Risk

The inactive-product flow still consumes backend capacity and external request budget even though the user cannot download that release.

Suggested fix

  • gate validation on product.active !== false
  • avoid setting isValidated for inactive products
  • ensure the /skuinfo effect only runs for active products

Prevention

  • add a test covering an inactive catalog entry and assert that no backend request is made
  • model the route state explicitly so active, not_found, and error paths cannot fall through into fetch logic