Merged
Conversation
…ink filtering
- Add `high_resolution` boolean field to Node model, schema, and DB migration
(default true); wire it through coverage API instead of hardcoding false
- Include `high_resolution` in _RF_FIELDS so toggling it invalidates coverage cache
- Fix pathfinder: skip links between nodes on different frequencies
- Fix LoRa SNR threshold check: each direction now checked against its own
receiver's spreading-factor threshold (was using RX SF for both directions)
- Add pathfinder warning in path result message when nodes are still computing coverage
- Fix SPLAT! longitude encoding: clamp 360.0 → 0.0 for prime meridian edge case
- Fix colorbar array construction: remove erroneous list() wrapping before .astype()
- Add model_validator to CoveragePredictionRequest ensuring min_dbm < max_dbm
- Add test suite: test_coverage.py and test_pathfinder.py
Replaces hardcoded allow_origins=["*"] with a comma-separated env var, defaulting to http://localhost:5173 for local development. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add asyncio.Lock with double-check pattern for OIDC discovery, JWKS, and display name caches in auth.py. Add threading.Lock for the clutter height cache in clutter.py. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, and Content-Security-Policy headers. CSP allows inline styles for Bootstrap/Leaflet and tile server origins for map tiles. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Initialize Alembic with async SQLAlchemy support. Create two historical migrations capturing the existing schema. Replace inline ALTER TABLE statements in the lifespan with alembic upgrade head at startup. Bind-mount alembic files in docker-compose for dev convenience. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Runs ruff linting, pytest with PostgreSQL service container, Docker build validation on PRs, and image publish to ghcr.io on push to main. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ADME Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Introduces a guided 4-step wizard at /try that lets anyone simulate their LoRa node coverage without signing up. No data is persisted — the GeoTIFF is returned directly from a new public endpoint and rendered ephemerally on a Leaflet map. Backend (POST /api/try/simulate): - No auth required; radius capped at try_max_radius_km (default 3 km), standard resolution only, results never written to DB - In-memory sliding-window rate limiter (default 6 req/IP/hour) - asyncio.Semaphore limits concurrent SPLAT! processes (default 2) - New config settings: try_rate_limit_per_hour, try_max_radius_km, try_max_concurrent Frontend (/try route): - Step 1: click-to-place location on full-screen Leaflet map - Step 2: hardware picker with Recommended badges on Heltec V3 and RAK4631, plus a quick-select shortcut and search filter - Step 3: antenna height slider with floor-based hints (≈3 m/floor), environment selector with icons, simplified Fast/Balanced/Long Range preset toggle - Step 4: spinner with animated progress steps, plasma colormap legend, share card with Copy link button, and locale-aware CTA linking to olografix.org membership page (IT/EN) - Shareable URL: all settings encoded as query params; opening a shared link pre-fills the form and auto-runs the simulation - flyToBounds animation after simulation using georaster metadata bounds - Full EN + IT translations; "Test Your Coverage" link added to the main app navbar Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a dedicated section explaining the 4-step wizard, the public /api/try/simulate endpoint constraints (radius cap, rate limit, concurrency guard, no persistence), shareable URL behaviour, and the three new TRY_* environment variables. Also adds the Coverage Tester to the key features table and the configuration reference. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
georaster creates Web Workers from blob: URLs via URL.createObjectURL(). Without worker-src blob: the CSP fell back to default-src 'self', silently blocking the worker. The worker was constructed but never responded, leaving parseGeoraster() awaiting forever and the loading badge stuck on mobile. unsafe-eval was already needed by the bundled georaster code. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a corsOrigins value that is injected into the backend via a ConfigMap key and env var. Defaults to the ingress host (scheme derived from ingress.tls.enabled), so existing deployments need no changes. Override with a comma-separated list when the API must be reachable from additional origins. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.