Skip to content

world-at-ruin declares squash-only merges but live allows merge commits and rebase merges #141

Description

@devantler

🤖 Generated by the Agentic Engineer

Evidence

Found 2026-08-07 by the first run of the declared-vs-live drift check added in #140:

DRIFT world-at-ruin.allowMergeCommit: declared=false live=true
DRIFT world-at-ruin.allowRebaseMerge: declared=false live=true

Live cluster state, same moment:

Repository resource managementPolicies Synced
world-at-ruin [Observe] ReconcileSuccess

Problem

deploy/repositories/kustomization.yaml stamps the shared squash-only merge policy
(allowSquashMerge: true, allowMergeCommit: false, allowRebaseMerge: false, …) onto every
Repository, including world-at-ruin, which is still Observe-only from its imperative bootstrap.
An Observe-only resource writes nothing, so it never issues an update PATCH, never accumulates a
diff, and reports Synced=ReconcileSuccess forever — while the policy it appears to declare has
never reached GitHub.

The result is a repository whose rendered manifest reads as authoritative for its merge policy and
whose live merge policy is the opposite. Merge commits and rebase merges are both enabled on
world-at-ruin today.

This matters beyond tidiness: the portfolio's release contract assumes squash-merge, because the
squashed PR title is what drives the changelog and the semantic version. A merge-commit or rebase
merge on world-at-ruin bypasses that.

ascoachingogvaner and wedding-app are also Observe-only and carry the same stamped patch. They
show no drift right now only because #138 corrected their declarations to match live — the same
structural gap applies to them the moment a declaration and live disagree.

Expected behaviour

A repository's rendered forProvider is either enforced, or it is visibly not authoritative. A
declared value that cannot be applied should not read as configuration.

Suggested approach

deploy/repositories/world-at-ruin.yaml already describes the intended path: promote it to
Observe/Create/Update (never Delete, never LateInitialize — see
tests/repository-update-policy.sh) now that the observed state has been reviewed, and pin the
fields the config should own. Promotion is what makes the squash-only policy real.

Worth deciding at the same time whether the shared merge-policy patch should apply to Observe-only
resources at all, given it produces a declaration that cannot be honoured.

Acceptance criteria

  • world-at-ruin's live merge policy is squash-only, verified against the GitHub API after the
    change reconciles — not inferred from Synced.
  • scripts/check-repository-drift.sh reports no DRIFT lines for world-at-ruin.
  • It is recorded whether the shared patch should keep applying to Observe-only resources, and
    the same reasoning is applied to ascoachingogvaner and wedding-app.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions