devantler-tech / devantler-tech/ksail

Every KSail-managed platform component stays overridable and extensible via GitOps, and survives reconcile and upgrade

Open
#6,878 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
165
Forks
12
Avg merge
5h 41m
Merged PRs (30d)
337

Description

> 🤖 Generated by the Agentic Engineer

Part of #6875. Implements the contract decided in #6876.

## Why this is not optional

Maintainer direction 2026-09-04 pairs two requirements that pull against each other: the platform
config is **built into KSail and requires no hand-written GitOps repository**, *and* users must be able
to **extend or override every KSail-managed component and configuration via GitOps**, so it is always
possible to configure it further.

Built-in defaults without an escape hatch is the failure mode that makes people fork. The moment an
adopter needs one annotation KSail does not expose, a platform they cannot override becomes a platform
they must abandon — and everything #6875 promises about saving years is lost at exactly the point they
start doing real work.

So this is the child that decides whether the epic is adoptable, not a convenience layer on top of it.

## What it must support

- **Override** a value inside a component KSail manages, without taking ownership of the whole
component.
- **Extend** the platform with resources KSail knows nothing about, alongside managed ones.
- **Take full ownership** of a component — stop KSail managing it — without abandoning the rest of the
platform.
- **Survive reconcile.** An override is not a race with KSail's own reconciliation. Whatever the
precedence rules from #6876 say, the observed behaviour must match them.
- **Survive upgrade.** A KSail version bump that changes a component's built-in defaults must not
silently discard an adopter's override, and where it conflicts, must surface it rather than pick.

## Acceptance criteria

- [ ] Each of the four operations above is demonstrated end-to-end against a real cluster.
- [ ] An override applied via GitOps is still in effect after a KSail reconcile — asserted by reading
the live resource back, not inferred from the render.
- [ ] An override that conflicts with a changed built-in default on upgrade is surfaced, with a
documented resolution path.
- [ ] Taking ownership of one component leaves the remaining managed components working.
- [ ] Behaviour matches the precedence rules recorded in #6876; any divergence is a defect in one of
the two.
- [ ] Documented with a worked example for each operation.

## Verification note

This is behavioural, so static validation cannot establish it. Every criterion above needs the real
effect observed — the rendered manifest agreeing is necessary and not sufficient, because the failure
mode here is precisely that reconciliation overwrites what the render showed.

## Size

Large. Worth splitting per operation once #6876 lands.

Contributor guide

Open the contributing guide

Research direction

Start by reading the precedence rules in #6876 and the parent scope in #6875 before splitting this large issue by operation. Validate each override, extension, ownership transfer, reconcile, and upgrade scenario against a real cluster, checking live resources rather than rendered manifests. Done means all acceptance criteria pass and each operation has a documented worked example.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, kubernetes
Domain
devops, infrastructure
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.