All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- JWT authentication handler using
golang-jwt/jwt/v5andMicahParks/keyfunc/v3with RS256 validation, configurable issuer and audience, and JWKS key rotation support (#120) - Hard deletion for Clusters and NodePools: resources and their adapter statuses are permanently removed from the database once all required adapters report
Finalized=Trueand no child resources remain (#119) Finalizedcondition aggregation withWaitingForChildResourcesintermediate state when all adapters are finalized but child node pools still exist (#119)- Soft deletion for Clusters and NodePools with
deleted_timeanddeleted_byfields for tracking deletion requests (#106) - Aggregation logic for resource data (#91)
- Version subcommand to CLI (#84)
- Condition subfield queries for selective Sentinel polling (#71)
- Slice field validation in SliceFilter (#78, #69)
- Connection retry logic for database sidecar startup coordination (#69)
- pgbouncer sidecar to Helm chart for connection pooling (#69)
- Health check ping timeout configuration (#69)
- Request-level context timeout to transaction middleware (#69)
- Connection pool timeout configuration (#69)
- PostgreSQL advisory locks for migration coordination in multi-replica deployments (#72)
- Search and filtering documentation (#63)
- Connection pool and pgbouncer documentation (#69)
- HyperFleet API operator guide (#76)
- Replaced magic strings for resource types and condition types with constants from
pkg/api/status_types.goacross service, handler, presenter, and factory files; separated condition type constants intoAdapterConditionType*(foradapter.conditions) andResourceConditionType*(forresource.status.conditions) to clarify usage context (#172) - OpenAPI schema is now consumed from the
hyperfleet-api-specGo module (v1.0.12) for code generation;openapi/openapi.yamlis extracted duringmake generateand is no longer tracked in git (#155) - Replaced OCM SDK authentication handler with standalone JWT middleware, removing
ocm-sdk-godependency and its transitive dependencies (glog,bluemonday,json-iterator) (#120) - Upgraded JWT library from
golang-jwt/jwt/v4togolang-jwt/jwt/v5(#120) - Refactored
AdapterStatusDao.Upsert()to accept a pre-fetched existing record, moving lookup andLastTransitionTimepreservation logic to the service layer (#119) - Refactored DAO methods to remove Unscoped calls for fetching Clusters and NodePools (#106)
- Bumped oapi-codegen version to fix missing
omitemptyon generated response objects (#106) - Updated OpenAPI spec with examples for Cluster and NodePool schemas (#106)
- Standardized appVersion and image.tag handling in Helm chart (#90)
- Aligned Helm chart with conventions standard (#87)
- Streamlined configuration system with Viper, removed getters and _FILE suffix pattern (#75)
- Used CHANGE_ME placeholder for image registry (#83)
- OCM SDK dependency (
ocm-sdk-go), OCM client (pkg/client/ocm/), OCM configuration (pkg/config/ocm.go), OCM logger bridge (pkg/logger/ocm_bridge.go), and OCM authorization mocks (#120)
- Validated adapter status conditions in handler layer (#88)
- Removed org prefix from image.repository default (#86)
- Addressed revive linter violations from enabled linting standard (#85)
- Truncated migrations table in CleanDB to ensure migrations re-run (#72)
- Added fallback default for AdvisoryLockTimeout (#72)
- Rejected not operator for condition queries (#80)
- SliceFilter star propagation in query processing (#79)
- Used 0.0.0-dev version for dev image builds (#77)
- Aligned health ping timeout with K8s probe timeout (#69)
- Hardened pgbouncer config and health check responses (#69)
- pgbouncer secret handling, connection leak, and lint (#69)
0.1.1 - 2026-03-09
- Test suite for presenter package (#64)
- DatabaseConfig test coverage and improved advisory lock tests (#72)
- Prometheus metrics with
hyperfleet_db_prefix to database layer (#58)
- Updated copyright year to 2026 (#58)
- Renamed metrics to use
hyperfleet_api_prefix for consistency (#57) - Standardized Dockerfiles and Makefile for building images (#59)
- CA certificates missing in ubi9-micro runtime image (#74)
- VERSION collision with go-toolset base image (#70)
- Config file resolution broken by -trimpath build flag (#66)
- Enforced mandatory conditions in adapter status (#60)
- SliceFilter usage in handlers and time field handling (#64)
- Helm chart testing and default image registry (#62)
- Reset and re-seed buildInfoMetric in ResetMetricCollectors (#57)
- Rejected creation requests with missing spec field (#56)
0.1.0 - 2026-02-16
- PodDisruptionBudget to Helm chart (#44)
- ServiceMonitor to Helm chart for Prometheus Operator integration (#43)
- YAML table format for adapter requirements (#41)
- Configurable adapter requirements (#40)
- Condition-based search with GIN index for improved query performance (#39)
- Health endpoints (
/healthz,/readyz) and graceful shutdown (#34) - User-friendly search syntax with lowercase Base32 ID encoding (#16)
- Schema validation for cluster and nodepool specifications (#12)
- Generation field for NodePool management (#22)
- OpenAPI schema embedded in Docker image for runtime validation (#14)
- Helm chart for Kubernetes deployment (#16)
- gomock/mockgen infrastructure for service mocks (#10)
- Bingo for Go tool dependency management (#9)
- Linux/amd64 platform support for container builds (#17)
- Integration tests for conditions (#39)
- Dynamic table discovery for test cleanup (#32)
- Operational runbook and metrics documentation (#45)
- ServiceMonitor configuration documentation (#43)
- Params constraints documentation (#55)
- BREAKING CHANGE: Updated OpenAPI spec for conditions-based status model (#39)
- Aligned cluster and nodepool name validation with CS rules (#48)
- Implemented RFC 9457 Problem Details error model for standardized error responses (#37)
- Migrated to oapi-codegen for OpenAPI code generation (#33)
- Aligned logging with HyperFleet structured logging specification (#31)
- Integrated database logging with LOG_LEVEL (#35)
- Renamed Makefile binary target to build with output to bin/ (#30)
- Consolidated and streamlined documentation structure (#21)
- Configured rh-hooks-ai for AI-readiness and security compliance (#18)
- Migrated to HyperFleet v2 architecture (#3)
- Phase validation from status types in favor of conditions-based model (#39)
- Generated mock files from git tracking (#10)
- Generated OpenAPI code from git tracking (#3)
- .claude directory from git tracking (#45)
- Prevented duplicate nodepool names within a cluster (#53)
- Returned 404 for non-existent cluster statuses (#54)
- First adapter status report now correctly initializes with Available=Unknown (#52)
- Integration tests updated to match new first-report behavior (#52)
- Added timeout to testcontainer teardown to prevent Prow hang (#52)
- Centralized adapter config to avoid duplicate logs (#46)
- Avoided exposing secret values in runbook (#45)
- Made adapter configuration mandatory (#46)
- Used explicit nil checks for PDB values (#44)
- Fixed goconst, gocritic, gosec, unparam and lll lint issues (#42)
- Prevented fmt.Sprintf panic when reason contains % without values (#37)
- Avoided leaking database error details to API clients (#37)
- Omitted empty Instance and TraceId from Problem Details JSON (#37)
- Added missing error codes to errorDefinitions map (#37)
- MVP phase logic to only return Ready or NotReady (#9)
- Cluster and nodepool name validation (#16)
- Silent error suppression (#26)
- Propagated JSON unmarshal errors (#26)
- Lint failures in presubmit jobs (#12, #6)