v0.156.1

plain-flags changelog

0.37.1 (2026-08-02)

What's changed

  • Flag.description now declares default="" explicitly, matching the plain-postgres 0.113.0 optional-string idiom (required=False, default=""). The column DEFAULT is applied by convergence on the next plain postgres sync — no migration needed. (2a86968e5a)

Upgrade instructions

  • No changes required.

0.37.0 (2026-06-22)

What's changed

  • Collapsed the migration history into a single fresh 0001_initial. The database schema is unchanged — only the migration files were squashed. (802f2d87)

Upgrade instructions

  • Run plain migrations prune after upgrading to clear the now-orphaned history records for this package's old migrations. No SQL runs — it only cleans up migration-history records and is safe and idempotent. If migrations prune is already part of your deploy steps, no action is needed.

0.36.7 (2026-05-25)

What's changed

  • Internal: model field declarations updated for plain.postgres's new parameterized-descriptor field typing. (229ecdbbfa)

Upgrade instructions

  • No changes required.

0.36.6 (2026-05-05)

What's changed

  • Exposes __version__ from importlib.metadata on plain.flags for version probes that don't want to scrape pip metadata. (c6cf6edb)

Upgrade instructions

  • No changes required.

0.36.5 (2026-04-30)

What's changed

  • Switched the flag-result admin form to use <admin.Submit> so the Save button picks up the new admin-btn admin-btn-primary styling under plain-admin 0.81.0's namespaced classes. (5f86c86fb7e9)

Upgrade instructions

  • If you use plain.admin, upgrade it to >=0.81.0 alongside this release for the namespaced admin- CSS classes referenced by the flag-result template.

0.36.4 (2026-04-27)

What's changed

  • Aligned flag-evaluation result.reason with the OpenTelemetry semconv. Cached evaluations now report targeting_match instead of static. Per the spec, targeting_match is "dynamic evaluation, such as a rule or specific user-targeting" — which is what get_value() does — and static would mean "no dynamic evaluation," which doesn't apply. The feature_flag.key span attribute is also now set in the disabled / no-key paths so dashboards filtering by key see every evaluation. (db810e131499)

Upgrade instructions

  • If you alert or filter on feature_flag.result.reason == "static", update those queries to look for "targeting_match" instead.

0.36.3 (2026-04-23)

What's changed

  • Declared plain.postgres as a runtime dependency (previously listed only in dev dependencies). The flag models use the PostgreSQL backend, so it must be installed for the package to work at runtime. (1a9050fc42e0)

Upgrade instructions

  • No changes required.

0.36.2 (2026-04-17)

What's changed

  • Updated Flag and FlagResult timestamps to use DateTimeField(create_now=True) / (create_now=True, update_now=True) for plain-postgres 0.96.0. (5d145e4, a44e5ec, 091bac7)

Upgrade instructions

  • Requires plain-postgres>=0.96.0. Run plain postgres sync after upgrading to reconcile column defaults.

0.36.1 (2026-03-29)

What's changed

  • Removed AddConstraint operation from migrations — constraints are now managed by convergence. (1f15538b008f)

Upgrade instructions

  • No changes required.

0.36.0 (2026-03-28)

What's changed

  • Replaced CharField with TextField in models and migration files to match plain-postgres 0.90.0 (5062ee4dd1fd)

Upgrade instructions

  • Requires plain-postgres>=0.90.0
  • Replace CharField with TextField in migration files that reference this package's models

0.35.0 (2026-03-25)

What's changed

  • Removed db_index=False from FlagResult.flag FK field — the db_index parameter no longer exists on ForeignKeyField. The flag FK is already covered by the UniqueConstraint on ["flag", "key"]. (061b97f5d538)

Upgrade instructions

  • Requires plain-postgres>=0.89.0. Run uv run plain postgres migrate.

0.34.2 (2026-03-25)

What's changed

  • Removed duplicate FK index on FlagResult.flag — the auto-created FK index was redundant with an existing composite index. Adds migration to set db_index=False (262ad569d5df)

Upgrade instructions

  • Run uv run plain postgres migrate to apply the migration.

0.34.1 (2026-03-22)

What's changed

  • Switched from plain.postgres.db.OperationalError/ProgrammingError to psycopg.OperationalError/psycopg.ProgrammingError directly (d4b170e60a2c)

Upgrade instructions

  • No changes required.

0.34.0 (2026-03-12)

What's changed

  • Updated all imports from plain.models to plain.postgres in admin, models, preflight, utils, and migrations.
  • Updated pyproject.toml dev dependency from plain.models to plain.postgres.

Upgrade instructions

  • Update imports: from plain.models to from plain.postgres, from plain import models to from plain import postgres.
  • Update dependency declarations: plain.models to plain.postgres in pyproject.toml.

0.33.4 (2026-02-26)

What's changed

  • Auto-formatted config files with updated linter configuration (028bb95c3ae3)

Upgrade instructions

  • No changes required.

0.33.3 (2026-02-12)

What's changed

  • Fixed missing template_name on FlagResult admin UpdateView (ee27ad10c407)

Upgrade instructions

  • No changes required.

0.33.2 (2026-02-04)

What's changed

  • Added __all__ exports to exceptions and models modules for explicit public API boundaries (f26a63a5c941)

Upgrade instructions

  • No changes required.

0.33.1 (2026-01-28)

What's changed

Upgrade instructions

  • No changes required.

0.33.0 (2026-01-15)

What's changed

  • Admin Card now uses get_metric() instead of get_number() to follow the updated Card API (1a1c622)
  • Added descriptions to admin list views for Flag and FlagResult models (0fc4dd3)
  • Changed FlagResult nav icon from "flag" to "check2-square" (0fc4dd3)

Upgrade instructions

  • If you have custom Card subclasses, rename get_number() to get_metric()

0.32.0 (2026-01-13)

What's changed

  • Improved README documentation with expanded examples, FAQs section, and clearer explanations (da37a78)

Upgrade instructions

  • No changes required

0.31.0 (2025-11-21)

What's changed

  • ForeignKey has been renamed to ForeignKeyField in model definitions and migrations (8010204)

Upgrade instructions

  • No changes required

0.30.1 (2025-11-17)

What's changed

  • Model query attributes no longer use ClassVar type annotations, reverting to standard type annotations for better compatibility (1c624ff)

Upgrade instructions

  • No changes required

0.30.0 (2025-11-13)

What's changed

  • Model query attributes now use ClassVar type annotations for better type checker support (c3b00a6)

Upgrade instructions

  • No changes required

0.29.0 (2025-11-13)

What's changed

  • Model field definitions now use type stubs with types.Field syntax instead of direct models.Field assignment for better type checker support (c8f40fc)

Upgrade instructions

  • No changes required

0.28.0 (2025-11-12)

What's changed

  • The Flag class is now an abstract base class with get_key() and get_value() marked as abstract methods (24fe1f3)

Upgrade instructions

  • No changes required

0.27.3 (2025-11-11)

What's changed

  • Internal import path updated for database exceptions to use plain.models.db (e9edf61)

Upgrade instructions

  • No changes required

0.27.2 (2025-10-31)

What's changed

  • Package metadata now includes explicit BSD-3-Clause license field (8477355)

Upgrade instructions

  • No changes required

0.27.1 (2025-10-20)

What's changed

  • Build configuration updated to use standardized [dependency-groups] instead of [tool.uv] for dev dependencies (1b43a3a)

Upgrade instructions

  • No changes required

0.27.0 (2025-10-12)

What's changed

  • The unused flags preflight check has been refactored from a model method into an independent PreflightCheck class registered with @register_check (38b43f3)

Upgrade instructions

  • No changes required

0.26.0 (2025-10-07)

What's changed

  • Model definitions now use model_options = models.Options() instead of class Meta: (17a378d, 73ba469)
  • Internal model metadata access updated to use model_options and _model_meta properties (73ba469)

Upgrade instructions

  • No changes required

0.25.3 (2025-10-06)

What's changed

  • Added comprehensive type annotations throughout the package to improve IDE and type checker support (f05463f)

Upgrade instructions

  • No changes required

0.25.2 (2025-10-02)

What's changed

  • Updated README documentation to use get_current_user() instead of request.user in template examples (f6278d9)

Upgrade instructions

  • No changes required

0.25.1 (2025-09-29)

What's changed

  • Fixed the admin interface for unused flags to display the fix field instead of message field in PreflightResult (b75a38d)

Upgrade instructions

  • No changes required

0.25.0 (2025-09-26)

What's changed

  • Removed unused uuid fields from Flag and FlagResult models along with their associated unique constraints (331ce37)

Upgrade instructions

  • No changes required

0.24.0 (2025-09-25)

What's changed

  • The Flag.check() method has been renamed to Flag.preflight() to align with the new preflight system (b0b610d)
  • Preflight results now use the new PreflightResult class instead of Info (b0b610d)
  • Database connection errors are now handled more gracefully during preflight checks by catching both ProgrammingError and OperationalError (b0b610d)
  • Preflight result messages and hints have been unified into a single fix field (c7cde12)

Upgrade instructions

  • No changes required

0.23.0 (2025-09-12)

What's changed

  • Updated model API to use .query instead of .objects for database operations (037a239)
  • Minimum Python version requirement increased to 3.13 (d86e307)
  • Admin navigation icon updated from "flag-fill" to "flag" (2aac07d)

Upgrade instructions

  • No changes required (the .objects to .query change is handled internally by the framework)

0.22.0 (2025-08-19)

What's changed

  • Removed manual CSRF token from admin flag result form template, now handled automatically by Sec-Fetch-Site headers (9551508)
  • Updated README with better structure, table of contents, and improved installation instructions (4ebecd1)

Upgrade instructions

  • No changes required

0.21.1 (2025-07-23)

What's changed

  • Admin navigation now includes Bootstrap icons for Flag and FlagResult sections (9e9f8b0)

Upgrade instructions

  • No changes required

0.21.0 (2025-07-22)

What's changed

  • Updated model migrations to use PrimaryKeyField() instead of BigAutoField(auto_created=True, primary_key=True) (4b8fa6a)
  • Model key coercion now uses id instead of deprecated pk alias when generating flag keys (4b8fa6a)

Upgrade instructions

  • No changes required

0.20.0 (2025-07-18)

What's changed

  • Added OpenTelemetry tracing support to flag evaluation with detailed spans and attributes (b0224d0)

Upgrade instructions

  • No changes required

0.19.0 (2025-07-18)

What's changed

  • Migrations have been restarted and consolidated into a single initial migration (484f1b6)

Upgrade instructions

  • Run plain migrate --prune plainflags to clean up old migrations when upgrading from a previous version

0.18.0 (2025-06-23)

What's changed

  • Dropped multi-database support: Flag.check() now follows updated standard system-check signature that receives a single database keyword argument instead of databases. Internally the check no longer loops over multiple connections (d346d81).
  • Updated the admin “Unused flags” card to use the new database keyword (d346d81).

Upgrade instructions

  • No changes required.