Repository navigation
[FEATURE] One breaking GitTarget API wave: the folder is described on the GitTarget #294
Description
Tracking issue for one breaking wave on GitTarget. Design:
docs/layout/api-wave.md (lands with #318; it was
docs/design/gittarget-api-wave.md).
What changed since this was filed
The wave lost its centrepiece and gained a deletion. spec.layout was reversed — #319 made
kustomization registration an invariant, which retired three of the five arguments against path
templates, so the template stays and gains two additive fields instead
(docs/layout/model.md, #293). The placement work is no
longer breaking at all.
Three items have since been dropped or added:
spec.mode: Observe|Write— dropped. Over a suspended target it bought only the difference
between a pause and a declared posture. A suspended target that keeps scanning and publishing
status.placementis the same adoption dry run with one field instead of two.suspendmust
keep observing, which deviates from Flux, wheresuspendstops reconciliation altogether; that
goes in the field's docs.GitTarget.spec.interval— dropped. Every input that changes what a scan would conclude
arrives as an event, on a watch. Flux polls because a Git remote cannot be watched, which is
exactly whyGitProvider.spec.intervalstays. The residual gap (a folder someone else edits
while we write nothing) is covered on demand by the reconcile-request annotation.- The source-scope simplification — added. It deletes
GitTarget.spec.allowedSourceNamespaces, so it breaks the same object B4 breaks and must ride
the same bump. It is also the only member that makes the API smaller
(docs/design/source-scope-simplification.md).
Why one wave rather than several changes
The consumer pins us three ways (image, Go module, require line), so each breaking release costs a
coordinated bump. That argues for batching, and it is the weaker half of the argument.
The stronger half survives in reduced form: several of these items are the same design decision seen
from different angles, and building them separately means deciding it several times, inconsistently.
The folder is described on the GitTarget. The connection describes only the connection.
spec.suspendsays whether we write to the folder.commitWindowandcommit.messagesay how writes to it are batched and phrased, and today they
live onGitProvider, which is the connection.serializeNamespaceandkustomizeRootsay what the documents in it look like — and these are
additive, so they ship without a bump.
Contents
-
— reversed; the additivespec.layoutserializeNamespace/kustomizeRootwork is not
breaking and does not belong to this wave ([FEATURE] A layout is the declared thing, not a path: GitTarget.spec.layout #293) -
— dropped, see abovespec.mode: Observe|Write -
spec.suspend+ therequestedAtannotation andstatus.lastHandledReconcileAt
(maintainer review F6).— dropped; it stays onspec.intervalonGitTarget
GitProvider, which polls -
commitWindow/commit.messagemove fromGitProvidertoGitTarget(config surface B4) - The source-scope break:
allowedSourceNamespacesremoved,allowSourceNamespaceOverride→
allowAnySourceNamespace,allowedNamespaces→accessFrom,sourceNamespace: "*"
redefined as one cluster-wide list and watch -
CommitRequestTTL / ownerRef + thedeleteverb (maintainer review F10) -
CommitRequest.spec.author, SAR-guarded (consumer ci(deps): Bump softprops/action-gh-release from 1 to 2 #5) - Movable destination via
status.observedDestination(consumer deps(deps): Bump github.com/onsi/gomega from 1.36.1 to 1.38.0 #6) -
meta.LocalObjectReferencefor the name half of our reference shapes (F12) - The
TooManyStreamscap — sequenced after the*redefinition, which removes the
fan-out it was written to bound - The
defaultClusterProvidererror message
Version stays v1alpha3: loud rejection of removed fields for one release, rather than paying for a
conversion path. The scope: Namespaced status-write envtest (F9) runs before any of this is
planned, because its answer constrains the enum work.
Activity
docs: one attribution spec, and the GitTarget wave is postponed rathe…
fix(placement)!: repository state must not move where we write, and a…
sunib commentedon Aug 28, 2026
Successor to the reversed
spec.layoutitem is now #322 (serializeNamespace+kustomizeRoot, additive, PR 4 of the plan). #293 is closed with the evidence that reversed it.sunib commentedon Sep 4, 2026
Closing as shipped.
spec.suspendand the reconcile-request annotation (#326), thecommitWindow/commit.messagemove and the source-scope deletion (#330), and the reference collapse ontometa.LocalObjectReferenceplus thescoperemoval (#333) are all on main as of 0.43.0.spec.modeandGitTarget.spec.intervalwere dropped in the design.What remains is three additive riders (
CommitRequest.spec.author, the CommitRequest lifecycle hole, thedefaultClusterProvider message), tracked on #339. Two members are dropped rather than deferred: theTooManyStreamscap (its fan-out was deleted by #330; it was never in code) and the movable destination (consumer ask #6; the destination stays immutable). PR #340 updates the docs accordingly.docs: close the API wave and placement-visibility issues, and drop th…