From 8481d4e8c5d78776f9c012b4c360430d8dee8b2a Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Wed, 18 Feb 2026 20:53:14 -0600 Subject: [PATCH 1/2] docs: add issue triage report (157 issues reviewed) Interactive HTML report with categorized triage recommendations for all 157 open issues: critical, security, close, discussion, labels needed, and priority rankings. Co-Authored-By: Claude Opus 4.6 --- issue-triage-report.html | 594 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 594 insertions(+) create mode 100644 issue-triage-report.html diff --git a/issue-triage-report.html b/issue-triage-report.html new file mode 100644 index 000000000..14143f3ab --- /dev/null +++ b/issue-triage-report.html @@ -0,0 +1,594 @@ + + + + + +pythondotorg Issue Triage Report + + + + +

pythondotorg Issue Triage Report

+

157 open issues reviewed · Generated 2026-02-18 · python/pythondotorg

+ + + + + + + + +
+

Critical / High Priority 8

+

Issues requiring immediate attention — data integrity, user-facing regressions, governance gaps.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#TitleWhy CriticalSuggested Labels
#2566Update membership level choicesPSF bylaws changed (psf/bylaws#4); model choices out of sync. "Managing" members need converting to "contributing". Data integrity & compliance issue.bugapp/psf-membershipbackend
#2599Update to elasticsearch8ES7 client running against ES8 server in production. Blocked on django-haystack upstream (#1980).backendsearchdependencies
#2677PSF Board Resolutions missing from Resolutions pageTwo 2024-05-19 resolutions (incl. Fellow removal for CoC violations) missing from public record. Governance transparency gap.bugapp/pages
#2617Password reset page styling brokenUser-facing auth regression after django-allauth upgrade. Templates need auditing.bugapp/usersfrontend
#2761Usenet/mailing list gateway brokenpython-list ↔ comp.lang.python gateway broke during Mailman 3 migration (May 2025). Community communication channel down.buginfrastructure
#2059400 Honeypot Error on account creationPassword managers/autofill populate honeypot field, blocking legitimate users with a 400 error. Confirmed in Firefox 117+.bugapp/users
#2358Renewal checkbox doesn't persist through contract generationData-loss bug: use_cases.py:80 defaults renewal to False instead of forwarding existing state. Affects PSF sponsorship workflow.bugapp/sponsorsadmin
#2332Sponsor logos invisible with adblockerLogos served exclusively via EthicalAds (data-ea-publisher). uBlock Origin blocks media.ethicalads.io, hiding all sponsor logos. Breaks PSF contractual visibility commitments.bugapp/sponsorsfrontend
+
+ + +
+

Security Concerns 3

+

Vulnerabilities and supply-chain gaps that warrant review.

+ + + + + + + + + + + + + + + + + + + + + + +
#TitleSeverityDetails
#2203No rate limiting on password resetMEDIUMNo rate-limit middleware installed (no django-axes, django-ratelimit). Only Tastypie API has throttling. Password reset form allows email bombing.
#2261mark_safe() XSS risk in sponsors/forms.pyLOWLines 754/758 interpolate field.label via f-string into mark_safe(). Data is admin-sourced only (not user input), but should use format_html() per Django best practices.
#2340Add VEX statements for CPython SBOMsSUPPLY CHAINSBOM (SPDX) exists on release pages but no VEX documents to clarify which dependency vulnerabilities are actually exploitable by CPython. Increasingly expected by scanners.
+
+ + +
+

Recommend Closing ~35

+

