Skip to content

refactor(abstractions)!: remove the 3 never-thrown ABI exception types (rec #3) - #228

Merged
thiagoluga merged 1 commit into
masterfrom
refactor/remove-dead-abi-exceptions
Jul 30, 2026
Merged

refactor(abstractions)!: remove the 3 never-thrown ABI exception types (rec #3)#228
thiagoluga merged 1 commit into
masterfrom
refactor/remove-dead-abi-exceptions

Conversation

@thiagoluga

Copy link
Copy Markdown
Owner

Third maintainer-decision recommendation. Maintainer chose: remove (breaking, next major).

The finding

BatchFailedException, SourceFailedException and ThresholdExceededException are declared in the frozen NeoReports.Abstractions ABI but never thrown anywhere in the codebase. The pipeline reports batch/source/threshold failures through ReportRunResult.Status + its error string and the IFailureStrategy decision — not by throwing. So they were dead surface in a contract meant to be minimal (rule 7: every unused type is a liability locked in by SemVer), and the "typed error" contract they implied was a mirage: a consumer's catch (BatchFailedException) could never fire.

Decision

Per the maintainer's call, removed — over the alternatives of retaining-and-documenting (leaves the liability) or making-them-real (throwing would contradict the deliberate result-based run contract and break every consumer that checks result.Status).

NeoReportsException (the base, carrying the stable Code) and ConfigurationException are unchanged and still used.

Breaking-change handling

Source-breaking for any consumer that referenced those three types — though nothing ever threw them, so no catch for them could have fired. Slated for the next major; recorded in CHANGELOG.md under Unreleased → Removed (which now also summarizes the audit's Added/Changed/Fixed entries).

Verification

  • grep across src/tests/samples/benchmarks: zero references to the three types.
  • dotnet build --no-incremental (full solution): 0 warnings, 0 errors — confirms nothing referenced them.

Rec #1 (streaming XLSX, #226) and #2 (auth warning, #227) merged. This is #3. Next: retry default (#4), whole-job deadline + async error scrub (#5), and the minor items (#6).

…iled/ThresholdExceeded exceptions

BatchFailedException, SourceFailedException and ThresholdExceededException were
declared in the frozen Abstractions ABI but never thrown anywhere: the pipeline
reports a batch/source/threshold failure through ReportRunResult.Status + its
error string and the IFailureStrategy decision, not by throwing. As dead surface
in a contract that is meant to be minimal (rule 7), they were a liability locked
in by SemVer, and their documented "typed error" contract was a mirage — a
consumer's catch for them could never fire.

Removed. NeoReportsException (the base, carrying the stable Code) and
ConfigurationException are unchanged and still used. A full solution build
confirms nothing referenced the removed types.

BREAKING (Abstractions): source-breaking for any consumer that referenced those
three types; slated for the next major. Recorded in CHANGELOG under Unreleased →
Removed. Maintainer decision (2026-07-30) to remove rather than retain-and-document
or make-real (throwing would contradict the result-based run contract).
@sonarqubecloud

Copy link
Copy Markdown

@sonarqubecloud

Copy link
Copy Markdown

@thiagoluga
thiagoluga merged commit 50d2a4a into master Jul 30, 2026
5 of 6 checks passed
@thiagoluga
thiagoluga deleted the refactor/remove-dead-abi-exceptions branch July 30, 2026 14:06
thiagoluga added a commit that referenced this pull request Jul 30, 2026
…pers (CA1068) (#234)

`AdoSourceHealth.PingAsync`, `AdoSourceHealth.CheckConnectionStringAsync` and
`HttpHealthProbe.SendAsync` had the token mid-list, before a trailing optional
`pingSql`/`content` argument. Move it to last (defaulted) and update all callers.

Positional callers that passed the token before the optional arg are
source-breaking, so this is tagged next-major in the CHANGELOG (Changed →
breaking, public API) alongside the #228 ABI-exception removal. Resolves the
CA1068 backlog item in docs/STATUS-AND-BACKLOG.md.
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