Developer-Dashboard
view release on metacpan or search on metacpan
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
singleton collectors still suppress overlap by design
- made collector status updates lock-safe so active-run counts and the
`running` flag stay correct when overlapping collector workers finish
concurrently
3.67 2026-05-13
- fixed managed runtime child cleanup so detached web startup helpers,
collector stop paths, the collector watchdog supervisor, SSL frontend
connection workers, and background page actions no longer leave zombie
processes behind on hosts such as macOS and WSL
- fixed the SSL frontend accept loop so child-reaping `SIGCHLD` traffic
no longer makes the public listener shut its backend down early, while
TERM/INT/HUP now request a clean frontend shutdown explicitly instead
of depending on interrupted `accept()` side effects
- tightened regression coverage so collector stop and watchdog shutdown
tests fail if the runtime leaves direct child processes unreaped, and
action/background SSL runtime tests now enforce the no-zombie contract
3.66 2026-05-08
- added a collector watchdog supervisor that restarts unexpectedly-dead
managed collector loops after startup instead of leaving them silently
stopped until an operator notices
- persisted watchdog restart counters, timestamps, error text, and
`attention_required` collector status metadata so repeated crash loops
are explicit in `dashboard collector status <name>` and collector logs
- stopped the watchdog from thrashing forever by raising an explicit
attention-required state after too many crashes inside the watchdog
window, forcing a visible operator follow-up instead of silent churn
3.64 2026-05-08
- fixed macOS Terminal.app shell bootstrap to source /etc/bashrc_Apple_Terminal
when update_terminal_cwd is missing, preventing "command not found"
errors on fresh macOS bash sessions
3.63 2026-05-08
- added dockerfile manifest support to skill installation, allowing skills
to declare Docker images that get built automatically during install
- fixed Progress.pm to support unlimited streaming output for long-running
operations like Docker builds, with optional max_detail_lines cap
- added has_dockerfile metadata to skill list and usage output
- fixed macOS Terminal.app shell bootstrap to source /etc/bashrc_Apple_Terminal
when update_terminal_cwd is missing, preventing "command not found"
errors on fresh macOS bash sessions
3.62 2026-05-07
- remove matching root ddfile skill source entries when uninstalling a skill
3.61 2026-05-06
- switched the project license from Perl_5 to MIT across the repository
metadata, shipped LICENSE text, README, canonical POD, and Scorecard
guardrails so the published license state is explicit and consistent
- removed the old Artistic sidecar license file and Perl dual-license
wording so the repo no longer advertises conflicting licensing terms
3.60 2026-05-06
- documented the open-source license disclaimer more explicitly in the
canonical POD and synced README, making it clear that the software is
provided "as is", no warranty is given, and normal free-software use is
covered by the project's baseline liability disclaimer
3.59 2026-05-06
- fixed shared skill-nav discovery so nested installed skill trees such
as `skills/ho/skills/coverage/dashboards/nav/index.tt` now render on
the nested skill route itself and also join the shared nav strip above
normal saved pages such as `/app/index`
- taught the skill dispatcher to recurse through nested installed
`skills/<repo>` trees when collecting skill nav pages for the web UI,
while preserving deterministic order and disabled-skill filtering
- fixed layered skill nav route-id discovery so `dashboards/nav/*`
recursively includes nested fragment paths instead of only direct files
in the first `nav/` directory
3.58 2026-05-06
- stamped dashboard-managed helper bodies with an explicit
`developer-dashboard-managed-helper-version` marker so installed hosts
can prove which helper build they actually have when staged helper
behavior drifts from the active tarball
- fixed Debian-family bash bootstrap installs and repairs so
dashboard-managed shell lines are kept above the standard
non-interactive `return` guards in `~/.bashrc`, including the Ubuntu
single-line `[ -z "$PS1" ] && return` form, which keeps
`dashboard ticket` tmux status commands working on installed hosts such
as `hp.local`
- taught `dashboard doctor` to audit and repair that misplaced
`~/.bashrc` bootstrap shape with `dashboard doctor --fix`
- fixed Windows `.cmd` and `.bat` command dispatch on Linux, WSL, and
packaged-install hosts so an extensionless local `cmd` helper found in
`PATH` is normalized back to `cmd.exe` instead of being treated as a
custom command processor
- taught `dashboard doctor` to audit staged helper drift under
`~/.developer-dashboard/cli/dd/`, report stale or missing
dashboard-managed helpers such as `_dashboard-core`, and restage them
with `dashboard doctor --fix` when the currently shipped helper assets
can repair the runtime
- added direct regression coverage for extensionless `cmd` shims, stale
helper staging, and shell bootstrap drift through both source-tree and
packaged-install paths
- fixed packaged helper asset discovery so tarball, PAUSE, and `cpanm`
install-test trees keep resolving `share/private-cli` from a stable
absolute module source path even after later `chdir` calls in
long-running test processes
- hardened the post-build smart-router two-stage Docker guard so one
transient upstream `cpanm` fetch or unpack failure is retried once
before the repository packaging gate is treated as broken
- fixed the installer docs so they match the real checkout/master
bootstrap behavior and the current shell-bootstrap repair workflow
3.45 2026-05-05
- fixed Unix-like `install.sh` so blank streamed installs no longer fall
back to the stale `Developer::Dashboard` CPAN target; when no explicit
`DD_INSTALL_CPAN_TARGET` override is set they now install the current
checkout directly or clone GitHub `master` into a temporary checkout
for `curl ... | sh` style bootstraps
- added `tmux` to the shipped `aptfile`, `apkfile`, `dnfile`, and
`brewfile` bootstrap package sets because `dashboard ticket` is a
first-party tmux workflow
- fixed blank Ubuntu bootstrap coverage so Debian-family installer docs
and tests now prove the extra XS build header requirement for the live
`cpanm` dependency chain instead of silently assuming the base image
already ships it
3.43 2026-05-05
- fixed managed helper staging so upgraded home runtimes remove
dashboard-owned older flat helpers from `~/.developer-dashboard/cli/`
and keep the active built-in helper surface converged on
`~/.developer-dashboard/cli/dd/`
- added direct staged-helper regression coverage so the managed
`dashboard shell bash` helper itself must emit the ticket tmux status
bootstrap after staging, not just the repo checkout command path
- fixed the blank-environment integration image so host-built tarball
installs now include the native CPAN build packages required by
XML::Parser, Net::SSLeay, and related transitive prerequisites
- switched the blank-environment integration image to a real Debian
Chromium runtime so browser smoke checks no longer die on the Ubuntu
snap-wrapper launcher stub
- fixed the host-side blank-environment launcher so it rebuilds the
integration image from the current Dockerfile before running the
installed-runtime smoke, preventing stale cached images from hiding
browser-runtime fixes
3.42 2026-05-05
- fixed blank-mac `curl ... | sh` bootstrap so `install.sh` now
bootstraps Homebrew automatically before reading the repo `brewfile`
and continuing the normal macOS package flow
- fixed Linux runtime lifecycle isolation so `dashboard restart` and
`dashboard stop` no longer adopt or kill Developer Dashboard web and
collector pids that belong to a different pid namespace such as a
sibling Docker container
- added Docker-style rolling detail lines to `dashboard skills install`
so long-running dependency manifests keep the epic task board visible
while streaming the newest manifest output under the active step
- fixed tmux ticket-session prompt/status behavior so existing and new
`dashboard ticket` tmux sessions suppress inline prompt indicators,
move the full indicator strip into the first row of a two-line bottom
tmux status block, keep tmux's normal indexed session/window row
beneath it, preserve TT-backed percentage indicators and live
collector values, refresh automatically through tmux status updates,
and leave ordinary tmux sessions on the normal inline prompt path
3.40 2026-05-05
- moved prompt indicators out of inline shell prompts and into tmux
`status-right` whenever the generated shell bootstrap runs inside tmux,
while keeping the existing prompt indicators outside tmux
- added a dedicated `dashboard ps1 --mode tmux-status` formatter and a
`--no-indicators` prompt path so bash, zsh, POSIX sh, and PowerShell
all share the same tmux-aware indicator behavior
3.37 2026-05-02
- added an explicit InternalCLI coverage guard for installed layouts where
File::ShareDir already returns the private-cli root, keeping the numeric
Devel::Cover gate at 100 percent after the Windows bootstrap fixes
- added a Windows smoke guard that re-enters a fresh profile-loaded
PowerShell session after install.ps1 so the streamed bootstrap must
resolve `dashboard`, print `dashboard version`, and run
`dashboard logs`
3.36 2026-05-02
- fixed the generated PowerShell profile bootstrap so fresh Windows
sessions no longer try to pass the multi-line `dashboard shell ps`
output array straight into `Invoke-Expression`
- fixed the streamed Windows installer so `irm .../install.ps1 | iex`
now writes a self-contained profile block that can load `dashboard`,
`local::lib`, and the PowerShell prompt bootstrap in future sessions
3.35 2026-05-02
- fixed the installed private helper asset lookup on Windows so
`dashboard init` no longer stops at an empty
`MSWin32-x64-multi-thread/auto/Developer/Dashboard/private-cli`
directory when the real shipped helper assets live under
`auto/share/dist/Developer-Dashboard/private-cli`
- fixed the streamed Windows checkout bootstrap so a blank host can now
finish `dashboard init` after `irm .../install.ps1 | iex`, stage the
home helper runtime, and continue into the generated PowerShell shell
bootstrap cleanly
3.34 2026-05-02
- fixed the installed private helper asset lookup so Windows local::lib
installs no longer look for `_dashboard-core` under the wrong arch-auto
path when the shared dist asset root actually lives under
`auto/share/dist/Developer-Dashboard/private-cli`
- fixed the streamed PowerShell bootstrap so `install.ps1` now runs
`dashboard init` before activating `dashboard shell ps` in the current
shell, ensuring the staged home helper runtime exists before the
bootstrap asks for PowerShell shell wiring
- fixed the generated PowerShell profile guard so future sessions only ask
`dashboard shell ps` for bootstrap output after the staged home helper
runtime exists under `~/.developer-dashboard/cli/dd/_dashboard-core`
3.33 2026-05-01
- fixed the packaged install metadata so blank Windows hosts no longer
pull test-only dependencies such as `Plack::Test` and `Test::Pod`
( run in 0.681 second using v1.01-cache-2.11-cpan-6aa56a78535 )