Skip to content

chore(deps): let cowboy come from nova - #411

Merged
Taure merged 1 commit into
mainfrom
chore/cowboy-from-nova
Aug 7, 2026
Merged

chore(deps): let cowboy come from nova#411
Taure merged 1 commit into
mainfrom
chore/cowboy-from-nova

Conversation

@Taure

@Taure Taure commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

cowboy became a direct dependency in #234 to force a patched 2.18 past nova's exact 2.15.0 pin, which was vulnerable to CVE-2026-43966. nova 0.15.3 pins 2.18.0 itself, so the override has done its job.

Why this matters beyond tidiness

nova pins cowboy exactly ({cowboy, "2.18.0"}), not as a range. A direct constraint in asobi therefore has only two outcomes: it agrees with nova and is redundant, or it disagrees and either breaks the build or wins and hands nova a cowboy it was never tested against. nova is the code calling cowboy's internals; asobi only borrows the Req nova hands it. So nova owns the version.

Nothing about the running code changes

cowboy still resolves to 2.18.0, now transitively at depth 1 rather than declared at depth 0. rebar3 audit reports no vulnerabilities across all 21 dependencies.

Correction to the original description

This PR originally said asobi calls cowboy_req "186 times". That number was wrong - it came from a grep that also matched the cowboy_req:req() type in -spec annotations. The accurate figures:

  • 149 are cowboy_req:req() type annotations, required because nova_plugin's callbacks are themselves declared in terms of cowboy_req:req()
  • 34 are real calls, in 11 modules

The conclusion is unchanged - this is not dropping an unused dependency - but the scale is much smaller than stated. Every REST controller is Nova-clean with zero cowboy calls. The 34 are concentrated in plugins (14, because nova_plugin:pre_request/4 has no way to send a response), the ops/console session and CSRF cookie handling (16), and three small helpers (4).

cowboy was never in asobi.app.src's applications list, so start order is unaffected.

Verification

Clean _build:

  • eunit 1661 tests, 0 failures
  • ct 341 tests, 0 failures, against Postgres 17
  • rebar3 audit: no vulnerabilities in 21 deps
  • xref, dialyzer, fmt --check clean

cowboy became a direct dependency in #234 to force a patched 2.18 past
nova's exact 2.15.0 pin, which was vulnerable to CVE-2026-43966. nova
0.15.3 pins 2.18.0 itself, so the override has done its job and asobi
should not be second-guessing which cowboy its web framework runs on.

cowboy still resolves to 2.18.0, now transitively at depth 1 rather than
declared at depth 0, so nothing about the running code changes and the
CVE stays fixed. rebar3 audit reports no vulnerabilities across all 21
dependencies.

asobi does call cowboy_req directly, 186 times, so this is not a case of
dropping something unused. It is that nova pins cowboy exactly, which
leaves a direct constraint here redundant when it agrees and a build
failure when it does not.

Verified on a clean _build: eunit 1661 tests, ct 341 tests against
Postgres 17, plus audit, xref, dialyzer and fmt.
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

🟡 Code Coverage — 75.7%

6862 of 9070 lines covered.

@Taure
Taure merged commit 40f98a1 into main Aug 7, 2026
15 checks passed
@Taure
Taure deleted the chore/cowboy-from-nova branch August 7, 2026 08:49
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