Format, lint, and check are three different questions

Questions

  • What does recipe format change, and what does it leave untouched?

  • When does recipe lint fail, and when is a finding only a report?

  • What does recipe check look up in the robot that lint never opens?

What you will be able to do

  1. Run the three recipe commands in the order the tutorial uses, and say which one is allowed to rewrite the file.

  2. Given an E501 line-length finding, say whether format will close it.

  3. Read a recipe check failure and say whether the next move is a robot overlay or a metadata edit.

Before this chapter

The tutorial’s next commands after a successful plan are not campaign run. The following three commands, in this order, are:

RECIPE="$BUNDLE/easyconfigs/e/eOn/eOn-2.16.0-foss-2026.1.eb"

eb-stack recipe format "$RECIPE"
eb-stack recipe lint "$RECIPE"
eb-stack recipe check \
  --recipe "$RECIPE" \
  --easyconfigs "$ROBOT" \
  --easyconfigs /tmp/eb-stack/overlay \
  --easyconfigs "$BUNDLE/easyconfigs"

eb-stack ports a recipe and bumps one is named lint and check and skips format. The three are not aliases.

Format rewrites physical lines

The recipe format executes deterministic physical-line wrapping. This constitutes the entire contract. Product configuration, source selection, checksums, patches, and sanity paths remain as authored.

eb-stack recipe format RECIPE.eb
eb-stack recipe format RECIPE.eb --dry-run
eb-stack recipe format RECIPE.eb --out FORMATTED.eb

When --out is omitted, the file is rewritten in place. --dry-run prints the wrapping and leaves the file unchanged. E501 in EasyBuild style is the line‑length warning that this command is intended to resolve. It is the mechanical residual of Inspect writes a work queue, not a recipe, where the residual is “the emitter wrapped a list past the column”. It is not eb --check-style. It is not an opinion about configopts. A format run that changes a checksum or a patch order constitutes a bug in the formatter, not a feature.

Lint reports; it does not repair

The recipe lint command traverses the same E501 surface and outputs findings. It does not modify files. Multiple files can be supplied in a single invocation. A clean lint result does not serve as a packaging gate. The report indicates whether format has any remaining actions or none.

Check is the robot question

The recipe check opens other files.

eb-stack recipe check \
  --recipe RECIPE.eb \
  --easyconfigs UPSTREAM \
  [--easyconfigs OVERLAY]... \
  [--require-configopt FLAG]... \
  [--metadata-only]

Failure occurs when package metadata, checksum structure, required configuration flags, or robot dependencies are invalid. Missing dependencies remain missing. The command does not create placeholder recipes. --metadata-only skips the robot walk when the file itself is the question. The structured result lists each dependency and indicates whether a matching easyconfig exists in the overlay order. Later --easyconfigs paths override earlier ones for the same name, version, toolchain, and versionsuffix, following the same rule used by stack solve. A check failure reporting an absent dependency is not a format problem. It indicates either a missing overlay (the eOn core-guard recipes reside in fixtures/eon_core_rgpot/easyconfigs/ for this reason) or a stack-policy pin that selected a candidate the robot does not possess. The subsequent command is not recipe format. The maintainer fixtures under fixtures/maintainer_*/ constitute the other half of the check: fat vs thin, a cross-generation pin, a shell-monster, a patchelf RPATH. Those represent recipe check plus the maintainer-acceptability gate, not lint.

EB-Recipe-1 — Which command

Four observations. Name the command that addresses each one, and say whether it rewrites the .eb.

  1. A dependencies list wraps past column 120.

  2. The same list, after wrapping, still reports E501 in CI.

  3. FFTW is pinned to a version the upstream robot tree does not carry for this generation.

  4. configopts is missing a flag the site requires on every MPI package.

Solution
  1. recipe format. It rewrites physical lines. That is the mechanical close.

  2. recipe lint. It does not rewrite. If it still reports E501 after format, the line is not a wrapping problem (a long URL with no break point, or a finding format does not own).

  3. recipe check against the robot. It does not rewrite. The overlay or the stack policy is what changes, not the wrapping.

  4. recipe check --require-configopt FLAG. It does not rewrite. The flag is a check, not an edit.

What to remember

  • recipe format rewrites physical lines and nothing else.

  • recipe lint reports the same surface and does not write.

  • recipe check is the robot and metadata gate. A missing dependency stays a missing dependency.