Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [1.0.14] - 2026-05-15

### Removed

- Deprecated `Ready` condition type from `ConditionType`, status model documentation, and all examples (HYPERFLEET-1052)
- `ExampleReadyReason` and `ExampleReadyMessage` constants

### Changed

- Search example updated from `status.conditions.Ready` to `status.conditions.Reconciled`
- `postCluster` documentation updated to list only `LastKnownReconciled` and `Reconciled` as mandatory conditions
Comment on lines +14 to +20
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot May 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Verify remaining references in linked repos
gh search code "status.conditions.Ready repo:openshift-hyperfleet/hyperfleet-api" --limit 100
gh search code "status.conditions.Ready repo:openshift-hyperfleet/architecture" --limit 50

Repository: openshift-hyperfleet/hyperfleet-api-spec

Length of output: 2562


🏁 Script executed:

#!/bin/bash
# Inspect CHANGELOG.md lines around 14-20
head -30 CHANGELOG.md | cat -n

Repository: openshift-hyperfleet/hyperfleet-api-spec

Length of output: 1399


Coordinate linked-repo updates before publishing 1.0.14 release notes.

The release notes declare the Ready condition fully deprecated and migrated to Reconciled, but linked repos still contain active references:

  • hyperfleet-api: docs/search.md (examples), pkg/db/sql_helpers.go (comments), README.md (curl example), test files (test cases)
  • architecture: adrs/0010-jsonb-provider-agnostic-spec.md, docs/status-guide.md (documentation)

