You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[Epic H] User-Facing API Ergonomics & Dependency Reduction
Goal
Make zippeR's public API self-contained and idiomatic for R users, and close out the Phase 3 dependency-reduction research deferred from Epic E. By the end of this epic, a user should be able to complete every setup and analysis step through zi_-prefixed functions without reaching into another package, and we should have a decided (not open-ended) position on dplyr and on bare-name argument support.
Why now?
Epic E's dependency-reduction work removed six Imports (purrr, spatstat.univar, stringr, httr, readr, tidyr) but explicitly deferred two Phase 3 items — #86 (dplyr removal, 108 call sites) and #88 (bare/unquoted column names via base R NSE) — as too large to fold into an audit epic. Both are research-first items whose conclusions shape the package's long-term API and dependency posture, so they should be settled before the next feature cycle rather than carried indefinitely.
Separately, #108 surfaced a concrete ergonomics gap: the Census API key setup step is the only piece of package setup that requires calling a function from a different package (tidycensus::census_api_key()). That is a small, well-scoped fix that belongs with the same theme.
The dplyr removal question (research: evaluate dplyr removal feasibility (108 call sites) #86) reaches a documented decision — either an ADR recording the intent to remove with a phased plan, or an ADR/issue comment recording an explicit decision to retain dplyr with rationale. "Still researching" is not an acceptable end state.
Research issues may conclude "no". Deciding to keep dplyr is a valid, epic-completing outcome if the base R rewrite would materially hurt readability or maintainability.
[Epic H] User-Facing API Ergonomics & Dependency Reduction
Goal
Make zippeR's public API self-contained and idiomatic for R users, and close out the Phase 3 dependency-reduction research deferred from Epic E. By the end of this epic, a user should be able to complete every setup and analysis step through
zi_-prefixed functions without reaching into another package, and we should have a decided (not open-ended) position ondplyrand on bare-name argument support.Why now?
Epic E's dependency-reduction work removed six Imports (
purrr,spatstat.univar,stringr,httr,readr,tidyr) but explicitly deferred two Phase 3 items — #86 (dplyrremoval, 108 call sites) and #88 (bare/unquoted column names via base R NSE) — as too large to fold into an audit epic. Both are research-first items whose conclusions shape the package's long-term API and dependency posture, so they should be settled before the next feature cycle rather than carried indefinitely.Separately, #108 surfaced a concrete ergonomics gap: the Census API key setup step is the only piece of package setup that requires calling a function from a different package (
tidycensus::census_api_key()). That is a small, well-scoped fix that belongs with the same theme.Acceptance criteria (epic-level)
zi_census_api_key()is exported, documented, tested, and referenced fromzi_get_demographics(),zi_aggregate(), the README, and the vignettes (feat: add zi_census_api_key() wrapper around tidycensus::census_api_key() #108).dplyrremoval question (research: evaluate dplyr removal feasibility (108 call sites) #86) reaches a documented decision — either an ADR recording the intent to remove with a phased plan, or an ADR/issue comment recording an explicit decision to retaindplyrwith rationale. "Still researching" is not an acceptable end state.R CMD checkremains at 0 errors / 0 warnings / 0 notes throughout.Decisions and constraints
tidycensusstays. feat: add zi_census_api_key() wrapper around tidycensus::census_api_key() #108 wraps it rather than reimplementing key storage;tidycensusis already a hard Import and is the upstream for demographic retrieval.rlang. Per enhancement: support bare (unquoted) column name inputs via base R NSE #88's original framing, any NSE work must use base R (substitute(),deparse(),match.call()) — addingrlangwould run directly counter to the dependency-reduction goal.input_zip/dictprecedent (chore: remove deprecated arguments (input_zip, dict) from zi_crosswalk() #71).dplyris a valid, epic-completing outcome if the base R rewrite would materially hurt readability or maintainability..github/copilot-instructions.md.Sub-issues
zi_census_api_key()wrapper aroundtidycensus::census_api_key()dplyrremoval feasibility (108 call sites)Dependencies
dplyris removed, the NSE surface is rewritten anyway, and the two decisions would otherwise be made against different assumptions about the internals.Related work
O1(CRAN-ready package quality) indocs/OBJECTIVES.mdOut of scope
dplyrremoval. research: evaluate dplyr removal feasibility (108 call sites) #86 is research; the implementation, if approved, becomes its own epic.tibble— already evaluated and closed in research: evaluate tibble dependency (coupled to dplyr ecosystem) #87.zi_crosswalk()arguments (chore: remove deprecated arguments (input_zip, dict) from zi_crosswalk() #71) — time-gated to early 2027, tracked separately.