Skip to content

release: v1.19.0 — PPD serves from the local snapshot; full history; two wrong-answer fixes - #71

Merged
paulieb89 merged 1 commit into
mainfrom
release/v1.19.0
Sep 4, 2026
Merged

release: v1.19.0 — PPD serves from the local snapshot; full history; two wrong-answer fixes#71
paulieb89 merged 1 commit into
mainfrom
release/v1.19.0

Conversation

@paulieb89

Copy link
Copy Markdown
Owner

Version bump + changelog. 31 commits since v1.18.2.

Bumped in the three places the new reconcile job compares against the tag —
pyproject.toml, server.json version, server.json packages[0].version — and
uv.lock regenerated, which uv lock --check catches otherwise (it did).

Two behaviour changes worth seeing before you publish

REST refuses unknown query parameters (400). Requests that "succeeded" while
carrying a typo now fail. MCP clients cannot hit this — they read the tool's JSON
Schema and never assemble a query string.

Subject-property lookup could return another property's history. "2 Alexandra
Road" answered with 25 Alexandra Road, whose price then fed
subject_price_percentile. Separately it refused 1 in 7 addresses that were
never ambiguous. Both fixed.

Also: epc_match_rate rises and median_price_per_sqft moves, because
newly-matched comps bring floor areas into the median.

Deployment order is load-bearing

  1. Publish the Releaserelease.yml checks out the tag and deploys. This
    is why it must be the Release and not a local fly deploy, which would ship a
    working directory.
  2. Then publish the artifact and flip current.json.

Reversed, a Machine still running the 1 GiB ceiling refuses the 1.19 GB bundle
at boot and falls back to a live source that is 503-ing.

What to expect

  • First run of the retry + reconcile workflow. A reconcile failure is it
    working — it means the two apps disagree on version.
  • ~150 s of degraded PPD data per restart (1.19 GB re-materialized on
    ephemeral rootfs at the measured 63.6 Mbit/s). The service stays healthy — boot
    is non-blocking and the app is ready in ~10 s — but it serves live meanwhile,
    and live is down. Two restarts: this deploy, then the artifact flip.
  • Between deploy and flip, subject-property history comes from the 2016
    artifact and is truncated at 2016-01-01. Declared, not silent — provenance
    states the coverage and a warning names the narrowing — but keep the window
    short.

A Fly Volume would remove the re-materialization entirely (the boot path already
reuses an existing materialization, and PPD_SNAPSHOT_CACHE_DIR is
configurable). Deliberately not in this release: better to add it against a
snapshot already proven working.

./scripts/validate.sh2220 passed, 28 skipped.

…two wrong-answer fixes

Version bumped in the three places the reconcile job compares against the tag:
pyproject.toml, server.json version, server.json packages[0].version. uv.lock
regenerated, which `uv lock --check` in scripts/validate.sh catches otherwise.

Contents are in the changelog entry. Two things worth repeating here because
they change behaviour rather than adding to it:

* REST now REFUSES unknown query parameters with 400 instead of discarding
  them. Requests that "succeeded" while carrying a typo now fail.
* Subject-property lookup could return another property's sale history --
  "2 Alexandra Road" answered with 25 Alexandra Road -- and separately refused
  1 in 7 addresses that were never ambiguous. Both fixed.

Deployment order is load-bearing and is recorded in the changelog: the image
must reach the Machine BEFORE current.json is flipped to the full-history
artifact, or a Machine still running the 1 GiB ceiling refuses the 1.19 GB
bundle at boot and falls back to a live source that is currently 503-ing.

./scripts/validate.sh: 2220 passed, 28 skipped.
@paulieb89
paulieb89 merged commit 9dfca92 into main Sep 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant