Changes for version 4.31 - 2026-09-11

  • DD-770: .claude/tools/host-ready's foreign-process detector matched on command-line TEXT, which is spoofable - a process can rewrite its own $0, and ps args/cmdline/comm all read the same rewritten buffer. Added a positive-only /proc/PID/exe veto to dd_foreign_now(): a candidate is excluded only when exe provably resolves to something other than perl/prove/cover; an unreadable exe (the ordinary case across a container's mount namespace) leaves it counted, never turning could-not-look into excluded.
  • DD-771: corrected a false premise found during this card's own research
    • the /tmp/dd-gate-host.lock shared with the Tira project is deliberate (TKT-857), not an accidental collision. Fixed the two genuine survivors: run-suite's refusal now names the holding project via its cwd instead of a bare pid, and a retry no longer silently truncates a failed attempt's log (preserved to $LOG.prev before truncation).
  • DD-740: extracted .claude/tools/board's DD-545 checkout-root resolution (git --git-common-dir) into a shared .claude/tools/checkout-root helper; board-pulse, next-action and tira-bridge-run now source it instead of each hardcoding the checkout's absolute path.
  • DD-785: extracted the duplicated paths-registry constructor guard from seven modules (Collector, Doctor, IndicatorStore, PageStore, Housekeeper, FileRegistry, Prompt) into Developer::Dashboard::PathsRegistryArg (require_paths_arg), mirroring DD-762's DirEntries.pm precedent.
  • DD-767: bound t/100 and t/103's empty-environ probe loops by wall-clock (Time::HiRes, 60s) instead of a fixed 3000-poll count - closing a gap DD-482 specified but never shipped. A poll count is not a stable time bound under Devel::Cover, where instrumentation overhead and host contention both change what a fixed count buys; raising the count (as shipped twice before) failed a third time under real load. Also fixes a zombie-blind "-e /proc/PID" liveness check with a state+cmdline diagnostic.

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
shared path-registry and table rendering helpers for the lightweight file/path/which CLI commands
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
shared dot-filtered directory listing helper
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
shared paths-registry constructor guard
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

Provides

in lib/Developer/Dashboard/Handle.pm