Skip to content

Build Not yet confirmed elsewhere1 publisher 2 min read Published

GitHub's Evergreen app revokes outside collaborator access when a quarterly review goes unanswered

GitHub built Evergreen, an app that revokes outside collaborators' access when nobody answers a quarterly review. GitHub says orgs that share repos with customers can adapt it. It runs on stock GitHub features and a small Go server.

The Engineer · Build desk

Send a correction

Illustration accompanying GitHub's Evergreen app revokes outside collaborator access when a quarterly review goes unanswered
Generated illustration
Unanswered reviews cut outside collaborators off Who Evergreen's access reviews and stale-repo checks reach, and what the app does to each, as GitHub describes it.

Outside collaborators lose access if nobody answers a review, and unchecked ones are revoked when the issue closes. A non-Hubber's close is reopened. Owners come from a custom property or the review team. Repos with no human activity are flagged, warned and archived.

Unanswered reviews cut outside collaborators off
WhoHowKindClaim
Outside collaboratorsIf nobody responds to an access review, access is revoked: the safe outcome is the defaultexposure3
Unchecked collaboratorsRevoked when the review issue closes; Evergreen posts a receipt of what it kept and removeddecision10
Non-HubbersIf one closes an access review issue, Evergreen reopens it and posts a note explaining whyconstraint11
Repo ownersNamed by an evergreen_repo_owner property, else recent authors on the access review team are cc'dcapability12
Repos with no human activityFlagged and warned past a threshold, and archived if still untouchedexposure2

What happened

  • The second workflow flags repos with no human activity past a threshold, warns their owners, and archives them if they are still untouched.
  • Reviews open two weeks before their cleanup runs, and a built-in grace period stops a stray manual run from bringing the cleanup forward.
  • Each repo gets a checklist issue. Closing it fires a webhook, and Evergreen keeps the checked collaborators, revokes the rest and posts a receipt comment.
  • If someone who is not a GitHub employee closes a review issue, the app reopens it and posts a note explaining why.
  • Each repo's review state is one JSON file in a controller repo, recording who had access, the deadline, who decided and what happened.

Why it matters

  • Who's exposed exposure Customers and partners carry the default: a review that nobody answers cuts their access, so employee attention is what keeps outside collaborators connected.
  • What it limits constraint The close guard and the notification chain both depend on a defined employee group and review team, so an org without that split has to build it first.
  • Who has to decide decision Evergreen only archives and never deletes, so an adopter with contractual data-deletion duties to customers has to decide how to handle those separately.

The risky moment in Evergreen is the issue close. According to GitHub, the app reads the checkboxes, retains the checked collaborators and revokes the rest [10]. Close an issue with no boxes checked and no collaborator is retained [14]. That matches the stated rule that the safe outcome is the default outcome [3]. Recovery depends on the record: every access change is written into the repo's tracking issue, and GitHub says undoing a mistake takes a copy-paste of it to Copilot [4].

The state design is the best engineering in the post. Because state is plain files in git, the commit history is the audit trail, and a git log of one repo's state file answers why someone lost access [9]. There is no separate database or bespoke audit pipeline to run [9].

The owner lookup has a seam. A repo's owner comes from an evergreen_repo_owner custom property, or failing that from recent issue and commit authors who sit on the access review team [12]. Under those two steps, a repo with no property and no recent review-team authors would have nobody to notify [15].

For the pattern to transfer, the adopting org needs a group of employees distinct from the outsiders, because the close guard and the notification chain both key on that group [11][12]. The repos also have to be ones whose outside access is meant to lapse, as with the product trials and professional services engagements Evergreen was built for [1]. A partner who uses a repo daily and misses a notice would simply lose access [3]. We think default-revoke is the right tradeoff in GitHub's setting and a worse fit outside it.

GitHub calls the workflows a pattern you can adapt for your own organization [13]. The post text available stops at the deadline-passed section. It does not include repo counts, revocation rates or the inactivity threshold for archival.

What to watch

  • Whether GitHub publishes Evergreen's source or a template, since the post describes a pattern to adapt and an adopter would otherwise rebuild the Go server.
  • What the full post says happens after a review deadline passes, including how revocations are recorded and reversed.
  • Any figures on repos covered, collaborators revoked and access restored after a wrongful revocation.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence40
Adoption
Not scored
Hype gap+10
Incentives35
Confidence60
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    GitHub built Evergreen, a GitHub App, for a shared organization where GitHub employees ("Hubbers") collaborate with customers and partners on product trials and professional services engagements.

    Reported Supported Source: GitHub, github.blogView cited source
  2. [2]

    Evergreen runs two workflows: quarterly outside-collaborator access reviews, and stale repository detection in which repos with no human activity past a threshold are flagged, warned, and archived if still untouched.

    Reported Supported Source: GitHub, github.blogView cited source
  3. [3]

    Evergreen is fail secure: if nobody responds to an access review, access is revoked, so the safe outcome is the default outcome.

    Reported Supported Source: GitHub, github.blogView cited source

Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.

Add to ChatGPTAdd to Claude

Sources

1 independent publisher whose own reporting we read for this story.

  1. github.blog

    1 article · October 15, 2026

    Staying Evergreen: How we automated secure access and repo hygiene in a shared org

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Topics

Loading related stories