From 4b4d0c491ca87ec284269e7b838b075b27ee116a Mon Sep 17 00:00:00 2001 From: Willem van den Ende Date: Mon, 26 Oct 2026 20:02:45 +0000 Subject: [PATCH] app: exclude embed_templates wrappers and the release-only Application Raises the measured total 86.17% -> 86.79% without touching a test, because the excluded modules hold no behavior a test can observe: - FirehoseWeb.{Blog,UserRegistration,UserSettings}HTML are `use` + `embed_templates` only; every function in them is macro-generated. Their TEMPLATES are already exercised through the controller tests. - Firehose.Application: start/2 is proven by the suite booting at all, and config_change/3 runs only on a release hot upgrade. Deliberately NOT excluded, despite being embed_templates wrappers: FirehoseWeb.PageHTML (blog_label/1, post_base_path/1) and FirehoseWeb.UserSessionHTML (local_mail_adapter?/0) carry real private logic, so their sub-100% coverage is a behavior gap for the controller/auth yak, not macro noise. Also drops the now-dead Firehose.Checks.NoConnShadowing entry: lib_dev/ is no longer compiled, so it is not measurable. Floor stays 86 (86.79 rounds down). --- app/mix.exs | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/app/mix.exs b/app/mix.exs index c1bdc1a..b091dd1 100644 --- a/app/mix.exs +++ b/app/mix.exs @@ -114,9 +114,11 @@ defmodule Firehose.MixProject do # not the floor. # # Measured 2026-10-26 (PostgreSQL on localhost:5432, exclusions below): - # 86.17%, identical via `mix test --cover` and via - # `mix test --cover --export-coverage default` + `mix test.coverage`, and - # stable across seeds. Floor is the integer below that. + # 86.79% after the last exclusion revision (86.17% before excluding the + # embed_templates wrappers and Firehose.Application), identical via + # `mix test --cover` and via `mix test --cover --export-coverage default` + + # `mix test.coverage`, and stable across seeds. Floor is the integer below + # that — so a floor of 86 means "at least 86.00%". # # `test.coverage` deletes stale exports before sampling: `mix test.coverage` # imports *every* .coverdata it finds, so leftover exports from earlier runs @@ -133,15 +135,31 @@ defmodule Firehose.MixProject do # FirehoseWeb.ErrorJSON Phoenix.Controller.status_message_from_template/1 # * FirehoseWeb the `use FirehoseWeb` macro: imports and aliases # only, nothing that executes + # * embed_templates wrappers FirehoseWeb.BlogHTML, + # FirehoseWeb.UserRegistrationHTML, + # FirehoseWeb.UserSettingsHTML: each is `use` + + # `embed_templates`, so every function in them is + # generated by the macro. Their TEMPLATES are + # exercised through the controller tests; the + # wrapper modules hold no hand-written code. + # NOTE: PageHTML and UserSessionHTML are + # deliberately NOT excluded — both carry private + # helpers with real logic (blog_label, + # post_base_path, local_mail_adapter?), so their + # gaps are behavior gaps, not macro noise. + # * Firehose.Application start/2 is proven by the suite booting at all (a + # broken supervision tree fails every test), and + # config_change/3 only runs on a release hot + # upgrade, which no test can reach. # * Firehose.Release production release tasks (`mix ecto.migrate` on # Dokku); the suite never runs them - # * Firehose.Checks.NoConnShadowing - # lib_dev credo check, exercised by `mix credo` - # and not by tests # * test scaffolding Firehose.DataCase, FirehoseWeb.ConnCase, # Firehose.AccountsFixtures, Firehose.Test.FakeBlog: # fixtures measure the tests, not the app # + # `Firehose.Checks.NoConnShadowing` needs no entry: lib_dev/ is no longer in + # elixirc_paths (credo loads it from source), so it is not measurable here. + # # Everything else counts — CoreComponents, controllers, LiveViews included: # that is where the behavior-test work shows up as a higher floor. defp test_coverage do @@ -151,11 +169,14 @@ defmodule Firehose.MixProject do Firehose.Repo, Firehose.Mailer, Firehose.Release, + Firehose.Application, FirehoseWeb, FirehoseWeb.Telemetry, FirehoseWeb.ErrorHTML, FirehoseWeb.ErrorJSON, - Firehose.Checks.NoConnShadowing, + FirehoseWeb.BlogHTML, + FirehoseWeb.UserRegistrationHTML, + FirehoseWeb.UserSettingsHTML, Firehose.DataCase, FirehoseWeb.ConnCase, Firehose.AccountsFixtures,