Generate the clusters data from the Google Doc, with no hand edits

Merged
LU
9d ago
+407-331

data/clusters_v4.json now comes straight from the Clusters v4.1 Google Doc, with no hand edits. Before this change, re-running the parser would have emptied Cluster 11, added false sub-clusters and undone earlier hand fixes.

Parser fixes

  • Handles four formatting quirks in the doc, in Clusters 2, 7, 10 and 11.
  • Keeps references separate when two sub-clusters share a name. Both "Reflexivity and positionality" sections were showing one combined list.
  • Tidies citations returned by doi.org: stray whitespace, "Portico" given as the publisher, surnames in capitals, and a conference title cut off at a line break.

Corrections made in the Google Doc

  • The Cluster 2 count, now 7.
  • All nine reference fixes from #838, which existed only in the JSON.
  • The doubled DOI prefix on Hong & Reed.

What visitors will notice

  • The stated sub-cluster count now matches the list on every cluster page, which replaces #980.
  • Cluster 10's description no longer starts with the editor's note.
  • Clusters 3 and 10 drop from 133 to 115 and from 194 to 180 references, because each now lists only its own. Total entries go from 1,330 to 1,300.
  • Three new references from the doc appear: Wuttke 2018, Krähmer 2026 and Kwon 2026.
  • Hicks et al. loses its "Ten principles…" note, because entries with a working DOI use the looked-up citation.

Keeping it this way: CONTRIBUTING.md and the parser's docstring now say not to edit the generated files by hand. A new workflow runs the parser tests and the count test (moved from #980) on PRs that touch this data. It can't detect a hand edit that passes those tests, so that part is a rule, not a check.

Verified: the output comes from running the parser against the live doc, using the local DOI cache. All 11 stated counts match, where a cluster states one. The cluster tests pass, a local build (Hugo 0.164) succeeds, and check_seo_html.py exits cleanly.

Timing: data/clusters_v4.json is in the data artifact, so the new text reaches forrt.org after the next data-processing run on main.

Fixes #978
Fixes #964

🤖 Generated with Claude Code