Skip to content

Releases: jcrussell/solvent-streets

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 24 Aug 15:28

Changelog

Features

  • 1ed55f7: feat(cache): add pvmt cache prune to bound the HTTP cache on disk (@jcrussell)
  • fdcf813: feat(checksite): report per-file size totals against per-city budgets (@jcrussell)
  • 3e547aa: feat(config): add export.boundary_simplify_m (@jcrussell)
  • 15b6f3a: feat(config): included cities keep their source config's identity (@jcrussell)
  • f603c49: feat(export): add a Materials dashboard tab (asphalt/binder/oil demand) (@jcrussell)
  • 03eddc2: feat(export): consolidate site into one tagged dashboard (@jcrussell)
  • 3c7ea74: feat(export): extract template JS to app.js/game.js and add an ESLint gate (@jcrussell)
  • d41e0ec: feat(export): make display units a client-side preference (frlu) (@jcrussell)
  • 0f81ab2: feat(export): make template-JS tsc --checkJs a hard gate (@jcrussell)
  • f443db2: feat(forecast): cost_overhead — loaded program cost, defaulting to 1.5x (@jcrussell)
  • 3c6e306: feat(validate): add pvmt validate calibration gate (@jcrussell)

Bug Fixes

  • 535dc4a: fix(all): exit non-zero when the combined compute pass fails (@jcrussell)
  • f06d382: fix(cache): account for temps an interrupted sweep never reached (@jcrussell)
  • e31a596: fix(cache): honor cancellation during a prune sweep (@jcrussell)
  • 0c8f9c4: fix(cache/server/tui/geo): robustness + interface seams (@jcrussell)
  • 90f2b55: fix(checksite): report recorded failures when the run is interrupted (@jcrussell)
  • 88d7e79: fix(ci): build the WASM embed in the test-js and validate jobs (@jcrussell)
  • 8c3d57d: fix(cli): consistent exit codes for arg-count errors and all-empty multi-city (@jcrussell)
  • 9f6b49a: fix(cli): exit non-zero when a command is interrupted (@jcrussell)
  • 4ae5668: fix(cmd): all must not exit 0 when nothing was ingested or computed (@jcrussell)
  • 593901d: fix(cmd): io routing, lifecycle, city resolution, request-ctx wiring (@jcrussell)
  • bf9643d: fix(cmd): run all ingest in-process, like all compute (@jcrussell)
  • 9df1ff4: fix(cmdutil,db,ingest,checksite): four small correctness cleanups (@jcrussell)
  • 8caae3f: fix(config): apply forecast presence before validating the include gate (@jcrussell)
  • d5a2e04: fix(config): close the two non-finite holes 8735b58 missed (@jcrussell)
  • d88f720: fix(config): emit forecast.cost_overhead from Resolve (@jcrussell)
  • 0f31e7c: fix(config): enforce and harden [[include]] resolution; close audit gaps (@jcrussell)
  • 888a69b: fix(config): flatten per-city min_hex_area through [[include]] (@jcrussell)
  • 7081ecc: fix(config): hard-error validation, include dedup, honored overpass flag (@jcrussell)
  • 65c02d6: fix(config): honor an explicit per-city growth_rate = 0 (@jcrussell)
  • 26efa82: fix(config): keep a nested include's city identity on the file that declared it (@jcrussell)
  • a655327: fix(config): merge include calibration per field instead of erroring (@jcrussell)
  • c5cb849: fix(config): reject non-finite floats at load, and +Inf hex edges at the grid (@jcrussell)
  • b7e7e27: fix(config): union the include grid as a pair, and move identity with it (@jcrussell)
  • b994aae: fix(config,cli): floor hex_edge_m so a decimal typo fails loudly, not by OOM (@jcrussell)
  • e3e3428: fix(db): deterministic reads, config-hash isolation, safe DSN (@jcrussell)
  • 4cc1696: fix(db): unbrick databases with a duplicated schema_version row (@jcrussell)
  • 5ed28ac: fix(export): a skipped city no longer leaves a ghost data directory (@jcrussell)
  • b7f7725: fix(export): break optgroup ties on the raw tag so regens stay byte-identical (@jcrussell)
  • 0a3ae63: fix(export): drop duplicate unitSystem param; per-city resolved Config tab (@jcrussell)
  • 55895d0: fix(export): finish the tagged-dashboard consolidation (@jcrussell)
  • 3927b0a: fix(export): materialize resolved [export] defaults in the Config tab (@jcrussell)
  • d2b751c: fix(export): peer-review follow-ups to the slider and fixture slice (@jcrussell)
  • 999108d: fix(export): re-render Financials from cache on a units toggle (@jcrussell)
  • 9827b0f: fix(export): read both city-scope hexgrid shapes (@jcrussell)
  • 7c1da54: fix(export): ship the resolved cost overhead in the multi-city seed (@jcrussell)
  • 7d88ef8: fix(export): stop billing concrete sidewalk area as hot-mix asphalt (@jcrussell)
  • 0292e3c: fix(export): stop funding-gap bars collapsing to full width when all over-funded (@jcrussell)
  • 8c47c82: fix(export): stop the Materials note contradicting itself at both ends (@jcrussell)
  • e796c96: fix(export): the overhead slider must admit any config-legal seed (@jcrussell)
  • ef0b8c2: fix(export): widen, un-step and restore the seeded slider tracks (@jcrussell)
  • 0752561: fix(export,docs): address peer-review findings on the pre-release sweep (@jcrussell)
  • fa43b16: fix(export/cmd): forecast controls, sim dedupe, cohort label, ctx checks, shared grid (@jcrussell)
  • 4d1fdd3: fix(filter): accept abbreviated and territorial state DOTs (@jcrussell)
  • 4919db5: fix(filter): anchor " Department of Transportation" on a state name (@jcrussell)
  • 66e29d7: fix(filter): classify IH interstates and federal DOT operators correctly (@jcrussell)
  • 8c20ad6: fix(filter): close the spelled-out route-ref class (@jcrussell)
  • 2f4b485: fix(filter): match county-route refs on the prefix alone (@jcrussell)
  • f7a26f5: fix(filter): require a state abbreviation to be the whole DOT qualifier (@jcrussell)
  • 2b8edcb: fix(filter): route abbreviated CO RD county refs off the state and city (@jcrussell)
  • 8dbaa6e: fix(filter): route forest-service and county-highway refs off the state bucket (@jcrussell)
  • 09bc06e: fix(filter): route single-letter and lettered state routes off the city (@jcrussell)
  • 2ec2eea: fix(filter): stop billing lettered and spelled route refs to cities (@jcrussell)
  • 96f2299: fix(forecast): clamp negative years in Simulate, not just its callees (@jcrussell)
  • 50bef71: fix(forecast): default cost_overhead to 1.0 — the calibration already absorbs it (@jcrussell)
  • 874e6fc: fix(forecast): full funding now funds each cohort exactly (@jcrussell)
  • 5d4b3ce: fix(forecast): input guards, deterministic tiers, alloc-free decay (@jcrussell)
  • b4a74a5: fix(forecast): report the final-year grown area in FinalCohorts (@jcrussell)
  • 62fc92c: fix(game): bound treatment_cycle_years in both New and the forecast core (@jcrussell)
  • 0531764: fix(gc): a cosmetic rescan failure must not abort the run (@jcrussell)
  • 2b88adc: fix(gc): stop sweeping valid overpass rows on upgrade (@jcrussell)
  • 543d810: fix(geo): complete the degenerate-input guards for Inf and NaN (@jcrussell)
  • a7c522f: fix(geo): guard degenerate inputs across buffer/hexgrid/utm (@jcrussell)
  • 49dfd0b: fix(ingest): compare a repeated page against our own request cap too (@jcrussell)
  • 6361734: fix(ingest): dedup/precision/single-parse, SSRF ranges, drained bodies (@jcrussell)
  • c022bbb: fix(ingest): error on oversized bodies and don't truncate ArcGIS pagination (@jcrussell)
  • 239a4a3: fix(ingest): prove an ArcGIS repeated page is complete before storing it (@jcrussell)
  • e4d3104: fix(ingest): split the bbox again when an Overpass response is oversized (@jcrussell)
  • e9eb04e: fix(ingest): stop discarding every ArcGIS feature on an offset-ignoring server (@jcrussell)
  • df6eb3b: fix(ingest): stop refusing ArcGIS layers we have already read in full (@jcrussell)
  • c71ce85: fix...
Read more

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 13 Jul 00:15

Changelog

Features

  • b8bd7b5: feat(export): make solvency the headline Compare-tab score (@jcrussell)
  • f39169a: feat(export): render a static-host play.html; fix cross-env links (@jcrussell)
  • 096169e: feat(export): write data/play-hexes.json for the /play board (@jcrussell)
  • 2cb1d0c: feat(forecast): condition-spread cost correction + pin the cost×cycle calibration (@jcrussell)
  • 17b7188: feat(forecast): gate annual need to a treatment cycle for realistic solvency $ (@jcrussell)
  • b2e5318: feat(game): add Pavement Manager RTS prototype at /play (@jcrussell)
  • 3c55654: feat(game): address play-test feedback (brush, reset, end stats, horizon, nav) (@jcrussell)
  • 39942a5: feat(game): move budget + horizon to a pregame start screen; always-on brush (@jcrussell)
  • 6a81942: feat(game): segmented Pause/1×/2×/4× speed control (@jcrussell)
  • c269f46: feat(game): serve /play in multi-city mode with a city selector (@jcrussell)
  • f9b9694: feat(prompt): back the live Prompter with charm.land/huh/v2 (@jcrussell)

Bug Fixes

  • 1ef6715: fix(cache): cache Overpass POSTs by body, make TTL=0 a true bypass (@jcrussell)
  • 1186208: fix(checksite): complete hygiene reads to the cap, warn on zero-area resources (@jcrussell)
  • c5fdb19: fix(compute): snapshot lifecycle, fatal persistence, boundary warn, city-only gate (@jcrussell)
  • 2a59870: fix(config): deterministic Hash fallback, surface per-city treatment_cycle_years (@jcrussell)
  • 0840f87: fix(db): stable snapshot ordering, numeric migration sort, city-store Close no-op (@jcrussell)
  • eedd4b7: fix(export): align coverage legend bar with hex-fill paint and theme it (@jcrussell)
  • f422648: fix(export): align index DATA_PREFIX with the shown city on boot (@jcrussell)
  • 89a7611: fix(export): decay override in play hexes, seed cycle years, recoverable partial export (@jcrussell)
  • a83da2e: fix(export): guard overlapping city/snapshot loads and apply snapshot URL state (@jcrussell)
  • 105f6bd: fix(export): play.html uses the per-city forecast seed and frames the board (@jcrussell)
  • 83c0444: fix(export): repair Financials TDZ, dynamic Compare labels, scope toggle, tier NaN, endless copy (@jcrussell)
  • bba6818: fix(forecast): propagate real DB errors instead of swallowing as skip (@jcrussell)
  • fe7afe9: fix(game): unique tier cost rank via stable tiebreak (@jcrussell)
  • 63f2a28: fix(geo): antimeridian bbox guard, equator easting sampling, drop dead helper (@jcrussell)
  • b345e0d: fix(ingest): correct ArcGIS geometry-null skip, pagination, formatting, and URL merge (@jcrussell)

Other

  • 45ac6fe: build(deps): bump go directive to 1.26.4 for stdlib security fixes (@jcrussell)
  • a34b70c: build(deps): bump modernc.org/sqlite (@dependabot[bot])
  • b82408c: build(deps): bump the actions group across 1 directory with 2 updates (@dependabot[bot])
  • 794385d: build(deps): bump the actions group across 1 directory with 3 updates (@dependabot[bot])
  • d1d871e: build(deps): bump the actions group with 2 updates (@dependabot[bot])
  • bb9f378: build(deps): bump the gomod group across 1 directory with 4 updates (@dependabot[bot])
  • cb9abf4: build(deps): bump the gomod group with 2 updates (@dependabot[bot])
  • b93944f: docs(examples): add four California metro configs; expand LA to county-wide (@jcrussell)
  • 11b5dd2: docs(validation): add forecast validation report vs. real city data (@jcrussell)
  • 727b1e4: fix(cmdutil,iostreams): early --jq/--template parse, rune-width table padding (@jcrussell)
  • c2deb8f: fix(compute,tui): cancel threads through, no partial-save/empty-snapshot on SIGINT (@jcrussell)
  • ca61bda: fix(game,export): address code-review findings; simplify (@jcrussell)
  • a12a6f7: fix(game,forecast,resource): spread math, MultiPolygon parking, WASM input bounds (@jcrussell)
  • 4899a74: fix(server,export): evict cache on real DB errors, correct snapshot date & city skips (@jcrussell)
  • 2e1b43b: fix(status,cities,gc): de-duplicated paved area, always-keep overpass in gc (@jcrussell)
  • c0e5651: perf(compute): share one clipped hex grid across all-compute passes (@jcrussell)
  • e54af99: refactor(export): share cityHexGrid between board and hexgrid geojson (@jcrussell)
  • 0e9871f: refactor(geo): adopt simplefeatures carto.UTM; fix stale overlay comments (@jcrussell)
  • af8216a: refactor(wasm): rename forecast.wasm -> pvmt.wasm, cmd/wasm/forecast -> cmd/wasm/pvmt (@jcrussell)

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 19 Jun 15:46

