- Python 91.4%
- Shell 7.8%
- TeX 0.8%
`parse_grid_table` returned zero rows for every grid table, so --diff reported each of the site's own rows as "only in the store" and never once compared a value. Two causes, both on the site side: * GRID_BORDER accepts `=` as well as `-`, so the `+===+` header separator matched it and `continue`d before the branch that sets `saw_header_sep`. That flag stayed False for the whole file and every row was dropped. Recognise the separator inside the border branch instead, flushing the pending row before marking, so the header itself is still discarded. * A cell's forced-break marker (a trailing `\`) survived the join of the physical lines. canon() strips it only at end-of-line, and by then it sits mid-string, where it becomes a word of its own and shifts every row_key out of alignment with the store side. Strip it per physical line instead. With both fixed, a store rendered into gl-website/app/cv reports no drift, and an edited value is reported as a value difference rather than as two unrelated rows. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .claude-plugin | ||
| plugins | ||
| .gitignore | ||
| README.md | ||
claude-skills
Guilhem Lavaux's personal Claude Code plugin marketplace.
Install
/plugin marketplace add <this-repo>
/plugin install forgejo
/plugin install cv
/plugin install euclid
/plugin install report
Plugins
forgejo
Manage Forgejo repos via the fj CLI (forgejo-cli). Skills:
forgejo-pr— create/update pull requests from current branchforgejo-issue— create, search, triage, update, close issuesforgejo-release— manage releases/tags, upload/download assetsforgejo-actions— inspect task status, dispatch workflows, manage variables/secrets
Requires fj CLI installed and authenticated.
cv
Academic CV tooling. Skills:
-
cv-data-store— build and maintain a machine-checked YAML store of CV facts at~/.config/academic-cv: positions, publications, grants and compute allocations, supervision, talks, meeting organisation, commissions of trust, teaching, outreach, collaborations, prizes and narrative rubrics, person-scoped so several PIs' CVs can live side by side. Extracts from a LaTeX dossier, an ERC Part B1 PDF or an ADS query; merges on merge keys rather than ids so a re-ingest inserts nothing; records a contradiction between two documents as adisputed:block instead of overwriting it; and validates the whole store with a Python verifier covering syntax, references, partial dates, amounts and units, controlled vocabulary and aggregate consistency (check-cv.sh --ruleslists all 92 rules). Commands:/cv-store-init,/cv-store-ingest,/cv-store-check. -
cv-render-cnrs— turn the store back into LaTeX for a CNRS/CNU dossier: one .tex fragment per rubric (35 of them, named by rubric and window, never by section number) matching the dossier's own macros, longtable style and French typography, plus a drift report classifying every difference as content, style or anchor, and a page-budget check measured from the compiled .toc rather than estimated. Never edits the dossier — the diff command is granted no Edit or Write tool. Commands:/cv-render,/cv-render-diff. -
cv-render-website— turn the store back into the 5 fixed-name RST fragments a personal website's CV page consumes (short.rst, grants.rst, responsabilities.rst, activities.rst, outreach.rst), matching the site's own grid-table/bullet-list RST style with an .en-preferred/.fr-fallback policy where every fallback is a named finding. Curated fragments (grants, responsabilities, outreach) render an honest placeholder until awebsite_highlightselection list is written inselections.yaml— no ingest, no guessed curation. Plus a --diff mode classifying drift as content/style/anchor, with --only-en-gaps narrowing to records genuinely missing English text. Never edits the live site — the diff command is granted no Edit or Write tool. Commands:/cv-render-website,/cv-render-website-diff. -
cv-activity-report— update French academic evaluation dossiers (CNU/HCERES, évaluation à vague / à mi-vague) written in LaTeX: CV / "Rapport d'activité" / "Productions scientifiques" sections, enforce page limits, the 10/5-semester window and the 10/5 publication cap, cross-check publications against arXiv/ADS, require each curated production to state its portée, its impact and the candidate's personal contribution plus a direct open-archive link to the full text itself (HAL preferred, arXiv accepted, per the CNRS open-science policy), audit the "Rapport d'activité" against the six expected content rubrics (activité de recherche, collaborations, contrats, place dans l'unité, mobilités, distinctions), and leave\textcolor{red}{BOT: ...}notes in the.texsource for anything unresolved
report
Compute-time allocation activity reports for the French national centres (GENCI/DARI:
CINES Adastra, IDRIS Jean Zay, TGCC Irene), following the official CINES template
Demande d'Attribution de Ressources Informatiques — Rapport d'activité. Skills:
-
compute-report-init— start the report as a compilable French LaTeX document. Two steps: a YAML holding every fact the form asks for, then the.tex. The intermediate file is what makes the numbers checkable — hours are parsed (2,5 millions,2.5M,2 500 000) or refused by name, each machine line carries the unit the form itself prints for that partition, and the consumed/allocated ratio is checked against thresholds before any LaTeX exists.--from-storeprefills from thecv-data-storestore at~/.config/academic-cvbut never assigns a store record to a partition:{name: Irene, site: TGCC}could be SKL, Rome or V100, and those differ in unit. Every unanswered field is rendered as\textcolor{red}{BOT: ...}, visible in the compiled PDF rather than silently blank. Command:/compute-report-init. -
compute-report-review— audit an existing report and mark what is missing. Read-only script, no write path: it reports each finding with a line number and the exact BOT string to place there, and the insertion is done separately. Catches missing sections, unreplaced template placeholders, a missing dossier number, GPU hours written on a core-hour line, allocation and consumption blocks that list different machines, an unexplained under- or over-consumption, empty bibliography or conferences sections, and sub-projects over the 2-page limit — measured from the\label{sousprojet:...}page numbers in the compiled.aux, never estimated from source length. Command:/compute-report-review.
The machine list, units and thresholds live in plugins/report/assets/machines.yaml;
a centre adding a partition is an edit to that file, not to the code.
euclid
Euclid Consortium effort tracking. Skills:
euclid-effort-tracking— fill the Euclid Consortium semester effort declaration (the Euclid Tracking Tool / dynacase record) from mail, calendar, ADS and git evidence, weighted per the EC effort-tracking rulebook, emitting a paste-ready table, justification memo, and HTML worksheet. Commands:/euclid-tracker-init,/euclid-tracker-report.