Skip to content

Prepare the 1.4.0 release and stop the help text overclaiming - #4

Merged
thebenignhacker merged 3 commits into
mainfrom
chore/v1.4.0-release-prep
Jul 28, 2026
Merged

Prepare the 1.4.0 release and stop the help text overclaiming#4
thebenignhacker merged 3 commits into
mainfrom
chore/v1.4.0-release-prep

Conversation

@thebenignhacker

Copy link
Copy Markdown
Member

Cuts the changelog for 1.4.0 and corrects the capability claims the release test
found. No behaviour changes: finding sets are byte-identical to the pre-branch
binary on five real trees carrying 110, 995, 494, 633 and 461 findings.

The release test found four claims this build does not meet

Every one was reproduced by hand against both the 1.4.0 candidate and the
released 1.3.0 binary, and every one is present in 1.3.0, so none is new. They
are disclosed rather than fixed, because fixing them means changing detection
and this branch exists to ship the binary that was tested.

  • scan --help listed DSA under "Asymmetric algorithms". DSA.generate(2048)
    matches no pattern under any combination of flags. DSA is quantum vulnerable,
    so this is a false negative on the tool's core purpose.
  • The same list implied AES and SHA-256/384/512 were undetected, because a
    default scan reports none of them. They are detected and withheld as
    quantum-safe, which the help now says, naming the flag that shows them.
  • --context, --max-depth, --git-history and --group-by for severity,
    category and quantum are accepted and ignored. Measured: --context 0 and
    --context 8 both render three source lines either side; depths 0, 1, 2, 3
    and -1 scan the same six files; a repository whose MD5 and RC4 exist only in
    HEAD~1 reports neither with or without --git-history; and the three
    --group-by values produce output byte-identical to an invalid value.
  • The changelog's determinism claim was wider than the fix. Findings are in a
    stable order in every format, but the text report's "Categories Found" block
    is rendered from a map: six runs of the identical command produced six
    different hashes, on 1.3.0 and on this build.

A docs directory anywhere in the absolute path of the scan target also
suppresses the whole scan at exit 0, and an unreadable file is skipped in
silence. Both are in the known-limitations section with the counts a user can
check.

Also in this branch

  • gofmt on pkg/patterns/matcher.go, which the previous change left
    unformatted. There is no .golangci.yml, so gofmt is not among the default
    linters and CI did not catch it.
  • Copyright to 2025-2026 across 35 Go files, LICENSE, the Makefile and the
    version command, matching the sibling repositories.
  • .gitignore no longer lists editor assistant files; they are in
    .git/info/exclude.
  • 38 em-dashes removed from the README, the only file in the repository that
    had any, plus two pre-rename repository links and a subtitle that promised
    to find "every cryptographic algorithm".

Verification

  • CBOM validates against the official CycloneDX 1.6 schema and SARIF against
    official SARIF 2.1.0, both fetched upstream.
  • The version reported by version, JSON tool.version, SARIF
    driver.version and driver.semanticVersion, and CBOM
    metadata.tools[0].version are the same string.
  • The GoReleaser build runs clean for all six targets and its own ldflags path
    injects the version.
  • 23 of 23 help-listed flags parse.
  • Remote Git URL scanning reports 192 findings across 71 files on
    github.com/golang-jwt/jwt.

Cut the changelog's Unreleased section to 1.4.0 and record the limitations a
user will meet in this build but that this release does not fix, so the
release notes do not read wider than the change. The largest is a file filter
that tests the absolute path of the scan target, so a checkout under a
directory named docs scans zero files and exits 0. It is present in 1.3.0 as
well, and the changelog now says how to notice it.

No behaviour changes. Finding sets are identical to the pre-branch binary on
five real trees carrying 110, 995, 494, 633 and 461 findings.

The rest is hygiene the release surfaced:

- gofmt on pkg/patterns/matcher.go, which the previous change left unformatted.
  CI does not catch this: there is no .golangci.yml, so golangci-lint runs its
  defaults and gofmt is not among them.
- The copyright notice said 2025 on 35 Go files, LICENSE and the Makefile,
  while the repository has been edited through 2026. Now 2025-2026, matching
  the sibling repositories.
- .gitignore no longer lists editor assistant files. They are in
  .git/info/exclude, so nothing becomes committable, and a public repository
  should not carry the list.
- Remove 38 em-dashes. Label lists take a colon, prose takes a comma or a
  sentence break. No other file in the repository contained one.
- The toolkit section still linked the pre-rename csnp/qramm-cryptodeps and
  csnp/qramm-tls-analyzer, which resolve only through GitHub's redirect. The
  table at the top of the same file already used the canonical names.
- The subtitle said "Find every cryptographic algorithm in your codebase".
  The scanner has known coverage gaps and a path filter that can silence a
  whole scan, both recorded in the changelog, so "every" is not a claim this
  build meets. It now says "Inventory the cryptography in your codebase".

Also, the version command's copyright line said 2025 while the file headers
now say 2025-2026.

Verified: remote Git URL scanning, the README's headline capability, reports
192 findings across 71 files on github.com/golang-jwt/jwt. Finding sets remain
identical to the pre-branch binary on four real trees.
The fresh-user release test found four capability claims that are not true of
this build. Every one was reproduced by hand against the release binary and
against the released 1.3.0 binary, and all four are present in 1.3.0 as well,
so none is new. What is new is that this release claims to be the one where
outputs tell the truth, so shipping them undisclosed is not an option.

- scan --help listed DSA under "Asymmetric algorithms". DSA.generate(2048)
  matches no pattern under any combination of flags, including
  --include-quantum-safe, --verbose and --include-imports. DSA is quantum
  vulnerable, so this is a false negative on the tool's core purpose. The list
  no longer claims it, and the help says plainly that it is not detected,
  along with the whole-word matching that also misses RSAPrivateKey and
  AESCipher.

- The list also implied AES and SHA-256/384/512 were undetected, because a
  default scan reports none of them. They are detected and withheld as
  quantum-safe. The help now says that and names the flag.

- --context, --max-depth and --git-history are accepted and ignored. Measured:
  --context 0 and --context 8 both render three source lines either side;
  --max-depth 1 scans the same six files as unlimited; --git-history finds
  nothing in a repository whose MD5 and RC4 exist only in an earlier commit.
  --group-by is the same for severity, category and quantum, which produce
  output byte-identical to an invalid value. --group-by file works.

The changelog's determinism claim was also wider than the fix. The findings
are in a stable order in every format, but the text report's "Categories
Found" block is rendered from a map and differs on every run: six runs of the
identical command produced six different hashes, on 1.3.0 and on this build.
Anyone diffing a saved text report was being promised something untrue. The
claim is now scoped and the limitation is recorded.

The known-limitations section also gained the silent skip of unreadable files,
the silently ignored malformed .cryptoscan.yaml, and the streaming total that
disagrees with the final total.

No behaviour changes. Finding sets identical to the pre-branch binary on five
real trees carrying 110, 995, 494, 633 and 461 findings.
@thebenignhacker
thebenignhacker merged commit 11f0e46 into main Jul 28, 2026
4 checks passed
@thebenignhacker
thebenignhacker deleted the chore/v1.4.0-release-prep branch July 28, 2026 18:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant