Skip to content

Add enterprise welcome message - #2784

Merged
kevinmessiaen merged 13 commits into
mainfrom
add-enterprise-welcome-message
Aug 24, 2026
Merged

Add enterprise welcome message#2784
kevinmessiaen merged 13 commits into
mainfrom
add-enterprise-welcome-message

Conversation

@alexcombessie

@alexcombessie alexcombessie commented Aug 20, 2026

Copy link
Copy Markdown
Member

Description

Adds a one-time Giskard Enterprise welcome message when suites or scans run interactively. It is suppressed in CI, pytest, and non-interactive environments, and users can disable it with GISKARD_HIDE_WELCOME.

Shared environment helpers now centralize this detection and telemetry environment classification.

Related Issue

N/A

Type of Change

  • 📚 Examples / docs / tutorials / dependencies update
  • 🔧 Bug fix (non-breaking change which fixes an issue)
  • 🥂 Improvement (non-breaking change which improves an existing feature)
  • 🚀 New feature (non-breaking change which adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to change)
  • 🔐 Security fix

Coding agents

Autonomous agents with no human in the loop must read AUTONOMOUS.md before opening a PR.

PR title: agent-opened PRs must end the title with 🤖🤖🤖🤖 (exactly four robot emojis). Do not omit — that suffix is how the expedited agent PR workflow picks up the PR.

Checklist

  • I've read the CODE_OF_CONDUCT.md document.
  • I've read the CONTRIBUTING.md guide.
  • I've written tests for all new methods and classes that I created.
  • I've written the docstring in NumPy format for all the methods and classes that I created or modified.
  • I've updated the uv.lock running uv lock (only applicable when pyproject.toml has been modified)

Shown once per process whenever giskard.core is imported (which every
Giskard package pulls in), pointing new OSS users at the enterprise
offering.
@alexcombessie alexcombessie added this to the V3-RC milestone Aug 20, 2026
cursor Bot pushed a commit that referenced this pull request Aug 24, 2026
Stacked on #2784 — replaces the import-time print with the gated
maybe_show_welcome() path on Suite.run().

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>
…-3721)

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>
cursor Bot pushed a commit that referenced this pull request Aug 24, 2026
Stacked on #2784 — replaces the import-time print with the gated
maybe_show_welcome() path on Suite.run().

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>
* docs(plans): add requirements plan for gated enterprise welcome message

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>

* feat(core): add gated enterprise welcome on suite run

Show a one-shot Enterprise message on stderr when Suite.run starts,
only in interactive environments. Suppress in CI, pytest, non-TTY
(non-notebook), or when GISKARD_HIDE_WELCOME is set. Scan entrypoints
inherit the hook via suite.run().

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>

* refactor(core): share environment detection and use settings for welcome

Extract CI, pytest, notebook, and truthy-env helpers into
giskard.core.environment for reuse by telemetry and welcome.
Add GiskardCoreSettings (GISKARD_HIDE_WELCOME) matching the checks
settings pattern.

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>

* refactor(core): simplify welcome gates and tests

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>

* refactor(core): remove import-time welcome in favor of gated suite hook

Stacked on #2784 — replaces the import-time print with the gated
maybe_show_welcome() path on Suite.run().

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>

* chore: drop requirements plan from stacked PR scope

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>

* fix(core): use ModuleType stubs in welcome environment tests

basedpyright rejects assigning object() into sys.modules; tests now
register types.ModuleType placeholders instead.

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>
Parse GISKARD_HIDE_WELCOME with telemetry truthy rules so empty or
invalid values cannot ValidationError-abort Suite.run, swallow banner
failures, spy-test the suite hook, and isolate giskard-core tests from
ambient GISKARD_* / cwd .env.

Co-authored-by: Kevin Messiaen <kevinmessiaen@users.noreply.github.com>
@kevinmessiaen
kevinmessiaen requested review from henchaves and removed request for kevinmessiaen August 24, 2026 07:28
@henchaves henchaves self-assigned this Aug 24, 2026
@alexcombessie

alexcombessie commented Aug 24, 2026

Copy link
Copy Markdown
Member Author

Hi @kevinmessiaen @henchaves

I saw the more advanced logic in [95b7219](95b7219) for deciding where the welcome message is displayed.

My preference would be to keep this simple:

  • Display the message when the library is initialized, across all environments, including setup, PyTest, and CI runs. Humans do frequently inspect CI or PyTest output (I do), so I believe those environments are relevant to include too in the display of this message
  • Keep the feature flag to disable it, but we don't need to document that flag for now.

I appreciate that you've extended the message to test runs, beyond the original scope I had in mind. I understand that showing it everywhere may feel much, but the goal is to help the 40K+ monthly active OSS users discover the Enterprise version. So it's OK to me, I actually appreciate this extension, thank you!

What do you think?

@@ -0,0 +1,34 @@
"""One-time enterprise welcome message for giskard-checks imports."""

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"""One-time enterprise welcome message for giskard-checks imports."""

import sys
from os import getenv

_TRUTHY_ENV_VALUES = frozenset({"1", "true", "yes", "on", "t", "y"})

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be imported from libs/giskard-core/src/giskard/core/telemetry/telemetry.py instead of defined



def _should_show_welcome() -> bool:
value = getenv("GISKARD_HIDE_WELCOME")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can generalize that for other messages in the future:

Suggested change
value = getenv("GISKARD_HIDE_WELCOME")
value = getenv("GISKARD_QUIET")

_shown = True
print(_WELCOME_MESSAGE, file=sys.stderr)
except Exception:
# Best-effort UX: never abort a suite or scan because the banner failed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Best-effort UX: never abort a suite or scan because the banner failed.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

update vars to be GISKARD_QUIET instead of GISKARD_HIDE_WELCOME

@kevinmessiaen
kevinmessiaen merged commit 6149532 into main Aug 24, 2026
28 of 50 checks passed
@kevinmessiaen
kevinmessiaen deleted the add-enterprise-welcome-message branch August 24, 2026 08:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

4 participants