What changed, when, and what it means for you — including the mistakes. Versions are dates
(CalVer): the site ships continuously, so a date
tells the truth where a version number would be theater. A tool that watches the city's public record should keep
a public record of itself. Live usage numbers: stats.
2026.07.02 · Fix: vendors with punctuated names resolve again
For you — Vendor pages and vendor watches now work for names like
"Leon D. Dematteis Construction Corp." Before this fix, clicking such a vendor showed "no awards
on record" and a watch on them matched nothing — despite their awards being right there.
- Root cause: entity resolution normalizes a name to a punctuation-free stem, but the server-side lookup prefix-matched that stem against the raw
vendor_name column — so any vendor with mid-name punctuation could never match its own stem. Fixed by switching the lookup to Socrata full-text $q (punctuation-insensitive on both sides); the exact-stem filter still guarantees precision. Same fix in the site, the worker's entity watches, and the batch cross-reference tool.
- Caught by functional spec 05; a new unit test pins the invariant (a vendor's own row must satisfy the compiled query).
2026.07.02 · Snap + crisp: the round-four speed-and-declutter pass
For you — The site looks calmer and feels immediate. Lists show
content-shaped placeholders instead of spinners; filtering keeps your place instead of blanking
the list; going back to a tab you already loaded is instant; clicking a notice paints its detail
at once (the paper trail fills in a beat later). Search runs as you type — the Filter buttons
are gone because you no longer need them.
- ~150KB of map code (Leaflet) no longer blocks first paint — it loads only when the Land lens needs it. Unused font weight dropped; the browser now pre-connects to the data APIs.
- A read-side query cache (5-minute TTL) with request coalescing: revisiting a tab, filter, or notice renders from memory.
- Today's Edition renders instantly from your last visit's copy and refreshes behind itself — no more masthead reflow.
- Declutter, per decision 005: one accent color (urgency and red flags keep theirs), ~40 decorative emoji removed, shadows off, the stage-legend strip retired. The design is now formally anchored to citymeetings.nyc/craigslist restraint and Tufte's data-ink rule.
2026.07.02 · Enablement: public stats, honest click counts, this page
For you — You can now see the project's own usage numbers at
/stats (aggregate counts only — no accounts, no cookies, nobody tracked). Email-digest
links now pass through a count-only redirect so we can tell digests are useful; it counts
clicks per day,
never who clicked, and every digest footer says so.
- Public
/stats endpoint + this site's stats page: active subscriptions (a count, not a list), digests sent, digest links followed, feed/batch/share activity, plain-English-search calls. a5dbc18 (worker)
- Count-only digest click-through
/r/<kind>/<id> — validated ids only, cannot redirect off-site, junk paths fall to the homepage uncounted. a5dbc18
- This changelog; the maintenance rule now includes it (every shipped change lands an entry in the same session).
- The backend went open source: the worker's code now lives in this repo's
worker/
(fresh tree; secrets were never in git — see decision 004). One clone is the whole system; SECURITY.md documents the threat model.
- Governance files landed: MISSION.md, CONTRIBUTING.md, and a decision log.
2026.07.02 · Follow the dollars, matter timelines, follows, workspace, API
For you — Awards now show what was actually paid (live from Checkbook NYC),
any procurement matter reads as one timeline, you can follow a vendor or agency and get emailed when they
reappear, pin anything into a citable investigation workspace, and use every view as an API.
- Checkbook NYC join, deterministic by PIN: committed vs. paid-to-date with a progress bar, amended-from, M/WBE, vendor-mismatch warning;
#matter/<pin> timelines. 943a858
- Follow-an-entity alerts (name-stem matched) + Follow buttons on entity pages; investigation workspace — pin · annotate · export CSV/JSON · print dossier · 90-day share links;
api.html docs + live batch cross-reference (POST /batch). c794015 (site) · 3176ec2 (worker)
- All user-visible worker URLs now read
api.crol-list.org. 03ed286
- Test coverage across all twenty features; fixed a case-sensitivity bug it caught in junk-PIN filtering.
dc8499e
Incident — Adding the custom domain silently disabled the workers.dev
fallback alias (Cloudflare error 1042): cached pages and in-flight email-confirm links would have broken. Caught
by live probes minutes after deploy; fixed by keeping the alias explicitly enabled, and the site now fails over
between the two hostnames automatically. d75626e
2026.07.01 · Entity pages, red flags in context — and the first ten, all in one day
For you — Every vendor and agency became a page (with totals, top partners, and open
RFPs), procurement notices carry statistical context instead of bare text, and the whole
search-and-subscribe layer landed: watch any search, get a morning email digest, grab any view as RSS/calendar,
share any notice by URL, and see deadlines as countdowns instead of dates.
- Entity pages:
#vendor/<name> (name variants resolved — "Sinergia Inc" and "Sinergia Incorporated" are one profile) and #agency/<name>; every name on the site became a link. d0db6c1 · ad43b56
- Red-flag badges (non-competitive method, short ad window, repeat vendor) + benchmarks ("larger than 94% of this agency's awards"), with the formulas and false-positive modes published on About.
6708c33
- Round one, all ten: watch-this-search on every lens + 60-second onboarding quiz
b217895; RSS/Atom/JSON/calendar feeds 27e8b1e (worker); permalinks everywhere ef8c3b6; deadline countdown chips 55087c6; the who/what/when/act glance box 74de73e; Today's Edition front page d28b7d4; the People lens's instant examples 2c0f72b; the Property asset-type explorer 2ed20ee; the accessibility & mobile pass a46c2fa.
- The daily digest cron went live; cookieless Cloudflare Web Analytics beacon installed.
aec7673
Incident — The new vendor pages' full-text mentions query initially ran unbounded
over the 1M-row archive (slow, expensive). Caught by the browser test harness before it shipped; the query is
now scoped to recent editions with a hard timeout. 7fbe726
2026.06.30 · Real subscriptions
For you — Email alerts became real: double opt-in (nothing is stored until you click
the confirmation link), one-click unsubscribe, and your address is only ever used to send you your own digest.
- Turnstile-gated
/subscribe → signed confirm link → KV; RFC-8058 one-click unsubscribe. 6b2b30d
2026.06.26 · crol-list.org
For you — The site got its own domain and a real "ask in plain English" box on every
lens (with an on-device fallback, so search works even if the helper is down).
- Domain cutover to
crol-list.org cc8192a; plain-English search wired to the worker e32f3fa; interface declutter 827fb9b.
2026.06.24–25 · The seven lenses
For you — The tool took its shape: Money, People, Land, Property, Rules, Meetings, and
Alerts, in the letterpress design, over live open data with nothing cached.
- Money/People/Land deep lenses; Property, Rules, Meetings feed lenses
d0670b7; real rezoned tax-lot polygons on the Land map 38b648e; the "Still standing?" demolition check 7cd5a96; the City Record letterpress redesign f2c4033.