These outstanding references create documentation drift and will confuse consumers. Update or defer the 1.0.14 release notes until dependent repos are synchronized.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` around lines 14 - 20, Release notes claim `Ready` condition is
deprecated/migrated to `Reconciled`, but other repos still reference `Ready` and
related constants causing drift; update linked repos or roll back the notes.
Search for and replace or reconcile usages of `Ready`, `ExampleReadyReason`, and
`ExampleReadyMessage` in dependent repos (examples, docs, tests, comments) to
use `Reconciled`/`LastKnownReconciled` and update any `ConditionType` references
and `postCluster` documentation to list only `LastKnownReconciled` and
`Reconciled`; if immediate updates across repos aren’t possible, revert the
CHANGELOG wording for 1.0.14 to avoid declaring the migration complete until all
linked repositories (e.g., hyperfleet-api and architecture docs) are
synchronized.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes to these repos would be followed up in the current ticket. API Spec works as a prerequisite for Hyperfleet API, hence making changes here first.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tirthct, understood — the spec-first, consumers-second sequencing makes sense for this migration. Since HYPERFLEET-1052 will track the follow-up updates to hyperfleet-api and architecture, the drift is intentional and time-bounded.

For completeness, the follow-up work in those repos includes:

  • hyperfleet-api: docs/search.md, pkg/db/sql_helpers.go (comments), README.md curl example, integration test cases in test/integration/search_field_mapping_test.go
  • architecture: docs/status-guide.md, adrs/0010-jsonb-provider-agnostic-spec.md

Would you like me to open a GitHub issue to track these follow-up items, or are they already captured within the HYPERFLEET-1052 ticket?


📝 Learnings were identified and not saved (knowledge base disabled). Enable


## [1.0.13] - 2026-05-13

### Removed
Expand Down Expand Up @@ -126,7 +138,8 @@ First official stable release of the HyperFleet API specification.
- Interactive API documentation

<!-- Links -->
[Unreleased]: https://github.com/openshift-hyperfleet/hyperfleet-api-spec/compare/v1.0.13...HEAD
[Unreleased]: https://github.com/openshift-hyperfleet/hyperfleet-api-spec/compare/v1.0.14...HEAD
[1.0.14]: https://github.com/openshift-hyperfleet/hyperfleet-api-spec/compare/v1.0.13...v1.0.14
[1.0.13]: https://github.com/openshift-hyperfleet/hyperfleet-api-spec/compare/v1.0.12...v1.0.13
[1.0.12]: https://github.com/openshift-hyperfleet/hyperfleet-api-spec/compare/v1.0.11...v1.0.12
[1.0.11]: https://github.com/openshift-hyperfleet/hyperfleet-api-spec/compare/v1.0.10...v1.0.11
Expand Down
2 changes: 1 addition & 1 deletion main.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ using OpenAPI;
*/
@service(#{ title: "HyperFleet API" })
@info(#{
version: "1.0.13",
version: "1.0.14",
contact: #{
name: "HyperFleet Team",
url: "https://github.com/openshift-hyperfleet",
Expand Down
20 changes: 0 additions & 20 deletions models-core/cluster/example_cluster.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,6 @@ const exampleCluster: Cluster = #{
generation: 1,
status: #{
conditions: #[
#{
type: ConditionType.Ready,
status: ResourceConditionStatus.True,
reason: ExampleReadyReason,
message: ExampleReadyMessage,
observed_generation: 1,
created_time: "2021-01-01T10:00:00Z",
last_updated_time: "2021-01-01T10:00:00Z",
last_transition_time: "2021-01-01T10:00:00Z",
},
#{
type: ConditionType.Reconciled,
status: ResourceConditionStatus.True,
Expand Down Expand Up @@ -80,16 +70,6 @@ const exampleDeletedCluster: Cluster = #{
generation: 2,
status: #{
conditions: #[
#{
type: ConditionType.Ready,
status: ResourceConditionStatus.True,
reason: ExampleReadyReason,
message: ExampleReadyMessage,
observed_generation: 2,
created_time: "2021-01-01T10:00:00Z",
last_updated_time: "2021-01-01T10:00:00Z",
last_transition_time: "2021-01-01T10:00:00Z",
},
#{
type: ConditionType.Reconciled,
status: ResourceConditionStatus.True,
Expand Down
20 changes: 0 additions & 20 deletions models-core/nodepool/example_nodepool.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,6 @@ const exampleNodePool: NodePool = #{
},
status: #{
conditions: #[
#{
type: ConditionType.Ready,
status: ResourceConditionStatus.True,
reason: ExampleReadyReason,
message: ExampleReadyMessage,
observed_generation: 1,
created_time: "2021-01-01T10:00:00Z",
last_updated_time: "2021-01-01T10:00:00Z",
last_transition_time: "2021-01-01T10:00:00Z",
},
#{
type: ConditionType.Reconciled,
status: ResourceConditionStatus.True,
Expand Down Expand Up @@ -90,16 +80,6 @@ const exampleDeletedNodePool: NodePool = #{
},
status: #{
conditions: #[
#{
type: ConditionType.Ready,
status: ResourceConditionStatus.True,
reason: ExampleReadyReason,
message: ExampleReadyMessage,
observed_generation: 2,
created_time: "2021-01-01T10:00:00Z",
last_updated_time: "2021-01-01T10:00:00Z",
last_transition_time: "2021-01-01T10:00:00Z",
},
#{
type: ConditionType.Reconciled,
status: ResourceConditionStatus.True,
Expand Down
20 changes: 0 additions & 20 deletions models-gcp/cluster/example_cluster.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,6 @@ const exampleCluster: Cluster = #{
generation: 1,
status: #{
conditions: #[
#{
type: ConditionType.Ready,
status: ResourceConditionStatus.True,
reason: ExampleReadyReason,
message: ExampleReadyMessage,
observed_generation: 1,
created_time: "2021-01-01T10:00:00Z",
last_updated_time: "2021-01-01T10:00:00Z",
last_transition_time: "2021-01-01T10:00:00Z",
},
#{
type: ConditionType.Reconciled,
status: ResourceConditionStatus.True,
Expand Down Expand Up @@ -124,16 +114,6 @@ const exampleDeletedCluster: Cluster = #{
generation: 2,
status: #{
conditions: #[
#{
type: ConditionType.Ready,
status: ResourceConditionStatus.True,
reason: ExampleReadyReason,
message: ExampleReadyMessage,
observed_generation: 2,
created_time: "2021-01-01T10:00:00Z",
last_updated_time: "2021-01-01T10:00:00Z",
last_transition_time: "2021-01-01T10:00:00Z",
},
#{
type: ConditionType.Reconciled,
status: ResourceConditionStatus.True,
Expand Down
20 changes: 0 additions & 20 deletions models-gcp/nodepool/example_nodepool.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,6 @@ const exampleNodePool: NodePool = #{
},
status: #{
conditions: #[
#{
type: ConditionType.Ready,
status: ResourceConditionStatus.True,
reason: ExampleReadyReason,
message: ExampleReadyMessage,
observed_generation: 1,
created_time: "2021-01-01T10:00:00Z",
last_updated_time: "2021-01-01T10:00:00Z",
last_transition_time: "2021-01-01T10:00:00Z",
},
#{
type: ConditionType.Reconciled,
status: ResourceConditionStatus.True,
Expand Down Expand Up @@ -134,16 +124,6 @@ const exampleDeletedNodePool: NodePool = #{
},
status: #{
conditions: #[
#{
type: ConditionType.Ready,
status: ResourceConditionStatus.True,
reason: ExampleReadyReason,
message: ExampleReadyMessage,
observed_generation: 2,
created_time: "2021-01-01T10:00:00Z",
last_updated_time: "2021-01-01T10:00:00Z",
last_transition_time: "2021-01-01T10:00:00Z",
},
#{
type: ConditionType.Reconciled,
status: ResourceConditionStatus.True,
Expand Down
3 changes: 1 addition & 2 deletions models/clusters/model.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ model ClusterStatus {
/**
* List of status conditions for the cluster.
*
* **Mandatory conditions**:
* - `type: "Ready"` *(deprecated — use Reconciled)*: Whether all adapters report successfully at the current generation.
* **Mandatory conditions**:
* - `type: "Reconciled"`: Whether the resource's desired state has been fully reconciled by all adapters at the current generation.
* - `type: "LastKnownReconciled"`: Sticky cross-generation condition — stays True as long as all required adapters were reconciled at a common observed generation, even if a newer generation is being processed.
*
Expand Down
5 changes: 1 addition & 4 deletions models/common/model.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ enum OrderDirection {

model SearchParams {
/** Filter results using TSL (Tree Search Language) query syntax.
* Examples: `status.conditions.Ready='True'`, `name in ('c1','c2')`, `labels.region='us-east'` */
* Examples: `status.conditions.Reconciled='True'`, `name in ('c1','c2')`, `labels.region='us-east'` */
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot May 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Cross-repo contract docs/tests still reference Ready and now diverge from this spec

This change is correct for the spec, but linked findings show openshift-hyperfleet/architecture and openshift-hyperfleet/hyperfleet-api still documenting/querying status.conditions.Ready. Please land coordinated follow-up updates before release to avoid contract confusion in search/docs/tests.
As per coding guidelines, "Validate changes against HyperFleet architecture standards from the linked architecture repository."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@models/common/model.tsp` at line 148, The spec was changed to use
status.conditions.Reconciled instead of status.conditions.Ready, but external
docs/tests still reference Ready; update all cross-repo references and tests to
match the new symbol (status.conditions.Reconciled) to avoid contract drift:
search for occurrences of "status.conditions.Ready" and "Ready" in query
examples, API docs, and test fixtures in the linked repositories (e.g.,
architecture/docs and hyperfleet-api tests), replace them with
"status.conditions.Reconciled" and adjust any sample queries (e.g., selectors
like status.conditions.Reconciled='True'), then run/adjust unit/integration
tests and contract validation to ensure they conform to the HyperFleet
architecture standards.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will be followed up by a PR in hyperfleet-api and architecture repo

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tirthct, understood — thanks for confirming. To make sure nothing falls through the cracks, would you like me to open tracking issues in hyperfleet-api and/or architecture repos to capture the remaining status.conditions.ReadyReconciled references that need updating? Based on the linked findings, the key areas are:

  • openshift-hyperfleet/hyperfleet-api: integration tests (test/integration/search_field_mapping_test.go), DB helper docs/tests (pkg/db/sql_helpers.go, pkg/db/sql_helpers_test.go), README.md, and docs/search.md.
  • openshift-hyperfleet/architecture: docs/status-guide.md and adrs/0010-jsonb-provider-agnostic-spec.md.

