Skip to contents

This maintainer article records the v1.2 evidence chain for the renderer decision and template area enhancements. It is intentionally separate from the user-facing template and embedding articles.

Renderer decision

v1.2 keeps vizRd on ggplot2 + ggiraph. The accepted Phase 25 decision is recorded in .planning/phases/25-renderer-decision-spike/25-RENDERER-ADR.md. That decision avoids adding a production renderer dependency, rewriting chart modules, or changing static export behavior.

The accepted baseline is the existing package stack: ggplot2 builders for static/exportable plots and ggiraph widgets for live hover, click selection, sticky detail, Shiny-owned controls, share/embed state, and package-local iframe resize behavior.

Renderer evidence map

Evidence source Maintainer use
.planning/phases/25-renderer-decision-spike/25-RENDERER-ADR.md Accepted no-migration decision, risks, rollback path, and follow-on triggers.
.planning/phases/25-renderer-decision-spike/25-RENDERER-MATRIX.md Candidate comparison across hover, click, sticky detail, embed/share, iframe resize, export, accessibility, source-package hygiene, and CRAN/no-CDN constraints.
.planning/phases/25-renderer-decision-spike/25-NO-REGRESSION-MATRIX.md No-regression expectations for the ggplot2 + ggiraph baseline and inspection-only plotly notes.
.planning/phases/25-renderer-decision-spike/25-VERIFICATION.md Verification that Phase 25 compared candidates, preserved production code, and recorded the no-migration decision.

gg2d3 remains rejected for prototype time until a canonical package source is verified. Plotly remains a future inspection candidate only; Phase 25 did not add plotly to DESCRIPTION, renv.lock, or production runtime code.

Area mode and Top-N guardrails

Phase 26 added the canonical area adapter contract for area_mode, raw values, shares, invalid percent fallback, warnings, and deterministic Top-N plus Other aggregation. The primary source artifacts are .planning/phases/26-area-mode-and-aggregation-contracts/26-CONTEXT.md and .planning/phases/26-area-mode-and-aggregation-contracts/26-03-SUMMARY.md.

Percent mode is valid only for complete, finite, non-negative displayed values with a positive total in every time period. Invalid percent states keep the area view available in absolute mode and carry this user-facing fallback copy: 100% mode needs non-negative complete values with a positive total in every time period. Showing absolute values.

Top-N plus Other aggregation is applied after explicit geos filtering and before percent calculation. The generated Other series is a real aggregate with per-period sums, warning metadata, report lines, and snapshot metadata.

Isolation, export, and share parity

Phase 27 added direct area-series isolation as post-contract state. The primary source artifacts are .planning/phases/27-area-runtime-interaction-enhancements/27-CONTEXT.md, .planning/phases/27-area-runtime-interaction-enhancements/27-01-SUMMARY.md, .planning/phases/27-area-runtime-interaction-enhancements/27-02-SUMMARY.md, and .planning/phases/27-area-runtime-interaction-enhancements/27-VERIFICATION.md.

area_series is distinct from geos: geos selects candidate source geographies before aggregation, while area_series isolates displayed named series and generated Other after the area contract is prepared. All displayed series are selected by default, stale shared labels are pruned, and an intentional empty selection remains durable export metadata.

Exports, reports, snapshots, and share/embed URLs consume the same area state. Static plots adapt through the canonical area contract once, then subset the displayed series. Percent mode is not renormalized after isolation, so visible series may total below 100%.

Layered evidence

v1.2 documentation and release evidence should be read as a layered chain:

Layer Evidence
Renderer decision Phase 25 ADR, matrix, no-regression matrix, verification, and tests/testthat/test-renderer-decision-artifact.R.
Area contract Phase 26 context and summaries plus tests/testthat/test-runtime-adapters.R, tests/testthat/test-mod-area-chart.R, and tests/testthat/test-export-handlers.R.
Area isolation Phase 27 summaries and verification plus tests/testthat/test-mod-embed-shell-server.R, tests/testthat/test-embed.R, and export handler tests.
Documentation guards tests/testthat/test-docs-release.R and tests/testthat/test-docs-embedding.R.
Human/release closure Phase 28 UAT and release-evidence artifacts produced after this article.

The browser E2E harness remains local and opt-in through NOT_CRAN=true and VIZRD_E2E=true. Missing browser prerequisites are explicit skips, not hidden passes.

Maintainer release ladder

Run focused source guards before broad checks:

rtk Rscript --vanilla -e 'devtools::load_all(quiet = TRUE); testthat::test_file("tests/testthat/test-docs-release.R"); testthat::test_file("tests/testthat/test-docs-embedding.R"); testthat::test_file("tests/testthat/test-renderer-decision-artifact.R")'
rtk Rscript --vanilla -e 'devtools::load_all(quiet = TRUE); testthat::test_file("tests/testthat/test-runtime-adapters.R"); testthat::test_file("tests/testthat/test-mod-area-chart.R"); testthat::test_file("tests/testthat/test-mod-embed-shell-server.R"); testthat::test_file("tests/testthat/test-embed.R"); testthat::test_file("tests/testthat/test-export-handlers.R")'
rtk Rscript --vanilla -e 'devtools::test()'

Plan 28-03 records the current temporary pkgdown build, source tarball inspection, and local as-CRAN check results. This article does not claim actual CRAN submission or acceptance.

Deferred boundaries

Deferred work remains out of the v1.2 implementation:

  • Production renderer migration or complement work requires a separately planned phase with runnable parity evidence and rollback criteria.
  • Mixed-sign or mixed-metric stacked-area analysis remains outside the current area contract.
  • Broader BI/report-builder capabilities such as joins, calculated fields, saved dashboards, authentication, hosted publishing, or multi-user workflows remain outside vizRd’s current package promise.