Codumentor logo Codumentor

EULA Plugin

The EULA plugin shows an End-User License Agreement on first login and
blocks the rest of the app until the user accepts it. Acceptance is
recorded per user and persists until the EULA version is bumped.

It is built on the User Gates capability — see that
page for the full manifest schema, runtime-enqueue API, and acceptance
semantics. This page documents only the EULA-specific configuration.

Configuration

plugins:
  - module: "codumentor.plugins.eula"
    class: "EulaPlugin"

Disabled by default in shipped configs; opt-in via the snippet above.

Optional args

ArgDefaultDescription
version"v1"Opaque string. Bump this to re-prompt every user (e.g. after the legal text changes).
title"End-User License Agreement"Modal header text.
content_path"EULA.md"Path to the markdown file rendered inside the modal. Relative paths resolve against the plugin's package directory. Pass an absolute path (e.g. /etc/codumentor/eula.md) to ship deployment-specific text without forking the plugin.
priority10Lower = shown first when multiple gates are pending. Default keeps EULA in front of policy updates and ack prompts.
audienceunset (auto-instance for everyone)Restrict who sees the EULA. See audience filters. Set audience: {} to make this template runtime-only (useful for e2e tests).

Example: deployment-specific EULA text

plugins:
  - module: "codumentor.plugins.eula"
    class: "EulaPlugin"
    args:
      version: "2026-q2"
      title: "Acme Corp Terms of Service"
      content_path: "/etc/codumentor/acme-eula.md"

Flow

  1. On first authenticated request, the frontend fetches /ui/user/pending-gates. The EULA gate is pending because no acceptance row exists.
  2. The modal renders the bundled (or configured) markdown over the chat UI; the underlay is non-interactive.
  3. Clicking I accept posts to /ui/user/gates/eula.terms/accept with the current version. Core writes a row to user_acceptances and removes any runtime row in one transaction.
  4. Subsequent requests skip the modal until the configured version changes.

Updating the EULA text

Edit the markdown file referenced by content_path (default:
src/codumentor/plugins/eula/EULA.md) and bump version in the plugin
args. The version bump is what re-prompts users — markdown changes
without a version bump will go unnoticed by anyone who has already
accepted.

See also