Skip to content

feat: add feedback banner and issue links to lifecycle errors - #16

Merged
jrosskopf merged 4 commits into
mainfrom
feat/feedback-banner
Aug 7, 2026
Merged

feat: add feedback banner and issue links to lifecycle errors#16
jrosskopf merged 4 commits into
mainfrom
feat/feedback-banner

Conversation

@jrosskopf

@jrosskopf jrosskopf commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Scenario lifecycles interact with real schemas and constraints we cannot reproduce here, so the users who hit a problem are the only ones who can tell us what their setup looked like.

Part of a fleet-wide rollout using the shared DataZooDE/duckdb-extension-banner submodule. Same family as erpl-adt#36 (merged), erpl-tunnel#2, quack-oauth#12, erpl-idoc#7, erpl-rev#63, anofox-statistics#127.

What changed

Once-a-day banner on interactive load. Silent when piped, in notebooks, in CI and under the test runner — which is why no existing expected output changes.

Issue link on errors from the lifecycle entry pointsrefresh, list, merge, migrate — via DATAZOO_GUARD at their registration sites.

Invalid Input Error: Scenario 'nope' not found
-> Unexpected? Please report it: https://github.com/DataZooDE/anofox-scenario/issues

The scan/bind pointers reach the registration helpers as runtime parameters, so they are guarded where they are named rather than inside the helper.

Errors DuckDB raises before dispatch (binder, catalog, arity) are left unannotated; they are not ours. feedback.test pins this.

One CMake detail worth noting

DATAZOO_BANNER_TELEMETRY follows TELEMETRY_SUPPORTED and is set after that variable is computed. Placing the block earlier (where the include directories live) silently read an empty value and would have disabled banner_shown on every platform while still looking correct.

Verified

  • Banner once interactively, silent on repeat, silent when piped
  • Error footer with the original diagnostic intact
  • 1149 assertions in 27 cases pass, plus the new feedback.test (5 assertions)

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Scenario lifecycles interact with real schemas and constraints we cannot
reproduce here, so the users who hit a problem are the only ones who can
tell us what their setup looked like. Two surfaces now point at the
tracker.

A once-a-day banner on interactive load, from the shared
DataZooDE/duckdb-extension-banner submodule. Silent when piped, in
notebooks, in CI and under the test runner, so no existing expected
output changes.

An issue link on errors from the lifecycle entry points -- refresh, list,
merge and migrate -- via DATAZOO_GUARD at their registration sites. The
scan/bind pointers reach the registration helpers as runtime parameters,
so they are guarded where they are named rather than inside the helper.

Errors DuckDB raises before dispatch -- binder, catalog, arity -- are
left unannotated; they are not ours. feedback.test pins that.

The banner's telemetry flag follows TELEMETRY_SUPPORTED and is set after
that variable is computed: placing it earlier silently read an empty
value and would have disabled banner_shown on every platform.

Suite green: 1149 assertions in 27 cases.
jrosskopf and others added 3 commits August 6, 2026 16:26
The banner library declared INTERFACE cxx_std_17. That propagates through
the extension target into DuckDB's own tools/plan_serializer, which then
compiles as C++17 while libduckdb_static stays C++11 --
BufferedFileWriter::DEFAULT_OPEN_FLAGS ends up COMDAT-weak on one side
and strong on the other, and the link fails with a multiple definition
error. anofox-statistics CI caught it; the declaration has been removed
upstream since every consumer already builds at C++17.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
It sat inside #ifdef HAS_POSTHOG_TELEMETRY, so any build without
telemetry -- MinGW, wasm, cross-compiled macOS -- would not see
datazoo::ShowBanner at all and fail to compile. Local builds have
telemetry on, which is why this passed here.

Same mistake as the erpl-tunnel SSH-only break: an include placed after
the last #include in the file rather than at genuine top level.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
On MinGW the 'struct _stat64' tag hides the function of the same name in
C++, so the banner's _stat64 call parsed as a constructor and every
rtools/MinGW Windows job failed to compile. The shared library now uses
plain stat() everywhere except MSVC.

Caught by anofox-similarity CI, which builds windows_amd64_rtools.
@jrosskopf
jrosskopf merged commit 8ed4eff into main Aug 7, 2026
45 checks passed
@jrosskopf
jrosskopf deleted the feat/feedback-banner branch August 7, 2026 11:37
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