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`
      during `cpanm --notest Developer::Dashboard`, which previously dragged
      the `Test::SharedFork` chain into the streamed PowerShell bootstrap and
      broke fresh installs
    - fixed the streamed Windows checkout bootstrap so it now installs from
      the current GitHub checkout shape cleanly on Windows, including the
      Windows-safe `Makefile.PL` version path and the self-healing private
      helper staging path used by lightweight commands such as `dashboard
      encode`
    - fixed the PowerShell bootstrap so `install.ps1` now sets the CurrentUser
      execution policy to `RemoteSigned` before writing the generated profile,
      allowing new PowerShell sessions to load the `dashboard shell ps`
      bootstrap instead of failing with `running scripts is disabled`
    - fixed the generated PowerShell profile block so `PERL_MB_OPT` is now
      written with format-string quoting instead of nested literal quotes that
      broke new sessions with `Unexpected token '$ddInstallRoot""'`
    - replaced the repository PSGI test dependency on `Plack::Test` with a
      local harness under `t/lib` so the release metadata can stay focused on
      real runtime requirements while the web route coverage still stays
      intact
    - corrected the install bootstrap docs so the Windows examples use the
      `install.ps1` entrypoint and describe the lighter packaged install path

3.30  2026-05-01
    - fixed the streamed Windows bootstrap so native `winget` command output
      is written to the host terminal instead of leaking into typed helper
      return values, which previously broke the Strawberry Perl path hand-off
      during `irm .../install.ps1 | iex`
    - fixed the Windows Perl bootstrap so `install.ps1` no longer tries to
      self-install `App::cpanminus` while the downloaded `cpanm` bootstrap
      script is still running, avoiding the Windows file-replacement failure
      that broke the `local::lib` setup step on blank hosts
    - documented the exact streamed PowerShell bootstrap command as
      `irm https://raw.githubusercontent.com/manif3station/developer-dashboard/refs/heads/master/install.ps1 | iex`
      and updated the Windows install docs to describe the standalone
      `cpanmin.us` plus `local::lib` bootstrap flow accurately

3.28  2026-05-01
    - renamed the Windows checkout bootstrap entrypoint from `install.ps` to
      `install.ps1` so the shipped filename matches normal PowerShell script
      expectations while keeping the streamed `irm ... | iex` flow explicit
    - hardened the Windows bootstrap winget path so package installs are
      pinned to the community `winget` source and the installer performs one
      `winget source reset --force` plus source refresh retry before failing
      with a clear HRESULT-style exit code

3.27  2026-05-01
    - added a repo-root `install.ps1` bootstrap entrypoint for Windows
      PowerShell hosts so blank-machine installs can bootstrap Git,
      Strawberry Perl, Node.js, user-space Perl tooling, and the dashboard
      runtime from a checkout or a streamed `irm ... | iex` flow
    - updated the install bootstrap docs, release metadata guards, and
      shipped tarball asset checks so the Windows bootstrap path is tracked
      alongside the existing Unix-like `install.sh` flow

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
