Changes for version 4.29 - 2026-08-18

  • DD-585/589/590/591/592/593: six query functions across CollectorRunner.pm, IndicatorStore.pm, RuntimeManager.pm, ActionRunner.pm, SkillManager.pm (three functions) and PageRuntime.pm each shelled out (via system(), Capture::Tiny, or a waitpid reap) and left Perl's global $? holding their own last subprocess's exit status after returning, without ever localizing $? at sub entry. A caller reading bare $? afterward for an unrelated reason - the shape that first surfaced this in DD-585, an END block in a test file - silently inherits the wrong value. Found by a systematic sweep of lib/ once the first instance was fixed, and independently by the autonomous hourly bug-hunt round, which found and fixed DD-590 and DD-593 on its own (both resumed here after the round's own session ended mid-verification, with nothing lost either time - its park mechanism correctly left the tree untouched while a suite was live). Fixed uniformly with `local $?;` at each sub's entry. One subtlety verified rather than assumed: SkillManager's three functions never read $? explicitly, but Capture::Tiny returns system()'s own return value automatically while system() ALSO mutates the global $? as an unavoidable side effect - confirmed with a standalone repro before writing any fix. A fourth possible instance (ActionRunner's own sibling query pattern) was checked and is genuinely absent.
  • DD-594: dd-round-park.sh's automatic end-of-round park comment defaults to the shared, retired 'DD Bot' identity (DD-527 retired it project-wide) because nothing in the automation chain ever sets DD_TIRA_PARK_AUTHOR. Found by the autonomous round tracing the root cause of a finding that had been recurring on every card it touched.
  • DD-586: t-dd-round-park.sh's specs-guard timeout (600s) was too tight for a spec that deliberately spawns real long-lived background processes to model a genuinely-alive concurrent round; raised to 1200s.
  • DD-587: the hourly bug-hunt and 10-minute blocked-resolver systemd timers had been silently disabled for 9 days. Re-enabled and verified both correctly defer to an active interactive session before doing real work.
  • DD-562: master's coverage gate read 100.0 locally but 99.9 on CI.
  • DD-567: a perl-interpreter CVE advisory blocked the CI step immediately before tests and coverage, on 5 consecutive pushes.
  • DD-568: an early CI step failing silently skipped the test and coverage steps that followed it; those steps now run with if: always().
  • DD-572: the pre-push security grep matched 'brewfile' against the retired-system marker pattern 'ewf', making a required gate return permanent noise.
  • DD-573: 13 operator-tool specs existed under dd-tg with nothing ever running them, so a broken spec could never fail loudly.
  • DD-574: the audit gate could fail without ever saying which check failed it, a defect DD-567's own fix left behind.
  • DD-581: nothing recorded a coverage verdict anywhere the board's own gate indicator could read, so it could never show green even on a clean pass.
  • DD-582: gate-status reported RUNNING for a log file it had no way to know was actually still being written.
  • DD-583: the Telegram ack watcher answered a direct question about its own silence with more silence.
  • DD-584: two dd-tg operator specs had been failing with nobody told.

Documentation

security policy for Developer Dashboard releases
d2
first-class short entrypoint for the Developer Dashboard CLI
thin command switchboard for Developer Dashboard
blank-environment Docker integration runner for a host-built tarball
fast browser-backed smoke runner for saved bookmark files
resolve every SHA-pinned GitHub Action against its upstream tag and its declared runtime
enforce 100.0 statement, branch, condition and subroutine coverage for lib/, and tell an instrument failure apart from a coverage failure
run the whole four-metric coverage gate inside one environment
audit the transitive runtime closure of the declared dependency chain for permitted vulnerable resolutions
regenerate the checkout manual from the main Developer::Dashboard POD
internal staged built-in command runtime for Developer Dashboard
private built-in command wrapper for Developer Dashboard
api
private built-in command wrapper for Developer Dashboard
ask
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in completion helper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
CSV query command for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private file helper for Developer Dashboard
private runtime file helper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
INI query command for Developer Dashboard
private built-in command wrapper for Developer Dashboard
jq
JSON query command for Developer Dashboard
log
private built-in log helper for Developer Dashboard
of
private open-file helper for Developer Dashboard
private open-file helper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private path helper for Developer Dashboard
private runtime path helper for Developer Dashboard
Java properties query command for Developer Dashboard
ps1
private prompt helper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private built-in command wrapper for Developer Dashboard
private tmux ticket helper for Developer Dashboard
TOML query command for Developer Dashboard
private self-upgrade helper for Developer Dashboard
private runtime command-inspection helper for Developer Dashboard
private tmux workspace helper for Developer Dashboard
XML query command for Developer Dashboard
yq
YAML query command for Developer Dashboard

Modules

a local home for development work
trusted action execution runtime
local auth and trust-tier handling
layered API-key manager for dashboard api
ask an AI backend from the dashboard CLI
shell completion candidates for dashboard
lightweight file and files helper dispatch
dashboard open-file command support
lightweight path and paths helper dispatch
terminal task-board renderer for lifecycle commands
standalone structured-data query command support
shared restart, stop, and log command runtime for Developer Dashboard
manifest-based tracking for dashboard-managed starter pages
lightweight skills helper dispatch
fuzzy command suggestions for dashboard typos
private tmux ticket helper for Developer Dashboard
safe cross-platform dashboard self-upgrade
lightweight command and hook locator
payload encoding helpers for Developer Dashboard
file-backed collector storage
collector execution and loop management
merged configuration loader
older JSON helper compatibility functions
compose resolver and launcher
runtime permission doctor for Developer Dashboard
inspect dashboard-loaded env key provenance
load layered dashboard env files
older file compatibility wrapper
logical file registry for Developer Dashboard
older folder compatibility wrapper
in-process proxy for the dashboard/d2 CLI
cleanup stale dashboard temp state
file-backed indicator state for Developer Dashboard
private runtime helper executable management
JSON::XS wrapper for Developer Dashboard
common page model for Developer Dashboard
page source resolver
older bookmark renderer and CODE executor
tied output handle for streamed bookmark runtime output
page persistence and token transport
logical directory registry
normalize safe Perl library ordering for dashboard processes
platform and shell helpers for Developer Dashboard
process-supervision helpers shared by the runtime manager and the collector runner
prompt rendering for Developer Dashboard
helper accessors for dashboard hook RESULT JSON
runtime lifecycle manager
shipped skill authoring reference for Developer Dashboard
md5-based content checks for staged seed files
file-backed browser sessions
execute commands from installed skills
manage installed dashboard skills
the one place a ready handle is read
managed update runner
local web application for Developer Dashboard
Dancer2 route layer for Developer Dashboard
PSGI server bridge for Developer Dashboard
Lightweight daemon descriptor for the PSGI server wrapper
older token encoding and ajax URL compatibility helpers