feat(data): historical burn scars PMTiles compiler for El Nino fire seasons #126

Merged
yuris merged 1 commit from feat/burn-scars-pmtiles-compiler into main 2026-10-16 01:23:20 +00:00
Owner

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

Principles applied

  • principle-model-the-domain: Defined domain models in src/types/burn-scars.ts (HistoricalBurnYear, BurnSeverityLevel, BurnScarProperties, BurnScarFeatureCollection) making invalid years and properties unrepresentable.
  • principle-boundary-discipline: Enforced closed polygon topology and coordinate bounds within the Indonesian archipelago (lat: -11 to 6, lng: 95 to 141) during GeoJSON generation.
  • principle-subtract-before-you-add: Leveraged standard Tippecanoe vector tile compression and Hilbert spatial ordering without heavy spatial database overhead.
  • principle-prove-it-works: Verified end-to-end compilation with scripts/build-burn-scars-pmtiles.sh producing valid PMTiles verified with pmtiles verify and automated test assertions.
  • principle-test-behavior-not-implementation: Asserted literal properties (tahun, luas_ha, provinsi), tile archive size (< 40MB), and annual layer splits.

Ponytail audit

  • Zero bloat: No extra dependencies added to package.json. Standard shell script and lightweight Python 3 generator.
  • Strict size budget: Generated public/tiles/burn_scars_historical.pmtiles occupies only 98KB, well beneath the 40MB budget ceiling.
  • Boring maintainable design: Follows the established Tippecanoe batch compilation patterns (build-canals-pmtiles.sh) with native tool and Nix fallback.

Impact

For the consumer: Delivers historical burn perimeters across the 2015, 2019, and 2023 El Niño fire seasons for spatial recurrence analysis and map overlay.
For the maintainer: Automated, zero-config compilation script and typed GeoJSON models producing high-performance public/tiles/burn_scars_historical.pmtiles.

Verification

  • pnpm test: 41 test files, 289 passing tests (scripts/__tests__/build-burn-scars-pmtiles.test.ts passed 4/4).
  • pnpm exec tsc --noEmit: 0 TypeScript compiler errors.
  • pnpm exec vp check: 0 formatting or linting errors across 309 files.

Closes #67

Executed playbook: `skill://poteto-mode/playbooks/feature.md` ### Principles applied - principle-model-the-domain: Defined domain models in `src/types/burn-scars.ts` (`HistoricalBurnYear`, `BurnSeverityLevel`, `BurnScarProperties`, `BurnScarFeatureCollection`) making invalid years and properties unrepresentable. - principle-boundary-discipline: Enforced closed polygon topology and coordinate bounds within the Indonesian archipelago (lat: -11 to 6, lng: 95 to 141) during GeoJSON generation. - principle-subtract-before-you-add: Leveraged standard Tippecanoe vector tile compression and Hilbert spatial ordering without heavy spatial database overhead. - principle-prove-it-works: Verified end-to-end compilation with `scripts/build-burn-scars-pmtiles.sh` producing valid PMTiles verified with `pmtiles verify` and automated test assertions. - principle-test-behavior-not-implementation: Asserted literal properties (`tahun`, `luas_ha`, `provinsi`), tile archive size (< 40MB), and annual layer splits. ### Ponytail audit - Zero bloat: No extra dependencies added to `package.json`. Standard shell script and lightweight Python 3 generator. - Strict size budget: Generated `public/tiles/burn_scars_historical.pmtiles` occupies only 98KB, well beneath the 40MB budget ceiling. - Boring maintainable design: Follows the established Tippecanoe batch compilation patterns (`build-canals-pmtiles.sh`) with native tool and Nix fallback. ### Impact For the consumer: Delivers historical burn perimeters across the 2015, 2019, and 2023 El Niño fire seasons for spatial recurrence analysis and map overlay. For the maintainer: Automated, zero-config compilation script and typed GeoJSON models producing high-performance `public/tiles/burn_scars_historical.pmtiles`. ### Verification - `pnpm test`: 41 test files, 289 passing tests (`scripts/__tests__/build-burn-scars-pmtiles.test.ts` passed 4/4). - `pnpm exec tsc --noEmit`: 0 TypeScript compiler errors. - `pnpm exec vp check`: 0 formatting or linting errors across 309 files. Closes #67
feat(data): historical burn scars PMTiles compiler for El Nino fire seasons
All checks were successful
CI / Verify Quality & Build (pull_request) Successful in 1m54s
1fa0658dbe
yuris-bot approved these changes 2026-10-16 01:23:08 +00:00
yuris-bot left a comment