Changelog

Features

  • f4e2f4b: feat(examples): cited PCI/budget calibration with per-source URLs (@jcrussell)
  • 9f26e5a: feat(export): add roads solvency metrics (insolvency year, break-even, funding gap) (@jcrussell)
  • 3ea2e73: feat(export): group city selector by region (optgroup) (@jcrussell)
  • 3703643: feat(export): rectangle region-select with aggregate totals (@jcrussell)
  • 6b1c7a9: feat(gc): add top-level pvmt gc to sweep stale features and orphan results (@jcrussell)
  • ed3cbc9: feat(ingest): split-and-retry OSM water fetch on truncation; relation tests (@jcrussell)

Bug Fixes

  • ebd8bf2: fix(all): make 'pvmt all' interruptible by threading signal context (@jcrussell)
  • 444bb7a: fix(cmdutil): trim spaced --json field names; correct cities example (@jcrussell)
  • ceeb659: fix(config): honor env>city precedence for hex edge and negative growth_rate (@jcrussell)
  • 2f68c9d: fix(config): validate forecast.cost_tiers entries (@jcrussell)
  • 3f5ffa6: fix(db): propagate real DB errors from Stats compute lookup (@jcrussell)
  • eb8da90: fix(export): correct Financials horizon, scope-matched metrics, deep-link state, paved share, and hex handler leak (@jcrussell)
  • a1317c8: fix(export): escape config-sourced strings at client-side innerHTML sinks (@jcrussell)
  • ee90120: fix(export): guard 'export --clean' with site sentinel (shared SafeCleanDir) (@jcrussell)
  • c84fc72: fix(export): propagate hex/meta DB errors so the cache evicts instead of locking in empties (@jcrussell)
  • 131a273: fix(forecast): apply sidewalk discount to custom cost tiers (@jcrussell)
  • 26d1edb: fix(forecast): correct sidewalk decay rate and model growth linearly (@jcrussell)
  • e6f11bd: fix(forecast): fan out across cities and stop NULL-snapshot row accumulation (@jcrussell)
  • 3bf6aa0: fix(forecast): label per-year cost tier from active tiers, not defaults (@jcrussell)
  • 379e6e8: fix(forecast): multi-cohort scenarios.json and WASM strategy error surfacing (@jcrussell)
  • 60c52d4: fix(forecast): scale per-class decay for decay_rate overrides (@jcrussell)
  • 39f0144: fix(geo): derive hex-grid extent from all bbox corners (@jcrussell)
  • 60ca6c5: fix(geo): use the defined WGS84 flattening constant (@jcrussell)
  • 2b50644: fix(ingest): constrain Nominatim geocoding to the US (@jcrussell)
  • f8a07e4: fix(ingest): guard against null ArcGIS FULLNAME (@jcrussell)
  • 8c18a0c: fix(ingest): order ArcGIS pages by OBJECTID for stable offset paging (@jcrussell)
  • cb27513: fix(ingest): parse parking relations and detect Overpass truncation (@jcrussell)
  • 72f7dfc: fix(ingest): re-validate redirects, honor --force in HTTP cache, body-first cache writes (@jcrussell)
  • 8c3c845: fix(ingest): scope feature replace to fetched sources on partial failure (@jcrussell)
  • 7fd401e: fix(server): tolerate broken cities; correct cities API null, error log, gensite warnings (@jcrussell)

