[project] name = "civilytics" forge = "Civilytics/civilyticsR" [[workstream]] id = "theme" title = "Themes, palettes, and fonts" paths = [ "R/theme.R", "R/colors.R", "R/fonts.R", "tests/testthat/test_theme.R", ] docs = [ "man/theme_civilytics*.Rd", "man/scale_color_civilytics.Rd", "man/scale_fill_civilytics.Rd", "man/civilytics_pal*.Rd", "man/civilytics_colors.Rd", "man/civilytics_load_fonts.Rd", "README.Rmd", ] [[workstream]] id = "logo" title = "Logo and branded output composition" paths = [ "R/logo.R", "R/flextable.R", "inst/img/**", "tests/testthat/test_logo.R", "tests/testthat/test_flextable.R", ] docs = [ "man/*logo*.Rd", "man/*flextable*.Rd", "man/plot_jpeg.Rd", "man/get_png.Rd", "man/has_caption.Rd", "man/measure_caption.Rd", "README.Rmd", ] [[workstream]] id = "quarto" title = "Quarto themes and publishing templates" paths = [ "R/quarto.R", "inst/quarto/**", ] docs = [ "man/use_civilytics_*.Rd", "man/quarto-helpers.Rd", "inst/quarto/examples/*.qmd", ] [[workstream]] id = "helpers" title = "Analysis and workflow helpers" paths = [ "R/utils.R", "R/prop_conf.R", "R/join_utilities.R", "R/db.R", "R/notifications.R", "tests/testthat/test_utils.R", "tests/testthat/test_propint.R", "tests/testthat/test_joins.R", "tests/testthat/test_db.R", "tests/testthat/test_notifications.R", ] docs = [ "README.Rmd", "NEWS.md", ] [[workstream]] id = "packaging" title = "Package infrastructure and release" paths = [ "DESCRIPTION", "NAMESPACE", "Makefile", "Dockerfile", ".Rbuildignore", ".gitea/workflows/**", "tests/testthat.R", "AGENTS.md", ".roborev.toml", ] docs = [ "NEWS.md", "README.Rmd", ] [roborev] project_guidelines = [ "Brand colors come from `civilytics_colors`; never write a hex literal in theme, scale, logo, or table code. `R/flextable.R` still carries off-brand Bootstrap defaults (#2c3e50, #f0f0eb, #888888, #cccccc, #555555) -- do not add more.", "No tidyverse dependency. Imports is base R plus ggplot2, grid/gridExtra, png/jpeg, stringr, stringdist, showtext/sysfonts, jsonlite. Reject dplyr, purrr, magrittr, tibble, and data.table; use base R idioms.", "NAMESPACE is roxygen-generated. Declare imports with `@importFrom` in the roxygen block and re-run roxygen; never hand-edit NAMESPACE.", "Themes default to a transparent background (`paper_bg = FALSE`) so plots composite onto any Quarto, Reveal, or Typst background. Making an opaque background the default is a regression, not a preference.", "Theme functions thread `ink`/`paper`/`accent` into ggplot2 4.0's base-theme parameters rather than setting element colors ad hoc. ggplot2 >= 4.0 is a hard dependency, so use S7 `@` property access on plot and theme objects, not `$`.", "User-facing progress goes through `message()` so callers can suppress it. No `cat()` or `print()` in package code.", "Nothing personal or client-identifying is vendored into `inst/` -- brand assets only. Version 0.3.2 removed headshots for exactly this reason.", "The camelCase exports (`countCleanr`, `dbSafeNames`, `simpleCap`, `waldInterval`, `countDots`, `countNA`, `findDots`, `nvals`) are frozen public API; do not rename them. New functions are snake_case.", "`R/theme.R` and `R/logo.R` are long by design -- one file per surface, with dense roxygen. File length is not a finding in this package; flag a single function over roughly 80 lines instead.", ]