Tags give the ability to mark specific points in history as being important
-
v4.1.3
56d35b3b · ·v4.1.3 — typed numeric filter literals Every numeric literal in generated filter tests now carries its type. The int/int32/int64 arm used to emit a bare 1, which converts inside the predicate call but stays int inside []any{...} — so the byte-equal suite failed on a plain BIGINT column of the user entity. Regenerating rewrites those literals only. -
v4.1.2
408c441a · ·v4.1.2 — basic-kind filter literals buildScalarArgLiteral no longer emits the struct-shaped <type>{} fallback for a column whose Go field is a basic kind outside int/int32/int64. A SMALLINT column typed as int16 used to produce StakeEq(int16{}) in filters.gen_test.go, which is not valid Go; the same was reachable for int8, uint* and float32/float64. Regenerating rewrites only those literals. Value objects unaffected. -
v4.1.1
b168f8a2 · ·v4.1.1 — /v4 semantic import path go.mod declares module git.appkode.ru/pub/go/po/v4, so the v4 line is finally resolvable as a dependency (v4.0.0/v4.1.0 were not: a v4 tag behind an unsuffixed path is rejected by the module resolver). Generated code imports .../po/v4/pkg/{failure,txx}; CLI installs from .../po/v4/cmd/po. No emitted SQL, method signature or diagnostic code changes. See MIGRATION.md (v4.1.0 -> v4.1.1). -
v4.1.0
8517b986 · ·v4.1.0 — Write-Path: Conditional & Transactional Writes (phases 232–238) po's first write-side directive family (ADR-0025): five mutation forms, each under its own po:-prefixed directive, landing po's first codegen surface beyond Create/Upsert/Patch/Delete. Every new method is opt-in and directive-gated -- dormant unless the schema declares the directive -- except for three changes this milestone sanctions as additive-when-absent. po:cas -> UpdateCAS(ctx, q, p, setNull []string) (bool, error) -- no-op transition, never error po:claim -> Claim(ctx, item) (bool, error) -- lost claim, never error po:create_returning -> CreateReturning(ctx, item) (entity, error) -- value-in/value-out, own copy po:upsert_guard -> UpsertGuarded(ctx, item) (int64, error) -- guard rejection, never error po:aggregate_guard -> InsertUnderGuard(ctx, item) (entity, bool, error) -- mandatory mode, no silent default Why MINOR, not MAJOR: po:create_returning (WRITE-02) is directive-gated and additive. Excluding a GENERATED ALWAYS AS IDENTITY primary-key column from the emitted INSERT column list (WRITE-01) is an unconditional bug fix that preserves no behaviour -- Postgres rejects that INSERT outright today -- and touches Create, Upsert, and Claim (all three share filterInsertable). Upsert's ON CONFLICT (id) DO UPDATE arm becomes structurally unreachable on an identity-always-PK table. Three sanctioned additive changes (FRZ-02): (1) WRITE-01's identity-PK insert-list fix, the only one altering an existing method's output; (2) DX-01's unconditional ExistsWhere(ctx, Query) (bool, error), closing the asymmetry with Count; (3) DX-02's not-found doc-comment line naming failure.IsNotFoundError by name. Measured facts (plan 238-04's two-generate byte-comparison across the v4.0.0 -> v4.1.0 boundary): a v4.0.0-era 25-migration schema regenerates 293/293 files, 65 changed by content (64 ExistsWhere hunks + 110 not-found doc hunks, 0 WRITE-01 hunks -- no identity-PK table on this schema); a dedicated identity_counters exhibit (13/13 files) shows WRITE-01 removing the id/:id column and bound placeholder from Create's and Upsert's INSERT list (6 hunks); Claim's identical exclusion is proven at the planner-unit level instead (TestBuildClaim_IdentityAlwaysExcludedFromSQL), since no example/ table combines an identity-PK with po:claim. allKinds (method-kind registry): 29 -> 35. Complexity ratchet re-measured whole-tree at HEAD: 116/61/21/39/5 (down from 117/62/22/40/5, every axis re-derived by observation with its offending function named, never re-stamped). Zero net-new runtime dependencies and zero direct-require version changes in either Go module across the v4.1.0 boundary (go.mod and go.sum byte-identical to tag v4.0.0 in both git.appkode.ru/pub/go/po and example); the shared txx.SQLXQueryExecutor interface's 7-method set is unchanged. Also: sqlKind()'s tracing-attribute switch now has an explicit bucket for all 35 method kinds (VALID-03 completeness lock, closed for the whole milestone). PLAN_CREATE_RETURNING_NOTHING_TO_INSERT replaces the prior silent no-op when a po:create_returning table's every insertable column is a DB-assignable PK. make check + make check-integration + make vuln + make lint green at commit ce073f0c (plan 238-06); re-gated markdown-only delta (CHANGELOG.md, MIGRATION.md) green again at this tag's commit (plan 238-08). ADR-0025 (docs/adr/0025-write-side-mutation-directive-family.md), LOCKED. Migration: MIGRATION.md, section v4.0.0 -> v4.1.0.
-
v4.0.0
ceca0e2c · ·v4.0.0 — Schema-Metadata Emission (po's first major bump) — phases 229–231 Ships po's first ALWAYS-ON new generated artifacts, so that adjacent hand-written sqlx references schema names through Go identifiers instead of string literals — and therefore fails to compile when a column is renamed or dropped. po gains no analytics; this only removes the brittleness of string literals in the raw SQL coexisting on the same *sqlx.DB. Two new unconditional files: - <persistence-dir>/00_meta_types.gen.go — the 34-field wire contract: TableMeta (7) / ColumnMeta (9) / FK (7) / Index (11) - <persistence-dir>/<entity>/meta.gen.go — var Meta + var Columns Why a MAJOR bump: the default generated output changes for every existing po user. Emission is gated by nothing — no flag, no po: directive — because opt-in metadata rots stale, and false metadata is worse than absent metadata. BREAKING: seven identifiers are now emitted with no opt-out. Root persistence package: TableMeta, ColumnMeta, FK, Index (FK and Index are the high-collision names). Each entity package: Meta, Columns, metaColumns. A pre-existing hand-written declaration of any of them becomes 'redeclared in this block' on the next po generate; the remedy is to rename your own symbol. The guarantee is name-sync ONLY — SQL correctness is not checked, and Meta.ForeignKeys' map keys are runtime strings that give no compile-time safety. Only the Columns namespace-struct does. Contract: ADR-0024 (docs/adr/0024-schema-metadata-wire-contract.md), LOCKED. Migration: MIGRATION.md, section v3.24.0 -> v4.0.0. Gates: all green — make check (incl. cover-check), check-integration, vuln, lint at the golangci zero-issue baseline; ratchet 117/62/22/40/5 held down-only; 0 net-new runtime deps (the x/text 0.38.0 -> 0.39.0 bump closing GO-2026-5970 is a patch bump of an existing indirect dep). Additive non-regression proven by a two-generate comparison across the version boundary: 260 -> 293 files, 33 new, 0 removed, 0 content diffs in any pre-existing generated file. -
v3.24.0
7e7ee1a4 · ·v3.24.0 — Holistic Review VII & ext-* Tail Closure Phases 222–228. 8-axis review (0 High/Critical) → 14-item fix-set (224); ADR-0023 ext-* grammar freeze + UX-03 hint (225); po:projection_cols multi-column projection struct — po's first ad-hoc named struct, allKinds 27→28 (226); po:sum_join LEFT JOIN roll-up — the codebase's first GROUP BY, allKinds 28→29 (227); freeze (228). CORR-01 (po:read+aggregate reject) consistent across all 4 kinds. Additive/opt-in/byte-equal-when-absent; single authorised break API-01. Ratchet 117/62/22/40/5 held; 0 net-new deps; all gates green.
-
v3.23.0
3438010e · ·v3.23.0 — Real-World Applicability VIII (Repository-Layer Coverage & Raw-SQL Boundary) Six opt-in po:-directive method-kinds (ext-include-deleted, ext-for-update, ext-skip-locked, ext-sum-aggregation, ext-projection, ext-join-filter); ADR-0022. Additive/opt-in — existing schemas regenerate byte-identically (proven on well-be vs v3.22.0). Raw-SQL hatch DEFERred. Census: po owns 213/380 today, +46 addressable, 121 hand-SQL. Ratchet 117/62/22/40/5 held; 0 net-new deps. Phases 218-221.
-
v3.22.0
7486dd5e · ·v3.22.0 — Holistic Review & Diagnostic-Sink Convergence Sixth review-driven milestone (phases 212-217). Fresh 8-axis holistic review at HEAD d5902a3f → bound fix-set. ⚠️ Breaking: - demoted With<Edge> no longer accepts sub-includes (compile-error, was silent runtime no-op) [FUT-API-02] - period-overlap finder renamed ListManyBy…AndPeriodOverlap → FindManyBy… [API-02] Added: - --emit-interface opt-in Repository interface (MethodCtxs-only, sqlc emit_interface analog) - <Method>DebugSQL() inlined-SQL accessors on all 20 kinds (injection-safe, debug-only, never-logged) - DiagnosticSink io.Writer injectable diagnostic sink (ADR-0021, replaces 78+ hardcoded os.Stderr) - SQLLogger post-exec Duration/RowsAffected/Err + slog.Enabled() gate Fixed: - 2 Critical DebugSQL nil-pointer panics (CR-01 debugSQLLiteral typed-nil, CR-02 sqlx.In Valuer fast-path) - period-overlap empty-slice guard (CORR-01); FK-cycle exit-1 ERROR+message+hint (UX-03); impact --format subcommand name (UX-01) Changed: - JOIN ListWith parent-PK dedup O(N²)→O(N) (PERF-01) - complexity ratchet 135/62/22/41/5 → 117/62/22/40/5 Removed: dead CheckBanner + skipped banner tests. All gates green: make check + check-integration + vuln + rc-acceptance step-8 byte-equal; 0 net-new deps.
-
v3.21.0
d5902a3f · ·v3.21.0 — Real-World Applicability VII (Developer-Experience Audit) Seventh real-world milestone, discovery-first DX audit (phases 208-211). Honest near-empty grounding: 11 findings, 0 High/Critical, 2/11 po-actionable. Shipped: opt-in SQLLogger decorator (ADR-0020, --sql-logger=slog, logs SQL text only never args, stdlib slog, 0 net-new deps) + README SQL-visibility doc. Additive/opt-in; existing schemas regenerate byte-identically. Gates: check + check-integration + vuln + rc-acceptance step-8 (byte-equal) green; cover 90.7%; ratchet 135/62/22/41/5 held; code-review CLEAN.
-
v3.20.0
9729ca44 · ·v3.20.0 — Real-World Applicability VI (Runtime Correctness & Coverage) Phases 203–207. Discovery-first (ground → synthesize → fix → freeze). - GND320-A01 (Track A): NOT-NULL geography round-trip proof (regions.location-shaped); no generator change. - GND320-B02 (Track B): new generic find_many_by_fk_and_period_overlap method-kind, triggered by the first table-level po: directive (po:period_overlap). Opt-in/additive. 0 net-new deps; ratchet 135/62/22/41/5 held; make check + check-integration + vuln + rc-acceptance(step-8 byte-equal) green.
-
v3.19.0
cb8f6b9d · ·v3.19.0 — Holistic Review & Integration-Test Hygiene Fifth review-driven milestone (phases 196–202); first non-feature after the v3.14–v3.18 real-world feature run. Full 8-axis holistic review (0 Crit / 1 High / 11 Med / 13 Low) → High + value-cluster fix-set; deferred -tags integration backlog drained; canonical make check-integration DoD gate stood up. Headline fixes: generate --emit-joins no longer exits 0 on non-compiling codegen (UX-01); VALUE_OBJECT_MISSING_SCAN_VALUE names the method; partial-geo-directive GEO_AUTO_WRAP_SUPPRESSED INFO; internal planning tokens stripped from generated exported doc-comments + panic strings; README/feature-matrix document v3.14–v3.18; t.Skip-fakes-green test-hygiene fixes. Regen-stable; ratchet 135/62/22/41/5 held; make lint 0; make vuln clean; 0 net-new deps.
-
v3.18.0
bf9018d3 · ·v3.18.0 — Real-World Applicability V (Test-Codegen Constructor Derivation & Non-Persistent-Entity Ergonomics)
-
v3.17.0
f8bd00e9 · ·po v3.17.0 — Real-World Applicability IV (Scalar-VO Test Codegen Correctness & Geography Auto-Wrap) Track A: fixes non-compiling generated filter tests for primitive-backed scalar value-objects (buildScalarArgLiteral / buildInArgLiteral / emitter zeroValueLiteral; full numeric family incl. complex/uintptr). Track B: typemap-gated, default-on geography auto-wrap (ST_AsGeoJSON / ST_GeogFromText) with column-level precedence and a po:read=raw opt-out. Proven on the example (live-PG round-trip) and on the real well-be project (compiles as-is, go vet clean, geo auto-wrapped). 9/9 requirements; example byte-equal except two sanctioned additive fixtures; 0 net-new deps; ratchet held; golangci 0; vuln clean.
-
-
v1.16.0
b970f492 · ·po v1.16.0 (tag ref restored 2026-07-02; SHA from repo records — was on b970f49)
-
v2.0.0
ec7a8b15 · ·po v2.0.0 (tag ref restored 2026-07-02 after accidental fetch --prune-tags deletion; SHA from milestone records)
-
v3.0.0
7c81ca45 · ·po v3.0.0 (tag ref restored 2026-07-02 after accidental fetch --prune-tags deletion; SHA from milestone records)
-
v3.1.0
df7cb411 · ·po v3.1.0 (tag ref restored 2026-07-02 after accidental fetch --prune-tags deletion; SHA from milestone records)
-
v3.2.0
6a6c9bb2 · ·po v3.2.0 (tag ref restored 2026-07-02 after accidental fetch --prune-tags deletion; SHA from milestone records)
-
v3.2.1
505bcb81 · ·po v3.2.1 (tag ref restored 2026-07-02 after accidental fetch --prune-tags deletion; SHA from milestone records)