Format, lint and check are three different questions

format, lint, and check are three different questions

Format asks about layout. Lint asks about local rules. Check asks whether the file can build.

format, lint, and check

Format, lint and check are three different questions.

style lint and checksum check are two commands

Lint is format. Check is bytes. Neither solves a stack.

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 page

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. eb-stack bumps the lint component. eb-stack bumps the check component. eb-stack skips the format component. The three components are not aliases.

Format rewrites physical lines

The recipe format performs deterministic physical‑line wrapping. Nothing else changes. 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

Omit --out to rewrite the file in place. Use --dry-run to print the wrapping while leaving the file unchanged. E501 in EasyBuild style indicates the line‑length warning that this command resolves. The mechanical residual from Inspect is “the emitter wrapped a list past the column”. The output does not correspond to eb --check-style. The output does not reflect an opinion about configopts. A format run that changes a checksum or a patch order is a bug in the formatter.

Lint reports; it does not repair

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 are recipe check plus the maintainer-acceptability check, which lint does not cover.

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.