changelog LIVE
What every sprint actually shipped, sprint by sprint. This page is generated from the real git history of the shinnslist repo (git log) on 2026-09-29 — every entry is a real commit, rendered word-for-word, and every entry cites the commit it came from. Nothing here is invented.
b98f01a. Every entry below carries its commit hash; verify any entry yourself with git log --oneline | grep <hash> or git show <hash>. If a commit is unclear, it is described plainly in the commit's own words — the commit is the description. The only numbers printed on this page that are not part of a commit message are the 326-commit total itself (check it with git rev-list --count b98f01a) and the freshness constants in the freshness-commitments section below — each one is re-derived from the code file cited next to it at generation time (the generator fails instead of printing a constant it cannot find in code). To regenerate this page: node scripts/gen-changelog.mjs.what's new this week LIVE
The 10 most recent commits at generation time, across all tracks:
2026-09-30b98f01a chatbot chatbot sprint 58: shareable api calls + playground/docs handoff2026-09-307a7dccc harvard harvard sprint 68: /docs/faq.html — the 15th docs page, real-code FAQ2026-09-302603cd0 datadepth datadepth sprint 51: statewide dedup key design + live audit runner (first slice)2026-09-29027c4ec harvard harvard sprint 67: docs search — client-side search across all 14 docs pages (search box + index, no backend)2026-09-294955a3a chatbot chatbot sprint 57: batch run-all + side-by-side signal comparison (api integration, seventh slice)2026-09-29e496aea harvard harvard sprint 66: docs sdks page — /docs/sdks.html as working reference of the real SDK surface (no published packages; MCP agent tools + chat snippet generators quoted verbatim from code), docs hub card + tree link (LIVE), api-reference footer via gen-docs.mjs template (regen verified timestamp-only: 146 signals 24 live/88 degraded/34 pending), sitemap.xml entry2026-09-29416169b chatbot chatbot sprint 56: quota + freshness honesty for disclosed api calls (api integration, sixth slice)2026-09-2934fa8f4 datadepth datadepth sprint 50: Manassas city — 13,646 parcels, #40 VA locality per Census co-est2024, FIPS 516832026-09-297e276e0 harvard harvard sprint 65: docs engine page — /docs/engine.html as working reference of the real /api/engine/* buyer-intent endpoints (assumable, motivated, combined, stats, geoip), every constant re-derived from the deployed functions code (FHA_LIMIT=472030, VA_PRACTICAL_MAX=750000, scoring weights, DUAL_SIGNAL_THRESHOLD=40/BONUS=15, PARCEL_CACHE_TTL=3600, validateZipParam error strings, CANDIDATE_DISCLOSURE verbatim, geoip resolution order, PUBLIC_PATHS access gate), planned capabilities DRAFT-badged (tier-2 OSINT, per-signal engine endpoints, per-parcel streaming), docs hub card + tree link (LIVE), api-reference footer via gen-docs.mjs template (regen verified timestamp+footer only), sitemap.xml entry (+ fixed pre-existing unclosed freshness.html <url> tag that made the whole sitemap invalid XML); tests/harvard-sprint65.test.mjs (84/84: honesty guards re-derive every constant from code, no-invented-* guards, DRAFT checks, theme, nav/footer, brand guard, hub, sitemap, run.mjs registration). full suite 10319/10319 ALL GREEN.2026-09-2989dbfaa chatbot chatbot sprint 55: code-snippet export with language picker (api integration, fifth slice)
harvard — site & design LIVE
sprint commits from the harvard track: site pages, design, docs, SEO metros. Most recent first. Every entry cites the commit it came from.
2026-09-307a7dccc harvard sprint 68 harvard sprint 68: /docs/faq.html — the 15th docs page, real-code FAQ2026-09-29027c4ec harvard sprint 67 harvard sprint 67: docs search — client-side search across all 14 docs pages (search box + index, no backend)2026-09-29e496aea harvard sprint 66 harvard sprint 66: docs sdks page — /docs/sdks.html as working reference of the real SDK surface (no published packages; MCP agent tools + chat snippet generators quoted verbatim from code), docs hub card + tree link (LIVE), api-reference footer via gen-docs.mjs template (regen verified timestamp-only: 146 signals 24 live/88 degraded/34 pending), sitemap.xml entry2026-09-297e276e0 harvard sprint 65 harvard sprint 65: docs engine page — /docs/engine.html as working reference of the real /api/engine/* buyer-intent endpoints (assumable, motivated, combined, stats, geoip), every constant re-derived from the deployed functions code (FHA_LIMIT=472030, VA_PRACTICAL_MAX=750000, scoring weights, DUAL_SIGNAL_THRESHOLD=40/BONUS=15, PARCEL_CACHE_TTL=3600, validateZipParam error strings, CANDIDATE_DISCLOSURE verbatim, geoip resolution order, PUBLIC_PATHS access gate), planned capabilities DRAFT-badged (tier-2 OSINT, per-signal engine endpoints, per-parcel streaming), docs hub card + tree link (LIVE), api-reference footer via gen-docs.mjs template (regen verified timestamp+footer only), sitemap.xml entry (+ fixed pre-existing unclosed freshness.html <url> tag that made the whole sitemap invalid XML); tests/harvard-sprint65.test.mjs (84/84: honesty guards re-derive every constant from code, no-invented-* guards, DRAFT checks, theme, nav/footer, brand guard, hub, sitemap, run.mjs registration). full suite 10319/10319 ALL GREEN.2026-09-2963083e3 harvard sprint 64 harvard sprint 64: docs webhooks page — sprint-64 re-verification of the empty webhook surface + /api/health errors.spike as the code's documented polling alert channel (SPIKE_THRESHOLD=20, 10-min window, PUBLIC_PATHS auth-exempt, all constants re-derived), DRAFT badges on all planned sections, no invented events/headers/endpoints; tests/harvard-sprint64.test.mjs (52/52: honesty guards, no-invented-* guards, DRAFT checks, theme, nav/footer, hub, sitemap, run.mjs registration). full suite: only pre-existing datadepth-sprint47/48 WIP assertion failures (their track, untouched) — harvard suites green.2026-09-29e245794 harvard sprint 63 harvard sprint 63: docs v1 tutorials page — /docs/tutorials.html as working reference of the real code (3 executable end-to-end tutorials: (1) assumable mortgages in a ZIP — GET /api/engine/assumable?zip= with the real response shape [signal assumable_mortgage_under_4pct, top-10 slice, score>0, CANDIDATE_DISCLOSURE], validateZipParam ZIP rules verbatim, PARCEL_CACHE_TTL=3600 KV key template parcels:${PARCEL_CACHE_VERSION}:<zip>, /api/intel pipeline view with retrieved_at/data_as_of + no-store, honest 404 signal_not_built for catalog-but-unbuilt assumable signals [only tax_delinquency_early_warning has a v1 adapter] with the working recipe path linked; (2) buy a list from chat — buyListHandoffV1 -> localStorage shinnslist.buyAsList -> /lists.html?from=chat read-back gate, CHAT_HANDOFF_BASIS_V1 $49/$39 one-time, demo-buy button + verbatim demo copy -> shinnslist.purchasedLists demo:true -> /my-lists.html; (3) freshness checks — intel stamps, engine cached+retrieved, PL_FRESHNESS_THRESHOLD_DAYS=30 parcel syncs, degraded-with-unavailable), all three planned follow-ups DRAFT-badged (assumable recipe execution, real checkout, freshness SLAs), docs hub card + tree link (LIVE badge), api-reference footer link (gen-docs.mjs template updated, regen verified timestamp+footer only: 146 signals 24 live/88 degraded/34 pending re-derived at run time), sitemap.xml. tests/harvard-sprint63.test.mjs (60/60: honesty guards re-derive every constant/code/shape from code, regen counts via the generator's own buildSignalMeta, no-invented-endpoint guards, DRAFT checks, theme, nav/footer, hub, sitemap, run.mjs registration). full suite 10053/10053 ALL GREEN.2026-09-29860441d harvard sprint 62 harvard sprint 62: docs v1 recipes page — /docs/recipes.html as working reference of the real recipe compiler (RECIPE_VERSION 1, compileRecipe plan-before-data contract §3.3, calls = parcels x signals deterministic, geography parcel_list exact vs county_list/radius/bounding_box streaming honesty + run-time 400 geography_not_supported, parcel_key FIPS/APN shapes, unknown_signal 400 / signal_not_built 404 / invalid_parcel 400, exclusions billed like signals, estimate binds charge §2.2 with credit_calls/credit_usd, estimate_id est_ + 24 hex / recipe_id r_ + 24 hex, canonicalized recipeHash, 1,000 parcels/page, >1,000-call estimate gate, Idempotency-Key required, completed-only billing, 402 full-page-fit, rights block restricted/unverified, planned streaming execution DRAFT-badged), docs hub card + tree link (LIVE badge), api-reference footer link (gen-docs.mjs template updated, regen verified timestamp+footer only: 146 signals 24 live/88 degraded/34 pending), sitemap.xml. tests/harvard-sprint62.test.mjs (41/41: honesty guards re-derive every constant/code/shape from code, message-prefix vs error-code precision, no-invented-endpoint guards, DRAFT checks, theme, nav/footer, hub, sitemap, run.mjs registration). note: run.mjs registration lines landed via datadepth sprint-48 commit 98dbd8a (tree-shared file); this commit carries the harvard-62 test file itself. full suite 9937/9993 — all 56 failures are datadepth-sprint39..48's own WIP assertions (their track).2026-09-2984ad487 harvard sprint 61 harvard sprint 61: docs usage & billing page — /docs/usage-billing.html as working reference of the real metering code (PRICE_PER_CALL_USD 0.003 (M), FREE_TIER_MONTHLY_CALLS 1000 hard cap, billable read = 1 signal x 1 parcel, bill-only-completed / idempotent replays $0 / 422 unresolved not billed / 402 no-partial-billing, exact billing+quota block shapes with modeled:true, usage_ledger + quotas columns, best-effort metering; planned paid billing / pro issuance / usage dashboard DRAFT-badged), docs hub card + tree link (LIVE badge), api-reference footer link (gen-docs.mjs template updated, regen verified timestamp+footer only: 146 signals 24 live/88 degraded/34 pending), sitemap.xml. tests/harvard-sprint61.test.mjs (36/36: honesty guards re-derive price/call counts from code, no-invented-* guards, DRAFT checks, theme, nav/footer, hub, sitemap, run.mjs registration). docs wave 51-61 suites 455/455 green.2026-09-29abc0c71 harvard sprint 60 harvard sprint 60: docs changelog page — /docs/changelog.html as working reference of the real sprint-by-sprint changelog, generated by scripts/gen-changelog.mjs from git log (300 commits, every entry verbatim + cited by hash; grouped harvard 51 / chatbot 44 / datadepth 42 / adapters 90 / infra 73; top 'what's new this week' = 10 most recent; zero invented entries/numbers), docs hub card + tree link (LIVE badge), api-reference footer link (gen-docs.mjs template updated, regen verified timestamp+footer only: 146 signals 24 live/88 degraded/34 pending), sitemap.xml. tests/harvard-sprint60.test.mjs (31/31: honesty guards re-derive git ground truth — every entry hash+subject matches a real commit, no invented N/N test counts, team grouping, week-10 order, theme, nav/footer, hub, sitemap, run.mjs registration). docs wave 51-60 suites 419/419 green.2026-09-2974dac92 harvard sprint 59 harvard sprint 59: docs data-freshness page — /docs/freshness.html as working reference of the real freshness surface (verified against functions code: per-signal retrieved_at pipeline-set per run + data_as_of adapter-declared honestly-null (exactly one adapter, whole_region_rank, declares it today), throwing adapters degrade-with-reason never-500, caches: /api/intel no-store, engine parcel KV 1h, engine stats 5min, MCP tools/list 60s, /api/status 60s edge; envelope pipeline_version v0.1.0 + registry + trace + geocode.retrieved; zero freshness SLAs/staleness thresholds/refresh schedules exist — planned SLAs + cadences DRAFT-badged, zero invented numbers/headers/endpoints), docs hub card + tree link (LIVE badge), api-reference footer link (gen-docs.mjs template updated, regen verified timestamp+footer only: 146 signals 24 live/88 degraded/34 pending), sitemap.xml. tests/harvard-sprint59.test.mjs (60/60: honesty guards, no-invented-* guards, planned-section DRAFT checks, theme, nav/footer, hub, sitemap, run.mjs registration). full suite 9618/9618 ALL GREEN.2026-09-29e7c6259 harvard sprint 58 harvard sprint 58: docs webhooks page — /docs/webhooks.html as working reference of the real webhook surface (verified empty against apps/poc-web/functions: no events fire, no subscription endpoints, no signing, no delivery/retry — one LIVE verified section + DRAFT planned sections, zero invented endpoints/headers), docs hub card + tree link, sitemap.xml (already correct, no change), tests (46/46), full suite 9520/9520 green2026-09-29382daf3 harvard sprint 56 harvard sprint 56: error reference docs page (/docs/errors.html)2026-09-292b36e75 harvard sprint 55 harvard sprint 55: docs rate limits page — /docs/rate-limits.html as working reference of the real rate-limit surface (verified against functions code: layer-1 100 req/min per IP sliding-window throttle in _middleware.js + rate-limit.js with /api/health /api/status exemptions, CF-Connecting-IP-first IP resolution, exact 429 shape {error rate_limited, message, retry_after_seconds, ip} + Retry-After header, no-penalty-on-denial, per-isolate in-memory caveat, rate_limited error-class logging; layer-2 KV token buckets in lib/api-keys.js: intel/mcp/v1eval tiered perMin anon 2/free 10/pro 60 per 60s, issuance 3/hour, audits 10/hour, goals 30/min, no state write on rejection, dev-mode skip; exact REST 429 {ok:false, error rate_limit_exceeded/issuance_rate_limit_exceeded, retry_after_seconds} + retry-after header, v1 429 {request_id, error rate_limited, retry_after_seconds} with NO Retry-After header; abuse section honestly documents no lockout/ban/403-on-abuse and KV overshoot limitation; cross-isolate limiter DRAFT-badged as planned-only; zero invented headers/limits/endpoints). docs hub card + tree link the page (LIVE badge), api-reference footer links it (gen-docs.mjs template updated, regen verified timestamp+footer only: 146 signals 24 live/88 degraded/34 pending), sitemap.xml. tests/harvard-sprint55.test.mjs (36/36: honesty guards, no-invented-* guards, planned-section DRAFT check, theme, nav/footer, hub, sitemap, run.mjs registration). full suite 9077/9077 ALL GREEN.2026-09-29843cc45 harvard sprint 54 harvard sprint 54: docs API keys page — /docs/api-keys.html as working reference of the real auth surface (verified against functions code: POST /api/keys issuance flow + key-shown-once + sk_live_ + 3/IP/hour limit, x-api-key / ?key= auth with Bearer-on-v1 only, GET /api/keys/usage, anon/free/pro tiers with pro reserved, exact 401/429/403/503 error shapes, 403 never-fires-today, v1 monthly 1000-call seam; rotation / revocation / usage dashboard / pro issuance DRAFT-badged as planned-only, zero invented endpoints). docs hub card + tree link the page (LIVE badge), api-reference footer links it (gen-docs.mjs template updated, regen verified timestamp+footer only: 146 signals 24 live/88 degraded/34 pending), sitemap.xml. tests/harvard-sprint54.test.mjs (40/40: honesty guards, no-invented-endpoint guards, planned-section DRAFT checks, theme, nav/footer, hub, sitemap, run.mjs registration). full suite 8979/8980 — one transient chatbot-sprint28 failure passed standalone 38/38, not mine.2026-09-29e0975ab harvard sprint 53 harvard sprint 53: docs SDKs page — /docs/sdks.html as honest planned-design page (verified zero SDK reality: no published packages, no client code, no package names anywhere in the repo; every planned section DRAFT-badged, package names/method names/install commands explicitly not-final, no invented SDK names; what-works-today points at the real /api/intel + api reference). docs hub card + tree link the page (COMING badge kept), api-reference footer links it (gen-docs.mjs template updated, regen verified: 146 signals 24 live/88 degraded/34 pending, timestamp+footer only), sitemap.xml. tests/harvard-sprint53.test.mjs (29/29: honesty guards, no-invented-package/method guards, planned sections, theme, nav/footer, hub, sitemap, run.mjs registration). cross-track repair: board.html footer /docs/ link restored (72h track stats refresh dropped it again, same as sprint 52); chatbot-sprint41 test relaxed to match chatbot-42's deliberate 3-arg renderBuyListPanelV1 signature. full suite: 8868/8868 ALL GREEN.2026-09-29b7ba05c harvard sprint 52 harvard sprint 52: docs webhooks page — /docs/webhooks.html (honest planned-design page: verified no webhook events/endpoints/signing exist in functions/, so every section is DRAFT-badged, no invented event names like parcel.updated, HMAC header + retry policy marked not-final; what-works-today section polls the real /api/intel). docs hub card + tree link the page (COMING badge kept), api-reference footer links it (gen-docs.mjs template updated, regen verified: 146 signals 24 live/88 degraded/34 pending, timestamp-only otherwise), sitemap.xml. tests/harvard-sprint52.test.mjs (30/30: honesty guards, no-invented-events guards, planned sections, theme, nav/footer, hub, sitemap, run.mjs registration — registration landed in 00eed1b's commit during a shared-tree race). board.html footer: added missing /docs/ link to restore sprint-51's every-page invariant (another track's stats refresh had dropped it). full suite: 8799/8799 ALL GREEN (one transient chatbot-sprint28 failure on an earlier run passed standalone 38/38 and cleared on re-run).2026-09-29e01361c harvard sprint 51 harvard sprint 51: documentation site kickoff (phase 3 sprints 61-70 block, started early after the SEO 20-page series closed at sprint 50) — /docs/ hub with the full docs information architecture (getting started [live], api reference [live, links the generated /api-reference.html], webhooks [coming], sdks [coming]) + /docs/getting-started.html (step 0: api key auth via POST /api/keys + x-api-key header + tier table; step 1: first parcel query via /api/intel with the real response envelope; step 2: first chat search; step 3: first list build, honest about the builder's demo preview). dark docs theme (#0b0e14, #17c964), lowercase shinnslist, no invented parcel counts. docs linked from the topbar nav + footer on all 35 site-chrome pages, the 6 html5up app footers, ideation-lab footer, and the api-reference footer (gen-docs.mjs template updated so regens keep the link — footer also lowercased to shinnslist poc). sitemap.xml carries both new pages. tests/harvard-sprint51.test.mjs (33/33) registered in run.mjs; neighbor suites 41-50 still green (726/726 total).2026-09-295b11e3a harvard sprint 50 harvard sprint 50: SEO metro page 20 — Albemarle County (50,999 parcels, wave 2's sixth locality, true #16 VA locality, county's own ArcGIS Online org, closing the Charlottesville orbit), 20 of 20 live — the 20-page 'assumable mortgages in [city]' series is complete; dynamic footer now cross-links all 20 metros on every page, sitemap + SEO-METROS registry updated, series retrospective section, census-population guard + [DEMO] tagging, tests/harvard-sprint50.test.mjs (55/55) registered in run.mjs, neighbors 41-49 green2026-09-290de5dfe harvard sprint 49 harvard sprint 49: SEO metro pages 18+19 — Montgomery County (45,151 parcels, wave 2's ninth locality, true #19 VA locality, richest wave-2 layer by field count) + Rockingham County (51,898 parcels, wave 3's fourth locality, true #24 VA locality on the county's own ArcGIS server, opening the Shenandoah Valley cluster), extending the western Virginia corridor past Roanoke into the New River Valley, dynamic footer now cross-links all 19 metros on every page, sitemap + SEO-METROS registry updated (19 of 20 live), tests/harvard-sprint49.test.mjs (79/79, census-population guard, [DEMO] tagging) registered in run.mjs, sprint41 75/75 + sprint42 58/58 + sprint43 64/64 + sprint44 67/67 + sprint45 70/70 + sprint46 72/72 + sprint47 76/76 + sprint48 77/77 still pass2026-09-29657bd3a harvard sprint 48 harvard sprint 48: SEO metro pages 16+17 — Roanoke City (44,490 parcels, wave 3's first locality, true #21 VA locality in the corrected order, one of the richest layers ingested yet) + Roanoke County (47,542 parcels, wave 3's second locality, true #22 VA locality, 347-field parcel-report layer with per-record county sync stamps), opening the Roanoke Valley cluster, dynamic footer now cross-links all 17 metros on every page, sitemap + SEO-METROS registry updated (17 of 20 live), tests/harvard-sprint48.test.mjs (77/77, census-population guard, [DEMO] tagging) registered in run.mjs via hunk-level staging, sprint41 75/75 + sprint42 58/58 + sprint43 64/64 + sprint44 67/67 + sprint45 70/70 + sprint46 72/72 + sprint47 76/76 still pass2026-09-29983e8fc harvard sprint 47 harvard sprint 47: SEO metro pages 14+15 — Portsmouth (36,241 parcels, wave 3's third locality, true #23 VA locality in the corrected order, broadest ownership-and-value profile in Hampton Roads yet) + Suffolk (45,498 parcels, true #18 VA locality in the corrected wave-2 order, richest layer ingested yet — Parcels_Approved + assessor landbook join), completing the 6-metro Hampton Roads cluster, dynamic footer now cross-links all 15 metros on every page, sitemap + SEO-METROS registry updated (15 of 20 live), tests/harvard-sprint47.test.mjs (76/76, census-population guard, [DEMO] tagging) registered in run.mjs via hunk-level staging, sprint41 75/75 + sprint42 58/58 + sprint43 64/64 + sprint44 67/67 + sprint45 70/70 + sprint46 72/72 still pass2026-09-29eb47ee7 harvard sprint 46 harvard sprint 46: SEO metro pages 12+13 — Newport News (54,443 parcels, wave 1's 10th and final locality, richest wave-1 layer by field count) + Hampton (51,797 parcels, true #15 VA locality — wave 2's fifth, thinnest layer yet), extending the Hampton Roads cluster to 4 metros, dynamic footer now cross-links all 13 metros on every page, sitemap + SEO-METROS registry updated (13 of 20 live), tests/harvard-sprint46.test.mjs (72/72, census-population guard, [DEMO] tagging) registered in run.mjs, sprint41 75/75 + sprint42 58/58 + sprint43 64/64 + sprint44 67/67 + sprint45 70/70 still pass2026-09-29e05be57 harvard sprint 45 harvard sprint 45: SEO metro pages 10+11 — Spotsylvania (69,449 parcels, true #14 wave-2) + Frederick (51,676 parcels, wave-2 final), extending the Northern Virginia-adjacent cluster to 11 metros, dynamic footer now cross-links all 11 metros on every page, sitemap + SEO-METROS registry updated, tests/harvard-sprint45.test.mjs (70/70) registered in run.mjs, sprint41 75/75 + sprint42 58/58 + sprint43 64/64 + sprint44 67/67 still pass2026-09-293dfba35 harvard sprint 44 harvard sprint 44: SEO metro pages 8+9 — Stafford (62,948 parcels) + Prince William (159,914 parcels), extending the Northern Virginia cluster to 9 metros, dynamic footer now cross-links all 9 metros on every page, sitemap + SEO-METROS registry updated, tests/harvard-sprint44.test.mjs (67/67) registered in run.mjs, sprint41 75/75 + sprint42 58/58 + sprint43 64/64 still pass2026-09-29b74978e harvard sprint 43 harvard sprint 43: SEO metro pages 6+7 — Arlington (38,683 parcels) + Loudoun (132,866 parcels), completing the Northern Virginia cluster, dynamic footer now cross-links all 7 metros on every page, sitemap + SEO-METROS registry updated, tests/harvard-sprint43.test.mjs (64/64) registered in run.mjs, sprint41 75/75 + sprint42 58/58 still pass. Also lands sprint 42's uncommitted wiring (sitemap, SEO-METROS, generator registry, run.mjs registration) left dirty by c939e40.2026-09-29c939e40 harvard sprint 42 harvard sprint 42: SEO metro pages 4+5 — Fairfax (369,419 parcels) + Alexandria (47,414 parcels), dynamic footer linking all 5 metros on every page, sitemap + SEO-METROS registry updated, tests/harvard-sprint42.test.mjs (58/58) registered in run.mjs, sprint41 suite still 75/752026-09-29639918a harvard sprint 41 harvard sprint 41: SEO metro series launch — template + generator + first 3 virginia metros (richmond, virginia beach, norfolk)2026-09-292ab3770 harvard sprint 40 harvard sprint 40: checkout series closer — full-flow hardening pass2026-09-2993c35b3 harvard sprint 39 harvard sprint 39: subscription management UI in the dashboard — current plan across the 4 modeled tiers (free/$29/$99/$349), upgrade/downgrade picker wired to part-3's 15/30-day proration math + shinnslist/stripe-plan-change v1 contract, mock saved payment methods (add/remove/default, PAN never stored), mock invoice history with downloadable JSON receipts; demo-only, zero network, nothing charged2026-09-295b992ab harvard sprint 38 harvard sprint 38: checkout part 3 — receipt view, simulated decline/failure states with retry, plan change wiring2026-09-29f1868c8 harvard sprint 37 harvard sprint 37: checkout flow part 2 (billing form + order review + confirmation)2026-09-2920e2321 harvard sprint 36 harvard sprint 36: checkout flow part 1 (plan cards + cart UI + billing scaffold)2026-09-29242db4f harvard sprint 35 harvard sprint 35: list builder UI part 5 (match-quality panel — series closer)2026-09-291a0258f harvard sprint 34 harvard sprint 34: list builder UI part 4 (list-to-alert wiring)2026-09-2953657ae harvard sprint 33 harvard sprint 33: list builder UI part 3 (export CSV + share links)2026-09-293e31925 harvard sprint 32 harvard sprint 32: list builder UI part 2 (saved lists)2026-09-294b7d538 harvard sprint 31 harvard sprint 31: list builder UI part 1 (filters, preview count)2026-09-29eafcb5a harvard sprint 30 harvard sprint 30: dashboard polish pass, no backend2026-09-29bcb337c harvard sprint 29 harvard sprint 29: dashboard activity + notifications mock, no backend2026-09-29b470678 harvard sprint 28 harvard sprint 28: dashboard billing mock, no backend2026-09-29ff49c7c harvard sprint 27 harvard sprint 27: dashboard API usage mock, no backend2026-09-29f3b1b0f harvard sprint 26 harvard sprint 26: dashboard shell + saved searches mock, no backend2026-09-293b33c9d harvard sprint 25 harvard sprint 25: account settings UI mock, no backend2026-09-291b7aa46 harvard sprint 24 harvard sprint 24: demo sign-in trigger on rollout pages, no backend2026-09-29f610084 harvard sprint 23 harvard sprint 23: auth UI rollout to app/audit/composer/console/storefront2026-09-292f726cd harvard sprint 21 harvard sprint 21: auth UI (login buttons, no backend)2026-09-2963b68ce harvard sprint 20 harvard sprint 20: API page interactive playground2026-09-29cb7753d harvard sprint 19 harvard sprint 19: lists page — sample data preview2026-09-292b6cf52 harvard sprint 18 harvard sprint 18: funnel page build2026-09-29da58263 harvard sprint 17 harvard sprint 17: CTA button test (5 variants)2026-09-29712733a harvard sprint 16 harvard sprint 16: homepage headline test (5 variants)2026-09-29594e774 harvard sprint 15 harvard sprint 15: A/B test framework setup2026-09-29216b9a5 harvard sprint 14 harvard sprint 14: accessibility audit (WCAG AA, fix issues)2026-09-293268cb0 harvard sprint 13 harvard sprint 13: performance audit (Lighthouse, fix issues)2026-09-299318b87 harvard sprint 12 harvard sprint 12: social share images (OG images for all pages)2026-09-297dd0af9 harvard sprint 11 harvard sprint 11: email capture waitlist component2026-09-292013257 harvard sprint 10 harvard sprint 10: blog index + 3 posts2026-09-2933f175d harvard sprint 9 harvard sprint 9: off-market-properties SEO landing page2026-09-29686595c harvard sprint 8 harvard sprint 8: motivated-seller-list SEO landing page2026-09-29dc04f38 harvard sprint 7 harvard sprint 7: assumable-mortgage SEO landing page
chatbot — conversational ai LIVE
sprint commits from the chatbot track: chat UI, ranking, lists integration. Most recent first. Every entry cites the commit it came from.
2026-09-30b98f01a chatbot sprint 58 chatbot sprint 58: shareable api calls + playground/docs handoff2026-09-294955a3a chatbot sprint 57 chatbot sprint 57: batch run-all + side-by-side signal comparison (api integration, seventh slice)2026-09-29416169b chatbot sprint 56 chatbot sprint 56: quota + freshness honesty for disclosed api calls (api integration, sixth slice)2026-09-2989dbfaa chatbot sprint 55 chatbot sprint 55: code-snippet export with language picker (api integration, fifth slice)2026-09-295311cdb chatbot sprint 54 chatbot sprint 54: api-call history + reuse in chat — session history panel with one-tap re-run, chip editing and pinnable localStorage presets (api integration, fourth slice)2026-09-2959776dc chatbot sprint 53 chatbot sprint 53: editable api-call parameters in chat — chip editing + inline re-run (api integration, third slice)2026-09-292ac0b9a chatbot sprint 52 chatbot sprint 52: execute the api call from chat — one-tap run + inline live response preview (api integration, second slice)2026-09-29c107c27 chatbot sprint 51 chatbot sprint 51: show the api call behind each chat search — copyable curl (api integration, first slice)2026-09-2955adfd6 chatbot sprint 50 chatbot sprint 50: in-chat one-tap purchase — save + buy (lists integration, final slice)2026-09-2932c4e76 chatbot sprint 49 chatbot sprint 49: analyze this list in chat — list → chatbot handoff (lists integration, ninth slice)2026-09-29c55cbb9 chatbot sprint 48 chatbot sprint 48: duplicate-list detection at purchase time (lists integration, eighth slice) — plOverlapV1/plOverlapLineV1/plOverlapTotalLineV1 in assets/purchased-lists.js (parcel-set overlap vs the local library, ownedCount as the union across entries, newCount = genuinely-new parcels, en+es copy); lists.html gains chatHandoffOverlapV1, chatHandoffDupWarnV1 warning block (per-entry lines, money line, buy-anyway + review-your-lists, browser-only demo honesty note) and bootApiV1 so onBuy re-enters with {force:true} — first buy click warns instead of recording when overlap exists; tests/chatbot-sprint48.test.mjs 28/28, full suite 9520/9520 ALL GREEN2026-09-29352e20b chatbot sprint 47 chatbot sprint 47: purchased-list detail view — per-parcel freshness + refresh (lists integration, seventh slice)2026-09-299fd128a chatbot sprint 46 chatbot sprint 46: list sharing — shareable links (lists integration, sixth slice)2026-09-294ee68fd chatbot sprint 45 chatbot sprint 45: list management — rename + parcel removal (lists integration, fifth slice)2026-09-291ada4ef chatbot sprint 44 chatbot sprint 44: purchased-lists library — 'your lists' (lists integration, fourth slice)2026-09-29005b0e3 chatbot sprint 43 chatbot sprint 43: per-list cost estimate before purchase (lists integration, third slice)2026-09-29832f409 chatbot sprint 42 chatbot sprint 42: render the chat handoff — 'created from chat' attribution + pre-filled list builder (lists integration, second slice)2026-09-2900eed1b chatbot sprint 41 chatbot sprint 41: one-tap 'buy this as a list' handoff (lists integration, first slice)2026-09-2940e6b59 chatbot: update 10 stale pinned assertions to current call signatures (test gate green). sprint 39 changed ranking call sites but only updated the pinned sprint-33 assertion; the older pins still asserted the pre-sprint-38 shapes. per established practice (sprint 37/39), the pins move to match chat.html — chat.html behavior untouched: sprint7/24/27/28 pins now assert the 7-arg propertyCard(p,kind,zip,parsed,rankNote,moveNote,whyApi) signature and the moveNote arg's trailing comma (sprint 38's whyApi object follows it); sprint29's v3-call-site count pin goes 7 -> 15 (sprint 35 +3 top-drivers steering re-ranks, sprint 37 +2 session rank-command re-ranks, sprint 39 +3 save-as-default re-rank sites), v2 count still 3; sprint34's eval now includes the RANK-COMMANDS chunk so freshResetAllV1's sessCmdResetV1() (sprint 37) resolves instead of throwing inside the try. full suite: 8703/8703 ALL GREEN.2026-09-29ff77e65 chatbot sprint 40 chatbot sprint 40: tuning health — 'review my tuning' surface. tuneHealthV1 flags contradictory nudges (driver nudged both ways, keep>0 and drop>0) and stale nudges (stored weight points opposite the current query's stated intent from sprint-39's lastQueryIntentV1); dismissed drivers are never flagged, never pruned, never fought, and the parcel-level 'dismissed' key is never offered. tunePruneV1/tuneRestoreV1 park/restore one driver's nudges inside the pruned bucket of the SAME adaptive store blob (adaptLoadV1/adaptSaveV1 sanitize it; no new stores, no new label sources — ADAPT_KEYS/ADAPT_LABELS namespace only, 9 keys unchanged). tuneHealthLineV1/tuneChangeLineV1 are pure en+es plain-language lines naming the flag and what changed ('pruned your rate band — parked its 3 more and 2 less nudges; nothing was deleted'). tuneHealthRowV3 mounts the one-tap surface in the prefs panel after 'reset my tuning': prune chips on flagged drivers, restore chips on parked drivers, honest healthy line when clean; panel rebuilds + A11Y announce after each action. tests/chatbot-sprint40.test.mjs (28/28) registered in tests/run.mjs; neighbors 31-39 still green; full suite 8693/8703 (10 failures pre-existing in sprints 7/24/27/28/34, verified identical on the clean tree).2026-09-29918769c chatbot sprint 39 chatbot sprint 39: query-intent ranking. extractQueryIntentV1 maps the parsed query's stated criteria to the real v2/v3 scorer driver keys (rate band -> rate, price band -> price, llc -> llc, absentee -> absentee; landmarks, land-only, negations, and the assumable/motivated signals have no positive scorer driver and are deliberately never mapped). sessQueryIntentSetV1 applies them as a per-query session overlay (replaced every query, never accumulated, never persisted silently) through the same ADAPT_NUDGE=3 tap as the sprint-37 session overlay; cmdAdaptMergedV1 folds it into every ranking read, with cmdAdaptMergedV1(true) keeping the prefs panel and 'tuned for you' line about the stored profile tuning only. the bot's line names the quoted query plus the mapped drivers from ADAPT_LABELS (en+es: 'for "near uva under 3.5%": ranking your rate band first'), rendered ahead of the tune line on both main and filtered result views; one-tap 'save this as my default ranking' persists the mix via adaptNudgeV1, drops the overlay so the weight never double-applies, and re-ranks in place (dismissed drivers never fought at set or save time). dismissed-skipped honesty throughout. no new stores, no new label sources. tests/chatbot-sprint39.test.mjs (31/31), registered in tests/run.mjs; updated pinned sprint33 assertion (same practice as sprint 37); neighbors 35/37/38 green.2026-09-2978a18a7 chatbot sprint 38 chatbot sprint 38: confidence surfacing on ranked cards. rankConfV1 derives an honest per-card band (strong match / decent match / thin read, en+es) from the real v2/v3 scorer math: score margin to the next card relative to the list spread, count of named weight-drivers (whyParts with w>0; fresh-only naming parts don't count), and whether fresh-tagging drove the position; demoted cards get no band. the tappable line sits on the card (rankNote-gated, hidden in original-order view) and opens the existing 'why this order' drill-down (details.whyorder); a 'thin read' adds the one-tap 'tell me more about what you want' hint into the preference surface (renderPrefsPanelV1). wired in paintSectionsV2 + filtered view with the margin computed against the next card of the FULL list, not the visible slice. no new stores, no new label sources. tests/chatbot-sprint38.test.mjs (27/27), registered in tests/run.mjs; neighbors 33/35/37 green, no regressions.2026-09-296524f32 chatbot sprint 37 chatbot sprint 37: natural-language ranking commands. parseRankCmdV1 maps chat-box phrases ('rank by rate only' -> rate/more, 'hide llc' -> llc/less, 'prefer llc-owned', 'always rank price first' -> persist) to the real ADAPT_KEYS/ADAPT_LABELS namespace; unknown phrases ('prefer cash deals', 'show me fresher first') get the honest 'i can rank by' one-tap menu instead of a guess. nudges use the same ADAPT_NUDGE=3 tap as the steering chips: session-scoped by default via the in-memory SESS_CMD_ADAPT overlay, 'always'/'siempre' persists through adaptNudgeV1. cmdAdaptMergedV1() (persisted + session overlay) feeds every ranking read site (initial rank, driverTune/driverOff, filtered view, tune lines, prefs-panel multipliers); reset-my-tuning and start-fresh clear the overlay too. dismissed drivers are never fought (declined with a restore pointer). one-line bot confirm names the driver, en+es ('ranking by your rate band first this session'); 'ranking commands' hint chip set in the query bar. tests/chatbot-sprint37.test.mjs (32/32); updated pinned sprint33 assertions; registered in tests/run.mjs; no regressions.2026-09-2945c1678 chatbot sprint 36 chatbot sprint 36: ranking history — explain rank changes between sessions. per-browser localStorage snapshot (card id, 1-based rank in its section, top 3 whyParts driver keys) written at session end (pagehide/visibilitychange), never wiped on idle sessions; on the next session's first results view, cards moved >=3 places get a tappable 'moved' badge whose one-tap line names the real driver change (added/removed top keys labeled from the existing ADAPT_LABELS table, fresh: normalized), plus a 'what changed since last visit' strip above the list; en+es copy throughout. no new stores or label sources; tests/chatbot-sprint36.test.mjs (20/20), no regressions.2026-09-29b485953 chatbot sprint 35 chatbot sprint 35: adaptive-ranking transparency + user controls — per-card 'why this order' drill-down (tappable driver weights from the real v2/v3 scorer via entry.whyParts: key, effective weight, base, adapt multiplier, en+es; fresh-tagged parts name v3's x2 this-session boost), one-tap 'more/less of this' steering persisted in the existing adaptive driver-weight store (adaptNudgeV1: keep/drop += 3, same store the scorer scales through; live in-place re-rank after a nudge; never fights an explicit dismissal), 'your top drivers' ranking-profile summary in the prefs panel (all adaptive keys sorted by live multiplier, each with steering chips; rebuilds after resets/nudges so multipliers stay honest), fixed the scorer's rankNote to only name drivers that actually contributed (fb-dismissed drivers no longer named)2026-09-2946ac337 chatbot sprint 34 chatbot sprint 34: preference-memory merge — saved searches + anchored query history fold into the adaptive profile at boot (first ranking reflects established intent); one-tap 'start fresh' reset next to 'restore drivers' in the prefs panel2026-09-292d7c9a7 chatbot sprint 33 chatbot sprint 33: adaptive per-user ranking profile from driver-feedback history2026-09-29410d33c chatbot sprint 32 chatbot sprint 32: driver-feedback surface finished — per-driver ✕ chips in the ✦ badge explainer + 'why did this move?' micro-copy on reordered cards2026-09-29c7930ef chatbot sprint 31 chatbot sprint 31: driver feedback loop on the ranking explanation (one-tap 'that's wrong' per named driver — dismissal persists per-browser in localStorage, zero-weights/demotes the driver in the v2/v3 scorer, re-ranks the live view in place; 'restore drivers' reset in the prefs panel)2026-09-29c2dd15f chatbot sprint 30 chatbot sprint 30: conversational rank explanations (bot-voiced 'i ranked these for you because…' line naming active drivers, en+es, with one-tap 'just show the list' dismiss; sticky per-browser, re-enable in prefs panel)2026-09-29cf14db6 chatbot sprint 29 chatbot sprint 29: session freshness driver (new-session signals re-weight ranking)2026-09-296487b71 chatbot sprint 28 chatbot sprint 28: personalization v2 (preference persistence + ranked results)2026-09-29c7e1da7 chatbot sprint 27 chatbot sprint 27: personalization v1 (preference learning)2026-09-29f37a88b chatbot sprint 26 chatbot sprint 26: ambiguity disambiguation2026-09-29ef0fc2b chatbot sprint 25 chatbot sprint 25: conversational refinement2026-09-2908fe7b7 chatbot sprint 24 chatbot sprint 24: why-this-match explanations2026-09-29760b7a6 chatbot sprint 23 chatbot sprint 23: query repair chips + synonym expansion2026-09-29cdc2ca0 chatbot sprint 22 chatbot sprint 22: query understanding v2 (multi-zip, either/or, negation)2026-09-29c309a03 chatbot sprint 21 chatbot sprint 21: query understanding v2 (complex queries)2026-09-29f8e145c chatbot sprint 20 chatbot sprint 20: accessibility (screen reader, keyboard nav)2026-09-29021ef71 chatbot sprint 19 chatbot sprint 19: multi-language basics (Spanish)2026-09-29a10b9f7 chatbot sprint 18 chatbot sprint 18: sentiment detection (frustrated -> offer help)2026-09-2987bc94e chatbot sprint 17 chatbot sprint 17: fallback to human (contact form)2026-09-29b14aa54 chatbot sprint 16 chatbot sprint 16: help system (what can you do?)2026-09-29f216822 chatbot sprint 15 chatbot sprint 15: onboarding flow (first-time user tutorial)2026-09-29489f3c9 chatbot sprint 14 chatbot sprint 14: share search (copy link with params)2026-09-29a7c99ae chatbot sprint 13 chatbot sprint 13: export results (CSV download)2026-09-295e0946b chatbot sprint 11 chatbot sprint 11: voice input (Web Speech API)2026-09-2926223f8 chatbot sprint 10 chatbot sprint 10: typo tolerance2026-09-29f19418c chatbot sprint 9 chatbot sprint 9: natural language filters2026-09-2907b5ce7 chatbot sprint 8 chatbot sprint 8: comparison mode for property cards2026-09-2983dceab chatbot sprint 7 chatbot sprint 7: rich property cards with image placeholder and map link2026-09-29627a3d9 chatbot sprint 6 chatbot sprint 6: proactive suggestions after results (combo deals, cross-signal, narrow/widen follow-ups)
data depth — engine & data LIVE
sprint commits from the data-depth track: county ingestions, engine work. Most recent first. Every entry cites the commit it came from.
2026-09-302603cd0 datadepth sprint 51 datadepth sprint 51: statewide dedup key design + live audit runner (first slice)2026-09-2934fa8f4 datadepth sprint 50 datadepth sprint 50: Manassas city — 13,646 parcels, #40 VA locality per Census co-est2024, FIPS 516832026-09-2920ce7f6 datadepth sprint 49 datadepth sprint 49: Charlottesville city — 13,987 parcels, true #39 VA locality per Census co-est2024, FIPS 515402026-09-2998dbd8a datadepth sprint 48 datadepth sprint 48: Shenandoah County — 35,201 parcels, true #38 VA locality per Census co-est2024, FIPS 511712026-09-29708fff1 datadepth sprint 47 datadepth sprint 47: Henry County — 54,273 parcels, true #37 VA locality per Census co-est2024, FIPS 510892026-09-2985a048a datadepth sprint 46 datadepth sprint 46: Harrisonburg City — 13,583 parcels, true #36 VA locality per Census co-est2024, FIPS 516602026-09-293a67ca2 datadepth sprint 45 datadepth sprint 45: Washington County — 39,701 parcels, true #35 VA locality per Census co-est2024, FIPS 511912026-09-29188eaf2 datadepth sprint 44 datadepth sprint 44: Campbell County — 39,190 parcels, true #34 VA locality per Census co-est2024, FIPS 510312026-09-298047807 restore datadepth sprint 43 test registration in tests/run.mjs (dropped by the chatbot sprint 47 commit during a concurrent edit)2026-09-29f0d20b0 datadepth sprint 43 datadepth sprint 43: Franklin County — 49,514 parcels, true #33 VA locality per Census co-est2024, FIPS 510672026-09-29c1b3c8d datadepth sprint 42 datadepth sprint 42: Culpeper County — 25,832 parcels, true #32 VA locality per Census co-est2024, FIPS 510472026-09-296558061 datadepth sprint 41 datadepth sprint 41: Pittsylvania County — 61,056 parcels, true #31 VA locality per Census co-est2024, FIPS 511432026-09-29af16436 datadepth sprint 40 datadepth sprint 40: York County — 28,522 parcels, true #30 VA locality per Census co-est2024, FIPS 511992026-09-29a6c7de1 datadepth sprint 39 datadepth sprint 39: Fauquier County — 36,214 parcels, true #29 VA locality per Census co-est2024, FIPS 510612026-09-29029a442 datadepth sprint 38 datadepth sprint 38: Augusta County — 43,042 parcels, true #28 VA locality per Census co-est2024, FIPS 510152026-09-2995026a3 datadepth sprint 37 datadepth sprint 37: ingest Lynchburg city (FIPS 51680), true VA Census rank #27, 32,618 parcels2026-09-29da1f3a9 datadepth sprint 36 datadepth sprint 36: correct OBJECTID 1 fixture values — Grantor2 'SHAHINIAN AL HENRY' (was 'SMELAND PETER M & NANCY LEE'), LandDes1 '9 Homesite' (was null); re-verified live against the county server (outFields=* query 2026-09-29), docs/BEDFORD-INGESTION.md already carried the correct values; tests/datadepth-sprint36.test.mjs 41/41 green2026-09-2993f4b12 datadepth sprint 36 datadepth sprint 36: ingest Bedford County VA (wave 3, sixth locality, true #26 per Census 2024 estimate 82,182, FIPS 51019)2026-09-292241fa4 datadepth sprint 35 datadepth sprint 35: James City County VA ingestion (wave 3, fifth locality) — 36,431 parcels (true #25 VA locality per Census co-est2024, largest unrepresented after Rockingham), county's own ArcGIS Server property.jamescitycountyva.gov ParcelViewer layer 1 (163 fields), docs/JAMES-CITY-INGESTION.md, county_parcels.js/parcels.js wiring, tests/datadepth-sprint35.test.mjs (39/39), neighbor suites 11-34 count-pinned updates2026-09-290ebed48 datadepth sprint 34 datadepth sprint 34: Rockingham County VA (FIPS 51165) — 51,898 parcels, wave 3 fourth locality2026-09-295c35af2 datadepth sprint 33 datadepth sprint 33: Portsmouth City ingestion (wave 3)2026-09-2988971f9 datadepth sprint 32 datadepth sprint 32: Roanoke County ingestion (wave 3)2026-09-293de010e datadepth sprint 31 datadepth sprint 31: Roanoke City ingestion (wave 3)2026-09-294c809b2 datadepth sprint 30 datadepth sprint 30: Frederick County ingestion (wave 2)2026-09-299efe459 datadepth sprint 29 datadepth sprint 29: Montgomery County ingestion (wave 2)2026-09-293c12f13 datadepth sprint 28 datadepth sprint 28: Suffolk ingestion (wave 2)2026-09-294fdd55a datadepth sprint 27 datadepth sprint 27: Hanover ingestion (wave 2)2026-09-29eed3473 datadepth sprint 26 datadepth sprint 26: Albemarle ingestion (wave 2)2026-09-293ebcde8 datadepth sprint 25 datadepth sprint 25: Hampton ingestion (wave 2)2026-09-299d95ebc datadepth sprint 24 datadepth sprint 24: Spotsylvania ingestion (wave 2)2026-09-29d2e591f datadepth sprint 23 datadepth sprint 23: Alexandria ingestion (wave 2)2026-09-2974bc699 datadepth sprint 22 datadepth sprint 22: Stafford ingestion (wave 2)2026-09-29eef59c2 datadepth sprint 21 datadepth sprint 21: Arlington ingestion (wave 2)2026-09-29e242e8b datadepth sprint 20 datadepth sprint 20: Newport News ingestion (wave 1)2026-09-2952777bc datadepth sprint 19 datadepth sprint 19: Richmond City ingestion (wave 1)2026-09-2951940e0 datadepth sprint 18 datadepth sprint 18: Chesapeake City ingestion (wave 1)2026-09-29e09c309 datadepth sprint 17 datadepth sprint 17: Norfolk City ingestion (wave 1)2026-09-29d7affbd datadepth sprint 16 datadepth sprint 16: Henrico County ingestion (wave 1)2026-09-29f4cd3f2 datadepth sprint 15 datadepth sprint 15: Chesterfield County ingestion (wave 1)2026-09-293cba4a6 datadepth sprint 14 datadepth sprint 14: Loudoun County ingestion (wave 1)2026-09-29eea6154 datadepth sprint 13 datadepth sprint 13: Prince William County ingestion (wave 1)2026-09-29d67a2f4 datadepth sprint 12 datadepth sprint 12: Virginia Beach ingestion (wave 1)2026-09-29e0f7ad4 datadepth sprint 11 datadepth sprint 11: Fairfax County ingestion (wave 1)2026-09-29ec5ba75 datadepth sprint 10 datadepth sprint 10: parcel detail endpoint2026-09-295c99dee datadepth sprint 9 datadepth sprint 9: GIS concurrency throttle2026-09-2900dbe7b datadepth sprint 8 datadepth sprint 8: error monitoring with spike alerts2026-09-29c44555b datadepth sprint 7 datadepth sprint 7: input validation (ZIP format, injection prevention)2026-09-293f31da3 datadepth sprint 6 datadepth sprint 6: 100 req/min per-IP rate limiting on API functions
signal adapter work — batches & deploys LIVE
adapter batch + archive batch commits that grew the signal catalog, and deploy checkpoints. Most recent first. Every entry cites the commit it came from.
2026-09-28ff9549c adapters batch52: virtual_driving_for_dollars, estate_sales, dumpster_out_front, orphans_no_family_ties (degraded/degraded/degraded/pending)2026-09-2849afa6b adapters batch47: pre_agent_sell_mode, Prepped, Acreage, code_lien_foreclosure (degraded/degraded/pending/degraded)2026-09-288d9bc1d adapters batch53: house_hack_fit, unpermitted_to_sweat_equity, eviction_timeline_risk, old_single_owners_unmanageable (degraded/degraded/pending-documented/degraded)2026-09-286f4b2c6 adapters batch54: Investor specials, mislisted_sqft, Paranormal listings in areas with history (composite implemented pending-by-design, honest pending, honest pending)2026-09-289aef88a adapters batch51: seller_trust_score, mixed_zoning_live_work, property_condition_risk_score, listing_truth_gap (mixed_zoning_live_work upgraded pending->degraded v1; other three stay honest pending)2026-09-28c961945 adapters batch48: holder_mix_map, farm_grant_subsidy_zone, hyperlocal_catalyst_monitor, post_purchase_tax_reassessment (all degraded: holder tract-tenure via Census Reporter, farm national-designation reference, hyperlocal verified RSS news leg, tax VA statute-cycle leg)2026-09-28608d132 adapters batch50: dscr_projected_income_list, hot_spring_property_play, water_x_distress_matrix, no_airbnb_license_acreage (degraded/degraded/pending/pending)2026-09-2874fb4ee adapters batch49: str_regulatory_arbitrage_map (degraded), heir_fractional_assemblage (pending), mechanic_lien_distress (pending), best_fit_buyer (pending) — 66/66 new assertions; suite 3102/3102 green2026-09-28238bf85 adapters batch45: boundary_surplus_land, teardown_option_value, boom_town_follower, seasonal_water_temporal (degraded/degraded/degraded/degraded)2026-09-28ba1ce84 adapters batch44: hoa_superpriority_lien, skip_trace_osint_cheap, keep_one_wall_tax, zoning_arbitrage (all 4 degraded; sibling test-pin reconciles)2026-09-282bc2353 adapters batch46: self_storage_retiring_owner, expired_listing_owner_leads, fire_casualty_permit, str_lease_arbitrage_absentee (pending/pending/pending/pending)2026-09-283ce3781 adapters batch41: verified_seller_landing, marketing_compliance_risk, institutional_owner_entity_resolution, post_divorce_1_2yr (pending/degraded/pending/pending)2026-09-28e2af47f adapters batch43: census_flip_tract (live), oldest_child_graduating (degraded), elderly_pre_succession (degraded), distress_search_landing_funnel (degraded)2026-09-28cc906af adapters batch42: early_change_motivation_score, barn_to_convert, yard_to_storage_conversion, absentee_str_conversion_funnel (pending/pending/pending/pending)2026-09-28fb5cecd adapters batch40: derelict_utilities_knockdown, bedroom_adu_value_uplift, heir_property_fractional, water_shutoff_utility_lien (degraded/degraded/pending/pending)2026-09-283227804 adapters batch11: income_stack_score, double_close_end_buyer, cash_buyer_verification, code_violation_x_tall_grass (pending/degraded/degraded/live-in-Norfolk)2026-09-2871a0ed9 adapters batch14: best_value_number, life_event_distress, lien_stack_priority, assumable_seller_finance_flag (pending/degraded/degraded/degraded)2026-09-280e52f22 adapters batch13: adu_duplex_eligibility, offmarket_probability_engine, tired_landlord_composite, census_flip_tract (pending/pending/pending/pending)2026-09-28b1e6e84 adapters batch12: list_saturation_index, whole_region_rank, absentee_entity_high_equity, vacant_land_owner_distress_join (degraded/pending/pending/pending)2026-09-282f425a0 adapters batch10: tax_delinquency_early_warning, probate_preprobate_x_parcel, foreclosure_nod_join, fresh_verified_distress_stack (pending x4 — no $0 statewide VA source verified for any; v2 CONFIRMED claims debunked for VA scope)2026-09-284f1c020 adapters batch 37 (final verification): no_airbnb_license_acreage, str_lease_arbitrage_absentee, seller_trust_score, mixed_zoning_live_work, property_condition_risk_score, listing_truth_gap, virtual_driving_for_dollars, estate_sales, dumpster_out_front, paranormal_listings, orphans_no_family_ties (all pending-honest)2026-09-28d22d757 adapters batch 36: mislisted_sqft, expired_listing_owner_leads, fire_casualty_permit, str_regulatory_arbitrage_map, heir_fractional_assemblage, mechanic_lien_distress, best_fit_buyer, dscr_projected_income_list, hot_spring_property_play, water_x_distress_matrix (all verified pending)2026-09-28fb6515f adapters batch 35: verify queue IDs 75/76/79/80/83/84/86/87/89/90 (all honest pending)2026-09-28c22d110 adapters batch 34 verify: yard_to_storage_conversion, house_hack_fit, unpermitted_to_sweat_equity, absentee_str_conversion_funnel, oldest_child_graduating, eviction_timeline_risk, skip_trace_osint_cheap, keep_one_wall_tax, zoning_arbitrage, elderly_pre_succession (all pending, Census Reporter seams documented not shipped)2026-09-2874a4375 adapters batch 32: assumable_seller_finance_flag, derelict_utilities_knockdown, bedroom_adu_value_uplift, improvement_zone_between_hnw, heir_property_fractional, hoa_superpriority_lien, lot_split_subdivision_potential, abandoned_cell_tower_isp, water_shutoff_utility_lien, verified_seller_landing (all pending)2026-09-28286637b adapters batch 33: guardrail wording for batch10 contract2026-09-281fffe7a adapters batch 33: assumable stays pending; HMDA aggregations seam documented for coordinator (batch10/api-reference contract preserved)2026-09-28a73c072 adapters batch 33: assumable_equity_arbitrage degraded (HMDA county vintage screen); 9 pending verified; 70/70 tests2026-09-280c29dad adapters batch 30: tax_delinquency_early_warning, probate_preprobate_x_parcel, foreclosure_nod_join, fresh_verified_distress_stack, income_stack_score, double_close_end_buyer, cash_buyer_verification, code_violation_x_tall_grass, list_saturation_index, whole_region_rank (all pending)2026-09-28b3ca352 adapters batch 31: 10 re-verified signals, all pending (Census Reporter probe for census_flip_tract) + 60/60 tests2026-09-28e3f17fa archive batch 28: register 5 adapters (3 degraded, 2 pending) — QUEUE 144/144 FULLY ARCHIVED2026-09-28dcae73a adapters batch 28: search_intent_distress_trend, Cabin, Paranormal listings in areas with history, camp_lodge_cabin_conversion, orphans_no_family_ties (degraded/degraded/pending/degraded/pending)2026-09-28559ce25 archive batches 26+27: register 10 adapters (8 degraded, 2 pending), queue updated2026-09-28b596c25 adapters batch 27: unique_home_insurance_match, wildfire_insurance_mitigation, str_analysis_site_pattern, middle_man_lending, Earthships (degraded/degraded/degraded/degraded/degraded)2026-09-280d10780 adapters batch 26: turnkey_str_meter, eviction_cluster_multifamily, unkept_property (degraded), estate_sales, dumpster_out_front (pending)2026-09-2827fe8c0 archive batch 29: register 4 adapters (all degraded), queue updated2026-09-283c7320d adapters batch 29: stale_90day_x_assumable_buyers, nl_dream_property, elderly_summer_cabin_complex, Horse / equestrian (degraded/degraded/degraded/degraded)2026-09-285c53fdd archive batch 25: register 5 adapters (all degraded), queue updated2026-09-28ae46b8e adapters batch 25: Up-and-coming vacation properties, rehab_cost_estimator, sprinter_van_summer_camp, Old American mansions / architectural styles, three_percent_mortgage_buyers_list (degraded/degraded/degraded/degraded/degraded)2026-09-282710a8b archive batch 21: register 5 adapters (4 degraded, 1 pending), queue updated2026-09-28ab2d455 archive batch 22: register 5 adapters (all degraded), queue updated2026-09-28c7f6672 adapters batch 21: cell_tower_and_land_lease, storage_yard_siting, water_x_distress_matrix, Commercial RE, investor_concentration_index (degraded/degraded/pending/degraded/degraded)2026-09-28628ba1b archive batch 23: register 5 adapters (2 degraded, 3 pending), queue updated2026-09-288cab14b adapters batch 22: bedroom_add_arbitrage, water_value_stack, insurance_mitigation_value, deed_fraud_watch, on_market_deal_score (all degraded)2026-09-281bddd82 archive batch 24: register 5 adapters (1 degraded, 4 pending), queue updated2026-09-28f00cff0 adapters batch 23: Former churches-fire stations-schools (degraded), no_airbnb_license_acreage (pending), str_lease_arbitrage_absentee (pending), seller_trust_score (pending), water_diversion_pond_feasibility (degraded)2026-09-28a7e783d adapters batch 24: military_assumable_loan, mixed_zoning_live_work, property_condition_risk_score, listing_truth_gap, virtual_driving_for_dollars (degraded/pending/pending/pending/pending)2026-09-28d9d253f archive batch 17: register 5 adapters (2 live, 1 degraded, 2 pending); fix Transparent Richmond = CA not VA error2026-09-2871c4f80 adapters batch 17: Hunting, amenity_qol_score, code_lien_foreclosure, holder_mix_map, data_center_land_siting (degraded/live/pending/pending/live)2026-09-2793eac9e deploy checkpoint: 95 adapters live on shinnslist-poc.pages.dev2026-09-2774f09d8 archive batch 16: register 5 adapters (1 live, 1 degraded, 3 pending), queue updated2026-09-27451e344 adapters batch 16: pre_agent_sell_mode, land_renewable_lease_loan, RV parks, Prepped, Acreage (pending/degraded/live)2026-09-2774aee62 archive batch 19: register 5 adapters (1 degraded, 4 pending), queue updated2026-09-2794b3c77 archive batch 18: register 5 adapters (1 degraded, 4 pending), queue updated2026-09-277398f98 adapters batch 19: mislisted_sqft, cost_to_activate_gap, expired_listing_owner_leads, fire_casualty_permit, str_regulatory_arbitrage_map (1 degraded, 4 pending)2026-09-2762bc6d3 archive batch 20: register 5 adapters (all pending, honest), queue updated2026-09-27ab9b528 adapters batch 18: farm_grant_subsidy_zone, hyperlocal_catalyst_monitor, neglect_imagery_timeseries, post_purchase_tax_reassessment, self_storage_retiring_owner (pending/degraded)2026-09-2774b986d adapters batch 20: heir_fractional_assemblage, mechanic_lien_distress, best_fit_buyer, dscr_projected_income_list, hot_spring_property_play (all pending)2026-09-27f2a599c deploy checkpoint: 75 adapters live on shinnslist-poc.pages.dev2026-09-2720b2f6b archive batch 11: register 4 adapters (1 live, 3 pending), queue updated2026-09-279b098c8 adapters batch 11: early_change_motivation_score, boundary_surplus_land, distress_search_landing_funnel, unique_home_lender_match (3 pending, 1 live/degraded)2026-09-27cc828a6 archive batch 15: register 5 adapters (all pending, honest), queue updated2026-09-27008ddc9 deploy checkpoint: 66 adapters live on shinnslist-poc.pages.dev2026-09-27740fe85 archive batch 14: register 5 adapters (3 degraded, 2 pending), queue updated2026-09-27f79131c adapters batch 15: skip_trace_osint_cheap, keep_one_wall_tax, zoning_arbitrage, elderly_pre_succession, old_single_owners_unmanageable (all pending, honest scoping)2026-09-276e7f207 adapters batch 14: rent_potential_calculator, offline_rural_valuation, oldest_child_graduating, distress_stack_conviction_score, eviction_timeline_risk (degraded/degraded/pending/degraded+pending/pending)2026-09-27c541ad7 archive batch 12: register 5 adapters (1 live, 1 degraded, 3 pending), queue updated2026-09-27c5c385b adapters batch 12: barn_to_convert, Farm, Ranching, teardown_option_value, boom_town_follower (1 live, 1 degraded, 3 pending)2026-09-27df7cad1 archive batch 13: register 5 adapters (all pending by design), queue updated2026-09-27a21b12a adapters batch 13: seasonal_water_temporal, yard_to_storage_conversion, house_hack_fit, unpermitted_to_sweat_equity, absentee_str_conversion_funnel (pending)2026-09-273fff681 deploy checkpoint: 50 adapters live on shinnslist-poc.pages.dev2026-09-2712f4745 archive batches 7/9/10: register 15 adapters (3 live, 2 degraded, 10 pending), queue updated2026-09-27eabf11d archive batch 6: register 5 adapters (1 live, 4 pending, honest), queue updated2026-09-27a033016 adapters batch 9: stalled_permit_distress (degraded), abandoned_cell_tower_isp (pending), water_shutoff_utility_lien (pending), verified_seller_landing (pending), marketing_compliance_risk (pending)2026-09-274f15315 adapters batch 7: bedroom_adu_value_uplift, improvement_zone_between_hnw, public_land_access_verify, parcel_buildability_score, heir_property_fractional (live/degraded/pending)2026-09-27eb5d19f adapters batch 10: Waterfall, institutional_owner_entity_resolution, gold_stream_prospecting, assumable_equity_arbitrage, post_divorce_1_2yr (live, pending, live, pending, pending)2026-09-273573186 archive batch 8: register 5 adapters (2 pending, 3 degraded, honest), queue updated2026-09-27f12abc0 adapters batch 6: life_event_distress, lien_stack_priority, water_rights_well, assumable_seller_finance_flag, derelict_utilities_knockdown (1 live, 4 pending)2026-09-2762fc3fd adapters batch 8: hoa_superpriority_lien, lot_split_subdivision_potential, parcel_insurance_cost_insurability, family_life_fit, Off grid (pending/pending/degraded/degraded/degraded)2026-09-277b41f33 deploy checkpoint: 25 adapters live (f0c79d9c)2026-09-279552e2f archive batches 1-3: register 15 adapters (5 live, 10 pending, honest), queue updated2026-09-27e53fa1c adapters batch 3: River, code_violation_x_tall_grass, list_saturation_index, waterfall_build_site, whole_region_rank (live/pending)2026-09-27326ee8e deploy checkpoint: 10 adapters live on shinnslist-poc.pages.dev (5ea94fdd)2026-09-271729942 archive batch 5: register 5 adapters; canonical signal_id Investor specials; queue+protocol updated2026-09-27ed8d3cb adapters batch 1: tax_delinquency_early_warning, probate_preprobate_x_parcel, well_depth_drill_cost, foreclosure_nod_join, fresh_verified_distress_stack (live/degraded/pending)2026-09-27d6586a8 adapters batch 2: income_stack_score, double_close_end_buyer, cash_buyer_verification, hidden_water_feature, burn_scar_fire_channel (live/degraded/pending)2026-09-2720b40df archive batch 5: register 5 adapters (3 pending, 2 degraded, honest), queue updated2026-09-271c35cd0 archive batch 4: register 5 adapters (all pending, honest), queue updated2026-09-27fd60f83 adapters batch 5: census_flip_tract, per_parcel_real_costs, investor_specials, vacant_nod_zombie, best_value_number (live/degraded/pending)2026-09-27a72f855 adapters batch 4: absentee_entity_high_equity, vacant_land_owner_distress_join, adu_duplex_eligibility, offmarket_probability_engine, tired_landlord_composite (live/degraded/pending)
coordination & infrastructure LIVE
everything else: coordinator notes, test maintenance, deploys, repo structure. Most recent first. Every entry cites the commit it came from.
2026-09-2914c6c0f sprint60 test: scope honesty ground truth to the page's stamped head — union/week-box guards compare against history at generation time, not current HEAD, so regen commits no longer self-fail; 31/31 green2026-09-29cc375d7 changelog regen after sprint 50/46 commits (303 commits, harvard 52/chatbot 45/datadepth 43) + sprint60 test now derives team counts from git ground truth instead of hardcoded 51/44/42 — 31/31 green2026-09-29d90bdf5 test maintenance: update stale sprint-27/28 static-markup assertions for sprint-33 adapt wiring (adapt:adaptV3 / adapt:adaptFV3 added to scorer options)2026-09-28befaaef partial results: failed OBJECTID ranges are recorded and disclosed instead of 502ing; empty+failed is an honest 502, not fake empty2026-09-28c11cfa3 soften absentee-owner wording to observed proxy (mailing address differs) in reel gloss + usefulness copy2026-09-29425a8f7 SEO: add sitemap.xml (11 public pages) + robots.txt for shinnslist2026-09-2806ceb34 properties API: bounded timeouts + OBJECTID-range fallback when the source ZipCode predicate degrades; soften absentee-owner wording to the observed proxy2026-09-287fd0a74 Restore slot-machine homepage per CORRECTION-20260929-SLOT-SHOWCASE (find-the-deal draft preserved in engine-drafts/)2026-09-2729283e7 coordinator: verify-22 repairs + timedFetch contract sweep + hot-band upgrades2026-09-286b7bcc4 workstreams 1+2+4: goal->parcels MVP slice (goal-pipeline/v0)2026-09-2853b411d coordinator: regenerate api-reference.html + signal-meta.json from wave-2 queue (22 live / 89 degraded / 35 pending of 146)2026-09-289987908 coordinator: clear ACTIVE-WORK.md — all wave-2 signals archived2026-09-28fa71711 coordinator: merge wave2/degraded-a (20723d9)2026-09-28b65a743 coordinator: merge wave2/degraded-b (91a063f)2026-09-2837bfc37 coordinator: merge wave2/pending-niche (b5092c2, includes wave2/pending-distress 23e542d)2026-09-283c0cd90 coordinator: merge wave2/pending-composite (19ea640; excludes stray d9b2327)2026-09-2820723d9 wave2/degraded-a: re-verify 44 archived:degraded signals (0 upgrades — no complete $0 source found; off_grid NWIS URL fix, hoa_superpriority_lien stale citation note resolved, 248 new assertions green)2026-09-28b5092c2 wave2 pending-niche: 3 pending->degraded on verified $0 no-key sources; 17 honest pendings refreshed2026-09-2891a063f wave2/degraded-b: 4 honest degraded->live upgrades + 39 re-verified degraded2026-09-2823e542d wave2 pending-distress re-probe: tax/eviction/divorce pending->degraded on verified $0 no-key sources; 7 honest pendings refreshed2026-09-2819ea640 wave2 pending-composite: re-verify all 11 composites (stay pending), refresh seams2026-09-28f04bcd3 coordinator: wire query-flywheel tests into run.mjs2026-09-285306f9b coordinator: embed pricing snapshot in storefront.html (deploy ships only *.html; /pricing.json 404s in prod)2026-09-2818db45d query flywheel v2: phrase-level intent mining + weighted registry matching2026-09-28aaea5ac coordinator: wire mcp/signup/console tests into run.mjs2026-09-283aebc20 storefront: 16 per-signal county list products (seam) from live adapters2026-09-281fbafa2 mcp: entitlement gate before adapter run; add MCP 2026-07-28 stateless conformance tests (15/15 green)2026-09-28d6408fe login/signup page + POST /api/signup2026-09-28bf92763 console polish2026-09-28cd16c39 coordinator: archive batch52, all 20 worker batches complete2026-09-28e118200 coordinator: archive batch47, queue flips, board state2026-09-2890d58ce coordinator: archive batch53, queue flips, board state2026-09-289178706 coordinator: archive batch51, queue flips, board state2026-09-283e849bc coordinator: archive batches 47-50, queue flips, board state2026-09-28c6b8c51 coordinator: archive batches 44-49, queue flips, board state2026-09-2843019b1 test: update lien ladder citation pin 55.1-1826 → 55.1-18332026-09-28d402743 fix: correct HOA lien citation in lien_stack_priority (§55.1-1826 → §55.1-1833, caught by batch44)2026-09-28990917a deploy: D1 auth wiring live on shinnslist.com (board regen + deploy log)2026-09-2824a42be auth: D1-backed key issuance, auth, and usage metering (REST + MCP)2026-09-2881b3b1d deploy: board regen + deploy log (shinnslist.com)2026-09-2893c554d wrangler.toml: add pages_build_output_dir + mirror dashboard compat flags (D1 binding was ignored without it)2026-09-28371c356 health: report D1 binding status (d1: ok/unbound/error)2026-09-28a462190 database: activate D1 shinnslist binding (wrangler.toml) + record activation in DATABASE.md2026-09-289077fbe query flywheel: 228-record matching + demand promotion2026-09-28d0b15b0 test runner: wire db.test.mjs (17 tests) into run.mjs2026-09-28d960915 database: D1 schema + access layer + docs2026-09-28505706c deploy: board regen + deploy log (shinnslist.com)2026-09-281d1b39e fix: batch37 verification notes moved from status column to note column (rows 112-140)2026-09-2851ff5b0 fix: batch36 verification notes moved from status column to note column (rows 91-103)2026-09-28f2f91f2 deploy: board regen + deploy log (shinnslist.com)2026-09-289a79d06 deploy: board regen + deploy log (shinnslist.com)2026-09-281fb462a reconcile: #32 improvement_zone_between_hnw + #187 assumable_equity_arbitrage → degraded (real $0/no-key seams)2026-09-2889ad545 mcp: upgrade to 2026-07-28 spec (stateless, server/discover, no initialize)2026-09-2866c43d2 query-signal loop: redacted intent logging + /api/query-trends + candidate sync2026-09-28e62fafd design: house palette tokens (James-locked 2026-09-27)2026-09-286cbcd6e palette: sweep public pages to DESIGN.md tokens2026-09-287cfd5b1 queue: fix openfema_flood_buyout row to archived:live2026-09-2899df803 product: api reference docs + mcp endpoint2026-09-27a5ab0d8 board: footer links storefront + console (fixes storefront test)2026-09-2708e5e29 playground: basic-auth user playground -> shinnjr2026-09-287afee91 product: storefront + developer console (payments seam)2026-09-2840288d5 product: api keys + entitlements + freemium quotas + rate limiting2026-09-28bc648b3 record production-deploy incident + rollback in queue log2026-09-27eb80680 playground: password gate + live kanban board on shinnslist.com2026-09-284673a2a fix: rename cell_tower_and_land_lease locals (collided with abandoned_cell_tower_isp)2026-09-28963b3ab fix queue marking for batch 23 rows (regex used wrong group)2026-09-282f881d6 fix: import Hunting.js with verbatim capital filename2026-09-272fd40eb queue: mark rank-54 openfema_flood_buyout archived:live (already built)2026-09-27e8fc069 queue: ADAPTER-QUEUE.md with 144-signal build order + worker protocol2026-09-27d199474 ranking: full 228-signal benefit-effort ranking2026-09-270a9ee47 structure: one-module-per-signal in functions/lib/signals/; pipeline slimmed; test auto-discovery2026-09-27d43ff50 sprint complete: F8 KV logging verified, final report2026-09-2701f1c08 deploy: production branch fix (--branch main), executable bit; first live deploy verified2026-09-276e2396f Fix Pages dist layout (index at /, functions bundled); verified via wrangler pages dev2026-09-27d72ae8c POC v0: VA intel app — boundary gate, registry v1 (228), 3 live signals, API, tests 50/50
freshness commitments — what's actually enforced by code LIVE
Every number below was re-derived from the code file cited next to it at generation time (2026-09-29). If the code changes, this section changes on the next regen — it is never hand-written. Zero freshness SLAs exist in the codebase today: no published per-signal refresh cadences, no staleness thresholds, and no refresh schedules. The timestamps and caches listed here are the entire freshness story; see data freshness for the full reference.
| constant | enforced value | what it means | code source |
|---|---|---|---|
PL_FRESHNESS_THRESHOLD_DAYS | 30 | purchased-list parcel records: a record older than 30 days since its last browser-local sync is honestly marked "stale"; records never synced are reported as never-synced, never given an invented date | apps/poc-web/public/assets/purchased-lists.js (plFreshnessV1) |
PARCEL_CACHE_TTL | 3600 seconds (1 hour) | /api/engine parcel cache: underlying parcels may be up to an hour older than the run's retrieved_at | apps/poc-web/functions/api/engine/cache.js |
| engine stats cache | 5 minutes (CACHE_TTL_MS = 5 * 60 * 1000) | in-memory cache on /api/engine/stats responses | apps/poc-web/functions/api/engine/stats.js |
mcp tools/list cache | 60000 ms (60 seconds, server scope) | the tool list is cached server-side; tools/call results are never cached | apps/poc-web/functions/lib/mcp.js (ttlMs) |
/api/status edge cache | public, max-age=60 | status responses may be up to 60 seconds old at the edge | apps/poc-web/functions/api/status.js |
/api/intel cache | cache-control: no-store | every call re-runs the full pipeline; retrieved_at is stamped per run | apps/poc-web/functions/api/intel.js |
per-signal data_as_of | declared by exactly 1 adapter (whole_region_rank) | data_as_of: epochToDate(freshestState) — the freshest upstream state date the adapter could see; every other adapter honestly ships data_as_of: null | apps/poc-web/functions/lib/signals/ |
planned freshness slas DRAFT
Not built, not committed, no dates. None of the following exist in code today:
- DRAFT published per-signal refresh cadence — how often each upstream source is re-pulled
- DRAFT staleness-threshold slas per signal — a documented "data older than this is stale" commitment
- DRAFT purchased-list freshness sla — going beyond today's honest 30-day stale mark to a refresh commitment
- DRAFT staleness alerting — push or webhook notice when a signal you rely on goes stale (today the polling channel is
/api/healtherrors.spike; see webhooks) - DRAFT freshness display on the api reference — per-signal freshness stamps next to the status badges
how this page stays honest LIVE
- Entries are generated by
scripts/gen-changelog.mjsreadinggit log— no hand-written entries exist, so none can be invented. - The automated test for this page re-reads the git history and asserts every rendered entry matches a real commit subject, verbatim.
- Unclear commits are not clarified or embellished; the commit subject stands as the description.
- Test counts quoted in entries (like
28/28) come from the commit message itself — the generator copies; it never invents. - The freshness-commitments section re-derives every constant from code at generation time (the generator fails instead of printing a constant it cannot find); planned slas are DRAFT-badged, never presented as live.
next: docs hub · getting started · api reference · data freshness · error reference