Developer-Dashboard

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

    claimed in a working column that has stopped moving, and one left untouched in
    the backlog.
  - Coverage gate: refuses to grade a database written by a different
    Devel::Cover install, and says which two disagree, instead of exiting with an
    unexplained status.

4.25  2026-08-09

  - CI: restored a pipeline that had certified nothing for ten days. Three
    GitHub Action pins sat on the node20 line while their version comments
    claimed node24, so every run died at Setup Perl and the suite, the coverage
    gate and both CVE audits never executed (DD-449). The pin comments are now
    resolved against the upstream tag rather than trusted (DD-449), the
    environment export no longer swallows its own failure inside a command
    substitution (DD-483), and two suite files no longer assume tools and
    libraries CI installs elsewhere (DD-485).
  - Security: helper session ids are drawn from the operating system CSPRNG
    instead of a SHA over the pid, the wall-clock second and built-in rand -
    the construction CVE-2026-13577 describes in Dancer2, reimplemented here in
    the code guarding the web interface. Crypt::URandom is now a declared
    dependency floored at 0.55, because CVE-2026-2474 affects earlier releases
    (DD-452).
  - Security: dispositioned CVE-2026-13577 for Dancer2, which has no fixed
    release, behind a guard that fails the audit if any production code ever
    activates a Dancer2 session (DD-451).
  - Security: closed a Zip Slip in dashboard open-file, where a sources jar
    could write attacker-controlled paths anywhere the user can write (DD-498).
  - Security: corrected the CVE gate's subject so it judges the product's
    declared chain rather than the host interpreter (DD-499).
  - Fix: a collector's loop state is written before its pidfile, so a
    concurrent running_loops can no longer delete the pidfile of a healthy loop
    and leave it unstoppable by name while the supervisor forks a duplicate
    (DD-488).
  - Fix: Housekeeper's temp-file cleanup lists its directory instead of
    globbing a pattern built from the path, so a directory whose path contains
    a space stops hiding every real temp file and unlinking unrelated ones
    (DD-502).
  - Test reliability: the coverage gate, the empty-environ probe and several
    collector lifecycle fixtures no longer fail purely because the host is
    CPU-starved, which is the shape of every CI runner (DD-482, DD-486,
    DD-489). Every timeout changed here is backed by a measurement rather than
    by the fact that a larger number passes.

4.24  2026-08-08

  - Security: closed the open-redirect class in the login redirect sanitizer
    and on both HTTPS-enforcement Host-header redirect paths (DD-415, DD-419),
    rather than only the single reported byte.
  - Security: closed three path-traversal classes - saved-page writes outside
    the dashboards root (DD-395), parent-directory traversal in every
    skill-namespaced web route with static-file containment asserted (DD-416),
    and skill installs whose repo name escapes the skills root (DD-426).
  - Security: every page-derived value the web layer places inside an HTML
    attribute is now escaped for attribute context (DD-421), and saved
    bookmark link segments are percent-encoded for URL context (DD-423).
  - Security: state-changing requests are rejected when Origin or Referer is
    foreign, on every web tier (DD-422).
  - Security: the transient-token denial now depends on the token alone, so a
    file value riding along can no longer bypass the 403 (DD-425).
  - Security: release tarballs no longer carry dogfood QA evidence, ticket
    worktrees (DD-414), or the Hermes runtime state root and its credentials
    (DD-432).
  - Feature: first-class self-upgrade - dashboard upgrade and d2 upgrade run
    the canonical platform installer (DD-386).
  - Feature: a real /favicon.ico is served instead of a 404 on every page
    load (DD-407).
  - Collectors: a timed-out command's full process subtree is terminated
    (DD-388); blocked Windows command collectors are interrupted at their
    timeout (DD-389); the atomic writer uses a per-process pending name so
    concurrent workers stop clobbering each other (DD-418); log append and
    rotation share a per-log lock (DD-399) and rotation cuts on entry
    boundaries so a combined lines+days rule cannot orphan an entry body
    (DD-427); collectors keep running when the updates directory is absent
    (DD-398).
  - Runtime: saved-Ajax disconnect cleanup terminates descendant processes
    (DD-396) and gives them a real elapsed SIGTERM grace window (DD-428);
    runtime state readers survive a transient empty state file (DD-411) and
    the web lifecycle no longer acts on incomplete runtime state (DD-412).
  - Windows: the SSL certificate home resolves through PathRegistry so the
    HTTPS server starts (DD-417); every passwd lookup is guarded so
    non-interactive sessions resolve a user and a home (DD-413); PERL5LIB
    generation is cross-platform (DD-397); PowerShell startup caches are
    anchored to the home layer and no longer clobber live PATH state
    (DD-390).
  - Web UI: every generated HTML document carries a lang attribute (DD-405);
    logout and an authorized /login route by trust tier (DD-408); page-editor
    textareas carry programmatic accessible names (DD-409); rendered page
    chrome no longer overflows 320px phone viewports (DD-410).
  - Performance: PathRegistry working-directory lookups no longer fork
    /bin/pwd repeatedly (DD-393).
  - Gates: the POD syntax gate reads the source tree instead of a stale copy
    and the three reds it was hiding are fixed (DD-429); the coverage gate
    grades lib/ instead of the stale build tree (DD-431) and a failed exec in
    the harness process can no longer blind it (DD-428); the Windows
    collector-timeout E2E is proven on a real QEMU Windows guest and made
    repeatable (DD-404).
  - Metadata: MakeMaker license metadata aligned with MIT (DD-400).

4.23  2026-07-29

  - Coverage: every module under lib/ now reaches 100.0 on all four
    Devel::Cover metrics - statement, subroutine, branch, AND condition -
    driven by the new per-module hermetic coverage suites (t/59 through
    t/106) with genuinely-unreachable outcomes annotated inline and dead
    guard operands removed where redundancy caused unreachable branches.
  - CI: all three workflows (test, release-github, release-cpan) enforce the
    all-metric standard through script/check-all-metric-coverage, which
    fails closed on any metric below 100.0 or any malformed report
    (t/107-all-metric-coverage-gate.t).
  - Security: helper host-trust no longer accepts arbitrary Host headers
    that merely resolve to loopback, closing a DNS-rebinding vector; exact
    loopback literals and configured alias hosts remain trusted.
  - Test isolation: the fresh-runtime API assertions in
    t/15-cli-module-coverage.t now chdir into their isolated HOME so a
    dev-runtime layer in the working checkout cannot capture their writes.
  - Installability: the dependency hardening initially raised the Perl floor
    to 5.44, which cpanm rejects on every mainstream perl (perl:latest is
    5.42); the floor is restored to 5.38 (the code's real requirement) while
    CI continues to run on Perl 5.44 and the dependency version pins keep
    the security gate.



( run in 1.600 second using v1.01-cache-2.11-cpan-007c89162af )