Skip to content

docs: add Kessel/ReBAC OCP integration high-level design#5887

Closed
jordigilh wants to merge 4 commits intoproject-koku:mainfrom
jordigilh:kessel-integration-docs
Closed

docs: add Kessel/ReBAC OCP integration high-level design#5887
jordigilh wants to merge 4 commits intoproject-koku:mainfrom
jordigilh:kessel-integration-docs

Conversation

@jordigilh
Copy link
Copy Markdown
Contributor

Summary

  • Add the high-level design (HLD) document for integrating Kessel/ReBAC as an optional authorization backend for Koku's OpenShift (OCP) provider in on-premise deployments.
  • Placed under docs/architecture/kessel-integration/ to establish a dedicated namespace for kessel-related documentation as the design evolves.

Document Overview

The HLD covers:

  • System Architecture: 7-component overview (frontend, backend, data stores) with mermaid diagrams
  • Sequence Diagrams: Role seeding, user access assignment, provider creation/deletion, authorization checks (wildcard & resource-specific), error handling
  • Phased Rollout:
    • Phase 1 — Wildcard-only permissions using the existing Red Hat ReBAC schema (no schema changes required)
    • Phase 1.5 — Access Management API & UI for role/permission administration
    • Phase 2 — Resource-specific permissions with 3 new OCP resource type definitions (requires schema PR)
  • Current State & Gap Analysis: What exists in Red Hat's production ReBAC schema vs. what's missing
  • Implementation Details: Authorization service, permission classes, Sources API integration, Access Management API & UI
  • Operational Considerations: Monitoring, observability, troubleshooting, backup/recovery, capacity planning, runbooks
  • Testing Strategy: Unit, integration, and end-to-end testing approach

Motivation

This is the first step toward replacing the current RBAC-based authorization in on-premise Koku deployments with Kessel's Relationship-Based Access Control (ReBAC). The HLD needs review and approval before proceeding to detailed design and implementation.

Scope

  • In scope: Standalone OCP provider only (native OCP clusters)
  • Out of scope: OCP-on-AWS, OCP-on-Azure, OCP-on-GCP (future work)
  • Deployment target: On-premise only (gated by KOKU_ONPREM_DEPLOYMENT flag)

Review Request

Looking for feedback on:

  1. Overall architecture and component boundaries
  2. Phased approach and sequencing
  3. Dual-write pattern for Kessel + local DB consistency
  4. Gap analysis — anything missing from the current state assessment
  5. Operational readiness considerations

Test Plan

  • Document renders correctly on GitHub (mermaid diagrams, tables, links)
  • Table of contents anchors resolve properly
  • No sensitive/internal-only information included

Made with Cursor

@jordigilh jordigilh requested review from a team as code owners February 6, 2026 15:24
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @jordigilh, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces the foundational high-level design for integrating Kessel, Red Hat's Relationship-Based Access Control (ReBAC) platform, into Koku. This integration specifically targets OpenShift (OCP) providers in on-premise deployments, aiming to enhance access control granularity beyond the existing RBAC system. The design outlines a strategic two-phase rollout, beginning with basic wildcard permissions and progressing to sophisticated resource-specific access. A key enabler for on-premise functionality is the introduction of a dedicated deployment flag that intelligently adapts Koku's behavior, such as disabling external feature flag services, to suit environments without SaaS connectivity. This change significantly improves Koku's adaptability for diverse deployment scenarios.

Highlights

  • Kessel/ReBAC Integration HLD: A high-level design document has been added for integrating Kessel (Red Hat's ReBAC platform) as an optional authorization backend for Koku's OpenShift (OCP) provider in on-premise deployments.
  • Phased Implementation: The integration will follow a two-phase approach, starting with wildcard permissions (Phase 1) and evolving to resource-specific permissions and ownership models (Phase 2).
  • On-Premise Deployment Flag: A new KOKU_ONPREM_DEPLOYMENT environment variable is introduced to configure Koku for on-premise environments, disabling external SaaS dependencies like Unleash feature flags.
  • Disabled Unleash Client: A DisabledUnleashClient mock implementation is now used in on-premise mode to prevent network calls to the Unleash server, ensuring Koku functions in air-gapped or restricted environments.
  • Comprehensive Documentation: Detailed documentation has been added for both the Kessel/ReBAC integration and the feature flag architecture, including deployment modes, implementation, configuration, and testing strategies.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • README.md
    • Updated development setup instructions to include the KOKU_ONPREM_DEPLOYMENT environment variable for on-premise setups.
  • docs/architecture/feature-flags.md
    • Added new documentation detailing the feature flag architecture, including SaaS and on-premise deployment modes, the DisabledUnleashClient implementation, configuration, testing, and usage examples.
  • docs/architecture/kessel-integration/kessel-ocp-integration.md
    • Added a new high-level design document outlining the Kessel/ReBAC integration for Koku's OCP provider, covering system architecture, sequence diagrams, phased rollout, implementation details, operational considerations, and testing strategy.
  • docs/architecture/sources-and-data-ingestion.md
    • Added a note regarding the KOKU_ONPREM_DEPLOYMENT flag and its impact on Unleash feature flag service for on-premise deployments.
  • docs/install.md
    • Included a new section on on-premise deployment configuration, specifically detailing how to set KOKU_ONPREM_DEPLOYMENT to manage Unleash feature flags.
  • koku/koku/feature_flags.py
    • Implemented DisabledUnleashClient to provide a no-op Unleash client for on-premise deployments, preventing external API calls.
    • Modified the Unleash client initialization logic to conditionally select between the real client (SaaS) and the disabled client (on-prem) based on the KOKU_ONPREM_DEPLOYMENT setting.
  • koku/koku/settings.py
    • Introduced KOKU_ONPREM_DEPLOYMENT as a new Django setting, defaulting to False to maintain backward compatibility for SaaS deployments.
  • koku/koku/test_feature_flags.py
    • Added a new test suite for the DisabledUnleashClient, ensuring its functionality and adherence to the Unleash client interface in a disabled state.
Activity
  • The pull request is newly opened, and there has been no review activity or comments from other users yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Add the initial HLD for Kessel/ReBAC integration with the OCP provider
for on-premise deployments. This document covers system architecture,
sequence diagrams, phased rollout plan, and operational considerations.

Placed under docs/architecture/kessel-integration/ to establish a
namespace for future kessel integration documentation.

Co-authored-by: Cursor <cursoragent@cursor.com>
@jordigilh jordigilh force-pushed the kessel-integration-docs branch from 6b992b0 to 90d6adf Compare February 6, 2026 15:25
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a comprehensive high-level design for Kessel/ReBAC integration and adds the necessary infrastructure for on-premise deployments by allowing the feature flag client to be disabled. The documentation is extensive and well-structured. However, I've found a critical issue in the implementation of the DisabledUnleashClient where the method signature is incorrect, which will lead to runtime errors. Additionally, there are several broken or soon-to-be-outdated links in the new documentation that should be addressed to ensure its long-term value and usability.

I am having trouble creating individual review comments. Click here to see my feedback.

koku/koku/feature_flags.py (66-79)

critical

The signature and implementation of is_enabled in DisabledUnleashClient are inconsistent with the UnleashClient it's meant to mock, and also with the documentation in this PR.

  1. Incorrect Signature: The method is missing the default=False parameter, which is present in the real UnleashClient. This will cause a TypeError for any calls that use default as a keyword argument, such as the example in docs/architecture/feature-flags.md.
  2. Incorrect Logic: The implementation should return the default value when fallback_function is not provided, but it currently hardcodes False.

This is a critical issue as it breaks the client's interface contract.

I suggest updating the method to have a compatible signature and logic. You will also need to update the tests in koku/koku/test_feature_flags.py to reflect this correction.

def is_enabled(self, feature_name, context=None, fallback_function=None, default=False):
    """Check if a feature is enabled.
    
    In disabled mode, this will use the fallback function if provided,
    otherwise it will return the default value. This mimics the behavior
    of an uninitialized Unleash client.
    
    Args:
        feature_name (str): Name of the feature flag.
        context (dict): Context dict.
        fallback_function (callable): Function to determine feature state.
        default (bool): Default value to return.

    Returns:
        bool: Result of fallback_function or the default value.
    """
    if fallback_function:
        return fallback_function(feature_name, context or {})
    return default

docs/architecture/kessel-integration/kessel-ocp-integration.md (552)

high

This document contains several links to kessel-only-role-provisioning.md and kessel-ocp-implementation-guide.md, which are not included in this pull request. This will result in broken links in the documentation. Please either add these files to the PR or remove the links if they are intended for future work. This comment applies to this line and many other similar links throughout the document.

docs/architecture/feature-flags.md (92)

medium

The source code reference link appears to be pointing to an incorrect line range. The DisabledUnleashClient is implemented starting at line 55 in koku/koku/feature_flags.py. Please update the link to point to the correct lines to avoid confusion for future readers.

docs/architecture/feature-flags.md (396)

medium

This hardcoded commit hash will become outdated once this pull request is merged. It's generally better to reference the pull request itself or remove the commit reference to avoid the need for future maintenance.

@jordigilh
Copy link
Copy Markdown
Contributor Author

jordigilh commented Feb 6, 2026

Preview of the document with the diagrams rendered can be seen in the origin branch:
https://github.com/jordigilh/koku/blob/kessel-integration-docs/docs/architecture/kessel-integration/kessel-ocp-integration.md

Comment thread docs/architecture/kessel-integration/kessel-ocp-integration.md Outdated
|---|-----------|------|----------------|
| 1 | **Authorization Adapter** | NEW | Permission checks via Kessel (replaces RBAC API in on-premise) |
| 2 | **Resource Reporter** | NEW | Syncs Koku resources (clusters, nodes, projects) to Kessel |
| 3 | **Sources API** (`provider_builder.py`) | Modified | Dual-write: Store in Postgres **AND** report to Kessel |
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pls note this is going to be externalized by insights-onprem#6 and be used as the on-prem API for managing sources/integration in koku.

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.

Acknowledged — the Kessel integration hooks into ProviderBuilder (specifically create_provider_from_source and destroy_provider), which is called from the Sources flow. As the Sources API is externalized via PR #6, the Kessel resource reporting calls in ProviderBuilder will need to be preserved in the new integration path. The HLD's Sources API Integration section documents these touchpoints.

```
AbstractAuthorizationBackend
├── RBACAuthorizationBackend (existing system)
└── KesselAuthorizationBackend (new Kessel integration)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

IIUC, the purpose is to replace the existing system used in SaaS with Kessel integration.
Only then, we can use the kessel based-authorization in the on-prem.

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.

Correct — for on-prem deployments, Kessel replaces the SaaS RBAC service entirely. The authorization service abstraction in the HLD (Section 8.2) handles this: it returns a KesselAuthorizationBackend when ONPREM=True and the existing RBACAuthorizationBackend for SaaS. This lets us adopt Kessel for on-prem without affecting the SaaS path.

Copy link
Copy Markdown
Contributor

@lcouzens lcouzens left a comment

Choose a reason for hiding this comment

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

There is a lot to go over here, I probably need to read it again tbh. But I left some initial thoughts.

- `rbac/role:cost-openshift-viewer`
- `rbac/role:cost-price-list-administrator`
- `rbac/role:cost-price-list-viewer`
- `rbac/role:cost-cloud-viewer`
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.

This one is not needed for On prem initially. Cloud here would be for AWS, Azure etc but we are only supporting OCP.

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.

These roles are taken from the SaaS schema, I'd rather leave them as such and have a single source of truth for both onPrem and SaaS instead of creating a separate schema for each instance and drifting in the future. Thoughts?


### 3. Provider Creation: Resource Synchronization

**Scenario**: User creates new OCP provider, triggering resource sync to Kessel.
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 guess this is a phase 2 question, but how are we planning to sync Node/Namespace resources?

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.

good point, it should register all 3 resources: cluster, node and namespace.

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.

Done — all 3 resource types are now registered at provider creation. See Provider Creation: Resource Synchronization and Resource Reporter.


---

### 6. Provider Deletion: Resource Cleanup
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.

Should we complete a cascade delete on the koku side first then send the delete request to kessel afterwards? That way we confirm the delete completes successfully in koku before deleting anything else.

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.

Makes sense. I'll update the doc to reflect that flow

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.

Done — deletion order is now Koku/Postgres first, then Kessel cleanup. See Provider Deletion: Resource Cleanup and Sources API Integration.


**Q1: What happens when Kessel is unavailable?**
- **Decision Needed**: Fail open (allow all) or fail closed (deny all)?
- **Recommendation**: Fail closed with cached permissions (if available)
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.

Agreed


**Q2: Should we cache Kessel permission checks?**
- **Decision Needed**: Cache TTL and invalidation strategy
- **Recommendation**: 30-second TTL (matching current RBAC cache)
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.

Agreed

2. Organization admin
3. No default owner (explicit assignment required)
- **Recommendation**: User who creates provider
- **Rationale**: Matches intuitive ownership model
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.

So the user creating it makes sense but the org admin would also have full access to it too.

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.

yes, I suspect that the subject relationship: user A belongs to group B, which is managed by admin group C, for which user D belongs to should apply

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.

Agreed — org admins should have full access by default. This is already covered by the existing 3-tier model: org admins are assigned the Cost Administrator role, which has cost_management_openshift_cluster_all permission at the tenant level. That grants access to all clusters in the organization, including any newly created ones.

So the flow is: the creating user gets explicit owner on the cluster, and org admins get access implicitly through their admin role binding on the tenant. No additional explicit relationship needed.

1. Lazy sync during first query
2. Background Celery job
3. Event-driven sync during data processing
- **Recommendation**: Start with lazy sync (Option 1)
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.

This needs some thought, we probably need a combination tbh. Since nodes and projects could change between each upload cycle. We likely need dedicated tables on the cost side that are up to date during runtime (pipeline processing) then get synced to kessel with an event.

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.

Agreed — pipeline-driven sync is the right approach here. Nodes and namespaces are naturally discovered during data ingestion (the Trino summarization step), so that's the natural integration point rather than the query path or a separate periodic scan.

The plan would be:

  1. During the data processing pipeline, when new nodes/namespaces are discovered, record them in a dedicated tracking table (e.g., kessel_synced_resources) and sync to Kessel.
  2. The tracking table gives us idempotency (don't re-sync what's already synced) and a built-in reconciliation mechanism (query for synced = false to find anything that failed and needs retry).
  3. Kessel sync remains non-blocking — if Kessel is down during ingestion, mark as pending and retry on the next cycle.

I've updated the document to make pipeline-driven sync the recommended approach, with the tracking table as the enabler for reconciliation. This also addresses Q6 (bulk sync) since the tracking table naturally supports it.

- **Rationale**: Simpler, no new background jobs

**Q6: Should we support bulk resource synchronization?**
- **Use Case**: Operator adds Kessel to existing Koku deployment with many clusters
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 dont think this is necessary but could be a nice to have depending how we implement Q5

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.

My thinking is when we deploy a new instance of CM in a cluster that has already been provisioned with Kessel and we want to sync it. I'd guess that new installations with no previous ReBAC server available will not have such challenges.
We can deliver a version that only supports new installations and we will support the sync in a future release on as you mentioned.

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.

Agreed — this is effectively addressed by the pipeline-driven sync approach. The kessel_synced_resources tracking table we've added to the design gives us built-in reconciliation: any resource with kessel_synced = false is automatically retried on the next processing cycle.

For the "add Kessel to an existing Koku deployment" scenario, the existing kessel_sync_resources management command handles bulk resync. That said, Phase 1 targets new installations only — the migration/sync story for existing deployments will come in a future release.


**Q7: How to handle Kessel schema version updates?**
- **Decision Needed**: Schema migration strategy
- **Recommendation**: Follow Red Hat platform schema versioning
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'm not sure what we actually need to be handling here.

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.

We need to investigate how does schema updates impact an existing ReBAC: if the schema adds new relationships/roles then the migration is straightforward. But if we have breaking changes, we need to define what to do with these. Hopefully these changes are incremental and additive but also have to consider when they are otherwise.

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.

Right that makes sense. In general all of the changes around this should be additive to avoid any breaking changes.

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.

Added a concrete Schema Upgrade Strategy section to the HLD (under Operational Considerations). The approach:

  1. Additive-only policy — new releases can add definitions/relations/permissions but never remove or rename, so existing SpiceDB tuples stay valid.
  2. Schema version tracking via KESSEL_SCHEMA_VERSION setting.
  3. Management command kessel_update_schema that checks the version, applies the new schema.zed, and seeds any new roles incrementally.
  4. Helm integration — runs as a post-upgrade hook, similar to Django migrate.

This keeps upgrades safe and idempotent. See the new section for the full workflow diagram.

- Relations: `org` (tenant), `viewer` (principals/groups), `cluster` (parent cluster)
- Permission: `view` (inherits from parent cluster)

**Full ZED schema definitions**: See [kessel-ocp-implementation-guide.md](./kessel-ocp-implementation-guide.md#phase-2-zed-schema-definitions)
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.

Should this link to some more details?

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.

Good catch — the supporting document exists but wasn't included in this PR. I'll add it in the next push.

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.

Done — the implementation guide is now included in this PR. See kessel-ocp-implementation-guide.md.


**Solution**: Koku provides **role seeding tool** to simplify role instance creation for operators.

**See details**: [kessel-only-role-provisioning.md](./kessel-only-role-provisioning.md)
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.

Should this link to some more details?

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.

Good catch — the supporting document exists but wasn't included in this PR. I'll add it in the next push.

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.

Done — the role provisioning strategy document is now included in this PR. See kessel-only-role-provisioning.md.

jordigilh and others added 2 commits February 16, 2026 13:59
Add implementation guide and role provisioning strategy as companion
documents to the Kessel OCP integration HLD. Update all three docs to
align with PR feedback: rename ONPREM setting, fix method signatures,
correct deletion order, add pipeline-driven sync references, and align
code examples with Koku conventions (imports, logging, test patterns).

Co-authored-by: Cursor <cursoragent@cursor.com>
Add Schema Upgrade Strategy section covering additive-only policy,
version tracking, kessel_update_schema management command, and Helm
post-upgrade hook integration. Also fix broken access-management-api
cross-doc link (replaced with TBD note for Phase 1.5).

Co-authored-by: Cursor <cursoragent@cursor.com>
…lifecycle)

- Update kessel-ocp-integration.md to match FLPATH-3294 implementation:
  - Authorization: StreamedListObjects + Check (Inventory API v1beta2), not Check-only
  - Resource lifecycle: ReportResource/DeleteResource (Inventory gRPC) + t_workspace tuples (Relations REST)
  - Component paths: koku_rebac, KesselAccessProvider; middleware populates access map
  - Error handling: 424 Failed Dependency (not 503)
  - Phase 1.5 (Access Management API/UI) marked not implemented
  - Tracking model: KesselSyncedResource; config: KESSEL_INVENTORY_*, KESSEL_RELATIONS_URL
  - Fix broken links; point to detailed design and zed-schema-upstream-delta
- Add kessel-hld-gaps-and-updates.md documenting all gaps and recommended HLD edits

Made-with: Cursor
Reporter->>Kessel: POST t_workspace tuple — Relations API REST
Kessel-->>Reporter: OK

Note over Reporter: Nodes/projects synced similarly;<br/>on-prem has no CDC, so Koku writes tuples directly
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

seems the ; prevents this sequence diagram from being rendered successfully

@jordigilh
Copy link
Copy Markdown
Contributor Author

Closing this PR — all documents from this branch have been superseded by the implementation PR #5933 (FLPATH-3294/kessel-rebac-integration), which includes:

  • kessel-ocp-integration.md (HLD) — updated to match the actual implementation (StreamedListObjects + Check, dual-phase lifecycle, koku_rebac paths, 424 error handling, Phase 1+2 delivered together)
  • kessel-ocp-detailed-design.md — comprehensive detailed design that absorbs the content from kessel-ocp-implementation-guide.md (ZED schema, resource reporter, authorization service, permission classes, SDK usage, configuration)
  • kessel-development-guide.md — developer setup guide
  • Role seeding — now handled by dev/kessel/seed-roles.yaml and Helm chart hooks, superseding kessel-only-role-provisioning.md
  • kessel-hld-gaps-and-updates.md — all gaps have been applied to the HLD; tracking doc removed

The DisabledUnleashClient code changes from this PR were already merged into main separately.

@jordigilh jordigilh closed this Mar 5, 2026
jordigilh added a commit to jordigilh/koku that referenced this pull request Mar 5, 2026
Remove 4 ephemeral/working documents from kessel-integration/:
- kessel-handover-session-2.md (handoff session notes)
- FLPATH-3319-description.md (Jira ticket body copy)
- kessel-ocp-test-plan-retired.md (dead retired test scenarios)
- kessel-hld-gaps-and-updates.md (working notes, all applied to HLD)

Fix broken links:
- Redirect 6 kessel-ocp-implementation-guide.md links in HLD to
  kessel-ocp-detailed-design.md (which supersedes the impl guide)
- Remove stale kessel-hld-gaps-and-updates.md references from HLD
  and detailed design
- Replace kessel-ocp-test-plan-retired.md links in test plan with
  inline notes

Closes PR project-koku#5887 which is fully superseded by PR project-koku#5933.

Made-with: Cursor
jordigilh added a commit to jordigilh/koku that referenced this pull request Mar 5, 2026
Remove 4 ephemeral/working documents from kessel-integration/:
- kessel-handover-session-2.md (handoff session notes)
- FLPATH-3319-description.md (Jira ticket body copy)
- kessel-ocp-test-plan-retired.md (dead retired test scenarios)
- kessel-hld-gaps-and-updates.md (working notes, all applied to HLD)

Fix broken links:
- Redirect 6 kessel-ocp-implementation-guide.md links in HLD to
  kessel-ocp-detailed-design.md (which supersedes the impl guide)
- Remove stale kessel-hld-gaps-and-updates.md references from HLD
  and detailed design
- Replace kessel-ocp-test-plan-retired.md links in test plan with
  inline notes

Closes PR project-koku#5887 which is fully superseded by PR project-koku#5933.

Made-with: Cursor
jordigilh added a commit to jordigilh/koku that referenced this pull request Mar 5, 2026
Remove 4 ephemeral/working documents from kessel-integration/:
- kessel-handover-session-2.md (handoff session notes)
- FLPATH-3319-description.md (Jira ticket body copy)
- kessel-ocp-test-plan-retired.md (dead retired test scenarios)
- kessel-hld-gaps-and-updates.md (working notes, all applied to HLD)

Fix broken links:
- Redirect 6 kessel-ocp-implementation-guide.md links in HLD to
  kessel-ocp-detailed-design.md (which supersedes the impl guide)
- Remove stale kessel-hld-gaps-and-updates.md references from HLD
  and detailed design
- Replace kessel-ocp-test-plan-retired.md links in test plan with
  inline notes

Closes PR project-koku#5887 which is fully superseded by PR project-koku#5933.

Made-with: Cursor
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