Developer-Dashboard
view release on metacpan or search on metacpan
commands such as `dashboard nest.level1.level2.here` now execute
`skills/level1/skills/level2/cli/here`
- fixed the nested-skill provider root builder to follow the real repeated
`skills/<repo>` directory contract instead of flattening dotted skill
names into one `skills/<repo>/<repo>` path
- added focused multi-level nested skill coverage in the skill-system and
dispatcher tests so repeated `skills/<repo>/.../skills/<repo>/cli`
trees stay covered through both the runtime module and the public CLI
2.45 2026-04-17
- taught dotted skill command dispatch to resolve nested
`skills/<repo>/cli/<command>` trees inside one installed skill, so
commands such as `dashboard ho.foo.foo` now execute
`skills/foo/cli/foo`
- reused the same nested resolver for hook lookup and isolated skill
runtime env setup so nested commands follow the normal `cli/<command>.d`
and layered fallback contract
- added focused skill-system and dispatcher coverage for nested dotted
skill dispatch through both the public `dashboard` entrypoint and the
runtime module
2.44 2026-04-17
- removed POD syntax drift from shipped Perl files by replacing the
remaining non-ASCII inline POD text that broke Test::Pod and CPANTS
parsing in the release tarball
- added shipped `SECURITY.pod` and `CONTRIBUTING.pod` so the built
distribution carries a security policy, a private contact address, and
contributor workflow guidance even though repository Markdown files stay
excluded from the tarball
- added an explicit `Test::Pod` gate plus release-metadata coverage for
the shipped security/contact and contributing documents
2.43 2026-04-17
- taught the built-in `housekeeper` cleanup pass to rotate collector log
transcripts when collector config declares `rotation` or `rotations`,
supporting line-count retention plus minute/hour/day/week/month windows
- fixed built-in `housekeeper` collector overrides so a layered config can
change only `interval` or nested `indicator` metadata without replacing
the inherited built-in Perl `code` or `cwd`
- added focused unit and CLI smoke coverage for housekeeper-backed
collector log rotation, explicit invalid-rotation failures, and the
merged built-in housekeeper override contract
2.42 2026-04-17
- added a built-in `housekeeper` collector plus `dashboard housekeeper`
so the runtime can clean stale hashed temp-state roots and older
oversized Ajax payload files without relying on user-managed shell
commands
- taught the built-in housekeeper cleanup pass to remove stale
`dashboard-result-*` runtime result temp files from `/tmp` alongside
the existing Ajax temp cleanup
- recorded hashed temp-state runtime metadata under the shared `/tmp`
state tree so stale temp roots can be identified safely and active
DD-OOP-LAYERS state roots are preserved
- added focused unit and CLI smoke coverage for built-in housekeeper
cleanup, helper staging, and collector execution
2.40 2026-04-16
- taught executable hook files with a `.go` suffix to run through
`go run` while keeping the normal hook ordering, RESULT chaining, and
stdout/stderr streaming behavior
- taught executable hook files with a `.java` suffix to compile through
`javac` into an isolated temp directory and then run through `java`
using the declared main class from the source file
- taught direct `dashboard <command>` lookup to resolve executable
`cli/<command>.go` and `cli/<command>.java` source commands
- added focused platform coverage plus CLI smoke coverage for Go and Java
hook launch paths, with live smoke cases running when the corresponding
toolchains are available on the host
2.38 2026-04-15
- aligned all Perl module versions and release metadata to 2.38 after the
layer-system and collector-log reliability fixes
- added an explicit release-metadata sanity pass to keep `dist.ini` and
`Developer/Dashboard.pm` in lockstep for the shipped artifact
2.37 2026-04-14
- added TT-backed collector indicator icons so `indicator.icon` values such
as `[% a %]` now render against collector stdout JSON before the live
indicator is persisted
- kept configured TT icon source separate from the live rendered icon so
later config-sync reads preserve the rendered value instead of reverting
prompt and browser state back to raw `[% ... %]` text
- turned invalid JSON or Template Toolkit render failures for TT-backed
collector icons into explicit collector errors, with focused unit and CLI
smoke coverage plus synced collector docs
2.36 2026-04-14
- fixed `dashboard collector log` so it now prints explicit collector
transcripts instead of a usually blank shared file
- added `dashboard collector log <name>` for named collector inspection,
including explicit no-log-yet messaging for configured collectors that
have not run
- persisted per-collector log transcripts in the collector state layer and
added focused unit and CLI smoke coverage for named, aggregate, and
unknown-collector log handling
2.35 2026-04-13
- added a tarball-level CPANTS kwalitee guard so the built
`Developer-Dashboard-X.XX.tar.gz` must score 100 percent before release
instead of relying on weaker source-tree probes
- wired the release workflow to install `Module::CPANTS::Analyse` and run
the focused `t/36-release-kwalitee.t` gate after `dzil build`
- documented the tarball-only kwalitee verification path in the synced
manuals and release notes so PAUSE and CPANTS drift can be checked
against the exact shipped artifact
2.34 2026-04-12
- fixed same-repo DD-OOP-LAYERS skill fallback so a deeper
`skills/<repo-name>/` layer no longer shadows the whole inherited skill
repo when it only overrides part of it
- layered skill command dispatch, bookmark lookup, nav discovery, skill
hook execution, skill config merge, and skill-local `local/lib/perl5`
exposure so missing child-layer files, folders, or config keys now fall
back to the base skill layer while deepest overrides still win
- added TDD coverage for same-repo layered skill fallback across dotted
command dispatch, bookmark routes, nav discovery, and merged skill
config, then updated the synced manuals and verification docs to keep
that contract explicit
2.33 2026-04-11
1.23 2026-04-02
- fixed uninitialized value warnings in listening_url() by guarding against undefined daemon and providing fallback defaults for sockhost and sockport
- all warnings from Developer::Dashboard code now eliminated (remaining warnings are from external dependencies)
1.22 2026-04-02
- added HTTPS support to the web server with `dashboard serve --ssl` flag, enabling Starman HTTPS mode
- added automatic self-signed certificate generation in `~/.developer-dashboard/certs/server.crt` and `~/.developer-dashboard/certs/server.key` on first HTTPS startup
- configured Starman to accept `--ssl-key` and `--ssl-cert` parameters through Plack::Runner when SSL mode is enabled
- added Web::Server SSL test coverage for cert generation, cert path retrieval, SSL parameter passing, and listening URL scheme selection
- implemented web service settings persistence: `dashboard serve --host HOST --port PORT --workers N --ssl` now saves these settings globally
- `dashboard restart` now inherits all saved settings (host, port, workers, ssl) from the previous serve session, so `dashboard serve --ssl` followed by `dashboard restart` maintains SSL mode
- CLI flags override saved settings, allowing temporary overrides when needed (e.g., `dashboard restart --ssl` to enable SSL or `dashboard restart --port 8000` to use a different port)
- added Config module persistence methods `web_settings()` and `save_global_web_settings()` for atomic multi-setting updates
- added comprehensive test suite for configuration persistence with default values, save/load cycles, partial updates, and validation
1.21 2026-04-02
- fixed malformed older bookmark icon bytes on saved page load by normalizing broken heading and item icon glyphs into stable browser-safe fallbacks and repairing common damaged joined emoji such as `ð§âð»`
- kept saved edit and source routes on the repaired raw bookmark text from disk instead of always regenerating canonical source, so browser views preserve the repaired older icon markup
- added direct page-store and web-route regressions for malformed older bookmark icon bytes plus a browser-backed saved-page smoke verification against the reproduced `/tmp/index` issue
1.20 2026-04-02
- fixed bookmark editor overlay drift by restoring live syntax highlighting inside a clipped overlay viewport that follows the textarea by transform instead of trying to scroll a second independent layer
- fixed the editor bottom-of-file geometry by preserving the final blank line in the overlay so scrolling and caret targeting stay aligned on long bookmarks
- added browser-backed and web-route regression coverage for the saved bookmark editor highlighting and scroll-sync behaviour
1.19 2026-04-02
- fixed plain `Folder` alias compatibility drift so direct calls such as `perl -MFolder -e 'print Folder->docker'` now lazy-load config-backed path aliases from the active runtime instead of rejecting aliases that `dashboard paths` already expose...
- kept explicit `Folder->configure(..., aliases => ...)` overrides intact while adding the lazy config-backed alias cache
- added helper-compatibility regression coverage for repo-local config alias resolution through plain `Folder` usage
1.18 2026-04-02
- fixed singleton-managed saved Ajax lifecycle cleanup so `dashboard stop` and `dashboard restart` now terminate `dashboard ajax: ...` workers as part of the managed web shutdown path
- added browser `pagehide` cleanup beacons for `Ajax(..., singleton => 'NAME', ...)`, letting saved bookmark pages call `/ajax/singleton/stop?singleton=NAME` when the tab closes so singleton workers do not linger after browser exit
- added direct web/runtime regressions for singleton stop-route cleanup, stop/restart singleton teardown, and writer-cancelled saved Ajax streams
- changed the bookmark editor overlay to render exact escaped source with wrapping disabled instead of live syntax markup, preventing long exact bookmark edits from leaking highlight fragments, mis-highlighting selections, or shifting the caret o...
- added exact editor geometry regressions for the long bookmark repro and reran the browser-backed editor verification path
1.17 2026-04-02
- fixed bookmark editor script-block highlighting so saved `/app/<id>/edit` pages keep JavaScript lines in script mode instead of flipping into CSS-style attribute/value markup after `<script>` tags
- protected the browser and server editor highlighters from rewriting their own inserted span markup, preventing placeholder or token-fragment leaks that could dislocate the visible overlay while typing exact saved bookmark text
- updated `dashboard serve workers N` to start the web service immediately when it is stopped, with `--host HOST` and `--port PORT` available for that auto-start path
- added focused web and CLI regressions for the exact bookmark editor repro and for `dashboard serve workers` starting a stopped web service
- verified the exact `/app/test/edit` bookmark repro in headless Chromium, updated testing and architecture docs, and bumped release metadata for 1.17
1.16 2026-04-02
- fixed bookmark editor typing drift by removing width-changing bold styling from the visible directive highlight overlay, keeping the syntax-highlight layer aligned with the real textarea caret while typing
- verified the editor route through headless Chromium in addition to the web regression test coverage
1.15 2026-04-02
- added `singleton => 'NAME'` support to saved bookmark `Ajax(...)` helpers, emitting `/ajax/<file>?type=...&singleton=NAME` so browser refreshes can replace older long-running Perl ajax workers cleanly
- renamed singleton-managed saved Ajax Perl workers to `dashboard ajax: NAME` and reused `_pkill_perl` before launching a replacement stream, preventing stale refresh-driven background workers from accumulating
- extended web and helper-compatibility coverage for singleton Ajax urls, singleton process titles, and refresh-safe saved Ajax replacement behaviour
1.14 2026-04-02
- updated the GitHub Actions workflows to use `actions/checkout@v5` and opt JavaScript actions into Node 24, removing the hosted-runner deprecation path for the previous Node 20 checkout runtime
- closed the remaining `lib/` coverage gaps in `Developer::Dashboard::Web::App`, `Developer::Dashboard::Web::DancerApp`, and `Developer::Dashboard::RuntimeManager`, bringing the reviewed Devel::Cover report back to 100% statement and subroutine c...
- fixed runtime web-process detection so `dashboard serve logs ...` and `dashboard serve workers ...` helper commands are no longer misdetected as managed web servers during shutdown and restart scans
1.13 2026-04-02
- extended `dashboard serve logs` with `-n N` tailing and `-f` follow mode, so users can start from the last requested lines and continue streaming appended Dancer2 and Starman log output live
- added runtime-manager and CLI regressions for tailed and followed web logs
- updated README, main POD, architecture docs, and release metadata for the 1.13 log-tail follow release
1.12 2026-04-02
- added `dashboard serve logs` so users can print the combined Dancer2 and Starman runtime log without hunting for the dashboard log file manually
- added configurable Starman worker counts through `dashboard serve workers N`, plus one-off `dashboard serve --workers N` and `dashboard restart --workers N` overrides
- updated README, main POD, architecture docs, and release metadata for the 1.12 web-log and worker-control release
1.11 2026-04-02
- fixed saved bookmark Ajax Perl wrappers to enable autoflush on `STDOUT` and `STDERR`, so long-running handlers that only `print` and `sleep` now stream visible browser output immediately instead of stalling behind process buffering
- extended the blank-environment integration runner to exercise a long-running saved `/ajax/...` stream and assert that the first chunks arrive on time through the installed browser-facing route
- updated README, POD, testing docs, fixed-bug notes, and release metadata for the 1.11 saved-ajax streaming release
1.10 2026-04-02
- changed saved bookmark Ajax helpers and `/ajax/<file>` routes to default to `text/plain` output when no explicit `type => ...` or `?type=...` is supplied
- fixed the Dancer2 ajax bridge so streamed `/ajax/...` responses flush through the HTTP layer instead of being buffered into one final string
- extended ajax helper, web-route, and streaming coverage and updated README, POD, bug notes, and release metadata for the 1.10 ajax-default and streaming fix
1.09 2026-04-02
- fixed transient `/?mode=render&token=...` play for named bookmarks so shared `nav/*.tt` fragments keep the saved `/app/<id>` current-page context instead of collapsing to `/`
- added a dedicated bookmark play regression test for shared nav rendering on both unnamed transient play and named bookmark token play
- updated README, POD, fixed-bug notes, and release metadata for the 1.09 nav-context fix
1.08 2026-04-02
- added `integration/browser/run-bookmark-browser-smoke.pl` for fast host-side browser verification of saved bookmark files, including page-source, ajax, and final DOM assertions
- documented the new bookmark browser smoke workflow in README, main POD, testing docs, and the integration plan so bookmark regressions get a dedicated repro path before the slower blank-environment cycle
- updated release metadata and release-sensitive tests for the 1.08 bookmark browser smoke tooling release
1.07 2026-04-02
- fixed `/js/jquery.js` for saved bookmark pages by serving a built-in local jQuery-style compatibility shim when no runtime file overrides it
- verified that older `Ajax jvar => 'foo.bar', file => 'foobar'` bookmark pages bind `foo.bar` to `/ajax/foobar?...` and that the saved ajax endpoint executes through the browser-facing route
- updated README, POD, static-file docs, release docs, and release-sensitive tests for the new built-in `/js/jquery.js` behavior
1.06 2026-04-02
- fixed saved bookmark editor boot-script escaping so literal bookmark HTML such as `</script>` no longer breaks the source editor and leaks raw instruction text below the page
- fixed older bookmark bootstrap ordering so `Ajax jvar => ...` bindings run after `set_chain_value()` is defined, preventing play-route JavaScript `ReferenceError` failures
- updated README, POD, changelog, fixed-bug notes, and troubleshooting docs to describe the bookmark editor/script bootstrap fixes
1.05 2026-04-02
- fixed saved bookmark editor boot-script escaping so literal bookmark HTML such as `</script>` no longer breaks the source editor and leaks raw instruction text below the page
- fixed older bookmark bootstrap ordering so `Ajax jvar => ...` bindings run after `set_chain_value()` is defined, preventing play-route JavaScript `ReferenceError` failures
- removed the parallel `/page/...` browser route surface and moved saved render, edit, source, and action routes fully onto `/app/...`
- fixed the web server constructor so `port => 0` keeps the requested ephemeral-port bind instead of collapsing back to the default `7890`
- fixed the blank-environment runner so the helper-login flow now opens `/app/welcome` instead of the removed `/page/welcome` route, and made the browser step resolve or bootstrap Chromium when the prebuilt `dd-int-test:latest` image is stale
- fixed runtime restart races by waiting for the old listener on the managed web port to disappear before starting the replacement server, preventing intermittent `Address already in use` failures during `dashboard restart`
- fixed minimal-container listener discovery by falling back to `/proc` socket scans when `ss` is unavailable, so `dashboard stop` and `dashboard restart` still find Starman listener pids inside the prebuilt `dd-int-test:latest` image
- fixed the remaining blank-container restart race by re-probing the managed web port for late listener pids after the first shutdown sweep, so `dashboard restart` no longer leaves port `7890` occupied after the initial TERM/KILL pass
- fixed managed web detection for the Dancer2/Starman master-worker split, so `dashboard stop` and `dashboard restart` still trust the recorded master pid when the bound port listener is reported as a separate worker pid
- updated README, POD, and route-focused tests to document and verify the single `/app/...` saved bookmark surface
1.04 2026-04-01
- completed the browser migration onto explicit Dancer2 routes, so the HTTP route table now lives in `Developer::Dashboard::Web::DancerApp` instead of a single catch-all bridge into the old dispatcher
- kept `Developer::Dashboard::Web::App` as the page and action service layer, so saved-page rendering, helper auth, existing `/app` compatibility, and transient-policy enforcement continue to behave the same behind the new Dancer2 route surface
- added PSGI entrypoint and route-layer regression coverage for the Dancer2 server path, response headers, and route compatibility flow
1.03 2026-04-01
- fixed the blank-environment integration runner so long-running commands stream stdout and stderr live instead of buffering silently through the wrapper, making fresh-container `cpanm` and browser-backed verification progress visible
- fixed the blank-environment integration runner to derive the expected installed version from the extracted tarball instead of hard-coding a release number, so the clean-container flow keeps working across version bumps
- re-ran the host-built tarball blank-environment integration flow successfully, including the headless Chromium browser checks
1.02 2026-04-01
- fixed saved bookmark static asset lookup so `/js/*`, `/css/*`, and `/others/*` can resolve files from the effective runtime public tree and from `dashboards/public/...`, keeping saved local assets such as `dashboards/public/js/jquery.js` availa...
- fixed bookmark instruction parsing so a standalone `---` line also terminates the current section, preventing pasted prose after `CODE*` blocks from being compiled and shown as runtime syntax errors or leaked back into the editor
- added regressions for markdown-style bookmark section breaks and for static file lookup from both runtime and bookmark-root public directories
1.01 2026-04-01
- fixed saved bookmark editor posts so `/page/<id>/edit` saves keep using named saved-bookmark routes and `/page/<id>` play links instead of falling back to transient `token=` URLs when transient web tokens are disabled
- reduced CLI startup side effects by deferring configured path-alias loading, saved-page migration, and collector-indicator sync until commands that actually need them run
- extended web and CLI regressions for saved bookmark browser edits under the transient-url deny policy and for `dashboard restart` avoiding accidental project-local `.developer-dashboard` creation in repos that have not opted in
1.00 2026-04-01
- added static file serving for public directory (js, css, others) at ~/.developer-dashboard/dashboard/public/{js,css,others}/
- added routes /js/*, /css/*, /others/* to serve static files with automatic MIME type detection
- included jQuery 4.0.0 minified in public/js/ to eliminate CDN dependencies
- implemented directory traversal attack prevention and file boundary validation
- added comprehensive unit tests for static file serving and MIME type detection (18 tests)
- added documentation for static file serving in doc/static-file-serving.md
- extended web app POD documentation with _serve_static_file and _get_content_type methods
0.99 2026-04-01
- moved saved bookmark `Ajax(file => ...)` storage into `.developer-dashboard/dashboards/ajax/...`, so named handlers live under the saved bookmark tree instead of the runtime cache
- changed saved bookmark `Ajax(file => ...)` calls without `code => ...` to point at an existing executable in that ajax tree instead of overwriting it with an empty generated file
- changed transient-url-disabled saved bookmark Ajax endpoints to emit `/ajax/<file>?type=...` and resolve files directly from the shared dashboards ajax tree
- fixed saved Ajax stream draining so closed-handle comparisons stop emitting uninitialized-value warnings during coverage and process-backed ajax runs
- extended unit, metadata, and blank-environment integration coverage for the dashboards ajax-tree location and existing-file execution flow
0.98 2026-04-01
- changed saved bookmark `/ajax?page=...&file=...` handlers to execute the stored runtime-cache file as a real process, defaulting to Perl unless the file starts with a shebang
- streamed both saved-handler `stdout` and `stderr` back to the browser directly, so `print`, `warn`, `die`, `system`, and `exec` behave like the old playground progress stream instead of a buffered JSON-style response
- extended unit, metadata, and blank-environment integration coverage for process-backed ajax streaming and shebang-backed saved handlers
0.97 2026-04-01
- changed older `/ajax` execution to run bookmark Ajax Perl code directly and stream raw output chunks back to the browser instead of buffering through a page render pass
- changed saved bookmark `Ajax file => ...` handlers to preserve live browser progress updates while transient token urls remain disabled by default
- extended app, server, metadata, and coverage tests for streamed `/ajax` responses and saved bookmark file handlers
0.96 2026-04-01
- changed saved bookmark `Ajax` helper calls to support explicit `file => 'name.json'` routes, storing the handler code under the runtime cache and emitting `/ajax?page=...&file=...` endpoints that stay usable while transient token urls are disab...
- kept transient `/ajax?token=...` support for transient pages behind the existing transient-url opt-in, while making saved bookmark ajax handlers work under the default deny policy
- extended unit, metadata, and blank-environment integration coverage for saved bookmark Ajax file routing
0.95 2026-04-01
- disabled browser execution of transient `token=` and `atoken=` payloads by default, so only saved bookmark-file routes execute unless `DEVELOPER_DASHBOARD_ALLOW_TRANSIENT_URLS` is enabled explicitly
- kept saved bookmark posts and saved page routes working while rejecting transient root-editor runs, encoded action URLs, and older `/ajax?token=...` requests with an explicit `403` policy response
- extended unit, release-metadata, and blank-environment integration coverage for the new transient web token policy
0.94 2026-04-01
- fixed `Folder->dd` and `Folder->runtime_root` so they keep the home runtime root unchanged when the current working directory is already inside `~/.developer-dashboard`, instead of appending a second `.developer-dashboard`
0.93 2026-04-01
- made a project-local `./.developer-dashboard` tree the first runtime lookup root for bookmarks, config, CLI commands and hooks, auth users, sessions, and isolated docker service folders, while still falling back to `~/.developer-dashboard` when...
- seeded sanitized `api-dashboard` and `db-dashboard` bookmark pages during `dashboard init` alongside `welcome`, keeping the pages editable as normal saved bookmarks without carrying forward older company-specific text or credentials
- moved the blank-environment integration flow onto a real fake-project `./.developer-dashboard` tree so the tarball install verifies the same local-over-home precedence model used by the shipped runtime
0.92 2026-04-01
- hardened blank-environment tarball installation by exporting PERL_CANARY_STABILITY_NOPROMPT and the other noninteractive installer flags during clean-container cpanm runs
- kept the Runtime::Result hook-chain helper release intact while making the blank integration path safe against interactive dependency prompts from the JSON::XS toolchain
0.91 2026-04-01
- formalized per-hook RESULT rewrites between sorted CLI hook executions so each later hook sees the JSON result of earlier hook scripts
- added Runtime::Result as a Perl helper for decoding RESULT and reading prior hook stdout, stderr, exit codes, and the last recorded hook entry
- extended blank-environment integration coverage so dashboard update proves later executable hooks can react to earlier hook output through Runtime::Result
0.90 2026-04-01
- removed startup collector files and plugin packs so dashboard configuration JSON is the single source of truth for collectors, providers, path aliases, and docker overlays
- removed startup and plugin paths from the runtime surface, compatibility `Folder` aliases, blank-environment integration flow, and supporting documentation
0.89 2026-04-01
- added an explicit Dist::Zilla runtime prerequisite for `JSON::XS` so the built tarball always declares the JSON backend dependency for PAUSE installs
- extended release metadata coverage to assert the shipped runtime prereqs include `JSON::XS`
0.88 2026-03-31
- removed the built-in `dashboard update` branch so `update` behaves like any other user-supplied top-level command
- kept `dashboard update` working through a user-provided `~/.developer-dashboard/cli/update` command plus sorted hook files from `update` or `update.d`
0.87 2026-03-31
- added `.d` hook-directory aliases so `~/.developer-dashboard/cli/<command>.d/` behaves the same as `~/.developer-dashboard/cli/<command>/` for top-level command hooks
- updated smoke and blank-environment integration coverage so the shipped runtime accepts `.d` hook folders for command preprocessing
0.86 2026-03-31
- changed the top-level command hook runner so executable files under `~/.developer-dashboard/cli/<command>` stream stdout and stderr live to the terminal instead of buffering silently until the command finishes
- kept the live-streamed hook output accumulated into `RESULT` JSON so later hook files and the final command still receive the full per-hook stdout, stderr, and exit code payloads
- updated smoke and integration-facing documentation for the new visible hook progress behavior
0.85 2026-03-31
- fixed bookmark Template Toolkit environment so saved pages and shared `nav/*.tt` fragments receive `env.current_page` for the active request path instead of only raw process environment values
- exposed the active request path again as `env.runtime_context.current_page`, keeping the rest of the request-time runtime context available to bookmark and nav Template Toolkit code
( run in 0.769 second using v1.01-cache-2.11-cpan-39bf76dae61 )