Repository navigation
Description
🤖 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 fromSynced. -
scripts/check-repository-drift.shreports noDRIFTlines forworld-at-ruin. - It is recorded whether the shared patch should keep applying to
Observe-only resources, and
the same reasoning is applied toascoachingogvanerandwedding-app.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Effort
Projects
- StatusShow more project fields✅ Done
Activity
coderabbitai commentedon Aug 7, 2026
🔗 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 plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.🧪 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:💬 Have feedback or questions? Drop into our discord!
devantler commentedon Sep 19, 2026
Status 2026-09-19: the first two criteria now hold; the third is still open.
world-at-ruinsettings, read from the GitHub API just now: merge commits off, rebase merges off, squash on. That matches what is declared.world-at-ruinfields. The manual run at 10:17Z today passed, so the next scheduled run should be clean.Observe-only repositories, and apply the same reasoning toascoachingogvanerandwedding-app.chore: agent-claim #141 nonce=9a5fb448c9e0b4a0ff051d20a94e6be1
fix(repositories): record why the shared merge policy covers observe-…