Skip to content

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

Closed

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

  1. added theissue type on Aug 7, 2026
  2. moved this to 📥 Backlog in 🌊 Project Boardon Aug 7, 2026
  3. coderabbitai commented on Aug 7, 2026

    @coderabbitai
    🔗 Related PRs

    #88 - feat: archived-repo pattern + reusable-workflows archival groundwork [merged]
    #125 - fix(repositories): pin hasDownloads so reconciliation stops 422-ing [merged]
    #127 - fix(repositories): keep org-enforced signoff out of update payloads [merged]
    #128 - fix(repositories): stop declaring org-enforced signoff so updates can apply [merged]
    #136 - fix(repositories): declare org-enforced signoff so updates can apply [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  4. devantler commented on Sep 19, 2026

    @devantler
    ContributorAuthor

    🤖 Generated by the Agentic Engineer

    Status 2026-09-19: the first two criteria now hold; the third is still open.

    • Live world-at-ruin settings, read from the GitHub API just now: merge commits off, rebase merges off, squash on. That matches what is declared.
    • The drift check failed on its scheduled runs from 09-16 to 09-19, each time on exactly these two world-at-ruin fields. The manual run at 10:17Z today passed, so the next scheduled run should be clean.
    • Still open: record whether the shared patch should keep applying to Observe-only repositories, and apply the same reasoning to ascoachingogvaner and wedding-app.
  5. added a commit that references this issue on Sep 22, 2026
  6. moved this from 📥 Backlog to 👀 In Review in 🌊 Project Boardon Sep 22, 2026
  7. added a commit that references this issue on Sep 22, 2026
    7d0ac28
  8. moved this from 👀 In Review to ✅ Done in 🌊 Project Boardon Sep 22, 2026
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

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions