v0.4.0
EpiAwarePackageTools v0.4.0
This is a breaking release.
Release notes (draft)
Breaking
- The formatter is Runic, not JuliaFormatter.
.JuliaFormatter.tomlis a retired path, so a sync deletes it. The isolatedtest/formatterenvironment pins Runic exactly, kept in step with the.pre-commit-config.yamlhook revision. docs/pages.jlis now a managed base with extension points, regenerated on every sync. A package adds nav throughPACKAGE_TUTORIALS,PACKAGE_SECTIONS,DEVELOPMENT_EXTEND_PAGEandGETTING_STARTED_FAQin the package-owneddocs/docs_config.jl. A bespokepages.jlwithout the managed header is preserved and warned about rather than clobbered.- The AD-backends tutorial is retired. Its content is folded into the AD-comparison benchmark page, which now carries the
ad-backendsanchor so existing@reflinks across the org keep resolving. A sync deletes the page and warns while a package still registers it.
Added
ReverseDiff (compiled)joins the managed AD backends, so the matrix, codecov flags, README badge row and scenario seeds all cover seven backends.run_selected, a filtered AD scenario/backend runner, so one suspect combination can be checked without the full suite.- Per-tutorial documentation environments. A heavy tutorial can build against its own environment via
TUTORIAL_ENVIRONMENTS, for a dependency that cannot co-resolve with the rest of the docs environment. Dependabot watches each one. - Agent files are
AGENTS.mdplus aCLAUDE.mdpointer, both linking the standards docs rather than copying them, so there is one copy that cannot drift. The managed block is a single marker line.
Fixed
- An AD backend with no test item no longer reports green. Adding a backend to the kit reached an adopter's CI, badges and coverage flags but not their write-once test seeds, so the new job ran zero tests, passed, and uploaded an empty coverage flag behind a public badge.
updatenow names each unbacked tag, and a tag filter matching nothing is an error. - Enzyme codecov flags name the Enzyme extension, not the whole
ext/directory. The directory claim charged those jobs for every other extension: measured as -17% on a package with seven. - The generated Extensions nav entry gets a trailing comma, so a package with
[extensions]no longer fails its own formatting check and then reverts on the next sync, looping forever. updatereports package-owned docs describing a retired standard. A sync converges the managed files and said nothing about the package's own prose, so a contributing guide could keep naming a tool the standard had moved off.- README prose checks no longer misread markup and abbreviations, and the extension-by-dispatch deviation inventory is published in the standards.
- Assorted infrastructure repairs: the release-nudge seed ref, docs-environment dependency warnings, world-age-guarded
docs_config.jlreads, and the ExplicitImports floor.
Internal
- Every
.jltemplate is asserted to reach the Runic sweep, so a template gated on an unswept flag combination cannot go unchecked silently, and a failure names the template rather than a temp path.
Merged pull requests:
- feat(scaffold): ship the org coding standards as a managed CLAUDE.md block (#370) (@seabbs-bot)
- ci(deps): bump the github-actions group with 10 updates (#383) (@dependabot[bot])
- ci: migrate the managed standard from JuliaFormatter to Runic (#387) (@seabbs-bot)
- feat: add run_selected, a filtered AD scenario/backend runner (#389) (@seabbs-bot)
- feat: add ReverseDiff (compiled) to the managed AD backends (#390) (@seabbs-bot)
- ci(deps): bump the github-actions group with 9 updates (#392) (@dependabot[bot])
- feat: add run_selected, a filtered AD scenario/backend runner (#394) (@seabbs-bot)
- feat: docs/pages.jl becomes a managed base with extension points (#397) (@seabbs-bot)
- fix: raise the ExplicitImports floor to 1.6 (#401) (@seabbs-bot)
- fix: strip trailing whitespace from test/scaffold.jl (#402) (@seabbs-bot)
- docs(standards): publish dispatch deviation inventory; fix(taskfile): thread docs builds (#403) (@seabbs-bot)
- fix: stop the README prose checks misreading markup and abbreviations (#404) (@seabbs-bot)
- fix: repin the release-nudge seed ref to a commit that resolves (#405) (@seabbs-bot)
- docs(agents): link the ecosystem design docs from AGENTS.md (#406) (@seabbs-bot)
- style: repair two comment openings in the README-check tests (#407) (@seabbs-bot)
- feat(docs): let a tutorial build against its own environment (#408) (@seabbs-bot)
- fix: assert the design link in the AGENTS.md test (#409) (@seabbs-bot)
- feat: warn when the docs env is missing a dep the AD pages load (#411) (@seabbs-bot)
- fix: emit a trailing comma after the last Extensions nav entry (#417) (@seabbs-bot)
- fix: trim the managed agent-file boilerplate to one line (#418) (@seabbs-bot)
- fix: warn and fail when a managed AD backend has no test item (#419) (@seabbs-bot)
- feat: report package-owned docs that describe a retired standard (#421) (@seabbs-bot)
- feat: depend on the registered kit and drop the Julia 1.11 floor (#422) (@seabbs-bot)
- feat: retire the AD-backends tutorial into the AD-comparison page (#423) (@seabbs-bot)
- test: assert every .jl template reaches the Runic sweep (#424) (@seabbs-bot)
- fix: name the Enzyme extension in its codecov flags, not all of ext/ (#426) (@seabbs-bot)
- feat(scaffold): freshen reusable-workflow refs forwards on update (#425) (#427) (@seabbs-bot)
- feat(docs): opt-in parallel execution of heavy tutorials (#432) (@seabbs-bot)
- feat: support Julia 1.10 in the kit and test the fleet on lts (#435) (@seabbs-bot)
Closed issues:
- build_docs README-derived index conflicts with a hand-authored docs tree (docs-migration smoothing) (#170)
- AlgebraOfGraphics (docs ad-backends tutorial) conflicts with FlexiChains as a hard dep (#283)
- Decide and document one NEWS.md convention across the org (#286)
- Decouple
orginto package identity, reusable-workflow host, and docs domain (support non-EpiAware-org adopters) (#287) - Proposal: standardise a package overview-page design (Why bullets, popping example, Related packages section) (#292)
- Document the extension-by-dispatch litmus test and keep one shared tooling implementation (#311)
- Review ecosystem best practices and following SciMl statements (#318)
- Release (#320)
- AD-backends tutorial imports Chairmarks but the kit cannot add it to the package-owned docs/Project.toml (#324)
- Ecosystem news style (#329)
- Package docs and comments very verbose (#331)
- Re-pin release-nudge.yml seed ref once EpiAware/.github#38 merges (#333)
- Record scope ruling: 11 packages; JuliaForIDM and ComposableProbabilisticIDModels are out of scope (#340)
- Placeholder-carrying templates are not blue-clean once substituted, so managed files churn on every sync (#344)
- Four repos need a Related packages README section for #292's new requirement (#345)
- _sentences splits at unlisted abbreviations, so test_readme_bullets false-positives (#347)
- test_readme_prose reads indented code blocks and reference link labels as prose (#348)
- New features should causing failing tests in other packages to get them to update (#349)
- update() silently reverts a package's TagBot lookback override (#356)
- TagBot has never run automatically: the actor gate never fires (#357)
- Taskfile coverage task never instruments: Pkg.test lacks coverage=true (#360)
- Managed test/jet/Project.toml still git-pins the kit, now that the kit is registered (#361)
- templates: release-nudge.yaml pins a .github SHA that predates the reusable workflow (#362)
- Formatter check and JET analysis skip ext/ (#363)
- Register.yml can never post the JuliaRegistrator comment: --field treats a leading @ as a filename (#365)
- Ship org-wide coding standards for agents as a managed CLAUDE.md block (#369)
- Let a tutorial page build against its own environment, so version-conflicted extensions get a normal Documenter page (#371)
- _RELEASE_NUDGE_SEED_REF pins release-nudge.yaml to a ref where release-nudge.yml does not exist (#377)
- Docs linkcheck: transient 429 on the org CODE_OF_CONDUCT link aborts builds (#378)
- Scaffolded docs/docs-fast Taskfile tasks don't set a thread count, so local docs builds sample MCMC chains serially (#380)
- AD harness: add selective (per-name) scenario/backend running as a first-class feature (#384)
- Add ReverseDiff (compiled) to _AD_BACKENDS so packages can adopt it without hand-editing managed files (#386)
- scaffold: gitignored per-env Manifest.toml goes stale after a compat/[sources] change (#393)
- Install the JuliaTagBot GitHub App on the EpiAware org (#395)
- Install the JuliaTagBot GitHub App on the EpiAware org (#398)
- Is the Julia 1.11 floor still needed, or is it an artefact of the kit being unregistered? (#410)
- template-sync.yaml template describes a self-drift check adopters do not have (#412)
- Generated pages.jl Extensions group is not Runic-clean (missing trailing comma) (#413)
- Adding a backend to _AD_BACKENDS silently ships an empty CI job to adopters (#415)
- codecov.yml Enzyme flags claim all of ext/, deflating their coverage (#416)
- Managed .jl templates are not Runic-checked, so a mis-formatted template reds every adopter (#420)
- update never advances a reusable-workflow pin, so a lagging adopter stays behind (#425)
- Optionally run heavy Literate tutorials in parallel subprocesses (#428)
- test_aqua stale_deps errors on Windows: Aqua is not installed in the isolated env (#433)