Rules / GRN-E004
GRN-E004 unpinned-requirement
| Default severity | info |
| Kind | absolute rule: fires on the new version alone, whatever the trusted version looked like. |
| Status | Specified for 1.0, not yet implemented |
What it checks
A line in a requirements file isn't pinned to one version (== with a full version).
Why it matters
Garnet Guard compares the version you had with the version you're getting. With a range, there is no single candidate to compare, and the version installed can change without a diff anyone reviews.
Example finding
Illustrative. The rule is specified but not yet implemented.
requirements.txt: INFO
INFO GRN-E004 unpinned-requirement: examplelib>=2.6 is not pinned
- requirements.txt:7
How to resolve it
Pin the requirement, or move to a lockfile (uv.lock, poetry.lock or pylock.toml).
uv pip compile and pip-compile turn a requirements file into a pinned one.
Allowlisting
This rule reports at info, which doesn't change the verdict. To hide it, turn it off
in policy:
[garnet.rules]
"GRN-E004" = "off"
Suppressed findings still appear in JSON and SARIF output, marked with the ignore that
matched. The policy format is in SPEC §7; 0.1's garnet diff
doesn't read policy files yet.