From 1183e896eaf6712191ad13454df4b131bc48a7aa Mon Sep 17 00:00:00 2001 From: Lukas Heumos Date: Thu, 15 Oct 2026 14:27:55 +0200 Subject: [PATCH 1/2] feat: distinguish core developers, community and governance on the people page Closes #353. Sub-team membership lives in content/people/_index.md as three roles (core-devs, core-community, core-governance) with parent = "core". The people page chips and badges, the governance chart headcounts on /about/roles and a new Core Developers roster all read from those records. Core members keep the explicit "core" role because the landing page, stats page, search index and role-members shortcode count on it. Cards drop the "core team" badge when a sub-team badge already implies it. The chart hides faces in the sub-team boxes, which are too narrow for them beside the name. The GitHub teams were left as they are and still differ from this list. --- assets/main.scss | 7 ++- content/about/roles/_index.md | 2 + content/people/_index.md | 63 ++++++++++++++++-------- layouts/partials/people/card.html | 2 +- layouts/people/list.html | 6 ++- layouts/shortcodes/governance-chart.html | 11 +++-- 6 files changed, 62 insertions(+), 29 deletions(-) diff --git a/assets/main.scss b/assets/main.scss index 4af4d6ce..b2a11abc 100644 --- a/assets/main.scss +++ b/assets/main.scss @@ -4402,8 +4402,8 @@ body { } } - // The three sub-teams are names only; the document describes just one of them, and a chip row - // reads as a set rather than as three cards with a hole where the text would be. + // The three sub-teams are names and headcounts only; the document describes just one of them, and a + // chip row reads as a set rather than as three cards with a hole where the text would be. .gov-level--subteams > .gov-node > .gov-card { padding: 0.4rem 0.5rem; @@ -4412,6 +4412,9 @@ body { height: 1.85rem; font-size: 0.9rem; } + .gov-faces { + display: none; + } } // Core Developers and Core Community stack in one column so the council card beside them, diff --git a/content/about/roles/_index.md b/content/about/roles/_index.md index 1ec8ecfa..5ac5815f 100644 --- a/content/about/roles/_index.md +++ b/content/about/roles/_index.md @@ -63,6 +63,8 @@ They are granted additional rights so they can more easily carry on with their s These rights include: merging approved pull requests, voting for and against contested pull-requests, and being involved in deciding major changes to the API. Core developers are on our `scverse/core-devs` GitHub team. +{{< role-members "core-devs" >}} + All core packages must have at least one core developer as a maintainer. New core developers can be nominated by any existing core developer. While there is no hard-and-fast rule about who can be nominated, ideally, they should have: diff --git a/content/people/_index.md b/content/people/_index.md index 4520cafe..ec52a562 100644 --- a/content/people/_index.md +++ b/content/people/_index.md @@ -13,6 +13,27 @@ groups_lead = "Working groups bring together people from inside and outside the label = "Core Team" text = "The Core Team governs scverse and is deeply involved in developing and maintaining scverse packages." +[[roles]] + id = "core-devs" + parent = "core" + short = "core devs" + label = "Core Developers" + text = "Core Developers are core team members who have made significant code contributions to scverse and maintain its core packages." + +[[roles]] + id = "core-community" + parent = "core" + short = "core community" + label = "Core Community" + text = "Core Community members grow and support the scverse community through events, workshops and outreach." + +[[roles]] + id = "core-governance" + parent = "core" + short = "core governance" + label = "Core Governance" + text = "Core Governance coordinates across the core team and takes care of funding and the day-to-day running of scverse." + [[roles]] id = "council" short = "steering council" @@ -62,7 +83,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/flying-sheep" email = "philipp.angerer@scverse.org" affiliation = "Helmholtz Munich" - roles = ["core"] + roles = ["core", "core-devs", "core-governance"] works_on = ["anndata", "scanpy"] [[people]] @@ -70,7 +91,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/PauBadiaM" email = "paubim@scverse.org" affiliation = "Stanford University" - roles = ["core"] + roles = ["core", "core-devs", "core-governance"] works_on = ["decoupler"] [[people]] @@ -78,7 +99,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/gtca" email = "danila.bredikhin@scverse.org" affiliation = "Stanford University" - roles = ["core", "council"] + roles = ["core", "core-community", "core-governance", "council"] works_on = ["mudata", "muon"] [[people]] @@ -86,7 +107,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/emdann" email = "emma.dann@scverse.org" affiliation = "Stanford University" - roles = ["core"] + roles = ["core", "core-community", "core-governance"] works_on = ["community", "events"] [[people]] @@ -94,7 +115,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/Intron7" email = "severin.dicks@scverse.org" affiliation = "NVIDIA" - roles = ["core"] + roles = ["core", "core-devs", "core-governance"] works_on = ["rapids-singlecell"] [[people]] @@ -102,7 +123,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/canergen" email = "can.ergen@scverse.org" affiliation = "Helmholtz Munich & University of Würzburg" - roles = ["core"] + roles = ["core", "core-community", "core-governance"] works_on = ["scvi-tools"] [[people]] @@ -110,7 +131,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://jfoltzlab.org/" email = "jennifer.foltz@scverse.org" affiliation = "Washington University" - roles = ["core"] + roles = ["core", "core-community", "core-governance"] works_on = ["community"] [[people]] @@ -118,7 +139,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/ilan-gold" email = "ilan.gold@scverse.org" affiliation = "Memorial Sloan Kettering Cancer Center" - roles = ["core"] + roles = ["core", "core-devs", "core-governance"] works_on = ["anndata", "scanpy"] [[people]] @@ -126,7 +147,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/muskanhashim" email = "muskan.hashim@scverse.org" affiliation = "Helmholtz Munich" - roles = ["core"] + roles = ["core", "core-community", "core-governance"] works_on = ["community"] [[people]] @@ -134,7 +155,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/Zethson" email = "lukas.heumos@scverse.org" affiliation = "NVIDIA" - roles = ["core", "council"] + roles = ["core", "core-devs", "core-community", "core-governance", "council"] works_on = ["pertpy", "operations"] [[people]] @@ -142,7 +163,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/sarajimenez" email = "sara.jimenez@scverse.org" affiliation = "NVIDIA" - roles = ["core"] + roles = ["core", "core-community", "core-governance"] works_on = ["grants", "workshops"] [[people]] @@ -150,7 +171,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/ilia-kats" email = "ilia.kats@scverse.org" affiliation = "German Cancer Research Center (DKFZ)" - roles = ["core"] + roles = ["core", "core-devs"] works_on = ["mudata", "muon"] [[people]] @@ -158,7 +179,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/mikelkou" email = "mikaela.koutrouli@scverse.org" affiliation = "NVIDIA" - roles = ["core", "council"] + roles = ["core", "core-devs", "core-community", "core-governance", "council"] works_on = ["sc-proteomics", "operations"] [[people]] @@ -166,7 +187,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/ori-kron-wis" email = "ori.kronfeld@scverse.org" affiliation = "Weizmann Institute of Science" - roles = ["core"] + roles = ["core", "core-devs"] works_on = ["scvi-tools"] [[people]] @@ -174,7 +195,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/LucaMarconato" email = "luca.marconato@scverse.org" affiliation = "EMBL Heidelberg" - roles = ["core"] + roles = ["core", "core-devs", "core-governance"] works_on = ["spatialdata"] [[people]] @@ -182,7 +203,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/josenimo" email = "jose.nimo@scverse.org" affiliation = "Max Delbrück Center Berlin" - roles = ["core", "proteomics"] + roles = ["core", "core-community", "core-governance", "proteomics"] works_on = ["sc-proteomics", "events"] [[people]] @@ -190,7 +211,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/roshan9128" email = "roshan.sharma@scverse.org" affiliation = "Memorial Sloan Kettering Cancer Center" - roles = ["core"] + roles = ["core", "core-community", "core-governance"] works_on = ["grants", "workshops"] [[people]] @@ -198,7 +219,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/grst" email = "gregor.sturm@scverse.org" affiliation = "Boehringer Ingelheim" - roles = ["core"] + roles = ["core", "core-devs"] works_on = ["scirpy"] [[people]] @@ -206,7 +227,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/timtreis" email = "tim.treis@scverse.org" affiliation = "Helmholtz Munich" - roles = ["core"] + roles = ["core", "core-devs", "core-community", "core-governance"] works_on = ["spatialdata-plot", "squidpy"] [[people]] @@ -214,7 +235,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://github.com/melonora" email = "michiel.vierdag@scverse.org" affiliation = "EMBL Heidelberg" - roles = ["core"] + roles = ["core", "core-devs", "core-governance"] works_on = ["spatialdata"] [[people]] @@ -222,7 +243,7 @@ groups_lead = "Working groups bring together people from inside and outside the url = "https://lab.kaizhang.org/" email = "zhangkai33@westlake.edu.cn" affiliation = "Westlake University" - roles = ["core"] + roles = ["core", "core-devs"] works_on = ["snapatac2"] [[people]] diff --git a/layouts/partials/people/card.html b/layouts/partials/people/card.html index 85eb8619..e63ab17a 100644 --- a/layouts/partials/people/card.html +++ b/layouts/partials/people/card.html @@ -14,7 +14,7 @@

