Skip to content

chore: close the 10 declarative coverage gaps found by the deploy/ coverage guardΒ #115

Closed

Description

@devantler

πŸ€– Generated by the Daily AI Engineer

Evidence

The coverage guard added in #114 found 14 (dimension, repository) pairs that are not declared in
deploy/. They are exempted there β€” explicitly and with a pointer to this issue β€” so the guard
could land green and ratchet. This issue closes them.

dimension repositories missing
repositories/ (Repository CRs) actions, .github, monorepo
repository-permissions/ aws, kyverno-policies, monorepo, provider-upjet-unifi
team-repositories/grant-maintainers-on-* agent-plugins, agent-skills, ascoachingogvaner, .github, fleet-gitops, maintenance, wedding-app

For contrast, labels/ and grant-admins-on-* are both 21/21 β€” completeness is achievable
here, which is the evidence that the above is drift rather than a designed boundary.

Problem

Each gap means a repository whose settings, collaborator permissions, or team access are not
reconciled from Git. The state is whatever it happens to be, and it can be changed by hand without
anything reverting it β€” the exact failure the declarative model exists to prevent.

Notes before starting

Acceptance criteria

  • Each of the 14 pairs is either declared in deploy/, or kept as an exemption whose reason
    states the deliberate intent.
  • tests/declarative-coverage.sh passes with its exemption list reduced accordingly (the guard
    already fails on a stale exemption, so this is self-enforcing).
  • No net-new resource claims Delete or an external name.

Split per dimension if it reviews better. Part of #56.

Activity

  1. coderabbitai commented on Jul 18, 2026

    @coderabbitai
    πŸ”— Related PRs

    #67 - feat: require actions pinned to a full-length commit SHA on all repos but actions [merged]
    #78 - feat(repositories): declare provider-upjet-unifi (net-new Library repo) [merged]
    #82 - feat: declare the devantler-tech/aws config-tenant repo [merged]
    #88 - feat: archived-repo pattern + reusable-workflows archival groundwork [merged]
    #103 - feat(teams): activate declarative Admins policy [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!

  2. devantler commented on Jul 18, 2026

    @devantler
    ContributorAuthor

    πŸ€– Generated by the Daily AI Engineer

    Correction β€” 14 gaps β†’ 10; repository-permissions was never a gap

    A review finding on #114 caught a real error in how I measured this, and it changes the numbers
    above. The original count came from enumerating files on disk. Only what kubectl kustomize deploy/ actually renders reconciles β€” and deploy/repository-permissions/ is deliberately
    not wired into deploy/kustomization.yaml:

    # repository-permissions/ is intentionally NOT wired in yet β€” its own
    # kustomization.yaml header documents the precondition (provider-upjet-github
    # bump for `sha_pinning_required`, crossplane-contrib/provider-upjet-github#288).
    # Hit live 2026-07-09: publishing it stalled the tenant `apps` Kustomization's
    # health check for 20m every reconcile, blocking prod deploys and the merge queue.
    

    So that whole dimension is dormant by design, and its four "missing" repos (aws,
    kyverno-policies, monorepo, provider-upjet-unifi) were phantoms β€” there is nothing to
    declare while nothing reconciles. Re-adding those files would not close a gap; re-wiring the
    directory is a separate, precondition-gated decision that belongs with the provider bump.

    Corrected scope β€” 10 real gaps in 2 dimensions:

    dimension repositories missing
    repositories/ (Repository CRs) actions, .github, monorepo
    team-repositories/grant-maintainers-on-* agent-plugins, agent-skills, ascoachingogvaner, .github, fleet-gitops, maintenance, wedding-app

    The guard in #114 now derives coverage from the rendered manifest, so it measures what actually
    reconciles and its exemption list is down to these 10. The acceptance criteria above stand, minus
    the repository-permissions row.

  3. changed the title [-]chore: close the 14 declarative coverage gaps found by the deploy/ coverage guard[/-] [+]chore: close the 10 declarative coverage gaps found by the deploy/ coverage guard[/+] on Jul 18, 2026
  4. added theissue type on Jul 19, 2026
  5. moved this to πŸ“₯ Backlog in 🌊 Project Boardon Jul 19, 2026
  6. devantler commented on Sep 25, 2026

    @devantler
    ContributorAuthor

    πŸ€– Generated with Claude Code in an interactive session with the maintainer.

    State of the remaining 10 exemptions (read-only, 2026-09-25)

    repositories/ (actions, .github, monorepo). The provider 422 that blocked these (#112) is gone: 13 active repositories now run Observe/Create/Update on provider v0.20.0. The catch is that the shared patch declares the org's squash-only merge policy on every Repository, Observe-only ones included, and the drift check compares every declared field with live GitHub.

    Repository Out of line with the shared policy
    actions merge commits and rebase merges enabled
    .github merge commits and rebase merges enabled; head branches not auto-deleted; "update branch" not suggested
    monorepo none

    Rulesets already enforce squash-only merges, so these differences are in settings, not in behaviour. monorepo can be adopted directly. Declaring actions or .github Observe-only would put them straight into the drift report. Correcting them means write-enabling .github's management of its own settings. actions should skip this and go to archived-repositories/ when it is archived (#240).

    team-maintainers (agent-plugins, agent-skills, .github, maintenance, ascoachingogvaner, fleet-gitops, wedding-app). None of the seven has the Maintainers team live; each has only Admins. The 14 declared grants give maintain, and the team's only member is devantler, who is already an organization admin. Declaring these grants changes no effective access today. ascoachingogvaner and wedding-app are public now; fleet-gitops is still private. Whether the team should cover the private repository, and what the team means once #104 lands, is a maintainer decision. maintenance is being retired (#84), so its exemption can simply expire with it.

  7. self-assigned this
    on Sep 25, 2026
  8. added 3 commits that reference this issue on Sep 25, 2026
  9. moved this from πŸ“₯ Backlog to πŸ‘€ In Review in 🌊 Project Boardon Sep 25, 2026
  10. added a commit that references this issue on Sep 25, 2026
    0b12569
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Fields

Priority

None yet

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions