From 12e5b9f7a27de90db3b052f71255a9e10641a9d5 Mon Sep 17 00:00:00 2001 From: Christian Diddens Date: Tue, 4 Aug 2026 14:38:58 +0200 Subject: [PATCH 1/2] Document how to publish and how to screen new publications Adds two sections to CLAUDE.md: - Publishing: which remote is the live site (upstream = pyoomph, origin = the fork), the branch -> push -> gh pr create -> merge flow, and why a PR from a fork always shows a failing check (deploy.yml also runs on pull_request, but GITHUB_TOKEN is read-only for fork PRs, so only the push to gh-pages 403s - nothing is published and it clears on merge). - Finding new publications for pubs.bib: the About page lists publications that *use* pyoomph, not everything that cites it. Records the three open citation indexes to query for works citing the main JCP paper, the dedupe traps, and the screening step. Papers that cite the JCP paper without using pyoomph are collected in the new pubs_excluded.md, so they do not have to be screened again. It starts with the four found on 2026-08-04. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_019XJeo2Rp5sDjApHWf77wza --- CLAUDE.md | 40 +++++++++++++++++++++++++++++++++++++++- pubs_excluded.md | 18 ++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 pubs_excluded.md diff --git a/CLAUDE.md b/CLAUDE.md index 97f987f..fc218f3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,7 +15,22 @@ bash gen_page.sh `gen_page.sh` writes into `_generated/` and is the only build step. There are no tests, no linter, and no local dev server — open `_generated/index.html` in a browser to check output (relative paths to `css/` and `media/` resolve correctly from there). -Deployment is automatic: `.github/workflows/deploy.yml` runs the same commands on every push/PR to `main` and publishes `_generated/` to GitHub Pages via `JamesIves/github-pages-deploy-action`. +Deployment is automatic once a change reaches `main` — see [Publishing](#publishing) below. + +## Publishing + +The live site is served from **`pyoomph/pyoomph.github.io`**, which is the `upstream` remote. `origin` is the fork `cdiddens/pyoomph.github.io`. Check with `git remote -v` before pushing anywhere — a push to `upstream/main` publishes immediately, with no review step. + +The established flow (how PRs #19–#21 landed): + +1. Commit the change — on a feature branch, or on the fork's `main`; both have been used. +2. `git push -u origin ` +3. `gh pr create --repo pyoomph/pyoomph.github.io --base main --head cdiddens:` +4. Merge the PR. **Merging is what publishes the site**, so it is the user's call, not something to do unprompted. + +The merge pushes to `upstream/main`, which triggers `.github/workflows/deploy.yml`: it installs the dependencies, runs `gen_page.sh` and force-pushes `_generated/` to the `gh-pages` branch via `JamesIves/github-pages-deploy-action`. That run takes ~20 s and is followed by GitHub's own "pages build and deployment" run. Check both with `gh run list --repo pyoomph/pyoomph.github.io`. + +**A PR from a fork always shows a failing check — this is expected and not a defect in the change.** `deploy.yml` triggers on `pull_request` to `main` as well as on push, but for fork PRs GitHub scopes `GITHUB_TOKEN` to read-only regardless of the `permissions: contents: write` declaration. The build succeeds and only the final push to `gh-pages` fails with a 403, so nothing is published. The check goes green on merge, because a push to `main` runs with a writable token. Gating the deploy step with `if: github.event_name != 'pull_request'` would suppress the red X. ## How pages are assembled @@ -46,6 +61,29 @@ Renders `pubs.bib` into the numbered publication list on the About page. - Journal names are shortened via the `abbrevs` dict (lowercase key → abbreviation); add an entry there rather than editing the `.bib`. A `journal` starting with `arXiv` renders as *submitted*. - PDF link: `eprint` (labelled "arXiv preprint" if the URL contains arxiv.org, else "Open Access"), otherwise a local `pdf/.pdf` if present. +## Finding new publications for `pubs.bib` + +The About page lists publications that **use** pyoomph, which is a smaller set than the publications that *cite* it. New entries are found by looking at what cites the main paper (Diddens & Rocha, J. Comput. Phys. **518**, 113306, 2024, `10.1016/j.jcp.2024.113306`) and then screening each candidate. + +1. **Collect citing works.** Three DOI-based indexes, all open and without authentication — query all three, they disagree: + + ```bash + # OpenAlex (W4401074401 is the JCP paper) + curl -sS "https://api.openalex.org/works?filter=cites:W4401074401&per-page=200" + # Semantic Scholar + curl -sS "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1016/j.jcp.2024.113306/citations?fields=title,year,externalIds,venue,authors&limit=100" + # OpenCitations (-L is required, the endpoint redirects) + curl -sSL "https://opencitations.net/index/coci/api/v1/citations/10.1016/j.jcp.2024.113306" + ``` + + Merge and dedupe on DOI. The same work routinely appears twice — as preprint (arXiv, SSRN) and as published version — and OpenAlex sometimes holds two records for one DOI. Because all three indexes are DOI-based, theses and non-DOI preprints are invisible to them; Google Scholar reports a somewhat higher count for that reason. + +2. **Subtract** what is already in `pubs.bib` and what is already listed in **`pubs_excluded.md`** — both match on DOI, `grep -i` is enough. + +3. **Screen the remainder**: the paper must actually *use* pyoomph, not merely cite it. Papers citing the JCP paper for bifurcation tracking, Marangoni modelling or multiphysics coupling in general are common and usually do not use the framework. + +4. **Add** what passes to the top of `pubs.bib` (order is literal, see `gen_pubs.py` above), and **append what fails** to `pubs_excluded.md` with the date, so it is not screened again. + ## Files under `_generated/` that are committed `css/`, `media/` (minus `media/tutorial/`), `docs.html` and `pdf.html` (meta-refresh redirects to readthedocs), `google3a5a7a86d2ed869e.html` (Search Console verification) and `sitemap.xml` are hand-maintained and tracked in git. The build only *adds* the three page files plus `media/tutorial/` on top of them — never clean the directory. diff --git a/pubs_excluded.md b/pubs_excluded.md new file mode 100644 index 0000000..5e568fe --- /dev/null +++ b/pubs_excluded.md @@ -0,0 +1,18 @@ +# Screened out of `pubs.bib` + +Publications that **cite** the main pyoomph paper (Diddens & Rocha, J. Comput. Phys. **518**, +113306, 2024, `10.1016/j.jcp.2024.113306`) but do **not use** pyoomph, and therefore do not +belong on the About page. + +They are recorded here so that they do not have to be screened again every time the citing +literature is checked. See the *Finding new publications for `pubs.bib`* section of `CLAUDE.md` +for the full workflow; append a row here whenever a candidate fails the screening. + +This file is documentation only — no build step reads it. + +| DOI | Reference | Screened | +|---|---|---| +| `10.1016/j.apm.2026.117152` | Napieralski, Huete, Coenen, Kurdyumov, Douglas & Sánchez-Sanz, *Modal, non-modal and sensitivity analysis of planar deflagrations with low molecular diffusivity and branching kinetics*, Appl. Math. Model. (2026) | 2026-08-04 | +| `10.1016/j.jcp.2025.114348` | Saini, Sanjay, Saade, Lohse & Popinet, *Implementation of integral surface tension formulations in a volume of fluid framework and their applications to Marangoni flows*, J. Comput. Phys. (2025) — also indexed as SSRN preprint `10.2139/ssrn.5132266` | 2026-08-04 | +| `10.1016/j.ijnonlinmec.2025.105066` | Li, Liu, Liu, Wu, Li, Ding & Feng, *Analysis and control of coexisting attractor transitions in a class of rigid vibro-impact systems*, Int. J. Non-Linear Mech. (2025) | 2026-08-04 | +| `10.1016/j.compstruc.2024.107615` | Nahed & de Lamare, *Dynamic characterization of cross-physics coupling strengths, a methodology to coupling and reordering partitioned solvers for multiphysics applications*, Comput. Struct. (2024) | 2026-08-04 | From 0ec3f6d144c6c553a1af198e83972d92f377eda7 Mon Sep 17 00:00:00 2001 From: Christian Diddens Date: Fri, 7 Aug 2026 15:38:40 +0200 Subject: [PATCH 2/2] Add an icon to every menu entry The two external entries get their projects' marks: the Read the Docs book and the GitHub Invertocat, both in white. White is a permitted variant for both - Read the Docs publishes a "light logo" (#fafafa) for dark backgrounds, and GitHub's brand guidelines allow the Invertocat in white and explicitly permit using the mark to link to GitHub. The three internal entries get hand-drawn glyphs on the same 24x24 grid (star, info circle, download arrow), filled with currentColor so they follow the label colour on hover. The marks are inline SVG rather than image files, so nothing needs to be added under _generated/media/. `#menu a` becomes white-space: nowrap to keep each mark on the same line as its label when the menu wraps on narrow screens. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01Fmhceke9votYhvWyGSBKyG --- _generated/css/style.css | 16 ++++++++++++++++ header.html | 10 +++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/_generated/css/style.css b/_generated/css/style.css index 00d8fab..c327643 100644 --- a/_generated/css/style.css +++ b/_generated/css/style.css @@ -36,6 +36,22 @@ a {text-decoration:underline; color:#000000;} #menu a {color:#FFF; text-decoration:none; padding:4px;} #menu a:hover {color: #DDD} + +/* small icon in front of every menu entry */ +#menu .menu-icon { + width: 0.95em; + height: 0.95em; + vertical-align: -0.11em; + margin-right: 0.35em; + fill: currentColor; /* the three internal entries follow their label */ +} +/* white variants: the "light logo" Read the Docs publishes for dark backgrounds, + and one of the colours GitHub permits for the Invertocat */ +#menu .menu-icon-rtd { fill: #FAFAFA; } +#menu .menu-icon-github { fill: #FFF; } + +/* keep the mark on the same line as its label when the menu wraps */ +#menu a { white-space: nowrap; } #menu li.selected a {color: #FFF} diff --git a/header.html b/header.html index fc5c99c..213ac1c 100644 --- a/header.html +++ b/header.html @@ -31,11 +31,11 @@