# Skarve alpha.4: same-host raster query replication

Measured on 24 September 2026. This report covers a single disposable DigitalOcean Ubuntu 24.04.4 LTS x86-64 host with 2 shared virtual CPUs and 4 GB RAM. The published `v0.1.1-alpha.4` Skarve source corresponds to commit `d0447ee7f5fd1dba54601c1e23e02de601d8257f`. The benchmark uses public release code and packages, with no Horizon Mapper production rasters or credentials.

## Query programme

Two deterministic analytical rasters were generated: 513 × 519 cells with 36 independent Float32 bands, and 1025 × 1031 cells with 40 independent Float32 bands. Each has a declared mask and nodata. The harness pre-created tuned TIFF and COG controls, two spatial-index configurations, and an SKV. It froze four query shapes (one or eight polygons; one or every band) for both local files and unthrottled loopback HTTP. The seven predeclared lanes are summary-enabled native SKV, same-file raw native SKV, tuned native TIFF, tuned native COG, COG + RSI64, COG + RSI256, and natural exactextract.

Three fresh worker observations for every lane and scenario produced **336 attempted, 336 passed** operations across **16 scenarios and 112 lane groups**. The immutable programme's `freeze.json` SHA-256 is `8cf995928d7537f4877d0b6e22e2d34b29ef93aee5f5f1c3895c774c8b6d3fbb`; the public `summary.json` SHA-256 is `75bb190536686eebf3881ff2ee2017c1b40367403d0cc54e517db256fd939356`. The summary, `groups.csv`, and `observations.csv` retain the complete lane/group/observation accounting. The full worker receipts and freeze are retained outside the public site.

The timed quantity is source open through fully consumed results. It includes metadata, summary/index reads, decode, geometry, and reduction. Fixture creation, COG tuning, indexing, SKV compilation, package installation, imports, and engine construction/close are separate. The 36-band SKV compiled in 2.72 s and occupied 5.77 MB; the 40-band SKV compiled in 13.37 s and occupied 24.73 MB. Those are input-specific preparation costs and cannot be treated as general conversion times. Keeping the ordinary inputs adds 4.46 MB and 17.36 MB respectively; tuned alternatives and indexes have their own storage cost.

## Result and limits

On these fixtures, summary-enabled SKV had a lower median than the best of the four predeclared native TIFF/COG/index controls and natural exactextract in **16/16** scenarios. Its ratio against natural exactextract ranged from **1.06× to 3.69×** across scenario medians; against the best native control, **1.19× to 3.04×**. SKV summaries beat the same-file raw ablation in **10/16** medians; raw was faster in the other six. The "best native control" is a descriptive minimum selected from four reported control medians, not an additional timed lane. Every individual observation remains in the CSV, including slower results.

The native lanes share the frozen harness's declared numerical comparison contract. Natural exactextract uses its own numerical policy, so the cross-policy timings are **not** a bit-identical-answer claim. OS caches were not evicted; input preparation and hashing can warm them. Loopback HTTP is neither a public WAN nor Cloudflare R2 test. Three observations on one small shared-CPU host do not establish p95 latency, cross-hardware confidence, or Horizon Mapper production performance. Real data shape, nodata density, compression, band count, polygon complexity, and remote access can change which path wins.

## Installation measurement

The registry installation measurements use this same host **after** the query programme. Rust 1.98.1, a C compiler, `pkg-config`, GDAL and libdeflate development files, Python 3.12, and an official checksum-verified Node 22.23.3 binary were present before package timers started. Each package had a separate empty Cargo cache; pip and npm also had fresh package caches. The commands were run sequentially with two Cargo build jobs. Their measured wall times therefore describe a first source build **after prerequisites**, not the end-to-end time to provision a new machine. Download speed, package mirrors, shared-CPU contention, memory, and warm caches can change the result. Each installed interface was smoke-tested after its timer stopped.

| Published package command | Wall clock | Exit / smoke |
| --- | ---: | --- |
| `pip install --pre skarve-engine==0.1.1a4` in a new Python virtual environment | 293.65 s (4m 54s) | Exit 0; imported `Skarve` |
| `npm install @skarve/engine@0.1.1-alpha.4` in a new empty project | 226.20 s (3m 46s) | Exit 0; imported the default `Skarve` class |
| `cargo install skarve --version 0.1.1-alpha.4 --locked` into a fresh root | 286.62 s (4m 47s) | Exit 0; ran `raster-engine --help` |

The official Node binary download, SHA-256 check and extraction took 3.89 s on this host. Its network-specific prerequisite time is reported separately. Rust and Ubuntu prerequisite installation was not timed in this pass, so **total time from a clean machine is longer**. Full command logs and `/usr/bin/time -p` receipts are retained in the local test record (`skarve-install-timing-evidence.tgz`, SHA-256 `ff4453f40ddbe61dc1a1c65579ffefb0545abaa66edd54defc13274bc24cd041`).

## Reproduce the public extracts

The benchmark harness is `benchmarks/native-skv/replicate.py` in the public Skarve release tag. `scripts/run-skarve-droplet-benchmark.sh` records the disposable-host setup and fixed programme. With an existing frozen run directory, `python scripts/summarize-skarve-replication.py RUN_DIRECTORY OUTPUT_DIRECTORY` checks the completion/freeze digest and every worker identity before writing `summary.json`, `groups.csv`, and `observations.csv`. `scripts/time-skarve-droplet-installs.sh` documents the separately timed registry installs. The source object paths and full immutable worker receipts are intentionally not web assets.