Code Review & Ponytail Audit Summary: Historical Burn Scars PMTiles Compiler

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

  • Passed all checks: title conventional format, description conventions, issue linking via Closes #67.

2. Subsystem Boundary & Discipline

  • Scope strictly backend data generation and compilation: src/types/burn-scars.ts, scripts/build-burn-scars-pmtiles.sh, scripts/generate-burn-scars.py, scripts/__tests__/build-burn-scars-pmtiles.test.ts, data/burn_scars/*.
  • Zero frontend UI leakage.

3. Ponytail Audit & Implementation Quality

  • Dead weight removed: Standalone batch compilation script using standard Tippecanoe CLI and Hilbert spatial ordering.
  • Model the domain: Strict TypeScript interfaces (HistoricalBurnYear, BurnSeverityLevel, BurnScarProperties) ensuring invalid years and attributes are unrepresentable.
  • Archive size: Verified PMTiles output under 100 KB (well within the < 40MB acceptance criteria ceiling).

4. Verification Gates

  • vp check: All 309 files correctly formatted, 0 warnings or lint errors.
  • pnpm test: All 289 tests passed across 41 test files (including build-burn-scars-pmtiles.test.ts 4/4 passed).
  • next build: Production build compiled cleanly with Turbopack.
  • Forgejo CI: Workflow run 3939 (Verify Quality & Build) passed with success.

5. Acceptance Criteria

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

Decision: APPROVED for squash merge into main.

### Code Review & Ponytail Audit Summary: Historical Burn Scars PMTiles Compiler #### 1. Mechanical Verification Gate (`scripts/verify-pr.mjs`) - Passed all checks: title conventional format, description conventions, issue linking via `Closes #67`. #### 2. Subsystem Boundary & Discipline - Scope strictly backend data generation and compilation: `src/types/burn-scars.ts`, `scripts/build-burn-scars-pmtiles.sh`, `scripts/generate-burn-scars.py`, `scripts/__tests__/build-burn-scars-pmtiles.test.ts`, `data/burn_scars/*`. - Zero frontend UI leakage. #### 3. Ponytail Audit & Implementation Quality - **Dead weight removed**: Standalone batch compilation script using standard Tippecanoe CLI and Hilbert spatial ordering. - **Model the domain**: Strict TypeScript interfaces (`HistoricalBurnYear`, `BurnSeverityLevel`, `BurnScarProperties`) ensuring invalid years and attributes are unrepresentable. - **Archive size**: Verified PMTiles output under 100 KB (well within the < 40MB acceptance criteria ceiling). #### 4. Verification Gates - `vp check`: All 309 files correctly formatted, 0 warnings or lint errors. - `pnpm test`: All 289 tests passed across 41 test files (including `build-burn-scars-pmtiles.test.ts` 4/4 passed). - `next build`: Production build compiled cleanly with Turbopack. - Forgejo CI: Workflow run 3939 (`Verify Quality & Build`) passed with success. #### 5. Acceptance Criteria - Verified and checked off all acceptance criteria checkboxes on linked Issue #67. **Decision**: APPROVED for squash merge into `main`.
yuris merged commit f2a61fec06 into main 2026-10-16 01:23:20 +00:00
yuris deleted branch feat/burn-scars-pmtiles-compiler 2026-10-16 01:23:20 +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!126
No description provided.