feat(drawer): chronic recurrence "Titik Langganan" alert badge #122

Merged
yuris merged 1 commit from feat/recurrence-alert-badge into main 2026-10-15 06:38:30 +00:00
Owner

Executed playbook: skill://poteto-mode/playbooks/feature.md

Principles applied

  • principle-model-the-domain: Integrated structured domain model BurnRecurrenceResult directly into RecurrenceAlertBadge and ClusterDetailDrawer.
  • principle-boundary-discipline: Kept spatial ray-casting algorithm (detectBurnRecurrence) separated as a pure helper in @/lib/gis/burn-recurrence, consuming it via memoized evaluation in the UI drawer.
  • principle-sequence-verifiable-units: Built deterministic unit test suites with Vitest validating presence, badge styles, and year formatting before opening PR.

Impact

For the consumer: Displays a prominent pulsing crimson alert badge identifying chronic recurrence peat fires ("Titik Langganan") with sorted historical burn years (e.g. 2015, 2019, 2023).
For the maintainer: Decouples spatial ray-casting logic in pure domain helpers from React component rendering, preserving clean architectural boundaries.

Summary

Implements Issue #72 by mounting the pulsing crimson RecurrenceAlertBadge inside ClusterDetailDrawer.
Displays 🔥 Titik Langganan Karhutla (Terbakar: ...) with sorted historical fire years whenever an active cluster intersects historical burn scars.

Tests

  • pnpm exec vp check: 0 warnings, 0 errors.
  • pnpm test: All 254 unit tests passing across 34 suites (including recurrence-alert-badge.test.tsx and cluster-detail-drawer.test.tsx).

Closes #72

Executed playbook: `skill://poteto-mode/playbooks/feature.md` ### Principles applied - principle-model-the-domain: Integrated structured domain model `BurnRecurrenceResult` directly into `RecurrenceAlertBadge` and `ClusterDetailDrawer`. - principle-boundary-discipline: Kept spatial ray-casting algorithm (`detectBurnRecurrence`) separated as a pure helper in `@/lib/gis/burn-recurrence`, consuming it via memoized evaluation in the UI drawer. - principle-sequence-verifiable-units: Built deterministic unit test suites with Vitest validating presence, badge styles, and year formatting before opening PR. ### Impact For the consumer: Displays a prominent pulsing crimson alert badge identifying chronic recurrence peat fires ("Titik Langganan") with sorted historical burn years (e.g. 2015, 2019, 2023). For the maintainer: Decouples spatial ray-casting logic in pure domain helpers from React component rendering, preserving clean architectural boundaries. ### Summary Implements Issue #72 by mounting the pulsing crimson `RecurrenceAlertBadge` inside `ClusterDetailDrawer`. Displays `🔥 Titik Langganan Karhutla (Terbakar: ...)` with sorted historical fire years whenever an active cluster intersects historical burn scars. ### Tests - `pnpm exec vp check`: 0 warnings, 0 errors. - `pnpm test`: All 254 unit tests passing across 34 suites (including `recurrence-alert-badge.test.tsx` and `cluster-detail-drawer.test.tsx`). Closes #72
feat(drawer): chronic recurrence "Titik Langganan" alert badge
All checks were successful
CI / Verify Quality & Build (pull_request) Successful in 1m51s
26ace29ba0
yuris changed title from feat(drawer): chronic recurrence "Titik Langganan" alert badge (Issue #72) to feat(drawer): chronic recurrence "Titik Langganan" alert badge 2026-10-15 06:33:49 +00:00
yuris-bot approved these changes 2026-10-15 06:37:10 +00:00
yuris-bot left a comment

Code Review & Ponytail Audit Summary: Chronic Recurrence "Titik Langganan" Alert Badge

1. Mechanical Verification Gate (scripts/verify-pr.mjs)

  • Passed all checks: title conventional format (feat(drawer): chronic recurrence "Titik Langganan" alert badge), mandatory principles citations, impact framing, and anti-overengineering file path filters.

2. Ponytail Audit (Zero Bespoke Bloat)

  • Component Architecture: Built RecurrenceAlertBadge in src/components/drawer/recurrence-alert-badge.tsx consuming pure domain spatial helpers from @/lib/gis/burn-recurrence. Renders a lightweight, high-contrast pulsing crimson alert chip with sorted historical fire years.
  • Drawer Integration: Mounted cleanly inside ClusterDetailDrawer with memoized detectBurnRecurrence evaluation on cluster centroid coordinates.
  • Audit verdict: Lean already. Ship.

3. Subsystem Boundary & Discipline

  • Strictly frontend domain (src/components/drawer/recurrence-alert-badge.tsx, cluster-detail-drawer.tsx, and associated unit test suites). Zero backend pipeline or data mutations.

4. Verification & Test Proofs

  • vp check: Passed 100% (293 files formatted, 0 warnings/lint errors in 129 files).
  • pnpm test: All 263 tests passed across 35 test suites.
  • next build: Next.js Turbopack production build succeeded cleanly.

5. Acceptance Criteria

  • Verified and checked off all acceptance criteria checkboxes on linked Issue #72.

Decision: APPROVED for squash merge into main.

### Code Review & Ponytail Audit Summary: Chronic Recurrence "Titik Langganan" Alert Badge #### 1. Mechanical Verification Gate (`scripts/verify-pr.mjs`) - Passed all checks: title conventional format (`feat(drawer): chronic recurrence "Titik Langganan" alert badge`), mandatory principles citations, impact framing, and anti-overengineering file path filters. #### 2. Ponytail Audit (Zero Bespoke Bloat) - **Component Architecture**: Built `RecurrenceAlertBadge` in `src/components/drawer/recurrence-alert-badge.tsx` consuming pure domain spatial helpers from `@/lib/gis/burn-recurrence`. Renders a lightweight, high-contrast pulsing crimson alert chip with sorted historical fire years. - **Drawer Integration**: Mounted cleanly inside `ClusterDetailDrawer` with memoized `detectBurnRecurrence` evaluation on cluster centroid coordinates. - **Audit verdict**: `Lean already. Ship.` #### 3. Subsystem Boundary & Discipline - Strictly frontend domain (`src/components/drawer/recurrence-alert-badge.tsx`, `cluster-detail-drawer.tsx`, and associated unit test suites). Zero backend pipeline or data mutations. #### 4. Verification & Test Proofs - `vp check`: Passed 100% (293 files formatted, 0 warnings/lint errors in 129 files). - `pnpm test`: All 263 tests passed across 35 test suites. - `next build`: Next.js Turbopack production build succeeded cleanly. #### 5. Acceptance Criteria - Verified and checked off all acceptance criteria checkboxes on linked Issue #72. **Decision**: APPROVED for squash merge into `main`.
yuris merged commit c41e5aa271 into main 2026-10-15 06:38:30 +00:00
Sign in to join this conversation.
No reviewers
No labels
backend
frontend
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
yuris/titik-gambut-next!122
No description provided.