CHANGELOG¶
v0.14.0 (2026-07-07)¶
Bug Fixes¶
Chores¶
Documentation¶
-
Consolidate migration guides into one evergreen upgrade guide (#234,
15c83db) -
Fixes roadmap (
5718d02) -
fable-fixes: Fold #176 into Epic FF-G as sub-task G6 (
b966e65) -
ff-a: A5 — docs & migration guide for the mutation-surface changes (#180,
ffc5476) -
ff-b: Tick FF-B sub-task and exit-gate boxes in the fable-fixes roadmap (
29f9172)
Features¶
-
ff-a: Create() is a real INSERT; save() distinguishes INSERT from UPDATE (A3+A4) (#179,
de3ec30) -
ff-a: Reject limit/offset on mutating queries (#178,
67faf42) -
ff-a: Typed DBAPI-shaped exception hierarchy mapped from sqlx errors (#177,
9c306c5) -
ff-b: B1 canonical derived-type & naming decision table + refusal-rail scaffolding (
8c879f7) -
ff-b: B2+B6 one derived-type decision table; native PG enums + timestamptz/time parity; delete bridge mirrors (
bfdc1fd) -
ff-b: B3+B4 single-source artifact naming; both emitters emit named fk_/uq_ artifacts (
6b771f3) -
ff-c: C1 — per-model ColumnCodec plan; delete codec.rs schema sniffing (F5) (#197,
0e8e572) -
ff-c: C2 — schema-epoch catalog cache; zero catalog queries on steady-state CRUD (#200,
8c6d6ed) -
ff-c: C3+C4 — native typed Postgres decode; plan-driven enum hydration replaces _fix_types (#198,
05a008c) -
ff-d: Session-scoped weak identity map with refresh-on-load; single-handle routing (#201,
a328cfc) -
ff-e: Registry & model identity — qualified keys, configurable tables, O(N) import (#209,
6391805) -
ff-f: Query builder 1.0 shape — immutable chaining, build-time column validation, lambda-only predicates, QueryIR-only Rust (#223,
eb7fece) -
ff-g-a: Hardening — hydration ABI guard, transactional PG migrate, correctness edges, decode-path caching (#232,
22617e1)
Refactoring¶
Testing¶
-
ff-b: B5 I-1 sentinel on the full backend matrix with a full-type fixture, zero filters (
1141eb4) -
ff-b: Force psycopg v3 driver in the Postgres sentinel regardless of URL scheme (
64f9845)
v0.13.0 (2026-07-02)¶
Bug Fixes¶
-
ir-p8.6: Datetime/timestamptz coarseness — stop silent Postgres column reinterpretation (#154) (#167,
7182a57) -
ir-p8.6: Stop false-positive BLOB drift warning on SQLite (#165) (#168,
d554ac4) -
ir-p8.6: Surface real PEP 649 deferred-annotation error (#155) (#163,
00976e7)
Documentation¶
-
Use model-named lambda predicates in examples (#132,
420ca6e) -
agents: Add I-11 — explain concepts plainly, example-first (
efc7ef5) -
ir-first: Add Phase 8.6 post-8.5 cleanup backlog (epic #145) (#147,
e57b74b) -
ir-first: Expand #144 scope — auto-migrate index/unique reconciliation (#150,
fdbac40) -
ir-first: Lowering-consolidation audit + Phase 8.5 (#138,
c6ce53c) -
ir-p8.6: Add #153 create-path IR unification spec (
be4bb99) -
ir-p8.6: Add #153 create-path unification implementation plan (
de3c427) -
ir-p8.6: Sync roadmap — #153 merged, file #158 (db_check check-renderer) (
62c80fa) -
ir-p8.6: Sync roadmap — #154 merged (datetime/timestamptz warn-and-skip); #145 now 6/7 (
31dbbb6) -
ir-p8.6: Sync roadmap — #162 merged (typed save/update bind), file #165 (
5ca76a1) -
ir-p8.6: Sync roadmap — #165 merged (BLOB introspection); #145 complete 7/7, Phase 8.6 wrapped (
1dbb278) -
rust: Add detailed docstrings for all public APIs (#130,
8d5a951)
Features¶
Refactoring¶
-
Lowering consolidation & single-source-of-truth closeout (#139) (#156,
f76bec9) -
Unify the CREATE TABLE path onto the Python SchemaIR (#153) (#157,
c9ce7b0) -
Unify the three dialect enums into one shared Dialect (#146) (#159,
4b0dfe6) -
ir-p8.6: Single check-renderer for db_check (#158) (#161,
c04df1c)
v0.12.3 (2026-06-24)¶
Bug Fixes¶
-
session: Reject close while transactions are active (#128,
e46f183) -
session: Serialize concurrent close teardown (#129,
7afa616)
v0.12.2 (2026-06-23)¶
Bug Fixes¶
v0.12.1 (2026-06-23)¶
Bug Fixes¶
v0.12.0 (2026-06-23)¶
Documentation¶
Features¶
v0.11.0 (2026-06-11)¶
Chores¶
- Solution quality requirements
(
c62770b)
Documentation¶
Features¶
v0.10.5 (2026-05-25)¶
Bug Fixes¶
v0.10.4 (2026-05-24)¶
Bug Fixes¶
v0.10.3 (2026-05-21)¶
Bug Fixes¶
v0.10.2 (2026-05-19)¶
Bug Fixes¶
v0.10.1 (2026-05-19)¶
Bug Fixes¶
Testing¶
v0.10.0 (2026-05-18)¶
Features¶
v0.9.2 (2026-05-14)¶
Bug Fixes¶
v0.9.1 (2026-05-11)¶
Bug Fixes¶
- ModelConnection annotations
(
337b983)
v0.9.0 (2026-05-09)¶
Chores¶
Features¶
- Add get_or_none method
(
0c81e9f)
Testing¶
- Add tests for explicit shadow fields
(
78a3471)
v0.8.0 (2026-05-09)¶
Features¶
v0.7.0 (2026-05-08)¶
Features¶
v0.6.1 (2026-05-07)¶
Refactoring¶
v0.6.0 (2026-04-30)¶
Features¶
v0.5.0 (2026-04-28)¶
Bug Fixes¶
-
ci: Make cargo test link against libpython by gating extension-module (
e3b013e) -
raw: Make raw SQL tests pass on Postgres backend matrix (#31,
7b3c5e6) -
schema: Align Alembic single-column index names with Rust DDL (#32,
5e3211f)
Chores¶
Code Style¶
- Ruff format touched files
(
bbfda46)
Documentation¶
-
Add AGENTS.md invariants and seed docs/solutions/ (#32,
8b0af7f) -
fk: Document ForeignKey(index=True) and add CHANGELOG entry (#32,
625a3f2) -
orm: Document ferro_composite_indexes and reverse_index (
5ce3abe) -
raw: Add raw SQL API page, guide section, CHANGELOG entry (#31,
4b4699f)
Features¶
-
alembic: Emit sa.Index for ferro_composite_indexes groups (
a0c8176) -
fk: Propagate ForeignKey.index onto shadow column property (#32,
6d0f1f6) -
fk: Warn on redundant ForeignKey(unique=True, index=True) (#32,
3b311d7) -
orm: Add ferro_composite_indexes validation and schema injection (
18f3b37) -
raw: Add ferro.execute/fetch_all/fetch_one with _marshal (#31,
944df61) -
raw: Add python_to_engine_bind_value helper for raw SQL binds (
70bbbd3) -
raw: Transaction() yields Transaction handle for tx-bound raw SQL (#31,
226b575) -
raw: Wire raw_execute/raw_fetch_all/raw_fetch_one through PyO3 (#31,
d31b580) -
relations: Add reverse_index opt-out for default M2M join tables (
f1491df) -
rust: Emit non-unique CREATE INDEX for ferro_composite_indexes (
e8b2d06)
Testing¶
-
Red test for ForeignKey(index=True) shadow column index (#32,
2bbedc5) -
fk: Regression guards for FK index default and nullable interaction (#32,
8f6a48d) -
fk: Runtime DDL parity for ForeignKey(index=True) (#32,
99d39f3) -
orm: Cover common composite-index use cases (
b53643f) -
orm: Cover composite indexes on Postgres catalog (
13bc21f) -
orm: Cover composite indexes with UUID/enum columns and autogen idempotence (
a2ec4a5) -
orm: Cover composite-index overlap with composite-uniques (
24b7481) -
raw: Cover active-tx ContextVar pickup for top-level execute (#31,
3f7a2e4) -
raw: Cover fetch_all/fetch_one shape and read-your-writes (#31,
8b4058c) -
raw: Cover invalid-SQL surface and savepoint rollback (#31,
a03a398) -
raw: Cover Postgres RLS set_config/current_setting use case (#31,
4243123) -
raw: Cover UUID/datetime/Decimal/Enum/dict bind types (#31,
217d8b4) -
relations: Cover M2M reverse_index live catalog and edge cases (
9aa9740) -
rust: Fix composite-index unit-test assertions for sea-query output (
5c1ada1) -
rust: FK column with index flag still emits CREATE INDEX (#32,
1eca573)
v0.4.0 (2026-04-27)¶
Bug Fixes¶
- Correct BackRef type hinting for all/first
(
6171923)
Features¶
- Redesign relationship declarations
(
911e77d)
v0.3.4 (2026-04-25)¶
Bug Fixes¶
- Serialize UUID M2M query contexts
(
f53b3ca)
Chores¶
Documentation¶
- Add backend guide
(
78f1e29)
Refactoring¶
- Replace Any backend with typed engine
(
71628a7)
Testing¶
v0.3.3 (2026-04-24)¶
Bug Fixes¶
-
Cast NULL and strings to ::uuid for Postgres using catalog (
f5cb4f0) -
Catalog casts for date/timestamp columns on Postgres (
95ef5ca) -
Clean up rebase conflicts with main (
716511c) -
Enum OIDs (
a9867be) -
Postgres native enums on save and StrEnum schema registration (
44277e1) -
Use Postgres SQL dialect when connecting to postgres URLs (
c627ac8) -
postgres: Add dual-db ORM test matrix (
1fa657f) -
postgres: Bind boolean writes as booleans (
346441a) -
postgres: Cast uuid columns to text in SELECT for Any decode (
df957c0) -
postgres: Cast UUID filter params for sqlx Any compatibility (
889cf8b) -
postgres: Decode native enum columns via text cast (
1270f9d)
Refactoring¶
-
Expand db matrix coverage and harden postgres paths (
b82f3ac) -
Multi db architecture with true sqlite and postgres support (
459a0c5)
Testing¶
- Expand schema constraints into db matrix
(
24a7f0a)
v0.3.2 (2026-04-24)¶
Bug Fixes¶
- Move alembic reqs to optional dependencies
(
87f0e81)
Build System¶
- sqlx: Enable rustls TLS for PostgreSQL connections
(
807fa81)
Chores¶
- Sync uv.lock with project version 0.3.1
(
c3c9f91)
Continuous Integration¶
-
Build preflight wheels earlier to fail faster (
475c93c) -
Fix linux-aarch64 wheel builds for ring/rustls asm (
5eadddc) -
Gate release on preflight wheel builds for all platforms (
6ec48a2) -
Restore legacy release workflow (
d3ee87c)
Documentation¶
- Add Supabase PostgreSQL connection and TLS guidance
(
b1d61ad)
v0.3.1 (2026-04-23)¶
Bug Fixes¶
-
Alembic autogenerate named SQLAlchemy enums for PostgreSQL (
25a00e8) -
migrations: Align nullable inference with field types (
885f0fe) -
migrations: Propagate ForeignKey(unique=True) to Alembic metadata (#22,
9329e8f)
Continuous Integration¶
Documentation¶
- Prefer Field over FerroField
(
3385cfa)
v0.3.0 (2026-04-23)¶
Bug Fixes¶
-
Align composite unique index names and harden Alembic/Rust handling (
3350481) -
Refresh Pydantic FieldInfo when reconciling shadow FK types (
6cf1ac8)
Chores¶
- Remove doc
(
16e4028)
Continuous Integration¶
-
Fix release (
249e460) -
Fix release (
888e15e) -
Fix release (
58bb5b2) -
Reorder release steps to prevent tagging before checks are complete (
ad1fd8d)
Documentation¶
-
Complete documentation restructure and implementation summary (
937e75e) -
Enhance shadow field documentation and clarify relationship resolution process (
1d350fd)
Features¶
-
Composite unique constraints and default M2M pair uniqueness (
dc12880) -
Derive shadow FK types from related PK and reconcile after resolve (
d3ae486)
Testing¶
- UUID FK save reparenting and bulk_create coverage
(
6c93cea)
v0.2.1 (2026-04-20)¶
Bug Fixes¶
- Defer annotations resolution
(
edd39ab)
Chores¶
- Update patch_tags in pyproject.toml to include refactor
(
36c29a7)
Continuous Integration¶
- Fix release & mkdocs publish workflows
(
630dc7c)
Documentation¶
-
Restructure documentation following Diátaxis framework (
b3c2cde) -
Update BackRef references and enhance field documentation (
baf73ba) -
Update model field annotations to support optional back references (
2044896)
Refactoring¶
-
Enhance model relationship descriptors and improve field handling (
6275ebb) -
Modularize metaclass new method for easier testing and maintenance (
e514b95) -
Rename BackRelationship to BackRef and add back_ref to Field (
d24d32d) -
Update demo_queries to use BackRef instead of BackRelationship (
51799ad)
Testing¶
- Update references from BackRelationship to BackRef in test files
(
60a1d87)
v0.2.0 (2026-02-14)¶
Chores¶
-
.gitignore: Remove src/ferro/fields.py from ignore list (
1c46851) -
changelog: Fix changelog format (
579bb10)
Continuous Integration¶
-
docs: Publish docs site and relax strict commit checks (
9b2af96) -
release: Consolidate changelog and release workflow orchestration (
2724bcc) -
release: Update permissions for publish workflow (
02ecf9f) -
release: Update permissions for publish workflow (
d9d7243) -
release: Update workflows for PyPI Trusted Publishing (
75195d5)
Features¶
- fields: Add wrapped Field helper for ferro metadata
(
2795ed9)
v0.1.1 (2026-02-13)¶
Chores¶
-
project: Refine tooling configuration and code quality gates (
d91aadd) -
query: Update demo script and dependency metadata (
b737b12) -
release: Publish v0.1.0-rc.1 (
a37d0d4) -
release: Publish v0.1.0-rc.2 (
529801a) -
release: Publish v0.1.1 (
c9ee751)
Continuous Integration¶
-
Optimize caching and split PR vs main test execution (
e84344c) -
docs: Add MkDocs build and deploy workflows (
363ffa1) -
release: Add end-to-end CI, publish, and changelog pipelines (
1589dda) -
release: Configure changelog generation and release token wiring (
9b95e41) -
release: Enable prerelease publication path (
eab9a18) -
release: Stabilize workflow stages and macOS/toolchain settings (
dbf9a3e)
Documentation¶
-
api: Reorganize docs structure and validate code examples (
cd5b7b2) -
community: Add contributor and release documentation set (
f9fb40e) -
readme: Clean duplicated content and streamline guidance (
785573a) -
site: Add MkDocs structure and ORM usage guides (
d5b4955)
Features¶
-
connection: Add pool management and schema registration APIs (
2fa9fd7) -
core: Add async CRUD engine and identity map bridge (
64ea39f) -
logging: Route Ferro logs through Python logging (
df6be66) -
migrations: Integrate Alembic-backed migration management (
c244996) -
query: Add fluent query builder and predicate execution (
11d0a5c) -
relations: Add relationship descriptors and query node modules (
c8e72bd)
Testing¶
-
core: Add integration coverage for CRUD and schema behavior (
e5b3e51) -
query: Add coverage for builder operations and advanced types (
6e33f40) -
relations: Cover one-to-one behavior and schema constraints (
7cc8377)
v0.1.0 (2026-02-13)¶
- Initial Release