Repository navigation
fix(people): declare addyCooks, whom the first import missed - #10
Conversation
Every other organisation member got a file from scripts/import-from-live.sh; addyCooks did not, and nothing since has added one. Because github_team_members is authoritative per team, the first apply read core-team as the two people the catalogue named and removed the third, taking maintain on ten repositories with it. The organisation membership was never in state, so it survived -- which is why they remained a member while losing every merge right. The daily drift check has been failing on exactly this: "organisation members with no file in people/: addyCooks." Declaring them restores the access and closes that failure. github_membership writes with PUT and adopts the active membership rather than creating one, as it did for puri-adityakumar, so this needs no import block. Team role is `member`, matching akramcodez: the team role governs who administers the team, not what they can merge.
This pull request changes the organisation. Read the plan before approving.Plan outputgithub_team.root["nanocoder-desktop"]: Refreshing state... [id=20259972]
github_team.root["core-team"]: Refreshing state... [id=17922917]
github_team.root["admin"]: Refreshing state... [id=15526101]
module.repository["nanocoder"].github_repository.this: Refreshing state... [id=nanocoder]
module.repository["organisation"].github_repository.this: Refreshing state... [id=organisation]
module.repository["contentforest"].github_repository.this: Refreshing state... [id=contentforest]
module.repository["sentinel"].github_repository.this: Refreshing state... [id=sentinel]
module.repository["taskforest"].github_repository.this: Refreshing state... [id=taskforest]
module.repository["docs"].github_repository.this: Refreshing state... [id=docs]
module.repository["nanolist"].github_repository.this: Refreshing state... [id=nanolist]
module.repository["nanoterm"].github_repository.this: Refreshing state... [id=nanoterm]
github_membership.this["akramcodez"]: Refreshing state... [id=Nano-Collective:akramcodez]
module.repository["roster"].github_repository.this: Refreshing state... [id=roster]
module.repository["prompt-scrubber"].github_repository.this: Refreshing state... [id=prompt-scrubber]
module.repository["get-md"].github_repository.this: Refreshing state... [id=get-md]
module.repository["nanocoder-desktop"].github_repository.this: Refreshing state... [id=nanocoder-desktop]
module.repository["nanotune"].github_repository.this: Refreshing state... [id=nanotune]
module.repository["json-up"].github_repository.this: Refreshing state... [id=json-up]
module.repository["infrastructure"].github_repository.this: Refreshing state... [id=infrastructure]
module.repository[".github"].github_repository.this: Refreshing state... [id=.github]
github_membership.this["spinualexandru"]: Refreshing state... [id=Nano-Collective:spinualexandru]
github_membership.this["mrspence"]: Refreshing state... [id=Nano-Collective:mrspence]
github_membership.this["followbenparry"]: Refreshing state... [id=Nano-Collective:followbenparry]
github_membership.this["Avtrkrb"]: Refreshing state... [id=Nano-Collective:Avtrkrb]
github_membership.this["will-lamerton"]: Refreshing state... [id=Nano-Collective:will-lamerton]
github_membership.this["puri-adityakumar"]: Refreshing state... [id=Nano-Collective:puri-adityakumar]
github_team_members.this["admin"]: Refreshing state... [id=15526101]
github_team_members.this["core-team"]: Refreshing state... [id=17922917]
github_team_members.this["nanocoder-desktop"]: Refreshing state... [id=20259972]
module.repository["nanotune"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1146764215]
module.repository["json-up"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1165641658]
module.repository["contentforest"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1222794803]
module.repository["get-md"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1081935107]
module.repository["organisation"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1064141539]
module.repository["taskforest"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1255394363]
module.repository[".github"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1256130038]
module.repository["nanoterm"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1313629853]
module.repository["docs"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1163990675]
module.repository["infrastructure"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1428211040]
module.repository["roster"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1354824928]
module.repository["nanocoder-desktop"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1429652002]
module.repository["nanocoder"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1029049168]
module.repository["nanolist"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1339377078]
module.repository["sentinel"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1304294125]
module.repository["prompt-scrubber"].github_repository_vulnerability_alerts.this: Refreshing state... [id=1276739924]
module.repository["nanotune"].github_repository_ruleset.quality[0]: Refreshing state... [id=22462202]
module.repository["nanocoder-desktop"].github_repository_ruleset.quality[0]: Refreshing state... [id=25634670]
module.repository["sentinel"].github_repository_ruleset.quality[0]: Refreshing state... [id=22271986]
module.repository["nanoterm"].github_repository_ruleset.quality[0]: Refreshing state... [id=22445028]
module.repository["json-up"].github_repository_ruleset.quality[0]: Refreshing state... [id=22271991]
module.repository["get-md"].github_repository_ruleset.quality[0]: Refreshing state... [id=22271989]
module.repository["prompt-scrubber"].github_repository_ruleset.quality[0]: Refreshing state... [id=22271987]
module.repository["nanocoder"].github_repository_ruleset.quality[0]: Refreshing state... [id=22271985]
module.repository["nanocoder-desktop"].github_repository_ruleset.review[0]: Refreshing state... [id=25634667]
module.repository["prompt-scrubber"].github_repository_ruleset.review[0]: Refreshing state... [id=22277954]
module.repository["contentforest"].github_repository_ruleset.review[0]: Refreshing state... [id=22277962]
module.repository["nanoterm"].github_repository_ruleset.review[0]: Refreshing state... [id=22389731]
module.repository["sentinel"].github_repository_ruleset.review[0]: Refreshing state... [id=22277952]
module.repository["get-md"].github_repository_ruleset.review[0]: Refreshing state... [id=22277955]
module.repository["nanocoder"].github_repository_ruleset.review[0]: Refreshing state... [id=22277950]
module.repository["organisation"].github_repository_ruleset.review[0]: Refreshing state... [id=22277963]
module.repository["json-up"].github_repository_ruleset.review[0]: Refreshing state... [id=22277958]
module.repository["nanotune"].github_repository_ruleset.review[0]: Refreshing state... [id=22277960]
github_team_repository.this["core-team:json-up"]: Refreshing state... [id=17922917:json-up]
github_team_repository.this["core-team:nanoterm"]: Refreshing state... [id=17922917:nanoterm]
github_team_repository.this["core-team:nanocoder-desktop"]: Refreshing state... [id=17922917:nanocoder-desktop]
github_team_repository.this["core-team:prompt-scrubber"]: Refreshing state... [id=17922917:prompt-scrubber]
github_team_repository.this["core-team:get-md"]: Refreshing state... [id=17922917:get-md]
github_team_repository.this["core-team:sentinel"]: Refreshing state... [id=17922917:sentinel]
github_team_repository.this["core-team:nanocoder"]: Refreshing state... [id=17922917:nanocoder]
github_team_repository.this["nanocoder-desktop:nanocoder-desktop"]: Refreshing state... [id=20259972:nanocoder-desktop]
github_team_repository.this["core-team:docs"]: Refreshing state... [id=17922917:docs]
github_team_repository.this["core-team:nanotune"]: Refreshing state... [id=17922917:nanotune]
github_team_repository.this["core-team:.github"]: Refreshing state... [id=17922917:.github]
OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
~ update in-place (current -> planned)
OpenTofu will perform the following actions:
# github_membership.this["addyCooks"] will be created
+ resource "github_membership" "this" {
+ downgrade_on_destroy = false
+ etag = (known after apply)
+ id = (known after apply)
+ role = "member"
+ username = "addyCooks"
}
# github_team_members.this["core-team"] will be updated in-place
~ resource "github_team_members" "this" {
id = "17922917"
# (2 unchanged attributes hidden)
+ members {
+ role = "member"
+ username = "addyCooks"
}
# (2 unchanged blocks hidden)
}
# module.repository[".github"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = ".github"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = ".github"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (31 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["contentforest"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "contentforest"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "contentforest"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["contentforest"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22277962"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["docs"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "docs"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "docs"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["get-md"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "get-md"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "get-md"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["get-md"].github_repository_ruleset.quality[0] will be updated in-place
~ resource "github_repository_ruleset" "quality" {
id = "22271989"
name = "Quality gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["get-md"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22277955"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["infrastructure"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "infrastructure"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "infrastructure"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (31 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["json-up"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "json-up"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "json-up"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["json-up"].github_repository_ruleset.quality[0] will be updated in-place
~ resource "github_repository_ruleset" "quality" {
id = "22271991"
name = "Quality gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["json-up"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22277958"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["nanocoder"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "nanocoder"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "nanocoder"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["nanocoder"].github_repository_ruleset.quality[0] will be updated in-place
~ resource "github_repository_ruleset" "quality" {
id = "22271985"
name = "Quality gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["nanocoder"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22277950"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["nanocoder-desktop"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_squash_merge = false -> true
~ delete_branch_on_merge = false -> true
id = "nanocoder-desktop"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "nanocoder-desktop"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (31 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["nanocoder-desktop"].github_repository_ruleset.quality[0] will be updated in-place
~ resource "github_repository_ruleset" "quality" {
id = "25634670"
name = "Quality gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["nanocoder-desktop"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "25634667"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["nanolist"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "nanolist"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "nanolist"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["nanoterm"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "nanoterm"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "nanoterm"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (30 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["nanoterm"].github_repository_ruleset.quality[0] will be updated in-place
~ resource "github_repository_ruleset" "quality" {
id = "22445028"
name = "Quality gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["nanoterm"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22389731"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["nanotune"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "nanotune"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "nanotune"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["nanotune"].github_repository_ruleset.quality[0] will be updated in-place
~ resource "github_repository_ruleset" "quality" {
id = "22462202"
name = "Quality gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["nanotune"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22277960"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["organisation"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "organisation"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "organisation"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["organisation"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22277963"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["prompt-scrubber"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "prompt-scrubber"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "prompt-scrubber"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (31 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["prompt-scrubber"].github_repository_ruleset.quality[0] will be updated in-place
~ resource "github_repository_ruleset" "quality" {
id = "22271987"
name = "Quality gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["prompt-scrubber"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22277954"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["roster"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "roster"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "roster"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["sentinel"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "sentinel"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "sentinel"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (32 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.repository["sentinel"].github_repository_ruleset.quality[0] will be updated in-place
~ resource "github_repository_ruleset" "quality" {
id = "22271986"
name = "Quality gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["sentinel"].github_repository_ruleset.review[0] will be updated in-place
~ resource "github_repository_ruleset" "review" {
id = "22277952"
name = "Review gates"
# (6 unchanged attributes hidden)
+ bypass_actors {
+ actor_id = 0
+ actor_type = "OrganizationAdmin"
+ bypass_mode = "always"
}
+ bypass_actors {
+ actor_id = 2
+ actor_type = "RepositoryRole"
+ bypass_mode = "always"
}
# (2 unchanged blocks hidden)
}
# module.repository["taskforest"].github_repository.this will be updated in-place
~ resource "github_repository" "this" {
~ allow_merge_commit = false -> true
~ allow_rebase_merge = false -> true
~ allow_squash_merge = false -> true
id = "taskforest"
+ merge_commit_message = "PR_TITLE"
+ merge_commit_title = "MERGE_MESSAGE"
name = "taskforest"
+ squash_merge_commit_message = "COMMIT_MESSAGES"
+ squash_merge_commit_title = "COMMIT_OR_PR_TITLE"
# (30 unchanged attributes hidden)
}
Plan: 1 to add, 35 to change, 0 to destroy.
─────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so OpenTofu can't
guarantee to take exactly these actions if you run "tofu apply" now.
Planned from |
|
Note for whoever reviews the plan: it reads The other 34 are the standing drift that every plan here has shown — the It is worth its own issue: drift that survives an apply means either the |
What this is
addyCooks(Aditya Mishra) is an active member of the organisation with no filein
people/. Every other member got one fromscripts/import-from-live.shinthe first import; this one did not, and nothing since has added it.
github_team_membersis authoritative per team, so the first apply readcore-teamas the two people the catalogue named and removed the third. Theorganisation membership was never in state, so there was nothing to destroy and
it survived — which is why they stayed a member of the organisation while
losing
maintainon all ten of core-team's repositories.This was reported from the outside before we noticed it: they went to review
and merge pull requests, found no merge access, and checked their email.
What it does
Adds
people/addyCooks.yamldeclaring them a member of the organisation and amember of
core-team— the access they held before the apply, nothing more.member, matchingakramcodez. The team role governs whoadministers the team, not what they can merge; merge rights come from
core-team's own
maintaingrant inteams/core-team.yaml.github_membershipwrites with PUT and adopts anactive membership rather than creating one, exactly as it did for
puri-adityakumar.The drift check
The daily Drift run has been failing on precisely this:
That failure is cleared by this change. Running the read-back on this branch
now reports the inverse, which is the expected pre-apply state and is what the
plan should show:
It clears on the apply.
policy/checks.sh --offline, which is what Validateruns, passes on this branch.
Not fixed here
The other Drift failure is unrelated and still open:
That needs the secrets themselves, not a catalogue change.
Worth a separate look:
tofu/imports.tfstill carries the hand-writtennanocoder-desktopimport block, which its own comment says to delete in thepull request after the apply that used it (#8, applied 2026-10-22).