Skip to content

[FEAT] plumber explain — Quick issue documentation lookup #126

@Joseph94m

Description

@Joseph94m

Is your feature request related to a problem? Please describe.

When Plumber flags an issue (e.g., ISSUE-412: Docker-in-Docker service detected), a developer needs to understand what it means, why it matters, and how to fix it. Currently they must either visit the getplumber.io documentation website or read through the JSON output to find the docUrl field.

For developers working in a terminal or in CI job logs, there's no quick way to get remediation guidance without leaving the current context.

Describe the solution you'd like

A new plumber explain command that prints detailed information about an issue code directly in the terminal:

$ plumber explain ISSUE-412

ISSUE-412: Docker-in-Docker service detected
Category:    Pipeline Composition
Severity:    high
Control:     pipelineMustNotUseDockerInDocker

Description:
  A CI/CD job uses a Docker-in-Docker (dind) service. On shared runners
  running in privileged mode, this enables container escape, lateral
  movement, and access to secrets from other jobs on the same runner.

Remediation:
  Replace Docker-in-Docker with Kaniko or Buildah for building container
  images. These tools do not require privileged mode.

Documentation: https://getplumber.io/docs/use-plumber/issues/ISSUE-412
Related:       ISSUE-413, ISSUE-101

Additional options:

  • plumber explain --list to list all issue codes with short descriptions
  • plumber explain --json ISSUE-412 for machine-readable output
  • plumber explain --all for a full reference dump

Configuration in .plumber.yaml

# No configuration needed: this is a CLI informational command.

Implementation Hints

  1. Data source: The errorCodeRegistry in control/codes.go already contains title, description, remediation, doc URL, and control name for every implemented issue code. Extend it with severity and related codes (or pull from a shared registry).
  2. New files:
    • cmd/explain.go (new command)
  3. Logic: Look up the issue code in the registry, format and print. For --list, iterate AllCodes(). For --json, marshal the ErrorCodeInfo struct. Consider enhancing ErrorCodeInfo with Severity, Category, and RelatedCodes fields if they don't already exist.
  4. Edge cases: Unknown issue code should print a helpful message ("Unknown issue code. Run 'plumber explain --list' to see all codes.").

Files Touched

  • cmd/explain.go (new command)
  • cmd/root.go (register new subcommand)
  • control/codes.go (optionally add Severity, Category, RelatedCodes fields to ErrorCodeInfo)

Why It's Valuable

Developer experience is a key adoption driver. When a pipeline fails due to a Plumber finding, the developer should be able to understand and fix the issue as fast as possible. A built-in explain command keeps them in the terminal flow, avoids context-switching to a browser, and works in air-gapped environments. This pattern is well-established: rustc --explain E0382, kubectl explain pod.spec, golangci-lint help linters.

Note: If you submit a PR for this feature, please keep "Allow edits from maintainers" enabled so we can collaborate more easily.

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions