|
| 1 | +# Name Retention (PEP 541) notes |
| 2 | + |
| 3 | +These are notes for PyPI support volunteers handling [PEP 541] project name |
| 4 | +requests. |
| 5 | + |
| 6 | +[PEP 541]: https://peps.python.org/pep-0541/ |
| 7 | + |
| 8 | + |
| 9 | +## Diagram |
| 10 | + |
| 11 | +This is incomplete and doesn't account for special cases. |
| 12 | +From anywhere in the flow, if the process feels wrong: move to *Special case* and consult with colleagues or PyPI admins. |
| 13 | + |
| 14 | +```mermaid |
| 15 | +flowchart TD |
| 16 | +NEW[[New PEP 541 ticket]] --> NEW_isdone{{"Is the request already resolved (transferred/deleted)?"}} |
| 17 | +NEW_isdone --> |yes| NEW_done[Comment on issue] --> NEW_tbd(((TBD))) |
| 18 | +NEW_isdone --> |no| NEW_uploads{{project has uploads}} |
| 19 | +NEW_uploads --> |no| SQUAT |
| 20 | +NEW_uploads --> |yes| NEW_funct{{project has no functionality*}} |
| 21 | +NEW_uploads --> |no such project| NEW_tbd |
| 22 | +NEW_funct --> |no functionality| SQUAT |
| 23 | +NEW_funct --> |some functionality| NEW_what{{What is the request?}} |
| 24 | +NEW_what --> |Transfer for continued maintenance| ABTR |
| 25 | +NEW_what --> |Replace with a different project| NEW_whyname[Comment “Abandoned project - why not use a different name?”] |
| 26 | +NEW_whyname --> NEW_tbd |
| 27 | +subgraph SQUAT_subgraph [Invalid project: Name squatting] |
| 28 | + SQUAT[[Name squatting removal]] --> SQUAT_c[Send “Courtesy notice for invalid project -- name squatting”] --> SQUAT_w[Wait a week] --> SQUAT_r{{Did owner respond?}} --> |yes| SQUAT_tbd(((TBD))) |
| 29 | + SQUAT_r --> |no| SQUAT_s[Send “Removal notice for invalid project -- name squatting”] --> SQUAT_g[Comment “Invalid project removed; name available”] |
| 30 | +end |
| 31 | +
|
| 32 | +subgraph ABTR_subgraph [Transfer of an abandoned project] |
| 33 | + ABTR[[Transferring abandoned project]] --> ABTR_init[Comment “Initial response”] --> ABTR_r[Send “Reachability -- abandoned project”] --> ABTR_wait["Wait 2 weeks (Reachability)"] --> ABTR_resp{{Owner response?}} |
| 34 | + ABTR_resp --> |want to keep| ABTR_keep["Comment with “owner is reachable” (recommend closing issue)"] |
| 35 | + ABTR_resp --> |want to transfer| ABTR_rq["Comment “Transfer per owner's request” (recommend transferring)"] |
| 36 | + ABTR_resp --> |no response| ABTR_iter{{Was this the 3rd reacahbility mail?}} --> |no| ABTR_r |
| 37 | + ABTR_iter --> |yes| ABTR_t[Send “Transfer notice for abandoned project”] --> ABTR_tc["Comment “Transfer abandoned project” (recommend transferring)"] |
| 38 | +end |
| 39 | +
|
| 40 | +SQUAT_g --> ADM[[Admin Review]] |
| 41 | +ABTR_keep --> ADM |
| 42 | +ABTR_tc --> ADM |
| 43 | +ABTR_rq --> ADM |
| 44 | +
|
| 45 | +
|
| 46 | +
|
| 47 | +SPEC[[Special case]] |
| 48 | +``` |
| 49 | + |
| 50 | +## Email templates |
| 51 | + |
| 52 | +### Reachability -- abandoned project |
| 53 | + |
| 54 | + To: $PYPI_USER_ADDRESS, $PROJECT_AUTHOR_ADDRESS, $UPLOADER_ADDRESS, $ADDRESS_FROM_DOCS |
| 55 | + Subject: ACTION REQUIRED: PyPI $PROJECT name retention |
| 56 | + |
| 57 | + Hello $NAME, |
| 58 | + |
| 59 | + Your project $PROJECT at $PYPI_URL appears to be abandoned, and $CANDIDATE |
| 60 | + has requested {transferring ownership to them in order to continue |
| 61 | + maintaining it|to reuse the name for another project}. |
| 62 | + See $SUPPORT_ISSUE_URL for details. |
| 63 | + |
| 64 | + As per the package index name retention policy |
| 65 | + (https://peps.python.org/pep-0541/), we are writing to confirm whether you |
| 66 | + are reachable, and whether you want to avoid transferring the project to |
| 67 | + $CANDIDATE. |
| 68 | + |
| 69 | + If you would like to keep the project, please reply to this email. |
| 70 | + |
| 71 | + If you are willing to give up the project, it would help us if you do it |
| 72 | + yourself: go to https://pypi.org/manage/project/$PROJECT/collaboration/, |
| 73 | + log in, and invite $CANDIDATE as an Owner. |
| 74 | + |
| 75 | +Add one of the following notes and the common end: |
| 76 | + |
| 77 | +#### ... attempt #1 |
| 78 | + |
| 79 | + (nothing to add) |
| 80 | + |
| 81 | +#### ... attempt #2 |
| 82 | + |
| 83 | + This is our second attempt to reach you. We tried two weeks ago. |
| 84 | + |
| 85 | +#### ... attempt #3 |
| 86 | + |
| 87 | + This is our third and final attempt to reach you. If you do not reply in |
| 88 | + two weeks, we will recommend that the PyPI Administrators transfer |
| 89 | + ownership of PROJECT to CANDIDATE. |
| 90 | + |
| 91 | +#### common end |
| 92 | + |
| 93 | + Thank you for your time, |
| 94 | + PyPI Support |
| 95 | + |
| 96 | +### Transfer notice for abandoned project |
| 97 | + |
| 98 | + To: $PYPI_USER_ADDRESS, $PROJECT_AUTHOR_ADDRESS, $UPLOADER_ADDRESS, $ADDRESS_FROM_DOCS |
| 99 | + Subject: ACTION REQUIRED: PyPI $PROJECT name retention |
| 100 | + |
| 101 | + Hello $NAME, |
| 102 | + |
| 103 | + Your project $PROJECT at $PYPI_URL appears to be abandoned, and |
| 104 | + $CANDIDATE has requested {transferring ownership to them in order to |
| 105 | + continue maintaining it|to reuse the name for another project}. |
| 106 | + See $SUPPORT_ISSUE_URL for details. |
| 107 | + |
| 108 | + We have attempted to reach you several times, and did not receive a reply. |
| 109 | + Per the package index name retention policy (https://peps.python.org/pep-0541/), |
| 110 | + we have recommended that the PyPI Administrators transfer the project to |
| 111 | + $CANDIDATE. |
| 112 | + |
| 113 | + Thank you for your time, |
| 114 | + PyPI Support |
| 115 | + |
| 116 | +### Courtesy notice for invalid project -- name squatting |
| 117 | + |
| 118 | + To: $PYPI_USER_ADDRESS, $PROJECT_AUTHOR_ADDRESS, $UPLOADER_ADDRESS, $ADDRESS_FROM_DOCS, any additional mail we find |
| 119 | + Subject: ACTION REQUIRED: PyPI $PROJECT name retention |
| 120 | + |
| 121 | + Hello $NAME, |
| 122 | + |
| 123 | + Your project $PROJECT at $PYPI_URL {is empty|has no functionality}. |
| 124 | + Per the package index name retention policy (https://peps.python.org/pep-0541/), |
| 125 | + we consider such projects to be name squatting, and will remove them from |
| 126 | + the index. |
| 127 | + |
| 128 | + If you would like to release a project under this name, please do so as |
| 129 | + soon as possible. Otherwise, we will recommend that the PyPI Administrators |
| 130 | + delete it in about a week. |
| 131 | + |
| 132 | + Thank you for your time, |
| 133 | + PyPI Support |
| 134 | + |
| 135 | +### Removal notice for invalid project -- name squatting |
| 136 | + |
| 137 | + To: $PYPI_USER_ADDRESS, $PROJECT_AUTHOR_ADDRESS, $UPLOADER_ADDRESS, $ADDRESS_FROM_DOCS, any additional mail we find |
| 138 | + Subject: Notice: PyPI $PROJECT may be removed |
| 139 | + |
| 140 | + Hello $NAME, |
| 141 | + |
| 142 | + Your project $PROJECT at $PYPI_URL {is empty|has no functionality} for an |
| 143 | + extended period of time. Per the package index name retention policy |
| 144 | + (https://peps.python.org/pep-0541/), we consider such projects to be name |
| 145 | + squatting. |
| 146 | + |
| 147 | + We have recommended that the PyPI Administrators remove the project from |
| 148 | + the index, making it available to be claimed by someone else. |
| 149 | + |
| 150 | + Thank you for your time, |
| 151 | + PyPI Support |
| 152 | + |
| 153 | +## GitHub comment templates |
| 154 | + |
| 155 | +### Initial Response - generic |
| 156 | + |
| 157 | + We are working to contact the {owner… etc (Please fill in as you see fit)} |
| 158 | + |
| 159 | + Disclaimer: We are providing support to the PyPI Administrators to validate |
| 160 | + this request and make a recommendation on the outcome and actions to be |
| 161 | + taken. Final determination will be made by the PyPI Administrators when our |
| 162 | + process is complete. |
| 163 | + |
| 164 | +### Initial Response - determine reachability |
| 165 | + |
| 166 | + We are working to contact the owner to determine if they're reachable. |
| 167 | + |
| 168 | + Disclaimer: We are providing support to the PyPI Administrators to validate |
| 169 | + this request and make a recommendation on the outcome and actions to be |
| 170 | + taken. Final determination will be made by the PyPI Administrators when our |
| 171 | + process is complete. |
| 172 | + |
| 173 | +### Remove invalid project; name available |
| 174 | + |
| 175 | + $PROJECT has been deemed invalid. Additionally, the owner {did not |
| 176 | + respond|did not fix the issue} in a week. |
| 177 | + We recommend that the PyPI Administrators delete the project and make the |
| 178 | + name available for registration. |
| 179 | + |
| 180 | +### Owner is reachable |
| 181 | + |
| 182 | + $OWNER responded to our email, indicating that they want to keep the project. |
| 183 | + Projects are not transferred against the wishes of a reachable owner. |
| 184 | + We recommend that the PyPI Administrators close the issue. |
| 185 | + |
| 186 | +### Transfer per owner's request |
| 187 | + |
| 188 | + $OWNER responded to our email and said we should transfer the project, |
| 189 | + so we recommend that the PyPI Administrators assign $CANDIDATE as the new |
| 190 | + owner of $PROJECT. |
| 191 | + |
| 192 | +### Transfer abandoned project |
| 193 | + |
| 194 | + We could not reach $OWNER, and we consider the project abandoned per |
| 195 | + [PEP 541](https://peps.python.org/pep-0541/#abandoned-projects). |
| 196 | + We recommend that the PyPI Administrators assign $CANDIDATE as the new |
| 197 | + owner of $PROJECT. |
| 198 | + |
| 199 | +### Abandoned project - why not use a different name? |
| 200 | + |
| 201 | + Per PEP-541: *Projects are never removed from the Package Index solely on |
| 202 | + the basis of abandonment. Artifacts uploaded to the Package Index hold |
| 203 | + inherent historical value.* |
| 204 | + |
| 205 | + One of the [requirements for removal of an abandoned |
| 206 | + project][pep-removal-abandoned] is: |
| 207 | + |
| 208 | + * the candidate is able to demonstrate why a fork under a different name |
| 209 | + is not an acceptable workaround |
| 210 | + |
| 211 | + If you have a new project, why can you not use a different name for it? |
| 212 | + |
| 213 | + [pep-removal-abandoned]: https://peps.python.org/pep-0541/#removal-of-an-abandoned-project |
| 214 | + |
0 commit comments