Skip to content

Formalize the process for moving maintainers to emeritus status - #114

Open
epugh wants to merge 6 commits into
opensearch-project:mainfrom
epugh:formalize_moving_maintainers_to_emeritus_status
Open

Formalize the process for moving maintainers to emeritus status#114
epugh wants to merge 6 commits into
opensearch-project:mainfrom
epugh:formalize_moving_maintainers_to_emeritus_status

Conversation

@epugh

@epugh epugh commented Jun 12, 2026

Copy link
Copy Markdown
Member

Description

This documents the "external" approach to moving inactive maintainers to emeritus.

Some questions:

  • Do we need to define how often we run this process? Is it annual? Is it as needed?
  • This is a potentially BIG change, how do we communicate it to our maintainer pool of people? DO we need to let them know this is coming as policy once it is adopted? Do we adopt the policy and then start it 30 days later?
  • We need to better understand how the OpenSearch Maintainer Dashboards picks active/inactive. Is it missing activity that would indicate active status?

Issues Resolved

Contributes towards #99

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Signed-off-by: Eric Pugh <epugh@opensourceconnections.com>
@epugh
epugh force-pushed the formalize_moving_maintainers_to_emeritus_status branch from 5977643 to 9a17398 Compare June 12, 2026 12:22
Signed-off-by: Eric Pugh <epugh@opensourceconnections.com>
@peterzhuamazon

Copy link
Copy Markdown
Member

Adding @andrross @getsaurabh02 to this conversation.
I am happy with the idea to introduce a formal process to make inactive maintainers move to emeritus.

This proposal is good start I suppose and we can build from here.

Comment thread policies/EMERITUS.md Outdated