Issues that are resolved, obsolete, stale, or not actionable as code changes.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#TitleAgeReason to Close
#832Generate CSS via django-pipeline10yAlready integrated: pydotorg/settings/pipeline.py, PipelineStorage configured.
#862Add buttons to OS-specific download pages10yImplemented: download_button field on ReleaseFile, OS-specific links in templates.
#849Recurring calendar entries not shown10yModel has full RecurringRule support with dateutil.rrule.
#1162New events workflow8yEventSubmit view exists at events/submit/.
#1113Use more efficient cache backend8yProduction uses DatabaseCache, not LocMemCache.
#1227Download checksum in MD57ySHA256 is now default; MD5 only shown as fallback.
#1615Switch to GFM for election nominations5yCMS switched to GFM (PR #1613 merged); nominations use markup_type="markdown".
#1352API to check releases by major/minor version7ydownloads/latest/python3.{minor}/ URL implemented.
#1784Windows 8.0 and Python 3.9+4yTemplates now reference "Windows 7 or earlier".
#2138Currently ongoing events do not display3yPR #2556 merged 2024-09-19 fixing this.
#2135Define linter tools for code quality3yRuff configured in pyproject.toml; lint.yml workflow runs on every push/PR.
#1269Replace Ruby gems with Python equivalents7yNo Gemfile in repo. Ruby compass/susy gems are gone.
#1270Use SQLite backend by default7yDocker Compose makes dev setup self-contained, solving the original pain.
#103Peculiar layout at small screen width12y12 years old, screenshot from 2014. Site redesigned since.
#61Top nav should default to collapsed12y12 years old, iOS-era bug. Nav redesigned.
#554Remove top sub-site navigation bar11yNavigation has been significantly changed since 2015.
#1003Navbar takes up lots of space on mobile9yNavbar redesigned since 2016.
#1124Dropdown list goes off-screen8yJobs nav has changed; UI certainly different now.
#1278Back to top not working7yVague, no repro steps, no follow-up since 2018.
#574Pointer to Dalke's Python 0.9.1p111ySuperseded by #1734.
#546Consolidate links to ancient releases11ySubsumed by #1734.
#822Consider removing django.contrib.redirects10yOps decision, not a code issue. No urgency in 10 years.
#1090Out-of-date PEPs on legacy.python.org8ypeps.python.org is canonical now; legacy no longer appears in Google.
#608Republish wiki pages on main site10y10 years, no progress, high complexity, unclear value.
#529Community poem has weird semicolons11yTrivial content issue from 2015. Page content has certainly changed.
#586Many image links from legacy are broken10yMerchandise page is 404. The page itself is gone.
#1426Resources not properly loaded6yVague, no repro steps, screenshot of JS error from 2019. No activity.
#980Create owner/expert list for website9yMeta/process issue, not a code change. Governance documentation.
#967Update Financial Info9yContent maintenance from 2016. Editorial, not code.
#965Press Release page9yEditorial decision, not a code issue.
#1252Python 2.7.15 release notes unavailable7yPython 2 is EOL since Jan 2020.
#2051Populating Art section in Success Stories3yContent contribution offer, not a code change. No follow-up.
#2042Include discuss.python.org in status page3yMaintainer confirmed infeasible: Discourse is hosted directly.
#2022Unwanted HTML in a job page3yReferences specific old job listing content, not a code bug.
#2174Datadump of jobs data3yOne-time data request, not a feature. No comments.
#1965Add New Category In About Page4yNo follow-up in 4 years. No labels, no comments.
#2804Improve Full-Page UI Layout and UX<1yToo vague, no specific actionable items. Design wish-list.
+
+ + +
+

Migrate to Discussion 15

+

Open-ended ideas, community input requests, and content debates better suited as GitHub Discussions.

+ + + + + + + + + + + + + + + + + + + +
#TitleAgeWhy Discussion
#2230Add Unicode animal to homepage code sample3yFun community input opportunity; which animal?
#2309Add AI/ML to "Use Python for..."2yContent/editorial debate about what to feature.
#2035Include FastAPI, drop web2py3yContent/editorial debate on featured frameworks.
#2201"Use Python for..." has outdated links3yContent curation: which links to update and to what.
#535Explain why to create an account11yUX philosophy discussion; what is the value proposition?
#1725Dark theme for python.org5yLarge design discussion, community input useful. Already help-wanted.
#2066Add a release status/lifecycle page3yFeature design discussion; partial data exists via PEPs API.
#1592Recommended way of installing Python?5yCommunity guidance discussion (MS Store vs python.org vs package manager).
#1549Near impossible to get started on macOS6yCommunity UX discussion; multiple valid approaches.
#1266Far too many obstacles to installing Python7yCommunity UX discussion; pymanager partially addresses Windows.
#2541Structural cleanup (move apps to app/)1yArchitectural discussion, very large scope, needs buy-in.
#2572Single login python.org ↔ us.pycon.org1yDesign discussion; OAuth/JWT, large scope, needs architecture.
#244Expand job types and categories11yCommunity input on what categories to add.
#353Add Python books to merchandise11yContent curation discussion (merchandise page is now 404).
#1656Agenda, Reports, and Minuting feature5yFeature scoping discussion; affects minutes app architecture.
+
+ + +
+

Migrate to Other Repo 5

+

Issues filed here that belong in a different repository or service.

+ + + + + + + + + +
#TitleDestination
#1691Extremely poor docs.python.org SEOpython/cpython or python/docsbuild-scripts
#2139Add sponsor logos to devguidepython/devguide
#2662Redirect pythoninsider.blogspot.comBlogger/Google config, not this repo
#2658Newsletter subscription form brokenThird-party service (Mailchimp/ConvertKit)
#1903PSF member profile not showing infoLikely a privacy policy decision, not a code bug. PSF staff.
+
+ + +
+

Need Labels ~30

+

Currently unlabeled issues that should be tagged for discoverability and triage.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#TitleSuggested Labels
#2761Usenet/mailing list gateway brokenbuginfrastructure
#2750Document Downloads APIenhancementapp/downloads
#2640More fixture data for devenhancementinfrastructure
#2349Add anchor tags to PSF Board resolutionsfrontendeasy
#2332Sponsor logos invisible with adblockerbugapp/sponsorsfrontend
#2301Add Markdown hint to Success Stories formfrontendeasyhelp-wanted
#2261mark_safe() XSS risksecurity
#2238Job Board: add additional email fieldenhancementapp/jobs
#2203No rate limiting on password resetsecurity
#2123"New This Year" badge not displayingbugapp/sponsors
#2104Publish logos before contract finalizedenhancementapp/sponsors
#2103Email template copy optionenhancementapp/sponsorsadmin
#2102Email template archive optionenhancementapp/sponsorsadmin
#2101Send notifications from sponsorship detailenhancementapp/sponsorsadmin
#2100Full history of notifications sentenhancementapp/sponsorsadmin
#2099Benefit value not multiplied by quantitybugapp/sponsors
#2098View/adjust PyCon passes per sponsorenhancementapp/sponsors
#2097Filter sponsorships by benefitenhancementapp/sponsorsadmin
#2095Add change log to sponsor objectsenhancementapp/sponsors
#2094Character limit for sponsor descriptionenhancementapp/sponsors
#2093PyCon voucher redemption countenhancementapp/sponsors
#2092Update assets navigationenhancementapp/sponsorsfrontend
#2091Add description for benefit typesenhancementapp/sponsorseasy
#2090Dashboard help textenhancementapp/sponsorseasy
#2059400 Honeypot Error on signupbugapp/users
#1742"Create Account" button is greyfrontendeasyhelp-wanted
#1743Add press contact pageenhancementcontent
#2460Async/Celery for sending emailsenhancementapp/sponsors
#2863Update to PG18infrastructureenhancement
#2869CI duplication and messinessbuginfrastructure
#2865Dead release notes links (hg.python.org)bugapp/downloadsneeds-feedback
+
+ + +
+

Medium Priority 14

+

Real bugs and meaningful features that deserve attention.

+ + + + + + + + + + + + + + + + + + +
#TitleAgeNotes
#2869CI duplication<1yOne-line fix: add if: guard to lint.yml like ci.yml has.
#2865Dead release note links<1yhg.python.org retired. Old Misc/NEWS links broken. Needs maintainer decision on approach.
#2887Sponsor logo/header overlap<1yCSS fix needed. Contributor ready to work on it.
#2486"Python 3.11 is latest" text stale1yShould say 3.13. Hardcoded in release pages. Template/CMS fix needed.
#2460Bulk email causes admin timeouts1yCelery async fix available (PR #2395). Infrastructure already in place.
#2685Homepage news links to blogspot1yShould link to blog.python.org, not pythoninsider.blogspot.com.
#2099Benefit value not multiplied by qty3yShows $700 instead of $7000 for 10 tickets at $700 each. Line 260 in sponsors model.
#2370Merge duplicate sponsor objects2yDuplicates cause 500 errors on contract downloads. No merge functionality in admin.
#2411Downloads page returns binary data1ygzip without Content-Encoding header. Breaks curl and scripted users.
#2863Update to PG18<1yCurrently on PG 15.8. Infrastructure upgrade goal.
#2899Migrate from archived minio<1yMinio repo is archived. Need to move to S3 native or alternative.
#1080Use Celery to send emails8yEmail in request cycle causes timeouts. Celery already in infrastructure.
#1457Admin preview doesn't purge CDN6yRelease manager workflow bug. "View on Site" shows stale cached page.
#2645Sponsor app form 404 / prospectus missing1y/psf/sponsorship-old/ links to unpublished form and deleted Dropbox file. CMS fix needed.
+
+ + +
+

Low Priority ~30

+

Valid issues that are real but not urgent. Good candidates for contributors.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#TitleAgeCategory
#2090Dashboard help text3ySponsors admin UX
#2091Benefit type descriptions3ySponsors admin UX
#2092Update assets navigation3ySponsors admin UX
#2093PyCon voucher count on dashboard3ySponsors admin UX
#2094Character limit for sponsor description3ySponsors admin UX
#2095Sponsor change log3ySponsors admin UX
#2097Filter sponsorships by benefit3ySponsors admin UX
#2098View/adjust PyCon passes3ySponsors admin UX
#2100Notification send history3ySponsors admin UX
#2101Send notifications from detail page3ySponsors admin UX
#2102Email template archive3ySponsors admin UX
#2103Email template copy3ySponsors admin UX
#2104Publish logos before contract3ySponsors admin workflow
#87Timezone info on calendar is wrong12yEvents
#158Event pages should link to Google Calendar11yEvents
#677Job filtering by country10yJobs board
#728Normalize job locations10yJobs board
#819Relocation/visa sponsorship filters10yJobs board
#852Job board submission throttle10yJobs board / spam
#655Rich text editor for jobs forms10yJobs board
#171Download buttons: one file per OS11yDownloads
#1258Make RC downloads more obvious7yDownloads
#1370Link to Microsoft Store app7yDownloads
#1551Downloads don't mention distro packages6yDownloads
#813Cannot update email address properly10yUser accounts
#2301Markdown hint on Success Stories form2yEasy fix, one-line change
#2349Anchor tags for resolutions page2yAccessibility/shareability
#2611Deprecate ProvidedSponsorshipAssetsView1yDead code cleanup
#985python.org does not validate (W3C)9yAccessibility
#1734Python 0.9.1 source availability5yHistorical preservation
#2530Explicit list of Release Manager GPG keys1ySupply chain / trust
#1742"Create Account" button is grey5yEasy CSS fix
#2640More fixture data for dev1yDev experience
+
+ +
+

Generated by Claude Code · 2026-02-18 · python/pythondotorg issues

+

Duplicates found: #2853 (dup of #2863), #2612 (dup of #2640). Close the older ones.

+
+ + + + + From c1ec3101545897897835c277abdd51957f3fd0e3 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Wed, 18 Feb 2026 23:19:37 -0600 Subject: [PATCH 2/2] Update triage report: 118 issues, collapsible sections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rescanned all open issues (157→118 after closing 39). Added collapsible
headers so sections can be collapsed/expanded. Critical, Security, Close, Discussion, and Medium sections default open; Low and All Issues default collapsed. Co-Authored-By: Claude Opus 4.6 --- issue-triage-report.html | 811 +++++++++++++++++---------------------- 1 file changed, 358 insertions(+), 453 deletions(-) diff --git a/issue-triage-report.html b/issue-triage-report.html index 14143f3ab..60ea3c2a4 100644 --- a/issue-triage-report.html +++ b/issue-triage-report.html @@ -20,37 +20,11 @@ --cyan: #39d2c0; } * { margin: 0; padding: 0; box-sizing: border-box; } - body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; - background: var(--bg); - color: var(--text); - line-height: 1.6; - padding: 2rem; - } - h1 { - font-size: 1.75rem; - margin-bottom: 0.25rem; - } - .subtitle { - color: var(--text-muted); - margin-bottom: 2rem; - font-size: 0.9rem; - } - .stats-bar { - display: flex; - gap: 1rem; - flex-wrap: wrap; - margin-bottom: 2rem; - } - .stat { - background: var(--surface); - border: 1px solid var(--border); - border-radius: 8px; - padding: 1rem 1.25rem; - min-width: 140px; - cursor: pointer; - transition: border-color 0.15s; - } + body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; padding: 2rem; } + h1 { font-size: 1.75rem; margin-bottom: 0.25rem; } + .subtitle { color: var(--text-muted); margin-bottom: 2rem; font-size: 0.9rem; } + .stats-bar { display: flex; gap: 1rem; flex-wrap: wrap; margin-bottom: 2rem; } + .stat { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 1rem 1.25rem; min-width: 140px; cursor: pointer; transition: border-color 0.15s; } .stat:hover { border-color: var(--accent); } .stat-num { font-size: 1.75rem; font-weight: 700; } .stat-label { font-size: 0.8rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.05em; } @@ -58,136 +32,39 @@ .stat-security .stat-num { color: var(--orange); } .stat-close .stat-num { color: var(--text-muted); } .stat-discussion .stat-num { color: var(--purple); } - .stat-label-needed .stat-num { color: var(--cyan); } .stat-medium .stat-num { color: var(--accent); } .stat-low .stat-num { color: var(--green); } .stat-other-repo .stat-num { color: var(--pink); } - - nav { - background: var(--surface); - border: 1px solid var(--border); - border-radius: 8px; - padding: 1rem 1.25rem; - margin-bottom: 2rem; - display: flex; - gap: 0.5rem; - flex-wrap: wrap; - position: sticky; - top: 0; - z-index: 100; - } - nav a { - color: var(--text-muted); - text-decoration: none; - font-size: 0.85rem; - padding: 0.3rem 0.75rem; - border-radius: 20px; - border: 1px solid var(--border); - transition: all 0.15s; - white-space: nowrap; - } + nav { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 1rem 1.25rem; margin-bottom: 2rem; display: flex; gap: 0.5rem; flex-wrap: wrap; position: sticky; top: 0; z-index: 100; } + nav a { color: var(--text-muted); text-decoration: none; font-size: 0.85rem; padding: 0.3rem 0.75rem; border-radius: 20px; border: 1px solid var(--border); transition: all 0.15s; white-space: nowrap; } nav a:hover { color: var(--text); border-color: var(--accent); background: rgba(88,166,255,0.1); } - - .search-box { - margin-bottom: 2rem; - } - .search-box input { - width: 100%; - max-width: 500px; - padding: 0.6rem 1rem; - background: var(--surface); - border: 1px solid var(--border); - border-radius: 8px; - color: var(--text); - font-size: 0.95rem; - outline: none; - } + .search-box { margin-bottom: 2rem; } + .search-box input { width: 100%; max-width: 500px; padding: 0.6rem 1rem; background: var(--surface); border: 1px solid var(--border); border-radius: 8px; color: var(--text); font-size: 0.95rem; outline: none; } .search-box input:focus { border-color: var(--accent); } .search-box input::placeholder { color: var(--text-muted); } - - section { - margin-bottom: 2.5rem; - } - section h2 { - font-size: 1.25rem; - margin-bottom: 0.25rem; - display: flex; - align-items: center; - gap: 0.5rem; - } - section h2 .badge { - font-size: 0.75rem; - background: var(--border); - padding: 0.15rem 0.5rem; - border-radius: 10px; - font-weight: 400; - color: var(--text-muted); - } - section > p { - color: var(--text-muted); - font-size: 0.85rem; - margin-bottom: 1rem; - } - - table { - width: 100%; - border-collapse: collapse; - font-size: 0.9rem; - } - thead th { - text-align: left; - padding: 0.6rem 0.75rem; - border-bottom: 2px solid var(--border); - color: var(--text-muted); - font-weight: 600; - font-size: 0.8rem; - text-transform: uppercase; - letter-spacing: 0.04em; - position: sticky; - top: 52px; - background: var(--bg); - z-index: 10; - } - tbody tr { - border-bottom: 1px solid var(--border); - transition: background 0.1s; - } + section { margin-bottom: 2.5rem; } + details { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; } + details[open] { background: transparent; border-color: transparent; } + details summary { cursor: pointer; padding: 0.75rem 1rem; list-style: none; user-select: none; } + details summary::-webkit-details-marker { display: none; } + details summary::before { content: '▶'; display: inline-block; margin-right: 0.5rem; font-size: 0.7rem; transition: transform 0.15s; color: var(--text-muted); } + details[open] summary::before { transform: rotate(90deg); } + details summary:hover { background: rgba(88,166,255,0.04); } + section h2 { font-size: 1.25rem; margin-bottom: 0; display: inline-flex; align-items: center; gap: 0.5rem; } + section h2 .badge { font-size: 0.75rem; background: var(--border); padding: 0.15rem 0.5rem; border-radius: 10px; font-weight: 400; color: var(--text-muted); } + section > p, details > p { color: var(--text-muted); font-size: 0.85rem; margin: 0.5rem 1rem 1rem; } + table { width: 100%; border-collapse: collapse; font-size: 0.9rem; } + thead th { text-align: left; padding: 0.6rem 0.75rem; border-bottom: 2px solid var(--border); color: var(--text-muted); font-weight: 600; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.04em; position: sticky; top: 52px; background: var(--bg); z-index: 10; } + tbody tr { border-bottom: 1px solid var(--border); transition: background 0.1s; } tbody tr:hover { background: rgba(88,166,255,0.04); } - tbody td { - padding: 0.6rem 0.75rem; - vertical-align: top; - } + tbody td { padding: 0.6rem 0.75rem; vertical-align: top; } tbody tr.hidden { display: none; } - - a.issue-link { - color: var(--accent); - text-decoration: none; - font-weight: 500; - } + a.issue-link { color: var(--accent); text-decoration: none; font-weight: 500; } a.issue-link:hover { text-decoration: underline; } - .issue-num { - color: var(--text-muted); - font-variant-numeric: tabular-nums; - white-space: nowrap; - } - .age { - color: var(--text-muted); - font-size: 0.8rem; - white-space: nowrap; - } - .reason { - color: var(--text-muted); - font-size: 0.85rem; - } - .label { - display: inline-block; - font-size: 0.7rem; - padding: 0.1rem 0.45rem; - border-radius: 10px; - font-weight: 500; - margin: 1px 2px; - white-space: nowrap; - } + .issue-num { color: var(--text-muted); font-variant-numeric: tabular-nums; white-space: nowrap; } + .age { color: var(--text-muted); font-size: 0.8rem; white-space: nowrap; } + .reason { color: var(--text-muted); font-size: 0.85rem; } + .label { display: inline-block; font-size: 0.7rem; padding: 0.1rem 0.45rem; border-radius: 10px; font-weight: 500; margin: 1px 2px; white-space: nowrap; } .label-bug { background: #f8514922; color: #f85149; border: 1px solid #f8514944; } .label-enhancement { background: #58a6ff22; color: #58a6ff; border: 1px solid #58a6ff44; } .label-security { background: #d2992222; color: #d29922; border: 1px solid #d2992244; } @@ -199,87 +76,32 @@ .label-needs { background: #d2992222; color: #d29922; border: 1px solid #d2992244; } .label-admin { background: #e3b34122; color: #e3b341; border: 1px solid #e3b34144; } .label-help { background: #3fb95022; color: #3fb950; border: 1px solid #3fb95044; } - - .action-col { white-space: nowrap; } - .action { - font-size: 0.75rem; - padding: 0.2rem 0.5rem; - border-radius: 4px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.03em; - } - .action-close { background: #f8514933; color: #f85149; } - .action-label { background: #39d2c033; color: #39d2c0; } - .action-move { background: #bc8cff33; color: #bc8cff; } - .action-discuss { background: #bc8cff33; color: #bc8cff; } - .action-keep { background: #3fb95033; color: #3fb950; } - - .expand-btn { - background: none; - border: 1px solid var(--border); - color: var(--text-muted); - cursor: pointer; - padding: 0.15rem 0.4rem; - border-radius: 4px; - font-size: 0.75rem; - transition: all 0.15s; - } - .expand-btn:hover { border-color: var(--accent); color: var(--accent); } - - details { - margin-top: 0.3rem; - } - details summary { - cursor: pointer; - color: var(--text-muted); - font-size: 0.8rem; - } - details summary:hover { color: var(--accent); } - details .detail-content { - margin-top: 0.4rem; - padding: 0.5rem 0.75rem; - background: var(--surface); - border-radius: 6px; - font-size: 0.85rem; - color: var(--text-muted); - border: 1px solid var(--border); - } - - footer { - margin-top: 3rem; - padding-top: 1.5rem; - border-top: 1px solid var(--border); - color: var(--text-muted); - font-size: 0.8rem; - } + .closed-row { opacity: 0.4; text-decoration: line-through; } + footer { margin-top: 3rem; padding-top: 1.5rem; border-top: 1px solid var(--border); color: var(--text-muted); font-size: 0.8rem; }

pythondotorg Issue Triage Report

-

157 open issues reviewed · Generated 2026-02-18 · python/pythondotorg

+

118 open issues (down from 157) · Updated 2026-02-19 · python/pythondotorg · 39 issues closed since initial triage