Developer-Dashboard
view release on metacpan or search on metacpan
3.78 2026-05-16
- fixed the tag-driven GitHub release workflow so it installs
`Devel::Cover` before running the numeric coverage gate; this avoids
the exit-127 `cover` failure that previously blocked signed GitHub
release publication and kept Scorecard from seeing any releases
3.77 2026-05-15
- aligned every shipped Perl module under `lib/` with the distribution
version after the blank-host installer fix so the source tree, release
metadata, and CI coverage gates all read one consistent `3.77` version
instead of a mixed `3.75`/`3.76` module set
3.76 2026-05-15
- fixed blank Ubuntu `curl ... | sh` bootstrap installs so `install.sh`
seeds `File::ShareDir::Install` into `~/perl5` before `cpanm --notest .`
runs against the cloned checkout, avoiding the configure-time
`Can't locate File/ShareDir/Install.pm` failure on fresh hosts
- aligned `install.ps1` with the same configure-prerequisite bootstrap so
the checkout install path does not drift between Unix-like and Windows
operators
3.75 2026-05-15
- fixed Windows background web helper lookup so source-tree and CI test
runs no longer die when `RuntimeManager` asks `File::ShareDir` for an
installed dist share that does not exist yet; helper fallback now reuses
the same guarded helper-asset resolver used elsewhere in the runtime
- replaced the built-in `/js/jquery.js` shim with a bundled local copy of
jQuery 4.0.0, while keeping `/js/jquery-4.0.0.min.js` as a compatibility
alias for the same shipped asset
- taught the browser bookmark editor to expand `:---` into the full
separator line and insert the next sensible unique directive so common
`TITLE -> HTML -> CODE<N>` authoring flows are smoother
- added release and route coverage for the bundled jQuery asset and the
missing-dist-share helper fallback path
3.74 2026-05-15
- added direct `python` dispatch for executable `cli/*.py` commands and
hook files so Python-backed skills now run through the same logical
command and hook resolution path as Perl, Node, Go, Java, and shell
helpers
- added `requirements.txt` to the skill dependency chain after
`package.json`, installing Python dependencies through
`python -m pip install --user --requirement requirements.txt`
- regenerated README.md from the canonical POD after the runtime and
dependency-chain changes so release metadata stays in sync
3.73 2026-05-15
- added direct `node` dispatch for executable `cli/*.js` commands and
hook files, so JavaScript-backed skill commands now run through Node in
the same extension-resolution path already used for Perl, Go, Java, and
shell helpers
- fixed the platform runnable-file resolver so logical command names can
discover matching `.js` files on Unix and Windows without breaking the
existing `package.json` dependency-install chain used by
`dashboard skills install`
- fixed the prompt tmux-status unit coverage to clear `WORKSPACE_REF`
explicitly so ordinary tmux sessions still test the non-dashboard path
3.72 2026-05-14
- fixed collector watchdog supervision so a managed loop that stays alive
but stops making progress is treated as stalled, restarted
automatically, and reported explicitly instead of sitting silent until
an operator notices
- renamed the primary tmux workflow from `dashboard ticket` to
`dashboard workspace`, while keeping the older `dashboard ticket`
spelling plus `TICKET_REF` session state as compatibility fallbacks
- added layered plain-directory `.env` refresh for workspace sessions, so
the highest ancestor `.env` acts as the base, parent `.env` files merge
next, the current directory `.env` overrides last, and resumed tmux
workspace sessions are refreshed in place with dropped keys unset
3.71 2026-05-14
- fixed live collector status writes so managed indicator ordering now
keeps the collector array order from `config/config.json` even after one
collector refreshes its own state, instead of dropping back to
alphabetical order in `/system/status`, page-header indicators, and
`dashboard ps1`
- fixed runtime `config/routes.json` aliases so normal saved bookmarks
such as `/app/learn.ai` can be reached through shorter custom paths like
`/java`, and widened that runtime alias loading across `/app`, `/ajax`,
`/js`, `/css`, and `/others` instead of limiting custom paths to
installed skill route metadata only
3.70 2026-05-13
- moved skill route metadata to `config/routes.json` and changed the
schema to the flat custom-path form, where each public path maps to one
local smart route string or an object with `to` and optional `type`
- expanded custom skill route support beyond Ajax so installed skills can
publish fallback custom paths for `/app`, `/ajax`, `/js`, `/css`, and
`/others` without breaking the smart longest-prefix parent routing
- kept saved skill-page Ajax URL generation on the canonical custom path
from `config/routes.json`, with Ajax custom routes defaulting to `json`
unless an explicit route-level `type` is supplied
- fixed browser `/system/status`, page-header status, and `dashboard ps1`
indicator ordering so managed collector indicators now follow the
collector array order from config instead of drifting alphabetically
- fixed `dashboard serve logs -f` so a line appended immediately after
the initial tail output is no longer skipped by a seek-to-end race
before follow mode starts streaming new content
3.69 2026-05-13
- added skill-local `dashboards/routes.json` metadata so installed skill
Ajax handlers can publish canonical custom paths, optional fallback
aliases, and default response types such as `json`, `html`, or raw
mime strings without breaking the smart `/ajax/<repo>/...` resolver
- fixed saved skill-page Ajax URL generation so `Ajax(file => ...)`
emits the declared canonical custom route when route metadata exists,
while the longest-prefix smart `/ajax/...` route remains the primary
resolver and custom aliases are fallback-only before a normal `404`
- fixed browser `/system/status`, page-header status, and `dashboard ps1`
indicator ordering so managed collector indicators now follow the
collector array order from config instead of drifting alphabetically
3.68 2026-05-13
- added collector overlap control with explicit `mode` and `multiple`
config fields, defaulting collectors to singleton scheduling and
allowing bounded parallel runs only when a collector opts into
`mode = multiple`
- fixed collector loop scheduling so long-running jobs no longer block
the next interval tick for opt-in multiple-mode collectors, while
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
( run in 1.149 second using v1.01-cache-2.11-cpan-14f38c9f855 )