Skip to contents

drmTMB is a focused R package for fast univariate and bivariate distributional regression models using TMB.

For the dependency-ordered list of remaining capability implementation slices between today’s fitted surface and the full planned capability set, see docs/design/157-capability-completion-worklist.md. The fitted-versus-planned boundary itself is maintained in docs/design/46-pre-simulation-readiness-matrix.md. The finish-plan claim registry is docs/design/168-r-julia-finish-capability-matrix.md; when these ledgers disagree, the stricter row wins until the evidence is reconciled.

Immediate bounded arc queue (ratified 2026-07-15)

  1. Current closeout — Beta phylogenetic LSS PR 1: land the exact univariate ML beta() q1 mu ~ phylo(1 | spp_id, tree = tree) prerequisite at point_fit_recovery only for the tested g = 1024, m = 4 regime. Preserve the g = 256 and g = 512 recovery HOLDs and the inconclusive estimator diagnostic. This is not g >= 1024 and does not establish a universal minimum species count.
  2. Next lane — Beta phylogenetic LSS PR 2: only after PR 1 review, merge, and exact green post-merge CI, add the bounded direct latent-SD target sd(spp_id, level = "phylogenetic") ~ 1 + x. Keep family sigma, which controls phi = sigma^(-2), distinct from latent-target sd(...), and do not infer broader Beta or all-family sd() support.
  3. After that — separate hierarchical-sd() subarc: the current sd() RHS remains fixed-effect-only, with predictors constant within the target group. The conservative first random-RHS design may admit only a genuinely higher/coarser grouping level with multiple target groups nested in every higher group, for example sd(individual) ~ habitat + (1 | population) with multiple individuals per population. Same-level sd(individual) ~ (1 | individual) remains rejected. If the target is already the highest available level, its sd() RHS remains fixed-effect-only. Thus sd(spp_id, level = "phylogenetic") needs a separately justified higher genus/family grouping with adequate species replication before any random RHS is considered. This is a first-implementation admission and identifiability rule, not a universal mathematical theorem. Require symbolic alignment, explicit nesting checks, recovery, and rejected-neighbour tests.

Release versioning: conservative 0.x numbering, v1.0 as maturity milestone

Updated — the specific number below was superseded. The 2026-07-12 ratification (next section) retired the thin 0.5.0 plan, and the v0.5.0 tag was never accepted on CRAN (it was ditched). 0.6.0 is the actual first CRAN submission (a first/new submission). The conservative-0.x-not-1.0 principle stands; the 0.5.0 number does not.

  • The first CRAN release is numbered conservatively in the 0.x line, not 1.0.0 (principle, decision 2026-07-10; the specific 0.5.0 number was later superseded — see the note above and the 2026-07-12 strategy section). A 1.0 on a first CRAN entry would over-claim: much of the family and inference surface is still scaffolded or recovery-grade, and the public grammar is still growing.
  • 1.0 is reserved as the capability maturity milestone — the complete “Q-Series v1.0” surface (below) plus the full distributional-regression story (location + scale + shape + adequacy diagnostics + quantile/exceedance outputs) and a committed-stable public API. The “Q-Series v1.0” ledger name refers to that milestone, not the release number.

First-CRAN-release strategy — build to finished-for-scope, don’t rush (decision 2026-07-12)

  • Ratified by Shinichi 2026-07-12: we do NOT rush a thin 0.5.0 onto CRAN. The first CRAN release should be systematic and finished for its declared scope — not comprehensive, but genuinely useful and coherent for a particular set of common distributions (gaussian, the counts, beta/gamma, the bounded families) across the structures that actually work (fixed effects, supported random/structured cases, missing responses, and the new distributional-output + adequacy layer, #747/#748). Target a more-capable cut (a 0.6.0-class release), not the frozen minimal 0.5.0.
  • The frozen v0.5.0 tag (095409c0) and its incoming-pretest-fixed resubmission tarball are a FALLBACK, not the plan. They stay ready (Windows win-builder preflight clean; Uwe Ligges confirmed the NOT_CRAN test-time fix), so we can still ship quickly if needed — but the intent is to fill the capability gap first.
  • Release-readiness bar = the capability surface. “Finished-for-scope” is concrete: a defined block of reference/inference-ready cells (common distributions × supported structures × the output+adequacy layer), with the honest limits stated, not hidden — “not comprehensive” is framing, not an apology. docs/dev-log/dashboard/capability-surface.* is that map.
  • Honesty invariants at release (non-negotiable): plug-in intervals carry calibrated = FALSE; adequacy is “no detectable departure”, never “adequate”; a distributional-adequacy (DG) tick never promotes a family’s inference tier.

Version 1.0 maturity surface (the milestone, not the next release)

  • Arc 3a is recovery-certified: native univariate ML fits unlabelled q1 mu intercepts for Gamma-phylo(), lognormal-phylo(), and lognormal-relmat() using K or Q. All three exact cells are point_fit_recovery; slopes, sigma structure, labels/q2+, additional providers, bivariate responses, REML, intervals, and coverage are not part of this arc.

  • Arc 1b-S2R is recovery-certified branch-locally: native REML fits one exact bivariate-Gaussian location-intercept cell with matching labelled relmat(1 | p | id, K = K) terms in mu1 and mu2. The independent dense oracle and 2,400 retained Totoro attempts support only point_fit_recovery; supplied Q, animal(), slopes, scale-side blocks, q4+, intervals, and coverage remain outside the claim until the arc lands.

  • Beta phylogenetic q1 PR 1 is recovery-certified branch-locally: native univariate ML fits one unlabelled intercept-only phylo() term in Beta mu, while family sigma remains fixed-effect-only. The exact g = 1024, m = 4 successor cell passes at point_fit_recovery; g = 256 and g = 512 HOLD. Slopes, labels/q2+, phylogeny in family sigma, direct latent-sd() regression, REML, intervals, and coverage remain outside PR 1.

  • Q-Series v1.0 status is tracked in docs/dev-log/release-audits/q-series-v1-release-status.md. That generated release ledger keeps the practical v1.0 scope on implemented/basic-working Gaussian structured-effect rows plus 27 non-Gaussian recovery rows and 10 diagnostic-only rows, while full inference_ready and supported validation remains post-v1.0 row work.

  • The Q-Series release-status ledger does not authorize coverage, q4/q8 promotion, broad bridge support, REML, AI-REML, or public-support wording.

Version and release status

  • Current version: 0.6.0 (DESCRIPTION Version: 0.6.0; NEWS heads drmTMB 0.6.0). This is the release-candidate identity; the pkgdown site is built from this line.
  • The earlier v0.5.0 tag predates the current line and is not a supported install target (it was never accepted on CRAN); install the current 0.6.0 line instead. A 0.6.0 release will be tagged when it reaches CRAN — the upload is the maintainer’s call and has not yet happened. 1.0 is the later maturity milestone, not this release.
  • Meaning of 0.1.3: a preview that keeps the 0.1.2 profile-inference, tutorial, and roadmap hardening, then adds the current structured Gaussian first slices, meta_V(V = V) known-covariance syntax, non-Gaussian first routes, and Phase 18 artifact-routing ledgers. It is not the final double-hierarchical individual-difference endpoint.
  • Release boundary: Phase 9 is closed at the implemented ordinal and denominator-aware MVPs. The first Phase 11 bivariate mu1/mu2 random-intercept covariance slice is now implemented. Phase 17 now records the visualization and marginal-effects layer because the later simulation and comparator phases need stable plotting/data helpers from the start. Phase 18 is the comprehensive simulation, power, accuracy, and coverage evidence layer, but the Slice 202 gate keeps broad Phase 18 closed until the post-202 Phase 17 return block, especially meta-analysis hardening, is complete. A narrow Poisson random-effect pilot simulation may start earlier as a scoped operating-characteristics grid. Phase 19 is the one-off comparator demonstration layer (its comparator-to-drmTMB mapping and scale conversions are in docs/design/158-phase-19-comparator-matrix.md); Phase 20 is CRAN and paper preparation. Broad random-slope operating characteristics, structured bridge/inference for matched slope cells, multiple structured slopes, larger structured slope covariance/correlation, structured residual rho12, mesh/SPDE spatial structure, sparse large-pedigree speed claims, and the full double-hierarchical endpoint remain roadmap work for later releases.
  • Missing-data preview boundary: miss_control(response = "include") is G3 recovery-verified for univariate and bivariate Gaussian, Student-t, skew-normal, lognormal, Gamma, Tweedie, beta, zero-one beta, binomial, Poisson, and NB2 responses. Student-t, lognormal, and Gamma include ordinary random-intercept recovery in this response-masking evidence; skew-normal, Tweedie, and zero-one beta have fixed-effect masking evidence only, although their ordinary mu random intercepts and independent slopes are fitted outside this masking claim. The fitted object preserves original-row accounting, full-length fitted values, and NA residuals on masked univariate response rows. Beta-binomial whole rows and ordered-factor cumulative-logit responses are also G3; the latter rejects any observed subset with an empty declared category. Non-hurdle zero-truncated NB2 is also G3 through its ordinary mu random-intercept route. Fixed-effect ZIP, ZINB2, and hurdle NB2 complete the 18-route G3 board with independent zero/positive mixture evidence. Broader random/structured-route masking claims, multiple missing predictors, response-imputation summaries, and G4/G5 interval or coverage promotion remain later work.
  • Completed before tagging the version:
    • devtools::check() passes with 0 errors and 0 warnings;
    • devtools::test() and pkgdown::check_pkgdown() pass;
    • pkgdown deploys with the short landing page and current family reference pages;
    • implemented families have simulation, independent-likelihood, or comparator coverage plus malformed-input tests;
    • docs/dev-log/known-limitations.md, NEWS.md, README.md, and the roadmap agree about what is implemented versus planned;
    • paper examples for individual-difference location-scale models are presented as a replication roadmap unless the matching drmTMB model class is actually implemented and tested.

Phase 0: Project Infrastructure

  • R package scaffold with DESCRIPTION, R/, src/, tests/, and vignettes.
  • Design documents for formula grammar, families, likelihoods, random effects, testing, distribution priorities, and the reference/paper programme.
  • Codex-native project instructions, agents, and skills.
  • Continuous integration for R CMD check.

Phase 1: Gaussian Location-Scale MVP

  • Status: initial MVP implemented.
  • bf() and drmTMB() support Gaussian location-scale models with fixed effects, mu random intercepts, simple numeric mu random slopes, and residual-scale random intercepts plus independent random slopes in sigma.
  • Supported syntax: bf(y ~ x1 + (1 | id) + (0 + x1 | id), sigma ~ x2 + (1 | id) + (0 + w | id)).
  • Keep parser support for sd(group) ~, known sampling covariance (meta_V(V = V) preferred, deprecated meta_known_V(V = V) as a compatibility alias), phylo(), and spatial() terms from the start.
  • Prediction for mu and sigma is implemented.
  • Simulation and parameter-recovery tests are implemented for the first Gaussian case.

Phase 2: Meta-Analytic Gaussian Regression

  • Status: diagonal and dense full known sampling covariance implemented.
  • Treat meta-analysis as family = gaussian() plus known sampling covariance. The preferred implemented spelling is meta_V(V = V), with vectors accepted for diagonal sampling variances and matrices accepted for dense sampling covariance. Deprecated meta_known_V(V = V) remains a compatibility alias for the same additive known-covariance likelihood path.
  • Support known sampling covariance through vectors, columns, diagonal matrices, dense block-diagonal matrices, or dense full matrices.
  • Reserve, but do not fully implement for 0.1.3, a meta_V() umbrella that can unify additive known covariance meta_V(V = V) with proportional sampling-variance models such as meta_V(w = w, scale = "proportional").
  • The implemented known-covariance Gaussian path is now tested with ordinary mu random intercepts and random-effect scale formulae such as sd(id) ~ x_group using independent dense marginal-likelihood comparators.
  • Add sparse known covariance after dense covariance tests pass.
  • Use sigma ~ x1 for heterogeneous heterogeneity, even when papers describe the same unknown SD as tau.
  • Tests based on fixed known sampling variance and known extra heterogeneity are implemented.

Phase 2b: Likelihood Weights

  • Status: implemented for ordinary row likelihood weights.
  • A top-level weights = argument to drmTMB() now supplies ordinary likelihood weights, matching the broad convention in mixed-model packages.
  • Keep likelihood weights separate from known sampling covariance: weights multiply observation log-likelihood contributions, whereas meta_V(V = V) supplies known sampling covariance. Deprecated meta_known_V(V = V) remains a compatibility alias for the same additive path.
  • Coexistence rule: diagonal/vector known V may be combined with ordinary likelihood weights, but those weights do not create proportional sampling variance. Full dense matrix-V fits reject non-unit top-level weights until joint-block weighting is designed; proportional sampling variance through a future meta_V(..., scale = "proportional") is also not ordinary likelihood weighting.
  • Implemented design rule: univariate models use one non-negative finite weight per observation; bivariate models use one weight per complete response pair.
  • Do not add response-specific bivariate weights until the likelihood and interpretation are documented.
  • Full dense meta_V(V = V) covariance paths reject non-unit weights = until a joint-block weighting design is documented.

Phase 3: Bivariate Gaussian Coscale

  • Status: fixed-effect bivariate Gaussian implemented and closure-audited; matched labelled mu1/mu2 random-intercept covariance blocks are implemented as the first bivariate group-level covariance slice.
  • Support separate formulas for mu1 = y1 ~ ... and mu2 = y2 ~ ....
  • mvbind(y1, y2) ~ x is implemented as shorthand for identical location formulas and expands internally to mu1 = y1 ~ x and mu2 = y2 ~ x.
  • Added sigma1, sigma2, and constant rho12.
  • Added predictor-dependent rho12 ~ x using an unconstrained correlation predictor with a tanh response transform.
  • Added simulation tests for positive, near-zero, negative, and predictor-dependent residual correlations.
  • Added tests and documentation for rho12(), corpairs(), fitted(), sigma(), simulate(), whitened Pearson residuals, and coefficient-level vcov() names.
  • Added complete-row bivariate Gaussian known sampling covariance through meta_V(V = V) and meta_vcov_bivariate(), with an independent base R MVN likelihood comparator and tests that residual rho12 stays distinct from known sampling correlation.
  • Added row likelihood weights for independent bivariate rows; dense known-V bivariate fits reject non-unit weights until a joint-block weighting design is documented.
  • Public bivariate family grammar accepts family = c(gaussian(), gaussian()) or family = list(gaussian(), gaussian()) for the implemented all-Gaussian likelihood. Mixed composed families such as family = c(gaussian(), poisson()) remain future work where the joint likelihood is defined.
  • Matching labelled random intercepts in mu1/mu2 and sigma1/sigma2, such as (1 | p | id) in both same-parameter formulas, now fit group-level covariance blocks. The group-level SDs are reported in sdpars$mu or sdpars$sigma, the group-level correlations are reported in corpars$mu or corpars$sigma and corpairs(), and residual rho12 remains separate. Targeted simulation coverage now fits both bivariate group-level covariance blocks in the same model with predictor-dependent residual rho12 ~ x; the same regression now checks that summary(fit)$covariance reports the two group-level covariance rows and omits residual rho12.
  • One or more same-response bivariate mu/sigma random-intercept covariance blocks are implemented, such as matching (1 | p | id) terms in mu1 and sigma1 plus matching (1 | q | id) terms in mu2 and sigma2.
  • Matching labelled random intercepts across all four bivariate location-scale parameters, mu1, mu2, sigma1, and sigma2, now fit one all-four intercept block and report six corpairs() rows: one mu1-mu2 row, four mean-scale rows (mu1-sigma1, mu1-sigma2, mu2-sigma1, and mu2-sigma2), and one sigma1-sigma2 row. This is still random-intercept support, not bivariate random slopes or the full double-hierarchical endpoint.
  • Bivariate random slopes beyond the matching mu1/mu2 slope-only, same-response q2 mu/sigma, matching q2 sigma1/sigma2 scale-slope, and smoke-artifact-routed q=4/q=6 location blocks, random effects in rho12, bivariate known-V plus random effects, multi-term cross-parameter bivariate covariance, and structured bivariate covariance beyond the fitted q=2 phylogenetic, spatial, animal, and relmat() location slices remain future work and are rejected before optimization.

Phase 4: Mixed and Double-Hierarchical Models

  • Status: random intercepts, independent numeric random slopes written as (0 + x | id), and ordinary correlated intercept-slope blocks written as (1 + x | id) or (1 + x | p | id) are implemented for the univariate Gaussian location formula. Random intercepts in the residual sigma formula and independent residual-scale random slopes written as (0 + x | id) are also implemented, and matching labelled mu/sigma random intercepts now fit one or more independent univariate mean-scale covariance blocks. Random-effect scale formulae are implemented for one or more distinct unlabelled Gaussian mu random intercepts, such as sd(id) ~ x_group and sd(site) ~ site_type. The bivariate Gaussian path now fits matched labelled mu1/mu2, sigma1/sigma2, one or more same-response mu/sigma random-intercept covariance blocks, matching slope-only mu1/mu2 blocks, and matching same-response q2 mu/sigma and q2 sigma1/sigma2 scale-slope blocks, plus smoke-artifact-routed matching q=4/q=6 mu1/mu2 location blocks.
  • The R-side labelled covariance block registry now records the implemented two-member mu, sigma, and mu/sigma bridges without changing accepted syntax or fitted behaviour. It also carries a dormant TMB-shaped block data contract for those bridges. corpairs() now derives covered group-level rows from the registry, with legacy label parsing as a compatibility fallback, and check_drm() derives covered covariance diagnostics from registry members while preserving current diagnostic rows. profile_targets() derives covered random-effect correlation targets from registry pairs while preserving target names and indices. The design contract remains docs/design/30-labelled-covariance-block-assembler.md; the two-member dormant contract now crosses the C++ boundary as a no-op visibility check. At the time of that registry slice, the registry could internally enumerate all pair rows for a guarded three-member block, but still marked that scaffold unimplemented. Later ordinary Gaussian mu slices superseded that exposure boundary for numeric grouped blocks such as (1 + x1 + x2 | id): q > 2 Gaussian mu blocks now fit, while larger shared labels still need simulation recovery before routine teaching. Internal TMB probes now confirm that UNSTRUCTURED_CORR_t plus VECSCALE_t can produce a positive-definite q=3 correlation, finite objective/gradient, a non-centered sqrt_cov_scale() transform, a hidden registry-shaped member/group contribution map using a dormant TMB parameter, an internal Laplace random-effect boundary for that probe parameter, a hidden Gaussian likelihood prototype that routes q=3 member contributions into mu and log_sigma, and a hidden Laplace version of that likelihood prototype. A deterministic hidden simulation-style check now verifies that this path can recover the simulated q=3 predictor signal better than a no-random-effect baseline. The first ordinary bivariate q=4 random-intercept block now routes mu1/mu2/sigma1/sigma2 member contributions through the fitted bivariate Gaussian path. It reports all six endpoint rows through corpairs() and summary(fit)$covariance: one mu1-mu2 row, four mean-scale rows (mu1-sigma1, mu1-sigma2, mu2-sigma1, and mu2-sigma2), and one sigma1-sigma2 row. profile_targets() can format the matching six endpoint correlation targets, while q=4 intervals remain direct-correlation or derived-row work rather than a closed double-hierarchical endpoint. Dormant q=3 scaffolds and q=8 random-slope endpoint blocks remain invisible to ordinary extractor/profile output. The corresponding constant phylogenetic q=4 state is now fitted for matching labelled all-four phylo() terms, including the two-label block-diagonal fallback that separates mu1/mu2 and sigma1/sigma2 tree blocks. Native q4 REML now has row-specific recovery evidence at the tested information scale; the remaining phylogenetic work is interval reliability, coverage, unvalidated layouts, diagnostics, and tutorial hardening. The ordinary bivariate q=6 location block now has an opt-in smoke artifact route, while q=8 random-slope endpoint blocks can wait.
  • Use docs/design/18-random-effect-scale-models.md as the design contract: the implemented MVP targets one or more distinct unlabelled univariate Gaussian mu random intercepts, with group-level predictors, simulation recovery tests, and an lme4 overlap test.
  • Extend random-effect scale models beyond unlabelled intercept targets, such as slope-specific, labelled-block, bivariate, and non-Gaussian targets.
  • Respect labelled correlated group syntax such as (1 + x | p | id) when scale and bivariate random-effect paths are added.
  • Ordinary grouped random-slope boundary: the univariate Gaussian mu path now accepts blocks such as (1 + x1 + x2 | id) as unstructured covariance blocks with SD/correlation summaries, profile targets for the SDs, recovery tests for the q=3 path, and explicit derived-unavailable status for q > 2 direct correlation profile intervals. This is the ordinary location-model compatibility boundary with lme4/glmmTMB syntax. Larger q blocks remain advanced and sample-size hungry until Phase 18 quantifies convergence, boundary, bias, and interval failure rates. With q coefficients in a block, the fitted surface has q SDs and q * (q - 1) / 2 constant correlations.
  • One-slope baseline policy: every random-effect layer that drmTMB supports should eventually accept at least one numeric random slope, or report an explicit unsupported status and fallback. During the first expansion, slope-related random-effect correlations are constant block hyperparameters, not modelled formulae. This cap does not remove the separate predictor-dependent corpair() lane for intercept-level group, phylogenetic, or future spatial correlations when those likelihoods and recovery tests are implemented.
  • Cross-distributional-parameter correlation gate: keep residual rho12, ordinary group-level covariance, structured covariance, and known sampling covariance V as separate layers. Current fitted correlation surfaces are Gaussian-heavy and mostly constant block correlations, with special predictor-dependent routes for residual rho12 and q=2 intercept-level corpair() models. Random effects in rho12, non-Gaussian covariance among mu, sigma, zi, hu, zoi, coi, or nu, slope-level cross-parameter covariance, and mixed-distribution bivariate covariance stay outside Phase 18 Wave A until their focused gates close.
  • Add variance-component correlation summaries when identifiable.

Phase 5: Animal, Phylogenetic, Spatial, and Known-Dependence Effects

  • Status: first univariate Gaussian phylogenetic, coordinate-spatial, animal-model, and relmat() structured intercepts are implemented for mu and sigma, including matching univariate mu/sigma latent structured correlations. First matching bivariate mu1/mu2 phylogenetic, spatial, animal, and relmat() location slices and constant q=4 location-scale covariance blocks are fitted where documented. Sparse large-pedigree construction, broader labelled structured slope covariance, structured bridge/inference for matched slope cells, predictor-dependent structured corpair() regressions, and generic direct-SD grammar remain planned.
  • Teach structural dependence in the biological order readers are likely to ask for it: animal models first, then phylogenetic dependence, then spatial dependence, then combined phylogenetic-spatial layers, with lower-level relmat() reserved for other validated known-dependence matrices. The common mathematical module is z ~ MVN(0, sigma_z^2 K), with K = A_ped for additive pedigree or animal relatedness, K = A_phylo for phylogeny, K = M for spatial dependence, and K = K_user for a validated user-supplied relatedness matrix.
  • Add sparse known-covariance infrastructure beyond the current phylogenetic A-inverse path, especially for large known sampling covariance, spatial precision matrices, and combined phylogenetic-spatial meta-analysis.
  • Reserve animal-model and generic known-relatedness syntax as siblings of phylo() and spatial(), not as new response families: animal(1 | id, pedigree = ped), animal(1 | id, A = A), animal(1 | id, Ainv = Ainv), and a lower-level relmat(1 | id, K = K) or relmat(1 | id, Q = Q) escape hatch. Treat relmat() as the public replacement for deprecated gr()-style low-level wording rather than teaching both names. Keep V for known sampling covariance in the preferred meta_V(V = V) design; do not reuse V for additive genetic or phylogenetic relatedness.
  • phylo_interaction(1 | partner1:partner2, tree1 = tree1, tree2 = tree2) is the fitted first pair-level route for two partner phylogenies. It builds one sparse Kronecker phylogenetic field; ordinary independent pair effects should use an ordinary grouped random effect with a precomputed pair column.
  • Keep animal-model examples grounded in eco-evo questions rather than matrix-only demonstrations: heritable trait means in a wild pedigree, additive genetic variance in behavioural predictability or residual scale, and bivariate genetic covariance/evolvability examples are higher-value teaching targets than an abstract A matrix smoke test.
  • Implemented phylo(1 | species, tree = tree) for univariate Gaussian mu using an ultrametric branch-length tree, the sparse augmented A-inverse path, one CRAN-safe simulation recovery test, and dense marginal likelihood comparator tests.
  • Implemented matching intercept-only phylo(1 | species, tree = tree) terms in bivariate Gaussian mu1 and mu2, estimating two phylogenetic location SDs and one phylogenetic mean-mean correlation while leaving sigma1, sigma2, and residual rho12 as ordinary fixed-effect distributional parameters. corpairs() reports that first fitted phylogenetic mean-mean row, summary(fit)$covariance reports the matching variance and covariance point summaries, and check_drm() reports near-boundary corpars$phylo, weak phylogenetic-SD diagnostics, and ordinary same-species covariance overlap for that fitted slice. A CRAN-safe deterministic simulation now recovers a positive bivariate phylogenetic mean-mean correlation.
  • phylo_interaction(1 | partner1:partner2, tree1 = tree1, tree2 = tree2) is the fitted first pair-level route for two partner phylogenies. It builds one sparse Kronecker precision field for univariate Gaussian mu and ordinary Poisson/NB2 mu, while additive partner main phylogenies plus the pair interaction, binary/Bernoulli incidence models, structured pair slopes, and simultaneous structured layers remain planned.
  • Full-species Ayumi stress tests keep the bivariate q2 phylogenetic path in a cautious lane. The aggregate all-species q2 phylogenetic source fit converges, but row-capped all-species q2 targets still false-converge with residual rho12 at the boundary under default starts, source-fit starts, and modest covariance jitter. Treat those runs as convergence and identifiability evidence, not as tutorial-ready biological inference. Larger data helps only when it adds information that separates residual covariance from structured species covariance.
  • The corrected Ayumi Issue #1 Mass + Beak PV2 rerun is the real-data anchor: Mass_z is response 1 and Mass_cov_z is the fixed allometric covariate for Beak. The q2 location-only phylogenetic model converges cleanly on 6,196 species with residual rho12 = -0.789 and phylogenetic mu1-mu2 = -0.841. The prereg phylogenetic fallback now fits as separate q2 location and scale blocks, but the Ayumi Mass + Beak fit is still false-converged with pdHess = FALSE; its scale-scale phylogenetic correlation is essentially -1. A 10-core developer bootstrap smoke (B = 10) refitted all replicates but retained convergence code 1 in every replicate, so the fallback remains diagnostic rather than tutorial-ready inference. The all-four q4 PV2-main model can be optimized with se = FALSE, but it remains boundary-heavy and false-converged, so it belongs in the diagnostic ledger until restart, simplification, or bootstrap evidence stabilizes it. A developer-only parallel bootstrap prototype now supports serial, multicore, and psock refits for this Mass + Beak target and clamps requested cores to at most 10. A first fallback simplification that removed climate predictors from sigma1 and sigma2 still false-converged with pdHess = FALSE, worse AIC, and scale-scale phylogenetic correlation near -1, so the boundary is not solved by intercept-only scale formulas. The positive-control PV2_locphylo bootstrap using the same 10-core diagnostic script refitted all ten replicates with convergence 0 and small gradients, so the clean location-only phylogenetic model remains the demonstration path.
  • The first spatial fitted paths are now spatial(1 | site, coords = coords) and spatial(1 + x | site, coords = coords) in univariate Gaussian mu. They use a fixed exponential coordinate covariance as a small-data foundation. The one-slope path estimates independent intercept and slope fields that share the coordinate precision, with separate SDs and no intercept-slope correlation. sdpars$mu, ranef("spatial_mu"), profile_targets(), and check_drm() expose those fields with spatial names. Phase 18 now has a smoke surface for the coordinate spatial one-slope path, covering seeded DGP, fit, parameter summaries, aggregate output, manifest, and failure ledger. Matching bivariate q=2 spatial location and constant q=4 spatial location-scale blocks now use the same coordinate foundation and report through corpairs(level = "spatial"). Ordinary Poisson/NB2 now also fit q=1 spatial mu intercept and unlabelled one-slope terms. Mesh/SPDE, multiple spatial slopes, spatial slope correlations, standalone spatial sd(...), spatial corpair() regressions, pure, multiple, or labelled count spatial slopes, and zero-inflated spatial effects outside the exact Poisson spatial zi, Poisson fixed-zi spatial mu, and NB2 fixed-zi spatial mu local-fit gates remain planned.
  • For bivariate structured models, estimate and report level-specific correlations separately: residual rho12, phylogenetic correlations, non-phylogenetic species correlations, spatial field correlations, and ordinary grouped random-effect correlations should not share one namespace.
  • The first fitted phylogenetic q=4 location-scale block now shares the same matrix-normal prior algebra used by the hidden q=4 scaffold: mu1, mu2, sigma1, and sigma2 effects are stored endpoint-major, with four phylogenetic SDs and six unstructured latent correlations. corpairs() and summary(fit)$covariance report all six phylogenetic endpoint rows, while profile_targets() marks those q=4 correlations as derived theta_phylo targets rather than direct profile-ready atanh targets. A CRAN-safe recovery test now checks broad fixed-effect, SD, residual-correlation, finite-gradient, and q=4 diagnostic behavior. The block-diagonal q=4 fallback uses the same endpoint-major latent vector but a block-diagonal covariance, so corpairs() reports only the mu1-mu2 and sigma1-sigma2 phylogenetic rows and profile_targets() treats those two correlations as direct tanh targets. Direct means “can be attempted,” not “interval-proven” for every dataset: a full-species Ayumi bounded profile for the fallback mean-mean phylogenetic correlation took about 512 seconds and still failed to extract a 95% interval.
  • The univariate Family B sd_phylo(species) ~ x_species path is implemented: it uses a non-centred unit tree effect, multiplies only observed tip contributions by species-level tau_l = exp(W_l alpha), and interprets the marginal tip covariance as D_tip A_tip D_tip. check_drm() now reports direct-SD diagnostic rows covering species replication and the fitted species-level SD surface range. The bivariate design target is now implemented as response-specific location-only direct-SD regression: sd_phylo1() for the mu1 phylogenetic location effect, sd_phylo2() for the mu2 effect, a constant latent phylogenetic location-location correlation, and no mixing with all-four q=4 phylogenetic location-scale blocks. check_drm() now reports the fitted direct-SD surface range and species replication for each univariate or bivariate sd_phylo*() endpoint.
  • Use the correlation-pair design in docs/design/20-coscale-correlation-pairs.md before implementing bivariate double-hierarchical covariance blocks; pair outputs should identify the level, group, block, distributional parameters, responses, and coefficients.
  • The first corpairs() extractor is implemented for currently fitted correlations only: residual rho12, ordinary group-level mu random-effect correlations, the univariate mu/sigma mean-scale random-intercept correlation, and the bivariate mu1/mu2 and sigma1/sigma2 random-intercept correlations, plus the fitted bivariate phylogenetic mean-mean correlation and all six fitted phylogenetic q=4 endpoint correlations when that block is present. Extend this table as new correlation likelihoods are added.
  • Stage structured slopes conservatively: intercept-only structured effects first, then one Gaussian mu slope, then at most two structured mu slopes as an advanced path after simulation recovery. Multiple random factors should enter as separate additive blocks. Intercept-slope corpair() rows are distant-future; the more biologically interesting later target is a bivariate slope1-slope2 correlation for the same covariate, a plasticity-syndrome style model.
  • Structured-dependence random-slope boundary: phylo(), coordinate spatial(), animal(), and relmat() now each have the first fitted univariate Gaussian one-slope mu route with SD summaries, direct profile targets, diagnostics, and focused source or smoke evidence. The corresponding phylo_mu_slope, spatial_mu_slope, animal_mu_slope, and relmat_mu_slope artifact routes are manual Phase 18 Actions tasks, excluded from task = "all", and still not recovery, coverage, or power evidence. Exact q1 structured sigma one-slope paths also fit for all four providers: phylo, A-matrix animal, and K/Q relmat are inference-ready with caveats, while spatial remains point-fit/extractor only. Additional multiple or labelled structured-slope layouts outside the exact fitted ledger cells, spatial sigma-slope intervals, slope correlations, structured rho12, and non-Gaussian structured slopes outside the exact row-specific gates in the live ledger remain planned.
  • Keep structured-effect correlations constant during the one-slope baseline. Do not add predictor-dependent phylogenetic or spatial slope correlations until the fixed-correlation one-slope paths recover reliably. This does not block predictor-dependent intercept-level structured correlations that already have their own corpair() design.
  • Continue adding identifiability diagnostics for replication by study, species, location, and effect-size levels before complex structured models are promoted. The first spatial mu diagnostic is implemented for the coordinate path; mesh/SPDE diagnostics remain tied to the future mesh gate.
  • Selectively reuse GPL-compatible ideas or modules from gllvmTMB with provenance notes and tests.

Phase 5 closure boundary:

Layer Implemented before spatial expansion Still planned
univariate phylogenetic phylo(1 | species, tree = tree) in Gaussian mu and/or sigma, matching mu/sigma structured correlation, one numeric mu slope, the first sigma-only and matched mu+sigma one-slope location-scale cells, deterministic same-target fixtures for the one-slope mu, sigma, and matched mu+sigma rows, sd_phylo(species) ~ z, ordinary Poisson/NB2 q1 phylo() count intercept and unlabelled one-slope cells, phylo_interaction(1 | partner1:partner2, tree1 = tree1, tree2 = tree2) for one Gaussian/Poisson/NB2 pair-level Kronecker field, profile targets, and diagnostics Additional Gaussian multiple-slope layouts outside the exact fitted bivariate ledger cells, pure, multiple, or labelled non-Gaussian phylogenetic count slopes, slope correlations, broad bridge/inference beyond deterministic same-target fixtures, additive partner main phylogenies plus phylo_interaction(), binary/Bernoulli incidence models, direct-SD formulas combined with structured sigma, and richer tree-shape recovery grids
bivariate phylogenetic matching mu1/mu2 phylogenetic location correlation, constant full and block-diagonal q=4 location-scale blocks, the labelled two-slope phylo(1 + x + z | p | species) q=6 mu1/mu2 location and q=12 all-four point-fit/recovery covariance cells (recovery evidence only; intervals/coverage route through profile/bootstrap), q=2 predictor-dependent corpair(..., level = "phylogenetic") ~ w, bivariate sd_phylo1() / sd_phylo2(), and Ayumi q2/q4 stress artifacts q=4 predictor-dependent location-scale and scale-scale corpair() regressions; broader predictor-dependent structured scale-scale covariance is not a near-term priority
coordinate spatial spatial(1 | site, coords = coords) in univariate Gaussian mu and/or sigma, matching univariate mu/sigma structured correlation, one numeric mu, sigma-only, and matched mu+sigma one-slope cells for fixed-covariance coordinates with deterministic same-target fixtures, matching bivariate mu1/mu2 q=2 covariance, constant all-four q=4 location-scale covariance with corpairs(level = "spatial"), the labelled two-slope spatial(1 + x + z | p | site) q=6 mu1/mu2 location and q=12 all-four point-fit/recovery covariance cells (recovery evidence only; intervals/coverage planned), ordinary Poisson/NB2 q=1 mu intercept and unlabelled one-slope cells, the diagnostic-only Poisson spatial zi intercept, the diagnostic-only fixed-zi Poisson spatial mu intercept, and the diagnostic-only fixed-zi NB2 spatial mu intercept; sdpars, marker-specific ranef() blocks, profile targets, and check_drm() rows expose the fitted fields mesh/SPDE, multiple spatial slopes, spatial slope correlations, spatial direct-SD, spatial corpair(), pure, multiple, or labelled count spatial slopes, broad bridge/inference beyond deterministic same-target fixtures, and zero-inflated spatial effects outside the exact Poisson spatial zi, Poisson fixed-zi spatial mu, and NB2 fixed-zi spatial mu local-fit gates
animal and user-supplied relatedness Gaussian mu and sigma intercepts for animal(1 | id, pedigree/A/Ainv = ...) and relmat(1 | id, K/Q = ...), matching univariate mu/sigma structured correlations, one numeric mu, sigma-only, and matched mu+sigma one-slope cells for A-matrix animal() and K/Q relmat() with deterministic same-target fixtures, matching labelled mu1/mu2 q=2 location covariance, constant all-four q=4 location-scale covariance, the labelled two-slope animal(1 + x + z | p | id) / relmat(1 + x + z | p | id) q=6 mu1/mu2 location and q=12 all-four point-fit/recovery covariance cells (recovery evidence only; intervals/coverage planned), the exact matching supplied-K bivariate relmat() q2 location-intercept REML cell at point_fit_recovery, and ordinary Poisson/NB2 q=1 mu intercept and unlabelled one-slope cells with corpairs(), summary()$covariance, profile-target status, diagnostics, and dense-likelihood tests where relevant sparse large-pedigree construction, supplied-Q and animal-model bivariate REML, multiple structured slopes, slope correlations, predictor-dependent corpair() regressions, optional phylo(..., A/Ainv = ...) input, pure, multiple, or labelled animal/relmat() count slopes, generic direct-SD naming design, and broad bridge/inference beyond deterministic same-target fixtures
inference/output fixed-effect SEs, direct profile-ready targets where implemented, corpairs(conf.int = TRUE) with explicit interval status derived-profile intervals for q=4 correlations and richer marginal-effect/visualization helpers

Q-Series v1 closes as a row-level evidence arc, not broad structured-RE support. The authority table is docs/dev-log/dashboard/structured-re-q-series-support-cells.tsv with 104 rows: eight rows are inference_ready for interval and coverage status: qseries_phylo_q1_mu_intercept, qseries_phylo_q1_sigma_one_slope, qseries_phylo_q2_mu1_mu2_one_slope, qseries_spatial_q1_mu_intercept, qseries_animal_q1_sigma_one_slope, qseries_relmat_q1_mu_intercept, qseries_relmat_q1_sigma_one_slope, and qseries_relmat_q2_mu1_mu2_one_slope. No structured row is supported. The default confint() location-axis small-sample bias+t correction is validated for five rows: the three q1 mu:(Intercept) rows (phylo, spatial, relmat) and the two q2 mu1:x/mu2:x slope-SD rows (phylo, relmat). The q2 rows are inference_ready only through that corrected channel; their raw uncorrected Wald intervals fail coverage. The three q1 sigma one-slope rows (phylo, animal, relmat) instead use raw uncorrected log-SD Wald-z evidence, with one-sided miss asymmetry and conservative sigma:x coverage. Fixed-covariance spatial q2, animal q2, spatial sigma, q4/q8, count, and non-Gaussian structured rows remain separate future arcs.

Spatial parity now has its own ladder. The smallest missing phylogenetic sibling has landed for the constant q=2 location layer: coordinate-spatial bivariate location covariance for mu1 and mu2, with corpairs(level = "spatial"), direct profile-target labels, recovery evidence, and a dense covariance comparator. Constant all-four spatial q=4 location-scale blocks have since landed as fitted extractor/diagnostic smoke, with derived q=4 correlation intervals explicitly unavailable. Mesh/SPDE, multiple spatial slopes, broad structured bridge/inference beyond deterministic same-target fixtures, spatial direct-SD surfaces, spatial corpair() regression, pure, multiple, or labelled count spatial slopes, and zero-inflated spatial effects outside the exact Poisson spatial zi, Poisson fixed-zi spatial mu, and NB2 fixed-zi spatial mu local-fit gates remain behind their own evidence gates.

Phase 5b: Large-Data Memory Strategy

  • Status: first storage controls and benchmark harness implemented; Phase 5b now hardens those controls for newer structured-effect surfaces. The first sparse fixed-effect path is implemented, and the first opt-in Gaussian aggregation path is fitted for repeated univariate Gaussian fixed-effect rows. Broader sparse matrices, broader aggregation, and repeated million-row benchmarks remain planned.
  • drm_control() now supports optimizer settings plus the first memory-light fitted-object controls: keep_data = FALSE, keep_model_frame = FALSE, and keep_tmb_object = FALSE.
  • keep_model_frame = FALSE now also drops nested direct-SD and fitted corpair() model-frame caches after their model matrices and group metadata have been retained.
  • check_drm() now reports the density of the largest retained fixed-effect design block, giving users a concrete sparse-design signal before sparse_fixed is implemented.
  • Internal dense-versus-sparse fixed-effect matrix parity helpers now compare stats::model.matrix() with Matrix::sparse.model.matrix() before any sparse fit path is exposed.
  • drm_control(sparse_fixed = TRUE) now fits the first sparse fixed-effect path for univariate Gaussian mu fixed effects with intercept-only sigma, no random effects, no structured effects, and no known covariance.
  • The optional large-data benchmark now records the largest fixed-effect design block, column count, nonzero count, and density.
  • The same benchmark harness now records structured and sparse_fixed settings and can run a non-phylogenetic sparse fixed-effect smoke scenario with --structured none --factor-heavy true --sparse-fixed true.
  • drm_control(aggregate_gaussian = TRUE) now fits the first sufficient-statistic aggregation path for univariate Gaussian fixed-effect models with repeated processed mu and sigma design rows. Random effects, direct-SD formulas, structured effects, known sampling covariance, bivariate models, non-Gaussian families, non-unit weights, and combined sparse fixed effects remain planned.
  • The benchmark harness can run a non-phylogenetic repeated-cell aggregation smoke scenario with --structured none --aggregate-gaussian true --aggregation-cells 100.
  • Extend memory-light fit controls for large phylogenetic and spatial datasets with broader method-matrix coverage, sparse fixed-effect matrices, aggregation, and repeated large-row benchmarks.
  • Extend sparse fixed-effect matrix support beyond the first univariate Gaussian mu path before claiming million-row readiness.
  • Use docs/design/26-sparse-fixed-effect-matrices.md as the implementation contract for sparse fixed-effect matrices.
  • Extend aggregation or sufficient-statistic paths beyond the first univariate Gaussian fixed-effect route where repeated rows can be collapsed without changing the likelihood.
  • An initial non-CRAN benchmark harness exists at bench/large-phylo-location.R; use it to record 100k, 500k, 1M, and 5M observation-row runs with 1k-10k species as the implementation matures.
  • Treat the sparse A-inverse phylogenetic path and large-row memory path as separate scaling problems.

Phase 6: Profile-Likelihood Inference

  • Status: closure-audited for the scoped direct-profile inference surfaces.
  • Tracking issue: #30.
  • profile_targets(fit) lists the current target names and readiness notes for confidence-interval and profile-likelihood work, including the first bivariate phylogenetic mu1/mu2 SD and correlation targets.
  • The target inventory uses a controlled namespace for target_type, profile_ready, profile_note, and transformation. A row is profile_ready only when it is direct and the fitted object retained the TMB object; memory-light fits report profile_note = "tmb_object_required".
  • confint(fit) now returns Wald fixed-effect intervals, and confint(fit, parm = "fixef:mu:x", method = "profile") profiles explicit direct fixed-effect, constant sigma/sigma1/sigma2, ordinary random-effect SD, ordinary random-effect correlation, phylogenetic mu SD, bivariate phylogenetic mu1/mu2 correlation, and constant residual rho12 targets.
  • confint(fit, parm = "sigma", method = "profile", newdata = grid) and confint(fit, parm = "rho12", method = "profile", newdata = grid) profile row-specific response-scale sigma and residual-correlation values by profiling the fixed-effect linear predictor for each supplied row. The same row-specific route is now covered for sigma1, sigma2, and fitted q=2 ordinary or phylogenetic corpair() values; ambiguous newdata requests are rejected before profile optimization.
  • The model-workflow article now shows the profile-example boundary directly: constant sigma uses a fitted-object target, predictor-dependent sigma, sigma1, sigma2, and rho12 use supplied newdata rows, and random-effect SD/correlation examples copy exact target names from profile_targets().
  • Direct covariance profile intervals are implemented for the first univariate mu/sigma random-intercept correlation target, the first bivariate mu1/mu2 random-intercept correlation target, and the first bivariate phylogenetic mu1/mu2 mean-mean correlation target. These intervals are available through both confint(..., method = "profile") and summary(conf.int = TRUE, method = "profile", ci_parm = ...).
  • Direct profile calls now wrap TMB::tmbprofile() failures with the profile_targets() target name and block attempts to override the internal obj, name, lincomb, or trace arguments through ....
  • The interval-readiness gate now keeps q4 derived correlations and covariance products explicitly unavailable for intervals, rejects unsupported bootstrap interval method requests before interval work begins, and checks that returned interval status/source values stay inside the current shared vocabulary.
  • Extend profile-likelihood confidence intervals to additional direct TMB parameters such as other residual-scale parameters, ordinal cutpoints, and multi-row or custom contrasts beyond one newdata row at a time.
  • Use user-facing target names from the fitted object, for example sd:mu:(1 | id), sd:mu:phylo(1 | species), sd:mu:mu1:phylo(1 | species), cor:phylo:cor(mu1:(Intercept),mu2:(Intercept) | phylo | species), cor:mu:cor((Intercept),x | id), cor:mu_sigma:cor(mu:(Intercept),sigma:(Intercept) | p | id), cor:mu:cor(mu1:(Intercept),mu2:(Intercept) | p | id), fixef:rho12:(Intercept), and sigma or rho12.
  • Prefer TMB::tmbprofile() plus uniroot() for one-dimensional intervals, because it warm-starts constrained optimizations and avoids wasteful grids.
  • Support linear combinations through TMB’s lincomb machinery where possible.
  • Treat nonlinear derived quantities, such as ICCs, repeatability, phylogenetic signal, and variance-component correlations, as a later fix-and-refit problem with boundary and convergence flags.
  • Keep parametric bootstrap as a fallback for boundary, non-monotone, or failed inner-optimization cases.

Phase 6 should now be closed through small inference slices rather than one large confidence-interval rewrite:

Slice Goal Main work Done when
51 Profile issue and target audit Create the Phase 6 tracking issue, audit fitted profile_targets(), confint(), summary(conf.int = TRUE), and corpairs(conf.int = TRUE) support, and record direct versus derived boundaries. GitHub issue, design note, check-log, and after-task note agree.
52 Target namespace cleanup Stabilize user-facing target names, transformations, target_type, profile_ready, and unavailable-status wording. Target inventory tests cover representative fitted classes.
53 Direct profile robustness Harden direct TMB::tmbprofile() wrappers, one-target-only errors, and failed-profile messages. Direct profile tests cover success and clear failure paths.
54 Response-scale row profiles Extend and test newdata profile intervals for sigma, sigma1, sigma2, rho12, and fitted q2 corpair() rows. Done: row-specific intervals transform back to response scales and ambiguous inputs are rejected.
55 Random-effect SD and correlation intervals Stabilize direct profile intervals for currently fitted ordinary, phylogenetic, and spatial random-effect SD/correlation targets. Done: summary() and corpairs() attach intervals only to profile-ready rows, while modelled and q4 derived rows keep explicit unavailable statuses.
56 Derived-target status Make q4 correlations, ICCs, repeatability, phylogenetic signal, and other nonlinear summaries explicit point-estimate or unavailable-CI targets. Done: simple Gaussian repeatability and phylogenetic-signal rows are reported as derived variance-ratio targets, and unsupported derived intervals fail or report unavailable status before expensive profiling.
57 Output integration Align interval columns and status values across summary(), corpairs(), confint(), and profile_targets(). Done: conf.status is now part of successful confint() rows and interval-aware summary() tables, with contract tests for returned and printed parameter tables.
58 Inference diagnostics Add diagnostics for boundary, near-correlation-limit, non-monotone, and failed inner-optimization profiles. Done: profile interval rows carry profile.boundary and profile.message, and failed profile errors name boundary, one-sided, non-monotone, and failed-inner-optimization possibilities.
59 Profile inference docs Update profile-CI design, known limitations, tutorials, and NEWS for any user-facing behavior changes. Done: README, known limitations, model workflow, model map, bivariate, phylogenetic-spatial, and profile-CI design prose teach conf.status, profile.boundary, and profile.message without claiming derived q4 intervals.
60 Phase 6 gate Run focused tests, full package tests when practical, pkgdown checks, after-phase audit, PR, and GitHub Actions. Done when this gate PR has green local checks, an after-phase report, pkgdown evidence, and GitHub Actions.

Phase 6b: Tutorial Quality Upgrade

  • Tracking issue: #31.
  • Use docs/design/21-tutorial-style.md as the tutorial contract.
  • Jason should source-map the tutorial examples the project owner provided, including location-scale meta-analysis, phylogenetic location-scale, ecology location-scale, phylo-spatial, multinomial GLMM, phylogenetic simulation, and glmmTMB::equalto() examples.
  • Pat should user-test each major drmTMB tutorial for a concrete question, real or transparent simulated data, symbolic equations, model output, plots or tables, interpretation, diagnostics, and recovery advice.
  • Add more symbolic maths and detailed biological interpretation to each major tutorial before calling the tutorial layer mature. The reader should see the model equation, the drmTMB syntax, the fitted output, and the biological meaning together.
  • Upgrade the first tutorials in this order: Gaussian location-scale, bivariate location-coscale, meta-analysis, phylogenetic location effects, and random-effect scale models.

Phase 6b should turn the implemented surfaces into a coherent reader path:

Slice Goal Main work Done when
61 Tutorial issue and source map Create the Phase 6b tracking issue and compare current tutorials with docs/design/21-tutorial-style.md and project-owner example priorities. Done: docs/design/32-phase-6b-tutorial-source-map.md maps the tutorial fixes and adds the biological and mathematical interpretation contract for slopes, variance components, sd(group), rho12, and corpairs() rows.
62 Tutorial landing path Improve pkgdown navigation from scientific question to tutorial to reference page. Done: Getting Started and the model map now share a question-first path from scientific phrase to tutorial, guide, or reference workflow.
63 Gaussian location-scale polish Tighten the question, equation, runnable model, fitted output, interpretation, diagnostics, and plot/table guidance. Done: the Gaussian tutorial now separates fixed mean slopes, fixed residual-scale slopes, random-slope SDs, residual-scale random-slope SDs, and random-effect scale slopes.
64 Bivariate coscale polish Make residual rho12, sigma1/sigma2, response-scale interpretation, and intervals easier to read. Done: the bivariate tutorial now reads mu1, mu2, sigma1, sigma2, and rho12 slopes as separate biological claims and keeps residual rho12 distinct from group-level corpairs() rows.
65 Meta-analysis polish Clarify meta_V(V = V) known covariance, deprecated meta_known_V(V = V) compatibility, ordinary weights, residual sigma, and unsupported combinations. Done: the meta-analysis tutorial now names known sampling variance, fitted extra heterogeneity SD, heterogeneity variance, and total observation variance as different report scales.
66 Structural-dependence polish Refine phylogenetic and spatial examples, mesh/coords guidance, citation notes, and fitted-versus-planned status. Done: the structural-dependence tutorial now gives a six-row q=4 phylogenetic interpretation table and keeps mesh/SPDE, multiple spatial slopes, q=4 extensions, and derived intervals visibly planned.
67 Random-effect scale and covariance tutorial Explain sd(group), sd(..., level = ...), Family A versus Family B, corpairs(), and invalid mixed formulations. Done: the scale guide now explains Family A versus Family B, current sd_phylo() naming, the future sd(..., level = ...) idea, and invalid mixed formulations.
68 Phase 6b gate Run Pat/Rose tutorial audit, pkgdown build/check, stale-wording scan, NEWS/roadmap updates, PR, and GitHub Actions. Done locally: pkgdown build/check and stale-claim scans passed; GitHub Actions remains the PR-side gate after push.

Phase 6c: Random Slopes and Structured-Slope Examples

  • Tracking issue: #33. Four-week sprint epic: #436, with child issues #437-#444 for the digital-twin exchange, support-matrix refresh, Gaussian closeout, bivariate slope gate, non-Gaussian slope admission, structured one-slope audit, coscale boundary, and tutorial/release ledger, plus #446 for the random-slope simulation power, accuracy, and coverage plan.
  • Simulation bridge: #59 is the Phase 18 mega-issue for power, accuracy, coverage, runtime, and failure-mode evidence across families and model types; #446 is the Phase 6c child issue for turning random-slope candidate cells into a concrete simulation plan; #255 keeps replicate-level versus aggregate simulation artifacts honest; and #60 stays the smaller comparator-package lane for glmmTMB, direct TMB baselines, DRM.jl, GLLVM.jl, and other honest parameter-target comparisons. Phase 6c capability issues should link into #59 when they need accuracy, coverage, or power evidence, rather than treating twin or comparator results as drmTMB coverage evidence.
  • Treat Phase 6c as the random-slope bridge between the Phase 6 inference work, the Phase 6b tutorial layer, and the later Phase 10-12 structural-dependence programmes. It does not replace the later bivariate covariance programme; it records the slope policy and should implement only the first slope paths that have simulation recovery and readable output.
  • Start with one structured Gaussian mu slope for each relevant dependence layer: ordinary grouped effects as the baseline, then phylogenetic, coordinate-spatial, animal-model, and relmat() effects. The first fitted one-slope routes exist for all four structured layers, and phylo_mu_slope, spatial_mu_slope, animal_mu_slope, and relmat_mu_slope are manual opt-in Phase 18 artifact tasks. They remain excluded from task = "all" and are dispatch evidence only, not recovery, coverage, or power evidence. Design for up to two structured mu slopes as an advanced path if diagnostics and recovery remain stable.
  • Keep three or more structured slopes outside the advertised near-term path. The covariance dimension grows quickly, so these models should remain distant-future expert use.
  • For first structured one-slope paths, do not estimate intercept-slope correlations in the baseline path. Intercept-slope correlations should still be part of the Phase 6c inference roadmap as an advanced, diagnostic-heavy path once the one-slope point estimates and recovery tests are stable.
  • Include profile-likelihood CI planning for slope quantities. The first interval targets should be random-slope SDs and any slope-related correlations that are direct, identifiable TMB targets. Derived or weakly identified slope correlations should report explicit unavailable-status rows in profile_targets() or corpairs() until a supported interval method exists.
  • A later high-value biological target is the bivariate slope1-slope2 correlation for the same environmental covariate, such as a plasticity syndrome across species or individuals. This should eventually include both point estimates and profile-likelihood intervals where the target is direct and recovery evidence is good.
  • Phase 6c examples should include symbolic maths, drmTMB syntax, output interpretation, and biological examples. Good first examples include thermal tolerance plasticity along temperature, desiccation tolerance along humidity, or behavioural reaction norms along disturbance.
  • Core ordinary grouped status: the random-intercept, one-slope, and q > 2 ordinary Gaussian mu baseline is now recorded in docs/design/33-phase-6c-core-random-effects.md. The fitted core covers ordinary Gaussian mu random intercepts, independent mu random slopes, ordinary correlated intercept-slope blocks, ordinary unstructured numeric multi-slope mu blocks, residual-scale random intercepts and independent residual-scale slopes, matching labelled mu/sigma random-intercept covariance, and direct sd(group) models for unlabelled Gaussian mu random intercepts. Bivariate Gaussian now also has the matching sigma1/sigma2 q2 scale-slope block as a fitted first slice. The first coordinate-spatial, phylogenetic, animal-model, and relmat() one-slope Gaussian mu paths are fitted; the same-response q2 bivariate location-scale slope route is fitted and has a Phase 18 smoke/recovery lane. The exact q1 Gaussian sigma one-slope paths are also fitted for those four structured providers, with provider-specific inference boundaries recorded in the capability ledger. Additional multiple or labelled structured-slope layouts outside the exact fitted ledger cells, larger structured slope covariance/correlation, and p8/q8 endpoint blocks remain later work for Phases 10 and 12.
  • Closure boundary: Phase 6c now includes the ordinary grouped q > 2 Gaussian mu block path, with q=3 recovery, q=4 output-contract checks, and extractor coverage in sdpars$mu, corpars$re_cov, corpairs(), summary()$covariance, and profile_targets(). Larger ordinary blocks remain advanced, sample-size hungry fits; q > 2 SDs are direct profile targets, but q > 2 correlations remain derived-unavailable for direct profile intervals. Gaussian sigma random intercepts and independent numeric slopes are fitted on log-sigma; matching bivariate Gaussian sigma1/sigma2 slope-only covariance is fitted as the first q2 scale-slope slice, and matching same-response bivariate mu/sigma slope-only covariance has its own q2 smoke/recovery lane. The first ordinary q8 endpoint route now has smoke/recovery diagnostic artifacts, and the 2026-06-07 local two-cell audit keeps q8 at hold_diagnostic after 38/40 completed manifests, convergence rates of 0.263 and 0.158, zero positive-Hessian fits, two leading-minor optimization errors, and no usable Wald intervals. Q8 coverage, q8 power, and richer q8 variants remain planned. Unlabelled univariate correlated residual-scale intercept-slope and multi-slope blocks are fitted; labelled residual-scale and cross-formula mu-sigma slope covariance remain planned. The structured one-slope Gaussian mu handoff is also current: spatial(1 + x | site, coords = coords), phylo(1 + x | species, tree = tree), animal(1 + x | id, ...), and relmat(1 + x | id, ...) fit independent intercept and slope fields for the first univariate Gaussian route. Multiple structured slopes, larger structured slope covariance/correlation, broader bivariate structured slope blocks, and structured bridge/inference remain planned. The #442 audit ledger in docs/design/59-structural-slope-and-non-gaussian-map.md now records the q2/q4 split, evidence handles, #335 metadata-accessor closure, and #446 simulation-plan handoff for those structured one-slope rows.
  • Bivariate slope-only gate: #440 is closed at the evidence-gate level by docs/design/145-phase6c-bivariate-slope-evidence-gate.md. Matching slope-only mu1/mu2 blocks such as (0 + x | p | id) are fitted, extractor-ready, profile-target-ready, diagnostic-ready, and manual-artifact dispatch-ready through biv_gaussian_mu_slope. This remains an artifact-ready lane, not a recovery, coverage, power, multicore, bootstrap, or broad p8/q8 claim; #446 owns the formal simulation-plan handoff.
  • Non-Gaussian mu slope gate: #441 is closed at the admission-decision level by docs/design/147-phase6c-nongaussian-mu-slope-ademp.md. Ordinary Poisson and NB2 independent mu slopes are ready_grid; Student-t, lognormal, Gamma, beta, beta-binomial, and zero-truncated NB2 independent mu slopes are ready_source_test. Correlated slopes, labelled covariance, structured slopes, non-Gaussian sigma or shape random effects beyond the exact Student-t phylo nu local-fit gate, inflation/hurdle random effects beyond the exact Poisson spatial zi, Poisson fixed-zi spatial mu, NB2 fixed-zi spatial mu, and truncated-NB2 relmat hu local-fit gates, ordinal covariance outside the ordinary mu intercept/slope and exact phylogenetic gates, and mixed-response bivariate models remain planned or blocked until separate evidence exists.
  • Random-slope simulation plan: #446 is closed at the planning level by docs/design/148-phase6c-random-slope-simulation-plan.md. The next Phase 18 work should run diagnostic pilots in this order: registry preflight, bivariate slope-only artifact pilot, ordinary Gaussian mu/sigma slope pilots, ordinary Poisson/NB2 mu slope pilot, source-tested non-Gaussian slope smoke artifacts, and structured Gaussian one-slope wrapper pilots. A diagnostic pilot can propose a formal grid; it cannot by itself create recovery, coverage, or power claims.
  • Twin/sister exchange closeout: #437 is closed at the coordination level by docs/dev-log/twin-sister-exchange.md. The first exchange loop accepted process lessons from DRM.jl, GLLVM.jl, and gllvmTMB for planning only: keep evidence tiers separate, keep simulation denominators visible, and pair reader docs with status maps. No sister-package speed, convergence, coverage, or recovery result is treated as drmTMB evidence without local validation, and no external code was copied.
  • Sprint parent closeout: #436 is closed at the capability-ledger level by docs/design/152-phase6c-random-slope-sprint-closeout.md. Its child issues #437, #438, #439, #440, #441, #442, #443, #444, and #446 are closed on main; #33, #59, #60, #147, #342, #61, and #5 remain open for broader structured-slope, simulation, comparator, release, and covariance work.
  • Public bootstrap interval closeout: #265 is closed at the first public direct-target boundary by docs/design/153-public-bootstrap-interval-closeout.md. confint(..., method = "bootstrap") is available for selected direct fitted-object targets with refit success/failure metadata; summary(), corpairs(), prediction tables, newdata, derived q4 correlations, repeatability, phylogenetic signal, and operating-characteristic claims remain separate work.
  • Coscale boundary: in current docs, coscale means residual bivariate Gaussian rho12; singular corpair() is a formula marker for supported latent random-effect correlation regressions only; plural corpairs() is an extractor for residual rho12 and fitted latent correlation rows. Extracted structured rows do not imply that random effects in rho12, predictor-dependent q4, residual-scale, slope-specific, spatial, animal, or relmat() corpair() regressions are fitted.
Slice Goal Main work Done when
69 Random-slope issue and math contract Create/maintain the Phase 6c issue, write the ordinary/phylogenetic/spatial one-slope equations, and fix coefficient naming rules. Done for the ordinary grouped core: docs/design/33-phase-6c-core-random-effects.md records the symbolic equations, syntax, output rows, and stable/planned boundary.
70 Ordinary one-slope baseline Stabilize ordinary grouped mu one-slope syntax, extractor labels, corpairs() coefficient columns, and profile-target names. Done for the ordinary core: tests cover independent and correlated one-slope mu blocks, labelled (1 + x | p | ID) names, the mean-slope corpairs() row, and direct profile-target names.
71 Phylogenetic one-slope design and fit Extend phylo() from intercept-only mu to one structured mu slope after the algebra and storage order are explicit. Superseded by Slices 39-82: phylo(1 + x | species, tree = tree) is fitted for univariate Gaussian mu with independent intercept and slope fields, direct SD targets, diagnostics, and focused recovery evidence.
72 Spatial one-slope design and fit Extend spatial() from intercept-only mu to one structured mu slope after coordinate/mesh diagnostics are clear. Done for the coordinate path: Phase 10 fits spatial(1 + x | site, coords = coords) as independent intercept and slope fields with separate SDs, direct profile targets, ranef() terms, and simulation evidence. Mesh slopes remain planned.
73 One-slope diagnostics and inference Add replication, weak-SD, boundary, profile-target, and profile-likelihood CI diagnostics for fitted one-slope paths. Done for the ordinary core, first coordinate-spatial slope, and first phylogenetic/animal/relmat one-slope routes: tests cover weak random-slope design, boundary SDs, ordinary random-slope SD targets, intercept-slope correlation targets where fitted, and structured one-slope direct SD targets.
74 Slope-correlation advanced gate Design two-slope models, intercept-slope correlations, and bivariate slope1-slope2 correlations without advertising them as routine. Done for the ordinary core: the source map names the required coefficient-aware corpair() syntax, corpairs() rows, direct-target interval status, and recovery evidence before bivariate slope correlations are fitted or taught.
75 Biological examples Add tutorial examples for reaction norms and bivariate plasticity-syndrome questions, including how to read slope SDs, slope correlations, and interval/status columns. Done for the ordinary core: the location-scale tutorial now gives a thermal reaction-norm example with fixed slope, random-intercept SD, random-slope SD, group-level intercept-slope correlation, and profile_targets() interpretation. Full structured-slope examples wait until Phases 10-13 settle.
76 Phase 6c gate Run focused tests, pkgdown checks, after-phase audit, PR, and GitHub Actions. Done locally for the Phase 6c core: focused tests, pkgdown build/check, stale-claim scans, check-log entry, and after-phase report are complete. GitHub Actions remains the PR-side gate.
77 Random-effect slope capacity closeout Close #128 by tying the current location, scale, bivariate, structured, and non-Gaussian random-slope boundaries to the support matrix, known-limitations ledger, tests, and Phase 18 simulation handoff. Done locally: docs/design/59-structural-slope-and-non-gaussian-map.md, README stable-core rows, docs/dev-log/known-limitations.md, and current tests now provide the issue-linked capacity table. Unsupported broader labelled structured slope covariance, slope-specific sd() models, q8 coverage/power evidence, richer q8 variants, structured bridge/inference promotion, and broad non-Gaussian structured slopes beyond the exact q1 count cells remain planned follow-ups.
78 Random-slope tutorial and release ledger Close #444 by tying the reader-facing random-slope course path to model-map status, location-scale equations and diagnostics, bivariate slope-slope guidance, reference-index discoverability, and a finished-versus-planned release ledger. Done locally: vignettes/location-scale.Rmd, vignettes/bivariate-coscale.Rmd, vignettes/model-map.Rmd, and docs/design/151-phase6c-random-slope-tutorial-ledger.md now record the ordinary, residual-scale, bivariate, non-Gaussian, structured, sd(group), rho12, corpair(), and corpairs() teaching boundaries. Unsupported cells remain explicit planned neighbours rather than runnable tutorial syntax.
79 Twin/sister exchange closeout Close #437 by making the daily exchange protocol, first scout cards, provenance corrections, and transfer-of-evidence boundary repo-visible on main. Done locally: docs/dev-log/twin-sister-exchange.md records the accepted planning lessons from DRM.jl, GLLVM.jl, and gllvmTMB, locks the GLLVM.jl and meta_V(V = V) naming corrections, and states that no sibling speed, coverage, recovery, or code claim transfers to drmTMB without local validation.
80 Sprint parent closeout Close #436 by reconciling child issue state, evidence handles, transfer-of-evidence boundaries, and remaining open follow-up issues. Done locally: docs/design/152-phase6c-random-slope-sprint-closeout.md records that #437-#444 and #446 are closed, keeps fitted/source-tested/artifact-ready/planned/unsupported cells separate, and routes remaining broad work to #33, #59, #60, #147, #342, #61, and #5.
81 Public bootstrap interval closeout Close #265 by mapping the public bootstrap interval checklist to current confint(), target extraction, refit metadata, docs, tests, and limitations. Done locally: docs/design/153-public-bootstrap-interval-closeout.md records that confint(..., method = "bootstrap") is implemented for selected direct fitted-object targets and remains explicitly separate from summary/extractor routing, newdata, derived intervals, and Phase 18 coverage or power claims.

Phase 6d: Stable-Core Validation and Engine Hardening

  • Tracking issue: #38.
  • Local closure: Phase 6d is locally closed as of 2026-05-15 with focused tests, full package tests, pkgdown build/check, R CMD check, stale-claim scans, check-log evidence, and the after-phase report docs/dev-log/after-phase/2026-05-15-phase-6d-stable-core-hardening-closure.md. GitHub Actions remains the PR-side gate.
  • Treat Phase 6d as the audit-response lane. It should not distract from the current profile-CI slices, but it records the cross-cutting work needed before drmTMB expands too far into new families, broad spatial claims, or high-dimensional random-effect structures.
  • Add a stable-core matrix for the README, model-map, and pkgdown site. The table should make clear which surfaces are stable, which are fitted first slices, which are opt-in controls, which are parsed but rejected, which are documentation-only roadmap items, and which have profile-likelihood interval support.
  • Maintain a validation-debt register that links each advertised model surface to simulation recovery, malformed-input tests, diagnostics, profile/CI status, documentation, and check-log evidence.
  • Add failure-safe standard-error handling. A future se = FALSE or equivalent control should let a useful fit exist without forcing TMB::sdreport(), and failed standard-error calculations should store an sdr_error rather than making the whole object unusable.
  • Design optimizer controls before importing multi-start behavior. The first contract should expose starts, maps or fixed parameters, optimizer controls, and a fallback optimizer. Any multi-start implementation must pin report(), sdreport(), summaries, profiles, and extractors to the winning opt$par rather than the TMB object’s last evaluated parameter state.
  • Add diagnostics and wording guards for dense known covariance, large-data claims, and spatial routes. Dense known covariance should be labelled small-to-moderate unless sparse or block-sparse evidence exists.
  • Audit count likelihood kernels for avoidable loops over observed counts and replace them with stable closed-form lgamma expressions where appropriate.
  • Plan C++ likelihood modularization before the single TMB template grows much further. The first action should be a source map and refactor plan, not a broad rewrite during fragile inference work.
  • Make check_drm() diagnostic status more visible in summaries, tutorials, or workflow docs, so users see convergence, Hessian, boundary, and near-correlation-limit warnings before interpreting complex fits.

Phase 6d should be closed as small hardening slices:

Slice Goal Main work Done when
77 Stable-core feature matrix Add a README/model-map/pkgdown table for fixed effects, random effects, sigma, known covariance, phylogeny, spatial, bivariate rho12, latent corpair(), profile-CI support, and status. Done: README and model-map now carry a stable-core matrix that separates stable surfaces, first slices, opt-in controls, and planned or rejected neighbours, with profile/diagnostic status attached to each row.
78 Validation-debt register Create a design note or issue-backed register linking each stable, first-slice, or opt-in surface to recovery tests, diagnostics, interval status, docs, and check-log evidence. Done: docs/design/34-validation-debt-register.md maps each stable-core row to evidence, diagnostics, interval status, docs, and explicit debt, with README, model-map, and source-map pointers.
79 Standard-error and sdreport() controls Design and implement failure-safe uncertainty controls, including se = FALSE behavior if compatible with current APIs. Done: drm_control(se = FALSE) skips TMB::sdreport() while keeping optimized fits usable for non-Wald post-fit methods, and skipped or failed uncertainty states are explicit in fit$uncertainty, summary(), vcov(), and check_drm().
80 Optimizer, start, map, and multi-start design Add the public contract for starts, fixed or mapped parameters, fallback optimizers, and cautious future multi-start support. Done: docs/design/35-optimizer-start-map-multistart.md records the contract, future control names are reserved, and profile callbacks re-pin the TMB object to the selected opt$par before profiling.
81 Dense covariance and large-data guards Add diagnostics and wording for dense known covariance, sparse/block-sparse expectations, and large-data claim boundaries. Done: dense meta_V(V = V) known-covariance fits, with deprecated meta_known_V(V = V) compatibility, now appear as check_drm() notes with dense storage, dimension, density, size, rank, and conditioning, and the meta-analysis, large-data, and validation-debt docs label dense known covariance as small-to-moderate until sparse or block-sparse evidence exists.
82 Count likelihood kernel audit Review count likelihood sections and replace slow count loops with closed-form expressions where practical. Done: NB2, zero-inflated NB2, zero-truncated NB2, and hurdle NB2 now share an internal count-kernel helper that avoids observed-count loops with a closed-form lgamma ratio and a small-alpha y series guard; deterministic high-count tests confirm unchanged likelihood values.
83 C++ modularization source map Write the refactor plan for splitting likelihood families, covariance blocks, structured effects, and numerical helpers without changing behavior. Done: docs/design/36-cpp-modularization-source-map.md names the header-only split plan, hidden branch inventory, public branch gates, test gates, and pieces that must not move in the first pass.
84 Phase 6d gate Run targeted tests, pkgdown checks, Rose audit, Grace CI gate, and update NEWS/check-log/roadmap. Done locally: focused tests, full tests, pkgdown build/check, R CMD check, stale-claim scans, check-log entry, and after-phase report are complete; GitHub Actions remains the PR-side gate.

Phase 6e: Worked-Example Maturation

  • Status: started after PR #46 merged the Phase 10-13 foundations into main.
  • Tracking anchor: continue from Phase 6b issue #31 unless a separate teaching issue becomes useful.
  • Treat Phase 6e as a tutorial-quality follow-through lane. It should not add formula grammar, likelihood code, or new model claims.
  • Keep guides and tutorials distinct. model-map, which-scale, distribution-families, model-workflow, large-data, and testing-likelihoods are guides unless a future slice deliberately turns a section into a full worked analysis.
  • Use docs/design/37-worked-example-inventory.md before adding a new example. The next tutorial should fill a named gap in question, equation, syntax, output, plot/table, interpretation, diagnostics, or unsupported-boundary advice.
Slice Goal Main work Done when
89 Worked-example inventory Audit the current tutorials and guides against the tutorial contract, then name the next highest-value tutorial slices. Done: docs/design/37-worked-example-inventory.md records which pages are worked tutorials versus guides, names the major gaps, and prioritizes Slice 90 for the flagship location-scale tutorial and Slice 91 for the structural-dependence reader route.
90 Flagship location-scale tutorial Deepen vignettes/location-scale.Rmd with a compact response-scale table or figure linking mean slopes, residual-scale slopes, random-slope SDs, sd(group), diagnostics, and report-scale interpretation. Done: the location-scale tutorial now has a response-scale interpretation table, trait-named parrot beak-length equations with parameter definitions, profile_targets(fit_growth) gate, fitted growth translation table, and hierarchical interpretation checklist distinguishing sigma ~ temperature, (0 + temperature | population), and sd(population) ~ habitat.
91 Structural-dependence reader route Add a phylogeny, spatial, and planned phylogeny-plus-spatial route through vignettes/phylogenetic-spatial.Rmd and make the coordinate-spatial example self-contained without widening structural-effect claims. Done: the tutorial and navigation now use “Structural dependence”, the article starts with a phylogeny/spatial/planned-combined route, and simultaneous phylo() plus spatial() remains visibly planned until multiple structural mu layers have identifiability checks.
92 Tutorial maturation gate Run pkgdown build/check, stale-status scans, Rose audit, and after-phase notes for the Phase 6e tutorial follow-through. Done locally: source and rendered pages agree on implemented surfaces, planned neighbours, diagnostics, and next examples; stale Slice 91 future wording and old pre-Slice-91 dependence labels were cleaned up.
93 0.1.2 release gate Align the active public preview surface with 0.1.2 and create the release checklist and after-task report without changing APIs, likelihoods, or tutorials. Done: PR #53 bumped active preview docs to 0.1.2, passed local tests, pkgdown, R CMD check, and PR CI, then merged to main.
94 0.1.2 release evidence Tag v0.1.2, watch tag CI, run install smoke, and record release evidence. Done: v0.1.2 points to the Slice 93 merge commit, tag CI and pkgdown deploy passed, tools/install-smoke.R v0.1.2 0.1.2 passed, and PR #54 recorded the evidence.
95 Meta-analysis source-map polish Return to examples with the meta-analysis lane: equations, exact syntax, parameter definitions, categorical heterogeneous-heterogeneity interpretation, and future meta_V() boundaries. Done locally: the meta-analysis tutorial now defines yi, vi, V, mu, sigma, sd(study), and weights = w; design docs record the Nakagawa et al., Yang and Nakagawa, Rodriguez et al., and unifying-model anchors.
96 Count NB2 source-map tutorial Add the first non-Gaussian count worked example using fixed-effect nbinom2() and optional zi ~ syntax, with source-grounded equations, parameter definitions, biological interpretation, diagnostics, and unsupported-boundary text. Done locally: vignettes/count-nbinom2.Rmd now works through a soil-invertebrate count example, links sigma to NB2 size = 1 / sigma^2, fits NB2 and zero-inflated NB2 models, and keeps non-Gaussian random effects, structured count effects, mixed-response families, and COM-Poisson planned.
97 Proportion source-map tutorial Add a bounded-response worked example using fixed-effect beta_binomial() and beta() syntax, with source-grounded equations, denominator/boundary guidance, response-scale interpretation, diagnostics, and unsupported-boundary text. Done locally: vignettes/proportion-beta-binomial.Rmd now works through seed-germination successes out of trials and strict continuous vegetation-cover proportions, links public sigma to beta precision phi = 1 / sigma^2, and keeps exact 0/1 continuous boundaries, non-Gaussian random effects beyond the supported first slices, structured bounded responses, and mixed-response families planned.
98 Bivariate group-level covariance polish Deepen vignettes/bivariate-coscale.Rmd with a compact repeated-individual example that fits matching labelled mu1/mu2 random intercepts, separates group-level covariance from residual rho12, and reports corpairs() plus summary(fit)$covariance. Done locally: the bivariate tutorial now fits an activity-boldness individual-difference model with (1 | p | ID) in both location formulas, shows the covariance diagnostic row, reads residual and group-level rows through corpairs(), and keeps bivariate random slopes, rho12 random effects, mixed-response models, and ordinary spatial covariance planned.

Phase 7: Robust and Positive Continuous Families

  • Status: univariate Student-t location-scale-shape, Tweedie mean-scale-power, and beta mean-scale models are implemented. Lognormal location-scale and Gamma mean-CV models are implemented with fixed effects plus ordinary unlabelled mu random intercepts and independent numeric slopes. Student-t and Tweedie also have ordinary unlabelled mu random intercept and independent numeric slope first slices with fixed-effect sigma and nu; Tweedie’s exact Arc 4c slope cell is inference-ready with caveats for M>=16.
  • Harden and extend Student-t, lognormal, Gamma, beta, Poisson, and negative-binomial models beside the fitted skew-normal family. Skew-normal ordinary mu random intercepts and independent numeric slopes are fitted; the exact Arc 4c slope cell is inference-ready with caveats for M>=16. The older fixed-effect guard grid remains diagnostic evidence, while broader operating-characteristic grids and skew-t remain later evidence gates.
  • Use lognormal() for positive continuous responses where mu and sigma are defined on the log-response scale and fitted() returns the arithmetic response mean.
  • Use Gamma(link = "log") for positive continuous responses where mu is the response mean and sigma is the coefficient of variation.
  • Use beta() for strict continuous proportions where mu is the mean proportion and public sigma maps internally to phi = 1 / sigma^2. Ordinary mu random intercepts for beta() and beta_binomial() now have a bounded-response Phase 18 artifact lane, and independent numeric slopes have focused source tests; correlated slopes, labelled covariance, sigma random effects, and zero-one beta random effects outside the fitted ordinary mu intercept/slope gates remain later gates.
  • Use tweedie() for non-negative semicontinuous ecological responses such as biomass, cover, or abundance indices with exact zeros and positive continuous values. The base route is univariate: bf(y ~ x, sigma ~ z, nu ~ 1), and mu also admits ordinary unlabelled random intercepts and independent numeric slopes. Public sigma = sqrt(phi), so sigma remains scale-like while comparator checks can square it to compare against Tweedie dispersion phi; the optional glmmTMB comparator now checks both low-zero and high-zero deterministic cells. nu is the power parameter constrained between 1 and 2. Predictor-dependent nu, correlated or labelled mu slopes, random effects outside ordinary mu, structured effects, and bivariate or mixed-response Tweedie models remain planned.
  • Extend the implemented family-link helper table before adding ordinal scale, denominator-aware, or additional positive-continuous likelihoods, so predict() and fitted() handle non-identity mu links consistently.
  • Add formulae for shape and tail parameters where stable.
  • Add strict starting-value and boundary diagnostics.

Phase 8: Counts, Proportions, Percentages, and Ordinal Models

  • Status: poisson(link = "log") is implemented as a fixed-effect baseline count model, including optional zi ~ predictors for zero-inflated Poisson models and standard R offset(log(exposure)) terms in the mu formula. nbinom2() is implemented as a fixed-effect mu/sigma overdispersed count model with Var(y) = mu + sigma^2 * mu^2, including standard R offset(log(exposure)) terms in the mu formula and optional zi ~ predictors for zero-inflated NB2 models. truncated_nbinom2() is implemented for positive counts where mu and sigma describe the untruncated NB2 component and fitted() returns the conditional positive-count mean. Adding hu ~ predictors to the same family route fits the implemented fixed-effect hurdle NB2 model. beta() is implemented for strict continuous proportions with public sigma. stats::binomial(link = "logit") is implemented for Bernoulli/binomial event probabilities with explicit 0/1 or cbind(successes, failures) responses, ordinary mu random intercepts or independent slopes, and no public sigma; the exact independent-slope ledger cell is inference-ready with caveats under its recorded design. beta_binomial() is implemented for counted successes out of known trial totals with public extra-binomial sigma. zero_one_beta() is implemented for continuous proportions on [0, 1] with structural exact 0 or 1 values through zoi and coi, plus ordinary mu random intercepts or independent slopes. The exact independent-slope ledger cell is inference-ready with caveats for true SD 0.50 and M>=16, with the strictly-interior-generator caveat recorded in Arc 4c. cumulative_logit() is implemented for univariate ordinal location models with ordered cutpoints, fixed latent logistic scale, and ordinary recovery-grade mu random intercepts or independent slopes. One exact q1 mu ~ phylo(1 | id, tree = tree) gate has local point-fit/extractor evidence.
  • Ordinal random effects outside the ordinary unlabelled mu intercept/slope gate and the exact phylogenetic mu intercept remain planned. Correlated or labelled grouped covariance, other structured providers, scale/discrimination, and bivariate or mixed ordinal models require separate evidence.
  • Next family sequence: ordered beta and ordinal scale or discrimination formulas after their direction is documented; zero-one-beta random effects outside ordinary mu and richer bounded-response covariance remain separate gates after the fixed-effect zoi/coi route.
  • Add ordered logit/probit extensions, COM-Poisson, generalized Poisson, and related families according to the distribution roadmap after their parameter-link and comparator contracts are documented.

The recent location-scale modelling paper and companion tutorial listed in docs/design/11-reference-programme.md are concrete replication targets for this phase series. The current package should first reproduce the Gaussian fixed-effect and Gaussian location-random-effect examples, then add comparator tests for count and bounded-response examples as the required likelihood and random-effect features land. The optional local command Rscript tools/replicate-location-scale-gaussian.R writes the current Gaussian overlap table and records which richer individual-difference examples remain blocked by future covariance or non-Gaussian random-effect work.

Phase 9: Ordinal and Denominator-Aware Models

  • Status: partially implemented. The location-only cumulative_logit() MVP is implemented for one ordered response, fixed effects, ordered cutpoints, and fixed latent logistic scale. The first plain binomial path is implemented for 0/1 and cbind(successes, failures) responses with fixed-effect mu and no public sigma. The first beta_binomial() path is implemented for cbind(successes, failures) responses, fixed effects, known trial totals, and extra-binomial sigma.
  • Historical 0.1.0 release decision: Phase 9 closed at this MVP boundary. Ordinal scale or discrimination formulae, denominator aliases beyond cbind(successes, failures), ordered beta, and zero-one beta random effects outside ordinary mu remain post-preview work unless they are implemented with tests before the version bump. The fixed-effect zero_one_beta() family is now implemented separately for structural exact-boundary continuous proportions.
  • Decide whether the next ordinal scale formula is exposed as sigma ~ ... or a family-specific discrimination parameter before coding starts; the direction of interpretation must be unambiguous. The current design note prefers sigma ~ ... with discrimination reported as derived zeta = 1 / sigma.
  • Keep cbind(successes, failures) as the canonical denominator response for plain binomial and beta-binomial models until the denominator-helper design note is implemented with tests. Do not use weights = trials as denominator syntax.
  • Add ordered beta or richer zero-one beta mixed-model/covariance routes for continuous bounded responses with exact 0 or 1 values.
  • Keep these models univariate until their parameter recovery, boundary behaviour, and tutorial interpretation are reliable.

Phase 10: Spatial Structured Effects

  • Status: coordinate-based univariate Gaussian mu intercepts, one numeric spatial slope, and constant bivariate q=2 mu1/mu2 spatial covariance are implemented; mesh/SPDE, multiple slopes, slope correlations, spatial scale, q=4 spatial covariance, and spatial corpair() regression remain planned.
  • Local coordinate-spatial foundation closure: docs/dev-log/after-phase/2026-05-15-phase-10-coordinate-spatial-foundation-closure.md records the local gate for the coordinate intercept plus one numeric slope path. The later q=2 bivariate spatial slice closes the first spatial location-location covariance gate, but not mesh/SPDE, spatial scale, q=4, or spatial corpair() regression.
  • The first fitted spatial models are univariate Gaussian mu structured effects, parallel to the implemented phylogenetic path: spatial(1 | site, coords = coords) and spatial(1 + x | site, coords = coords). The slope path uses two independent spatial fields, one for the intercept and one for the slope, with no fitted intercept-slope correlation.
  • Support spatial(1 | site, mesh = mesh) only after the coded mesh object schema, projection path, and recovery tests are implemented. The design contract and provenance policy are recorded in docs/design/09-phylogenetic-and-spatial-speed.md. coords identify observation or site locations, while mesh is the SPDE/GMRF computational scaffold.
  • Treat coords as the friendly public input and mesh as optional expert control. A dense coordinate-only Gaussian-process path would not require a mesh, but it is not the scalable route. The planned SPDE/GMRF route needs a mesh-like finite-element scaffold internally, even if drmTMB builds it from coordinates for the user.
  • Cite the SPDE/GMRF method literature and any software used for mesh or precision construction. If code is ported or closely adapted from sdmTMB, fmesher, INLA-related sources, gllvmTMB, or another project, record provenance in inst/COPYRIGHTS before calling the spatial slice complete.
  • Use a small comparator or simulation recovery test before exposing spatial effects beyond univariate mu or beyond one numeric slope.
  • Do not add spatial terms in sigma, rho12, bivariate structured covariance blocks, or spatial slope correlations until the one-slope path is stable.

Phase 11: Bivariate Random Effects and Correlation Pairs

  • Status: ordinary bivariate random-intercept and corpairs() foundation locally closed. See docs/dev-log/after-phase/2026-05-15-phase-11-bivariate-corpairs-foundation-closure.md.
  • Matching labelled random intercepts in bivariate mu1/mu2, sigma1/sigma2, and one or more same-response mu/sigma pairs are implemented after the fixed-effect bivariate Gaussian location-coscale model stabilized. The ordinary q=4 all-four intercept block reports all six fitted corpairs() rows as derived summaries. Random slopes, full cross-parameter slope covariance, direct q=4 profile intervals, rho12 random effects, and structured spatial covariance remain planned.
  • Use labelled group-level covariance blocks so residual rho12, ordinary group-level correlations, phylogenetic correlations, spatial field correlations, and mean-scale correlations stay in separate namespaces.
  • Keep the first individual-difference covariance target focused on ordinary grouped personality and plasticity terms before adding structured phylogenetic or non-phylogenetic species correlation layers.
  • For future random slopes, start with one slope and allow at most two slopes in the near-term advanced path. Do not estimate intercept-slope correlations at first. A later coefficient-aware corpair() design can target the bivariate slope1-slope2 plasticity-syndrome case, but that belongs after intercept-only covariance blocks and current corpair() rows are stable.
  • Extend corpairs() before adding complex covariance blocks, so users can see the level, group, block, responses, distributional parameters, coefficients, estimates, and uncertainty source.
  • Start with small ordinary grouped models before adding phylogenetic or spatial bivariate covariance structures.
  • Use docs/design/28-double-hierarchical-endpoint.md as the endpoint map for full individual-difference location-scale covariance models. Use docs/design/29-mammal-location-coscale-route.md as the concrete mammal body mass-litter size route for the phylogenetic bivariate covariance endpoint. The first double-hierarchical slices should add one covariance block at a time, with corpairs() output and simulation recovery before the next block is added.

Phase 12: Phylogenetic Location-Scale Extensions

  • Status: phylogenetic correlation foundation locally closed. See docs/dev-log/after-phase/2026-05-15-phase-12-phylogenetic-correlation-foundation-closure.md.
  • The fitted foundation covers bivariate mu1/mu2 phylogenetic location-location covariance, q=2 predictor-dependent phylogenetic corpair() regression, bivariate sd_phylo1() / sd_phylo2() direct-SD surfaces, and the first constant all-four q=4 phylogenetic location-scale block. These are intercept-level phylogenetic correlation paths, not phylogenetic random slopes.
  • Extend the implemented phylo(1 | species, tree = tree) Gaussian mu path to one structured mu slope, then only later to at most two structured mu slopes. Three or more structured slopes, intercept-slope correlations, and slope-slope corpair() regression are distant-future research targets.
  • Add phylogenetic terms in sigma only after the location path has larger simulation evidence and clear identifiability diagnostics.
  • Keep phylogenetic location-scale-shape models as a research target, not an early production feature.
  • Add long optional simulations for many species, near-zero phylogenetic SD, high residual noise, and combined phylogenetic plus non-phylogenetic species effects.
  • For future two-response or two-trait structured models, estimate and report phylogenetic correlation, non-phylogenetic species correlation, and residual rho12 as separate layers. The first bivariate phylogenetic mean-mean correlation is implemented; residual rho12 is not a substitute for phylogenetic or species-level covariance. Ordinary species covariance can be combined with the fitted bivariate phylogenetic mean layer, but check_drm() notes the identifiability risk when both layers use the same grouping factor.
  • Predictor-dependent phylogenetic corpair(species, level = "phylogenetic", ...) ~ w is implemented for the q=2 mu1-mu2 location-location endpoint pair. The design uses two independent unit phylogenetic fields and species-specific loadings, giving a positive-definite nonstationary covariance that reduces to the existing constant bivariate phylogenetic covariance when the correlation predictor is constant. A CRAN-safe broad-trend recovery test checks that a positive species-level predictor recovers the fitted phylogenetic correlation ordering without hitting the correlation guard. Phylogenetic location-scale and scale-scale correlation regressions require a q=4 contract and remain deferred; spatial siblings remain planned.

Phase 13: Double-Hierarchical Derived Inference

  • Status: derived-summary and interval-status foundation locally closed. See docs/dev-log/after-phase/2026-05-15-phase-13-derived-inference-foundation-closure.md.
  • Build on Phase 6 direct-parameter profile intervals, including the first covariance-row profile intervals, and Phase 11 correlation-pair models.
  • Add uncertainty for derived quantities that matter in complete individual-difference location-scale models: repeatability, phylogenetic signal, total variance, and correlations among individual differences in average response, mean-model slopes, residual scale, and scale-model slopes.
  • Started the derived-summary path with an internal registry-backed table that transforms fitted random-effect SDs and correlations into variance and covariance point estimates on the fitted random-effect scale.
  • The internal derived-summary table can also attach direct profile intervals for its component SD and correlation targets, while leaving derived covariance intervals unfilled until a valid nonlinear interval method is implemented.
  • summary(fit)$covariance now provides the first public surface for the currently fitted registry-backed variance and covariance point summaries, plus the first bivariate phylogenetic mu1/mu2 mean-mean row, without exposing q > 2 syntax or derived covariance intervals. Its covariance interval columns also include an explicit status so unavailable derived intervals are not mistaken for silently omitted support.
  • Use fix-and-refit profiles or carefully parameterized direct targets for nonlinear quantities; do not treat Wald intervals as the default for boundary variance components or correlations.
  • Report these intervals through the same corpairs() and derived-summary namespaces used for point estimates, with explicit boundary, convergence, and near-correlation-limit flags.

Phase 14: Large-Data Engine

  • Status: planned; Slice 209 adds the ADEMP-style entry blueprint in docs/design/41-phase-18-simulation-programme.md.
  • Extend memory-light fitted objects for large ecological, evolutionary, and environmental datasets beyond the current post-fit storage controls.
  • Add sparse fixed-effect matrices before claiming million-row readiness.
  • Extend Gaussian aggregation or sufficient-statistic paths beyond the first fixed-effect route where repeated rows can be collapsed without changing the likelihood.
  • Add non-CRAN benchmarks for 100k, 500k, 1M, and 5M rows with 1k-10k species.
  • Treat sparse phylogenetic A-inverse scaling, sparse known sampling covariance, and large-row model-frame memory as separate engineering problems.

Phase 15: Mixed-Response Bivariate Families

  • Status: planned.
  • Design mixed composed families such as family = c(gaussian(), poisson()) only after the joint likelihood and interpretation of cross-response dependence are explicit.
  • Decide whether mixed-response dependence is residual rho12, a latent Gaussian copula, a shared random effect, or another likelihood-specific construction before coding.
  • Keep higher-dimensional response matrices out of scope; they belong to gllvmTMB.

Phase 16: Shape and Asymmetry Models

  • Status: skew-normal fixed effects plus ordinary unlabelled mu random intercepts and independent numeric slopes are implemented; skew-t and richer asymmetry models remain planned. The exact Arc 4c slope cell is inference-ready with caveats for M>=16.
  • Add skew-t only after Student-t, the first skew-normal slice, Gaussian phylogenetic location-scale, and the core family-link contract are stable. The asymmetry route remains univariate and admits no random effects outside ordinary mu, nor structured dependence. A standalone Phase 18 skew_normal_fixed_effect artifact lane now supplies repeatable smoke/grid evidence for the fitted fixed-effect surface. The 2026-06-19 guard grid keeps fitted tail-floor exposure and fixed-gradient warnings visible. Arc 4c separately supplies 1,200-attempt-per-M profile-coverage evidence for the exact ordinary slope cell; it is not a broader skew-normal calibration grid.
  • Use GAMLSS-style names: nu for the first shape parameter and tau for the second when needed. For skew_normal(), nu should be the asymmetry or skewness parameter. The first fitted lane uses public moment parameters, with mu = E[y], sigma = SD[y], and an explicit transform to native skew-normal xi, omega, and alpha = nu inside the TMB likelihood. For skew_t(), nu should remain the asymmetry parameter and tau should control tail thickness or degrees of freedom, so the Student-t nu convention does not silently change meaning.
  • Current research anchors: sn provides the classic skew-normal density with location xi, scale omega, and slant alpha; gamlss.dist::SN2() uses mu, sigma, and nu; GAMLSS exposes several skew-t variants, so drmTMB must choose and document one parameterization; brms::skew_normal() uses mu, sigma, and alpha; RTMBdist exposes AD-compatible skew-normal and skew-t densities that are useful comparator and implementation references. The RTMBdist skew-t warning about not initializing skew exactly at zero should be treated as a numerical-starting guard for any TMB implementation.
  • Start with fixed-effect shape formulae and clear warnings about identifiability among location, residual scale, skewness, tail shape, outliers, and unmodelled heteroscedasticity. Shape random effects are a later evidence-gated lane, not the first skew-normal or skew-t slice.
  • Preserve the two scale logics when skew families arrive: sigma ~ ... models residual or distributional scale, while sd(group) ~ ... models the SD of a latent group-level effect. The first skew-family slice should not add sigma random effects, nu random effects, sd(group) scale models, or phylo()/spatial() terms until fixed-effect likelihood recovery, normal or Student-t limit behaviour, and false-positive heteroscedasticity checks pass.
  • Treat phylogenetic location-scale-shape and skewness/kurtosis evolution as a later methods programme, not a first implementation target.

Phase 17: Visualization, Marginal Effects, and Reader-Facing Inference

  • Status: reader-facing plotting delivered (issue #58 closed by PR #801). The figure gallery now demonstrates all six public plotting functions (plot_parameter_surface, worm_plot, qq_plot, centile_chart, plot_corpairs, plot.profile.drmTMB), and long-format prediction surfaces exist through prediction_grid(), predict_parameters(), and marginal_parameters(). Simulation-output plotting contracts remain tracked under Phase 18 (issue #59).
  • Slice 100 research note: docs/design/39-visualization-grammar.md records the external lessons from ggplot2, tidybayes, ggdist, emmeans, ggeffects, marginaleffects, diagnostic plotting packages, and figure-composition tools. It does not add dependencies or claim plotting support; it sharpens the data-first contract for future helpers.
  • Build a coherent visualization layer across all implemented drmTMB model families rather than one-off plotting functions. The target reader is an applied ecology, evolution, or environmental-science user who needs to see fitted location, scale, shape, coscale, random-effect SD, and latent correlation patterns without rebuilding prediction grids by hand.
  • Start with data helpers before plotting helpers: prediction_grid() or equivalent grid builders, marginal_effects() for averaging over nuisance covariates or groups, and compatibility checks for emmeans where the fitted parameter and link scale have a clean contract.
  • Slice 101 adds the first prediction_grid() contract: focal terms, supplied at values, conditioned nuisance predictors, mean-reference grids, empirical counterfactual grids, and metadata that records the grid rule. It does not add plotting, EMM contrasts, slopes, or interval columns.
  • Slice 102 adds the first reader-facing empirical-grid workflow to the model-workflow article. The example separates a conditioned prediction grid for direct predict_parameters() rows from an empirical grid that marginal_parameters(..., by = "temperature") reduces over the fitted-row covariate distribution.
  • Slice 103 adds interval provenance columns to predict_parameters() and marginal_parameters(). The current point-estimate tables report conf.status = "not_requested" and interval_source = "not_available" until a later slice computes real intervals.
  • Slice 104 adds plot_parameter_surface(), the first optional ggplot2 helper for predict_parameters() tables. The helper returns a composable ggplot object, lives on the Reference page under Visualization, and does not compute intervals, EMMs, contrasts, or slopes.
  • Slice 105 makes the ordinary summary() workflow more visible in the model-workflow guide. It now shows a random-intercept model where summary() prints response-scale random-effect SDs, derived repeatability, and profile-likelihood confidence-interval status without describing those intervals as Bayesian credible intervals.
  • Slice 106 adds delta-method standard errors to direct response-scale summary() parameter rows when TMB::sdreport() succeeds. Descriptive fitted ranges and derived variance ratios keep missing standard errors, and interval recommendations are now cell-specific: use only the Wald, profile, or bootstrap channel that the capability ledger validates for the exact SD or correlation target.
  • Slice 107 adds a reader-facing summary() map to the model-workflow guide. The guide names what coefficients, parameters, covariance, derived, and confint report, then points readers to fixef(), sigma(), rho12(), ranef(), corpairs(), and profile_targets() when the ordinary summary has identified the row they need to inspect further.
  • Slice 108 audits and clarifies the pkgdown Reference index for post-fit and plotting helpers. Fitting, checking, summaries, predictions, uncertainty, and extractors are grouped under “Model fitting and post-fit tools”; exported plotting helpers appear under “Visualization”; at the Slice 108 boundary, plot_parameter_surface() was the exported plotting helper with a stable data contract.
  • Slice 108 also tightens the summary() reference example after reader review: profile summaries keep fixed-effect Wald 95% confidence intervals while adding direct-profile sigma 95% confidence intervals, and direct constant parameter rows no longer print duplicated minimum and maximum values that equal the estimate.
  • Slice 109 translates the visualization landscape into raw-data-plus-model display rules. The model-workflow article now pairs an observed-response scatter plot with separate fitted mu and sigma surfaces, keeps the prediction table visible, and warns not to place raw response points on sigma, sigma^2, rho12, random-effect SD, or correlation axes.
  • Slice 110 improves plot_parameter_surface() labels for single-parameter panels. When a filtered prediction table contains one dpar, the default y-axis label now names the parameter and, when unique, the prediction scale.
  • Slice 111 adds a Phase 17 visualization decision map to the model-map article. It routes observed responses, fitted parameter surfaces, empirical marginal summaries, correlation rows, interval tables, and diagnostics to the current data helpers before any plotting style is chosen.
  • Slice 112 records the corpairs() plotting preflight contract. The plot_corpairs() helper consumes an explicit corpairs() table, keeps correlation level and class visible, draws intervals only from finite confidence bounds, and was tested for residual, ordinary group-level, phylogenetic, empty-table, and missing-ggplot2 cases before export.
  • Slice 113 implements the first narrow plot_corpairs() helper. It consumes explicit corpairs() tables, draws one point per correlation row, adds interval segments only for finite conf.low and conf.high bounds, keeps correlation level and class visible, and lives in the Visualization reference section.
  • Slice 114 adds optional facet support to plot_corpairs() so residual, group-level, phylogenetic, spatial, or future study-level rows can be separated by an explicit table column without changing the extraction contract.
  • Slice 115 adds the first facet = "level" Reference example for plot_corpairs(), keeping the example table explicit while making the layer separation option visible to readers.
  • Slice 116 adds a fitted bivariate-coscale tutorial path where corpairs() feeds plot_corpairs(..., facet = "level"), visually separating residual rho12 from group-level random-intercept correlation rows.
  • Slice 117 adds the first emmeans preflight test for the existing reference-grid and link-scale contract. Small fixed-effect fits now check that prediction_grid() plus predict_parameters(type = "link") and predict_parameters(type = "response") preserve the documented inverse-link relationship across implemented univariate, count, proportion, ordinal, and bivariate Gaussian families without adding an emmeans dependency or contrast API.
  • Slice 118 records the planned emmeans interface contract in docs/design/40-emmeans-interface-contract.md. The first public method should be a narrow fixed-effect univariate mu path using the official recover_data() and emm_basis() extension API, with bivariate, zero-inflated, hurdle, ordinal expected-score, random-effect, structured-effect, slope, and interval-aware targets staying blocked until their algebra and tests are explicit. Broader contrast helpers should stay separate from the first EMM grid.
  • Slice 119 adds an internal fixed-effect basis helper for the future emm_basis() path. drm_fixed_effect_basis() returns the requested dpar model matrix, coefficients, optional covariance submatrix, offset, link, and linear predictor, and predict.drmTMB() now uses that helper for its fixed-effect component. This remains internal plumbing, not public emmeans support.
  • Slice 120 adds an internal preflight gate for the first possible emmeans basis path. drm_emmeans_mu_basis() is still private, but it now accepts only fixed-effect univariate mu targets with covariance available and rejects unsupported dpar, missing covariance, zero-inflated, and random-effect paths before any future method could return an emmGrid.
  • Slice 121 adds the matching private recover-data preflight. The internal helper recovers the retained mu model frame, terms, predictor names, response name, factor levels, and row names for the same first eligible target and errors when memory-light fits did not retain model frames.
  • Slice 122 implements the first public emmeans bridge. emmeans is now a suggested package with conditional method registration, and emmeans::emmeans() works for fixed-effect univariate mu targets when model frames and fixed-effect covariance are retained. The method still rejects non-mu, missing-covariance, memory-light, zero-inflated, random-effect, and other unsupported paths before returning an emmGrid.
  • Slice 123 cleans the plot_corpairs() R CMD check hygiene left visible by Slice 122. The interval segment layer now builds its ggplot2 aesthetics from symbols, matching the existing plot_parameter_surface() pattern, so conf.low, conf.high, and .drmTMB_pair_label are no longer treated as undeclared global variables.
  • Slice 124 adds the first reader-facing emmeans::emmeans() example to the model-workflow article. The example estimates habitat-level EMMs for the fixed-effect univariate mu path at a supplied temperature and explicitly separates that target from sigma, random-effect, bivariate, zero-inflated, hurdle, ordinal, and slope workflows. Generic emmeans contrasts on the returned mu grid are possible, but drmTMB-specific contrast helpers remain a separate future contract.
  • Slice 125 extends emmeans() parity tests across the remaining univariate model types already admitted by the fixed-effect mu gate: Student-t, lognormal, Gamma, beta-binomial, NB2, and zero-truncated NB2. The tests keep link-scale and response-scale EMMs aligned with predict(dpar = "mu") without widening the gate to unsupported model structures.
  • Slice 126 clarifies the downstream contrast boundary. A new test confirms that generic emmeans pairwise contrasts use differences among the returned fixed-effect mu EMMs, while docs avoid treating contrast itself as a pre-grid unsupported target and keep broader contrast and slope helpers separate.
  • Slice 127 adds explicit offset parity coverage for the first emmeans() bridge. A Poisson fixed-effect mu model with offset(log(exposure)) now checks that emmeans(..., at = list(exposure = 2)) matches predict(dpar = "mu") on link and response scales, without widening support to non-mu, random-effect, bivariate, zero-inflated, hurdle, ordinal, slope, or fitted-response targets.
  • Slice 128 adds transformed-predictor recovery coverage for the same first emmeans() bridge. A Gaussian fixed-effect mu model with log(size) now checks that emmeans(..., at = list(size = 1.5)) matches predict(dpar = "mu"), and the recover-data preflight confirms that raw source variables for transformed predictors are restored from stored data.
  • Slice 129 adds explicit default numeric covariate-reduction coverage for the first emmeans() bridge. A Gaussian fixed-effect mu model with an asymmetric numeric covariate now checks that emmeans(fit, ~ habitat) matches predict(dpar = "mu") at mean(x), keeping this as ordinary emmeans reference-grid behaviour rather than a drmTMB-specific marginalisation rule.
  • Slice 130 adds direct type argument coverage for the first emmeans() bridge. A Poisson fixed-effect mu model now checks that emmeans(..., type = "response") matches predict(dpar = "mu", type = "response"), while type = "link" remains on the formula linear-predictor scale.
  • Slice 131 adds custom numeric covariate-reduction coverage for the first emmeans() bridge. A skewed Gaussian fixed-effect mu example now checks that emmeans(..., cov.reduce = stats::median) matches predict(dpar = "mu") at median(x), keeping custom reduction as ordinary emmeans reference-grid behaviour rather than drmTMB empirical averaging.
  • Slice 132 adds unreduced numeric covariate-grid coverage for the first emmeans() bridge. A Gaussian fixed-effect mu example now checks that emmeans(..., cov.reduce = FALSE) matches predict(dpar = "mu") averaged over the observed x levels in the reference grid, keeping this separate from drmTMB row-wise empirical marginalisation.
  • Slice 133 adds multiple explicit at value coverage for the first emmeans() bridge. A Gaussian fixed-effect mu example now checks that emmeans(fit, ~ habitat | x, at = list(x = c(-0.25, 0.75))) matches row-wise predict(dpar = "mu") on the same conditional reference grid.
  • Slice 134 adds public zero-inflated boundary coverage for the first emmeans() bridge. A zero-inflated Poisson model now checks that emmeans() errors before returning an emmGrid, names the unsupported "zi_poisson" model type, and points users back to prediction_grid() plus predict_parameters().
  • Slice 135 adds public hurdle boundary coverage for the first emmeans() bridge. A hurdle NB2 model now checks that emmeans() errors before returning an emmGrid, names the unsupported "hurdle_nbinom2" model type, and points users back to prediction_grid() plus predict_parameters().
  • Slice 136 adds public ordinal boundary coverage for the first emmeans() bridge. A cumulative-logit model now checks that emmeans() errors before returning an emmGrid, names the unsupported "cumulative_logit" model type, and points users back to prediction_grid() plus predict_parameters().
  • Slice 137 improves the public bivariate boundary for the first emmeans() bridge. Bivariate Gaussian fits now error as unsupported "biv_gaussian" fits before returning an emmGrid, with the same prediction-table guidance, instead of falling through to a generic missing-mu message.
  • Slice 138 blocks transformed-response formulas in the first emmeans() bridge. Fits such as log(y) ~ x now error before returning an emmGrid, with guidance toward explicit transformed-scale prediction tables through prediction_grid() plus predict_parameters().
  • Slice 139 extends the public zero-inflated emmeans() boundary to NB2. Zero-inflated NB2 fits now error as unsupported "zi_nbinom2" fits before returning an emmGrid, matching the zero-inflated Poisson boundary.
  • Slice 140 adds interaction-formula coverage for the fixed-effect univariate mu emmeans() bridge. A Gaussian habitat * x fit now checks that conditional EMMs at an explicit x value match predict(dpar = "mu") on the same interaction grid.
  • Slice 141 adds factor-conditioned reference-grid coverage for the fixed-effect univariate mu emmeans() bridge. A Gaussian habitat by season grid at x = 0.25 now checks that returned EMM rows preserve factor levels and match predict(dpar = "mu") on the same grid.
  • Slice 142 fixes and covers ordered-factor predictor coding in fixed-effect prediction matrices and the first emmeans() bridge. A Gaussian model with an ordered condition predictor now checks that emmeans(fit, ~ condition | habitat, at = list(x = 0.2)) preserves ordered polynomial coding and matches predict(dpar = "mu") on the same grid.
  • Slice 143 adds explicit validation for fixed-effect prediction factor levels. Character newdata values that match fitted factor levels now route through the fitted factor coding, while unknown levels such as habitat = "forest" error before model-matrix construction with the offending predictor and level named. Missing values in fitted factor predictors also error early, and extra factor columns not used by the requested distributional parameter are ignored.
  • Slice 144 extends fixed-effect prediction newdata validation to all required predictors. Missing required columns and missing values in required numeric predictors now error before model-matrix construction, while extra unused columns remain harmless.
  • Slice 145 adds the corresponding finite-value guard for required numeric predictors. Values such as x = Inf now error before fixed-effect prediction matrices are built.
  • Slice 147 extends that finite-value guard to transformed-predictor design columns. Values such as size = 0 in a model with log(size) now error after formula evaluation names the affected model column, rather than returning a non-finite prediction.
  • Slice 148 applies the same finite design-matrix guard to random-effect scale prediction. Direct sd(id) predictions with newdata such as w_pos = 0 in a model with sd(id) ~ log(w_pos) now error before returning infinite link- or response-scale SD predictions.
  • Slice 149 extends fitted factor-level validation to random-effect scale prediction. Direct sd(id) predictions now accept character values that match fitted sd(id) factor levels and reject unknown levels before base R contrast or matrix-conformability errors.
  • Slice 150 pins the raw-predictor side of random-effect scale prediction newdata validation. Missing required sd(id) predictor columns, missing required values, and non-finite required numeric values now have explicit tests and design text before random-effect scale model-matrix construction.
  • Slice 151 pins the positive direct-SD newdata output contract. Multi-row sd(id) prediction grids now have explicit tests for one output per row, rownames(newdata) preservation, default response scale, and response predictions equalling exp(link) from type = "link".
  • Slice 152 pins direct-SD newdata container boundaries. Non-data-frame newdata inputs now have explicit error coverage, while zero-row data-frame grids return named length-zero numeric vectors on both link and response scales.
  • Slice 153 pins multiple direct-SD formula prediction boundaries. Fits with both sd(id) ~ w_id and sd(site) ~ w_site now have explicit tests that each requested dpar validates its own predictors, ignores sibling-target extra columns, and names the missing target-specific predictor.
  • Slice 154 pins direct-SD long-table helpers. predict_parameters() and marginal_parameters() now have explicit tests and reference docs for fitted random-effect scale model names such as sd(id), with component random-effect-sd-model, row-label preservation, and marginal averaging over supplied direct-SD prediction rows.
  • Slice 155 pins the direct-SD prediction-grid helper chain. A grid over a predictor such as w in sd(id) ~ w now has explicit coverage through prediction_grid(), predict_parameters(..., dpar = "sd(id)"), and marginal_parameters(..., by = "w").
  • Slice 156 adds the first reader-facing model-workflow example for a direct-SD prediction surface. The article fits sd(site) ~ reef_cover, builds a prediction_grid() over reef cover, reports predict_parameters(..., dpar = "sd(site)"), and reduces the same grid with marginal_parameters(..., by = "reef_cover") while keeping random-effect SD separate from residual sigma and raw responses.
  • Slice 157 updates the model-map article so fitted random-effect SD surfaces route through prediction_grid(), predict_parameters(..., dpar = "sd(group)"), and marginal_parameters(), with component random-effect-sd-model kept separate from residual sigma.
  • Slice 158 adds the first confidence-band path for prediction surfaces. predict_parameters(conf.int = TRUE) now fills Wald fixed-effect std.error, conf.low, and conf.high columns for supplied newdata grids when the requested distributional parameter has an ordinary fixed-effect basis. plot_parameter_surface() consumes those columns, drawing confidence bands for continuous x-values and interval bars for discrete x-values; not_available rows remain interval-free. The model-workflow and model-map articles now show the table-first band workflow and leave conf.status, conf.level, and interval_source visible.
  • Slice 159 clarifies the confidence-band example boundary. The model-workflow article now prints interval provenance for explicit fixed-effect mu/sigma grids, and contrasts that with a direct sd(site) surface that reports conf.status = "wald_unavailable" when Wald intervals are requested. The point is reader-facing: fixed-effect parameter surfaces can draw 95% Wald bands on explicit grids; direct random-effect SD surfaces need a profile or bootstrap route before a ribbon is honest.
  • Revised Phase 18 entry gate after Slice 159: do not jump directly into comprehensive simulation while profile/bootstrap intervals, Gaussian double-hierarchical random-slope limits, and non-Gaussian location-scale-shape surfaces are still uneven. Treat Slices 159-202 as a stabilization bridge before resuming Phase 17. Phase 18 comprehensive simulation should start only after that resumed Phase 17 closure gate, unless a deliberately smaller pilot simulation is opened earlier.
  • Next 30-slice stabilization map:
Slice Lane Target
159 Confidence bands Clarify fixed-effect Wald bands versus explicit unavailable direct-SD surfaces.
160 Confidence bands Add or test discrete-x interval-bar examples for factor predictors.
161 Confidence bands Document newdata_required for fitted-row interval requests.
162 Confidence bands Tighten conf.level examples and interval-status display conventions.
163 Confidence bands Gate the confidence-band docs with render, pkgdown, and stale-wording checks.
164 Profile intervals Refresh the profile-target inventory for fixed effects, SDs, correlations, and row-specific parameters.
165 Profile intervals Done: the workflow and profile-CI design notes now pin newdata examples for row-specific sigma, sigma1, sigma2, and rho12.
166 Profile intervals Done: direct constant-sigma examples are separated from predictor-dependent scale profiles, with profile.boundary and profile.message interpretation kept visible.
167 Profile intervals Done: direct random-effect SD examples now point users to exact profile_targets() names, including random-slope suffixes.
168 Profile intervals Done: random-effect correlation examples now stay separate from residual rho12, with direct targets gated by profile_targets().
169 Derived intervals Done: q4 derived correlation and covariance-product rows remain explicit derived_interval_unavailable targets until a reparameterized or fix-and-refit derived interval method exists.
170 Bootstrap intervals Superseded by the fast-CI slice and closed for #265’s first boundary: the audit requirements now exist for selected direct confint() targets through a deterministic simulate/refit route, direct target extractor, failure counts, and runtime controls.
171 Bootstrap intervals Done for the first public #265 boundary: confint(..., method = "bootstrap") now returns percentile intervals for selected direct targets; summary(), corpairs(), prediction tables, q4 derived rows, repeatability, and phylogenetic signal remain separate work.
172 Bootstrap intervals Done for direct confint() targets: bootstrap interval rows now carry bootstrap, bootstrap_unavailable, success counts, failure counts, backend, and worker metadata, and returned bootstrap tables carry a "bootstrap.diagnostics" attribute with one row per refit and target. Unsupported non-direct routes still stop before interval work.
173 Interval evidence Done: focused tests now cover unsupported-bootstrap errors, q4 derived-unavailable boundaries, direct profile paths, and shared interval-status/source vocabulary.
174 Interval diagnostics Done: profile diagnostics remain profile.boundary/profile.message; direct bootstrap rows report refit success/failure metadata, while unsupported bootstrap surfaces still give explicit unavailable errors.
175 Interval harmonization Done: internal status/source vocabulary helpers now align summary(), confint(), corpairs(), and prediction-table interval outputs.
176 Phase 6/13 gate Done: the interval-readiness revisit is closed with tests, docs, known-limitations updates, check-log evidence, and an after-phase note.
177 Gaussian random slopes Done: ordinary Gaussian mu supports multiple independent numeric slopes and one correlated intercept-plus-one-slope block; arbitrary correlated multi-slope blocks were moved to Slices 178-181.
178 Gaussian random slopes Historical slice, superseded by the later correlated-scale-slope implementation: the parser/API admitted ordinary Gaussian mu blocks such as (1 + x1 + x2 | id) first; current 0.6.0 also fits unlabelled ordinary correlated residual-scale blocks, while labelled and cross-formula slope covariance remain outside scope.
179 Gaussian random slopes Done: q > 2 ordinary Gaussian mu blocks use the registry-backed positive-definite unstructured covariance path with constant block correlations.
180 Gaussian random slopes Done: q=3 recovery, malformed-input, conditional prediction, summary, corpairs(), and profile_targets() tests cover the first public path.
181 Gaussian random slopes Done: user docs state the q=3 evidence, q > 2 output names, profile-ready SDs, derived-unavailable unstructured correlations, and sample-size boundary.
182 Scale random slopes Historical slice, superseded by the later correlated-scale-slope implementation: multiple independent residual-scale Gaussian sigma terms and unlabelled ordinary correlated intercept-slope or multi-slope blocks are fitted; labelled residual-scale and cross-formula mu-sigma slope covariance remain planned.
183 Location-scale covariance Done: two independent matched univariate mu/sigma random-intercept covariance blocks can be fitted and reported through corpars$mu_sigma, corpairs(), summary(), and profile_targets().
184 Location-scale covariance Done: check_drm() now reports each independent univariate mu/sigma block separately, and profile tests cover the second eta_cor_mu_sigma interval target.
185 Bivariate slope route Superseded by Slice 83, the q4/q6 location smoke routes, the q2 scale-slope route, the same-response q2 location-scale slope route, and the q8 endpoint diagnostic artifact route: matching slope-only mu1/mu2 blocks such as (0 + x | p | id), matching q=4/q=6 location blocks such as (1 + x | p | id) and (1 + x + z | p | id), matching q=2 sigma1/sigma2 scale-slope blocks, matching same-response mu1/sigma1 or mu2/sigma2 slope-only blocks, and matching all-four (1 + x | p | id) q8 endpoint blocks are now fitted. Q8 coverage and power remain closed.
186 Phylogenetic random slopes Superseded by Slices 39-82 and the q-series sigma/matched-slope/q2-slope slices: phylo(1 + x | species, tree = tree) now fits first univariate Gaussian one-slope mu, sigma-only residual-scale, and matched mu+sigma native point-fit/extractor paths with deterministic same-target fixtures; matching phylo(0 + x | p | species, tree = tree) in bivariate mu1/mu2 fits the first slope-only q=2 covariance cell with deterministic same-target fixture evidence; matching phylo(1 + x | p | species, tree = tree) across all four bivariate endpoints fits the first shared-label q8-shaped point-fit/extractor cell with deterministic same-target fixture evidence. Multiple phylogenetic slopes, block-diagonal all-four one-slope covariance, broad bridge/inference beyond deterministic same-target fixtures, intervals, coverage, REML/AI-REML for this q8-shaped cell, and slope correlations remain planned.
187 Spatial random slopes Done and extended: coordinate-spatial one-slope support now has a direct profile-interval test for the mu slope-field SD, the first fixed-covariance sigma-only and matched mu+sigma one-slope cells are source-tested with deterministic same-target fixtures, matching spatial(0 + x | p | site, coords = coords) in bivariate mu1/mu2 fits the first fixed-covariance slope-only q=2 covariance cell with deterministic same-target fixture evidence, and matching spatial(1 + x | p | site, coords = coords) across all four bivariate endpoints fits the first fixed-covariance shared-label q8-shaped point-fit/extractor cell with deterministic same-target fixture evidence. Multiple slopes, range-estimating spatial support, block-diagonal all-four one-slope covariance, broad bridge/inference beyond deterministic same-target fixtures, intervals, coverage, REML/AI-REML for this q8-shaped cell, and larger bivariate spatial slope blocks remain planned.
188 Random-effect gate Done: the one-slope-per-layer status table and remaining Gaussian double-hierarchical limits are published below before the non-Gaussian revisit.
  • Slice 189 is done: the double-hierarchical endpoint map now reflects the current Gaussian boundary after Slices 177-188, including q > 2 ordinary mu, multiple univariate mean-scale intercept blocks, coordinate-spatial one-slope support, matching bivariate q=4/q=6 location smoke routes, the matching bivariate q2 scale-slope route, the first same-response q2 mu/sigma slope route, the q8 location-scale endpoint diagnostic smoke/recovery lane, and the still-closed q8 coverage/power and spatial q=4 endpoint evidence.
  • Slices 190-202 are the pre-simulation non-Gaussian gate. The purpose is not to implement every attractive family feature before Phase 18. It is to decide which non-Gaussian, scale, shape, zero-inflation, hurdle, ordinal, structured, and interval surfaces are fitted, which are explicitly unsupported, and which have enough recovery evidence to enter the comprehensive simulation grid. Treat the table below as the current working map; each row should become more specific as earlier random-effect slices close.

Slice 188 One-Slope Gate

This is the current random-effect status before the non-Gaussian revisit:

Layer One-Slope Status Inference and Diagnostics Remaining Gaussian DH Limit
Ordinary Gaussian mu Fitted for independent slopes, one-slope correlated blocks, and ordinary q > 2 numeric location blocks. q=3 recovery, sdpars$mu, corpars$re_cov, corpairs(), summary(), profile_targets(), and direct SD profiles are covered. Larger q blocks are advanced and sample-size hungry; q > 2 correlations remain derived-unavailable for direct profile intervals.
Gaussian sigma Fitted for random intercepts, multiple independent numeric slopes, and unlabelled ordinary correlated intercept-slope or multi-slope blocks on log(sigma). sdpars$sigma, prediction contributions, direct log_sd_sigma profile targets, covariance summaries, and tests cover the fitted ordinary slope boundary. Labelled univariate residual-scale slope covariance and cross-formula mu-sigma slope covariance are planned.
Univariate mu/sigma covariance Fitted for one or more matched labelled random-intercept blocks. corpars$mu_sigma, corpairs(class = "mean-scale"), summary(), check_drm(), and second-block profile tests are covered. Slope-level mean-scale covariance is planned.
Bivariate ordinary covariance Fitted for matching labelled random intercepts in mu1/mu2, sigma1/sigma2, one or more same-response mu/sigma intercept or slope-only blocks, all-four q=4 intercept blocks, matching slope-only mu1/mu2 and sigma1/sigma2 blocks, matching q=4 and q=6 mu1/mu2 location blocks with smoke artifact routing, and the first q8 all-endpoint ordinary Gaussian block with diagnostic smoke/recovery/staged-start routing. Constant q=2 correlation targets, the slope-slope mu1/mu2 target, the scale-slope sigma1/sigma2 target, and same-response q2 mu/sigma targets are profile-ready; q2 same-response, q2 scale-slope, and q8 rows now have smoke/recovery/staged-diagnostic grid writers; q > 2 location-block SDs and q8 endpoint SDs are direct targets, while q > 2 and q8 correlations are derived-only with explicit unavailable interval status. Q8 coverage, q8 power, and formal q > 2 simulation recovery remain closed; the 2026-06-06 same-response q2 formal audit is diagnostic only because convergence/positive-Hessian rates were 0.856 and 0.884 and fixed-effect Wald coverage was 0.796-0.850; the 2026-06-07 q8 local audit is also diagnostic only because 38/40 manifests completed, convergence rates were 0.263 and 0.158, positive-Hessian rates were 0, two fits had leading-minor optimization errors, and no Wald intervals were usable.
Phylogenetic structured effects The documented Gaussian intercept, slope, q2/q4, direct-SD, and correlation-regression paths are fitted. Exact non-Gaussian gates also fit ordinary Poisson/NB2 q1 phylogenetic mu intercept-plus-one-slope, recovery-grade NB2 q1 phylogenetic sigma, diagnostic-only Student-t q1 phylogenetic nu, cumulative-logit q1 phylogenetic mu, and the Arc 3a recovery-grade Gamma/lognormal q1 phylogenetic mu intercepts. Direct phylogenetic SDs and q2 correlations have profile targets; broader Gaussian rows and each non-Gaussian gate retain the row-specific diagnostic/recovery/interval tier recorded in the live ledger. Arc 3a is point-fit recovery only. Additional multiple or labelled phylogenetic-slope layouts outside the exact fitted ledger cells, block-diagonal all-four one-slope covariance, broad bridge/inference, slope correlations, structured rho12, non-Gaussian phylogenetic effects outside the exact gates, and all unpromoted intervals, coverage, REML, and AI-REML remain planned.
Coordinate spatial structured effects Fitted for univariate Gaussian mu and sigma intercepts, matching univariate mu/sigma correlation, one numeric mu slope and the first fixed-covariance sigma-only and matched mu+sigma one-slope native point-fit/extractor cells with independent coordinate fields, constant and slope-only bivariate Gaussian mu1/mu2 q=2 location covariance, constant q=4 location-scale covariance, the exact shared-label fixed-covariance all-four one-slope q8-shaped cell, ordinary Poisson/NB2 q=1 mu intercept and unlabelled one-slope terms, the diagnostic-only Poisson spatial zi intercept, the diagnostic-only fixed-zi Poisson spatial mu intercept, and the diagnostic-only fixed-zi NB2 spatial mu intercept. sdpars$mu, sdpars$sigma, marker-specific ranef() blocks, profile_targets(), check_drm(), corpairs(level = "spatial"), summary()$covariance, a mu slope-field profile interval, deterministic fixed-covariance same-target fixtures, the q=2 dense covariance comparator, q=2 slope-only extractor tests, q=4 extractor/diagnostic tests, exact all-four one-slope extractor tests, exact all-four one-slope fixture parity, and count structured tests are covered. The exact matched labelled q2 location-intercept cell additionally has native dense-REML-oracle and 1,200-fit retained-denominator point-recovery evidence. All three spatial-inflation rows are diagnostic-only single-smoke gates. The Arc 1b-S1 REML cell is recovery-only; no interval or coverage promotion follows. Mesh/SPDE, range-estimating spatial support, multiple slopes, block-diagonal or broader intercept-plus-slope labelled structured covariance, broad bridge/inference beyond deterministic same-target fixtures, intervals, coverage, REML/AI-REML outside the exact q2 intercept cell, slope correlations, spatial direct-SD, spatial corpair(), pure, multiple, or labelled count spatial slopes, and zero-inflated spatial effects outside the exact Poisson spatial zi, Poisson fixed-zi spatial mu, and NB2 fixed-zi spatial mu local-fit gates remain planned.
Non-Gaussian families Fixed-effect likelihoods are fitted; plain binomial fits 0/1 and cbind(successes, failures) logit models with ordinary mu random intercepts and independent slopes as first slices; ordinary Poisson and NB2 mu random intercepts plus independent numeric slopes are fitted for non-zero-inflated count models; ordinary Student-t, skew-normal, zero-truncated NB2, lognormal, Gamma, Tweedie, beta, zero-one beta, beta-binomial, and cumulative-logit models also fit ordinary mu random intercepts and independent numeric slopes; exact binomial, cumulative-logit, skew-normal, Tweedie, and zero-one-beta slope cells have design-specific inference-ready-with-caveats evidence; q=1 structured mu intercept terms from phylo(), phylo_interaction(), spatial(), animal(), or relmat() and unlabelled one-slope terms from phylo(), spatial(), animal(), or relmat() are fitted for ordinary Poisson/NB2; a simultaneous two-provider NB2 mu route, spatial(1 | site, coords = coords) + relmat(1 | id, Q = Q), builds and surfaces both structured fields on a crossed site x id design with recovery-only evidence (both fixed-covariance variance components recover with a positive-definite Hessian; intervals and coverage unsupported); ordinary Student-t, zero-truncated NB2, lognormal, Gamma, beta, and beta-binomial mu random intercepts have Phase 18 artifact lanes and independent numeric mu slopes have focused source tests; ordinary NB2, lognormal, and Gamma have first log-sigma random-intercept gates; exact q1 NB2 structured sigma intercept-plus-one-slope routes for phylo(), spatial(), animal(), and relmat() are fitted at recovery grade; and ten Q-Series v1.0 rows have row-specific diagnostic-only evidence: Student-t intercept-only mu ~ spatial(1 | id, coords = coords), Student-t nu ~ phylo(1 | id, tree = tree), cumulative-logit ordinal mu ~ phylo(1 | id, tree = tree), truncated-NB2 hurdle hu ~ relmat(1 | id, Q = Q), zero-inflated Poisson zi ~ spatial(1 | id, coords = coords), zero-inflated Poisson fixed-zi mu ~ spatial(1 | id, coords = coords), zero-inflated NB2 fixed-zi mu ~ spatial(1 | id, coords = coords), Poisson slope-only mu ~ spatial(0 + x | site, coords = coords), Poisson labelled-scalar mu ~ spatial(1 | p | site, coords = coords), and Poisson mu ~ spatial(1 | site, coords = coords) + (1 | id). Binomial fixed-effect coefficients use the Wald path and focused stats::glm() parity tests; ordinary binomial random-effect SDs have direct profile targets, with the exact mc-0061, mc-0227, mc-0464, mc-0539, and mc-0575 slope domains inference-ready with caveats under their separate designs; Poisson, NB2, Student-t, zero-truncated NB2, lognormal, Gamma, beta, and beta-binomial mu random-effect SDs appear in sdpars$mu, random effects, and direct profile_targets() rows; Student-t, zero-truncated NB2, bounded-response, and positive-continuous artifact lanes record fixed-effect Wald rows and direct-SD profile rows for ordinary (1 | id) in mu; tests/testthat/test-nongaussian-mu-random-slopes.R records CRAN-safe slope recovery, prediction, extractor, profile-target, and diagnostic checks; NB2, lognormal, and Gamma sigma random-intercept SDs appear in sdpars$sigma, random_effects$sigma, and direct log_sd_sigma profile-target rows; the exact q1 NB2 structured sigma routes remain recovery-only, with intervals and coverage planned; family-specific fixed-effect summaries, structured count diagnostics, and intervals exist where already implemented; the ten named Student-t, ordinal, hurdle, inflation, and Poisson spatial-variant rows remain diagnostic-only in the live ledger with intervals unsupported and coverage planned. Correlated or labelled binomial slopes, binomial structured effects, zero-inflation beyond the exact Poisson spatial zi, Poisson fixed-zi spatial mu, and NB2 fixed-zi spatial mu local-fit gates, hurdle random effects beyond the exact truncated-NB2 relmat hu local-fit gate, ordinal random effects outside the ordinary unlabelled mu intercept/slope recovery gate and the exact phylogenetic mu local-fit gate, pure, multiple, or labelled structured count slopes, simultaneous structured count types beyond the crossed two-provider NB2 mu recovery route, labelled count covariance, cross-parameter covariance, ordinary NB2 sigma slopes and structured-sigma intervals/coverage or richer blocks beyond the recovery-grade q1 routes, correlated Student-t/zero-truncated NB2/positive-continuous/bounded-response random slopes, non-Gaussian sigma random effects outside the ordinary NB2, lognormal, and Gamma intercept gates and the exact q1 NB2 structured recovery routes, Student-t nu random effects beyond the exact phylo local-fit gate, exact 0/1 boundary mass, other non-Gaussian scale random effects, and other shape or inflation random effects still need separate implementation evidence before broad simulation.
Slice Lane Target Before Phase 18
190 Non-Gaussian mu random effects Done and extended: first candidates were ordinary mu random intercepts for Poisson and NB2-style count likelihoods. Ordinary Student-t, zero-truncated NB2, lognormal, Gamma, beta, and beta-binomial mu random intercepts now have focused source-test slices and Phase 18 artifact lanes, and independent numeric mu slopes have a CRAN-safe focused recovery slice. Structured non-Gaussian paths retain explicit unsupported messages outside the exact fitted gates. Arc 3a adds recovery-grade Gamma-phylo and lognormal-phylo/relmat q1 mu intercepts. Later diagnostic-only Q-Series gates include Student-t intercept-only mu ~ spatial(1 | id, coords = coords), Student-t nu ~ phylo(1 | id, tree = tree), cumulative-logit ordinal mu ~ phylo(1 | id, tree = tree), truncated-NB2 hurdle hu ~ relmat(1 | id, Q = Q), zero-inflated Poisson zi ~ spatial(1 | id, coords = coords), zero-inflated Poisson fixed-zi mu ~ spatial(1 | id, coords = coords), zero-inflated NB2 fixed-zi mu ~ spatial(1 | id, coords = coords), Poisson slope-only mu ~ spatial(0 + x | site, coords = coords), Poisson labelled-scalar mu ~ spatial(1 | p | site, coords = coords), and Poisson mu ~ spatial(1 | site, coords = coords) + (1 | id). Each exact route keeps its own ledger evidence tier.
191 Non-Gaussian mu implementation Done: ordinary Poisson mu random intercepts now fit as (1 | group) in the log-mean predictor for non-zero-inflated Poisson models, with recovery, lme4 comparator, random-effect extraction, sdpars$mu, and direct SD profile-target coverage.
192 Non-Gaussian mu slopes Done: ordinary Poisson mu now fits independent numeric random slopes such as (0 + x | group) on the log-mean predictor, with recovery, lme4 comparator, random-effect extraction, sdpars$mu, and direct SD profile-target coverage; correlated Poisson slope blocks and all labelled/cross-parameter covariance remain planned.
193 Non-Gaussian residual scale Done and partly superseded: Student-t, beta, beta-binomial, truncated NB2, and hurdle NB2 sigma formulas retain fixed-effect-only scale paths; ordinary NB2, lognormal, and Gamma now have first log-sigma random-intercept gates. Other random-effect bar terms still error with a scale-specific boundary and tests until family-specific scale-random-effect likelihood and recovery evidence exists.
194 Shape and skew boundary Done and extended: Student-t nu random-effect bar terms have a shape-specific boundary, with one later row-specific local fit-only gate for nu ~ phylo(1 | id, tree = tree). Residual shape/skewness otherwise remains fixed-effect-first, future tau is second-shape vocabulary only, and ID-level skewness such as skew(id) ~ x stays design-only until simulation separates it from residual skewness and heteroscedasticity.
195 Zero-inflation, hurdle, and one-inflation random effects Done and extended: zi, hu, zoi, and coi random-effect requests receive component-specific boundaries. Three exact spatial-inflation gates are fitted at distinct live-ledger tiers: diagnostic-only zero-inflated Poisson zi ~ spatial(1 | id, coords = coords), diagnostic-only fixed-zi Poisson mu ~ spatial(1 | id, coords = coords), and diagnostic-only fixed-zi NB2 mu ~ spatial(1 | id, coords = coords). Fixed-effect zero-inflation and hurdle paths remain implemented, and fixed-effect zoi/coi are now fitted only in zero_one_beta(); other count-side random effects in zero-inflated or hurdle routes and covariance among mu, sigma, shape, inflation, hurdle, or one-inflation random effects remain future work until likelihood, interval, and recovery evidence exists.
196 Ordinal mixed models Done and extended: ordinary unlabelled cumulative-logit mu random intercepts and independent numeric slopes are recovery-grade, and the exact Q-Series row mu ~ phylo(1 | id, tree = tree) has local fit-only/extractor evidence. Correlated or labelled grouped covariance, scale/discrimination formulas, known covariance, other structured ordinal effects, interval/coverage promotion, and ordinal::clmm comparator work stay planned.
197 Structured non-Gaussian random effects Done and extended: phylogenetic, spatial, animal, and relmat() structured markers have a structured non-Gaussian boundary. First Poisson/NB2 q=1 structured mu slices have source-test, smoke, or formal-admission evidence where documented. Arc 3a adds recovery-grade Gamma-phylo and lognormal-phylo/relmat q1 mu intercepts; no interval or coverage claim follows. The sole bounded phylogenetic direct-SD exception is exact Beta q1 y ~ x_mu + phylo(1 | spp_id, tree = tree) with sd(spp_id, level = "phylogenetic") ~ x_tau, at machine-strict conditional-Beta point-fit recovery only; tau is latent location SD, not family sigma. Exact later Q-Series gates retain row-specific tiers: Student-t intercept-only mu ~ spatial(1 | id, coords = coords), Student-t nu ~ phylo(1 | id, tree = tree), cumulative-logit ordinal mu ~ phylo(1 | id, tree = tree), truncated-NB2 hurdle hu ~ relmat(1 | id, Q = Q), zero-inflated Poisson zi ~ spatial(1 | id, coords = coords), fixed-zi Poisson mu ~ spatial(1 | id, coords = coords), fixed-zi NB2 mu ~ spatial(1 | id, coords = coords), Poisson slope-only mu ~ spatial(0 + x | site, coords = coords), Poisson labelled-scalar mu ~ spatial(1 | p | site, coords = coords), and Poisson mu ~ spatial(1 | site, coords = coords) + (1 | id) are diagnostic-only single-smoke gates. Broad structured count, positive-continuous, other bounded, ordinal, shape, inflation, and hurdle paths stay deferred until ordinary family-specific random effects and their intervals are stable. Gaussian structured slope evidence now includes one-slope mu, sigma-only, matched mu+sigma, bivariate slope-only q=2 mu1/mu2, and exact shared-label all-four one-slope native point-fit/extractor cells with deterministic same-target fixtures only where documented for phylo, fixed-covariance spatial, A-matrix animal, and K/Q relmat. Interval/coverage authority is row-specific: the three q1 mu intercept rows and exact phylo/relmat slope-only q2 SD rows are promoted; neighbouring cells remain planned. Existing phylogenetic REML evidence is separate; Arc 1a admits REML only for the exact unlabelled intercept and independent intercept-plus-one-slope spatial/animal/relmat cells over recorded discrete domains. Sparse large-pedigree or large-matrix claims, additional multiple-slope layouts outside the exact fitted ledger cells, broader labelled structured covariance, broad bridge inference, AI-REML, slope correlations, and all unpromoted interval/coverage/REML neighbours remain planned.
197a Animal/relmat reference surface Done locally: animal() and relmat() are documented and parsed as structured-effect markers, the reference index leads with animal/phylo/spatial/relmat rather than gr(), and gr() is deprecated as a public marker while kept as a compatibility placeholder. Later slices add known-matrix Gaussian mu intercept fitting for A/Ainv and K/Q, dense pedigree fitting for animal(pedigree = ...), and one numeric univariate Gaussian mu slope; sparse large-pedigree construction, multiple slopes, and slope correlations remain planned.
198 Non-Gaussian interval readiness Done locally: summary(conf.int = TRUE) now handles fitted non-Gaussian paths with no summary-level parameter rows, including cumulative-logit ordinal fits with fixed effects or cutpoints only; Wald coefficient intervals remain available, empty coefficient/parameter tables keep explicit interval-status columns, and profile targets stay discoverable through profile_targets()/confint().
199 Reader-facing family docs Done locally: the model map, family chooser, and structural-dependence article now show implemented, planned, and unsupported states for non-Gaussian random effects and the structural-dependence ladder: animal, phylogeny, spatial, phylogeny plus spatial, then lower-level relmat() known-dependence matrices.
200 Focused non-Gaussian recovery tests Done locally: ordinary non-zero-inflated Poisson mu random-effect recovery now includes a factor-predictor random-intercept case and a weak-SD boundary case that exercises check_drm() lower-boundary diagnostics.
201 Failure ledger Done locally: docs/design/34-validation-debt-register.md now names the convergence, boundary, identifiability, interval, and runtime failures that Phase 18 should measure or exclude for ordinary Poisson, NB2, non-Gaussian scale, shape/skewness, inflation, ordinal, structured, cross-parameter covariance, interval, and runtime surfaces.
202 Pre-simulation decision gate Done locally: do not start broad comprehensive Phase 18 yet. Permit only a narrow Poisson mu random-effect pilot grid if simulation begins now; otherwise return after Slice 202 to the Phase 17 hardening block, especially meta-analysis meta_V()/known-V API and interval safety.

Slice 202 Pre-Simulation Decision Gate

The Slices 190-202 non-Gaussian gate closes with a narrow decision. The package has enough evidence to simulate the currently fitted ordinary Poisson mu random-effect path, but not enough evidence to call the next phase a broad comprehensive simulation.

Decision Area Slice 202 Decision Reason
Broad Phase 18 comprehensive simulation Wait. Too many neighbouring surfaces remain planned or blocked: ordinary NB2 sigma slopes and structured-sigma intervals/coverage or richer blocks beyond the recovery-grade q1 intercept-plus-one-slope routes, other non-Gaussian sigma random effects, shape/skew random effects, inflation and hurdle random effects outside exact gates, ordinal covariance outside ordinary mu and the exact phylogenetic gate, structured non-Gaussian slopes or labelled blocks, cross-parameter non-Gaussian covariance, bootstrap intervals, and derived nonlinear interval coverage.
Narrow pilot simulation Implemented smoke surfaces for Poisson and NB2 mu random effects, plus focused ordinary NB2 sigma, NB2 q=1 phylogenetic, and count q=1 structured-intercept lanes. Ordinary non-zero-inflated Poisson and NB2 mu random intercepts plus independent numeric slopes have implementation, extractors, sdpars$mu, direct profile targets, focused recovery tests, weak-SD boundary diagnostics, Phase 18 smoke runners, manifests, failure ledgers, Wald fixed-effect coverage rows, and direct random-effect SD profile coverage rows. Ordinary NB2 log-sigma random intercepts now have a dedicated smoke-grid artifact writer; ordinary NB2 q=1 phylogenetic mu has an overdispersion-aware formal-admission lane and local Slices 541-555 audit, but still requires the 500-replicate formal grid before routine recovery or coverage claims. The q=1 spatial/animal/relmat() count additions now have focused source tests plus an opt-in smoke artifact lane, not broad simulation admission.
Post-202 work direction Return to Phase 17 before full Phase 18. Reader-facing inference and examples still need hardening before large simulation reports are useful. The first return block should focus on meta-analysis: preferred meta_V(V = V) spelling, vector and matrix V, proportional meta_V(w = w, scale = "proportional") design boundaries, profile/summary safety, and clear examples.
Phase 18 entry rule Open full grids only surface by surface. Each surface needs a fitted likelihood, parser validation, extractors, diagnostics, direct or explicitly unavailable interval targets, focused recovery tests, and a failure-ledger row before it appears in a comprehensive simulation table.

The immediate next block is therefore a Phase 17 return block, not a leap into full Phase 18. If a simulation task starts before that block closes, it should be labelled as a Poisson mu random-effect pilot with explicitly limited estimands, not as the comprehensive drmTMB simulation programme.

Post-202 Phase 17 Return: Meta-Analysis Hardening

The first return block after Slice 202 is meta-analysis hardening. This block keeps meta-analysis as Gaussian regression with known sampling covariance while making the public grammar and examples match the preferred long-term name.

Slice Lane Target
203 Meta-analysis return map Done locally: record the post-202 return block, keep broad Phase 18 closed, and make meta_V()/known-V hardening the first Phase 17 target.
204 meta_V() API decision Done locally and superseded by the deprecation slice: meta_V(V = V) is the preferred additive known-covariance spelling, the marker should not take a positional response/value argument, and deprecated meta_known_V(V = V) remains a compatibility alias rather than a separate likelihood path.
205 Additive known V implementation Done locally: meta_V(V = vi_or_V) is accepted for the additive known-covariance route; deprecated meta_known_V(V = V) still shares that path for compatibility. Proportional meta_V(w = w, scale = "proportional") remains rejected before fitting.
206 Proportional sampling-variance boundary Done locally: keep meta_V(w = w, scale = "proportional"), meta_V(w = w), and meta_V(V = V, scale = "exact") reserved before fitting; clarify that diagonal/vector meta_V(V = V) may use ordinary likelihood weights, full matrix-V rejects non-unit weights, and neither route mimics proportional sampling variance.
207 Meta-analysis interval safety Done locally: add profile-target and summary interval tests proving meta_V() fits expose estimated sigma, random-effect SD, and bivariate rho12 targets while never treating known V as an estimated interval target.
208 Reader examples Done locally: refresh the meta-analysis tutorial and design examples around preferred meta_V(V = V), vector V, matrix V, residual heterogeneity sigma, random effects, random-effect scale, bivariate known V, and the unsupported proportional branch.

Do not introduce meta_gaussian() or tau ~ syntax in this block. Keep sigma as the fitted extra heterogeneity SD, and explain the translation to meta-analytic tau only in prose and tables.

Slice 190 decision: the first non-Gaussian implementation target should be ordinary mu random intercepts for the count families whose fixed-effect likelihoods already have focused tests and clear response-scale interpretation. Use this order unless Slice 191 evidence overturns it:

Priority Family Surface Slice 190 Decision
1 Poisson mu Implemented in Slices 191-192 for ordinary (1 | group) and independent numeric (0 + x | group) terms in the log-mean predictor, with recovery, lme4 comparator, and direct SD profile target coverage. One exact fixed-zi mu ~ spatial() intercept is diagnostic-only. Correlated slope blocks, labelled blocks, zero-inflation random effects outside the exact spatial-inflation gates, and cross-parameter covariance remain planned.
2 NB2 and zero-truncated NB2 mu NB2 ordinary mu random intercepts, independent numeric slopes, ordinary log-sigma random intercepts, and recovery-grade q1 structured sigma intercept-plus-one-slope routes for phylo/spatial/animal/relmat are fitted for non-zero-inflated models. One exact fixed-zi NB2 mu ~ spatial() intercept is diagnostic-only. Zero-truncated NB2 ordinary mu random intercepts and independent numeric slopes are fitted, with the intercept slice covered by a Phase 18 artifact lane. Zero-inflated NB2 random effects beyond the exact diagnostic gate, correlated zero-truncated slopes, ordinary NB2 sigma slopes, joint mu/sigma, structured-sigma intervals/coverage, and richer structured sigma blocks remain planned.
3 Lognormal, Gamma, Student-t, and bounded-response mu Lognormal, Gamma, Student-t, beta, and beta-binomial ordinary mu random intercepts are fitted as narrow first slices and now have Phase 18 artifact lanes; independent numeric mu slopes have focused recovery tests. Correlated Student-t, positive-continuous, and bounded-response random slopes, sigma random effects, Student-t nu random effects beyond the exact row-specific nu ~ phylo(1 | id, tree = tree) local-fit gate, and richer mixed-model surfaces remain later because scale, tail, strict-boundary, denominator, and weak-SD diagnostics need their own grids.
4 Zero-inflation, one-inflation, hurdle, ordinal, shape, and structured non-Gaussian paths Historical planning row, superseded by Slices 194-197 and the live ledger: keep routes outside the exact named gates unsupported. The exact spatial-inflation gates retain their recovery or diagnostic tiers; they do not imply blanket interval or coverage support. For proportion data, fixed-effect zoi and coi belong to zero_one_beta(), not the Poisson count gate.
  • After Slice 202, return to Phase 17 to close the remaining visualization, marginal-effect, contrast, slope, and reader-facing inference surfaces. Phase 18 comprehensive simulation starts only after that resumed Phase 17 closure gate, unless the project deliberately opens a smaller pilot simulation with a narrower estimand.
  • Slices 160-164 close the first confidence-band documentation block and reopen the profile-interval inventory. Slice 160 adds the factor-predictor interval-bar example and a real prediction-table test. Slice 161 makes fitted-row newdata_required visible as an action status. Slice 162 shows a non-default conf.level and states that the level must be read with conf.status and interval_source. Slice 163 is the render/pkgdown/stale wording gate for this confidence-band block. Slice 164 refreshes the profile-target inventory for fixed effects, constant distributional parameters, row-specific newdata profiles, ordinary random-effect SDs and correlations, modelled sd(group) surfaces, q2 and q4 covariance rows, phylogenetic/spatial SDs, derived summaries, and ordinal cutpoint internals.
  • Slices 169-176 close the interval-readiness gate before random-slope work. The important boundary is negative but useful: q4 correlations and covariance products remain derived interval-unavailable rows, and bootstrap intervals are not a public method until a deterministic simulate-refit harness, target extractor, failure ledger, and runtime policy exist.
  • Add additional ggplot-oriented helpers only after the data contract is stable: location curves, scale/variance curves, residual rho12 curves, sd(group) or sd_phylo() surfaces, corpairs() summaries, and eventually spatial fields or maps.
  • Treat predictions, adjusted predictions, estimated marginal means, contrasts, slopes, and diagnostics as separate estimands. Do not hide reference grids, marginalization rules, weighting choices, or link-versus-response scale decisions inside a plotting call.
  • Every visual interval must state its inference source: Wald fixed-effect interval, direct profile-likelihood interval, derived nonlinear interval, conditional random-effect uncertainty, or parametric-bootstrap interval. Fisher’s default is to avoid implying full uncertainty when only fixed-effect uncertainty is present.
  • Pat’s usability gate: examples should show the biological question, the fitted model, the visualization call, and the interpretation in one path. Rose’s audit gate: plotting docs must not overclaim support for parameters or interval types that the model object cannot yet supply.
  • Design visualization helpers with Phase 18 simulations in mind. Simulation studies need plots for bias, root-mean-square error, empirical coverage, convergence, interval width, and power curves, so the visualization layer should expose reusable data frames rather than only polished figures.
  • Slice 259 reopens the public visualization route after the first count-pilot diagnostics page proved too narrow to be called a gallery. The user-facing vignettes/figure-gallery.Rmd should be the Florence showcase for raw data plus fitted slopes, 95% confidence bands, categorical and continuous interactions, emmeans displays, fitted correlation layers, and simulation operating-characteristic plots. Simulation and comparator outputs get their own pkgdown section, “Simulation & Comparison”, so power, bias, coverage, runtime, convergence, and failure-ledger articles do not compete with tutorials.
Slice Target Done When
259 First public figure gallery route Done locally: figure-gallery is a Tutorials article, convergence is a Model Guides article, and testing-likelihoods moved to Simulation & Comparison.
260 Interaction plot polish The gallery shows categorical x continuous, categorical x categorical, and continuous x continuous examples with fitted values, raw data where useful, 95% confidence intervals, and clear conditioning labels.
261 Distributional-parameter panels Done locally: the gallery now labels mu and sigma panels by estimand and adds fitted Student-t nu, zero-inflation probability zi, and residual rho12 examples with explicit response-scale wording and interval provenance.
262 Random-effect and variance-component figures Done locally: the gallery now compares residual sigma with ordinary group-level intercept and slope SDs, shows conditional random-slope deviations, and plots a fitted sd(site) surface while keeping unavailable interval status explicit.
263 Correlation-layer figures Done locally and refreshed after the q=4 spatial slice: the gallery now facets implemented residual, ordinary group, phylogenetic, spatial, animal, and relmat() q=2 corpairs()-style rows, marks spatial q=4 as partly fitted, and keeps richer structured correlation regressions plus standalone scale extensions planned.
264 emmeans and marginal-effects figures Done locally: the gallery now shows the supported fixed-effect univariate mu emmeans route, factor-conditioned and interaction grids, an empirical marginal_parameters() summary, and unsupported boundaries for sigma, bivariate, zero-inflated, hurdle, ordinal, and random-effect targets.
265 Simulation plot grammar Done locally: simulation-plot-grammar is a Simulation & Comparison article with display contracts for bias, RMSE, coverage, power, convergence, runtime, and warning/error ledgers across continuous, proportion, count, and meta-analysis examples.
266 Gallery source-map and QA Done locally: the figure gallery now has a source-map table mapping each display to its fitted object or fixture, extractor or plotter, interval source, and support boundary, with render, pkgdown, and visual checks recorded.
267 Florence closeout Done locally: the visualization grammar now records that plot_parameter_surface() and plot_corpairs() remain the exported helpers, most gallery displays stay tutorial-level ggplot2 recipes, and simulation/failure-ledger helpers wait for stable Phase 18 result schemas.
299 Florence visual repair Done locally: the gallery now draws raindrop-style compatibility displays for mu, sigma, and correlation intervals, uses shared palettes more consistently, recolours formerly default-black discrete and empirical displays, improves status-strip label contrast, and replaces the simulation bias line plot with raincloud-style replicate clouds plus mean/MCSE intervals because estimands are categorical targets, not trajectories.
300 Simulation raincloud grammar Done locally: the Simulation & Comparison plot-grammar article now shows bias as replicate-level error clouds with mean/MCSE intervals in fixed surface facets and keeps RMSE in a separate aggregate point/MCSE panel, so future Phase 18 reports have a clear visual contract before exported simulation plot helpers exist.
301 Count gallery accuracy grammar Done locally: the Phase 18 count-pilot gallery now uses fixed family facets for bias and RMSE, draws MCSE bars when aggregate CSVs include bias_mcse or rmse_mcse, and states that replicate-error clouds wait for replicate-level output instead of being faked from aggregate rows.
302 Implementation map Done locally: implementation-map is a Model Guides article that maps fitted, first-slice, fixed-effect-only, planned, and blocked surfaces across families, random-effect layers, q, random slopes, corpairs(), zi, and hu, and it refreshes stale structured-slope status after Slices 39-82 and 83-140.
303 Generic direct-SD design gate Done locally as planning: docs/design/62-implementation-map-slices-303-310.md records that future direct-SD work should design generic sd*() grammar and compatibility before copying sd_phylo*()-style names across spatial, animal, or relmat() layers.
304 p8/q8 location-scale planning gate Done locally as planning: the implementation-map roadmap now keeps p8/q8 as a design-first lane requiring endpoint labels, block size, positive-definite parameterization, diagnostics, and interval policy before likelihood code.
305 Structured q=4 parity plan Done locally as planning: spatial, animal, and relmat() q=4 parity should move one structured level at a time with corpairs(), diagnostics, examples, and simulation evidence.
306 q=4 interval policy Done locally as planning: derived q=4 correlations keep explicit unavailable interval status until a direct or derived-profile method is designed, tested, and documented.
307 Inflation and hurdle random-effect decision gate Done locally as a no-fit decision and later updated by the zero-one beta source slice: zi, hu, zoi, and coi stay fixed-effect-only where implemented; random effects wait for clear use cases, recovery, diagnostics, prediction semantics, and interval-status rules.
308 Non-Gaussian structured-dependence candidate map Done locally as planning: the next non-Gaussian structured-dependence step should choose one family and one dependence layer only after ordinary likelihood, extractor, diagnostic, profile-target, and simulation gates are clear.
309 Implementation-map maintenance gate Done locally as process: after substantial feature slices, update implementation-map, model-map, README, ROADMAP, NEWS, and stale-claim scans together.
310 User-route examples gate Done locally as planning: planned rows should point users toward the nearest fitted alternative, design note, or tutorial boundary instead of making unsupported syntax look runnable.
311 Generic sd*() contract Done locally as planning: docs/design/63-implementation-map-slices-311-325.md records explicit level-targeted direct-SD syntax as the future direction, while keeping current sd_phylo*() routes compatible and ordinary sd(group) distinct.
312 Direct-SD ambiguity guard Done locally as planning: ordinary random-effect SD surfaces and future structured direct-SD routes must stay distinguishable in parsing, examples, and the reference index.
313 Direct-SD user migration Done locally as planning: generic direct-SD syntax needs compatibility wording, examples, and stale-name scans before users are moved away from existing sd_phylo*() names.
314 p8/q8 endpoint taxonomy Done locally as planning: q2 slope-only, q4 location slope, q6 partial location-scale, and q8 all-endpoint slope covariance are separated before public syntax opens.
315 p8/q8 parameterization risk Done locally as planning: full q8 remains high risk because eight SDs and 28 correlations may be weakly identified; constrained or block-diagonal designs should be considered first.
316 p8/q8 diagnostics gate Done locally as planning: any p8/q8 route needs profile-target labels, Hessian/boundary diagnostics, recovery tests, and tutorial warnings before user claims.
317 Structured q4 ordering Done locally as planning and superseded by Slices 356-380: spatial q4 was the next constant structured q4 parity lane, while animal and relmat() q4 need continued diagnostics and simulation hardening rather than a new fitted claim.
318 q4 interval contract Done locally as planning: q4 rows remain estimates with explicit derived-unavailable interval status until direct or derived-profile methods are designed and tested.
319 Non-Gaussian candidate scoring Done locally as planning: candidate non-Gaussian structured routes are scored by family maturity, dependence layer, diagnostics, extractor impact, and user value before coding.
320 First non-Gaussian structured candidate recommendation Done locally as planning: start with one q1 mu structured intercept, likely Poisson as an algebra smoke and NB2 as the first practical count target, before slopes, zero inflation, hurdle probability, or q4.
321 User-route examples Done locally as planning: common planned requests now point users toward fixed-effect or smaller fitted alternatives in the implementation map.
322 Implementation-map sync Done locally: the public map now carries the 311-325 planning rows and common planned-request table.
323 Roadmap, NEWS, and check-log Done locally: the ledger records this set as planning/documentation, not likelihood expansion.
324 After-task protocol Done locally: the after-task report records roles, usefulness, checks, and remaining boundaries.
325 Validation Done locally: pkgdown and stale-claim scans confirm the rendered map and guardrails.
326 Generic direct-SD issue spec Done locally as pre-code: docs/design/64-implementation-map-slices-326-340.md records the grammar, compatibility, endpoint, reference-index, and test decisions required before generic structured direct-SD parser work.
327 Direct-SD parser boundary matrix Done locally as pre-code: ordinary sd(group), current sd_phylo*(), and future level-targeted structured SD routes have separate parser outcomes.
328 Direct-SD tests and docs checklist Done locally as pre-code: next direct-SD work requires malformed-input tests, prediction/profile rows, examples, reference docs, and stale-name scans.
329 p8/q8 endpoint registry sketch Done locally as pre-code: q2 slope-only, q4 location slope, q6 partial location-scale, and q8 all-endpoint slope classes are named.
330 p8/q8 staged implementation options Done locally as pre-code: q4 location-slope and constrained or block-diagonal routes are preferred before full q8 unstructured covariance.
331 p8/q8 simulation gate Done locally as pre-code: any q4/q6/q8 slope endpoint must vary group count, repeats, SD ratios, correlations, covariate spread, and boundary cases.
332 Spatial q4 pre-code checklist Done locally as pre-code: spatial q4 requires matching labelled terms, extractor rows, corpairs(), diagnostics, direct/derived interval status, and a small smoke before tutorial claims.
333 Structured q4 diagnostics checklist Done locally as pre-code: q4 rows need Hessian, boundary, profile-target, and derived-interval status checks before routine teaching.
334 Poisson structured q1 smoke spec Done locally as pre-code: the first non-Gaussian structured candidate is a q1 Poisson mu structured intercept smoke.
335 NB2 structured q1 practical spec Done locally as pre-code: NB2 mu q1 structured intercept is the first practical count target after Poisson smoke and overdispersion checks.
336 Non-Gaussian structured ADEMP stub Done locally as pre-code: the candidate needs an ADEMP sheet before simulation code enters Phase 18.
337 User-route example expansion Done locally: the public implementation map now gives more explicit fitted alternatives for planned direct-SD, q4, p8/q8, and non-Gaussian structured requests.
338 Stale-claim checklist Done locally: validation targets false fitted claims for generic sd*(), p8/q8, spatial q4, and non-Gaussian structured routes.
339 Roadmap and NEWS sync Done locally: public and dev ledgers record these as pre-code slices.
340 After-task and validation Done locally: the after-task report and pkgdown checks close the slice set.
341 Generic direct-SD issue template Done locally as planning: docs/design/65-implementation-map-slices-341-355.md records the issue fields needed before generic structured direct-SD parser work starts.
342 Generic direct-SD acceptance checklist Done locally as planning: future direct-SD issues require parser, fit-time, prediction/profile, reference, rendered-discoverability, and stale-name checks before closing.
343 Direct-SD migration and stale-scan recipe Done locally as planning: existing sd_phylo*() users keep compatibility while future generic examples appear only for fitted layers.
344 p8/q8 issue template Done locally as planning: future all-endpoint location-scale slope issues must name the endpoint class, covariance structure, interval policy, diagnostics, and nearest fitted alternative.
345 p8/q8 acceptance checklist Done locally as planning: p8/q8-adjacent code needs recovery, malformed-input, corpairs(), profile-target, Hessian, boundary, and tutorial-warning evidence before user claims.
346 Spatial q4 issue template Done locally as planning: spatial q4 parity is specified as constant location-scale spatial intercepts, separate from mesh/SPDE, slope, direct-SD, and non-Gaussian routes.
347 Spatial q4 acceptance checklist Done locally as planning: spatial q4 requires endpoint-consistent likelihood, parser, extractor, diagnostics, corpairs(), profile-target, and pkgdown example evidence.
348 Poisson structured q1 issue template Done locally as planning: the first non-Gaussian structured-dependence issue is scoped to one non-zero-inflated Poisson mu structured intercept.
349 Poisson structured q1 acceptance checklist Done locally as planning: Poisson q1 structured dependence needs one named layer, guarded neighbouring syntax, simulation recovery, and first-slice docs before advertising.
350 NB2 structured q1 issue template Done locally as planning: NB2 q1 structured dependence is the first practical count target after Poisson smoke or an explicit safety justification.
351 NB2 structured q1 acceptance checklist Done locally as planning: NB2 q1 requires overdispersion-aware recovery, distinct ordinary-versus-structured labels, scale-honest reporting, guarded zi/hu, and fallback guidance.
352 Non-Gaussian structured ADEMP gate Done locally as planning: Poisson or NB2 structured q1 must have an ADEMP sheet before Phase 18 admits it.
353 User documentation checklist Done locally as planning: future implementation issues must synchronize implementation-map, model-map, reference or tutorial docs, README when appropriate, ROADMAP, NEWS, check-log, and after-task notes.
354 Review and issue-maintenance checklist Done locally as planning: Ada, Boole, Gauss, Noether, Fisher, Curie, Pat, Darwin, Grace, and Rose review coverage is named before closing future implementation issues.
355 Validation and handoff gate Done locally as planning: pkgdown, rendered scans, stale-support scans, after-task reporting, and the next code issue must be recorded before handoff.
356 Spatial q4 admission Done locally: matching labelled spatial() terms across mu1, mu2, sigma1, and sigma2 are admitted into the shared structured q4 backend.
357 Spatial q4 parser boundaries Done locally: partial, unlabelled, mismatched, and slope spatial q4 requests remain rejected with targeted messages.
358 Spatial q4 extractor labels Done locally: spatial q4 exposes four endpoint SDs and six derived latent correlations with spatial labels.
359 Spatial q4 corpairs() rows Done locally: corpairs(level = "spatial") reports six q4 rows and keeps them separate from residual rho12.
360 Spatial q4 covariance summary Done locally: summary()$covariance mirrors the six q4 spatial rows.
361 Spatial q4 profile-target status Done locally: direct SD rows and derived-unavailable q4 correlation rows are represented honestly in profile metadata.
362 Spatial q4 diagnostics Done locally: check_drm() reports biv_spatial_q4_covariance with replication, SD-ratio, boundary, and covariance-mode evidence.
363 Spatial q4 focused test Done locally: test-spatial-gaussian covers the fitted route and malformed-input neighbours.
364 Spatial q4 user-facing table Done locally: README, model-map, implementation-map, and structural docs mark q4 spatial as fitted first-slice support.
365 Spatial q4 formula grammar Done locally: formula grammar lists the supported all-four labelled spatial endpoint route.
366 Spatial q4 tutorial route Done locally: the coordinate-spatial article now shows q4 syntax and interval limitations.
367 Spatial q4 figure/status sync Done locally: the figure gallery separates fitted q2, partly fitted q4, and planned regression/scale extensions.
368 Spatial q4 stale-scan gate Done locally: high-traffic wording no longer says the constant spatial q4 route is only planned.
369 Spatial q4 release note Done locally: NEWS records the fitted route and remaining boundaries.
370 Spatial q4 fitted-slice closeout Done locally: the implementation claim stops at constant Gaussian bivariate location-scale intercepts.
371 Map table sync Done locally: the implementation map separates fitted spatial q4 from mesh, direct-SD, slope, and non-Gaussian spatial plans outside the exact ordinary Poisson/NB2 q1 spatial mu intercept-plus-one-slope, recovery-grade NB2 q1 spatial sigma, Student-t spatial mu, Poisson spatial zi, fixed-zi Poisson spatial mu, and fixed-zi NB2 spatial mu gates.
372 Model-map sync Done locally: the stable-core matrix includes the constant q4 spatial route.
373 Spatial article sync Done locally: the coordinate-spatial page gives the q4 syntax and interpretation boundary.
374 Structural overview sync Done locally: the structural overview routes spatial users to q2 and q4 fitted first slices.
375 Detailed structural article sync Done locally: the detailed structural-dependence article now lists spatial q4 parity.
376 Formula grammar sync Done locally: grammar docs and vignette list fitted q4 spatial syntax.
377 Check-log and after-task sync Done locally: the dev ledger records implementation, checks, usefulness, and limits.
378 pkgdown sync Done locally: pkgdown build/check and rendered scans cover the implementation-map page.
379 PR/status sync Done locally: the branch records spatial q4 as fitted only after tests and docs move together.
380 Stop-implementation boundary Done locally: no non-Gaussian structured likelihood code is fitted in this set.
381 Non-Gaussian family inventory Done locally as planning: ordinary count, zero-inflated count, hurdle count, bounded response, ordinal, robust continuous, and mixed-response candidates are separated in docs/design/66-implementation-map-slices-356-405.md.
382 Non-Gaussian component inventory Done locally as planning: mu, sigma, zi, hu, shape/nu, future tau, cutpoints, and residual coscale rho12 remain separate gates before structured dependence expands.
383 Non-Gaussian layer inventory Done locally as planning: phylo(), spatial(), animal(), and relmat() are scored separately, with Poisson phylogenetic q1 kept apart from Gaussian spatial, animal, and relmat() evidence.
384 Poisson q1 algebra gate Done locally as planning: the first structured non-Gaussian simulation gate is one non-zero-inflated Poisson mu phylogenetic intercept, with ADEMP details in docs/design/70-phase-18-poisson-structured-q1-ademp.md.
385 NB2 q1 practical gate Done locally as planning: NB2 q1 remains the first practical count target after Poisson, because overdispersion can compete with the structured SD.
386 Zero-inflation gate Done locally as planning: zi stays fixed-effect-only until a separate probability-component use case, diagnostic, and prediction contract exists.
387 Hurdle gate Done locally as planning: hu stays fixed-effect-only until hurdle-specific recovery and interpretation are specified.
388 Count slope gate Done locally as planning: exact unlabelled q1 count mu one-slope cells now have source tests for phylo(), fixed-covariance spatial(), animal(), and relmat(); pure, multiple, labelled, or correlated count slopes still wait for their own evidence.
389 Non-Gaussian scale gate Done locally as planning: count overdispersion, beta/BB precision, Gamma coefficient of variation, lognormal log-SD, and Student-t scale each need family-specific structured-scale contracts before structured random effects move outside mu.
390 Shape and ordinal gate Done locally as planning: Student-t nu, future skewness/second-shape slots, ordinal cutpoints, and ordinal scale/discrimination stay separate from count mu structure.
391 Known covariance boundary Done locally as planning: meta_V(V = V) remains known sampling covariance and relmat() remains latent relatedness; future issues must not collapse those meanings.
392 Extractor contract Done locally as planning: first slices must pre-name sdpars, ranef(), profile_targets(), summary(), and diagnostic labels before fitting.
393 Diagnostic contract Done locally as planning: convergence, Hessian, replication, boundary, SD-ratio, family-specific, and malformed-neighbour checks are required beyond optimizer return code.
394 Simulation contract Done locally as planning: ADEMP, ordinary comparator, recovery estimands, MCSE, failure ledger, and artifact manifest are required before Phase 18 admission.
395 Interval contract Done locally as planning: direct structured SD intervals may move first, while derived correlations and non-direct nonlinear summaries must show unavailable status until validated.
396 User-route fallback Done locally as planning: unsupported requests should point to fixed-effect, ordinary random-effect, or Gaussian structured alternatives where those answer a safer nearby question.
397 Error-message gate Done locally as planning: unsupported zi, hu, slope, q2, q4, and cross-parameter structured requests must fail early with family, component, layer, and nearest route named.
398 Formula grammar gate Done locally as planning: non-Gaussian structured grammar remains closed unless fitted scope and rejected neighbours are documented together.
399 Documentation gate Done locally as planning: implementation-map, model-map, family docs, NEWS, ROADMAP, check-log, and after-task reports must move with any fitted-status change.
400 Issue-template gate Done locally as planning: future implementation issues must name one family, component, layer, q, and comparator rather than asking for broad non-Gaussian parity.
401 Poisson first-issue outline Done locally as planning: the next code issue should be one non-zero-inflated Poisson mu q1 phylogenetic intercept with simulations, diagnostics, docs, and malformed neighbours.
402 NB2 first-issue outline Done locally as planning: NB2 q1 needs fixed-effect sigma, overdispersion conditions, and ordinary NB2 comparator evidence before structured count claims expand.
403 zi/hu future issue outline Done locally as planning: probability-component random effects need a biological use case, prediction semantics, diagnostics, and recovery evidence before fitting.
404 Phase 18 admission note Historical planning gate, superseded in part: exact non-Gaussian structured rows have since passed row-specific point/recovery gates, while broad simulations and neighbouring routes remain outside until separately certified.
405 Non-Gaussian planning closeout Done locally as planning: the closeout stops with a map, issue-ready gates, and validation evidence rather than untested likelihood code.
406 Route-specific issue ledger Done locally as planning: docs/design/71-nongaussian-structured-issue-ledger.md records the route key and review fields for future implementation issues.
407 Poisson q1 implementation issue draft Done locally as planning: the issue draft names one Poisson mu q1 phylogenetic route, extractor evidence, diagnostics, docs, and excluded neighbours.
408 Poisson q1 smoke-runner issue draft Done locally as planning: the issue draft names the DGP, runner files, artifact schema, and initial smoke grid.
409 Poisson q1 malformed-neighbour issue draft Done locally as planning: the issue draft lists unsupported slopes, q2/q4, zi, hu, NB2, spatial, animal, relmat(), scale, shape, ordinal, bounded-response, and cross-parameter requests.
410 Poisson q1 documentation issue draft Done locally as planning: the issue draft names the pages that must move only after implementation and validation evidence exists.
411 NB2 q1 aims skeleton Done locally as planning: NB2 q1 starts from overdispersion-versus-structured-SD recovery, not syntax parity.
412 NB2 q1 DGP skeleton Done locally as planning: the future DGP includes fixed-effect sigma, phylogenetic mu SD, mean-count levels, overdispersion levels, and tree conditioning.
413 NB2 q1 estimands and comparator Done locally as planning: fixed mu, fixed sigma, structured SD, direct interval target, and ordinary NB2 grouped comparator are named.
414 NB2 q1 performance measures Done locally as planning: bias, RMSE, coverage, direct SD profile status, convergence, Hessian, boundary, warning/error, runtime, and MCSE reporting are required.
415 zi/hu probability-component contract Done locally as planning: structured probability-component effects need use cases, prediction semantics, diagnostics, and recovery before syntax.
416 Non-Gaussian scale public-name contract Done locally as planning: structured scale effects need family-specific interpretation and separation from latent structured SD.
417 Shape and ordinal public-name contract Historical planning row, superseded by the ordinary cumulative-logit mu intercept/slope recovery gate and exact phylogenetic intercept gate. Shape random effects and ordinal covariance outside those exact gates still need comparator and boundary evidence.
418 Known covariance versus latent relatedness issue contract Done locally as planning: issue titles, formulas, diagnostics, and examples must keep known sampling covariance separate from latent relatedness.
419 Structured count q1 extractor-name registry Done locally as planning: sdpars$mu, route-specific ranef(), direct log_sd_*, and absent q1 corpairs() rows are reserved before code.
420 Structured count q1 diagnostic-name registry Done locally as planning: replication, SD-ratio/boundary, Hessian, fixed-gradient, family warning, and unsupported-neighbour rows are reserved before code.
421 Poisson q1 direct profile-target contract Done locally as planning: the runner contract requires a direct log_sd_phylo profile-target row for ordinary Poisson q1 phylogenetic mu.
422 Poisson q1 extractor contract Done locally as planning: sdpars$mu, ranef("phylo_mu"), fixed mu coefficients, and absent q1 corpairs() rows are required checks.
423 Poisson q1 artifact manifest schema Done locally as planning: surface, cell, replicate, seed, artifact, path, existence, row count, worker, and session fields are required.
424 Poisson q1 warning/error ledger schema Done locally as planning: simulate, fit, extract, diagnose, profile, and write stages must report status, messages, convergence, Hessian, and elapsed time.
425 Poisson q1 smoke-grid gate Done locally as planning: the first local grid varies species count, observations per species, true phylogenetic SD, mean count, tree conditioning, and 20 smoke replicates per cell.
426 Poisson q1 formal-grid admission gate Done locally as planning: formal recovery or coverage claims require MCSEs, diagnostics, failure ledgers, interval-status rows, and at least 500 replicates per cell.
427 Poisson q1 ordinary-comparator contract Done locally as planning: ordinary grouped Poisson remains a diagnostic contrast, not a phylogenetic-signal estimator.
428 Count tutorial stale-boundary correction Done locally as documentation: count docs should say ordinary Poisson q1 phylogenetic mu is fitted while NB2, zi, hu, slope, q2/q4, spatial, animal, and relmat() routes remain planned.
429 Public-map status guard Done locally as planning: implementation-map and model-map wording must keep the fitted q=1 count structured slices separate from broad count structured parity.
430 Likelihood-doc status guard Done locally as planning: likelihood docs should tie the Poisson q1 route to the log-mean likelihood, direct target, and excluded neighbours.
431 Poisson q1 unsupported-syntax error table Done locally as planning: unsupported slope, q2/q4, zi, NB2, spatial, animal, relmat(), scale, shape, ordinal, bounded, and mixed-response requests have expected guidance.
432 Poisson q1 malformed syntax test plan Done locally as planning: malformed neighbours should fail before TMB fitting with family, component, layer, and nearest route named.
433 Poisson q1 extractor-name test plan Done locally as planning: tests should assert exact sdpars, ranef(), profile-target, and absent-correlation rows.
434 Poisson q1 diagnostic-row test plan Done locally as planning: tests should assert replication, SD-ratio or boundary, Hessian, fixed-gradient, and family-warning diagnostics.
435 Poisson q1 simulation-artifact test plan Done locally as planning: tests should validate aggregate, replicate, manifest, failure-ledger, diagnostic, and profile-target artifacts with row counts.
436 Poisson q1 source-map sync Done locally: the implemented source map now points the Poisson mean row to the ADEMP and runner-contract documents.
437 Poisson q1 validation-debt row sync Done locally: the poisson_phylo_q1_mu debt row now names the runner contract as the next gate.
438 Structured non-Gaussian validation-debt sync Done locally: the broader structured non-Gaussian row points to the ADEMP sheet and runner contract before recovery work.
439 Phase 18 count-lane sync Done locally: the count scenario lane now separates ordinary Poisson/NB2 random-effect ADEMP work from the Poisson phylogenetic q1 ADEMP and runner contract.
440 Phase 18 phylogenetic-lane sync Done locally: the phylogenetic scenario lane keeps the Poisson q1 lane separate from Gaussian phylogenetic grids until the runner contract is implemented.
441 Pre-simulation Poisson q1 row sync Done locally: the readiness matrix Poisson q1 row now includes the manifest, warning/error, smoke-grid, and artifact-test contract.
442 Pre-simulation structured non-Gaussian sync Done locally: the readiness matrix structured row now points to both Poisson q1 design documents.
443 Family-registry evidence sync Done locally: the Poisson family evidence state now includes the runner contract beside tests and profile-target checks.
444 NEWS and ROADMAP evidence sync Done locally: release and roadmap ledgers record the evidence-ledger synchronization without claiming new fitted support.
445 Check-log validation sync Done locally: validation commands include pkgdown, stale-support scans, and source-ledger scans for the evidence sync.
446 After-task evidence sync Done locally: the after-task report records the source-map, readiness, validation-debt, Phase 18, and family-registry updates.
447 Fitted-versus-planned guard Done locally: updated ledgers still keep NB2, zero-inflated, hurdle, spatial, animal, and relmat() count structure planned.
448 Simulation-readiness guard Done locally: Poisson q1 phylogeny remains smoke/runner-contract level, not formal operating-characteristic evidence.
449 Source-ledger stale-scan gate Done locally: scans check for false broad structured count support and stale all-phylogeny-count wording.
450 Evidence-sync closeout Done locally: source ledgers now agree that implementation, runner evidence, and broad simulation admission are separate gates.
451 Poisson phylogenetic q1 DGP Done locally: inst/sim/dgp/sim_dgp_poisson_phylo_q1.R generates seeded ordinary Poisson q1 phylogenetic mu data with balanced or mildly uneven ultrametric trees.
452 Poisson q1 condition helper Done locally: the condition helper crosses species count, observations per species, true sd_phylo, mean count, slope, and tree shape.
453 Poisson q1 fitted summariser Done locally: inst/sim/fit/sim_summarise_poisson_phylo_q1.R records fixed mu, phylogenetic SD, standard errors, convergence, Hessian, profile-target, and diagnostic status.
454 Poisson q1 smoke runner Done locally: inst/sim/run/sim_run_poisson_phylo_q1_smoke.R wires the DGP, drmTMB() fit, summariser, registry, and replicate runner.
455 Poisson q1 summary helper Done locally: inst/sim/run/sim_summary_poisson_phylo_q1_smoke.R returns aggregate, replicate, manifest, failure-ledger, Wald interval, Wald coverage, and direct profile-target tables.
456 Poisson q1 focused DGP test Done locally: tests assert seeded reproducibility, tree metadata, truth rows, and non-negative count output.
457 Poisson q1 focused runner test Done locally: tests assert output schemas, profile-target status, manifest rows, finite estimates, and saved RDS paths.
458 Poisson q1 malformed helper tests Done locally: tests reject one-species trees, negative SDs, bad tree-shape labels, and malformed condition rows.
459 Poisson q1 neighboring regression tests Done locally: new tests pass alongside Poisson mean, ordinary Poisson mu random-effect, and non-Gaussian structured-boundary tests.
460 Poisson q1 simulation README sync Done locally: inst/sim/README.md lists the new DGP, summariser, runner, and summary helper.
461 Poisson q1 source-map implementation sync Done locally: source-map and family-registry rows point to the new runner and focused test.
462 Poisson q1 readiness sync Done locally: readiness and Phase 18 programme rows mark the smoke runner as available while keeping formal recovery grids future.
463 Poisson q1 design-doc sync Done locally: ADEMP and runner-contract docs distinguish implemented smoke files from still-future grid writers and formal coverage.
464 Poisson q1 check-log and after-task Done locally: validation commands and role-perspective closeout are recorded.
465 Poisson q1 smoke-runner closeout Done locally: the branch has runnable smoke infrastructure but no broad non-Gaussian structured parity claim.
466 Poisson q1 grid writer Done locally: inst/sim/run/sim_write_poisson_phylo_q1_grid.R writes repeatable CSV artifacts beside resumable replicate RDS files.
467 Poisson q1 grid paths Done locally: aggregate, replicate, manifest, failure-ledger, Wald interval, Wald coverage, and profile-target CSV paths are named with a stable prefix.
468 Poisson q1 grid overwrite guard Done locally: existing artifact paths are rejected unless overwrite = TRUE.
469 Poisson q1 grid manifest Done locally: phase18_grid_artifact_manifest() records existence and row counts for all Poisson q1 grid CSVs.
470 Poisson q1 grid writer tests Done locally: focused tests assert CSV row counts, manifest existence, requested-versus-actual worker counts, and overwrite errors.
471 Poisson q1 grid validation tests Done locally: focused tests reject empty output paths and invalid overwrite.
472 Poisson q1 README grid sync Done locally: inst/sim/README.md lists the grid writer and artifact set.
473 Poisson q1 source-map grid sync Done locally: the source map includes the grid writer in the Poisson mean implementation row.
474 Poisson q1 readiness grid sync Done locally: readiness and Phase 18 programme rows now name repeatable CSV artifacts while keeping formal grids future.
475 Poisson q1 design grid sync Done locally: ADEMP and runner-contract docs separate implemented CSV smoke artifacts from formal recovery grids.
476 Poisson q1 NEWS and roadmap grid sync Done locally: release and roadmap ledgers record the grid writer without changing fitted support.
477 Poisson q1 grid check-log Done locally: validation commands and results are recorded for the grid writer.
478 Poisson q1 grid after-task Done locally: after-task report records artifact shape, limits, and role-perspective review.
479 Poisson q1 grid stale-scan gate Done locally: false-support scans still return no broad NB2, spatial, animal, relmat(), zi, hu, or structured-slope claims.
480 Poisson q1 grid closeout Done locally: repeatable smoke artifacts exist; formal recovery and coverage grids remain future work.
481 Poisson q1 profile interval opt-in Done locally: the fit summariser maps log_sd_phylo to the public sd:mu:phylo(1 | species) row and writes optional direct profile interval columns.
482 Poisson q1 profile artifact tables Done locally: the summary and grid writer now save profile interval, profile coverage, interval-evidence, interval-diagnostics, and interval-failure CSVs beside the existing smoke artifacts.
483 Poisson q1 profile tests Done locally: focused tests request log_sd_phylo, assert profile rows are ok or failed, and keep failed profiles in the artifact evidence.
484 Poisson q1 formal condition helper Done locally: phase18_poisson_phylo_q1_formal_conditions() names the larger species-count, repeat, signal, mean-count, slope, and tree-shape grid for formal admission runs.
485 Poisson q1 formal spec writer Done locally: phase18_poisson_phylo_q1_formal_grid_spec() records n_rep, target replicates, profile requests, MCSE requirement, and whether the 500-replicate recovery gate is met.
486 Poisson q1 formal wrapper Done locally: phase18_write_poisson_phylo_q1_formal_grid_outputs() writes the smoke artifact family plus poisson-phylo-q1-formal-spec.csv.
487 Poisson q1 read-back helper Done locally: phase18_read_poisson_phylo_q1_grid_outputs() reads existing artifact CSVs and can require the complete artifact family.
488 Poisson q1 artifact QA Done locally: phase18_qa_poisson_phylo_q1_grid_outputs() checks required artifact names, row presence, seed uniqueness, cell alignment, and expected replicate counts.
489 Poisson q1 promotion decision Done locally: phase18_poisson_phylo_q1_promotion_decision() holds smoke-only artifacts and promotes narrowly only when QA passes and the formal replicate gate is met.
490 Poisson q1 Actions task Done locally: .github/workflows/phase18-simulation-grid.yaml and sim_run_actions_cell.R expose the manual poisson_phylo_q1_formal task.
491 Poisson q1 Actions all guard Done locally: task = "all" still runs only baseline first-wave and interval-heavy tasks; the Poisson formal grid must be selected explicitly.
492 Poisson q1 formal dry-run test Done locally: focused tests verify that the Actions entrypoint can plan --task=poisson_phylo_q1_formal with --profile-parameters=log_sd_phylo.
493 Poisson q1 formal documentation sync Done locally: NEWS, source-map, simulation README, readiness, simulation programme, ADEMP, runner contract, and validation-debt text describe the formal-admission wrapper without broad count claims.
494 Poisson q1 formal check-log and after-task Done locally: validation commands, role-perspective review, and known limits are recorded for the profile/formal admission slice.
495 Poisson q1 formal closeout Done locally: profile and formal-grid infrastructure exists, but formal recovery and coverage claims remain unavailable until the large grid is run and audited.
496 NB2 q1 R parser gate Done locally: drm_build_nbinom2_spec() extracts one unlabelled phylo(1 | species, tree = tree) term in ordinary NB2 mu and keeps ordinary random effects, labels, slopes, and zi neighbours closed.
497 NB2 q1 TMB data path Done locally: NB2 model_type = 7 now passes has_phylo_mu, sparse Q_phylo, node indices, and log_det_Q_phylo when the q=1 phylogenetic term is present.
498 NB2 q1 TMB prior contribution Done locally: the NB2 branch adds the same sparse phylogenetic Gaussian prior for u_phylo and direct log_sd_phylo reporting as the Poisson q1 route.
499 NB2 q1 start and map Done locally: NB2 starts and maps activate u_phylo and log_sd_phylo only for the ordinary q=1 phylogenetic route.
500 NB2 q1 extractor contract Done locally: sdpars$mu, ranef("phylo_mu"), and profile_targets() expose phylo(1 | species) and the direct log_sd_phylo target.
501 NB2 q1 diagnostic contract Done locally: check_drm() includes phylogenetic diagnostics for ordinary NB2 q=1 and avoids residual-scale ratio wording for non-Gaussian fits.
502 NB2 q1 recovery smoke test Done locally: a deterministic NB2 phylogenetic simulation checks convergence, positive-definite Hessian, fixed-effect recovery, SD recovery, conditional-effect correlation, prediction positivity, and overdispersion positivity.
503 NB2 q1 neighbour guards Done locally: tests keep NB2 phylogenetic slopes, ordinary-plus-phylo combinations, zero-inflated NB2 phylogeny, and NB2 sigma ~ phylo(...) closed.
504 NB2 q1 likelihood documentation Done locally: likelihood notes describe the NB2 q=1 mu phylogenetic intercept while keeping fixed-effect sigma overdispersion separate.
505 NB2 q1 family registry sync Done locally: family, formula grammar, distribution-family, implementation-map, and source-map docs distinguish the fitted ordinary NB2 q=1 route from planned structured neighbours.
506 NB2 q1 validation-debt sync Done locally: the validation-debt register records NB2 q=1 as partial and high-risk until overdispersion-aware recovery grids exist.
507 NB2 q1 NEWS and roadmap sync Done locally: release and roadmap notes record the fitted first slice without promoting broad NB2 structured parity.
508 NB2 q1 stale-claim scan Done locally: stale wording is scanned so old “NB2 phylogeny planned” text does not contradict the fitted q=1 route.
509 NB2 q1 check-log and after-task Done locally: validation commands, role-perspective review, and remaining boundaries are recorded.
510 NB2 q1 closeout Done locally: the ordinary non-zero-inflated NB2 phylogenetic mu intercept is fitted and smoke-tested; formal recovery grids, NB2 zi, NB2 structured sigma, structured slopes, labelled count covariance, and simultaneous structured count routes remain future gates.
511 NB2 log-sigma ADEMP aim Done locally: docs/design/73-phase-18-nbinom2-sigma-random-intercept-ademp.md states the overdispersion-random-intercept aim and keeps the lane separate from NB2 mu and NB2 q1 phylogeny.
512 NB2 log-sigma condition spec Done locally: phase18_nbinom2_sigma_re_conditions() crosses group count, repeats, mean count, baseline overdispersion, true sigma SD, and fixed slopes.
513 NB2 log-sigma estimands Done locally: the ADEMP sheet names fixed mu, fixed sigma, sd:sigma:(1 | id), direct log_sd_sigma, replication diagnostics, and formal replicate gates.
514 NB2 log-sigma DGP Done locally: inst/sim/dgp/sim_dgp_nbinom2_sigma_random_effect.R generates seeded ordinary NB2 data with fixed mu and grouped log-sigma heterogeneity.
515 NB2 log-sigma fit route Done locally: phase18_fit_nbinom2_sigma_re() fits bf(count ~ x, sigma ~ z + (1 | id)) with the existing ordinary non-zero-inflated NB2 likelihood.
516 NB2 log-sigma summariser Done locally: inst/sim/fit/sim_summarise_nbinom2_sigma_random_effect.R records fixed effects, sdpars$sigma, convergence, Hessian, warnings, direct log_sd_sigma profile-target status, and check_drm() replication status.
517 NB2 log-sigma smoke runner Done locally: inst/sim/run/sim_run_nbinom2_sigma_random_effect_smoke.R wires DGP, fit, summariser, registry, and the bounded replicate runner.
518 NB2 log-sigma summary helper Done locally: inst/sim/run/sim_summary_nbinom2_sigma_random_effect_smoke.R returns aggregate, replicate, manifest, failure-ledger, Wald, profile-target, interval-evidence, interval-diagnostic, and interval-failure tables.
519 NB2 log-sigma grid writer Done locally: inst/sim/run/sim_write_nbinom2_sigma_random_effect_grid.R writes repeatable CSV artifacts beside resumable replicate RDS files.
520 Direct log_sd_sigma profile target Done locally: summary rows map sd:sigma:(1 | id) to direct TMB target log_sd_sigma.
521 NB2 log-sigma profile-status artifact Done locally: grid outputs include nbinom2-sigma-re-profile-targets.csv and optional profile interval/status artifacts without requiring profiles in routine smoke tests.
522 NB2 log-sigma focused tests Done locally: tests/testthat/test-phase18-nbinom2-sigma-random-effect.R checks DGP reproducibility, smoke summaries, artifact row counts, direct profile-target status, overwrite protection, and malformed inputs.
523 NB2 log-sigma Phase 18 docs sync Done locally: simulation README, source map, Phase 18 programme, readiness matrix, and validation-debt register now name the dedicated smoke lane.
524 NB2 log-sigma release and roadmap sync Historical slice, superseded by later structured-sigma recovery work: NEWS and ROADMAP recorded the ordinary random-intercept grid; current 0.6.0 also fits recovery-grade q1 structured sigma intercept-plus-one-slope routes for phylo/spatial/animal/relmat. Ordinary NB2 scale slopes, joint mu/sigma, structured-sigma intervals/coverage or richer blocks, and zero-inflated/truncated/hurdle scale routes remain planned.
525 NB2 log-sigma closeout Done locally: the ordinary NB2 log-sigma random-intercept smoke grid has code, tests, artifacts, docs, check-log, and after-task evidence; larger formal grids still need separate runtime and artifact review.
526 NB2 q1 ADEMP aim Done locally: docs/design/74-phase-18-nbinom2-phylo-q1-ademp.md states the overdispersion-aware NB2 phylo(1 | species, tree = tree) mu aim and keeps sigma fixed-effect.
527 NB2 q1 condition spec Done locally: phase18_nbinom2_phylo_q1_conditions() crosses species count, repeats, mean count, baseline overdispersion, true phylogenetic SD, fixed slopes, and tree shape.
528 NB2 q1 estimands and comparator Done locally: the ADEMP sheet names fixed mu, fixed sigma, phylogenetic SD, direct log_sd_phylo, diagnostics, and an ordinary grouped species-intercept comparator row.
529 NB2 q1 overdispersion-aware DGP Done locally: inst/sim/dgp/sim_dgp_nbinom2_phylo_q1.R generates seeded NB2 data with phylogenetic log-mean structure and fixed-effect log-sigma overdispersion.
530 NB2 q1 target and comparator fitter Done locally: phase18_fit_nbinom2_phylo_q1() fits the target phylogenetic NB2 model and an ordinary grouped NB2 species-intercept comparator for the same simulated data.
531 NB2 q1 summariser Done locally: inst/sim/fit/sim_summarise_nbinom2_phylo_q1.R records fixed effects, sdpars$mu, comparator SD, convergence, Hessian, warnings, direct profile-target status, and check_drm() phylogenetic diagnostics.
532 NB2 q1 smoke runner Done locally: inst/sim/run/sim_run_nbinom2_phylo_q1_smoke.R wires DGP, target/comparator fits, summariser, registry, and the bounded replicate runner.
533 NB2 q1 summary helper Done locally: inst/sim/run/sim_summary_nbinom2_phylo_q1_smoke.R returns aggregate, replicate, manifest, failure-ledger, Wald, profile-target, interval-evidence, interval-diagnostic, and interval-failure tables.
534 NB2 q1 grid writer Done locally: inst/sim/run/sim_write_nbinom2_phylo_q1_grid.R writes repeatable CSV artifacts beside resumable replicate RDS files.
535 NB2 q1 formal condition and spec Done locally: phase18_nbinom2_phylo_q1_formal_conditions() and phase18_nbinom2_phylo_q1_formal_grid_spec() name the larger overdispersion-aware formal grid, replicate gate, MCSE requirement, profile request, and coverage-claim guard.
536 NB2 q1 formal wrapper and QA Done locally: phase18_write_nbinom2_phylo_q1_formal_grid_outputs(), phase18_read_nbinom2_phylo_q1_grid_outputs(), phase18_qa_nbinom2_phylo_q1_grid_outputs(), and phase18_nbinom2_phylo_q1_promotion_decision() write, read, check, and hold/promote formal artifacts.
537 NB2 q1 Actions task Done locally: .github/workflows/phase18-simulation-grid.yaml and sim_run_actions_cell.R expose the manual nbinom2_phylo_q1_formal task, excluded from task = "all".
538 NB2 q1 focused tests Done locally: tests/testthat/test-phase18-nbinom2-phylo-q1.R checks DGP reproducibility, target/comparator summaries, artifact row counts, direct profile-target status, formal QA, Actions dry-run planning, overwrite protection, and malformed inputs.
539 NB2 q1 docs and release sync Done locally: simulation README, source map, Phase 18 programme, readiness matrix, validation-debt register, NEWS, and ROADMAP now name the overdispersion-aware NB2 q1 formal-admission lane.
540 NB2 q1 closeout Done locally: the ordinary NB2 q=1 phylogenetic mu route now has overdispersion-aware DGP/smoke/grid/formal artifacts with an ordinary grouped comparator row; formal recovery and coverage claims still require running and auditing the 500-replicate grid.
541 NB2 q1 formal-grid preflight Done locally: the default formal spec expands to 288 condition cells and 144,000 target/comparator replicate fits at the 500-replicate gate, so a dirty local branch is not a safe place to launch the full run blindly.
542 NB2 q1 all-cell sentinel run Done locally: inst/sim/results/actions/nbinom2_phylo_q1_formal_541_555_sentinel ran all 288 formal cells once with profile_parameters = "log_sd_phylo", backend = "multicore", and cores = 10.
543 NB2 q1 all-cell artifact QA Done locally: the sentinel wrote all expected formal CSV artifacts, with 288 manifest rows, 1,728 replicate rows, complete seed/cell alignment, grouped-comparator rows, and a hold_smoke_only promotion decision because n_rep = 1.
544 NB2 q1 all-cell fit diagnostics Done locally: all sentinel target and comparator fits converged and reported pdHess = TRUE; the 55 failure-ledger rows were warnings, all collapsing to unique 'x' values.
545 NB2 q1 all-cell profile audit Done locally: sentinel direct log_sd_phylo profile intervals were 159 ok and 129 failed, with failures concentrated at the true-zero phylogenetic SD boundary.
546 NB2 q1 all-cell comparator/runtime audit Done locally: the ordinary grouped species-intercept comparator stayed present in every cell, and elapsed time ranged from about 1.0 to 22.0 seconds per cell in the manifest.
547 NB2 q1 representative replicate audit Done locally: inst/sim/results/actions/nbinom2_phylo_q1_formal_541_555_replicate_audit ran 24 formal-shaped cells with five replicates each, spanning species count, repeats, mean count, and true phylogenetic SD while keeping the 500-replicate gate closed.
548 NB2 q1 replicate artifact QA Done locally: the replicate audit wrote all expected formal artifacts, with 120 manifest rows, 720 replicate rows, 29 warning-ledger rows, and 120 ok manifest statuses.
549 NB2 q1 replicate convergence audit Done locally: all replicate-audit rows converged; 119 of 120 target fits and all 120 grouped-comparator fits reported positive-definite Hessians.
550 NB2 q1 replicate profile audit Done locally: direct log_sd_phylo profiles produced 74 usable intervals and 46 failures; true-zero SD cells produced no usable two-sided intervals, while positive-SD cells mostly profiled successfully.
551 NB2 q1 fixed-sigma boundary audit Done locally: low-mean, low-overdispersion cells produced extreme fixed-sigma coefficient errors in the 5-replicate audit, so fixed sigma recovery remains a formal-grid risk to inspect before promotion.
552 NB2 q1 grouped-comparator audit Done locally: the grouped comparator SD had similar small-audit RMSE to the phylogenetic SD, confirming that ordinary unstructured species heterogeneity must remain visible in the artifact schema.
553 NB2 q1 promotion decision Done locally: phase18_nbinom2_phylo_q1_promotion_decision() returns hold_smoke_only; local QA passed, but formal recovery and coverage wording remain blocked because neither local audit met n_rep >= 500.
554 NB2 q1 audit documentation sync Done locally: docs/design/75-phase-18-nbinom2-phylo-q1-formal-audit.md, simulation README, source map, readiness matrix, validation-debt register, NEWS, and check-log record the sentinel/audit evidence and the remaining gate.
555 NB2 q1 formal-audit closeout Done locally: Slices 541-555 close as an evidence-and-hold lane, not as broad NB2 structured-count promotion; the full 500-replicate formal grid moved to the later sharded Slice D1 audit.
561 NB2 q1 PR merge hygiene Done locally: PR #320 merged after green Ubuntu, macOS, and Windows R-CMD-check evidence, giving main the NB2 q1 smoke/formal-admission lane before new formal-grid work started.
562 NB2 q1 singleton dispatch Done locally: Actions run 26371083871 dispatched nbinom2_phylo_q1_formal from main with n_reps = 500, cores = 10, backend = "multicore", and profile_parameters = "log_sd_phylo".
563 NB2 q1 runtime feasibility audit Done locally: prior sentinel and representative-audit manifests imply about 27-31 optimistic 10-worker hours for the full 288-cell x 500-replicate grid, exceeding the 360-minute single-job Actions cap.
564 NB2 q1 singleton cancellation Done locally: run 26371083871 was cancelled before timeout and produced no formal artifact, preserving the hold_smoke_only decision.
565 Formal condition shard inputs Done locally: .github/workflows/phase18-simulation-grid.yaml exposes one-based condition_shard and condition_shards inputs and passes them to the Phase 18 Actions runner.
566 Actions shard validation Done locally: sim_run_actions_cell.R accepts condition sharding only for Poisson/NB2 phylogenetic q1 formal tasks and rejects sharding for ordinary summary tasks.
567 Stable formal condition partition Done locally: the Actions runner applies a stable one-based modulo partition over the formal condition table, preserving the original cell ids inside each shard.
568 Shard artifact naming Done locally: uploaded Phase 18 formal artifacts include the shard index and shard count in the artifact name so multiple manual runs can be downloaded without losing provenance.
569 NB2 shard formal spec Done locally: phase18_nbinom2_phylo_q1_formal_grid_spec() records condition_shard, condition_shards, full_condition_count, shard_condition_count, and shard_recovery_gate.
570 Poisson shard formal spec parity Done locally: the Poisson q1 formal spec records the same shard metadata so the shared Actions inputs do not become NB2-only infrastructure.
571 Shard promotion guard Done locally: Poisson and NB2 formal specs set coverage_claim_allowed = FALSE whenever condition_shards > 1, even when a shard uses n_rep = 500.
572 Focused shard tests Done locally: focused Phase 18 tests cover Actions dry-run shard parsing, non-formal shard rejection, NB2 shard metadata, and the shard promotion guard.
573 Sharded-grid design note Done locally: docs/design/76-phase-18-nbinom2-phylo-q1-sharded-formal-grid.md records the singleton cancellation, runtime estimate, dispatch command pattern, and combined-audit rule.
574 NB2 q1 sharding docs sync Done locally: simulation README, Phase 18 programme, readiness matrix, validation-debt register, NEWS, ROADMAP, check-log, and after-task records now describe sharded formal dispatch without promotion claims.
575 NB2 q1 sharding closeout Done locally: the route remains hold_smoke_only; the later Slice D1 audit ran all formal shards, downloaded them, merged the artifacts, and held the route after reviewing the full 500-replicate grid.
576 NB2 q1 shard dispatch preflight Done locally: the workflow concurrency key was checked before dispatch, because a task-only concurrency group would not preserve all pending formal shards.
577 Shard-aware Actions concurrency Done locally: .github/workflows/phase18-simulation-grid.yaml now includes condition_shard and condition_shards in the concurrency group so rapid 16-shard dispatches keep separate pending queues.
578 Shard concurrency regression test Done locally: tests/testthat/test-phase18-actions-runner.R now asserts that the workflow file mentions both shard inputs, guarding the operational dispatch contract.
579 Shard queue documentation sync Done locally: docs/design/76-phase-18-nbinom2-phylo-q1-sharded-formal-grid.md records why shard-aware concurrency is required before a full 16-shard dispatch.
580 NB2 q1 formal dispatch readiness Done locally: the branch keeps the statistical grid unchanged and makes the 500-replicate formal evidence lane operationally dispatchable without replacing pending shards.
581-590 NB2 q1 formal shard execution Done locally: the 16 nbinom2_phylo_q1_formal shards from main at 2754e536 completed successfully and their artifacts were downloaded and audited together. The merged set has 288 unique formal condition combinations, 144,000 ok manifest rows, 500 rows per global shard-cell, and all expected CSV artifact families. Promotion remains blocked because direct log_sd_phylo profiles are weak at the true-zero boundary and low-count fixed-sigma recovery remains unstable.
591-605 Supported non-Gaussian evidence map Done locally: docs/design/79-supported-nongaussian-evidence-goal.md adds one goal-level ledger for Student-t, lognormal, Gamma, beta, beta-binomial, Poisson/ZIP, NB2/ZINB2, truncated/hurdle NB2, cumulative logit, first count mixed-model lanes, and blocked neighbours.
606-620 Fixed-effect family evidence closeout Done locally as an audit closeout: the supported fixed-effect family rows are mapped to their likelihood, fitted/prediction, deterministic simulation or recovery, boundary, interval/status, and documentation evidence without adding new model syntax.
621-635 Unsupported neighbour closeout Done locally as a no-fit boundary: mixed-response, inflation/hurdle random-effect, zero-one-inflation, shape/skew random-effect, cross-parameter covariance, and broad structured non-Gaussian routes stay planned or blocked with fitted alternatives.
636-650 Count mixed-model evidence closeout Done locally as ledger sync: ordinary Poisson/NB2 mu random effects, the narrow NB2 log-sigma random-intercept gate, and Poisson/NB2 q=1 phylogenetic mu gates are recorded as separate first slices; NB2 q1 formal promotion still depends on the 581-590 shard audit.
1279-1288 Core family completion map Done locally: docs/design/109-phase-18-core-family-completion-map-slices-1279-1288.md routes the next Phase 18 evidence work breadth-first across counts, proportions, positive-continuous responses, ordinal responses, and shape families before another covariance expansion.
1289-1298 Proportion fixed-effect artifacts Done locally: beta() and beta_binomial() now have fixed-effect DGP, summariser, smoke runner, grid writer, first-wave summary inclusion, manual proportion_fixed_effect Actions dispatch, focused tests, and design/after-task evidence. Exact boundary mass, zoi/coi, bounded-response random effects beyond the ordinary mu intercept/slope slices, structured bounded responses, and mixed-response bounded models remain planned or unsupported.
1299-1308 Positive-continuous fixed-effect artifacts Historical lognormal/Gamma-only fixed-effect artifact lane: lognormal() and Gamma(link = "log") gained fixed-effect DGPs, summarisers, smoke runners, grid writers, first-wave summary inclusion, manual positive_continuous_fixed_effect dispatch, focused tests, and design/after-task evidence. Later slices added ordinary mu random intercepts, independent numeric mu slopes, and ordinary sigma random intercepts. Tweedie was subsequently fitted with ordinary mu intercepts/slopes, and exact mc-0539 is inference-ready with caveats; generalized Gamma, correlated positive-continuous random slopes, sigma slopes, known-covariance positive responses, structured positive responses, and mixed-response positive-continuous models remain planned or unsupported.
1309-1318 Ordinal fixed-effect artifacts Historical fixed-effect artifact slice. Current cumulative-logit models additionally fit ordinary mu random intercepts and independent slopes; the exact mc-0227 slope cell is inference-ready with caveats under its recorded design, and one exact phylogenetic mu intercept gate is fitted separately. Correlated/labelled or other structured ordinal effects, scale/discrimination formulas, cutpoint-specific predictors, known-covariance ordinal models, bivariate ordinal models, and mixed-response ordinal models remain planned or unsupported.
1319-1328 Count first-wave closure Done locally as Slice C: docs/design/113-phase-18-count-first-wave-closure-slices-1319-1328.md inventories the paired Poisson/NB2 mu, NB2 log-sigma, Poisson q1 phylo, and NB2 q1 phylo evidence lanes; records the Slice D choices without adding COM-Poisson, Tweedie, zero-one beta, skew-normal, or new random-effect syntax; and now points to the later D1 shard audit that kept NB2 q1 at hold_smoke_only.
1329-1338 Zero-one bounded-response design gate Historical design gate, superseded in part: docs/design/114-phase-18-zero-one-bounded-response-design-gate-slice-d3.md selected the fixed-effect likelihood, and the package later added ordinary mu random intercepts and independent slopes. The exact Arc 4c slope cell is inference-ready with caveats; random effects in sigma/zoi/coi, correlated or broader slopes, structured bounded responses, COM-Poisson, and generalized Poisson remain outside this row.
1339-1348 Zero-one beta fixed-effect artifacts Historical fixed-effect artifact lane. zero_one_beta() now also fits ordinary mu random intercepts and independent slopes; the exact Arc 4c slope cell is inference-ready with caveats for true SD 0.50 and M>=16. The fixed-effect DGP, summariser, smoke/grid writers, and focused tests remain valid provenance. Random effects in sigma/zoi/coi, covariance blocks, denominator syntax, known covariance, structured bounded responses, and bivariate or mixed bounded-response models remain planned or unsupported.
1359-1368 Bounded-response mu random-intercept artifacts Historical beta/beta-binomial intercept lane. Independent numeric mu slopes now have focused source tests; zero-one beta separately fits ordinary mu intercepts/slopes and exact mc-0575 is inference-ready with caveats. Correlated bounded-response slopes, labelled covariance, sigma/zoi/coi random effects, structured effects, known covariance, and mixed bounded-response models remain planned or unsupported.
1369-1378 Positive-continuous mu random-intercept artifacts Historical lognormal/Gamma intercept lane. Independent numeric mu slopes and ordinary sigma random intercepts now have focused source tests; Tweedie separately fits ordinary mu intercepts/slopes and exact mc-0539 is inference-ready with caveats. Correlated positive-continuous slopes, labelled covariance, sigma slopes, generalized Gamma, known-covariance positive responses, structured positive responses, and mixed-response positive-continuous models remain planned or unsupported.
1379-1388 Student-t mu random-intercept artifacts Done locally: student() now has an ordinary mu random-intercept DGP, summariser, smoke runner, grid writer, first-wave summary inclusion, manual student_mu_random_intercept Actions dispatch, focused tests, and design/after-task evidence. Independent numeric mu slopes now have focused source tests; correlated Student-t slopes, labelled covariance, sigma random effects, nu random effects beyond the later exact nu ~ phylo(1 | id, tree = tree) local-fit gate, other structured effects, known covariance, and bivariate Student-t models remain planned or unsupported.
1389-1398 Zero-truncated NB2 mu random-intercept artifacts Done locally: truncated_nbinom2() now has an ordinary mu random-intercept DGP, summariser, smoke runner, grid writer, first-wave summary inclusion, manual truncated_nbinom2_mu_random_intercept Actions dispatch, focused tests, and design/after-task evidence. Independent numeric mu slopes now have focused source tests; correlated zero-truncated NB2 slopes, labelled covariance, sigma random effects, hurdle random effects, zero-inflated zero-truncated models, structured effects, and bivariate count models remain planned or unsupported.
1399-1408 Parallel Phase 18 lane protocol Done locally as process design: docs/design/121-phase-18-parallel-lane-protocol-slices-1399-1408.md records how two independent distribution lanes can be built on separate branches while shared helpers, formula grammar, likelihood contracts, exported APIs, global status files, and merge decisions remain serial integration gates.
1409-1418 First two-team Phase 18 pilot Done locally: Team A added docs/design/122-tweedie-scale-preflight.md to lock the proposed first Tweedie lane to univariate fixed-effect mu, sigma, and intercept-only nu with public sigma = sqrt(phi) before implementation; Team B added zero-truncated NB2 mu random-intercept tests for factor/missing-row handling and malformed-neighbour rejection, without opening Tweedie support or broadening the fitted count surface.
1419-1518 Tweedie fixed-effect admission Done locally: tweedie() now fits the first univariate fixed-effect semicontinuous route with mu, public sigma = sqrt(phi), and intercept-only nu ~ 1; focused tests cover high-zero and low-zero recovery, fitted response semantics, simulation, support-boundary filtering, and malformed neighbours. Historical wording superseded by Arc 2a/2b/4c: ordinary unlabelled mu random intercepts and independent slopes are fitted, and the exact Arc 4c slope cell is inference-ready with caveats; predictor-dependent nu, random effects outside ordinary mu, structured effects, bivariate or mixed-response routes, zero-inflation aliases, and hurdle aliases remain planned.
1519-1538 Skew-normal source map Done locally as design-only evidence, later superseded by the fitted first slice: docs/design/123-phase-18-skew-normal-source-map-slices-1519-1538.md records candidate parameterizations, comparator sources, local boundaries, and first implementation tests before the constructor and likelihood branch landed.
1619-1668 Next Team A Tweedie hardening lane Planned in docs/design/125-phase-18-next-two-team-slices-1619-1718.md: decide the PR boundary, add or design the glmmTMB::tweedie() comparator contract, keep public sigma^2 versus comparator phi explicit, harden fitted(), sigma(), predict(dpar = "nu"), simulation, stale-claim, and rendered-site checks, and stop before nu ~ x, random effects, structured effects, bivariate Tweedie, zero-inflation aliases, or hurdle aliases.
1669-1718 Next Team B skew-normal decision gate Superseded by the fitted first slice: docs/design/125-phase-18-next-two-team-slices-1619-1718.md framed the native-versus-moment decision, and the implementation now uses public moment parameters with source tests for density, normal-limit, sign-convention, recovery, false-positive, interval-status, diagnostic, and malformed-neighbour behaviour. A fixed-effect Phase 18 artifact lane and fixed-effect guard grid now exist; formal high-replicate operating-characteristic grids and external fitted-model comparators remain planned.
1619-1628 Tweedie comparator contract Done locally: docs/design/126-phase-18-tweedie-comparator-contract-slices-1619-1628.md and the optional glmmTMB comparator test compare mu coefficients, 2 * sigma coefficients to log-dispersion phi, intercept-only power, and log-likelihood on low-zero and high-zero overlapping fixed-effect models without widening Tweedie support.
1669-1672 Skew-normal parameterization decision Done locally and now implemented: docs/design/127-phase-18-skew-normal-parameterization-decision-slices-1669-1672.md chose the moment contract for the first fitted lane, with public mu = E[y], public sigma = SD[y], nu as slant/shape, and internal transform to native xi, omega, and alpha = nu.
1673-1702 Skew-normal first-test contract Done locally and now source-tested: docs/design/128-phase-18-skew-normal-test-contract-slices-1673-1702.md recorded the density normalization, Gaussian normal-limit, sign-orientation, false-positive, and admission gates that the fitted first slice now covers in focused tests.
1629-1630 and 1687-1688 Tweedie semantic and skew-normal boundary tests Done locally: docs/design/129-phase-18-semantic-boundary-tests-slices-1629-1630-1687-1688.md records that Tweedie zero-regime comparator cells now reassert fitted() as unconditional mu and response-scale nu in (1, 2), while the skew-normal boundary tests moved from constructor absence to explicit malformed-neighbour rejection for unsupported random, structured, bivariate, covariance, and alias syntax.
1631-1632 and 1685-1686 Comparator and support-boundary decisions Done locally as design evidence: docs/design/130-phase-18-comparator-boundary-decisions-slices-1631-1632-1685-1686.md keeps Tweedie weights as top-level row likelihood multipliers, keeps Tweedie offsets out of the first comparator pass, and records finite-response, missingness, and rank-deficiency decisions used by the skew-normal first slice.
1631 addendum Tweedie row-weight invariant Done locally: docs/design/131-phase-18-tweedie-weight-invariant-slice-1631-addendum.md and tests/testthat/test-tweedie-location-scale.R check that constant Tweedie row weights double the log-likelihood without moving mu, sigma, or intercept-only nu, and that integer row weights match explicit row duplication. The weighted external glmmTMB comparator remains postponed.
1639, 1641, and 1642 Tweedie simulation shape and seed hardening Done locally: tests/testthat/test-tweedie-location-scale.R now checks simulate() data-frame shape, column names, fitted-row count after missing-row filtering, finite non-negative draws with exact zeros, and repeated-seed reproducibility for the fitted fixed-effect Tweedie lane.
1644-1646 Tweedie fixed-effect artifact preflight Done locally as design-only evidence: docs/design/133-phase-18-tweedie-fixed-effect-artifact-preflight-slices-1644-1646.md names the future tweedie_fixed_effect DGP, estimands, summary columns, manifest, failure-ledger, Wald interval, and coverage fields before runner code. It keeps the lane univariate, fixed-effect, unweighted, and intercept-only for nu; Tweedie offsets, random effects, structured effects, bivariate routes, zero-inflation aliases, and hurdle aliases remain excluded.
1689-1702 Skew-normal implementation gate Done locally and now fitted as the first source slice: docs/design/132-phase-18-skew-normal-implementation-gate-slices-1689-1702.md named the density, normal-limit, sign-orientation, malformed-neighbour, method, documentation, provenance, recovery, false-positive, interval-status, diagnostic, runtime, DGP, and summary gates for the first implementation PR.
1703 Skew-normal density contract fixture Done locally and now paired with the fitted constructor: tests/testthat/helper-skew-normal-density.R and tests/testthat/test-skew-normal-density-contract.R check the public-moment to native-density transform, integration to one, native-density comparison, the nu = 0 Gaussian limit, and the third-moment sign orientation.
1704 Tweedie density fixture Done locally as test-only evidence: tests/testthat/helper-tweedie-density.R and tests/testthat/test-tweedie-location-scale.R compare an intercept-only fitted Tweedie log likelihood with an independent compound Poisson-Gamma density fixture for exact-zero mass and positive observations. No Tweedie DGP, runner, grid writer, coverage table, predictor-dependent nu, random effects, structured effects, bivariate route, zero-inflation alias, or hurdle alias is added.
1705-1708 Tweedie fixed-effect smoke artifacts Done locally: inst/sim/dgp/sim_dgp_tweedie_fixed_effect.R, inst/sim/fit/sim_summarise_tweedie_fixed_effect.R, inst/sim/run/sim_run_tweedie_fixed_effect_smoke.R, and inst/sim/run/sim_summary_tweedie_fixed_effect_smoke.R add the first low/high-zero DGP, fit summariser, smoke runner, resume check, aggregate/replicate/manifest/failure-ledger outputs, and formula-coefficient Wald artifacts for the fitted univariate fixed-effect tweedie() route. No grid writer, Actions task, predictor-dependent nu, random effects, structured effects, bivariate route, offset/exposure route, zero-inflation alias, or hurdle alias is added.
1709-1712 Tweedie fixed-effect grid writer Done locally: inst/sim/run/sim_write_tweedie_fixed_effect_grid.R writes repeatable aggregate, replicate, manifest, failure-ledger, Wald interval, and Wald coverage CSV artifacts for tweedie_fixed_effect, with overwrite protection, artifact-manifest checks, and focused tests. No manual Actions task, predictor-dependent nu, random effects, structured effects, bivariate route, offset/exposure route, zero-inflation alias, or hurdle alias is added.
1713-1716 Tweedie first-wave summary wiring Done locally: inst/sim/run/sim_run_first_wave_summary_smoke.R now runs a two-cell low/high-zero tweedie_fixed_effect grid in the shared first-wave summary smoke runner, includes it in the report bundle, return object, and parallel-summary CSV, and updates the focused first-wave smoke test. No manual Actions task, predictor-dependent nu, random effects, structured effects, bivariate route, offset/exposure route, zero-inflation alias, or hurdle alias is added.
1717-1718 Tweedie manual Actions task Done locally: .github/workflows/phase18-simulation-grid.yaml and inst/sim/run/sim_run_actions_cell.R expose a manual-only tweedie_fixed_effect dispatch task, update the first-wave Actions dependency list for the merged Tweedie runner, and add dry-run/workflow tests. The task is excluded from task = "all" and does not add condition sharding, predictor-dependent nu, random effects, structured effects, bivariate route, offset/exposure route, zero-inflation alias, or hurdle alias.
1719-1720 Tweedie manual Actions smoke audit Done via GitHub Actions run 26608885245: task=tweedie_fixed_effect, n_reps=2, cores=2, backend=multicore, render_report=false completed successfully on main. The downloaded artifact contained 8 cells, 16 replicate RDS files, 40 aggregate rows, 80 replicate coefficient rows, 80 Wald interval rows, 40 Wald coverage rows, 16 ok manifest rows, and no failure-ledger rows; all 80 coefficient rows had converged = TRUE and pdHess = TRUE. This is a smoke artifact audit, not a final coverage claim or model-boundary expansion.
1721-1728 Count structured q1 smoke artifacts Done locally: inst/sim/dgp/sim_dgp_count_structured_q1.R, inst/sim/fit/sim_summarise_count_structured_q1.R, inst/sim/run/sim_run_count_structured_q1_smoke.R, inst/sim/run/sim_summary_count_structured_q1_smoke.R, and inst/sim/run/sim_write_count_structured_q1_grid.R add opt-in aggregate, replicate, manifest, failure-ledger, fixed-effect Wald, profile-target, optional profile-interval, interval-evidence, interval-diagnostic, and interval-failure artifacts for ordinary Poisson/NB2 q=1 spatial(), animal(), and relmat() mu intercepts. This follows the source-test first slice and does not add zero-inflated structure, structured slopes, labelled count covariance, structured NB2 sigma, manual Actions dispatch, or formal recovery claims.
1729-1730 Count structured q1 manual Actions task Done locally: .github/workflows/phase18-simulation-grid.yaml and inst/sim/run/sim_run_actions_cell.R expose a manual-only count_structured_q1 task, wire the new artifact dependencies, pass through optional profile_parameters, and add dry-run/workflow/dependency tests. The task is excluded from task = "all" and does not add zero-inflated structure, structured slopes, labelled count covariance, structured NB2 sigma, condition sharding, or formal recovery claims.
1731-1732 Count structured q1 manual Actions smoke audit Done via GitHub Actions run 26622840562: task=count_structured_q1, n_reps=2, cores=2, backend=multicore, render_report=false completed successfully on main. The downloaded artifact contained 24 cells, 48 replicate RDS files, 96 aggregate rows, 192 replicate parameter rows, 48 ok manifest rows, 48 ready profile-target rows, 192 Wald interval rows, 72 Wald coverage rows, and 96 interval-failure diagnostic rows. One NB2 spatial replicate (count_structured_q1_020, replicate 2) had warning NaNs produced and pdHess = FALSE across its five parameter rows; all 192 parameter rows still had converged = TRUE. This is an operational smoke audit, not a formal recovery or coverage claim.
1733-1734 Count structured q1 warning diagnostic hardening Done locally: the exact count_structured_q1_020 replicate 2 seed replayed with the same near-zero spatial SD estimate and fixed-effect estimates, while Hessian status differed between local macOS (ok) and the Ubuntu Actions artifact (pdHess = FALSE). phase18_summarise_count_structured_q1_fit() now records fit-level diagnostic rollup, Hessian status, and random-effect-SD boundary status in each replicate row, and the focused test suite asserts that this seed is a boundary case rather than relying on platform-stable Hessian status. This does not promote the lane to formal recovery or coverage evidence.
1735-1736 Count structured q1 post-diagnostic Actions smoke audit Done via GitHub Actions run 26626333581 after the warning-diagnostic columns merged. The selected count_structured_q1 job succeeded in 3m33s, all unselected jobs skipped, and the downloaded artifact again had 48 ok manifest rows, 192 converged parameter rows, 48 ready profile-target rows, and one warning-ledger row for count_structured_q1_020 replicate 2. The new replicate columns were present: fit_diagnostic_status had 169 ok and 23 warning parameter rows, sd_boundary_status had 169 ok and 23 warning rows, and hessian_status had 187 ok and 5 warning rows. The warnings collapse to five boundary-sensitive replicates, with only the original NB2 spatial replicate also producing a Hessian warning and NaNs produced. This is post-merge smoke evidence, not recovery or coverage evidence.
1737-1738 Count structured q1 pre-grid boundary gate Done locally as design evidence: larger count_structured_q1 pilots must collapse replicate-table rows to fitted-replicate units, report fit-diagnostic, SD-boundary, Hessian, and warning-ledger rates overall and by condition, and stop as diagnostic evidence if Hessian warnings exceed 5%, SD-boundary warnings reach 15%, condition-level warning triggers fire, or unexplained optimizer/non-finite warning messages appear. This gate keeps the lane out of formal recovery or coverage claims until the boundary-sensitive smoke behavior has a documented decision rule.
1739-1740 Count structured q1 boundary audit helper Done locally: phase18_audit_count_structured_q1_boundary_gate() reads a count structured q=1 artifact directory, collapses parameter rows to fitted replicates, reports overall and condition-level gate rates, applies the Slice 1737-1738 Hessian, SD-boundary, condition, and warning-ledger triggers, and returns hold_diagnostic or propose_next_pilot. The replicate summary now carries sd_structured, and the helper can derive that value from older structured-SD rows.
1741-1742 Count structured q1 helper artifact audit Done locally using the downloaded artifact from GitHub Actions run 26626333581: the helper collapsed 192 parameter rows to 48 fitted replicates, found 5 fit-diagnostic and SD-boundary warning replicates, 1 Hessian-warning replicate, no unexplained warning-ledger rows, all gate checks ok, and decision propose_next_pilot. This permits designing a larger diagnostic pilot but still does not make recovery or coverage claims.
1743-1750 Count structured q1 next diagnostic pilot spec Done locally as design evidence: docs/design/135-phase-18-count-structured-q1-next-pilot-slices-1743-1750.md specifies a 24-cell x 10-replicate count_structured_q1 diagnostic pilot, the manual Actions dispatch contract, 20-30 minute runtime expectation, no-profile interval policy, boundary-gate helper audit, stop rules, and after-task reporting requirements. This is a pre-run design, not a grid dispatch or recovery claim.
1751-1752 Count structured q1 diagnostic pilot audit Done via GitHub Actions run 26631771105: task=count_structured_q1, n_reps=10, cores=2, backend=multicore, and profile_parameters='' completed successfully on main, with the selected job finishing in 3m51s and unselected matrix jobs skipped. The artifact contained 24 condition directories, 240 replicate RDS files, 240 ok manifest rows, 960 replicate parameter rows, and 240 ready profile-target rows. The boundary helper collapsed the rows to 240 fitted replicates and returned hold_diagnostic: SD-boundary warnings were 40/240 = 0.167, above the 15% gate, and six condition cells crossed the condition-level SD-boundary trigger. This stops the lane at diagnostic evidence and does not permit formal recovery or coverage claims.
1753-1760 Count structured q1 follow-up condition sets Done locally as executable design evidence: phase18_count_structured_q1_followup_conditions() annotates the run 26631771105 pilot cells and exposes stable, stable_watch, boundary_stress, and historical all condition sets, while .github/workflows/phase18-simulation-grid.yaml and inst/sim/run/sim_run_actions_cell.R pass condition_set through the manual count_structured_q1 task. docs/design/137-phase-18-count-structured-q1-followup-condition-sets-slices-1753-1760.md specifies that only the 10 clean high-SD stable cells can propose a later formal-pilot design, and even then without recovery or coverage claims until direct intervals and MCSE targets are designed.
1761-1762 Count structured q1 stable diagnostic audit Done via GitHub Actions run 26638116979: task=count_structured_q1, condition_set=stable, n_reps=20, cores=2, backend=multicore, and profile_parameters='' completed successfully on main, with the selected job finishing in 3m48s and unselected matrix jobs skipped. The artifact contained 10 condition directories, 200 replicate RDS files, 200 ok manifest rows, 760 replicate parameter rows, and 200 ready profile-target rows. The boundary helper collapsed the rows to 200 fitted replicates and returned propose_next_pilot: SD-boundary warnings were 3/200 = 0.015, no Hessian or warning-ledger rows appeared, and no condition crossed the SD-boundary trigger. This permits writing a formal-pilot design note for the stable cells but still does not permit recovery or coverage claims.
1763-1770 Count structured q1 formal-pilot design Done locally as design evidence: docs/design/139-phase-18-count-structured-q1-formal-pilot-design-slices-1763-1770.md specifies a stable-set-only manual Actions pilot with n_reps=100, profile_parameters='log_sd_phylo', profile_level=0.70, bootstrap disabled, a 60-minute selected-job runtime budget, MCSE expectations for 70% profile coverage, and boundary/profile stop rules for the two NB2 high-SD cells that still showed low-rate SD-boundary warnings. This permits dispatching and auditing a formal pilot from main; it does not create recovery, coverage, bootstrap, low-SD, zero-inflated, structured-slope, labelled-covariance, or structured NB2 sigma claims.
1771-1772 Phase 18 formal-pilot workflow inputs Done locally: .github/workflows/phase18-simulation-grid.yaml now exposes manual profile_level and require_complete inputs and passes them to sim_run_actions_cell.R, so the Slice 1763-1770 count structured q1 formal-pilot dispatch command can request 70% profile intervals and fail incomplete replicate runs. tests/testthat/test-phase18-actions-runner.R guards the workflow contract, and the dry-run plan prints require_complete for pre-dispatch evidence. This is workflow plumbing only, not a simulation dispatch or recovery claim.
1773 Phase 18 post-run print-plan regression Done locally: sim_run_actions_cell.R now passes require_complete to the post-run phase18_actions_print_plan() call, fixing the failure seen in Actions run 26667502560 after the count structured q1 formal pilot completed its task body. tests/testthat/test-phase18-actions-runner.R mocks a non-dry-run count_structured_q1 execution and asserts that require_complete=TRUE prints after saving phase18-actions-result.rds. This is runner plumbing only, not artifact audit evidence.
1774-1782 Count structured q1 formal-pilot audit Done locally as interval diagnostic evidence: GitHub Actions run 26669005577 completed the stable-set count_structured_q1 formal pilot from main at f7e090f2; the selected job finished in 8m35s and uploaded 1000 manifest rows, 1000 profile-target rows, 1000 profile-interval rows, and 10 profile-coverage rows. The fit-level boundary helper returned propose_next_pilot with 10/1000 SD-boundary warning fits and no Hessian warnings, but direct log_sd_phylo profile intervals had 27 failures overall and count_structured_q1_001 had 11/100 failed intervals, crossing the 10% condition-level profile stop rule. This stops the lane at interval diagnostic evidence and does not permit a larger recovery-grid design, bootstrap interval work, or broad recovery/coverage claims.
1783-1784 Count structured q1 profile-gate helper Done locally: phase18_count_structured_q1_profile_gate_summary() now applies the formal-pilot profile stop rules to profile-interval tables, including the 5% overall failure rule, 10% condition-level failure rule, and optional watch-cell profile-failure rule. Focused tests cover both hold_interval_diagnostic and propose_next_pilot outcomes, so future artifact audits can reproduce the Slice 1774-1782 manual decision before any recovery-grid design is discussed.
1785 Count structured q1 profile-gate artifact audit Done locally: phase18_audit_count_structured_q1_profile_gate() reads a count structured q1 artifact directory, loads count-structured-q1-profile-intervals.csv, and returns the same profile-gate decision surface as the table helper. The focused artifact test uses a synthetic requested interval row; this is artifact plumbing only, not new profile computation or recovery evidence.
1786 Count structured q1 profile-failure diagnostics Done locally: the profile gate now includes failure_summary, grouping failed requested profile intervals by condition, interval status, and interval message with condition denominators. Running the helper on formal-pilot artifact 26669005577 keeps the decision at hold_interval_diagnostic and shows the largest failed groups are nonfinite profile intervals in count_structured_q1_001, count_structured_q1_003, and count_structured_q1_006.
1787 Count structured q1 profile-failure classes Done locally: failure_summary now uses compact failure_class values and keeps a single example_interval_message, making artifact reports readable while preserving an audit trail. On artifact 26669005577, the classified summary has 11 rows split between nonfinite_interval and profile_crossing_failure.
1788 Count structured q1 profile-failure example replicates Done locally: failure_summary now includes example_replicate, giving each failure-class row a concrete replicate to inspect in the downloaded artifact before the next profile-geometry diagnostic note.
1789 Count structured q1 profile-failure example result paths Done locally: artifact-level profile gate audits now attach example_result_path and example_result_exists to failure-summary rows, so each failure class can point directly at a downloaded replicate RDS. On artifact 26669005577, all 11 example result paths existed.
1790 Count structured q1 profile-failure example details Done locally: artifact-level profile gate audits now read each available example RDS and attach the requested profile row’s parameter, truth, estimate, interval endpoints, profile status, and target parameter to failure_summary. On artifact 26669005577, all 11 rows had example_profile_detail_status = "ok" and several failed examples had structured-SD estimates near zero despite truth 0.6, keeping the lane in diagnostic mode.
1791 Count structured q1 profile-failure example geometry summary Done locally: artifact-level profile gate audits now return example_geometry_summary, grouping example-detail rows by failure_class with failed-interval totals, endpoint missingness, estimate ranges, estimate/truth ranges, and the minimum-estimate example. On artifact 26669005577, nonfinite intervals had 22 failed intervals across 7 rows with lower endpoints missing and upper endpoints present, while profile-crossing failures had 5 failed intervals across 4 rows with both endpoints missing.
1792-1799 Count structured q1 profile geometry diagnostic note Done locally: docs/design/141-phase-18-count-structured-q1-profile-geometry-diagnostic-slices-1792-1799.md records the formal-pilot profile-failure evidence, separates near-boundary example summaries from cause claims, and defines the next acceptable selected-example profile-trace diagnostic before any profile-setting change or larger recovery grid.
1800 Count structured q1 selected profile-trace plan Done locally: phase18_count_structured_q1_profile_trace_plan() now builds a six-row trace plan for the three selected formal-pilot examples under current ystep = 0.50 and smaller ystep = 0.25 passes, using exact artifact seeds from run 26669005577. This is a scaffold only; it does not rerun profiles or change profile settings.
1801 Count structured q1 profile-trace plan writer Done locally: phase18_write_count_structured_q1_profile_trace_plan() writes the six-row selected-example plan to tables/count-structured-q1-profile-trace-plan.csv with overwrite protection. This creates a stable rerun input artifact without adding profile runs or changing settings.
1802 Count structured q1 profile-trace result wrapper Done locally: phase18_count_structured_q1_profile_trace_result() wraps one plan row and a profile function, adding trace metadata to successful profile rows and returning a one-row failure record when profiling errors. Focused tests use injected profile functions, so no expensive selected-example profiles run in tests.
1803 Count structured q1 profile-trace run-plan helper Done locally: phase18_count_structured_q1_profile_trace_run_plan() now connects the selected-example plan to DGP, fit, and profile functions, catches DGP/fit failures as trace rows, and binds mixed success/failure trace outputs. Focused tests inject fake DGP, fit, and profile functions, so this is runner plumbing only and still does not run the selected formal-pilot profiles in CI.
1804 Count structured q1 profile-trace run writer Done locally: phase18_write_count_structured_q1_profile_trace_run() writes both the selected-example plan and bound trace output under tables/, with overwrite protection across both CSVs. Focused tests still inject fake DGP, fit, and profile functions, so this creates an artifact writer without running the selected formal-pilot profiles.
1805 Count structured q1 profile-trace target labels Done locally: the default selected-example trace plan now stores the public direct profile targets (sd:mu:spatial(1 | site) or sd:mu:animal(1 | id)) rather than the internal TMB parameter log_sd_phylo. The focused tests check the per-example labels, and a real local trace writer smoke at /private/tmp/drmtmb-count-structured-q1-profile-trace-targets-20260530 produced 116 current and 125 smaller-ystep trace rows with trace_status = "ok", while preserving the interval failure evidence through conf.low, conf.high, and conf.status.
1806 Count structured q1 profile-trace summary helper Done locally: phase18_count_structured_q1_profile_trace_summary() reduces trace rows by cell, replicate, and profile pass, reporting trace-row counts, failed-row counts, endpoint missingness, profile-value range, maximum likelihood-ratio distance, and interval status. This gives the next plot/report slice a stable table instead of ad hoc trace-CSV aggregation.
1807 Count structured q1 profile-trace plot helper Done locally: phase18_plot_count_structured_q1_profile_trace() draws selected-example likelihood-ratio curves on the log structured-SD scale with a sqrt-scaled likelihood-ratio axis, profile-pass colour and linetype, the fitted estimate, and the 70% likelihood-ratio cutoff. Focused tests build the ggplot object from synthetic trace rows, and a rendered local PNG from the real trace artifact was visually inspected before the slice was closed.
1808 Count structured q1 profile-trace summary writer Done locally: phase18_write_count_structured_q1_profile_trace_run() now writes tables/count-structured-q1-profile-trace-summary.csv beside the plan and raw trace CSVs, and returns the summary table in its result object. Focused tests check the summary file and overwrite protection across all three CSVs.
1809 Count structured q1 profile-trace plot writer Done locally: phase18_write_count_structured_q1_profile_trace_plot() writes figures/count-structured-q1-profile-trace.png from trace rows, returns the ggplot object and summary table, and keeps the writer internal. Focused tests use synthetic trace rows, check that the PNG is non-empty, and cover overwrite protection without rerunning selected formal-pilot profiles.
1810 Count structured q1 profile-trace interpretation Done locally: docs/design/142-phase-18-count-structured-q1-profile-trace-interpretation.md interprets the selected trace, summary, and plot artifacts. The note records that all six selected passes produced trace rows but smaller ystep did not recover missing endpoints, so the next diagnostic should split trace support by side of the fitted estimate before any wider profile range, lower-boundary setting, larger recovery grid, or coverage claim.
1811 Count structured q1 profile-trace side summary Done locally: phase18_count_structured_q1_profile_trace_side_summary() summarizes lower-side and upper-side trace support separately, reporting side row counts, profile-value ranges, maximum likelihood-ratio distance, cutoff reach, and endpoint presence. On the real selected trace artifact, every lower side failed to reach the cutoff while every upper side reached it; only the nonfinite example had a finite upper endpoint.
1812 Count structured q1 profile-trace side summary writer Done locally: phase18_write_count_structured_q1_profile_trace_run() now writes tables/count-structured-q1-profile-trace-side-summary.csv beside the plan, trace, and summary CSVs, and returns side_summary. Focused tests cover the new file and overwrite protection; a real selected-example writer smoke wrote all four trace-run CSVs.
1813 Count structured q1 profile-trace plot side summary Done locally: phase18_write_count_structured_q1_profile_trace_plot() now returns side_summary beside summary, so plot smoke outputs carry the same lower-side and upper-side support table without recomputing it from trace rows.
1814 Structured workflow registry Done locally: docs/design/143-phase-18-structured-workflow-registry.md and inst/sim/registry/phase18_structured_workflow_registry.csv turn the current random-slope, structured-dependence, correlation-block, and family-surface audit into taskable rows. The registry includes Gaussian, bivariate Gaussian, counts, bounded responses, positive-continuous responses, Student-t, Tweedie, zero-truncated NB2, ordinal, meta-known-V, and mixed-response rows, while keeping blocked or design-only surfaces explicit.
1815 Structured workflow registry validator Done locally: inst/sim/run/sim_phase18_structured_workflow_registry.R now reads the registry CSV, validates required columns, unique lane IDs, status and lane vocabularies, known Phase 18 Actions task names, and the rule that blocked or design_only rows keep existing_actions_task = "none". phase18_actions_task_choices() exposes the runner task vocabulary, and focused tests cover registry validation, summaries, admitted-row filters, rejected duplicate lanes, rejected blocked-row promotion, rejected unknown tasks, and runner-task synchronization.
1816 Random-slope workflow plan Done locally: phase18_random_slope_workflow_plan() filters the structured workflow registry to admitted random-slope rows, labels dispatch state as ready_existing_task, source_test_audit, or needs_wrapper_target, and keeps blocked, design-only, and diagnostic rows out of the plan. At Slice 1816, eight rows mapped to existing Actions tasks while the bivariate Gaussian slope-only row remained the explicit wrapper target; after Slice 1825, all nine admitted random-slope rows have non-none Actions routing and zero wrapper targets.
1817 Structured-dependence workflow plan Done locally: phase18_structured_dependence_workflow_plan() builds the phylo(), spatial(), animal(), and relmat() workflow table from the registry, excludes blocked/design rows, and labels Gaussian existing-task rows, Poisson formal-admission, NB2 hold-smoke, and count q=1 diagnostic audit rows separately.
1818 Correlation-block workflow plan Done locally: phase18_correlation_block_workflow_plan() builds the residual rho12, q=2 corpairs(), and q=4 diagnostic workflow table from the registry, excludes blocked/design rows, maps direct interval rows to interval_heavy_summary, maps structured q2/q4 status rows to correlation_block_status, and marks q=4 rows with q4_derived_interval_unavailable.
1819 Family-surface admission plan Done locally: phase18_family_surface_workflow_plan() builds the distribution-level admission table from the registry, keeping six admitted grid rows, one smoke-only NB2 sigma row, three blocked rows, and one design-only mixed-response row visible with explicit dispatch statuses.
1820 Workflow plan bundle Done locally: phase18_structured_workflow_plan_bundle() and phase18_structured_workflow_plan_counts() return the four workflow plan tables and a compact count table: random slopes 9 rows, structured dependence 7 rows, correlation blocks 6 rows, and family surfaces 11 rows, with existing-task, wrapper-target, diagnostic, blocked, and design-only counts.
1821 Workflow dry-run printers Done locally: phase18_format_structured_workflow_bundle_dry_run() and phase18_print_structured_workflow_bundle_dry_run() render the bundle count table plus one table per workflow plan, and the single-plan dry-run helpers print one plan without dispatching simulations, Actions jobs, likelihoods, or status promotions.
1822 Random-slope wrapper target Done locally: phase18_random_slope_wrapper_target_plan() isolates the current random_slope_wrapper row, bivariate_gaussian_slope_only, records the source-test evidence, names phase18_run_bivariate_gaussian_mu_slope_smoke() as the required helper, and initially keeps dispatch blocked until that helper lands.
1823 Bivariate Gaussian slope smoke helper Done locally: phase18_run_biv_gaussian_mu_slope_smoke() and alias phase18_run_bivariate_gaussian_mu_slope_smoke() add the local bivariate Gaussian mu1/mu2 slope-only smoke surface, with seeded DGP, fit wrapper, replicate and aggregate summaries, focused tests, and wrapper-target status updated to local helper available but not Actions-wired.
1824 Bivariate Gaussian slope artifact writer Done locally: phase18_write_biv_gaussian_mu_slope_grid_outputs() writes aggregate, replicate-level, manifest, and failure-ledger CSV artifacts for the bivariate Gaussian mu1/mu2 slope-only surface, and the wrapper target reports grid-writer available before Slice 1825 wires the manual biv_gaussian_mu_slope Actions task.
1825 Bivariate Gaussian slope Actions task Done locally: biv_gaussian_mu_slope is a manual-only Phase 18 Actions task that calls phase18_write_biv_gaussian_mu_slope_grid_outputs(), and the structured workflow registry now maps bivariate_gaussian_slope_only to the task so the random-slope plan has nine non-none Actions routes and zero wrapper targets.
1826 Bivariate Gaussian slope Actions pilot audit Done locally: manual Phase 18 run 26689587073 audited the biv_gaussian_mu_slope artifact with one replicate in each of the two pilot cells; both manifest rows were ok, all 20 replicate-summary rows converged with pdHess = TRUE and zero warnings, and the failure ledger was empty. This is dispatch and artifact evidence only, not a recovery, coverage, rendering, multicore, bootstrap, or cross-platform claim.
1827 Workflow status helper bundle Done locally: read-only helpers now summarize structured-dependence wrapper-target readiness, correlation-block wrapper targets, and family-surface registry status tables without running models, writing artifacts, dispatching Actions jobs, promoting rows, or making recovery or coverage claims.
1828 Random-slope registry preflight Done locally: phase18_random_slope_registry_preflight() and phase18_print_random_slope_registry_preflight() print the workflow_lane == "random_slopes" registry rows, verify that admission_status, existing_actions_task, and supervision_boundary are present, and label each row’s dispatch/audit status before any diagnostic pilot is dispatched. This is a dry-run gate only, not a simulation run or promotion claim.
1829 Artifact-grain preflight Done locally: phase18_write_first_wave_table_bundle() now writes phase18-first-wave-artifact-grain-status.csv, and the summary-report parameters/template read it so Phase 18 report staging can distinguish replicate-ready artifacts from aggregate-only, missing, empty, mixed-grain, and missing-grain inputs before any replicate-error clouds are drawn.
1830 Replicate-cloud gate Done locally: the first-wave summary report now derives a per-surface replicate_cloud_gate from the artifact-grain status table and carries that gate into aggregate-bias rows, so aggregate-only surfaces stay on points, bars, and MCSE intervals until a replicate-ready artifact exists.
1831 Count-gallery grain gate Done locally: the count-pilot gallery bias panel now treats replicate CSVs as cloud-ready only when artifact_grain = "replicate", and the rendered template test covers an aggregate-grain CSV with error columns so aggregate-shaped inputs cannot create fake replicate-error clouds.
1832 Artifact-grain closeout Done locally: docs/design/150-phase-18-artifact-grain-closeout.md records the #255 current guarantee, and the first-wave table-bundle test now covers gaussian_ls_grid, meta_v_grid, count_mu_random_effect_grid, proportion_fixed_effect_grid, and biv_rho12_grid so aggregate-only rows stay out of replicate-cloud displays. Future gallery hygiene is tracked in #461.
1833 Future-gallery grain helper Done locally: inst/sim/R/sim_gallery_grain.R provides the reusable Phase 18 gate for cloud-style gallery geometry. The count-pilot gallery now uses it, and tests cover replicate-grain, aggregate-grain, derived-gate, conflicting-gate, and missing-column inputs before future galleries reuse the contract.
1840 Bivariate q8 endpoint diagnostic artifact gate Done locally and updated by the artifact-lane slices: the structured workflow registry now has ready_grid bivariate_gaussian_q8_endpoint, bivariate_gaussian_q8_endpoint_recovery, and bivariate_gaussian_q8_endpoint_staged_diagnostic rows with opt-in Actions tasks. phase18_biv_gaussian_q8_endpoint_precode_gate() names the eight all-endpoint labels, records the 28 implied correlations, and keeps q8 coverage and power held until deliberately sized evidence is accepted.
1834 Spatial one-slope Actions task Done locally: spatial_mu_slope is a manual-only Phase 18 Actions task that calls the existing coordinate-spatial Gaussian mu one-slope grid writer, and the structured workflow registry maps gaussian_spatial_mu_one_slope to that task. No recovery or coverage claim is made.
1835-1836 Animal and relmat one-slope artifact writers Historical artifact-writer state: phase18_write_relmat_mu_slope_grid_outputs() and phase18_write_animal_mu_slope_grid_outputs() write local aggregate, replicate-level, manifest, and failure-ledger artifacts for the relmat() and dense-pedigree animal() Gaussian mu one-slope lanes. Current 0.6.0 also fits the exact A-matrix animal and K/Q relmat q1 sigma one-slope routes, inference-ready with caveats. The manual tasks remain excluded from task = "all"; pedigree/Ainv bridge marshalling, sparse large-pedigree speed claims, multiple or labelled structured slopes, and slope correlations remain outside the writer claim.
1837 Phylo one-slope artifact writer Historical artifact-writer state: the manual task certifies only the Gaussian mu one-slope lane. Current 0.6.0 separately fits the q1 phylogenetic sigma route and exact non-Gaussian phylogenetic gates at their recorded tiers. Multiple or labelled slopes, slope correlations, and non-Gaussian neighbours outside those gates remain outside the writer claim.
1838 Non-spatial structured one-slope Actions tasks Done locally: .github/workflows/phase18-simulation-grid.yaml, inst/sim/run/sim_run_actions_cell.R, and the structured workflow registry expose manual-only phylo_mu_slope, animal_mu_slope, and relmat_mu_slope tasks beside spatial_mu_slope. All four Gaussian structured one-slope artifact tasks are excluded from task = "all" and make dispatch/artifact claims only, not recovery, coverage, or power claims.
1839 Correlation-block status Actions task Done locally: correlation_block_status is a manual-only Phase 18 Actions task that writes read-only CSV status artifacts from phase18_write_correlation_block_status_outputs(). The structured q2 and q4 correlation-block rows now have non-none Actions routing, so the correlation-block plan has six task-routed rows and zero wrapper targets while keeping q4 derived intervals unavailable.

Pre-Simulation Readiness Slice Map

This table is the working contract before full Phase 18 simulation begins. It keeps three lanes separate: user-facing plots, model-feature hardening, and simulation evidence. A narrow internal pilot, such as the Slice 258 count simulation diagnostics, should not be promoted as the general figure gallery or as the whole comprehensive simulation programme.

Slice Block Target Done When
260 Figure gallery Interaction plot polish Done locally: the gallery now shows categorical x continuous, categorical x categorical, and continuous x continuous examples with raw data where useful, fitted values, 95% confidence intervals, clear conditioning labels, alt text, and a cleaner correlation figure using plot_corpairs(label = ...).
261 Figure gallery Distributional-parameter panels Done locally: the gallery labels mu and sigma by estimand and adds fitted Student-t nu, zero-inflation probability zi, and residual rho12 panels with explicit response-scale wording and interval provenance.
262 Figure gallery Random-effect and variance-component figures Done locally: the gallery separates ordinary grouped SDs, random-slope summaries, sd(group) surfaces, residual sigma, and group-level SDs instead of visually collapsing them.
263 Figure gallery Correlation-layer figures Done locally and refreshed after the q=4 spatial slice: corpairs()-style examples distinguish implemented residual, ordinary group, phylogenetic, spatial, animal, and relmat() q=2 estimate rows, mark the constant spatial q=4 block as partly fitted, and keep richer structured correlation-regression paths planned.
264 Figure gallery emmeans and marginal-effects figures Done locally: the gallery shows the supported fixed-effect univariate mu emmeans route, factor-conditioned and interaction grids, an empirical marginal_parameters() summary, and unsupported boundaries for sigma, bivariate, zero-inflated, hurdle, ordinal, and random-effect targets.
265 Simulation plot grammar Operating-characteristic plot design Done locally: the Simulation & Comparison route has reusable plot grammar for bias, RMSE, coverage, power, convergence, runtime, and warning/error ledgers across continuous, proportion, count, and meta-analysis examples.
266 Figure QA Gallery source map Done locally: each figure maps to the fitted object or fixture, extractor or plotter, interval source, support status, and current limitation.
267 Florence closeout Plot helper backlog Done locally: the helper backlog keeps plot_parameter_surface() and plot_corpairs() as the exported helpers, leaves gallery-specific plots as tutorial recipes, and defers simulation/failure-ledger helpers until result schemas stabilize.
299 Figure QA Florence visual repair Done locally: the public figure gallery now adds raindrop-style compatibility displays for inference intervals, removes the misleading category-connecting line from the simulation bias panel, adds raincloud-style replicate clouds with mean/MCSE intervals, applies explicit colour to formerly default-black displays, and improves tile-label contrast for support-boundary strips.
300 Simulation plot grammar Raincloud and MCSE display contract Done locally: simulation-plot-grammar now requires real bias reports to show replicate-level errors beside mean bias and MCSE intervals, and to keep RMSE in a separate aggregate uncertainty panel rather than mixing it with signed bias or an absolute-error cloud.
301 Count pilot report Apply accuracy grammar Done locally: phase18-count-mu-gallery.Rmd now applies the Slice 300 accuracy contract to the count-pilot report template, with fixed family facets, aggregate MCSE bars, readable parameter-class labels, and no simulated raincloud when replicate-level rows are absent.
302 Documentation Implementation map Done locally: vignettes/implementation-map.Rmd gives users and roadmap work one table set for family components, random effects, dependence layers, q, random slopes, corpairs(), zi, and hu, while keeping fixed-effect-only, first-slice, planned, and blocked statuses separate.
303 Documentation Generic direct-SD design gate Done locally as planning: future sd*() work starts with grammar, compatibility, reference-index discoverability, and tests, not with new parallel names.
304 Documentation p8/q8 location-scale planning gate Done locally as planning: the next location-scale slope endpoint remains design-first because full p8/q8 covariance can become too large and weakly identified before users get a reliable model.
305 Documentation Structured q=4 parity plan Done locally as planning: spatial, animal, and relmat() q=4 parity stays one structured layer at a time, with corpairs(), diagnostics, and simulation admission requirements visible.
306 Documentation q=4 interval policy Done locally as planning: q=4 rows remain point-estimate or derived-summary rows unless interval methods are explicitly available.
307 Documentation Inflation and hurdle random-effect gate Done locally as a no-fit decision, later updated by the fixed-effect zero-one beta source slice: zi, hu, zoi, and coi stay fixed-effect-only where implemented until use cases and validation justify a new latent layer.
308 Documentation Non-Gaussian structured-dependence candidate map Done locally as planning: choose one family and one dependence layer before any broad non-Gaussian structured-dependence claim.
309 Documentation Implementation-map maintenance gate Done locally as process: high-traffic status surfaces and stale scans should move together after meaningful feature work.
310 Documentation User-route examples gate Done locally as planning: unsupported rows should direct readers to the closest fitted alternative or design note.
311 Documentation Generic sd*() contract Done locally as planning: future structured direct-SD syntax should be explicit about level and compatibility.
312 Documentation Direct-SD ambiguity guard Done locally as planning: ordinary sd(group) and future structured direct-SD routes should not collide.
313 Documentation Direct-SD user migration Done locally as planning: existing sd_phylo*() users keep a documented route while generic syntax is designed.
314 Documentation p8/q8 endpoint taxonomy Done locally as planning: q2, q4, q6, and q8 endpoint classes are separated before implementation.
315 Documentation p8/q8 parameterization risk Done locally as planning: full unstructured q8 is marked high risk and constrained alternatives should be evaluated first.
316 Documentation p8/q8 diagnostics gate Done locally as planning: profile targets, diagnostics, recovery tests, and warnings are required before p8/q8 claims.
317 Documentation Structured q4 ordering Done locally as planning and superseded by Slices 356-380: spatial q4 was the next constant structured q4 parity lane.
318 Documentation q4 interval contract Done locally as planning: q4 intervals remain unavailable unless explicit interval evidence exists.
319 Documentation Non-Gaussian candidate scoring Done locally as planning: non-Gaussian structured candidates are scored before coding.
320 Documentation First non-Gaussian candidate recommendation Done locally as planning: one q1 mu structured intercept is the first candidate class, with Poisson as smoke and NB2 as practical target.
321 Documentation User-route examples Done locally as planning: common planned requests now point to fitted alternatives in the public map.
322 Documentation Implementation-map sync Done locally: the public implementation map carries the 311-325 rows and examples.
323 Documentation Roadmap, NEWS, and check-log Done locally: public and dev ledgers match the planning-only scope.
324 Documentation After-task protocol Done locally: after-task report records the scope and remaining boundaries.
325 Documentation Validation Done locally: pkgdown and stale-claim scans confirm the rendered docs.
326 Documentation Generic direct-SD issue spec Done locally as pre-code: docs/design/64-implementation-map-slices-326-340.md records the grammar, compatibility, endpoint, reference-index, and test decisions required before generic structured direct-SD parser work.
327 Documentation Direct-SD parser boundary matrix Done locally as pre-code: ordinary sd(group), current sd_phylo*(), and future level-targeted structured SD routes have separate parser outcomes.
328 Documentation Direct-SD tests and docs checklist Done locally as pre-code: next direct-SD work requires malformed-input tests, prediction/profile rows, examples, reference docs, and stale-name scans.
329 Documentation p8/q8 endpoint registry sketch Done locally as pre-code: q2 slope-only, q4 location slope, q6 partial location-scale, and q8 all-endpoint slope classes are named.
330 Documentation p8/q8 staged implementation options Done locally as pre-code: q4 location-slope and constrained or block-diagonal routes are preferred before full q8 unstructured covariance.
331 Documentation p8/q8 simulation gate Done locally as pre-code: any q4/q6/q8 slope endpoint must vary group count, repeats, SD ratios, correlations, covariate spread, and boundary cases.
332 Documentation Spatial q4 pre-code checklist Done locally as pre-code: spatial q4 requires matching labelled terms, extractor rows, corpairs(), diagnostics, direct/derived interval status, and a small smoke before tutorial claims.
333 Documentation Structured q4 diagnostics checklist Done locally as pre-code: q4 rows need Hessian, boundary, profile-target, and derived-interval status checks before routine teaching.
334 Documentation Poisson structured q1 smoke spec Done locally as pre-code: the first non-Gaussian structured candidate is a q1 Poisson mu structured intercept smoke.
335 Documentation NB2 structured q1 practical spec Done locally as pre-code: NB2 mu q1 structured intercept is the first practical count target after Poisson smoke and overdispersion checks.
336 Documentation Non-Gaussian structured ADEMP stub Done locally as pre-code: the candidate needs an ADEMP sheet before simulation code enters Phase 18.
337 Documentation User-route example expansion Done locally: the public implementation map now gives more explicit fitted alternatives for planned direct-SD, q4, p8/q8, and non-Gaussian structured requests.
338 Documentation Stale-claim checklist Done locally: validation targets false fitted claims for generic sd*(), p8/q8, spatial q4, and non-Gaussian structured routes.
339 Documentation Roadmap and NEWS sync Done locally: public and dev ledgers record these as pre-code slices.
340 Documentation After-task and validation Done locally: the after-task report and pkgdown checks close the slice set.
341 Documentation Generic direct-SD issue template Done locally as planning: future generic direct-SD issues must name the target structured level, compatibility route, parser boundaries, extractor rows, reference examples, and stale-name migration path.
342 Documentation Generic direct-SD acceptance checklist Done locally as planning: direct-SD work cannot close without parser, fit-time, prediction/profile, reference, rendered-discoverability, and stale-name checks.
343 Documentation Direct-SD migration and stale scan Done locally as planning: current sd_phylo*() routes stay compatible while generic structured examples remain tied to fitted layers only.
344 Documentation p8/q8 issue template Done locally as planning: p8/q8 issues must start from a named endpoint class and record covariance structure, parameter labels, interval policy, diagnostics, and fitted alternatives.
345 Documentation p8/q8 acceptance checklist Done locally as planning: recovery, malformed-input, corpairs(), profile-target, Hessian/boundary, and tutorial-warning evidence is required before p8/q8 claims.
346 Documentation Spatial q4 issue template Done locally as planning: spatial q4 parity is scoped to constant location-scale spatial intercepts, not mesh/SPDE, spatial slopes, direct-SD regression, or count models.
347 Documentation Spatial q4 acceptance checklist Done locally as planning: spatial q4 needs endpoint-consistent likelihood, parser, extractor, diagnostic, corpairs(), profile-target, and pkgdown-example evidence.
348 Documentation Poisson structured q1 issue template Done locally as planning: first non-Gaussian structured dependence is scoped to one non-zero-inflated Poisson mu structured intercept.
349 Documentation Poisson structured q1 acceptance checklist Done locally as planning: Poisson q1 requires one named layer, guarded neighbouring syntax, simulation recovery, and first-slice docs before advertising.
350 Documentation NB2 structured q1 issue template Done locally as planning: NB2 q1 is the first practical count target after the Poisson smoke or explicit safety evidence.
351 Documentation NB2 structured q1 acceptance checklist Done locally as planning: NB2 q1 needs overdispersion-aware recovery, distinct labels, correct scale reporting, guarded zero-inflation/hurdle neighbours, and fallback guidance.
352 Documentation Non-Gaussian structured ADEMP gate Done locally as planning: Poisson or NB2 structured q1 must have an ADEMP sheet before Phase 18 simulation admission.
353 Documentation User documentation checklist Done locally as planning: implementation-map, model-map, reference or tutorial docs, README when appropriate, ROADMAP, NEWS, check-log, and after-task notes move together after fitted-status changes.
354 Documentation Review and issue maintenance Done locally as planning: future issues record Ada, Boole, Gauss, Noether, Fisher, Curie, Emmy, Pat, Darwin, Grace, and Rose review coverage before closeout.
355 Documentation Validation and handoff gate Done locally as planning: pkgdown, rendered scans, stale-support scans, after-task reporting, and the next code issue are required before handoff.
356-370 Structural dependence Spatial q4 fitted parity Done locally: constant coordinate-spatial q4 location-scale covariance fits for all-four labelled Gaussian endpoints, with extractors, corpairs(), diagnostics, profile-target status, and boundary tests.
371-380 Documentation Spatial q4 evidence and map closeout Done locally: public status surfaces, formula grammar, NEWS, check-log, after-task report, pkgdown, and stale scans separate fitted spatial q4 from remaining spatial plans.
381-388 Planning Non-Gaussian structured-dependence front gate Done locally as planning: family, component, and layer inventories now narrow the first route to Poisson phylogenetic q1 mu, with NB2, zi, hu, and structured slopes held behind explicit gates.
389-405 Planning Remaining non-Gaussian structured-dependence gates Done locally as planning: scale, shape, ordinal, known-covariance boundaries, extractor/diagnostic/simulation/interval contracts, user-route fallbacks, error-message gates, and issue-template fields now close as design-first gates.
406-420 Planning Route-specific implementation issue ledger Done locally as planning: Poisson implementation, Poisson smoke-runner, malformed-neighbour, documentation, NB2 skeleton, component-boundary, extractor-name, and diagnostic-name issue drafts are recorded without opening code.
421-435 Planning Poisson phylogenetic q1 runner contract Done locally as planning: direct-target, extractor, manifest, warning/error, smoke-grid, formal-grid, comparator, documentation-sync, unsupported-syntax, and test-plan contracts are recorded before broader simulation claims.
436-450 Evidence sync Poisson phylogenetic q1 source-ledger synchronization Done locally: source map, validation debt, Phase 18 programme, readiness matrix, family registry, NEWS, check-log, and after-task notes point to the runner contract while keeping broad simulation closed.
451-465 Simulation smoke Poisson phylogenetic q1 smoke runner Done locally: DGP, fit summariser, runner, summary helper, focused tests, README, source-map, readiness, design docs, check-log, and after-task notes create opt-in smoke infrastructure without formal recovery claims.
466-480 Simulation artifacts Poisson phylogenetic q1 grid writer Done locally: repeatable CSV artifact writer, row-count manifest, focused grid-writer tests, README, source-map, readiness, design docs, check-log, and after-task notes create smoke artifacts without formal recovery claims.
Current supersession Non-Gaussian structured boundary Live-ledger authority Rows 268-272 below preserve their historical slice wording. They do not override the current row-specific tiers: ordinary mu random effects for every fitted univariate family, Poisson/NB2 q1 structured mu, NB2 q1 structured sigma, and the exact Student-t/Gamma/beta recovery routes are separate from the diagnostic-only Poisson-zi, hurdle-hu, cumulative-logit, Student-t intercept/shape, and Poisson spatial-variant routes. Broader neighbours and interval/coverage promotion remain planned.
268 Support audit Pre-simulation capability matrix Done locally: docs/design/46-pre-simulation-readiness-matrix.md now has one capability audit table that says which Gaussian, non-Gaussian, shape, inflation, bivariate, random-slope, meta-analysis, phylogenetic, spatial, animal, and relmat() surfaces are implemented, tested, planned, or unsupported before Phase 18 grids admit them.
269 Random slopes Ordinary location random slopes Done locally: a q=4 ordinary Gaussian mu block test now confirms multi-slope SD/correlation names, corpairs() classes, and profile-target status, while README/model-map/which-scale wording names q > 2 as fitted but sample-size hungry.
270 Random slopes Scale random effects Superseded by the later correlated-scale-slope slice: Gaussian sigma supports independent slope terms and unlabelled correlated intercept-slope or multi-slope blocks with direct SD targets; labelled residual-scale and cross-formula mu-sigma slope covariance remain planned.
271 Random slopes Shape and inflation random effects Done locally by audit and later updated by the fixed-effect zero-one beta source slice: random-slope requests in Student-t nu, zero-inflation zi, hurdle hu, zoi, and coi stay blocked with component-specific tests; no random-effect likelihood path was opened.
272 Random slopes Structured random slopes Superseded by later Gaussian and exact non-Gaussian provider gates. Current Gaussian slope/covariance and Arc 1a REML authority is row-specific; exact non-Gaussian Poisson/NB2 and non-count gates are separately recorded in the live ledger. Multiple structured slopes, broader labelled covariance, broad bridge inference, slope correlations, structured rho12, AI-REML, all unpromoted interval/coverage/REML neighbours, and non-Gaussian structured effects outside the exact gates remain planned.
273 Bivariate Bivariate random-slope combinations Superseded by Slice 83 for matching slope-only mu1/mu2, by the q2 scale-slope route for matching sigma1/sigma2, by the same-response q2 mu/sigma slope route, by the q4/q6 smoke routes for matching q=4 and q=6 mu1/mu2 location blocks, and by the first q8 diagnostic artifact lane for matching all-four ordinary endpoint blocks. Those routes are fitted with extractor, profile-target, diagnostic, and source or artifact coverage, while broader p8/q8-style slope requests and formal q > 2 recovery grids remain boundary-tested before Phase 18 treats those grids as simulation evidence.
274 Convergence Control presets and defaults Done locally: drm_control(optimizer_preset = "careful") and "robust" now expand to explicit recorded nlminb() iter.max/eval.max budgets, user optimizer values can override a preset, and the convergence guide documents when to use the presets without changing ordinary defaults. Issue #506 adds a narrow automatic retry for optimizer-call errors from the default no-custom-control path, recording fit$optimizer_used and fit$optimizer_attempts while keeping alternative optimizers and nonzero-convergence reruns out of the automatic path.
275 Convergence Warm starts from simpler models Done locally by design boundary: warm-start names such as start_from, warm_start, warm_starts, and warm_start_from are now reserved, the simpler-fit ladder and provenance contract are documented, and no source-fit start is copied before target namespaces, row handling, diagnostics, and selected-optimum provenance are implemented.
276 Convergence Multi-optimizer fallback Done locally by design boundary: fallback-control names such as fallback_optimizer, fallback_optimizers, optimizer_fallback, and optimizer_fallbacks are now reserved, the future nlminb/BFGS/L-BFGS-B comparison and selected-optimizer provenance contract is documented, and fallback refits remain planned rather than automatic.
277 Convergence Hessian and boundary diagnostics Done locally: check_drm() now reports the largest fixed-gradient component in the fixed_gradient row, preserving the existing gradient/Hessian boundary status while making non-converged fits easier to triage before Wald or Hessian-based inference.
278 CIs and profiles Interval hardening Done locally: the interval contract now states which fixed-effect, scale, rho12, direct SD/correlation, Fisher-z simulation, derived-variance, and bootstrap routes are supported or deliberately unavailable, with Student-t nu fixed-effect interval and Fisher-z helper tests.
279 Known issues Bergmann report fixes Done locally and now partly superseded: invalid fixed-effect Wald variances produce NA intervals with conf.status = "wald_unavailable"; the old unsupported sigma ~ phylo() boundary has been replaced by fitted intercept-only univariate structured sigma routes; labelled q4 block-diagonal fallback is tested as separate mu and sigma q2 blocks; convergence guidance covers long iteration histories.
280 Meta-analysis meta_V(V = V) hardening Done locally and superseded by the deprecation slice: vector and full-matrix meta_V(V = V) routes now have deprecated-alias and Wald fixed-effect interval coverage, scale = "exact" gets a targeted remove-scale error because additive exact known-V is the default, and drmTMB() / meta_vcov_bivariate() documentation now leads with meta_V() while keeping deprecated meta_known_V() as a compatibility alias.
281 Structural dependence Animal and relmat() user surface Done locally by documentation hardening, superseded after the 0.1.3 preview line by fitted known-matrix slices: animal(1 | id, A/Ainv = ...) and relmat(1 | id, K/Q = ...) fit Gaussian mu intercepts, matching labelled mu1/mu2 terms fit q=2 bivariate location covariance, and matching all-four mu1/mu2/sigma1/sigma2 terms fit constant q=4 location-scale covariance. The article still keeps observation-level known sampling covariance in meta_V(V = V), not latent relatedness.
282 Structural dependence Sparse precision path Done locally by documentation hardening: ASReml efficiency notes and user docs now separate dense covariance inputs (A, K) from sparse precision or inverse-relatedness inputs (Ainv, Q), keep meta_V(V = V) as observation-level sampling covariance, and block large-pedigree or large-matrix speed claims until sparse-precision recovery and benchmark evidence exists.
283 Non-Gaussian audit Family and parameter map Done locally by documentation audit: docs/design/02-family-registry.md now lists each public family route, distributional-parameter links, shape or coscale slots, fitted random-effect allowance, and test evidence state, while correcting stale beta-binomial, Poisson, NB2, bivariate, and meta_V() wording.
284 Counts Count-model hardening Done locally: Poisson, NB2, zero-truncated NB2, zero-inflated Poisson, zero-inflated NB2, and hurdle NB2 tests now assert fixed-effect Wald interval rows for the fitted count dpars (mu, sigma, zi, and hu where relevant), while existing Poisson/NB2 mu random-effect tests and Phase 18 smoke surfaces remain the fitted mixed-count evidence; the count tutorial now states that boundary explicitly.
285 Proportions Beta, binomial, and one-inflation hardening Done locally and later extended: fixed-effect beta and beta-binomial mu/sigma coefficients have Wald interval row tests, plain binomial fits 0/1 and cbind(successes, failures) responses plus ordinary mu random intercepts and independent slopes, fixed-effect zero_one_beta() now fits zoi/coi, and the proportion tutorial keeps richer bounded-response random effects, structured effects, correlated or labelled binomial slopes, beta-binomial zero-inflation, and bounded-response meta_V(V = V) routes planned or blocked.
286 Continuous shape Heavy-tail and skewness design Done locally by design hardening and extended by the fitted skew-normal first slice: docs/design/02-family-registry.md now separates fitted fixed-effect Student-t nu, fitted fixed-effect skew-normal nu, planned skew-t nu/future tau, and design-only latent-effect skew(id) ~ ...; likelihood, tutorial, readiness, NEWS, and formula-grammar text keep shape/skewness random effects out of Phase 18 until family-specific recovery, false-positive, diagnostic, interval, and comparator evidence exists.
287 Ordinal Ordinal readiness Historical fixed-effect readiness slice, superseded in part: ordinary cumulative-logit mu random intercepts and independent slopes are now recovery-grade, with one exact phylogenetic mu intercept local-fit gate. Scale/discrimination formulas, correlated/labelled or other structured ordinal effects, interval/coverage promotion, bivariate ordinal, and mixed-response ordinal models remain planned or unsupported.
288 Bivariate mixed families Mixed-response combinations Done locally by boundary hardening: mixed-response combinations such as Gaussian-count, Gaussian-proportion, count-proportion, ordinal mixed, and other two-response families remain planned, tests now cover mixed-family errors for both c() and list() spellings plus reversed Gaussian-Poisson order, and the family registry, distribution-family tutorial, NEWS, and pre-simulation matrix require a joint likelihood or copula/latent-variable contract, prediction, simulation, extractors, intervals, examples, and comparator checks before any mixed-response route is fitted.
289 Extractors Prediction and plotting contracts Done locally: corpairs() now returns conf.status and interval_source by default, corpairs(conf.int = TRUE) marks profiled rows with interval_source = "profile", plot_corpairs() draws finite bounds only when status and source mark a real interval, and the readiness matrix records how this shared provenance rule relates to predict_parameters(), vcov(), the narrow emmeans() bridge, and plotting helpers.
290 Documentation User-facing boundaries Done locally: README, the model-map article, the package reference topic, the getting-started article, source-map guidance, and pkgdown reference-section descriptions now share a status vocabulary for stable, first slice, opt-in, planned or reserved, and unsupported or blocked surfaces.
291 Pre-simulation gate Evidence ledger Done locally: docs/design/46-pre-simulation-readiness-matrix.md now has a Slice 291 evidence-ledger gate that maps each public stable-core row to implementation evidence, tests or diagnostics, user-facing boundaries, and Phase 18 admission status; docs/design/41-phase-18-simulation-programme.md and docs/design/34-validation-debt-register.md now require new DGP rows to trace back to this gate before they enter admitted simulation grids.
292 Phase 18 start Comprehensive simulation blueprint Done locally as blueprint: docs/design/41-phase-18-simulation-programme.md now has a Slice 292 scenario map covering continuous, proportion, count, ordinal, meta-analysis, bivariate, random-slope, shape, phylogenetic, spatial, animal(), and relmat() lanes; admitted surfaces require one-page ADEMP sheets before new DGP code, while planned or blocked lanes stay in the failure ledger.
293 Phase 18 design sheet Gaussian location-scale ADEMP Done locally: docs/design/47-phase-18-gaussian-location-scale-ademp.md now records aims, DGP conditions, estimands, methods, performance measures, MCSE targets, and Williams-style reporting checks for the admitted Gaussian location-scale lane before larger grids run.
294 Phase 18 design sheet meta_V(V = V) ADEMP Done locally: docs/design/48-phase-18-meta-v-ademp.md now records aims, vector/dense known-V DGP conditions, estimands, methods, performance measures, MCSE targets, and Williams-style reporting checks for the admitted Gaussian meta-analysis lane, while keeping known sampling covariance as input data rather than an estimated interval target.
295 Phase 18 design sheet Count mu random-effect ADEMP Done locally: docs/design/49-phase-18-count-mu-random-effect-ademp.md now records aims, Poisson/NB2 grouped-count DGPs, estimands, methods, performance measures, MCSE targets, and Williams-style reporting checks for the paired ordinary count mu random-effect lane, while keeping zero-inflated, hurdle, zero-truncated, structured, correlated-slope, and labelled covariance count models in the failure ledger.
296 Phase 18 design sheet Proportion fixed-effect ADEMP Done locally: docs/design/50-phase-18-proportion-fixed-effect-ademp.md now records aims, beta/beta-binomial DGPs, denominator generation, boundary handling, estimands, methods, performance measures, MCSE targets, and Williams-style reporting checks for the fixed-effect proportion lane, while keeping exact 0/1 boundary mass, zoi/coi, random effects beyond the beta and beta-binomial ordinary mu intercept/slope slices, structured effects, known sampling covariance, and mixed-response bounded models in the failure ledger.
297 Phase 18 design sheet Ordinal fixed-effect ADEMP Done locally as a fixed-effect artifact lane. Current ordinary cumulative-logit mu intercept/slope recovery and the exact phylogenetic intercept gate are separate later evidence; correlated/labelled or other structured ordinal effects, scale/discrimination formulas, cutpoint-specific predictors, known sampling covariance, bivariate ordinal models, and mixed-response ordinal models remain in the failure ledger.
298 Phase 18 design sheet Bivariate residual rho12 ADEMP Done locally: docs/design/52-phase-18-bivariate-rho12-ademp.md now records aims, bivariate Gaussian residual-correlation DGPs, response-specific mean and scale estimands, response-scale rho12 and covariance grids, boundary diagnostics, performance measures, MCSE targets, and Williams-style reporting checks, while keeping group-level corpairs(), structured correlations, known sampling covariance, random effects in rho12, mixed-response families, and bivariate random slopes in separate design or failure-ledger lanes.
1814 Workflow registry Structured capability/action registry Done locally: docs/design/143-phase-18-structured-workflow-registry.md and inst/sim/registry/phase18_structured_workflow_registry.csv turn the capability audit into taskable rows for random slopes, phylogenetic, spatial, animal, relmat(), q=2/q=4 corpairs(), residual rho12, and family-surface admission. The registry is workflow planning only; blocked rows still need design before code.

Phase 18: Comprehensive Simulation, Power, Accuracy, and Coverage Evidence

  • Status: staged. The reusable simulation infrastructure is partly implemented locally, while broad operating-characteristic grids and public bootstrap intervals remain planned.
  • Tracking issues: #59 is the umbrella simulation programme, #255 preserves replicate-level artifacts for honest coverage and accuracy displays, and #60 is the smaller comparator-package lane to use only after the drmTMB estimand is clear.
  • Build a documented simulation programme that lets project leaders, reviewers, and applied readers understand when drmTMB is accurate enough for the models it claims to fit.
  • Treat simulation as a scientific communication layer, not only a test layer. Each simulation should name the biological or methodological question, the data-generating model, the estimand, the fitted model, and the failure modes being probed.
  • Add reusable simulation helpers that can also support earlier examples: scenario builders, transparent data-generating functions, seed control, compact result summaries, and plot-ready output for fitted parameters, convergence, diagnostics, and interval status.
  • Include power analysis where it answers a reader question: for example, how many groups, species, sites, repeated observations, or effect sizes are needed to detect a change in sigma, rho12, sd(group), phylogenetic SD, spatial SD, or a structured correlation with acceptable uncertainty.
  • Report operating characteristics alongside power: bias, empirical standard error, root-mean-square error, profile or Wald interval coverage, convergence rate, boundary-hit rate, and diagnostic false-positive or false-negative rates.
  • Keep routine CRAN tests small and deterministic. The comprehensive grids should live in optional scripts, scheduled CI, rendered reports, or paper supplements, with compact CRAN smoke tests proving that the simulation helpers still run.
  • Curie’s gate: every simulation helper needs tests for reproducibility, malformed input, and summary shape. Fisher’s gate: every power or coverage statement must name the data-generating scenario and the uncertainty measure. Pat’s gate: every simulation report should include an interpretation that a new applied user can read without reverse-engineering the code.
  • Current execution bridge: Slices 539-668 add bounded private bootstrap and replicate-runner execution for the existing Phase 18 smoke surfaces. The private helpers support serial execution and Unix multicore, cap actual workers at 10 and at the number of jobs, record requested versus actual core counts, and use per-replicate summary factories where profile or bootstrap seeds must travel with a replicate. Slices 679-688 forward those settings through the first grid and count-gallery wrappers, while keeping separate bootstrap backend settings for Student-t shape and bivariate residual rho12 grids to avoid accidental nested parallelism; Slices 689-698 enforce that policy when both layers would use more than one worker. Slices 699-708 give the admitted meta_V(V = V) lane the same repeatable grid-output CSV and RDS artifact path as the other first-wave surfaces. Slices 709-718 give the paired Poisson/NB2 mu random-effect lane the same repeatable artifact path, including direct-SD profile interval and coverage CSVs. PSOCK remains excluded from this package helper until fitted TMB object rebuild semantics are explicit. Slices 719-728 add repeatable simple artifact writers for ordinary Gaussian mu random slopes, independent Gaussian sigma random slopes, and coordinate-spatial Gaussian mu slopes. Slices 729-738 add a grid-artifact manifest helper so report staging can audit file existence and CSV row counts, including empty optional interval tables; Slices 739-748 add bind and status summaries across those manifests. Slices 749-758 add a first-wave artifact-status writer that saves bound manifest and surface-status CSVs before a report consumes the tables. Slices 759-768 add the matching artifact-status report template, including a clear failure path when required artifacts are missing. Slices 769-778 add a table-bundle writer that combines selected first-wave CSV artifacts across grid outputs while preserving source surface and artifact columns. Slices 779-788 add the first first-wave summary-report skeleton over artifact status, aggregate rows, interval diagnostics, interval failures, manifests, and warning/error ledgers. Slices 789-798 add the orchestration helper that writes status outputs, bundled tables, and an optional HTML summary report in one step. Slices 839-868 polish the first-wave summary report with priority columns, row caps, a compact warning/error summary above the raw ledger, and a compact aggregate-bias overview for quick screening. Slices 869-878 add compact interval-coverage summaries for Wald, profile, and bootstrap coverage artifacts when present. Slices 879-888 add run-manifest summaries for status, warnings, errors, skipped rows, and elapsed time. This simulation infrastructure is separate from the later public direct-target confint(method = "bootstrap") route.
  • Slices 1279-1388 add the core-family completion map, fixed-effect proportion, positive-continuous, ordinal, and zero-one beta artifact lanes, plus ordinary mu random-intercept artifact lanes for beta/beta-binomial and lognormal/Gamma/Student-t. Later slices add the fitted skew-normal fixed-effect artifact lane and the Tweedie fixed-effect artifact lane. These lanes add DGP, summariser, smoke, repeatable grid-output, manual Actions-dispatch, and focused-test evidence for already fitted one-response families; they do not open random slopes, structured, mixed-response, skew-normal random-effect, skew-t, or generalized Gamma likelihoods.
  • First three implementation slices after the blueprint: the inst/sim/ skeleton and seed/cell registry are done locally in Slice 210; the Gaussian location-scale DGP and pilot summariser are done locally in Slice 211; the Gaussian meta-analysis meta_V(V = V) DGP with vector and dense matrix V is done locally in Slice 212; a generic resumable replicate runner is done locally in Slice 213; the first end-to-end Gaussian location-scale smoke runner is done locally in Slice 214; the matching vector/dense meta_V(V = V) smoke runner is done locally in Slice 215; the first parameter-level aggregation helper is done locally in Slice 216; MCSE and explicit interval-coverage helpers are done locally in Slice 217; the first Gaussian location-scale summary-smoke run is done locally in Slice 218; the matching vector/dense meta_V(V = V) summary-smoke run is done locally in Slice 219. A reader-facing smoke report template is done locally in Slice 220. A compact result manifest helper is done locally in Slice 222 so resumed runs can be audited without opening every RDS object. A warning/error failure-ledger helper is done locally in Slice 223. Result-directory loading is done locally in Slice 224 so manifests and ledgers can be rebuilt from saved RDS output. Summary-smoke helpers return manifests and failure ledgers locally in Slice
    1. Synthetic interval-coverage smoke plumbing is done locally in Slice 226. The smoke report template accepts aggregate, manifest, and warning/error ledger CSVs locally in Slice 227. A skip-aware report-render test with tiny CSV fixtures is done locally in Slice 228. The interval-producer contract is recorded locally in Slice 229. A generic Wald interval-table helper is done locally in Slice 230 for summaries that already contain estimates and standard errors. A Fisher-z back-transformed correlation Wald helper is done locally in Slice 231. Gaussian location-scale pilot summaries carry fixed-effect standard errors locally in Slice 232. Next, connect those standard errors to Gaussian location-scale Wald coverage summaries. Gaussian location-scale summary smoke returns formula-coefficient Wald intervals and coverage locally in Slice 233. meta_V(V = V) pilot summaries carry standard errors for estimated mu coefficients and fitted residual sigma locally in Slice 234. meta_V(V = V) summary smoke returns Wald intervals and coverage locally in Slice 235. The random-slope promise audit is done locally in Slice 236, reconciling the ordinary Gaussian mu q > 2 fitted path with the remaining Gaussian sigma, structured, bivariate, and non-Gaussian random-slope gates before broader Phase 18 grids begin. A Gaussian mu q=3 random-slope smoke surface is done locally in Slice 237, giving the fitted ordinary multi-slope block a seeded DGP, runner, summary, aggregate, manifest, and failure-ledger path before larger grids are allowed. A Gaussian sigma independent one-slope smoke surface is done locally in Slice 238, giving the fitted residual-scale (0 + w | id) path the same Phase 18 bookkeeping while leaving correlated univariate scale-slope covariance outside Wave A at that time. Slice 239 records the structured-slope parity gate as it stood then: coordinate spatial had one fitted Gaussian mu slope, while phylogenetic, animal, and relmat() one-slope paths were not yet fitted. Later slices superseded that boundary; see the Structured Slope Parity Gate below for the current fitted one-slope Gaussian mu status. Slice 240 records the cross-distributional-parameter correlation gate. Slice 241 adds a coordinate spatial Gaussian mu one-slope smoke surface. Slice 242 adds a Poisson mu random-effect smoke surface; Slice 243 adds fixed-effect Wald interval coverage for that smoke output; Slice 244 adds direct profile-likelihood SD interval coverage for the Poisson random-effect SD targets. Slice 245 fits ordinary non-zero-inflated NB2 mu random intercepts and independent numeric slopes with extractor and direct profile-target coverage, while keeping NB2 sigma, zero-inflated NB2 random effects, and correlated or labelled NB2 slope blocks outside Wave A. Slice 246 adds the matching NB2 mu random-effect smoke surface with seeded DGP, live fit, parameter summaries, aggregate output, manifest, failure ledger, and tests. Slice 247 attaches fixed-effect Wald interval rows and coverage summaries to that NB2 smoke output for mu and sigma coefficients, while leaving random-effect SD profile coverage as the next evidence step. Slice 248 attaches direct profile-likelihood interval rows and coverage summaries for the two fitted NB2 sd:mu targets in that smoke output. Slice 249 adds a focused weak-SD boundary diagnostic for fitted NB2 mu random intercepts and keeps larger NB2 operating-characteristic grids as future Phase 18 work. Slice 250 records a pre-simulation readiness matrix that separates surfaces ready for small grids from planned or blocked surfaces before broad Phase 18 reports are written. Slice 251 starts the first paired count pilot, combining ready Poisson and NB2 mu random-effect surfaces into one optional output with aggregate, manifest, failure-ledger, Wald-coverage, and profile-coverage tables. Slice 252 makes the Poisson and NB2 condition helpers true grid builders, allowing optional count pilots to vary group count, repeats, true random-effect SDs, fixed mean effects, and NB2 overdispersion settings. Slice 253 adds the first simulation plot-data contract for the paired count pilot, preparing aggregate, coverage, manifest, and failure tables for Florence’s later figure gallery. Slice 254 adds the first Florence-facing count pilot gallery template for bias, RMSE, interval coverage, manifests, and warning/error ledgers. Slice 255 adds helper plumbing that writes the plot-ready CSV inputs and renders a checked local HTML gallery artifact from a paired count pilot object. Slice 256 adds the end-to-end smoke runner that runs a tiny paired count pilot, writes gallery inputs, renders the gallery, and returns both the pilot and artifact paths. Slice 257 applies the first Florence visual polish to that gallery, replacing default diagnostic panels with horizontal estimand labels, shared palette/theme helpers, plot captions, and MCSE-aware coverage ranges when available. Slice 258 built a narrow pkgdown-facing count simulation diagnostics draft, but that page was removed from the public site for now because it was not the broad figure gallery the user intended. Count diagnostics should return later as a Simulation & Comparison article after continuous, proportion, count, meta-analysis, and other surfaces are ready to be compared in one framework.

Structured Slope Parity Gate

  • docs/design/44-structured-slope-parity-gate.md records the current structured-effect slope boundary before Phase 18. Spatial, phylogenetic, animal, and relmat() one-slope Gaussian mu models can enter focused Wave A grids; later q-series slices add sigma-only and matched mu+sigma native point-fit/extractor cells for the same one-slope provider set. Multiple structured slopes, broader labelled structured slope covariance, broad bridge/inference beyond deterministic same-target fixtures, slope correlations, and non-Gaussian structured effects outside the exact row-specific gates remain in the failure ledger.
  • The intended public order remains biological: animal() for pedigree or additive relatedness, phylo() for shared ancestry, spatial() for coordinate or mesh structure, combined structural layers when required, and relmat() as the lower-level known-relatedness escape hatch.

ASReml Efficiency Lessons For Future Animal Models

  • docs/design/42-asreml-efficiency-lessons.md records a design-only inspection of the local ASReml-R archive. The main lesson is that large animal-model performance depends on sparse inverse relationship structures, row-name matching metadata, log-determinant bookkeeping, and clear covariance-versus-precision contracts.
  • For drmTMB, animal() should remain biological sugar, while relmat() should become the lower-level known-matrix surface with explicit K covariance and Q precision paths. Do not claim ASReml-like large-pedigree speed until the sparse-precision route exists and passes recovery and scaling tests.

Phase 19: Comparator Demonstrations With Other Packages

  • Status: planned.
  • Compare drmTMB with related packages on the same simulated or transparent example datasets, but do not make this a repeated simulation phase. Phase 19 should be a model-overlap and communication layer; Phase 18 is the operating characteristics layer.
  • For each comparator example, fit one or a few matched datasets with the closest defensible model in drmTMB and relevant overlap packages such as glmmTMB, lme4, brms, MCMCglmm, metafor, gamlss, sdmTMB, or package-specific TMB examples.
  • Report model syntax, model class, fitted parameter estimates on comparable scales, standard errors or intervals when available, optimizer or sampler diagnostics, and elapsed fitting time.
  • Be explicit about non-overlap. If a comparator package cannot fit predictor-dependent residual rho12, a location-scale phylogenetic block, a known dense meta-analytic covariance, or a structured random-effect scale model, say so rather than forcing a misleading comparison.
  • Use the same simulation helpers and visualization data contracts from Phases 17 and 18, so comparator articles can reuse datasets, plots, timing summaries, and parameter-scale conversions.
  • Jason’s gate: every comparator must cite the comparator package capability or documentation it relies on. Grace’s gate: optional heavy packages and MCMC fits must stay outside routine CRAN checks. Rose’s gate: comparator articles must not turn one-off examples into broad speed or accuracy claims.

Phase 20: CRAN Release and Paper Preparation

  • Status: planned. The 0.6.0 capability truth-freeze (this arc) reconciles the public claim surfaces and produces the durable release-scope manifest at docs/dev-log/release-audits/2026-07-20-0.6.0-release-scope-manifest.md, which enumerates what 0.6.0 promises, what is implemented-but-not-certified, and what is deferred with its owning issue. Issue #61 tracks the Phase 20 gate list populated from that manifest.
  • Harden the package for CRAN with platform checks, dependency review, examples, vignettes, pkgdown, NEWS, reverse-dependency awareness where relevant, and a final implemented-versus-planned audit.
  • Build the teaching sequence around applied ecological, evolutionary, and environmental examples, while keeping the package general like glmmTMB.
  • Use Phase 18 simulation reports and Phase 19 comparator demonstrations as the evidence base for release notes, paper figures, supplementary material, and reviewer responses.
  • Draft methods papers around the package-defining pieces: fast location-scale regression, modelled residual rho12, structured phylogenetic/spatial distributional regression, and documented simulation evidence for accuracy, coverage, and power.
  • Grace’s gate: release preparation should not begin until the site, examples, check logs, known limitations, and roadmap agree about supported syntax and fitted model classes. Rose’s gate: paper text must not describe roadmap features as implemented unless code, tests, docs, examples, and validation evidence exist.