patinate v0.2.0 Pre-1.0: this release breaks configuration (a salt is now required). ## v0.2.0 -- privacy zone no longer outlines home ### Breaking - Any render with an obfuscation radius above 0 now requires `[privacy] salt` (or `PATINATE_PRIVACY__SALT`): at least 16 characters, kept private, never changed. Generate one with `openssl rand -hex 16`. Without it the render stops with an error naming the key. Radius 0 and the non-render commands need no salt. - New `[privacy] offset_m`, default 750, minimum 250 for any positive radius. A non-finite or negative radius is now refused. - Contributors: the Makefile is replaced by a justfile, pinned with `just` and git-lfs in `mise.toml`. - The published crate no longer ships fixtures, `web/`, assets or examples. ### Security - v0.1.x clipped every track at one exact circle around home, so the cut ends outlined it. A circle fit recovered home to within metres from the SVG, and to about 40 m even from a PNG. The hidden zone is now offset from home in a salted, secret direction, and each cut end is trimmed a further salted distance along the track. Renders that share a salt share one zone centre, so renders at different radii cannot be intersected. - Residual: tracks still converge toward home, and a determined analyst can narrow it to roughly 100-250 m. - Upgrading and re-rendering is strongly recommended. Replace any render published with v0.1.x. - `--web` simplification and coordinate rounding can no longer draw a line inside the home radius. - The zone derivation is pinned by golden tests, so a dependency update cannot silently move a salt's zone. - The cache, which holds the Strava refresh token, and patinate's data directory are created owner-only (0600 and 0700), and existing ones are tightened. ### Added - `--fit cover` fills a viewbox of any aspect by cropping the long axis. `contain` stays the default. - `heat.blend` theme field (normal, multiply or screen). The default multiplies on a light ground and screens on a dark one, by luminance. - The heat glow is a `<use>` stack over one path group, not three copies of every path. Posters shrink by about a third. - `--web` writes compact, merged paths sized to the viewbox and drops streams, keeping rivers and canals. - Fixtures are now fully synthetic, with the OSM basemap in git LFS. Examples and `render_smoke` run from a fresh clone. ### Fixed - Equal-sized road components rank deterministically, so two renders of the same input keep the same roads. - `fetch-osm` accepts negative coordinates. - The Overpass User-Agent reports the crate's real version. ### Changed - oauth2 no longer pulls in a second HTTP client and TLS stack. - Dependencies refreshed.