Other

  • 6f585b1: build: decouple deploy from site rebuild (@jcrussell)
  • fc387aa: build: stamp version/commit into generated site footer (@jcrussell)
  • fa2cd3f: feat(check-site): add pvmt check-site to validate a built site tree (@jcrussell)
  • 31c85c3: fix(check-site): stop /home/ hygiene check matching URL paths (@jcrussell)
  • 499dddb: fix(db,cmd): cohort_stats FK, city-name refresh, config-hash pin, snapshot store DRY (@jcrussell)
  • 31f106a: fix(geo,filter): generalize jurisdiction refs, parse unit-suffixed widths, report dropped boundary parts (@jcrussell)
  • d07d0b0: fix(geo,resource): include MultiLineString and MultiPolygon in coverage (@jcrussell)
  • d55302f: fix(server,cmd): localhost-default bind, drop wildcard CORS, coherent CLI output (@jcrussell)
  • d7892d7: fix(server,config): guard config-mismatched pinned snapshots; remove dead [[layers]] (@jcrussell)
  • a286931: perf(db): index hex_stats/features for the real read predicates (@jcrussell)
  • ae3e626: perf(export): reuse computed meta/seed, batch queries, sort cities (@jcrussell)
  • 1f04cd9: perf(geo): clip-first union in hexCoverageArea (@jcrussell)
  • 9a930b5: perf(geo): prune interior hexes in ClipHexesToBoundary; guard clip panic (@jcrussell)
  • d19f61a: perf(resource): compute road cohort areas in one hex pass (@jcrussell)
  • 5c3bb5f: perf(resource): parallelize feature buffering via ParallelMap (@jcrussell)
  • bb61a04: perf(resource): skip redundant Buffer(0) on already-valid geometry (@jcrussell)
  • c7b5db5: perf(server): cache index render, cities list, and static assets (@jcrussell)
  • 3523a59: refactor(export): move layer toggles into the gear menu (@jcrussell)
  • b7f05f9: refactor(wasm): extract forecast bridge to a host-testable package (@jcrussell)
  • 445143f: refactor: remove dead interface methods, helpers, and comment rot (@jcrussell)
  • 7633390: test(export): regenerate goldens for cost-tier label fix (@jcrussell)
  • 8cc0868: test(geo): pin hex compute area math before geo refactors (@jcrussell)
  • 3ffd4d2: test,docs: fix mock/store fidelity, drop dead SubPhase API, doc rot (@jcrussell)

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 30 May 23:37

Changelog

Features

Bug Fixes

Other

Read more