Skip to content

HYPERFLEET-1177 - docs: v0.2.0 to v1.0.0 breaking-change checklist#154

Open
tirthct wants to merge 3 commits into
openshift-hyperfleet:mainfrom
tirthct:hyperfleet-1177
Open

HYPERFLEET-1177 - docs: v0.2.0 to v1.0.0 breaking-change checklist#154
tirthct wants to merge 3 commits into
openshift-hyperfleet:mainfrom
tirthct:hyperfleet-1177

Conversation

@tirthct

@tirthct tirthct commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Summary

Verified checklist of every breaking change between v0.2.0 and v1.0.0, so partner teams can reconfigure and redeploy with no surprises.

  • 18 breaking changes identified across API contract, configuration, auth, Helm charts, and database
  • Every item verified against v0.2.0 tag code — confirmed the behavior existed in v0.2.0 and changed in v1.0.0
  • 221 JIRA tickets audited; all 4 repo CHANGELOGs cross-referenced; file-by-file Helm template diffs reviewed

Also fixes stale Ready condition references across the repo and adds missing glossary terms.

Changes

  • New: hyperfleet/docs/release/v1.0.0/breaking-changes.md — the checklist (18 items)
  • New: hyperfleet/docs/e2e-testing/README.md — index for e2e testing docs
  • Updated: hyperfleet/docs/release/README.md — link to v1.0.0 folder
  • Updated: hyperfleet/docs/glossary.md — added Reconciled, LastKnownReconciled, Finalized; marked Ready as removed
  • Updated: hyperfleet/components/sentinel/sentinel.md — Ready→Reconciled in CEL examples
  • Updated: hyperfleet/README.md — Ready phase→Reconciled state
  • Updated: hyperfleet/docs/status-guide.md — added v1.0.0 deprecation notice (full rewrite tracked under HYPERFLEET-1186)
  • Fixed: hyperfleet/docs/e2e-testing/tier1-nightly-failure-investigation-2026-04-20.md — 5 broken/missing ToC entries

Items evaluated and confirmed not breaking

These were investigated but removed from the checklist because the behavior did not exist in v0.2.0 (new functionality, not a change to existing behavior):

  • Deletion model (soft-delete, force-delete, cascade, Finalized condition) — v0.2.0 DELETE returned "not implemented"
  • lifecycle.delete config, adapter 404 handling, NodePool 409 on soft-deleted cluster — all part of new deletion lifecycle
  • Tracing disabled by default — tracing did not exist in v0.2.0 Sentinel/Adapter
  • Production runtime default — HYPERFLEET_ENV concept did not exist in v0.2.0
  • Adapter flat YAML config, camelCase Helm values, Go package renames — already changed in v0.2.0
  • Pagination validation, RFC 9457 error format — no runtime enforcement / already in v0.2.0
  • Broker library API change, RBAC naming, nativeSidecars, pod security — internal or additive

Test Plan

  • markdownlint-cli2 passes on all 7 changed files (0 errors)
  • Review by Angel (adapter-team representative) for completeness sign-off

@openshift-ci openshift-ci Bot requested review from rh-amarin and vkareh June 11, 2026 02:41
@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: e5671676-b9c3-485c-a339-a782f8a87d57

📥 Commits

Reviewing files that changed from the base of the PR and between 72cbe74 and d89876d.

📒 Files selected for processing (1)
  • hyperfleet/docs/release/v1.0.0/breaking-changes.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • openshift-hyperfleet/architecture (manual)
  • openshift-hyperfleet/hyperfleet-api (manual)
  • openshift-hyperfleet/hyperfleet-sentinel (manual)
  • openshift-hyperfleet/hyperfleet-adapter (manual)
  • openshift-hyperfleet/hyperfleet-broker (manual)
✅ Files skipped from review due to trivial changes (1)
  • hyperfleet/docs/release/v1.0.0/breaking-changes.md

📝 Walkthrough

Summary by CodeRabbit

  • Documentation
    • Cluster Creation Flow diagram now references "Reconciled state" instead of "Ready phase"
    • Sentinel design docs updated to use "Reconciled" as the primary reconciliation condition and revised decision/parameter examples and tests
    • Glossary updated with new condition entries; "Ready" marked removed in v1.0.0
    • Published v1.0.0 breaking-changes guide covering API, configuration, Helm, auth, and DB upgrade notes

Walkthrough

This PR updates HyperFleet documentation to replace the "Ready" condition with the "Reconciled" condition across multiple architecture artifacts. The Sentinel design document's default reconciliation logic is rewritten to detect generation mismatches and staleness via condition("Reconciled") rather than Ready, with corresponding CEL parameter table and result expression updates. The README cluster creation flow diagram, glossary terminology, and a new v1.0.0 breaking-changes checklist reflect this API contract shift. No source code changes; documentation-only.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

🚥 Pre-merge checks | ✅ 10 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
No Pii Or Sensitive Data In Logs ❓ Inconclusive Cannot access PR diff (gh auth required) and local checkout misses e2e-testing/README + tier1-nightly...; scanned available docs—no PII-in-logs found (CWE-532). Provide PR file contents/diff (or checkout all PR changes) so we can grep slog/logr/zap/log/fmt.Print for PII/raw bodies (CWE-532).
✅ Passed checks (10 passed)
Check name Status Explanation
Title check ✅ Passed Title clearly and specifically identifies the main change: a breaking-change checklist document for v0.2.0 to v1.0.0 migration, matching the primary deliverable in the changeset.
Description check ✅ Passed Description provides comprehensive context for all changeset components: the breaking-change checklist, glossary updates, Ready→Reconciled fixes, verification methodology, and non-breaking items evaluated.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Sec-02: Secrets In Log Output ✅ Passed CWE-532: Scanned PR-changed files (5 total) for slog/log/logr/zap/fmt.Print* calls containing token/password/credential/secret; 0 matches found.
No Hardcoded Secrets ✅ Passed Scan for CWE-798 patterns found no private keys, embedded-credential URLs, or API/GCP key literals. Only docs samples: Password="admin123" and password="my-password".
No Weak Cryptography ✅ Passed Scanned the repository/docs for md5, sha1, crypto/des, crypto/rc4, ECB, and for ConstantTimeCompare/hmac.Equal; no matches found. PR appears documentation-only.
No Injection Vectors ✅ Passed Only docs/OWNERS changed; scans found no CWE-89/78/79/502 patterns (fmt.Sprintf SQL, exec.Command, template.HTML, yaml.Unmarshal) in the modified files.
No Privileged Containers ✅ Passed Scanned repo for manifest/templates and Dockerfile candidates containing privileged true, hostPID/hostNetwork/hostIPC, SYS_ADMIN, allowPrivilegeEscalation true, runAsUser:0, or USER root: 0 matches...

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
✨ Simplify code
  • Create PR with simplified code

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
hyperfleet/components/sentinel/sentinel.md (2)

351-356: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Example configs still reference Ready condition — critical divergence.

Lines 351-356, 547-650 show YAML config examples using condition("Ready") and is_ready / ready_and_stale params. Per breaking-changes.md item #7, condition("Ready") returns zero-value in v1.0.0, causing silent failure (Sentinel never publishes; clusters stuck). The default param table (lines 285-292) was updated to Reconciled, but these example configs were not. Users copying these examples deploy broken configurations.

Update all example configs to Reconciled

Lines 351-356:

 message_decision:
   params:
-    ref_time: 'condition("Ready").last_updated_time'
-    is_ready: 'condition("Ready").status == "True"'
-    is_new_resource: '!is_ready && resource.generation == 1'
-    ready_and_stale: 'is_ready && now - timestamp(ref_time) > duration("30m")'
-    not_ready_and_debounced: '!is_ready && now - timestamp(ref_time) > duration("10s")'
-  result: 'is_new_resource || ready_and_stale || not_ready_and_debounced'
+    ref_time: 'condition("Reconciled").last_updated_time'
+    is_reconciled: 'condition("Reconciled").status == "True"'
+    is_new_resource: '!is_reconciled && resource.generation == 1'
+    generation_mismatch: 'resource.generation > condition("Reconciled").observed_generation'
+    reconciled_and_stale: 'is_reconciled && now - timestamp(ref_time) > duration("30m")'
+    not_reconciled_and_debounced: '!is_reconciled && now - timestamp(ref_time) > duration("10s")'
+  result: 'is_new_resource || generation_mismatch || reconciled_and_stale || not_reconciled_and_debounced'

Apply equivalent updates to lines 554-559, 580-584, 606-610.

Also applies to: 547-650

🤖 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 `@hyperfleet/components/sentinel/sentinel.md` around lines 351 - 356, Example
configs still use condition("Ready") and derived params (is_ready,
ready_and_stale, not_ready_and_debounced) which break in v1.0.0; update those
references to use condition("Reconciled") and adjust any derived expressions
accordingly (e.g., replace condition("Ready").last_updated_time with
condition("Reconciled").last_updated_time and change is_ready to
'condition("Reconciled").status == "True"') in the shown parameter blocks and
the other example blocks that define
is_new_resource/ready_and_stale/not_ready_and_debounced so examples match the
default param table and avoid silent failures.

473-473: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Explanatory text still references Ready — contradicts updated default config.

Line 473 states "default configuration relies on the Ready condition" but the default param table (lines 285-292) was updated to Reconciled. Lines 504-512 describe generation-change flow using Ready semantics. Line 519 cross-references status-guide.md mentioning aggregation into Ready condition. All contradict the v1.0.0 contract.

Update explanatory references

Line 473:

-The Sentinel reads the resource's status conditions to evaluate the message decision rules. The default configuration relies on the `Ready` condition, but custom rules can reference any condition:
+The Sentinel reads the resource's status conditions to evaluate the message decision rules. The default configuration relies on the `Reconciled` condition, but custom rules can reference any condition:

Lines 504-512:

-When a user changes the cluster spec (e.g., scales nodes), `generation` increments (1 → 2). The API detects that not all adapters have reconciled this generation and sets `Ready` to `False`. The Sentinel's default rules see `Ready != True` and trigger reconciliation — no separate generation check is needed in the Sentinel.
+When a user changes the cluster spec (e.g., scales nodes), `generation` increments (1 → 2). The API detects that not all adapters have reconciled this generation and sets `Reconciled` to `False`. The Sentinel's default rules see `Reconciled != True` and trigger reconciliation — no separate generation check is needed in the Sentinel.

Line 519:

-- [HyperFleet Status Guide](../../docs/status-guide.md) - Complete documentation of the status contract, including how adapters report `observed_generation` and how the API aggregates it into the `Ready` condition
+- [HyperFleet Status Guide](../../docs/status-guide.md) - Complete documentation of the status contract, including how adapters report `observed_generation` and how the API aggregates it into the `Reconciled` condition

Also applies to: 504-512, 519-519

🤖 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 `@hyperfleet/components/sentinel/sentinel.md` at line 473, The documentation
still refers to the `Ready` condition even though the default parameter table
and v1.0.0 contract use `Reconciled`; update all explanatory text to use
`Reconciled` (replace “Ready” mentions in the Sentinel overview, the
generation-change flow description, and the cross-reference to status-guide.md)
and adjust any wording that implies Ready semantics to describe Reconciled
semantics instead (search for occurrences of "Ready" in the Sentinel.md sections
around the Sentinel overview, generation-change flow, and the cross-reference
and change them to "Reconciled", ensuring the text matches the default param
table and the v1.0.0 contract).
🤖 Prompt for all review comments with 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.

Outside diff comments:
In `@hyperfleet/components/sentinel/sentinel.md`:
- Around line 351-356: Example configs still use condition("Ready") and derived
params (is_ready, ready_and_stale, not_ready_and_debounced) which break in
v1.0.0; update those references to use condition("Reconciled") and adjust any
derived expressions accordingly (e.g., replace
condition("Ready").last_updated_time with
condition("Reconciled").last_updated_time and change is_ready to
'condition("Reconciled").status == "True"') in the shown parameter blocks and
the other example blocks that define
is_new_resource/ready_and_stale/not_ready_and_debounced so examples match the
default param table and avoid silent failures.
- Line 473: The documentation still refers to the `Ready` condition even though
the default parameter table and v1.0.0 contract use `Reconciled`; update all
explanatory text to use `Reconciled` (replace “Ready” mentions in the Sentinel
overview, the generation-change flow description, and the cross-reference to
status-guide.md) and adjust any wording that implies Ready semantics to describe
Reconciled semantics instead (search for occurrences of "Ready" in the
Sentinel.md sections around the Sentinel overview, generation-change flow, and
the cross-reference and change them to "Reconciled", ensuring the text matches
the default param table and the v1.0.0 contract).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 561ab9f1-7a7f-4851-bf54-29d52ae7a250

📥 Commits

Reviewing files that changed from the base of the PR and between 0bd7b3f and 1042377.

📒 Files selected for processing (4)
  • hyperfleet/README.md
  • hyperfleet/components/sentinel/sentinel.md
  • hyperfleet/docs/glossary.md
  • hyperfleet/docs/release/v1.0.0/breaking-changes.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • openshift-hyperfleet/architecture (manual)
  • openshift-hyperfleet/hyperfleet-api (manual)
  • openshift-hyperfleet/hyperfleet-sentinel (manual)
  • openshift-hyperfleet/hyperfleet-adapter (manual)
  • openshift-hyperfleet/hyperfleet-broker (manual)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
hyperfleet/components/sentinel/sentinel.md (1)

285-292: ⚠️ Potential issue | 🟠 Major

Fix Sentinel design doc contradiction: generation_mismatch is an explicit immediate trigger

  • Key Insight — Why No Hardcoded Generation Check claims Reconciled == False already covers the generation-mismatch case (lines 261-263), but the default decision definition explicitly includes generation_mismatch and ORs it into the result (lines 288, 292), which makes generation mismatch able to trigger publishing immediately (independent of the debounce path).
  • Test 6 is inconsistent with both the design’s default result and Sentinel’s default behavior: it evaluates not_reconciled_and_debounced=true but omits generation_mismatch, and the Result line shown for Test 6 lacks the generation_mismatch term (line 955). Update Test 6 to reflect generation_mismatch=true for a “generation mismatch” scenario, and replace the note that generation mismatch is “handled implicitly” only via not_reconciled_and_debounced (around lines 944-960).
🤖 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 `@hyperfleet/components/sentinel/sentinel.md` around lines 285 - 292, The doc
contradicts itself: the decision Result explicitly includes generation_mismatch
as an immediate trigger but the text and Test 6 claim generation mismatch is
handled implicitly via not_reconciled_and_debounced; update the design doc to be
consistent by making Test 6 represent a true generation mismatch (set
generation_mismatch = true) and adjust the Test 6 Result line to include
generation_mismatch in the OR list, and replace the surrounding note that says
generation mismatch is only handled implicitly with text that acknowledges
generation_mismatch is an explicit immediate trigger in the default Result.
🤖 Prompt for all review comments with 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.

