feat(map): burn severity split-pane comparison slider #138
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/split-compare-slider"
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 75: interactive draggable split-pane comparison slider (
split-compare-slider.tsx) to contrast pre-fire basemap imagery against post-fire NBR burn scar overlays in MapLibre WebGL view.Principles applied
principle-model-the-domain: Modeled horizontal split percentage clamped within 0 to 100 with CSS inset clip-path generators for pre-fire and post-fire panes.principle-boundary-discipline: Validated pointer capture and throttled drag updates usingrequestAnimationFramefor smooth 60fps interaction across touch and mouse events.principle-subtract-before-you-add: Reused GPU-accelerated CSSclipPathand native HTML pointer events without external split-pane libraries.principle-test-behavior-not-implementation: Tested observable DOM structure, accessibility slider attributes, pane badges, and clip-path generators with literal assertions.principle-prove-it-works: Verified clean vp check, 59 passed test files (388 passed tests), and production Next.js build.Playbook
skill://poteto-mode/playbooks/feature.mdImpact
Closes #75
6-Axis Review: PR #138 (
feat/split-compare-slider)Executed Playbook:
skill://poteto-mode/playbooks/shipping.mdPrinciples Applied:
principle-model-the-domain: Modeled horizontal comparison split geometry usingclampPositionbounds checking (0% to 100%) and CSSinsetclip-path generators (getRightPaneClipPath,getLeftPaneClipPath) for pre-fire basemap and post-fire NBR burn scar overlays.principle-boundary-discipline: Throttled pointer and mouse drag updates viarequestAnimationFramewith pointer capture boundaries (setPointerCapture/releasePointerCapture) to prevent event dropping outside container bounds.principle-subtract-before-you-add: Leveraged native browser Pointer Events, CSS clip paths, and keyboard accessible slider roles without introducing third-party slider or split-pane libraries.principle-test-behavior-not-implementation: Tested mathematical boundary edge cases (clamping negative numbers, >100 values, and NaN handling), clip-path string formatting, DOM accessibility attributes (role="slider",aria-valuenow,aria-valuemin,aria-valuemax), custom labels, and toggle visibility.principle-prove-it-works: Verified execution against Forgejo Actions CI run 225 (successful in 2m18s),vp checkclean across 339 files,tsc --noEmitclean, and all 59 test files passing (388 tests).Gate 1: Mechanical Verification Gate (
node scripts/verify-pr.mjs 138)feat(map): burn severity split-pane comparison slider(passes Conventional Commits and branch rules).1e545b9c5effd5a45b8516b57eb15d7ebc1cad44.vp checkreports 0 warnings/errors across 170 files, 339 files formatted cleanly.tsc --noEmitexited 0 with 0 errors.Gate 2: Ponytail Audit (
skill://ponytail-review,skill://ponytail-audit)split-compare-slider.tsx,split-compare-slider.test.tsx, andmap-view.tsx.Gate 3: Doubt-Driven Analysis (
skill://doubt-driven-development)ArrowLeft/ArrowRight(2% step or 10% with Shift),Home(0%), andEnd(100%) keys.clampPosition,getRightPaneClipPath) work synchronously and server-render cleanly.Gate 4: Security & Hardening (
skill://security-and-hardening)eval) or raw HTML rendering (dangerouslySetInnerHTML).Gate 5: Code Quality & Simplification (
skill://code-review-and-quality,skill://code-simplification)MapViewwith toggle buttonSplit NBR.Gate 6: Poteto Shipping Protocol (
skill://poteto-mode/playbooks/shipping.md)mainat160a7a7.main.Verdict: APPROVE