From 6e20d4afb513023c765afda1f6745be7d1b20200 Mon Sep 17 00:00:00 2001 From: Advait Bhat Date: Thu, 10 Sep 2026 16:39:08 -0700 Subject: [PATCH 1/5] Finish explicit paper attribution and inclusive membership-year screening --- _planning/ATTRIBUTION_REVIEW.md | 35 + content/publications.json | 72 ++ docs/CONTENT_MODEL.md | 6 +- docs/PUBLICATION_POLICY.md | 4 + lib/content-validation.mjs | 2 + lib/publications.mjs | 4 +- maintenance/membership-evidence.json | 4 +- maintenance/review.json | 1621 ++++++++++---------------- scripts/discovery.py | 4 +- scripts/publication_pipeline.py | 4 +- scripts/publication_policy.py | 104 +- scripts/review.py | 4 +- scripts/validate-maintenance.py | 14 +- tests/content-model.test.mjs | 21 +- tests/test_publication_policy.py | 73 +- 15 files changed, 953 insertions(+), 1019 deletions(-) create mode 100644 _planning/ATTRIBUTION_REVIEW.md diff --git a/_planning/ATTRIBUTION_REVIEW.md b/_planning/ATTRIBUTION_REVIEW.md new file mode 100644 index 0000000..a5702f7 --- /dev/null +++ b/_planning/ATTRIBUTION_REVIEW.md @@ -0,0 +1,35 @@ +# Explicit publication attribution review — September 10, 2026 + +Issue #22. All 66 approved papers now have explicit profile links; 23 imported records previously relied on name matching. These changes record authorship without reconsidering archive inclusion or the nine rejected candidate updates. The new-candidate requirement (Tim plus another lab author) does not retroactively remove grandfathered papers. + +The stored paper title pages were checked against the existing author lists and verified roster identities. Mike’s Homekit2020 authorship is also confirmed on [his bibliography](https://mikemerrill.io/). Yasaman’s GLOBEM authorship is confirmed in the [author-hosted final paper](https://micohan.github.io/assets/pdf/GLOBEM.pdf), [her CV](https://sefyas.github.io/files/2411-YSSCV.pdf), and the [UbiComp award record](https://ubicomp.hosting.acm.org/ubicompiswc2023_wp/awards/ubicomp-iswc-2023-awards/). The older locally stored GLOBEM PDF lacks her on the title page; the final author-hosted version supplies the evidence for the existing approved author list. That PDF/version discrepancy is recorded here; the previously rejected metadata update is not reopened. + +| Existing paper ID | Explicit person IDs | Primary source | +| --- | --- | --- | +| xu2023globemimwut | yasamansefidgar, timalthoff | [Paper](https://micohan.github.io/assets/pdf/GLOBEM.pdf) | +| merrillHomekit2020BenchmarkTime2023 | mikemerrill, timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/merrillHomekit2020BenchmarkTime2023.pdf) | +| zech2023mhatsengagement | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/zech2023mhatsengagement.pdf) | +| miner2022computational | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/miner2022computational.pdf) | +| mezlini2021estimating | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/mezlini2021estimating.pdf) | +| althoff2022diet | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2022diet.pdf) | +| hicks2022leveraging | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/hicks2022leveraging.pdf) | +| althoffModeration | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoffModeration.pdf) | +| liupaths2020 | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/liupaths2020.pdf) | +| gordonactivity2019 | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/gordonactivity2019.pdf) | +| xuleveraging2019 | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/xuleveraging2019.pdf) | +| sefidgarpassively2020 | yasamansefidgar, timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/sefidgarpassively2020.pdf) | +| kurashima2018tipas | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/kurashima2018tipas.pdf) | +| althoff2018psychomotor | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2018psychomotor.pdf) | +| althoff2016onlineappendix | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2016onlineappendix.pdf) | +| shameli2017gamification | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/shameli2017gamification.pdf) | +| althoff2017large | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2017large.pdf) | +| althoff2017onlineactions | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2017onlineactions.pdf) | +| althoff2017population | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2017population.pdf) | +| althoff2016pokemon | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2016pokemon.pdf) | +| althoff2016counseling | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2016counseling.pdf) | +| althoff2015donor | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2015donor.pdf) | +| althoff2014ask | timalthoff | [Paper](https://behavioral-data.github.io/resources/pubpdfs/althoff2014ask.pdf) | + +Yasaman’s 2019 and GLOBEM entries remain approved historical collaborations despite her later recorded 2025–2026 lab affiliation. Profile authorship and automatic eligibility for new additions serve different purposes. Names shared by unrelated coauthors (including other Lius, Lins, Xus, and Zhangs) are not converted into lab identities. + +The screening code reads the existing `maintenance/membership-evidence.json` directly, uses inclusive joining/leaving years, preserves Jina’s 2023–2025 gap, and treats omitted or unknown intervals as requiring review. It does not infer ongoing affiliation from current roster status or a null end. Reassessment updates screening labels while preserving the original human-decision receipts, IDs, targets, and rejected/deferred state. diff --git a/content/publications.json b/content/publications.json index 26cd960..5be16ed 100644 --- a/content/publications.json +++ b/content/publications.json @@ -409,6 +409,10 @@ "Andrew Campell", "Anind K. Dey", "Jennifer C. Mankoff" + ], + "personIds": [ + "yasamansefidgar", + "timalthoff" ] }, { @@ -449,6 +453,10 @@ "Ludwig Schmidt", "Luca Foshchini", "Tim Althoff" + ], + "personIds": [ + "mikemerrill", + "timalthoff" ] }, { @@ -530,6 +538,9 @@ "Boris Litvin", "Jerilyn Wu", "Patricia A Areán" + ], + "personIds": [ + "timalthoff" ] }, { @@ -713,6 +724,9 @@ "Jeff Hancock", "Steven M Asch", "others" + ], + "personIds": [ + "timalthoff" ] }, { @@ -840,6 +854,9 @@ "Ernesto Ramirez", "Tim Althoff", "Luca Foschini" + ], + "personIds": [ + "timalthoff" ] }, { @@ -925,6 +942,9 @@ "Hamed Nilforoshan", "Jenna Hua", "Jure Leskovec" + ], + "personIds": [ + "timalthoff" ] }, { @@ -965,6 +985,9 @@ "Michael P Snyder", "Abby C King", "others" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1175,6 +1198,9 @@ "Tal August", "Qisheng Li", "Tim Althoff" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1384,6 +1410,9 @@ "Yang Liu", "Tim Althoff", "Jeffrey Heer" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1424,6 +1453,9 @@ "Mitchell Gordon", "Tim Althoff", "Jure Leskovec" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1475,6 +1507,9 @@ "J. David Creswell", "Jennifer Mankoff", "Anind K. Dey" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1523,6 +1558,10 @@ "Paula S. Nurius", "Anind K. Dey", "Jennifer Mankoff" + ], + "personIds": [ + "yasamansefidgar", + "timalthoff" ] }, { @@ -1557,6 +1596,9 @@ "Takeshi Kurashima", "Tim Althoff", "Jure Leskovec" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1591,6 +1633,9 @@ "Tim Althoff", "Eric Horvitz", "Ryen W White" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1624,6 +1669,9 @@ "Eric Horvitz", "Ryen W White", "Jamie Zeitzer" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1658,6 +1706,9 @@ "Tim Althoff", "Amin Saberi", "Jure Leskovec" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1692,6 +1743,9 @@ "Abby C King", "Scott L Delp", "Jure Leskovec" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1722,6 +1776,9 @@ "Tim Althoff", "Pranav Jindal", "Jure Leskovec" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1754,6 +1811,9 @@ }, "authorNames": [ "Tim Althoff" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1793,6 +1853,9 @@ "Tim Althoff", "Ryen W White", "Eric Horvitz" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1824,6 +1887,9 @@ "Tim Althoff", "Kevin Clark", "Jure Leskovec" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1856,6 +1922,9 @@ "authorNames": [ "Tim Althoff", "Jure Leskovec" + ], + "personIds": [ + "timalthoff" ] }, { @@ -1886,6 +1955,9 @@ "Tim Althoff", "Cristian Danescu-Niculescu-Mizil", "Dan Jurafsky" + ], + "personIds": [ + "timalthoff" ] }, { diff --git a/docs/CONTENT_MODEL.md b/docs/CONTENT_MODEL.md index 2d8fbc0..590a8ac 100644 --- a/docs/CONTENT_MODEL.md +++ b/docs/CONTENT_MODEL.md @@ -7,7 +7,7 @@ All public page data lives in `content/`. JSON strings may contain Markdown wher | `pages.json` | Markdown strings: `home`, `recruitment`, `idiofid`, `research`, `pictures`, `about` | Empty strings render no prose. Existing words have only been moved out of JSX. | | `site.json` | `name`, `url`, `repository`, `signupUrl`, `description` | Canonical site URL and IdioFid endpoint are configured here. | | `people.json` | `id`, `name`, `role`, `status`, `priority`, `topics` | `website`, local `image`, optional `photoCrop: {scale, x, y}`, `aliases`, `memberships: [{start, end?}]`, `reviewedOn`; status is member/visitor/alumni. | -| `publications.json` | `id`, `title`, `authors`, integer `year` | Ordered `authorNames`, explicit `personIds`, `venue`, optional `venueShort`, DOI, `openalexId`, `arxivId`, `status`, `type`, `topics`, `description` (Markdown), `highlight`, local/external `pdf`, local `image`, `url`, `code`, `dataset`, `reviewedOn`, preserved `legacy`. | +| `publications.json` | `id`, `title`, `authors`, integer `year`, explicit `personIds` | Ordered `authorNames`, `venue`, optional `venueShort`, DOI, `openalexId`, `arxivId`, `status`, `type`, `topics`, `description` (Markdown), `highlight`, local/external `pdf`, local `image`, `url`, `code`, `dataset`, `reviewedOn`, preserved `legacy`. | | `awards.json` | `id`, `title`, `organization`, `date`, `sourceUrl`, at least one recipient or paper | `personIds`, `publicationIds`, `recipientNames` for alumni without profiles, `recipientLabel` for team attribution, `kind`, `highlight` for an explicitly selected people honor, and `dateLabel` for a verified year range; one record supplies award labels and related profile, publication, and news views. | | `news.json` | `id`, `headline` (Markdown), `date` | `personIds`, `publicationIds`, `projectIds`, `awardIds`, `sourceUrl`. Related profiles and paper pages display linked news. | | `projects.json` | `id`, `title` | `description` (Markdown), local `image`, `personIds`, `publicationIds`, `url`, `code`, `dataset`. Appears on Research and linked profile/paper pages. | @@ -18,13 +18,13 @@ All public page data lives in `content/`. JSON strings may contain Markdown wher The validator in `lib/content-validation.mjs` enforces dates, IDs, links, assets and relationships. Cross-record references must point to existing records. Public content requires no API key, database or server. -`maintenance/membership-evidence.json` records source-backed membership research separately from exact-day `people.memberships`. Evidence dates use inclusive `YYYY` ranges at the maintainer's request, preserve unresolved boundaries and conflicting claims, and distinguish an unknown departure from ongoing membership. Direct maintainer confirmations take precedence over public profiles; `omitted` records have no selected range. It is a review artifact, not an input to automatic relevance assessment. Differences within the same year do not block reconstruction. Do not convert years into invented calendar days. See [Membership review](../_planning/MEMBERSHIP_REVIEW.md). +`maintenance/membership-evidence.json` is the source for automatic membership screening. The pipeline loads its reviewed ranges directly without copying dates into public profiles. Dates use inclusive `YYYY` ranges, preserve unresolved boundaries and conflicting claims, and distinguish an unknown departure from ongoing membership. Direct maintainer confirmations take precedence over public profiles; `omitted` records have no selected range. Differences within the same year do not block screening. Do not convert years into invented calendar days. See [Membership review](../_planning/MEMBERSHIP_REVIEW.md) and [attribution completion](../_planning/ATTRIBUTION_REVIEW.md). `photoCrop` applies the same CSS framing on the homepage, Team, and profile pages, preserving original image assets. When present, it requires `scale` (1–2) and transform-origin percentages `x` and `y` (0–100). Without `photoCrop`, framing defaults to scale 1 and origin 50%, 50%. Publication cards and venue filters use known short venue labels, or an explicit `venueShort` when the journal name alone does not identify the conference. Full `venue` values remain on detail pages and in citations. Search accepts both full names and displayed abbreviations. Phone filters expand from a disclosure button; selected filters remain visible as removable controls when collapsed. -Publication status: `preprint`, `accepted`, `published`, `withdrawn`, `retracted`. Type: `article`, `conference`, `preprint`, `book`, `dataset`, `other`. These fields are optional for imported records; verify them during backfill. Explicit `personIds`, including an empty list, supersede legacy name matching. Do not generate those links solely from names. +Publication status: `preprint`, `accepted`, `published`, `withdrawn`, `retracted`. Type: `article`, `conference`, `preprint`, `book`, `dataset`, `other`. These fields are optional for imported records; verify them during backfill. Explicit `personIds` are required; use an empty list for a paper that belongs to no profile. Profiles never fall back to name matching. Verify author identity against primary evidence before adding a link. News and Awards have separate archive routes with shared navigation. The Awards archive groups all records by year and provides year jump links; stable individual award anchors remain available. News omits a redundant related-person link when the headline already links to that profile. Awards are not converted into invented news text. An approved news record can link to an award; its title and organization are shown where related. The three imported paper-level `award` strings have been migrated into the structured collection; original wording remains in each publication's `legacy.award`. The rendered award label comes from the shared record. Avoid duplicating an award across old and new records. diff --git a/docs/PUBLICATION_POLICY.md b/docs/PUBLICATION_POLICY.md index 695feec..c914a32 100644 --- a/docs/PUBLICATION_POLICY.md +++ b/docs/PUBLICATION_POLICY.md @@ -4,6 +4,10 @@ Confirmed direction from the lab maintainer, clarified September 9, 2026: Tim mu For historical attribution, use membership when the work was published, rather than someone's current role. Past members count during their recorded membership interval. Tim is counted as the PI when his verified author identity appears, but never qualifies a paper alone. Unknown membership dates require human review; current status does not establish historical membership. Publication date is a screening proxy for when the work happened. Continuing collaborations after departure, publication delays, and work predating the lab require a documented reviewer judgment. +Screening uses inclusive calendar years from `maintenance/membership-evidence.json`. Joining and leaving years both count; Jina’s separate 2019–2022 and 2026–present periods retain the intervening gap. Omitted ranges, unknown starts, and unknown departure years require review. A null end is open only when explicitly marked ongoing. Source records with only a publication year can be screened without inventing a month or day. + +All 66 approved archive entries have explicit profile author links. The 23 remaining imported records were checked against paper title pages and author evidence; see [attribution review](../_planning/ATTRIBUTION_REVIEW.md). Their existing inclusion is preserved, including Tim’s earlier work and historical collaborations. The new-candidate rule does not retrospectively remove approved records. Current screening assessments can change as evidence improves; a recorded human decision retains its original assessment, reason, sources, date, and selected authors. + `maintenance/publication-policy.json` configures the rule. Each discovery candidate receives a `labRelevance` assessment: - `meets-rule`: Tim and at least one other distinct lab author have supported publication-time membership. diff --git a/lib/content-validation.mjs b/lib/content-validation.mjs index b62569a..e9a4ebb 100644 --- a/lib/content-validation.mjs +++ b/lib/content-validation.mjs @@ -95,6 +95,8 @@ export function validateContent(data, assetExists = () => true) { }; const dois = new Set(); for (const p of data.publications) { + if (!Array.isArray(p.personIds)) + fail(p.id, 'expected explicit personIds (use [] for no profiles)'); for (const field of ['title', 'authors']) text(p[field], `${p.id}.${field}`); if (!Number.isInteger(p.year) || p.year < 1900 || p.year > new Date().getFullYear() + 2) fail(p.id, 'invalid year'); diff --git a/lib/publications.mjs b/lib/publications.mjs index 724e410..381df9a 100644 --- a/lib/publications.mjs +++ b/lib/publications.mjs @@ -24,10 +24,8 @@ export function matchesPerson(paper, name) { ); } -// An explicit list, including [], always takes precedence over legacy name matching. export function paperBelongsTo(paper, person) { - if (Array.isArray(paper.personIds)) return paper.personIds.includes(person.id); - return [person.name, ...(person.aliases || [])].some((name) => matchesPerson(paper, name)); + return Array.isArray(paper.personIds) && paper.personIds.includes(person.id); } export function filterPapers( diff --git a/maintenance/membership-evidence.json b/maintenance/membership-evidence.json index 5cd1e5d..44529be 100644 --- a/maintenance/membership-evidence.json +++ b/maintenance/membership-evidence.json @@ -1,7 +1,7 @@ { "version": 3, "checkedOn": "2026-09-09", - "purpose": "Source-backed reconstruction for issue #22; evidence only, not an automatic publication-policy input.", + "purpose": "Reviewed year-level membership evidence for issue #22 and automatic publication screening.", "datePrecision": "year", "conventions": { "dates": "YYYY uses the maintainer-requested year precision. Joining and leaving years are inclusive. Null means an unresolved year; differences within the same year do not block reconstruction.", @@ -11,7 +11,7 @@ "conflict": "Competing accounts retained in conflictingClaims; contested boundaries remain null or absent.", "unresolved": "No usable lab appointment boundary established; revisit only when better evidence is available.", "personId": "Matches content/people.json. Null denotes an alumni-only entry; this file does not create a new public profile.", - "policy": "Year-level research evidence; not an automatic publication-policy input. Do not expand years into invented calendar dates. Existing decisions, roster roles, and current/past status are preserved.", + "policy": "Consumed directly by publication screening as inclusive calendar years. Do not expand years into invented dates. Existing decisions, roster roles, and current/past status are preserved.", "confirmed": "A timeline completed or corrected by direct maintainer confirmation; this governs conflicting public profiles.", "omitted": "Membership range intentionally omitted at the maintainer\u2019s request; historical source claims are not selected ranges." }, diff --git a/maintenance/review.json b/maintenance/review.json index d5ebd1a..246956e 100644 --- a/maintenance/review.json +++ b/maintenance/review.json @@ -69,9 +69,7 @@ ], "publicationDate": "2014-09-16", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -324,9 +322,7 @@ ], "publicationDate": "2012-09-13", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -456,9 +452,7 @@ ], "publicationDate": "2006-01-10", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -649,9 +643,7 @@ ], "publicationDate": "2012-05-31", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -722,9 +714,7 @@ ], "publicationDate": "2006-08-21", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -783,9 +773,7 @@ ], "publicationDate": "2013-11-15", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -844,9 +832,7 @@ ], "publicationDate": "2009-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -907,9 +893,7 @@ ], "publicationDate": "1961-07-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -974,9 +958,7 @@ ], "publicationDate": "2015-04-17", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -1031,9 +1013,7 @@ ], "publicationDate": "2009-12-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -1154,9 +1134,7 @@ ], "publicationDate": "2016-06-12", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -1219,9 +1197,7 @@ ], "publicationDate": "2016-06-24", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -1280,9 +1256,7 @@ ], "publicationDate": "2016-06-19", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -1408,9 +1382,7 @@ ], "publicationDate": "2016-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -1473,9 +1445,7 @@ ], "publicationDate": "2016-08-10", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -1870,9 +1840,7 @@ ], "publicationDate": "2017-07-21", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -1933,9 +1901,7 @@ ], "publicationDate": "2017-09-04", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -2063,9 +2029,7 @@ ], "publicationDate": "2017-04-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -2315,9 +2279,7 @@ ], "publicationDate": "2018-03-05", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -2441,9 +2403,7 @@ ], "publicationDate": "2018-06-08", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -2506,9 +2466,7 @@ ], "publicationDate": "2018-06-21", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -2571,9 +2529,7 @@ ], "publicationDate": "2018-09-27", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -2698,9 +2654,7 @@ ], "publicationDate": "2019-01-04", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -2770,10 +2724,10 @@ "jinasuh" ], "publicationDate": "2019-04-30", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -2851,10 +2805,10 @@ "jinasuh" ], "publicationDate": "2019-04-29", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -2917,9 +2871,7 @@ ], "publicationDate": "2019-03-27", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -3302,9 +3254,7 @@ ], "publicationDate": "2019-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -3700,10 +3650,10 @@ "jinasuh" ], "publicationDate": "2019-08-09", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -3768,9 +3718,7 @@ ], "publicationDate": "2018-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -3831,9 +3779,7 @@ ], "publicationDate": "2019-09-06", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -4021,11 +3967,9 @@ "memberPersonIds": [ "timalthoff" ], - "uncertainPersonIds": [ - "yasamansefidgar" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "does-not-meet-rule", + "reason": "Fewer than 2 matching authors with possible publication-time lab membership; Tim alone does not qualify." }, "reconciliationReview": { "checkedOn": "2026-09-09", @@ -4103,9 +4047,7 @@ ], "publicationDate": "2019-11-10", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -4246,9 +4188,7 @@ ], "publicationDate": "2019-09-25", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -4312,10 +4252,10 @@ "jinasuh" ], "publicationDate": "2019-12-13", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -4383,10 +4323,10 @@ "margaretli" ], "publicationDate": "2020-02-07", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -4451,10 +4391,10 @@ "jinasuh" ], "publicationDate": "2020-03-04", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -4578,13 +4518,12 @@ ], "publicationDate": "2020-05-26", "memberPersonIds": [ + "ashishsharma", "timalthoff" ], - "uncertainPersonIds": [ - "ashishsharma" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -4685,13 +4624,12 @@ ], "publicationDate": "2020-05-18", "memberPersonIds": [ + "jinasuh", "timalthoff" ], - "uncertainPersonIds": [ - "jinasuh" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -4767,9 +4705,7 @@ ], "publicationDate": "2020-04-23", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -4831,10 +4767,10 @@ "jinasuh" ], "publicationDate": "2020-04-30", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -4966,10 +4902,10 @@ "jinasuh" ], "publicationDate": "2020-05-28", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -5027,10 +4963,10 @@ "jinasuh" ], "publicationDate": "2020-07-03", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -5094,10 +5030,10 @@ "jinasuh" ], "publicationDate": "2020-05-20", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -5239,13 +5175,12 @@ ], "publicationDate": "2020-04-10", "memberPersonIds": [ + "ashishsharma", "timalthoff" ], - "uncertainPersonIds": [ - "ashishsharma" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3015278215" }, @@ -5310,10 +5245,10 @@ "margaretli" ], "publicationDate": "2020-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -5380,10 +5315,10 @@ "jinasuh" ], "publicationDate": "2020-04-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -5446,9 +5381,7 @@ ], "publicationDate": "2020-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -5534,10 +5467,10 @@ "margaretli" ], "publicationDate": "2020-06-22", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -5672,10 +5605,10 @@ "jinasuh" ], "publicationDate": "2020-07-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -5740,13 +5673,12 @@ ], "publicationDate": "2020-08-17", "memberPersonIds": [ + "jinasuh", "timalthoff" ], - "uncertainPersonIds": [ - "jinasuh" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3114914047" }, @@ -5807,10 +5739,10 @@ "jinasuh" ], "publicationDate": "2020-08-03", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -5877,13 +5809,12 @@ ], "publicationDate": "2022-03-18", "memberPersonIds": [ + "mikemerrill", "timalthoff" ], - "uncertainPersonIds": [ - "mikemerrill" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -5960,13 +5891,12 @@ ], "publicationDate": "2020-01-01", "memberPersonIds": [ + "ashishsharma", "timalthoff" ], - "uncertainPersonIds": [ - "ashishsharma" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -6065,13 +5995,12 @@ ], "publicationDate": "2022-05-31", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -6153,10 +6082,10 @@ "margaretli" ], "publicationDate": "2021-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -6288,10 +6217,10 @@ "innalin" ], "publicationDate": "2020-10-09", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "innalin" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -6357,10 +6286,10 @@ "margaretli" ], "publicationDate": "2020-10-14", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -6478,9 +6407,7 @@ ], "publicationDate": "2020-10-26", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -6692,13 +6619,12 @@ ], "publicationDate": "2021-03-06", "memberPersonIds": [ + "jinasuh", "timalthoff" ], - "uncertainPersonIds": [ - "jinasuh" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -6797,14 +6723,13 @@ ], "publicationDate": "2021-04-19", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "innalin" + "innalin", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -6956,10 +6881,10 @@ "jinasuh" ], "publicationDate": "2021-05-06", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -7087,13 +7012,12 @@ ], "publicationDate": "2021-05-22", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -7164,9 +7088,7 @@ ], "publicationDate": "2015-07-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -7228,10 +7150,10 @@ "jinasuh" ], "publicationDate": "2021-04-14", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -7293,9 +7215,7 @@ ], "publicationDate": "2021-04-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -7361,10 +7281,10 @@ "jinasuh" ], "publicationDate": "2021-04-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -7429,13 +7349,12 @@ ], "publicationDate": "2021-01-01", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -7582,13 +7501,12 @@ ], "publicationDate": "2021-08-12", "memberPersonIds": [ + "mikemerrill", "timalthoff" ], - "uncertainPersonIds": [ - "mikemerrill" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -7922,10 +7840,10 @@ "margaretli" ], "publicationDate": "2021-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8052,13 +7970,12 @@ ], "publicationDate": "2021-07-09", "memberPersonIds": [ + "mikemerrill", "timalthoff" ], - "uncertainPersonIds": [ - "mikemerrill" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "exclusionReview": { "reviewedOn": "2026-09-09", @@ -8123,10 +8040,10 @@ "margaretli" ], "publicationDate": "2021-07-26", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8184,10 +8101,10 @@ "innalin" ], "publicationDate": "2021-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "innalin" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8257,10 +8174,10 @@ "jinasuh" ], "publicationDate": "2021-09-28", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8328,10 +8245,10 @@ "innalin" ], "publicationDate": "2021-08-16", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "innalin" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8390,9 +8307,7 @@ ], "publicationDate": "2016-06-23", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8460,13 +8375,12 @@ ], "publicationDate": "2024-05-28", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -8547,13 +8461,12 @@ ], "publicationDate": "2021-09-17", "memberPersonIds": [ + "jinasuh", "timalthoff" ], - "uncertainPersonIds": [ - "jinasuh" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4309564255" }, @@ -8616,10 +8529,10 @@ "jinasuh" ], "publicationDate": "2021-09-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8691,10 +8604,10 @@ "jinasuh" ], "publicationDate": "2021-10-22", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8758,13 +8671,12 @@ ], "publicationDate": "2022-05-31", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -8909,9 +8821,7 @@ ], "publicationDate": "2021-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -8982,14 +8892,13 @@ ], "publicationDate": "2022-03-28", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "innalin" + "innalin", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4317757464" }, @@ -9060,10 +8969,10 @@ "jinasuh" ], "publicationDate": "2022-04-28", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -9284,13 +9193,12 @@ ], "publicationDate": "2021-11-10", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3213416073" }, @@ -9355,10 +9263,10 @@ "innalin" ], "publicationDate": "2020-08-23", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "innalin" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -9491,10 +9399,10 @@ "jinasuh" ], "publicationDate": "2022-05-11", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -9558,13 +9466,12 @@ ], "publicationDate": "2022-05-26", "memberPersonIds": [ + "mikemerrill", "timalthoff" ], - "uncertainPersonIds": [ - "mikemerrill" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -9644,13 +9551,12 @@ ], "publicationDate": "2022-07-01", "memberPersonIds": [ + "innalin", "timalthoff" ], - "uncertainPersonIds": [ - "innalin" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reconciliationReview": { "checkedOn": "2026-09-09", @@ -9724,13 +9630,12 @@ ], "publicationDate": "2021-09-11", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3199811133" }, @@ -9858,13 +9763,12 @@ ], "publicationDate": "2021-04-27", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3158487127" }, @@ -9928,13 +9832,12 @@ ], "publicationDate": "2021-02-16", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3131477973" }, @@ -10000,13 +9903,12 @@ ], "publicationDate": "2021-01-19", "memberPersonIds": [ + "innalin", "timalthoff" ], - "uncertainPersonIds": [ - "innalin" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3125287435" }, @@ -10071,10 +9973,10 @@ "margaretli" ], "publicationDate": "2020-10-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -10146,13 +10048,12 @@ ], "publicationDate": "2020-09-21", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3088597222" }, @@ -10216,13 +10117,12 @@ ], "publicationDate": "2020-09-17", "memberPersonIds": [ + "ashishsharma", "timalthoff" ], - "uncertainPersonIds": [ - "ashishsharma" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3084867291" }, @@ -10279,10 +10179,10 @@ "margaretli" ], "publicationDate": "2022-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -10350,10 +10250,10 @@ "margaretli" ], "publicationDate": "2020-02-07", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -10415,9 +10315,7 @@ ], "publicationDate": "2019-09-06", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -10556,9 +10454,7 @@ ], "publicationDate": "2018-10-31", "memberPersonIds": [], - "uncertainPersonIds": [ - "margaretli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -10624,9 +10520,7 @@ ], "publicationDate": "2022-08-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -10764,10 +10658,10 @@ "margaretli" ], "publicationDate": "2022-09-09", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -10832,13 +10726,12 @@ ], "publicationDate": "2020-08-28", "memberPersonIds": [ + "mikemerrill", "timalthoff" ], - "uncertainPersonIds": [ - "mikemerrill" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3082736604" }, @@ -10907,10 +10800,10 @@ "jinasuh" ], "publicationDate": "2022-08-16", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -10979,13 +10872,12 @@ ], "publicationDate": "2022-08-05", "memberPersonIds": [ + "margaretli", "timalthoff" ], - "uncertainPersonIds": [ - "margaretli" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -11196,13 +11088,12 @@ ], "publicationDate": "2022-10-07", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4366547794" }, @@ -11266,13 +11157,12 @@ ], "publicationDate": "2021-11-10", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w3213416073" }, @@ -11346,14 +11236,13 @@ ], "publicationDate": "2022-10-27", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "innalin" + "innalin", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4385572715" }, @@ -11415,9 +11304,7 @@ ], "publicationDate": "2022-10-28", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -11544,9 +11431,7 @@ ], "publicationDate": "2022-10-08", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -11662,14 +11547,12 @@ ], "publicationDate": "2022-11-04", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "mikemerrill", - "yasamansefidgar" + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -11739,13 +11622,12 @@ ], "publicationDate": "2022-11-19", "memberPersonIds": [ + "jinasuh", "timalthoff" ], - "uncertainPersonIds": [ - "jinasuh" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -11826,9 +11708,7 @@ ], "publicationDate": "2022-11-16", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -11900,10 +11780,10 @@ "jinasuh" ], "publicationDate": "2022-10-18", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -12149,14 +12029,13 @@ ], "publicationDate": "2023-01-23", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "innalin" + "innalin", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -12236,9 +12115,7 @@ ], "publicationDate": "2023-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -12301,9 +12178,7 @@ ], "publicationDate": "2023-04-19", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -12398,11 +12273,9 @@ "memberPersonIds": [ "timalthoff" ], - "uncertainPersonIds": [ - "yasamansefidgar" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "does-not-meet-rule", + "reason": "Fewer than 2 matching authors with possible publication-time lab membership; Tim alone does not qualify." }, "reconciliationReview": { "checkedOn": "2026-09-09", @@ -12480,9 +12353,7 @@ ], "publicationDate": "2022-11-20", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -12551,9 +12422,7 @@ ], "publicationDate": "2023-02-23", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -12695,9 +12564,7 @@ ], "publicationDate": "2023-03-13", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -12763,9 +12630,7 @@ ], "publicationDate": "2023-03-13", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -12835,9 +12700,7 @@ ], "publicationDate": "2023-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -12903,9 +12766,7 @@ ], "publicationDate": "2023-03-27", "memberPersonIds": [], - "uncertainPersonIds": [ - "advaitbhat" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -12975,10 +12836,7 @@ ], "publicationDate": "2023-03-27", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh", - "yasamansefidgar" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -13047,13 +12905,12 @@ ], "publicationDate": "2023-03-24", "memberPersonIds": [ + "margaretli", "timalthoff" ], - "uncertainPersonIds": [ - "margaretli" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -13142,9 +12999,7 @@ ], "publicationDate": "2023-04-19", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -13208,13 +13063,12 @@ ], "publicationDate": "2023-04-19", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -13301,10 +13155,7 @@ ], "publicationDate": "2023-04-19", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh", - "yasamansefidgar" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -13375,9 +13226,7 @@ ], "publicationDate": "2023-05-03", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -13448,13 +13297,12 @@ ], "publicationDate": "2023-05-04", "memberPersonIds": [ + "innalin", "timalthoff" ], - "uncertainPersonIds": [ - "innalin" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4385572158" }, @@ -13518,9 +13366,7 @@ ], "publicationDate": "2023-05-13", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -13646,9 +13492,7 @@ ], "publicationDate": "2023-06-12", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -13720,9 +13564,7 @@ ], "publicationDate": "2023-05-25", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -13805,10 +13647,10 @@ "margaretli" ], "publicationDate": "2023-06-05", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -13878,10 +13720,10 @@ "margaretli" ], "publicationDate": "2023-07-11", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -13950,9 +13792,7 @@ ], "publicationDate": "2023-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -14028,14 +13868,13 @@ ], "publicationDate": "2023-01-01", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "innalin" + "innalin", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -14141,14 +13980,13 @@ ], "publicationDate": "2022-01-01", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "innalin" + "innalin", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -14234,13 +14072,12 @@ ], "publicationDate": "2023-09-18", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4396832182" }, @@ -14308,13 +14145,12 @@ ], "publicationDate": "2023-09-19", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4396832076" }, @@ -14380,9 +14216,7 @@ ], "publicationDate": "2023-09-28", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -14526,10 +14360,10 @@ "margaretli" ], "publicationDate": "2023-10-16", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -14594,9 +14428,7 @@ ], "publicationDate": "2023-10-19", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -14662,10 +14494,10 @@ "margaretli" ], "publicationDate": "2023-10-24", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -14732,13 +14564,12 @@ ], "publicationDate": "2023-10-24", "memberPersonIds": [ + "innalin", "timalthoff" ], - "uncertainPersonIds": [ - "innalin" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4396832979" }, @@ -14792,9 +14623,7 @@ ], "publicationDate": "2023-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "deniznazarova" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -14876,10 +14705,10 @@ "margaretli" ], "publicationDate": "2023-11-21", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -14940,9 +14769,7 @@ ], "publicationDate": "2023-11-20", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15007,9 +14834,7 @@ ], "publicationDate": "2023-11-25", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15076,9 +14901,7 @@ ], "publicationDate": "2023-11-24", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -15152,9 +14975,7 @@ ], "publicationDate": "2023-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15223,9 +15044,7 @@ ], "publicationDate": "2023-12-12", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15306,14 +15125,13 @@ ], "publicationDate": "2024-01-01", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "innalin" + "innalin", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -15396,9 +15214,7 @@ ], "publicationDate": "2024-01-11", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15467,9 +15283,7 @@ ], "publicationDate": "2023-09-10", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15538,9 +15352,7 @@ ], "publicationDate": "2023-09-10", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15609,9 +15421,7 @@ ], "publicationDate": "2023-09-10", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15684,9 +15494,7 @@ ], "publicationDate": "2024-01-17", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -15754,10 +15562,10 @@ "margaretli" ], "publicationDate": "2024-01-19", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -15958,13 +15766,12 @@ ], "publicationDate": "2024-01-29", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4415250179" }, @@ -16184,9 +15991,7 @@ ], "publicationDate": "2024-02-09", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -16261,15 +16066,13 @@ ], "publicationDate": "2024-02-19", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", "innalin", - "jinasuh" + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4402667122" }, @@ -16332,10 +16135,10 @@ "advaitbhat" ], "publicationDate": "2024-03-15", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -16489,14 +16292,13 @@ ], "publicationDate": "2024-03-17", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", + "timalthoff", "xinyizhou" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -16572,10 +16374,10 @@ "margaretli" ], "publicationDate": "2024-03-21", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -16644,9 +16446,7 @@ ], "publicationDate": "2024-03-24", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -16712,9 +16512,7 @@ ], "publicationDate": "2024-03-26", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -16780,9 +16578,7 @@ ], "publicationDate": "2024-04-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -16869,9 +16665,7 @@ ], "publicationDate": "2024-04-15", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -16942,14 +16736,13 @@ ], "publicationDate": "2024-04-17", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "mikemerrill", + "timalthoff", "vinayakgupta" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4404782449" }, @@ -17009,9 +16802,7 @@ ], "publicationDate": "2024-04-29", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -17082,10 +16873,7 @@ ], "publicationDate": "2024-04-17", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh", - "yasamansefidgar" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -17213,9 +17001,7 @@ ], "publicationDate": "2024-04-17", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -17312,14 +17098,12 @@ ], "publicationDate": "2024-05-03", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "jinasuh" + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -17397,13 +17181,12 @@ ], "publicationDate": "2024-05-11", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -17501,13 +17284,12 @@ ], "publicationDate": "2024-05-11", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -17607,14 +17389,13 @@ ], "publicationDate": "2024-05-11", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", - "innalin" + "innalin", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -17694,9 +17475,7 @@ ], "publicationDate": "2024-05-11", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -17782,10 +17561,10 @@ "margaretli" ], "publicationDate": "2022-11-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -17851,10 +17630,10 @@ "margaretli" ], "publicationDate": "2023-11-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -17921,9 +17700,7 @@ ], "publicationDate": "2024-05-24", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -18210,13 +17987,12 @@ ], "publicationDate": "2024-06-10", "memberPersonIds": [ + "mikemerrill", "timalthoff" ], - "uncertainPersonIds": [ - "mikemerrill" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w7122726170" }, @@ -18435,14 +18211,13 @@ ], "publicationDate": "2024-06-22", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "mikemerrill", + "timalthoff", "vinayakgupta" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4415797292" }, @@ -18509,10 +18284,10 @@ "advaitbhat" ], "publicationDate": "2024-07-05", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -18576,10 +18351,10 @@ "margaretli" ], "publicationDate": "2024-07-02", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -18656,9 +18431,7 @@ ], "publicationDate": "2024-11-11", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -18729,11 +18502,9 @@ "memberPersonIds": [ "timalthoff" ], - "uncertainPersonIds": [ - "jinasuh" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "does-not-meet-rule", + "reason": "Fewer than 2 matching authors with possible publication-time lab membership; Tim alone does not qualify." }, "exclusionReview": { "reviewedOn": "2026-09-09", @@ -18813,9 +18584,7 @@ ], "publicationDate": "2024-07-21", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -19315,11 +19084,9 @@ "memberPersonIds": [ "timalthoff" ], - "uncertainPersonIds": [ - "yasamansefidgar" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "does-not-meet-rule", + "reason": "Fewer than 2 matching authors with possible publication-time lab membership; Tim alone does not qualify." }, "reconciliationReview": { "checkedOn": "2026-09-09", @@ -19397,9 +19164,7 @@ ], "publicationDate": "2024-08-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -19461,10 +19226,10 @@ "deniznazarova" ], "publicationDate": "2024-08-30", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "deniznazarova" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -19535,11 +19300,9 @@ "memberPersonIds": [ "timalthoff" ], - "uncertainPersonIds": [ - "jinasuh" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "does-not-meet-rule", + "reason": "Fewer than 2 matching authors with possible publication-time lab membership; Tim alone does not qualify." }, "exclusionReview": { "reviewedOn": "2026-09-09", @@ -19633,15 +19396,13 @@ ], "publicationDate": "2024-01-01", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "ashishsharma", "innalin", - "jinasuh" + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -19723,9 +19484,7 @@ ], "publicationDate": "2024-06-16", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -19799,9 +19558,7 @@ ], "publicationDate": "2024-10-14", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -19870,9 +19627,7 @@ ], "publicationDate": "2024-10-12", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -19939,9 +19694,7 @@ ], "publicationDate": "2024-10-14", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -20096,11 +19849,9 @@ "memberPersonIds": [ "timalthoff" ], - "uncertainPersonIds": [ - "jinasuh" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "does-not-meet-rule", + "reason": "Fewer than 2 matching authors with possible publication-time lab membership; Tim alone does not qualify." }, "exclusionReview": { "reviewedOn": "2026-09-09", @@ -20225,9 +19976,7 @@ ], "publicationDate": "2024-10-24", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -20292,9 +20041,7 @@ ], "publicationDate": "2024-10-27", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -20357,9 +20104,7 @@ ], "publicationDate": "2024-11-03", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -20432,9 +20177,7 @@ ], "publicationDate": "2024-10-18", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -20511,9 +20254,7 @@ ], "publicationDate": "2024-11-19", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -20586,9 +20327,7 @@ ], "publicationDate": "2024-11-22", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -20656,10 +20395,10 @@ "margaretli" ], "publicationDate": "2024-11-26", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -20769,14 +20508,13 @@ ], "publicationDate": "2024-01-01", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "kengu", - "mikemerrill" + "mikemerrill", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -20877,14 +20615,13 @@ ], "publicationDate": "2024-01-01", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "mikemerrill", + "timalthoff", "vinayakgupta" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -21042,9 +20779,7 @@ ], "publicationDate": "2024-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -21115,10 +20850,10 @@ "margaretli" ], "publicationDate": "2024-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -21196,9 +20931,7 @@ ], "publicationDate": "2024-12-10", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -21292,14 +21025,13 @@ ], "publicationDate": "2024-08-19", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "kengu", - "mikemerrill" + "mikemerrill", + "timalthoff" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4404781154" }, @@ -21358,10 +21090,10 @@ "jinasuh" ], "publicationDate": "2026-01-21", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -21443,10 +21175,10 @@ "margaretli" ], "publicationDate": "2024-12-13", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -21511,9 +21243,7 @@ ], "publicationDate": "2024-12-19", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -21579,13 +21309,12 @@ ], "publicationDate": "2025-01-24", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w4411121032" }, @@ -21653,9 +21382,7 @@ ], "publicationDate": "2025-02-02", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -21742,13 +21469,12 @@ ], "publicationDate": "2025-02-11", "memberPersonIds": [ + "advaitbhat", "timalthoff" ], - "uncertainPersonIds": [ - "advaitbhat" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -21825,10 +21551,10 @@ "advaitbhat" ], "publicationDate": "2025-02-21", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -21892,9 +21618,7 @@ ], "publicationDate": "2024-09-15", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -21970,9 +21694,7 @@ ], "publicationDate": "2025-04-25", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -22051,9 +21773,7 @@ ], "publicationDate": "2025-05-02", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -22130,9 +21850,7 @@ ], "publicationDate": "2025-05-06", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -22196,10 +21914,10 @@ "advaitbhat" ], "publicationDate": "2025-05-19", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -22265,9 +21983,7 @@ ], "publicationDate": "2025-05-02", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -22332,13 +22048,12 @@ ], "publicationDate": "2025-06-07", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -22415,9 +22130,7 @@ ], "publicationDate": "2025-06-20", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -22491,9 +22204,7 @@ ], "publicationDate": "2025-06-23", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -22571,9 +22282,7 @@ ], "publicationDate": "2025-06-23", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -22638,9 +22347,7 @@ ], "publicationDate": "2025-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -22793,10 +22500,10 @@ "margaretli" ], "publicationDate": "2025-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23063,9 +22770,7 @@ ], "publicationDate": "2025-08-08", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23126,9 +22831,7 @@ ], "publicationDate": "2025-04-27", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23186,10 +22889,10 @@ "advaitbhat" ], "publicationDate": "2025-08-07", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -23252,10 +22955,10 @@ "jinasuh" ], "publicationDate": "2026-04-30", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23324,9 +23027,7 @@ ], "publicationDate": "2025-09-19", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23399,9 +23100,7 @@ ], "publicationDate": "2025-10-16", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23466,13 +23165,12 @@ ], "publicationDate": "2025-10-16", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -23557,9 +23255,7 @@ ], "publicationDate": "2025-10-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23628,9 +23324,7 @@ ], "publicationDate": "2025-10-17", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23693,9 +23387,7 @@ ], "publicationDate": "2024-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -23761,9 +23453,7 @@ ], "publicationDate": "2024-01-01", "memberPersonIds": [], - "uncertainPersonIds": [ - "chengli" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -23832,14 +23522,13 @@ ], "publicationDate": "2024-01-01", "memberPersonIds": [ - "timalthoff" - ], - "uncertainPersonIds": [ "mikemerrill", + "timalthoff", "vinayakgupta" ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -24062,9 +23751,7 @@ ], "publicationDate": "2025-11-05", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -24191,10 +23878,10 @@ "margaretli" ], "publicationDate": "2025-02-26", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -24314,10 +24001,10 @@ "deniznazarova" ], "publicationDate": "2025-05-28", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "deniznazarova" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -24424,13 +24111,12 @@ ], "publicationDate": "2025-06-05", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -24543,10 +24229,10 @@ "margaretli" ], "publicationDate": "2025-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -24621,9 +24307,7 @@ ], "publicationDate": "2025-03-06", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -24684,9 +24368,7 @@ ], "publicationDate": "2025-03-28", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -24755,10 +24437,10 @@ "chengli" ], "publicationDate": "2025-09-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "chengli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -24977,13 +24659,12 @@ ], "publicationDate": "2026-05-25", "memberPersonIds": [ + "galenweld", "timalthoff" ], - "uncertainPersonIds": [ - "galenweld" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -25139,10 +24820,10 @@ "margaretli" ], "publicationDate": "2025-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -25213,13 +24894,12 @@ ], "publicationDate": "2025-12-02", "memberPersonIds": [ + "innalin", "timalthoff" ], - "uncertainPersonIds": [ - "innalin" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -25305,9 +24985,7 @@ ], "publicationDate": "2025-04-29", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -25403,13 +25081,12 @@ ], "publicationDate": "2025-01-01", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -25599,9 +25276,7 @@ ], "publicationDate": "2025-12-18", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -25671,10 +25346,10 @@ "jinasuh" ], "publicationDate": "2026-07-15", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -25738,10 +25413,10 @@ "advaitbhat" ], "publicationDate": "2025-12-23", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -25806,10 +25481,10 @@ "advaitbhat" ], "publicationDate": "2025-12-24", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -25873,10 +25548,10 @@ "advaitbhat" ], "publicationDate": "2025-12-24", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -25940,10 +25615,10 @@ "advaitbhat" ], "publicationDate": "2025-12-23", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -26017,9 +25692,7 @@ ], "publicationDate": "2025-12-29", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -26093,9 +25766,7 @@ ], "publicationDate": "2025-12-29", "memberPersonIds": [], - "uncertainPersonIds": [ - "jinasuh" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -26156,10 +25827,10 @@ "jinasuh" ], "publicationDate": "2026-01-02", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -26256,11 +25927,9 @@ "memberPersonIds": [ "timalthoff" ], - "uncertainPersonIds": [ - "mikemerrill" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "does-not-meet-rule", + "reason": "Fewer than 2 matching authors with possible publication-time lab membership; Tim alone does not qualify." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -26339,9 +26008,7 @@ ], "publicationDate": "2025-12-14", "memberPersonIds": [], - "uncertainPersonIds": [ - "yigeyuan" - ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -26401,10 +26068,10 @@ "jinasuh" ], "publicationDate": "2026-01-05", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -26500,13 +26167,12 @@ ], "publicationDate": "2026-01-23", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w7170643724" }, @@ -26575,10 +26241,10 @@ "jinasuh" ], "publicationDate": "2026-02-02", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -26651,10 +26317,10 @@ "jinasuh" ], "publicationDate": "2026-02-02", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -26719,10 +26385,10 @@ "yigeyuan" ], "publicationDate": "2026-02-04", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "yigeyuan" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -26790,10 +26456,10 @@ "jinasuh" ], "publicationDate": "2026-02-16", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -26859,10 +26525,10 @@ "margaretli" ], "publicationDate": "2026-03-02", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -26931,10 +26597,10 @@ "margaretli" ], "publicationDate": "2026-03-02", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27015,10 +26681,10 @@ "jinasuh" ], "publicationDate": "2026-03-05", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27101,10 +26767,10 @@ "jinasuh" ], "publicationDate": "2026-03-05", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27165,10 +26831,10 @@ "advaitbhat" ], "publicationDate": "2026-03-11", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27233,10 +26899,10 @@ "advaitbhat" ], "publicationDate": "2026-03-11", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27302,10 +26968,10 @@ "advaitbhat" ], "publicationDate": "2026-03-11", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27424,10 +27090,10 @@ "jinasuh" ], "publicationDate": "2026-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -27491,10 +27157,10 @@ "jinasuh" ], "publicationDate": "2026-04-13", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -27560,10 +27226,10 @@ "jinasuh" ], "publicationDate": "2026-04-09", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27632,10 +27298,10 @@ "jinasuh" ], "publicationDate": "2026-04-09", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27696,10 +27362,10 @@ "advaitbhat" ], "publicationDate": "2026-04-13", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "advaitbhat" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27767,10 +27433,10 @@ "jinasuh" ], "publicationDate": "2026-04-13", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -27837,10 +27503,10 @@ "jinasuh" ], "publicationDate": "2026-04-13", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -28037,13 +27703,12 @@ ], "publicationDate": "2026-05-20", "memberPersonIds": [ + "innalin", "timalthoff" ], - "uncertainPersonIds": [ - "innalin" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -28263,13 +27928,12 @@ ], "publicationDate": "2026-05-20", "memberPersonIds": [ + "innalin", "timalthoff" ], - "uncertainPersonIds": [ - "innalin" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "duplicateOf": "openalex-w7162039229" }, @@ -28545,10 +28209,10 @@ "jinasuh" ], "publicationDate": "2026-01-05", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -28623,10 +28287,10 @@ "jinasuh" ], "publicationDate": "2026-06-23", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -28700,10 +28364,10 @@ "jinasuh" ], "publicationDate": "2026-06-23", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -28772,11 +28436,9 @@ "memberPersonIds": [ "timalthoff" ], - "uncertainPersonIds": [ - "mikemerrill" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "does-not-meet-rule", + "reason": "Fewer than 2 matching authors with possible publication-time lab membership; Tim alone does not qualify." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -28886,13 +28548,12 @@ ], "publicationDate": "2026-07-24", "memberPersonIds": [ + "kengu", "timalthoff" ], - "uncertainPersonIds": [ - "kengu" - ], - "status": "needs-membership-review", - "reason": "Enough lab identities match, but publication-time membership needs confirmation." + "uncertainPersonIds": [], + "status": "meets-rule", + "reason": "At least 2 distinct coauthors were lab members in the publication year." }, "reviewedOn": "2026-09-09", "policyReview": { @@ -28972,10 +28633,10 @@ "yigeyuan" ], "publicationDate": "2026-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "yigeyuan" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -29043,10 +28704,10 @@ "jinasuh" ], "publicationDate": "2026-07-27", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -29121,10 +28782,10 @@ "jinasuh" ], "publicationDate": "2026-07-30", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -29199,10 +28860,10 @@ "jinasuh" ], "publicationDate": "2026-07-30", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -29271,10 +28932,10 @@ "jinasuh" ], "publicationDate": "2026-07-27", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." }, @@ -29348,11 +29009,11 @@ "mickelliu" ], "publicationDate": "2025-01-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "margaretli", "mickelliu" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -29416,10 +29077,10 @@ "jinasuh" ], "publicationDate": "2026-08-05", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -29491,10 +29152,10 @@ "jinasuh" ], "publicationDate": "2026-08-25", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -29566,10 +29227,10 @@ "jinasuh" ], "publicationDate": "2026-08-25", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } @@ -29635,10 +29296,10 @@ "jinasuh" ], "publicationDate": "2026-09-01", - "memberPersonIds": [], - "uncertainPersonIds": [ + "memberPersonIds": [ "jinasuh" ], + "uncertainPersonIds": [], "status": "does-not-meet-rule", "reason": "The required PI author is not on this paper." } diff --git a/scripts/discovery.py b/scripts/discovery.py index c3c282b..ef06c46 100644 --- a/scripts/discovery.py +++ b/scripts/discovery.py @@ -12,7 +12,7 @@ from urllib.error import HTTPError, URLError from urllib.parse import urlencode from urllib.request import Request, urlopen -from publication_policy import assess, validate_policy +from publication_policy import assess, load_people, validate_policy from review_duplicates import group_duplicates from render_recent_review import render as render_recent @@ -270,7 +270,7 @@ def run(root=ROOT, fixture=None, today=None, client=None): print('Discovery is disabled. Configure verified identities before enabling it.') return authors = read(root / 'maintenance/authors.json') - people = read(root / 'content/people.json') + people = load_people(root) validate_authors(authors, people) policy_path = root / 'maintenance/publication-policy.json' policy = read(policy_path) if policy_path.exists() else None diff --git a/scripts/publication_pipeline.py b/scripts/publication_pipeline.py index 82dec69..1a83848 100644 --- a/scripts/publication_pipeline.py +++ b/scripts/publication_pipeline.py @@ -6,7 +6,7 @@ import subprocess from discovery import ROOT, read, report, run as collect, save -from publication_policy import assess, validate_policy +from publication_policy import assess, load_people, validate_policy from review import decide from review_duplicates import group_duplicates from render_recent_review import render as render_recent @@ -80,7 +80,7 @@ def print_summary(root=ROOT, as_json=False): def reassess(root=ROOT): """Apply the current policy to saved observations without contacting a provider.""" queue = read(root / 'maintenance/review.json') - people = read(root / 'content/people.json') + people = load_people(root) policy = read(root / 'maintenance/publication-policy.json') validate_policy(policy, people) outdated_accepted = [c['id'] for c in queue['candidates'] diff --git a/scripts/publication_policy.py b/scripts/publication_policy.py index 9fb6977..88d35d6 100644 --- a/scripts/publication_policy.py +++ b/scripts/publication_policy.py @@ -1,8 +1,74 @@ """Explain and enforce lab relevance using verified identities, never name guesses.""" from datetime import date +import json import re +def load_people(root): + """Use the reviewed year evidence without copying it into public profile data.""" + people = json.loads((root / 'content/people.json').read_text()) + path = root / 'maintenance/membership-evidence.json' + if not path.exists(): + return people + evidence = json.loads(path.read_text()) + if evidence.get('datePrecision') != 'year': + raise ValueError('Membership evidence must use year precision') + by_id = {p['id']: p for p in people} + seen = set() + for record in evidence['records']: + pid = record.get('personId') + if pid is None: + continue # Alumni-only evidence does not create a public identity. + if pid not in by_id or pid in seen: + raise ValueError('Unknown or duplicate membership identity: ' + pid) + seen.add(pid) + periods = record.get('periods', []) + for period in periods: + for field in ('start', 'end'): + value = period.get(field) + if value is not None and (not isinstance(value, str) + or not re.fullmatch(r'[1-9]\d{3}', value)): + raise ValueError('Membership boundaries must be YYYY or null: ' + pid) + start, end = period.get('start'), period.get('end') + state = period.get('endStatus') + if (state not in ('known', 'ongoing', 'unknown') + or (state == 'known') != (end is not None) + or (start and end and start > end)): + raise ValueError('Invalid membership interval: ' + pid) + if not period.get('sourceIds') or not set(period['sourceIds']) <= evidence['sources'].keys(): + raise ValueError('Membership interval needs recorded evidence: ' + pid) + # Omitted or disputed source claims must not be promoted to selected dates. + by_id[pid]['memberships'] = (periods if record.get('status') in + ('confirmed', 'reconstructed', 'partial') else []) + return people + + +def publication_year(value): + if isinstance(value, int) and not isinstance(value, bool) and 1000 <= value <= 9999: + return value + if isinstance(value, str) and re.fullmatch(r'[1-9]\d{3}', value): + return int(value) + try: + return date.fromisoformat(value).year + except (TypeError, ValueError): + return None + + +def membership_in_year(period, year): + """Return True, False or None (unresolved); a missing end is not proof of continuity.""" + start, end = publication_year(period.get('start')), publication_year(period.get('end')) + if (start is not None and year < start) or (end is not None and year > end): + return False + if start is None: + return None + if end is not None or period.get('endStatus') == 'ongoing': + return True + # Retain support for the original exact-date schema's open intervals. + if 'endStatus' not in period and len(str(period.get('start', ''))) == 10: + return True + return None + + def validate_policy(policy, people): if (type(policy.get('version')) is not int or policy['version'] < 1 @@ -18,13 +84,12 @@ def validate_policy(policy, people): def assess(work, matched, people, policy): matched = sorted(set(matched)) + published_value = work.get('publication_date') or work.get('publication_year') result = {'policyVersion': policy['version'], 'matchedPersonIds': matched, - 'publicationDate': work.get('publication_date'), 'memberPersonIds': [], + 'publicationDate': str(published_value) if published_value is not None else None, + 'memberPersonIds': [], 'uncertainPersonIds': []} - try: - published = date.fromisoformat(work.get('publication_date') or '') - except ValueError: - published = None + published = publication_year(published_value) by_id = {p['id']: p for p in people} for pid in matched: if pid == policy['piPersonId']: @@ -33,17 +98,19 @@ def assess(work, matched, people, policy): periods = by_id.get(pid, {}).get('memberships') if not periods or published is None: result['uncertainPersonIds'].append(pid) - elif any(date.fromisoformat(m['start']) <= published - and (not m.get('end') or published <= date.fromisoformat(m['end'])) - for m in periods): - result['memberPersonIds'].append(pid) + else: + states = [membership_in_year(m, published) for m in periods] + if True in states: + result['memberPersonIds'].append(pid) + elif None in states: + result['uncertainPersonIds'].append(pid) confirmed = len(result['memberPersonIds']) possible = confirmed + len(result['uncertainPersonIds']) minimum = policy['minimumLabAuthors'] if policy['requirePiAuthor'] and policy['piPersonId'] not in matched: status, reason = 'does-not-meet-rule', 'The required PI author is not on this paper.' elif confirmed >= minimum: - status, reason = 'meets-rule', f'At least {minimum} distinct coauthors were lab members on the publication date.' + status, reason = 'meets-rule', f'At least {minimum} distinct coauthors were lab members in the publication year.' elif possible >= minimum: status, reason = 'needs-membership-review', 'Enough lab identities match, but publication-time membership needs confirmation.' else: @@ -90,3 +157,20 @@ def acceptance_review(candidate, person_ids, policy, override_reason=None, evide if override_reason: review['overrideReason'] = override_reason.strip() return review + + +def validate_recorded_review(candidate, policy): + """A historical human decision keeps its original assessment when evidence improves.""" + recorded = candidate.get('policyReview') or {} + status = recorded.get('labRelevanceStatus') + if status not in ('meets-rule', 'needs-membership-review', 'does-not-meet-rule'): + raise ValueError('Accepted candidate has an invalid historical assessment') + reviewed_candidate = {**candidate, 'labRelevance': { + 'policyVersion': recorded.get('policyVersion'), 'status': status}} + expected = acceptance_review(reviewed_candidate, recorded.get('personIds'), policy, + recorded.get('overrideReason'), recorded.get('evidenceUrls')) + if any(recorded.get(field) != value for field, value in expected.items()): + raise ValueError('Accepted candidate has an invalid policy review') + if recorded.get('reviewedOn') != candidate.get('reviewedOn'): + raise ValueError('Accepted candidate policy review date does not match its decision') + date.fromisoformat(recorded['reviewedOn']) diff --git a/scripts/review.py b/scripts/review.py index 084a2af..210d404 100644 --- a/scripts/review.py +++ b/scripts/review.py @@ -7,7 +7,7 @@ from discovery import ROOT, MANAGED_FIELDS, read, save, doi, fingerprint, report from review_duplicates import group_duplicates from render_recent_review import render as render_recent -from publication_policy import acceptance_review, validate_assessment, validate_policy +from publication_policy import acceptance_review, load_people, validate_assessment, validate_policy def decide(root, cid, decision, person_ids=None, target_id=None, until=None, @@ -39,7 +39,7 @@ def decide(root, cid, decision, person_ids=None, target_id=None, until=None, 'observed': candidate['observed'], 'personIds': candidate['matchedPersonIds']}) if candidate['fingerprint'] != expected_fingerprint: raise ValueError('Candidate source or identity matches were edited; collect again before accepting') - people = read(root / 'content/people.json') + people = load_people(root) known = {p['id'] for p in people} if not person_ids or len(person_ids) != len(set(person_ids)) or not set(person_ids) <= known: raise ValueError('Acceptance requires explicitly reviewed --person IDs') diff --git a/scripts/validate-maintenance.py b/scripts/validate-maintenance.py index de4e988..f459800 100644 --- a/scripts/validate-maintenance.py +++ b/scripts/validate-maintenance.py @@ -2,7 +2,8 @@ from datetime import date import re from discovery import ROOT, MANAGED_FIELDS, fingerprint, read, validate_authors, work_id -from publication_policy import acceptance_review, validate_assessment, validate_policy +from publication_policy import (acceptance_review, load_people, validate_assessment, + validate_policy, validate_recorded_review) def validate(root=ROOT): @@ -12,7 +13,7 @@ def validate(root=ROOT): for field, maximum in [('maxRequests',1000),('lookbackDays',365),('reconcileDays',365),('maxRunAgeDays',365),('maxReviewAgeDays',365)]: if type(config[field]) is not int or not 1 <= config[field] <= maximum: raise ValueError('Invalid maintenance setting: ' + field) - people = read(root / 'content/people.json') + people = load_people(root) policy_path = root / 'maintenance/publication-policy.json' if not policy_path.exists(): raise ValueError('Missing maintenance/publication-policy.json') @@ -55,14 +56,7 @@ def validate(root=ROOT): if not set(c['changes']) <= set(MANAGED_FIELDS) or not set(c['conflicts']) <= set(MANAGED_FIELDS): raise ValueError('Unsupported proposed fields') if c['status'] == 'accepted': - recorded = c.get('policyReview') or {} - expected = acceptance_review(c, recorded.get('personIds'), policy, - recorded.get('overrideReason'), recorded.get('evidenceUrls')) - if any(recorded.get(field) != value for field, value in expected.items()): - raise ValueError('Accepted candidate has an invalid policy review') - if recorded.get('reviewedOn') != c.get('reviewedOn'): - raise ValueError('Accepted candidate policy review date does not match its decision') - date.fromisoformat(recorded['reviewedOn']) + validate_recorded_review(c, policy) by_id = {c['id']: c for c in queue['candidates']} for c in queue['candidates']: if c.get('duplicateOf'): diff --git a/tests/content-model.test.mjs b/tests/content-model.test.mjs index d317b2a..11c85a6 100644 --- a/tests/content-model.test.mjs +++ b/tests/content-model.test.mjs @@ -135,10 +135,10 @@ test('paper highlights use award dates, deduplicate papers and ignore individual 'Updated award title', ); }); -test('explicit person links override name matching, including an empty list', () => { +test('profile attribution requires explicit person links even when a name matches', () => { const person = { id: 'p1', name: 'Ada Example' }; const paper = { authors: 'Ada Example' }; - assert.equal(paperBelongsTo(paper, person), true); + assert.equal(paperBelongsTo(paper, person), false); assert.equal(paperBelongsTo({ ...paper, personIds: [] }, person), false); assert.equal(filterPapers([{ ...paper, personIds: [] }], { person }).length, 0); assert.equal(paperBelongsTo({ authors: 'Different Name', personIds: ['p1'] }, person), true); @@ -233,14 +233,27 @@ test('article, conference and preprint types produce correct citation entries wi ); }); -test('name aliases preserve legacy attribution without overriding explicit person links', () => { +test('renamed people retain explicit attribution without guessing from aliases', () => { const person = { id: 'deniznazarova', name: 'Deniz Nazar', aliases: ['Deniz Nazarova'] }; - const paper = { title: 'Test', authors: 'Deniz Nazarova', year: 2024 }; + const paper = { + title: 'Test', + authors: 'Deniz Nazarova', + year: 2024, + personIds: ['deniznazarova'], + }; assert.equal(paperBelongsTo(paper, person), true); assert.equal(filterPapers([paper], { person }).length, 1); assert.equal(paperBelongsTo({ ...paper, personIds: [] }, person), false); }); +test('publications cannot silently fall back to name-based profile attribution', () => { + const data = fixture(); + delete data.publications[0].personIds; + assert.match(validateContent(data).join(), /explicit personIds/); + data.publications[0].personIds = []; + assert.deepEqual(validateContent(data), []); +}); + test('people highlights exclude paper and team awards and select the latest honors', () => { const awards = [ { id: 'old', date: '2024', title: 'Older honor', personIds: ['p'] }, diff --git a/tests/test_publication_policy.py b/tests/test_publication_policy.py index 0c6a73b..01b2a3e 100644 --- a/tests/test_publication_policy.py +++ b/tests/test_publication_policy.py @@ -1,9 +1,13 @@ import sys +import copy +import json from pathlib import Path +import tempfile import unittest sys.path.insert(0, str(Path(__file__).resolve().parents[1] / 'scripts')) -from publication_policy import acceptance_review, assess, validate_assessment +from publication_policy import (acceptance_review, assess, load_people, + validate_assessment, validate_recorded_review) POLICY = {'version': 2, 'piPersonId': 'tim', 'requirePiAuthor': True, 'minimumLabAuthors': 2, 'preprintPolicy': 'include-labeled'} @@ -17,6 +21,73 @@ class PolicyTests(unittest.TestCase): + def test_inclusive_year_boundaries_and_returning_membership_gap(self): + people = [{'id': 'returning', 'memberships': [ + {'start': '2019', 'end': '2022', 'endStatus': 'known'}, + {'start': '2026', 'end': None, 'endStatus': 'ongoing'}]}] + for published, expected in [('2018-12-31', 'does-not-meet-rule'), + ('2019-01-01', 'meets-rule'), + ('2022-12-31', 'meets-rule'), + ('2023', 'does-not-meet-rule'), + ('2025-12-31', 'does-not-meet-rule'), + ('2026', 'meets-rule')]: + with self.subTest(published=published): + self.assertEqual(assess({'publication_date': published}, + ['tim', 'returning'], people, POLICY)['status'], expected) + self.assertEqual(assess({'publication_year': 2026}, ['tim', 'returning'], + people, POLICY)['status'], 'meets-rule') + + def test_unknown_end_does_not_mean_ongoing_and_missing_year_requires_review(self): + people = [{'id': 'past', 'status': 'member', 'memberships': [ + {'start': '2019', 'end': None, 'endStatus': 'unknown'}]}] + self.assertEqual(assess(WORK, ['tim', 'past'], people, POLICY)['status'], + 'needs-membership-review') + self.assertEqual(assess({'publication_date': '2018'}, ['tim', 'past'], people, + POLICY)['status'], 'does-not-meet-rule') + self.assertEqual(assess({'publication_date': '2025-02-30'}, ['tim', 'past'], people, + POLICY)['status'], 'needs-membership-review') + + def test_reviewed_evidence_overrides_unselected_historical_claims(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + (root / 'content').mkdir() + (root / 'maintenance').mkdir() + (root / 'content/people.json').write_text(json.dumps([ + {'id': 'known'}, {'id': 'omitted', 'memberships': [{'start': '2019-01-01'}]}])) + evidence = {'datePrecision': 'year', 'sources': {'cv': {'url': 'https://example.org/cv'}}, + 'records': [ + {'personId': 'known', 'status': 'confirmed', 'periods': [ + {'start': '2019', 'end': '2022', 'endStatus': 'known', + 'sourceIds': ['cv']}]}, + {'personId': 'omitted', 'status': 'omitted', 'periods': [], + 'historicalSourceClaims': [{'reportedPeriod': '2019–2022'}]}]} + path = root / 'maintenance/membership-evidence.json' + path.write_text(json.dumps(evidence)) + people = load_people(root) + self.assertEqual(people[0]['memberships'][0]['start'], '2019') + self.assertEqual(people[1]['memberships'], []) + self.assertEqual(assess(WORK, ['tim', 'omitted'], people, POLICY)['status'], + 'needs-membership-review') + evidence['records'][0]['periods'][0]['sourceIds'] = ['unknown-source'] + path.write_text(json.dumps(evidence)) + with self.assertRaisesRegex(ValueError, 'recorded evidence'): + load_people(root) + + def test_reassessment_preserves_a_valid_historical_human_decision(self): + candidate = {'matchedPersonIds': ['one', 'tim'], 'identityReviewPersonIds': [], + 'labRelevance': {'policyVersion': 2, 'status': 'needs-membership-review'}, + 'reviewedOn': '2026-09-09'} + candidate['policyReview'] = {**acceptance_review( + candidate, ['one', 'tim'], POLICY, 'Membership confirmed by maintainer', + ['https://example.org/evidence']), 'reviewedOn': candidate['reviewedOn']} + before = copy.deepcopy(candidate['policyReview']) + candidate['labRelevance']['status'] = 'meets-rule' + validate_recorded_review(candidate, POLICY) + self.assertEqual(candidate['policyReview'], before) + candidate['policyReview']['personIds'] = ['one'] + with self.assertRaises(ValueError): + validate_recorded_review(candidate, POLICY) + def status(self, ids, work=WORK): return assess(work, ids, PEOPLE, POLICY)['status'] From 695233cc4e3eaa203ed7d9bacb8ed87ced607a4f Mon Sep 17 00:00:00 2001 From: Advait Bhat Date: Thu, 10 Sep 2026 16:53:58 -0700 Subject: [PATCH 2/5] Complete content decisions and browser accessibility checks --- _planning/FINAL_QA.md | 36 ++++++++++++++++++++++++++++++++++++ app/globals.css | 1 + app/layout.jsx | 6 ++++-- app/page.jsx | 2 +- app/sitemap.js | 6 ++++-- docs/CONTENT_MODEL.md | 4 +++- scripts/check-export.py | 12 ++++++++++++ scripts/export-aliases.mjs | 10 +++++++++- scripts/test-skeleton.py | 7 +++++++ 9 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 _planning/FINAL_QA.md diff --git a/_planning/FINAL_QA.md b/_planning/FINAL_QA.md new file mode 100644 index 0000000..58fdbc4 --- /dev/null +++ b/_planning/FINAL_QA.md @@ -0,0 +1,36 @@ +# Final browser and content QA + +September 10, 2026. Checked the static export served at `http://127.0.0.1:3100/`, using Chrome and Playwright. This covers the September 10 completion branch; it is not a claim that these final fixes have already deployed. + +## Results + +- Nine representative routes at five viewport sizes: home, team, publication archive, news, awards, Join us, IdioFid, Tim’s profile, and a publication detail page. Viewports: 1280×900, 390×844, 320×800, 640×450, and 1280×600. +- All 45 route/viewport combinations had zero axe-core WCAG 2 A/AA, 2.1 A/AA, or 2.2 AA violations, no horizontal page overflow, and no browser page errors. Automated checks do not establish complete accessibility conformance. +- The custom overflow check found a clipped sidebar footer at 1280×600. The sidebar now scrolls vertically when needed. All nine routes passed the short-window recheck, and keyboard focus brings the footer link into view. +- The skip link needed an explicitly focusable destination. `main` now has `tabIndex=-1`; activating “Skip to content” with Enter moves focus to `main` without adding a normal tab stop. The export checker guards this requirement. +- At phone width, keyboard activation opens and closes Filters, the expanded state updates, hidden filters are unavailable, combined 2026/Tim filters give the expected count, an unmatched query gives the empty state, and keyboard Clear filters restores all 66 papers. +- All 22 profile publication counts match the reviewed explicit `personIds`. Unit checks cover the underlying relationship and rejection of implicit name-only attribution. +- Browser navigation verifies the empty-page redirects: Research → Publications, Pictures → Team, About website and its `.html` legacy URL → Home. Canonical URLs and visible fallback links remain in the exported aliases. +- The future-content fixture build confirms that populated Research and Pictures pages retain their records and sitemap entries instead of redirecting. Closed recruitment records use the neutral empty state. +- The static export checker verifies all 106 HTML pages, internal assets/downloads, legacy URLs, anchors, heading order, signup action, and exclusion of review/configuration files. Existing production route and metadata checks are recorded in the launch runbook. + +## Manual follow-up to automated checks + +Axe could not evaluate text over the animated SVG, some headshot-adjacent names, and decorative middle-dot separators. Inspected desktop, narrow-phone, and tablet screenshots and checked the specified text/background colors. Ordinary dark text and purple links have contrast ratios of 15.90:1 and 10.41:1 against white; muted text is 5.59:1. The hero’s 85% white overlay gives a conservative lower bound of 11.26:1 for its dark copy and 7.37:1 for its purple link even over black artwork, before the additional text shadow/fade. The low-contrast middle dot is decorative; adjacent year and venue text conveys the information. + +The 640px and 320px reflow checks correspond to the available layout widths at 200% and 400% zoom from a 1280px viewport. Native browser zoom, other browser engines, screen-reader operation, and physical touch devices were not tested in this pass. Reduced-motion mode was used; the unchanged animation pause and movement behavior has separate coverage in the visual review. + +## Approved content decisions + +- Use **Past and present support** for Adobe, AI2, the Gates Foundation, Microsoft Research, NIH, NSF, and ONR (maintainer reply, September 10). +- Keep the smaller aligned sidebar and the approved **Allen School** wording. +- Keep the reviewed recruitment guidance and its existing Tim-owned review dates; no new opening was invented during QA. +- Keep empty sections out of navigation and the sitemap while preserving useful legacy destinations and the Allan Lab template credit in README. + +## Deferred integration + +The maintainer explicitly said to leave the IdioFid signup test. No live submission was sent, no address was stored, and endpoint ownership/delivery remain unverified. Preservation of the form action only confirms the exported form configuration. + +## Repeating the checks + +Run `npm run check` and `npm run test:skeleton`, serve `out/`, then repeat the viewport matrix above with an accessibility scanner. In a 600px-tall desktop window, tab to the sidebar footer and ensure it is visible. At phone width, exercise Filters and Clear filters using the keyboard. Start a new page load with Tab then Enter and verify that the skip link moves focus into the main content. Browser screenshots and machine-readable audit output from this pass are local QA artifacts, not shipped website assets. diff --git a/app/globals.css b/app/globals.css index 760ba0f..b1fe409 100644 --- a/app/globals.css +++ b/app/globals.css @@ -114,6 +114,7 @@ h3 { border-right: var(--divider-width) solid var(--divider-color); display: flex; flex-direction: column; + overflow-y: auto; background: white; z-index: 5; } diff --git a/app/layout.jsx b/app/layout.jsx index 3b651fc..2f5011a 100644 --- a/app/layout.jsx +++ b/app/layout.jsx @@ -50,13 +50,15 @@ export default function RootLayout({ children }) {

University of Washington
- Paul G. Allen School + Allen School

Seattle, WA
-
{children}
+
+ {children} +