align examples/boundary-explorer-tearsheet/ with jellycell
v1.4.0,
which ships a native jellycell.tearsheets.findings / methodology /
audit Python API. The showcase now calls jellycell.tearsheets.findings
directly (passing the DiD results dict in-memory) instead of going
through factor_factory.jellycell.tearsheets.findings, which was a
pre-1.4 shim that read artifacts/did_results.json from disk via a
project-layout convention. Output is cleaner (proper metric table,
no placeholder sections), the showcase no longer depends on
factor-factory's jellycell sub-module, and downstream examples
picking up this pattern get jellycell's contract guarantees on
header pinning and byte-stable regeneration.
bump jellycell[server] pin on that example from >=1.3.5,<2 to
>=1.4.0,<2.
add centroids_from_boundaries(boundaries, *, representative=False) in
nyc_geo_toolkit._ops, exported from the top-level namespace. Takes a
polygon / multi-polygon BoundaryCollection and returns a PointBoundaryCollection preserving geography, vintage,
geography_value, and properties on every feature. Round-trips
through boundaries_to_geojson / boundaries_to_dataframe. Pass
representative=True for shapely.Geometry.representative_point
(always inside the polygon, safer for non-convex shapes like CDs with
concave shorelines) instead of the geometric centroid. Unblocks
downstream spatial analyses that need point geometries — distance-band
spatial weights, Moran's I / LISA, nearest-neighbor joins, choropleth
label placement — and replaces the hash-placement workaround in the
blaise-website resolution-equity showcase. Closes
#12.
add Claude Code infrastructure parity with the random-walks ecosystem:
.claude/settings.local.json, .claude/launch.json, agents
(release-auditor, example-reviewer), commands (/bump,
/release-check, /add-example), and skills (downstream-compat,
release-bump)
promote CLAUDE.md from the 70-line stub to a dense one-pager covering
ecosystem role, zero-runtime-deps policy, optional-extras model,
make-check-before-push rule, and the Claude slash-command surface
add top-level AGENTS.md (canonical agent guide in the AGENTS.md spec
format used by Cursor / Codex / Copilot / Aider / Zed)
add .github/PULL_REQUEST_TEMPLATE.md and CITATION.cff
add examples/boundary-explorer-tearsheet/ — self-contained interop
showcase that loads community districts, builds a synthetic
factor_factory.tidy.Panel with a TreatmentEvent, fits
factor_factory.engines.did.estimate(..., methods=("twfe",)), and
renders a factor_factory.jellycell.tearsheets.findings manuscript;
demonstrates the interop pattern downstream packages (nyc311,
subway-access) can copy without adding factor-factory / jellycell
to default deps
extend CI matrix to macos-latest and windows-latest alongside
ubuntu-latest for the tests job
pin GitHub Actions: astral-sh/setup-uv@v8.1.0 (exact — upstream has
no moving v8 tag), keep actions/checkout@v6,
actions/upload-artifact@v7, actions/download-artifact@v8, and
pypa/gh-action-pypi-publish@release/v1