Commit History
-
fix: sanitize NaN/inf floats to prevent JSON serialization crashesβ
KSvend +1: Claude Opus 4.6 (1M context)SAR (and potentially other EO products) produce NaN/inf from nanmean on empty pixel slices. These values crash json.dumps() in both the database write path and the API response path. Adds sanitize_for_json() utility that recursively replaces NaN/inf with 0.0, applied at three levels: - ProductResult model_validator (catches on construction) - Database save_job_result (catches on storage) - API get_job endpoint (catches on response) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>2850a7e
-
fix: fix remaining indicator_id/indicator_ids references after renameβ
KSvend +2: Claude, HappySeveral references to old field names survived the rename: - job.request.indicator_ids β product_ids (jobs.py, worker.py) - result.indicator_id β product_id (worker.py, 15 occurrences) - indicator_name kwarg β product_name (worker.py) - indicator_status param β status (database.py) - advisor prompt text cleanup These caused AttributeError at runtime on HF Spaces. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>749b346 -
refactor: rename "indicators" to "EO products" throughoutβ
KSvend +2: Claude, HappyFull rename across codebase: - app/indicators/ β app/eo_products/ - IndicatorResult β ProductResult, IndicatorMeta β ProductMeta - IndicatorRegistry β ProductRegistry, BaseIndicator β BaseProduct - NdviIndicator β NdviProduct (and Water, SAR, Buildup) - indicator_id β product_id in models, APIs, and frontend - /api/indicators β /api/eo-products - All user-facing text updated - Frontend page/element IDs updated - 27 tests passing Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>df6bf75
-
fix: load job data when viewing previous analyses from historyβ
KSvend +2: Claude, HappyHistory card clicks navigated to results without fetching job data, causing "No results data" for all previously completed analyses. Now fetches full job data (including AOI bbox for map) before showing results. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>d75edf9
-
fix: show waiting status for indicators not yet started in progress viewβ
KSvend +2: Claude, HappyThe status list only showed indicators already in the progress dict, hiding ones that hadn't started yet. Now shows all requested indicator IDs with "Waiting" badge for those not yet processing or complete. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>5e3b25e
-
security: fix hardcoded secret, gate demo mode, add CORS and rate limitingβ
KSvend +2: Claude, Happy- Secret reads from APERTURE_SECRET env var (falls back to dev default) - Demo token only returned when APERTURE_DEMO=true (default for dev) - CORS restricted to configured origins (open in demo mode only) - Rate limit on /api/auth/request: 5 requests per 5-minute window per IP - Download endpoints now require auth + job ownership check Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>3b71d95 -
feat: protect job API routes with auth, verify job ownershipβ
KSvend +1: Claude Opus 4.6 (1M context)Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>cb5a414 -
feat: add get_current_user auth dependency and GET /api/jobs list endpointβ
KSvend +1: Claude Opus 4.6 (1M context)Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>a7da499
-
Initial commit: Aperture platform (extracted from SR4S)
KSvendae74af5