NAME

Developer::Dashboard::Pax::Gatekeeper - release and SOW validation checks for PAX

SYNOPSIS

my $gatekeeper = Developer::Dashboard::Pax::Gatekeeper->new(root => '.');
my $report = $gatekeeper->sow01_report;

DESCRIPTION

Developer::Dashboard::Pax::Gatekeeper provides internal validation checks used by development and release gates. SOW-03 keeps these checks as module APIs while the public bin/pax command surface is limited to build and run.

METHODS

new

Creates a gatekeeper rooted at a repository path.

sow01_report

Returns the historical SOW validation report. The CLI-surface check now verifies that the public command runner exposes only build and run, with lower-level diagnostics retained as internal Perl APIs.

PURPOSE

This module keeps historical SOW and release-policy checks callable from Perl so validation can be reused by gates and tests without reopening the public CLI surface.

WHY IT EXISTS

PAX's own release history accumulated a set of statements of work (SOW-01, etc.) each with concrete, checkable acceptance conditions - things like "the CPAN/XS test matrix covers at least 7 dual-life distributions" or "deopt frame reconstruction includes every required Perl frame field". Those conditions used to be exercised through diagnostic subcommands that SOW-03 deliberately removed from the public CLI surface (bin/pax now exposes only build and run). Rather than lose the ability to verify them at all, this module keeps every check as a plain Perl method, so a gate or test can call sow01_report (and friends) directly without needing a public CLI command that would reopen the surface SOW-03 closed.

WHEN TO USE

Edit this file when adding a new named check to an existing SOW report (follow the _check_* naming and {id, description, status, evidence} result shape already used throughout), or when a check's pass/fail condition needs to change because the code it inspects moved or was renamed.

HOW TO USE

Construct with root pointing at the repository checkout the checks should inspect, then call the report method for the SOW you need (e.g. sow01_report). Each report aggregates its individual _check_* calls into a list of {id, description, status, evidence} hashes - read status (passed vs blocked) per check, and evidence for what to look at when a check is blocked.

WHAT USES IT

PAX's own internal release/gate tooling calls this to verify SOW acceptance conditions still hold before a release is considered valid, without depending on any public CLI diagnostic surface.

EXAMPLES

Example 1:

my $gatekeeper = Developer::Dashboard::Pax::Gatekeeper->new(root => '.');
my $report = $gatekeeper->sow01_report;
my @blocked = grep { $_->{status} eq 'blocked' } @$report;
# @blocked lists every SOW-01 condition not currently satisfied

Example 2:

for my $check (@$report) {
    print "$check->{id}: $check->{status} ($check->{evidence})\n";
}