{{ $person.name }}

- {{ range $person.roles }} + {{ range $person.badges }} {{ if in $.groups . }} {{ index $.labels . }} {{ else }} diff --git a/layouts/people/list.html b/layouts/people/list.html index 6f367938..a22a9e02 100644 --- a/layouts/people/list.html +++ b/layouts/people/list.html @@ -6,8 +6,10 @@ {{ $groupIDs = $groupIDs | append .id }} {{ end }} {{ $labels := dict }} + {{ $parents := dict }} {{ range .Params.roles }} {{ $labels = merge $labels (dict .id .short) }} + {{ if .parent }}{{ $parents = merge $parents (dict .id .parent) }}{{ end }} {{ end }} {{/* One record per person, so nobody is duplicated: the role sections below are views over the @@ -17,8 +19,10 @@ {{ range $i, $person := .Params.people }} {{ $works := $person.works_on | default slice }} {{ $roleNames := slice }} + {{ $implied := slice }} {{ range $person.roles }} {{ $roleNames = $roleNames | append (index $labels .) }} + {{ with index $parents . }}{{ $implied = $implied | append . }}{{ end }} {{ end }} {{ $search := lower (printf "%s %s %s %s" $person.name ($person.affiliation | default "") (delimit $works " ") (delimit $roleNames " ")) @@ -30,7 +34,7 @@ {{ end }} {{ $items = $items | append (merge $person (dict "index" $i "works" $works "search" $search "sortkey" (printf "%d %04d" $rank $i) - "team" (lt $rank (len $roles)) + "team" (lt $rank (len $roles)) "badges" (complement $implied $person.roles) )) }} {{ end }} diff --git a/layouts/shortcodes/governance-chart.html b/layouts/shortcodes/governance-chart.html index 7b5dac6a..6f635ff8 100644 --- a/layouts/shortcodes/governance-chart.html +++ b/layouts/shortcodes/governance-chart.html @@ -16,7 +16,7 @@ {{ end }} {{ $role := dict }} -{{ range slice "core" "council" "management" "advisory" }} +{{ range slice "core" "core-devs" "core-community" "core-governance" "council" "management" "advisory" }} {{ $role = merge $role (dict . (dict "id" . "count" (index $count .) "members" (index $members .))) }} {{ end }} @@ -55,20 +55,23 @@