Inactivity is identified via the [OpenSearch Maintainer Dashboard](https://metrics.opensearch.org/_dashboards/app/dashboards?security_tenant=global#/view/30fedc30-9ae2-11ef-a168-f19b1bbc360c?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-30d,to:now))&_a=(description:'Shows%20data%20about%20the%20activity%20of%20maintainers%20in%20the%20OpenSearch%20Project(since%2010-12-24,%20and%20the%20technical-steering%20repo%20since%2011-7-24).%20',filters:!(),fullScreenMode:!f,options:(hidePanelTitles:!f,useMargins:!t),query:(language:kuery,query:''),timeRestore:!t,title:'OpenSearch%20Maintainer%20Dashboard',viewMode:view)).

The dashboard labels a maintainer with status 'Inactive' if they have no activity in the repository in the past year.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wonder if 6months is enough indication to decide on inactivity compares to 1 year.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am okay with any number. Six months may be not enough time for quieter/smaller repos. For example, user-behavior-insights doesn't right now have a lot of activity, so a commit in ayear would indicate interest. I also don't want to cause too much churn of moving folks to emirtus just ot have then request access again, which would presumably happen on a six month cycle more than a 1 year cycle.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i am adding some text about 1 year being default, but there may be repos where that doesn't apply.

Comment thread policies/EMERITUS.md
Comment on lines +56 to +61
## Reinstatement

Emeritus status is not permanent. Any past maintainer can be reinstated at any time:

- The returning maintainer or another current maintainer opens a pull request moving them from the Emeritus section back to the active maintainers section, and restoring `CODEOWNERS` entries.
- The [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md) restore the maintainer's permissions upon merge.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if this PR should move to .github repo to extend/enhance the original document:

https://github.com/opensearch-project/.github/blob/main/RESPONSIBILITIES.md#inactivity

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are actually moving more of the files in .github over to this repo! See opensearch-project/.github#513 and #102. In fact, I'd love any help on getting the second approval on 513 to make the migration clearer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, approve the file moving pr.

@epugh

epugh commented Jul 13, 2026

Copy link
Copy Markdown
Member Author

@peterzhuamazon any thoughts on the specific mechanics of the process.. I suspect we will have a FLOOD of these once we merge this PR... If this gets agreed to at the July TSC meeting, well, we have a lot of cleanup to get done in August... I would love to see this sorted out before OpenSearchCon NA in September. Can you/other admins support the work needed once we kick this process off?

Comment thread policies/EMERITUS.md

1. Open a pull request against the repository's `MAINTAINERS.md` moving themselves from the active maintainers section to the Emeritus section, and updating `CODEOWNERS` to remove their entries.
2. Notify the [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md), typically by opening an issue in the [opensearch-project/.github](https://github.com/opensearch-project/.github) repo, to request that their maintain-level permissions be revoked.
3. The admin team merges the PR and revokes the permissions.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, but in your specific case there was a oversight in running the process when db moved to emeritus.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Replied here and sorry about the confusion: opensearch-project/opensearch-go#741 (comment)

@andrross andrross left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments on the content here, but after thinking a bit I have a higher level question: do we need this document? The existing "moving on" section in the RESPONSIBILITIES doc already defines the policy. It's pretty concise, but I think it describes the policy pretty well. We just haven't implemented it consistently. I think we're free to build a process that implements that policy without adding any new policy docs.

Comment thread policies/EMERITUS.md Outdated
Comment on lines +16 to +17
1. **Self-initiated** ([Moving On](https://github.com/opensearch-project/.github/blob/main/RESPONSIBILITIES.md#moving-on)) — the maintainer voluntarily opens a pull request moving themselves to the Emeritus section of `MAINTAINERS.md`.
2. **External** ([Inactivity](https://github.com/opensearch-project/.github/blob/main/RESPONSIBILITIES.md#inactivity)) — the admin team opens a pull request moving an inactive maintainer to the Emeritus section on their behalf.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wording nitpick, but I find the "external" term here clunky and not very clear. Calling these two paths "Moving On" and "Inactivity" seems more clear to me. It also matches https://github.com/opensearch-project/technical-steering/blob/main/policies/RESPONSIBILITIES.md#removing-a-maintainer

Comment thread policies/EMERITUS.md Outdated

## External: Inactivity

When a maintainer has become inactive without moving themselves to Emeritus, the project may move them to Emeritus on their behalf.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The primary reason we need this process is to improve our security posture by adhering to the principle of least privilege: maintainers credentials should be scoped to people that actively need them. We should include that explanation somewhere in this doc, either here or in the overview.

Comment thread policies/EMERITUS.md Outdated

### Identifying Inactivity

Inactivity is identified via the [OpenSearch Maintainer Dashboard](https://metrics.opensearch.org/_dashboards/app/dashboards?security_tenant=global#/view/30fedc30-9ae2-11ef-a168-f19b1bbc360c?_g=(filters:!(),refreshInterval:(pause:!t,value:0),time:(from:now-30d,to:now))&_a=(description:'Shows%20data%20about%20the%20activity%20of%20maintainers%20in%20the%20OpenSearch%20Project(since%2010-12-24,%20and%20the%20technical-steering%20repo%20since%2011-7-24).%20',filters:!(),fullScreenMode:!f,options:(hidePanelTitles:!f,useMargins:!t),query:(language:kuery,query:''),timeRestore:!t,title:'OpenSearch%20Maintainer%20Dashboard',viewMode:view)).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would define the policy in prose here. So something like "Inactivity is defined as not using maintainer privileges for a period of 1 year or more". And then link to the dashboard as the tool used to find maintainers that fall into that category. The specific tool we use may change in the future without needing to change the policy.

Comment thread policies/EMERITUS.md Outdated

### Outreach

Before moving an inactive maintainer to Emeritus, a TSC member or member of the admin team reaches out to the maintainer privately by email to:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this necessary? How about a simpler process like:

An existing maintainer or a member of the admin team opens a PR moving the inactive maintainer to emeritus in MAINTAINERS.md and removing from CODEOWNERS with the comment:

Hey @inactive-maintainer, we see you haven't used your maintainer privileges in the past year. If you plan on continuing to contribute, please respond here and we'll close this PR. Otherwise you'll be moved to emeritus, but you can move back to active status at any time.

Here's an example: opensearch-project/OpenSearch#21144

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think i viewed this as more of a "big deal", like being nominated for a maintainer. Though honestly, now that I read your text, making it a "run of the mill" process is probably better. Especailly because this is on repo by repo basis, it's not "oh you are now emeritus for the entire OpenSearch Project". So yeah, +1.

Comment thread policies/EMERITUS.md
- The returning maintainer or another current maintainer opens a pull request moving them from the Emeritus section back to the active maintainers section, and restoring `CODEOWNERS` entries.
- The [members of the admin team](https://github.com/opensearch-project/.github/blob/main/ADMINS.md) restore the maintainer's permissions upon merge.

## Relationship to At-Risk Status

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not totally crazy to imagine a simple/stable repo with very little active development where maintainers don't need to do much. In that case we shouldn't remove maintainers below some threshold just because they haven't needed to do much of anything in the past 6 months or whatever.

@epugh

epugh commented Jul 14, 2026

Copy link
Copy Markdown
Member Author

"moving on" section

So, I think what you meant to say is "inactivity" section, as the "moving on" process works already when a maintainer iniates it! It's the inactivity trigger that we don't have running well. We could just specify in the "inactivity" section of the RESPONSIBLITIES.md file that "after 1 year of no activity then the admin team will move maintainer to emeritus" and leave it at that? I guess I'm fine with that as long as it helps us get this process moving! 🤷

@andrross

Copy link
Copy Markdown
Member

"moving on" section

So, I think what you meant to say is "inactivity" section, as the "moving on" process works already when a maintainer iniates it! It's the inactivity trigger that we don't have running well. We could just specify in the "inactivity" section of the RESPONSIBLITIES.md file that "after 1 year of no activity then the admin team will move maintainer to emeritus" and leave it at that? I guess I'm fine with that as long as it helps us get this process moving! 🤷

@epugh Oops, yes, I meant the "inactivity" section. I'm honestly fine with the text of the policy as it is. We just need to implement the process that starts removing inactive maintainers! What are your ideas for making that happen?

@peterzhuamazon

Copy link
Copy Markdown
Member

@peterzhuamazon any thoughts on the specific mechanics of the process.. I suspect we will have a FLOOD of these once we merge this PR... If this gets agreed to at the July TSC meeting, well, we have a lot of cleanup to get done in August... I would love to see this sorted out before OpenSearchCon NA in September. Can you/other admins support the work needed once we kick this process off?

I think we can support this by using the data directly from the metrics cluster. The initial cleanup would take some effort to get the correct member and generate large amount of PRs. But afterwards any new removal would just be as smooth as adding a new member.

We are currently working on to bring Oscar GitHub agent online, so membership management can be easier by directly @ the bot later. Anyway, I think we should progress and can call outs issues in the meantime.

Thanks!

Signed-off-by: Eric Pugh <epugh@opensourceconnections.com>
@epugh

epugh commented Jul 16, 2026

Copy link
Copy Markdown
Member Author

Thanks @peterzhuamazon and @andrross for your input, I've taken that into account. Some great ideas.

@epugh

epugh commented Jul 16, 2026

Copy link
Copy Markdown
Member Author

In terms of makign this process work (@peterzhuamazon @andrross ), well, I think that we need to pick a few people who are in the Admin team to run the rote process of "Look at the report for a repo, open up a PR per maintainer, wait seven days, then merge". I'm sure the process could be automated, but in the short term, just getting moving would be good.

I would be happy to participate, however as I am not a admin, I can't actually merge the PRs.. though I could open them....

@epugh

epugh commented Jul 20, 2026

Copy link
Copy Markdown
Member Author

@peterzhuamazon the Bake Time check says 48 hours, but nothing has changed for 4 days... How do I get this check cleared? Not sure Bake Time is helping us.....

@msfroh

msfroh commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

@peterzhuamazon the Bake Time check says 48 hours, but nothing has changed for 4 days... How do I get this check cleared? Not sure Bake Time is helping us.....

AFAIK, the bake time check is currently broken. We should (IMO) remove it from the GitHub actions on this repo.

Edit: Note that it's non-blocking, though, so while it annoyingly fails, it doesn't prevent us from merging changes.

@prudhvigodithi

Copy link
Copy Markdown
Member

AFAIK, the bake time check is currently broken

I think this is the root cause. On line https://github.com/peternied/bake-time/blob/main/action.yml#L59 modificationTime defaults to pr.updated_at, which GitHub bumps on any PR activity including comments and edits, not just pushes. This could be because https://docs.github.com/en/rest/activity/events?apiVersion=2026-03-10#about-github-events, the activity.listRepoEvents keeps only 300 events and only events created within the past 30 days will be included events.

@epugh

epugh commented Jul 21, 2026

Copy link
Copy Markdown
Member Author

Edit: Note that it's non-blocking, though, so while it annoyingly fails, it doesn't prevent us from merging changes.

@msfroh you are right.. We need some approving +1's... So team, what do we think? Does this Process look approvable?

@epugh

epugh commented Jul 22, 2026

Copy link
Copy Markdown
Member Author

@andrross mentioned on slack with me that maybe this isn't needed to move forward... And that we should just "do the work". So I opened opensearch-project/opensearch-spark#1339 as a first one.

epugh added 3 commits July 23, 2026 09:50
Signed-off-by: Eric Pugh <epugh@opensourceconnections.com>
Signed-off-by: Eric Pugh <epugh@opensourceconnections.com>
Signed-off-by: Eric Pugh <epugh@opensourceconnections.com>
@epugh

epugh commented Jul 23, 2026

Copy link
Copy Markdown
Member Author

I used the new proposed template with this PR: opensearch-project/opensearch-api-specification#1177

@sean-

sean- commented Jul 23, 2026

Copy link
Copy Markdown

@epugh Two things re: opensearch-project/opensearch-api-specification#1177:

  1. Markdown formatting for MAINTAINERS.md needs a prettier run.
  2. Are current maintainers supposed to +1 this while the PR times out and before it gets merged? Without reading further, it's not clear in the message what the existing maintainers should do with PRs such as this.

@epugh

epugh commented Jul 23, 2026

Copy link
Copy Markdown
Member Author

@epugh Two things re: opensearch-project/opensearch-api-specification#1177:

  1. Markdown formatting for MAINTAINERS.md needs a prettier run.
  2. Are current maintainers supposed to +1 this while the PR times out and before it gets merged? Without reading further, it's not clear in the message what the existing maintainers should do with PRs such as this.

Thanks for the tip on prettier. So, I think the idea is that the existing maintainer will close it if they want to stay active in the project. The act of closing (not merging!) the PR should be picked up by the Dashboard so they show up as active. If they don't respond at all, then it's up to the existing maintainers to merge it (or raise issues). Then, after 7 days, then a member of the Admin team will come through and do a merge as an administrative action.

@sean-

sean- commented Jul 23, 2026

Copy link
Copy Markdown

My point is:

then it's up to the existing maintainers to merge it (or raise issues)

Can the message template include some language like:

Existing maintainers, you may approve and close this PR after 7 days from the time that this PR was submitted.

Or something like that to provide direction to people who tend to their Github inbox?

@andrross

Copy link
Copy Markdown
Member

@epugh @sean- I think the PR template text containing explicit instructions for maintainers is a good idea. Here are the possible outcome I see:

  • Maintainer in question responds with "I had to step back from this project and don't plan on contributing in the short term, I'm happy to move to emeritus." Any maintainer can then approve and merge the PR immediately.
  • Maintainer in question responds with "I plan to contribute" and closes the PR.
  • Maintainer in question does not respond. Existing maintainer approves and merges after a reasonable wait time (7 days?)
  • Nobody responds. Member of admin team merges after 7 days.

@epugh

epugh commented Jul 24, 2026

Copy link
Copy Markdown
Member Author

I am pretty happy that this PR was closed by the original maintainer: opensearch-project/opensearch-api-specification#1177. Looks like the dashboard updates every 24 hours at the end of the day, so I should see there status move from INACTIVE to ACTIVE by dint of their closing the PR late tonight!

@epugh

epugh commented Jul 29, 2026

Copy link
Copy Markdown
Member Author

Ran the full process on opensearch-project/opensearch-spark#1339 with @peterzhuamazon merging the PR.

@andrross

andrross commented Aug 6, 2026

Copy link
Copy Markdown
Member

@epugh My specific issue is that this essentially restates what is already in the inactivity policy. The thing that is not stated is a PR template for the text used. What if we simplified this doc to something like the following?


Per the inactivity policy, maintainers will be moved to emeritus status after an extended period of inactivity. This process will be started in the repository in question by opening a PR with the following template text:

Hey @{GITHUB_HANDLE}, we noticed you haven't used your maintainer privileges
in this repository over the past year. Per the OpenSearch Project
[inactivity policy](https://github.com/opensearch-project/technical-steering/blob/main/policies/RESPONSIBILITIES.md#inactivity),
maintainers inactive for 12 months or more are moved to emeritus status.

**If you plan to continue contributing as a maintainer**, please respond here
and we'll close this PR and no further action is needed.

Otherwise, this PR will move you to the emeritus list. Emeritus status is
not permanent: you can return to active maintainer status at any time by
expressing interest to the current maintainers.

**Existing maintainers**: Please merge this PR once @{GITHUB_HANDLE} confirms
they do not plan to use their maintainer privileges, or after 7 days with no
response. If neither maintainers nor @{GITHUB_HANDLE} take any action within
7 days, a member of the [admin team](https://github.com/orgs/opensearch-project/teams/admin)
will merge it.

### Activity data

This determination is based on the
[OpenSearch Maintainer Dashboard](https://metrics.opensearch.org/_dashboards/app/dashboards#/view/30fedc30-9ae2-11ef-a168-f19b1bbc360c)
(filter by repository: `{REPO_NAME}`). If you believe the activity data is
mistaken, please say so here so we can investigate before merging.

@epugh

epugh commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

@epugh My specific issue is that this essentially restates what is already in the inactivity policy. The thing that is not stated is a PR template for the text used. What if we simplified this doc to something like the following?

Per the inactivity policy, maintainers will be moved to emeritus status after an extended period of inactivity. This process will be started in the repository in question by opening a PR with the following template text:

Hey @{GITHUB_HANDLE}, we noticed you haven't used your maintainer privileges
in this repository over the past year. Per the OpenSearch Project
[inactivity policy](https://github.com/opensearch-project/technical-steering/blob/main/policies/RESPONSIBILITIES.md#inactivity),
maintainers inactive for 12 months or more are moved to emeritus status.

**If you plan to continue contributing as a maintainer**, please respond here
and we'll close this PR and no further action is needed.

Otherwise, this PR will move you to the emeritus list. Emeritus status is
not permanent: you can return to active maintainer status at any time by
expressing interest to the current maintainers.

**Existing maintainers**: Please merge this PR once @{GITHUB_HANDLE} confirms
they do not plan to use their maintainer privileges, or after 7 days with no
response. If neither maintainers nor @{GITHUB_HANDLE} take any action within
7 days, a member of the [admin team](https://github.com/orgs/opensearch-project/teams/admin)
will merge it.

### Activity data

This determination is based on the
[OpenSearch Maintainer Dashboard](https://metrics.opensearch.org/_dashboards/app/dashboards#/view/30fedc30-9ae2-11ef-a168-f19b1bbc360c)
(filter by repository: `{REPO_NAME}`). If you believe the activity data is
mistaken, please say so here so we can investigate before merging.

Maybe what we really need is not a expanded policy document, but a process document. The current document says what the policy is, but it doesn't really convey the specific steps for following the process. And we all know that it's easy to have a policy, but hard to have it followed by all. So maybe we need a toplevel processes folder that documents all of these.

Just in the last three weeks of moving two small batches of people to emeritus, I find myself constantly trying to rmemeber what the specific recipe is to follow... --> Would this get to the heart of what you want?

@andrross

andrross commented Aug 6, 2026

Copy link
Copy Markdown
Member

Maybe what we really need is not a expanded policy document, but a process document

@epugh Yes! What do we need in the process, something like the following?

  1. Find inactive maintainer using metrics dashboard
  2. Open a PR using the template text from above
  3. Close or merge the PR per the instructions in the template text

Does it need to be more prescriptive than that?

@epugh

epugh commented Aug 6, 2026

Copy link
Copy Markdown
Member Author

Maybe what we really need is not a expanded policy document, but a process document

@epugh Yes! What do we need in the process, something like the following?

  1. Find inactive maintainer using metrics dashboard
  2. Open a PR using the template text from above
  3. Close or merge the PR per the instructions in the template text

Does it need to be more prescriptive than that?

Maybe not, because you have the next steps. I think we also probably want to docuemnt that the metrics dashboard isnt' perfect, because it includes archived repos as inactive maintainers as well as abandoned repos that still exist. But that could be one more step that gets us to 4 steps.

Are you onboard with a /processes/INACTIVE_MAINTAINERS_TO_EMERITUS.md? (not sure why we like to shout but we do) that covers that? I want it simple enough that in the future, some other TSC member or interested party knows what to do so itsn't me, or even imagine an Agent running the process...

@andrross

andrross commented Aug 6, 2026

Copy link
Copy Markdown
Member

Are you onboard with a /processes/INACTIVE_MAINTAINERS_TO_EMERITUS.md

@epugh Sounds good! Maybe /processes/INACTIVE_MAINTAINERS.md for slightly less shouting :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants