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 are three different questions.¶
Lint is format. Check is bytes. Neither solves a stack.¶
Questions
What does
recipe formatchange, and what does it leave untouched?When does
recipe lintfail, and when is a finding only a report?What does
recipe checklook up in the robot thatlintnever opens?
What you will be able to do
Run the three recipe commands in the order the tutorial uses, and say which one is allowed to rewrite the file.
Given an E501 line-length finding, say whether
formatwill close it.Read a
recipe checkfailure and say whether the next move is a robot overlay or a metadata edit.
Before this page
Inspect writes a work queue, not a recipe: a planned bundle with an emitted
.eb.Testing, and the four things it can mean: EasyBuild’s own style check is a different tool.
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.
A
dependencieslist wraps past column 120.The same list, after wrapping, still reports E501 in CI.
FFTWis pinned to a version the upstream robot tree does not carry for this generation.configoptsis missing a flag the site requires on every MPI package.
Solution
recipe format. It rewrites physical lines. That is the mechanical close.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).recipe checkagainst the robot. It does not rewrite. The overlay or the stack policy is what changes, not the wrapping.recipe check --require-configopt FLAG. It does not rewrite. The flag is a check, not an edit.
What to remember
recipe formatrewrites physical lines and nothing else.recipe lintreports the same surface and does not write.recipe checkis the robot and metadata gate. A missing dependency stays a missing dependency.