Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c8cba31

Browse files
authoredApr 12, 2024
Add notes for handling PEP 541 requests (pypi#3877)
1 parent 758f6bc commit c8cba31

File tree

1 file changed

+214
-0
lines changed

1 file changed

+214
-0
lines changed
 

‎name-retention/README.md

+214
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
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

Comments
 (0)
Please sign in to comment.