Just let me know and I'll create them.

@query
search?: string;
}
Expand Down Expand Up @@ -176,7 +176,6 @@ model List<T> {
union ConditionType {
string,
Available: "Available",
Ready: "Ready",
Reconciled: "Reconciled",
LastKnownReconciled: "LastKnownReconciled"
}
Expand Down Expand Up @@ -246,8 +245,6 @@ model ResourceCondition {

const ExampleLastKnownReconciledReason: string = "AllAdaptersReconciled";
const ExampleLastKnownReconciledMessage: string = "All required adapters report Available=True for the tracked generation";
const ExampleReadyReason: string = "ReconciledAll";
const ExampleReadyMessage: string = "All required adapters reported Available=True or Finalized=True at the current generation";
const ExampleReconciledReason: string = "ReconciledAll";
const ExampleReconciledMessage: string = "All required adapters reported Available=True or Finalized=True at the current generation";
const ExampleAdapter1: string = "adapter1";
Expand Down
3 changes: 1 addition & 2 deletions models/nodepools/model.tsp
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,7 @@ model NodePoolStatus {
/**
* List of status conditions for the nodepool.
*
* **Mandatory conditions**:
* - `type: "Ready"` *(deprecated — use Reconciled)*: Whether all adapters report successfully at the current generation.
* **Mandatory conditions**:
* - `type: "Reconciled"`: Whether the resource's desired state has been fully reconciled by all adapters at the current generation.
* - `type: "LastKnownReconciled"`: Sticky cross-generation condition — stays True as long as all required adapters were reconciled at a common observed generation, even if a newer generation is being processed.
*
Expand Down
44 changes: 5 additions & 39 deletions schemas/core/openapi.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
openapi: 3.0.0
info:
title: HyperFleet API
version: 1.0.13
version: 1.0.14
contact:
name: HyperFleet Team
url: https://github.com/openshift-hyperfleet
Expand Down Expand Up @@ -58,7 +58,7 @@ paths:

**Note**: The `status` object in the response is read-only and computed by the service.
It is NOT part of the request body. Initially,
status.conditions will include mandatory "LastKnownReconciled", "Ready" and "Reconciled" conditions.
status.conditions will include mandatory "LastKnownReconciled" and "Reconciled" conditions.
parameters: []
responses:
'201':
Expand Down Expand Up @@ -188,14 +188,6 @@ paths:
generation: 2
status:
conditions:
- type: Ready
status: 'True'
reason: ReconciledAll
message: All required adapters reported Available=True or Finalized=True at the current generation
observed_generation: 2
created_time: '2021-01-01T10:00:00Z'
last_updated_time: '2021-01-01T10:00:00Z'
last_transition_time: '2021-01-01T10:00:00Z'
- type: Reconciled
status: 'True'
reason: ReconciledAll
Expand Down Expand Up @@ -401,14 +393,6 @@ paths:
href: https://api.hyperfleet.com/v1/clusters/019466a0-8f8e-7abc-9def-0123456789ab
status:
conditions:
- type: Ready
status: 'True'
reason: ReconciledAll
message: All required adapters reported Available=True or Finalized=True at the current generation
observed_generation: 2
created_time: '2021-01-01T10:00:00Z'
last_updated_time: '2021-01-01T10:00:00Z'
last_transition_time: '2021-01-01T10:00:00Z'
- type: Reconciled
status: 'True'
reason: ReconciledAll
Expand Down Expand Up @@ -723,7 +707,7 @@ components:
required: false
description: |-
Filter results using TSL (Tree Search Language) query syntax.
Examples: `status.conditions.Ready='True'`, `name in ('c1','c2')`, `labels.region='us-east'`
Examples: `status.conditions.Reconciled='True'`, `name in ('c1','c2')`, `labels.region='us-east'`
schema:
type: string
explode: false
Expand Down Expand Up @@ -1089,14 +1073,6 @@ components:
generation: 1
status:
conditions:
- type: Ready
status: 'True'
reason: ReconciledAll
message: All required adapters reported Available=True or Finalized=True at the current generation
observed_generation: 1
created_time: '2021-01-01T10:00:00Z'
last_updated_time: '2021-01-01T10:00:00Z'
last_transition_time: '2021-01-01T10:00:00Z'
- type: Reconciled
status: 'True'
reason: ReconciledAll
Expand Down Expand Up @@ -1226,8 +1202,7 @@ components:
description: |-
List of status conditions for the cluster.

**Mandatory conditions**:
- `type: "Ready"` *(deprecated — use Reconciled)*: Whether all adapters report successfully at the current generation.
**Mandatory conditions**:
- `type: "Reconciled"`: Whether the resource's desired state has been fully reconciled by all adapters at the current generation.
- `type: "LastKnownReconciled"`: Sticky cross-generation condition — stays True as long as all required adapters were reconciled at a common observed generation, even if a newer generation is being processed.

Expand Down Expand Up @@ -1388,14 +1363,6 @@ components:
href: https://api.hyperfleet.com/v1/clusters/019466a0-8f8e-7abc-9def-0123456789ab
status:
conditions:
- type: Ready
status: 'True'
reason: ReconciledAll
message: All required adapters reported Available=True or Finalized=True at the current generation
observed_generation: 1
created_time: '2021-01-01T10:00:00Z'
last_updated_time: '2021-01-01T10:00:00Z'
last_transition_time: '2021-01-01T10:00:00Z'
- type: Reconciled
status: 'True'
reason: ReconciledAll
Expand Down Expand Up @@ -1592,8 +1559,7 @@ components:
description: |-
List of status conditions for the nodepool.

**Mandatory conditions**:
- `type: "Ready"` *(deprecated — use Reconciled)*: Whether all adapters report successfully at the current generation.
**Mandatory conditions**:
- `type: "Reconciled"`: Whether the resource's desired state has been fully reconciled by all adapters at the current generation.
- `type: "LastKnownReconciled"`: Sticky cross-generation condition — stays True as long as all required adapters were reconciled at a common observed generation, even if a newer generation is being processed.

Expand Down
Loading