Skip to content

chore: release main - #1

Merged
andrewkomkov merged 1 commit into
mainfrom
release-please--branches--main
Jul 21, 2026
Merged

chore: release main#1
andrewkomkov merged 1 commit into
mainfrom
release-please--branches--main

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 17, 2026

Copy link
Copy Markdown

🤖 I have created a release beep boop

0.2.0

0.2.0 (2026-07-21)

Features

  • add oltp postgres schema with cdc publication (e89a76b)
  • agent: answer site selection with three progressive map layers (0739aa7)
  • db: load kontur population so demand is people, not a proxy (fc5541d)
  • db: load overture places for berlin, amsterdam and belgrade (ff629b1)
  • infra: add readonly console user for the demo video console beat (151a6f9)
  • infra: add the Overture built-environment demand layer (49976ee)
  • infra: cut Amsterdam and Belgrade basemaps (8530229)
  • infra: cut berlin pmtiles to r2 and serve them from a worker (e7c0922)
  • infra: deploy the chat agent to a Trigger.dev prod environment (bc77f00)
  • infra: scaffold spider-web (network-expansion) walk catchment (138b91e)
  • infra: serve the app out of ClickHouse behind a Cloudflare Worker (ADR-003) (9c4ead6)
  • trigger: add scheduled Overture-demand refresh task (3f908fa)
  • trigger: extend the scheduled refresh to places, population and districts (31a59ce)
  • video: add Amsterdam and Belgrade beat sheets and narration (0291f12)
  • video: add the demo video production pipeline (dda3f10)
  • video: cinematic live-map push into the pick's spider-web during capture (76ba8fe)
  • video: city-aware pipeline + per-city build wrapper (969db53)
  • video: consultant demo for amsterdam and belgrade + embed all three in README (19fcba4)
  • video: rewrite demo script and voiceover around the consultant story (31e371f)
  • web: 3-column dashboard — agent-runs stack, KPI strip, map well (a454c2a)
  • web: add first-visit landing omnibar with per-city example prompts (2099cce)
  • web: add the built-capacity map layer from the cell_capacity MV (0d22fb6)
  • web: bloom the spider-web catchment outward by walk-time (3e8a017)
  • web: click a top-pick pin to draw its spider-web, to compare picks' reach (e9e7379)
  • web: complementary-business affinity as an editorial neighbourhood signal (ae04ca8)
  • web: consultant ranking variety — lenses, worst mode, district, six pins (bf62b8f)
  • web: curate queryable trades to those that shine in all three cities (12144d4)
  • web: draw the walk catchment as the spider-web street network (2585311)
  • web: fold built-environment demand into the GAP score (25e6100)
  • web: historical momentum — is this market rising, flat, or saturating? (6d58ad5)
  • web: market-at-a-glance dashboard strip framing the map (d60a59a)
  • web: name the districts, port the design, precompute walk catchments (269fb9b)
  • web: read saved sites from ClickHouse via CDC, not Postgres direct (823fdbe)
  • web: saved-site history — your sites vs the market (OLTP+OLAP) (eec3c27)
  • web: the agent operates the whole UI, and exports a PDF report (68b0514)
  • web: vendor map glyphs and sprites into ClickHouse — zero external hosts (f7f1036)
  • web: walk catchment layer and accessibility as a third factor (a18f62f)
  • web: walking skeleton proving chat.agent() drives the map (7c61a2c)
  • web: wire our own protomaps basemap into the skeleton (5937827)

Bug Fixes

  • docs: use clickable poster links for the demo videos (708a00f)
  • infra: make the spider-web expansion batch load and verify against real data (bd48043)
  • infra: stop check-env false-flagging a healthy system (60e0081)
  • specs: correct district names we invented the same way the agent did (308e2c8)
  • trigger: close idle chat sessions after 5 min, not the ~1h default (ceb0117)
  • video: frame the pick's spider-web via querySourceFeatures, not src._data (a795340)
  • video: rebalance VO to a uniform words-per-second + REMIX mode (31a6130)
  • video: shorten amsterdam compare line to fit its short 7s window (23d16a0)
  • video: stop a saved pick and a slow load from bloating capture timings (bba1ef5)
  • web: point the basemap at the answer's city, not always Berlin (42e432e)
  • web: resolve code-review findings in the chat/map and saved-sites paths (cc38077)
  • web: stop the docked composer input overflowing under the send button (a880f61)
  • web: track the vendored map glyphs (were caught by *.pbf ignore) (9f020aa)

Documentation

  • add ADR-001 on progressive map streaming via chat.agent data parts (35c0ffb)
  • add ADR-002 on overture maps as verified poi source (8d895ce)
  • add day-by-day implementation plan with cuts and risk register (7893882)
  • add designer brief with stack context and animation spec (71a84d9)
  • add research digest, adr-003 on clickhouse as webserver, claude.md and readme (4250963)
  • bring valhalla batch on cf containers back into scope (91eb326)
  • confirm trigger.dev provides no llm — we bring anthropic key (b211038)
  • constitution: add principle VII — work through agents, reproducible from a script (197c8c1)
  • constitution: extend principle II to our own prose (95d8acd)
  • correct overture places license attribution (a133ff2)
  • de-stale the rankSites validation example (8c2145b)
  • design: round-2 brief — dashboard, momentum, agentic conversation (c52a721)
  • document infra-as-code track, ci gates and release-please (3992939)
  • document the video pipeline, agents/skills and the curated trade set (8c1be9f)
  • plan: add researched feature backlog F2-F5 (a38eb01)
  • plan: mark F1-F5 shipped, browser-verified, and CI-green (644e2f2)
  • plan: record how the isochrone check failed, and how it didn't (ad300e5)
  • plan: stop pacing against a schedule we already outran (07ed4cc)
  • point the demo stills at the youtube uploads (25732af)
  • record adr-001 as proven and the 1 mib stream cap that broke it (99c760d)
  • record cdc slot failure and resync fix in adr-004 (3d105fa)
  • record decision to cut runtime valhalla, snap clicks to h3 instead (0397324)
  • refresh CLAUDE.md, README and plan for shipped feature 007 (93a1650)
  • refresh two stale "verified" numbers flagged by a live validation pass (c285ac1)
  • replace valhalla estimates with measured numbers (0ab60f8)
  • specs: spec the site-selection answer flow (1896c94)
  • video: adapt scenario + skill for the spider-web and the live-map push-in (ca2e7e1)
  • video: describe the walk catchment as the spider-web street network (1d8612a)

Refactoring

  • infra: move the basemap to wherehouse.slim-shaggy.com (92053d5)
  • infra: serve the basemap from basemap.slim-shaggy.com (b5b1a81)

Build & Infrastructure

  • add check-env script verifying every credential against live services (005fa1f)
  • add infra-as-code scripts, secret scanning, and release-please (654a381)
  • adopt spec-kit and ratify project constitution (a58ad67)
  • wire deepseek-v4-flash via anthropic-compatible endpoint (f59750f)

This PR was generated with Release Please. See documentation.

@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 19 times, most recently from 803cfbb to 44aab09 Compare July 17, 2026 13:58
andrewkomkov added a commit that referenced this pull request Jul 17, 2026
Surface geo.isochrones/isochrone_cells in the product (feature 002):

- scoring.ts: an acc CTE (residents reachable in a 10-min walk from the cell's
  res-9 centre child, via isochrone_cells joined to population), a has_acc
  marker (unambiguous vs a LEFT-JOIN zero), acc_p95 over measured cells, and a
  three-term gap where an absent catchment drops out. New catchmentSql/
  catchmentStatsSql. rankSql excludes unmeasured cells.
- layers.ts/score.ts: a catchment layer id, an accP95 scalar shipped to the
  browser, a notMeasured count, and accessibility as a third re-weightable
  factor whose absent value is omitted, never zeroed.
- chat.ts: a showCatchment tool that re-derives pick #1 and emits its real
  Valhalla contour; the walk ban narrowed to what showCatchment measured.
- chat.tsx: the Walk catchment wave, the contour layer, the CATCHMENT MEASURED
  chip, the not-measured styling and counter, and the accessibility slider. The
  not-measured opacity is fixed at neutral so it cannot flat-fill when
  accessibility is weighted up (FR-009a).
- verify-score.mjs: three factors across three cities plus a reaches-self
  invariant check; 0 mismatches, 0 misses.

Top-3 for Berlin bakeries reproduces the research baseline (Lichtenrade,
Biesdorf, Bohnsdorf); verified end to end in the browser.
andrewkomkov added a commit that referenced this pull request Jul 17, 2026
The map is the hero; a compact stat-tile strip under the question turns the rail
into a dashboard without a wall of numbers (at most four tiles):

- Competitors (competitor layer count), Top score (#1 pick), Median opportunity
  (median of the choropleth cells), Momentum (the trend direction + change).
- Every tile is computed from data the client already holds — no new tool or
  query — and each is absent until its layer lands, so the strip fills in as the
  assembly runs (absent, never a 0).
- Top score and Median opportunity are scored under the CURRENT slider weights,
  exactly as the Top-picks table and the choropleth are, so a slider move never
  leaves two different numbers for the same pick on screen. Values wear text ink,
  not the accent (the palette reserves it for chrome).

Verified in the browser: the strip reads Competitors 1,460 · Top score 100 ·
Median 5 · Momentum flat -5.2%, and Median tracks the surface (5 -> 35 when
Accessibility is weighted to 100).
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from 44aab09 to 1e72120 Compare July 17, 2026 18:33
andrewkomkov added a commit that referenced this pull request Jul 19, 2026
Port the WhereHouse.dc.html redesign onto the live wiring: a top bar with a
run scrubber, a left AGENT RUNS stack derived from real chat.agent() message
and tool-call history (kind rebuild/steer/talk, per-step engine tags, live
steering), a centre KPI strip (competitors, top/median opportunity, momentum)
framing the map in a bordered well, and the picks/saved/re-weight/layers moved
into a right column. Caption, status and legend become map overlays.

All scoring, painting, fetch-by-handle and honesty logic is unchanged: absent
!= 0 on every tile, editorial affinity tagged, measured/estimated split, the
not-measured counter, and C.win spent only on the #1 pick. Adds per-run map
snapshots so the scrubber can rewind the map to a past run.

Browser-verified end to end against live ClickHouse + Trigger.dev: the run
stack fills wave by wave, the map assembles, momentum and top picks land, zero
console errors.
andrewkomkov added a commit that referenced this pull request Jul 19, 2026
Feature 006 (specs/006-agent-controls-ui). Anything the user can do by hand is
now an agent tool, over a new one-shot data-ui stream channel (unique id per
command, an appliedUi set drains each exactly once through the same setters the
buttons use, so agent- and hand-driven paths never diverge; the model only sees
{ok, action}):

- setLayer, reweight (the 3 real factors, never rent), focusPick,
  highlightExtreme (worst/best — client picks a real scored cell, no query, no
  invention), reviewRun (the scrubber), exportReport.
- SYSTEM_PROMPT "act, don't talk": a request to change the screen is a tool call,
  a new trade/city is a full rebuild — never a text-only turn. A UI-only turn
  classifies as steer ("UI updated"), never talk.
- exportReport builds a one-page A4 PDF client-side (jspdf, dynamic import;
  map snapshot via getCanvas().toDataURL with preserveDrawingBuffer): question,
  map, top picks, market-at-a-glance, and the measured/estimated/editorial
  provenance block + attributions. Honesty carries verbatim (absent != 0,
  editorial tag, #FAFF69 only on #1, agent's own caption).

Browser-verified live on https://app.slim-shaggy.com: "hide the competitors"
toggles the layer (steer, not talk), "show me the worst place" marks a real
cell, "export a pdf report" downloads wherehouse-berlin-bakery.pdf (11 MB, map
snapshot embedded, provenance intact). Each shows as a real run-stack step.
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 2 times, most recently from 5e54039 to e6f00db Compare July 19, 2026 21:31
andrewkomkov added a commit that referenced this pull request Jul 21, 2026
…cks' reach

Clicking a pick pin (#1/#2/#3) now toggles THAT pick's 10-minute walk catchment —
the reachable street network — in its own colour (teal / amber / violet), so several
can be overlaid at once and their walkability compared side by side. Click again to
hide. Client-side and instant: the browser reads geo.isochrone_edges directly as the
readonly `site` user (new GRANT in 013_isochrone_edges_grant.sql — geo.* isn't covered
by the web.* wildcard) and draws each web as its own map source/layer, keyed by rank
and cleared when a new answer's pins replace the old. Separate ids from the agent's
showCatchment `catchment` layer so the two never collide. SQL mirrors
scoring.catchmentEdgesSql but is inlined — scoring.ts pulls in @clickhouse/client and
must not reach the browser.
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 2 times, most recently from e6f00db to b8d11f6 Compare July 21, 2026 11:19
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch 2 times, most recently from 4b6d8b0 to aa50eca Compare July 21, 2026 11:32
@github-actions
github-actions Bot force-pushed the release-please--branches--main branch from aa50eca to c0ceb8a Compare July 21, 2026 12:18
@andrewkomkov
andrewkomkov merged commit b3b1169 into main Jul 21, 2026
@andrewkomkov
andrewkomkov deleted the release-please--branches--main branch July 21, 2026 12:19
@github-actions

Copy link
Copy Markdown
Author

🤖 Created releases:

🌻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant