Skip to content

[scheduled:data-sync] Mechanical data sync 2026-10-03 - #17

Closed
nguyenthanhvuh wants to merge 1 commit into
mainfrom
task/data-sync-2026-10-03
Closed

nguyenthanhvuh wants to merge 1 commit into
mainfrom
task/data-sync-2026-10-03

Conversation

@nguyenthanhvuh

Copy link
Copy Markdown
Member

Mechanical sync per docs/AUTOMATION.md's data-sync section. No web research performed; only the three authorized scripts were run.

Commands run

  1. npm run sync:nsf:names
  2. npm run sync:csrankings-rules
  3. npm run check:size

Diff stats

public/nsf-awards.json / public/nsf-name-crosswalk.csv (sync:nsf:names)

  • Award count unchanged: 20798 → 20798.

  • Crosswalk rows: 245 → 230 differing names.

  • 1 new resolution added: Mark A. Hasegawa-Johnson → Mark Hasegawa-Johnson (Univ. of Illinois at Urbana-Champaign).

  • 9 previously-resolved names no longer match the current CSRankings roster (exact or first/last-name identity) and now have rosterName: null in nsf-awards.json (54 investigator records across their awards):

    • Chee K. Yap (New York University)
    • Chen-Ching Liu (Washington State University)
    • Danaë Metaxa (University of Pennsylvania)
    • Fei-Fei Li 0001 (Stanford University)
    • Héctor Muñoz-Avila (Lehigh University)
    • Jana Kosecká (George Mason University)
    • Basak Güler (Univ. of California - Riverside)
    • Chung-Hwan Kim (University of Texas at Dallas)
    • David Saldaña (Lehigh University)

    This script uses stricter exact/identity-key matching than whatever produced the prior crosswalk (comment previously credited sync-nsf-awards.mjs); several of these are accent/diacritic variants (Héctor/Hector, Danaë/Danaé) that the stricter matcher doesn't fold. Flagging for the auditor rather than guessing a fix, per the "unknown beats wrong" rule — this routine does no web research and can't confirm whether these are still active CSRankings roster members under a different exact string.

  • coverage unchanged (10579/10579 faculty, 198/198 institutions, 0 failures).

src/csrankings-rules.generated.js (sync:csrankings-rules)

  • sourceVersion (upstream content hash) unchanged — upstream csrankings.py taxonomy has not changed since the last sync.
  • Only syncedAt timestamp moved: 2026-09-23T05:21:03.904Z → 2026-10-03T00:40:49.297Z.

check:size: passed, no files changed.

No near-total rewrite or entry-count drop in either generated file, so this is a normal PR rather than an Issue.

Validation

  • npm test — 84/84 passed
  • npm run typecheck — clean
  • npm run build — succeeded (676 university + 27 area SEO pages generated; one pre-existing, unrelated warning about dblp-aliases.csv failing to parse as optional SEO metadata, not caused by this change)
  • git diff --check — clean

Summary

  • Items processed: sync:nsf:names, sync:csrankings-rules, check:size (all three authorized commands; sync:nsf:all and the OpenAlex rebuild were not run, per the non-negotiable constraint).
  • Changes made: see diff stats above.
  • Side findings: none filed (nothing outside this task's scope was noticed).
  • Items skipped: none — no existing open [scheduled:data-sync] PR/Issue to defer to.
  • Blocked sources: none.

🤖 Generated with Claude Code

https://claude.ai/code/session_01RUjwmcs26QcoxY9k4yaf9z


Generated by Claude Code

Ran the three authorized mechanical sync scripts per docs/AUTOMATION.md's
data-sync section:

- sync:nsf:names: re-resolved NSF investigator names against the current
  CSRankings roster. 230 differing names recorded in
  public/nsf-name-crosswalk.csv (down from 245); award count unchanged at
  20798. 9 previously-resolved names now fail to match the roster exactly
  or by first/last-name identity (Chee-Keng Yap, Chen-Ching Liu, Danaë
  Metaxa, Fei-Fei Li, Héctor Muñoz-Avila, Jana Kosecká, Basak Güler,
  Chung-Hwan Kim, David Saldaña) and their rosterName is now null in
  nsf-awards.json; 1 new resolution added (Mark A. Hasegawa-Johnson).
- sync:csrankings-rules: re-fetched upstream csrankings.py; content hash
  (sourceVersion) unchanged, only the syncedAt timestamp moved.
- check:size: passed, no files changed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RUjwmcs26QcoxY9k4yaf9z
nguyenthanhvuh pushed a commit that referenced this pull request Oct 3, 2026
sync-nsf-roster-names.mjs used a stricter nameWords than sync-nsf-awards.mjs,
so the monthly data-sync unlinked 15 faculty (54 awards) that the full sync
had resolved, e.g. Jana Kosecká -> Jana Kosecka, Chen-Ching Liu -> Chen Liu
0027 (PR #17). With the same folding it reproduces main's attributions
exactly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rb8aKy6S5J1kBTk8L2gpRp

Copy link
Copy Markdown
Member Author

Auditor ([scheduled:audit], 2026-10-03): closing without merging. The NSF part of this PR is a regression, and it comes from a script bug, not from an upstream change.

What's wrong. public/nsf-awards.json sets rosterName to null for 15 faculty across 54 awards, and public/nsf-name-crosswalk.csv drops 14 rows. For example: Jana Kosecká → Jana Kosecka, Maya Çakmak → Maya Cakmak, Héctor Muñoz-Avila, Martín Farach-Colton, Seda Ogrenci-Memik, Chee K. Yap → Chee-Keng Yap, Chen-Ching Liu → Chen Liu 0027, and Fei-Fei Li 0001 → Fei Li 0001. Because the site matches on rosterName, these awards would no longer link to those professors.

Checked against the source. I downloaded today's CSRankings generated-author-info.csv (https://raw.githubusercontent.com/emeryberger/CSrankings/gh-pages/generated-author-info.csv). It still uses the unaccented, unhyphenated spellings: Jana Kosecka, Maya Cakmak, Chen Liu 0027, Fei Li 0001, Seda Ogrenci Memik, Martin Farach-Colton. So the publication names didn't change upstream. The cause is that scripts/sync-nsf-roster-names.mjs used a stricter nameWords than sync-nsf-awards.mjs: it didn't fold accents or split on hyphens, so it failed to resolve names the full sync had resolved. The PR's one gain (Mark A. Hasegawa-Johnson) comes from the same inconsistency.

Fix. Commit 098c58a on main gives the roster-name script the same folding as the full sync. Run against current main with today's upstream CSV, it reproduces main's award attributions exactly: no award changes, only the timestamp header.

Nothing else is lost. The only change in src/csrankings-rules.generated.js is the syncedAt timestamp (the sourceVersion ETag is the same), so there's no taxonomy change to carry over. The next data-sync run will regenerate this correctly.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants