Skip to content

[documentation-writing-alignment] Expose the coverage report path to composite callers #576

Open

Description

Context and request

Consumer context: callers of the local .github/actions/Get-PesterCodeCoverage composite need the documented MissedPathReportPath output to find its missed-path reports. This Bug owns only the independent runtime/output-route correction. README/source-contract accuracy remains in #572; the writing-only #569 does not include this repair.

Observed behavior: static inspection shows an incomplete output route. The composite declares MissedPathReportPath through steps.Get-PesterCodeCoverage.outputs.MissedPathReportPath, but that step has a name and no id. The pinned nested GitHub-Script composite exposes only result, not MissedPathReportPath. The coverage script writes the report path to the inner step's GITHUB_OUTPUT. The current metadata therefore does not establish a route to the caller-visible output. No live workflow failure or empty output has been reproduced as part of this tracking work.

Expected behavior: after the composite writes the reports, a caller can read steps.<caller-step-id>.outputs.MissedPathReportPath and use that value to find the report folder.

Reproduction and source evidence: inspect these immutable sources together:

  1. Local output declaration and composite step: the declared output references steps.Get-PesterCodeCoverage, but the step has no id.
  2. Pinned GitHub-Script output contract: the nested composite exposes result from its RunGitHubScript step. It does not expose a direct MissedPathReportPath output.
  3. Coverage output producer: the script writes MissedPathReportPath to the inner step's GITHUB_OUTPUT.

A runtime regression must exercise the complete composite boundary. Merely adding an id does not prove that the path crosses the nested composite's output contract.

Environment: PSModule/Process-PSModule@64ffb1d87f86bd5d487891fdb140b78385a00531; nested PSModule/GitHub-Script@8083ec1f733f00357ee4d0db0c6056686e483bc0 (v1.9.0); a GitHub Actions composite with a PowerShell script. The evidence is metadata/source inspection, not an OS-specific runtime reproduction.

Regression: unknown. No last-known-working output route is established.

Workaround: the framework caller uploads the known CodeCoverage-MissedPaths directory directly. That avoids reliance on this output for that caller, but it does not repair or verify the public composite output. No general output-based workaround is verified.

Acceptance criteria

  • A regression check invokes the composite boundary with controlled coverage reports and fails on the current caller-visible output route before the fix.
  • After the fix, the caller reads a nonempty MissedPathReportPath value that identifies the report folder. The folder contains CodeCoverage-MissedPaths.md and CodeCoverage-MissedPaths.json.
  • The complete route works across both the local composite and the pinned nested action. A text-only assertion that a step has an id is not sufficient evidence.
  • The public output name, report and artifact names, input names/defaults/required flags, coverage calculation, target enforcement, summary selection, and existing failure semantics remain unchanged.
  • The documented output and relevant existing action tests match the verified caller behavior. Unrelated README corrections, standalone example targets, module bootstrap defaults, lifecycle settings, and release behavior remain outside this Bug.

Technical decisions

The verified root-cause boundary is the output chain among .github/actions/Get-PesterCodeCoverage/action.yml, its nested GitHub-Script contract, and the script's output producer. The missing local step id and the nested action's result-only interface are separate parts of that chain. The precise runtime result still needs a regression reproduction; do not present static evidence as an executed workflow result.

Use the smallest source-backed mapping that forwards the report path across the existing boundaries. Do not change the pinned dependency or public output contract merely to bypass the defect. Confirm the chosen mapping with the caller-boundary regression before implementation. Keep the fix in one focused PR, with related test and documentation verification only.

Coordinate shared-file ownership with the native-help/action-description delivery #558 before any future metadata or source edit. No code, source, PR scope, labels, or lifecycle settings change as part of this issue split. No implementation PR is requested by the tracking correction.

Follow the pinned Bug format. References to #572, #557, and #569 are non-closing context.

Implementation plan

  • Reproduce the incomplete output route in a failing regression that reads the output as a composite caller, with controlled report input and retained evidence.
  • Verify the producer and pinned nested-action output contract, then implement the smallest complete mapping across both boundaries without changing names, defaults, dependencies, or failure behavior.
  • Run the regression and affected existing action checks; verify report contents, target enforcement, and the framework caller's artifact behavior.
  • Verify the existing README output contract against the corrected caller result and record before/after evidence in the one fix PR. Keep the independent README/source-accuracy work in [documentation-writing-alignment] Reconcile reusable-action README contracts with local sources #572.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions