v0.156.1
Release plain 0.156.1
2f1c4ad
·
1d ago
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
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
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
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
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
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
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
0.33.3 (2026-02-12)
What's changed
- Fixed missing
template_name on FlagResult admin UpdateView (ee27ad10c407)
Upgrade instructions
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
0.33.1 (2026-01-28)
What's changed
Upgrade instructions
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
0.31.0 (2025-11-21)
What's changed
ForeignKey has been renamed to ForeignKeyField in model definitions and migrations (8010204)
Upgrade instructions
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
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
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
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
0.27.3 (2025-11-11)
What's changed
- Internal import path updated for database exceptions to use
plain.models.db (e9edf61)
Upgrade instructions
0.27.2 (2025-10-31)
What's changed
- Package metadata now includes explicit BSD-3-Clause license field (8477355)
Upgrade instructions
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
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
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
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
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
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
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
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
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
0.21.1 (2025-07-23)
What's changed
- Admin navigation now includes Bootstrap icons for Flag and FlagResult sections (9e9f8b0)
Upgrade instructions
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
0.20.0 (2025-07-18)
What's changed
- Added OpenTelemetry tracing support to flag evaluation with detailed spans and attributes (b0224d0)
Upgrade instructions
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