Outside diff comments:
In `@hyperfleet/components/sentinel/sentinel.md`:
- Around line 285-292: The doc contradicts itself: the decision Result
explicitly includes generation_mismatch as an immediate trigger but the text and
Test 6 claim generation mismatch is handled implicitly via
not_reconciled_and_debounced; update the design doc to be consistent by making
Test 6 represent a true generation mismatch (set generation_mismatch = true) and
adjust the Test 6 Result line to include generation_mismatch in the OR list, and
replace the surrounding note that says generation mismatch is only handled
implicitly with text that acknowledges generation_mismatch is an explicit
immediate trigger in the default Result.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: ba685685-b424-408e-b5de-7c9cecc58e61

📥 Commits

Reviewing files that changed from the base of the PR and between 1042377 and 72cbe74.

📒 Files selected for processing (1)
  • hyperfleet/components/sentinel/sentinel.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • openshift-hyperfleet/architecture (manual)
  • openshift-hyperfleet/hyperfleet-api (manual)
  • openshift-hyperfleet/hyperfleet-sentinel (manual)
  • openshift-hyperfleet/hyperfleet-adapter (manual)
  • openshift-hyperfleet/hyperfleet-broker (manual)

| 1 | **Status report: POST to PUT** for clusters and nodepools | Change HTTP method in all adapter post-actions from POST to PUT | **405 Method Not Allowed.** PUT-only routes confirmed in `plugins/clusters/plugin.go`; no POST route exists | Automatable (1178) | [HYPERFLEET-978](https://redhat.atlassian.net/browse/HYPERFLEET-978) | - |
| 2 | **Ready condition removed; replaced by Reconciled** | Replace all `Ready` references with `Reconciled` in status queries, scripts, and monitoring | **Silent hang.** API silently accepts `type="Ready"` in status reports but never aggregates it into resource conditions; scripts polling for Ready=True wait forever | Automatable (1178) | [HYPERFLEET-1052](https://redhat.atlassian.net/browse/HYPERFLEET-1052) | [HYPERFLEET-559](https://redhat.atlassian.net/browse/HYPERFLEET-559) |
| 3 | **Aggregated condition Available renamed to LastKnownReconciled** | Replace `Available` with `LastKnownReconciled` in all resource-level condition queries | **Not found.** Aggregation code produces only `Reconciled` and `LastKnownReconciled`; resource-level `Available` is no longer emitted | Automatable (1178) | [HYPERFLEET-1017](https://redhat.atlassian.net/browse/HYPERFLEET-1017) | - |
| 4 | **Status value validation** | Ensure all adapter status reports use True, False, or Unknown only | **400 Bad Request.** `isValidAdapterConditionStatus()` rejects empty/invalid values; `PresentAdapterStatus()` also filters invalid conditions from GET responses. v0.2.0 accepted empty status values | Automatable (1178) | [HYPERFLEET-841](https://redhat.atlassian.net/browse/HYPERFLEET-841) | - |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I see that isValidAdapterConditionStatus was added in 647, not 841.
But maybe it was added in v0.2.0, so it's not a v1.0.0 BC

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.

Ack, you are right. Fixed this

| 8 | **Sentinel Helm: config.hyperfleetApi moved to config.clients.hyperfleetApi** | Move API client config from `config.hyperfleetApi.baseUrl` to `config.clients.hyperfleetApi.baseUrl` in Sentinel Helm values | **Sentinel fails to start.** Helm template references `.Values.config.clients.hyperfleetApi.baseUrl`; old path renders empty; validation fails with "clients.hyperfleet_api.base_url required" | Automatable (1178) | [HYPERFLEET-549](https://redhat.atlassian.net/browse/HYPERFLEET-549), [HYPERFLEET-866](https://redhat.atlassian.net/browse/HYPERFLEET-866) | - |
| 9 | **Sentinel Helm: messageDecision params changed from map to list** | Restructure `messageDecision.params` from map format (`key: 'expr'`) to list format (`- name: key, expr: 'expr'`) | **Helm template fails to render.** Template iterates with `.name` and `.expr` fields; old map format has no such fields. Also fixes non-deterministic param ordering | Automatable (1178) | [HYPERFLEET-1011](https://redhat.atlassian.net/browse/HYPERFLEET-1011) | - |
| 10 | **API Helm: jwt.enabled default changed from true to false** | Explicitly set `config.server.jwt.enabled: true` in Helm values if JWT authentication is required | **API accepts unauthenticated requests.** v0.2.0 Helm chart defaulted to `jwt.enabled: true`; v1.0.0 defaults to `false`. Requests that were previously rejected without a valid JWT token are now accepted | Doc-only (1163/1179) | Helm chart values.yaml diff | - |
| 11 | **JWT identity_claim required when JWT enabled** | Add `server.jwt.identity_claim` pointing to JWT claim for caller identity | **API fails to start** if JWT enabled without identity_claim. Config validation: `if c.IdentityClaim == "" { return fmt.Errorf("server.jwt.identity_claim is required") }`. If claim name is set but does not exist in token, audit fields are silently empty | Doc-only (1163/1179) | [HYPERFLEET-1134](https://redhat.atlassian.net/browse/HYPERFLEET-1134) | [HYPERFLEET-824](https://redhat.atlassian.net/browse/HYPERFLEET-824) |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

audit fields are silently empty

This isn't really true. Write methods are guarded.
See pkg/auth/auth_middleware.go > ResolveCallerIdentity > isMutatingMethod

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.

Understood. Fixed

@openshift-ci

openshift-ci Bot commented Jun 11, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign mliptak0 for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

| `not_reconciled_and_debounced` | CEL → bool | `!is_reconciled && now - timestamp(ref_time) > duration("10s")` | Not-reconciled resource, debounce period elapsed |

**Result**: `is_new_resource || ready_and_stale || not_ready_and_debounced`
**Result**: `is_new_resource || generation_mismatch || reconciled_and_stale || not_reconciled_and_debounced`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The generation_mismatch param appears in the parameter table (line 288) and Result expression (line 292), but is missing from all four YAML config examples (lines 356, 559, 585, 611) and all test cases (lines 882–955).

Test 6's note also explicitly says generation mismatch is "handled implicitly" via Reconciled=False, which contradicts having an explicit generation_mismatch param.

Either add generation_mismatch to all YAML examples and update the 7 test cases to use the 4-term result, or remove it from the table and revert the Result to the 3-term form matching the examples.

```cel
condition("Ready").status == "True" # check if resource is ready
condition("Ready").last_updated_time # get timestamp for age calculation
condition("Reconciled").status == "True" # check if resource is ready

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Stale comment — says "ready" but the condition is now Reconciled:

Suggested change
condition("Reconciled").status == "True" # check if resource is ready
condition("Reconciled").status == "True" # check if resource is reconciled

| **Fan-out** | The messaging pattern used in HyperFleet where a single reconciliation event published to one topic is independently delivered to multiple adapter subscriptions simultaneously. Each adapter receives its own copy of the event via a dedicated subscription. | Broker |
| **GCP Pub/Sub** | Google Cloud Pub/Sub — the primary Message Broker implementation used in GCP-hosted HyperFleet deployments. Configured with `broker.type: googlepubsub` in `broker.yaml`. | Broker |
| **Generation** | An integer field on HyperFleet API resources that increments each time the resource's spec changes. Adapters include `observed_generation` in their status reports to indicate which version of the spec they reconciled. Sentinel uses generation changes to detect new desired state requiring reconciliation. | API, Sentinel, Adapter Framework |
| **Finalized (Condition)** | An adapter condition introduced in v1.0.0 for the deletion lifecycle. Adapters report `Finalized: True` after completing cleanup of their managed resources during deletion. The API's hard-delete mechanism checks that all required adapters have reported `Finalized: True` before permanently removing a resource from the database. | Adapter Framework, API |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Glossary is alphabetically ordered, but Finalized (F) was inserted after Generation (G). It should be between Fan-out and GCP Pub/Sub.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants