feat(ui): satellite pass date picker and band opacity slider #135
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/satellite-controls"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Implements Issue 74: interactive floating satellite controls card (
satellite-controls.tsx) with Sentinel-2 pass date picker and SWIR band opacity slider (0% to 100%) with real-time percentage readout.Principles applied
principle-model-the-domain: DefinedSatellitePassOptionwith ISO dates, cloud cover percentages, and formatted labels.principle-boundary-discipline: Clamped opacity inputs within 0.0 to 1.0 at handler boundaries with clean percentage string formatting.principle-subtract-before-you-add: Reused existing MapLibre raster paint properties and native HTML range input without extra heavy slider libraries.principle-test-behavior-not-implementation: Tested observable render elements, input changes, and prop callback invocations with literal values.principle-prove-it-works: Verified clean vp check, 56 passed test files (372 passed tests), and production Next.js build.Playbook
skill://poteto-mode/playbooks/feature.mdImpact
Closes #74
66d54852bd60f9316a9e60f9316a9e9fdb3412ff9fdb3412ff193ce0562e6-Axis Review: PR #135 (
feat/satellite-controls)Executed Playbook:
skill://poteto-mode/playbooks/shipping.mdPrinciples Applied:
principle-model-the-domain: DefinedSatellitePassOptiondomain interface for Sentinel-2 cloud-free acquisition dates, cloud cover percentages, and formatted labels.principle-boundary-discipline: Clamped opacity inputs within0.0to1.0at handler boundaries with percentage string formatting, and sanitized dates viaencodeURIComponent.principle-subtract-before-you-add: Reused existing MapLibre raster paint properties and native HTML range slider without pulling in bulky third-party slider UI libraries.principle-test-behavior-not-implementation: Tested real DOM element rendering, input value boundary handling, and percentage text updates.principle-prove-it-works: Verified execution against Forgejo Actions CI run 219 (CI / Verify Quality & Buildgreen in 2m8s), cleanvp checkacross 334 files,tsc --noEmitclean, and all 56 test files passing (372 tests).Gate 1: Mechanical Verification Gate
node scripts/verify-pr.mjs 135: Passed. Conventional commit title and principle citations validated.CI / Verify Quality & Build (pull_request)succeeded on head commit193ce0562ef4da0cf3aed7d8a45f476313838f41.vp check: Clean. 0 warnings, 0 lint errors across 165 files, 334 files formatted.pnpm exec tsc --noEmit: Clean with 0 TypeScript compiler errors.pnpm test: Passed with 56 test files and 372 tests green.Gate 2: Ponytail Audit (
skill://ponytail-review,skill://ponytail-audit)Lean already. Ship.Net lines to cut: 0 lines.Gate 3: Doubt-Driven Analysis (
skill://doubt-driven-development)Gate 4: Security & Hardening (
skill://security-and-hardening)encodeURIComponentbefore embedding into tile API URLs.Gate 5: Code Quality & Simplification (
skill://code-review-and-quality,skill://code-simplification)Gate 6: Poteto Shipping Protocol (
skill://poteto-mode/playbooks/shipping.md)mainatf5dcd94.main.Verdict: APPROVE