3.26 2026-04-30
- changed the blank-container tarball installation gate to use
`cpanm --notest` after the normal source-tree test and coverage gates
have already passed, so packaged dependency resolution and installed
runtime behavior stay verified without rerunning the full tarball test
suite
- updated the blank-environment integration runner, release docs, and
integration guardrails so the post-build `t/44-smart-router-two-stage.t`
check and the broader tarball integration flow both follow the same
`cpanm --notest` policy
3.25 2026-04-29
- fixed the installed Dancer web stack so the public `/app`, `/ajax`,
`/js`, `/css`, and `/others` routes now reuse the backend smart route
dispatcher instead of bypassing skill-local namespace resolution
- added PSGI coverage that proves top-level and nested skill-local app,
ajax, js, css, and others routes all work through the real installed
web route layer
- added the post-build `t/44-smart-router-two-stage.t` guard and wired the
blank-environment host integration launcher to run it immediately after
`dzil build` so extracted-dashboard routing regressions are caught at the
tarball stage instead of only in source-tree tests
- fixed helper-login blank-editor rendering so a helper user who lands on
the root editor path still sees helper chrome, including the logout link
and helper username, during installed integration runs
3.24 2026-04-29
- added skill-local web namespaces for `dashboards/ajax/*` and
`dashboards/public/{js,css,others}/*` so installed skills can serve
saved Ajax handlers and public assets without copying them into the
shared dashboard roots
- added longest-prefix route resolution so `/app`, `/ajax`, `/js`,
`/css`, and `/others` can distinguish skill prefixes from normal nested
global paths and can also resolve nested child skills under
`skills/<repo>/...`
- kept nested global saved-bookmark assets and saved Ajax files working
even when their leading path segments match an installed skill name
3.23 2026-04-29
- fixed the README source-of-truth process so the checked-in README.md is
regenerated from the canonical Developer::Dashboard POD instead of being
hand-edited independently
- added a checkout sync helper and release-metadata guard so README.md
must exactly match the generated Markdown output from the canonical POD
- fixed the JS fast-check wrapper so npm update-notifier chatter does not
break the stderr-clean fuzz gate on newer npm releases
3.22 2026-04-29
- regenerated README.md as real Markdown instead of accidental POD content
- added a release-metadata guard so README.md cannot silently regress back
into POD format
3.21 2026-04-29
- removed the final stale API Dashboard POD example from the public
dashboard entrypoint so the extracted API and SQL dashboards are now
fully pruned from core code, docs, POD, tests, and shipped assets
3.20 2026-04-29
- fixed bare dashboard skills install so a first successful install from
the home root ddfile is reported as installed even when the skill ships
no .env VERSION metadata, instead of showing unknown with blank version
markers
- fixed named collector stop summaries so dashboard stop collector NAME
still reports the stopped collector row when the managed loop is alive
but its process title has not become observable yet
3.19 2026-04-29
- extracted optional browser workspaces out of the core distribution,
leaving the core runtime seeded-page set and manuals focused on the
features that still ship in Developer Dashboard itself
- removed core seeded-page handling, runtime bootstrap wiring, release
metadata assertions, and shipped browser tests for the extracted
optional browser workspaces
- moved the extracted page assets, dedicated tests, and supporting
notes out of the core repository tree so the default core tarball no
longer carries that optional feature set
3.19 2026-04-29
- fixed dashboard stop and restart so they follow the saved managed
listener port back to the real serving pid when the live web process
renames itself into the underlying starman master listener shape
- fixed minimal Docker lifecycle control so container stop/restart runs no
longer lose ownership of the active listener after startup