Context
Found while adding the Zenodo DOI in #280 / #284.
CITATION.cff has never validated against the CFF 1.2.0 schema it declares on line 1. This is
independent of that PR — the unmodified file from main fails identically:
$ git show main:CITATION.cff > /tmp/citation_main.cff
$ uvx cffconvert --validate -i /tmp/citation_main.cff
jsonschema.exceptions.ValidationError: Additional properties are not allowed
('description', 'maintainers' were unexpected)
Because the document is rejected outright, cffconvert cannot produce BibTeX or APA output at all.
GitHub's "Cite this repository" widget is more lenient and still renders a citation, which is
presumably why this has gone unnoticed.
The violations
| Problem |
Detail |
description is not a CFF key |
The schema is additionalProperties: false at root. The CFF field for this is abstract, which the file already has — so description is redundant as well as invalid. |
maintainers is not a CFF key |
The CFF analogue is contact. |
orcid format |
Must be a full https://orcid.org/0000-0002-3520-9715 URI, not the bare 0000-0002-3520-9715. |
message is missing |
It is a required key. Conventionally: message: "If you use this software, please cite it as below." |
Driving Requirements
CITATION.cff should validate against CFF 1.2.0, so that cffconvert and the BibTeX/APA exports it
drives actually work, and so the DOI added in #280 reaches the tools that consume this file.
Implementation Requirements
- Add the required
message key.
- Replace the root-level
description with the existing abstract (verify the abstract text is what
you want the citation to carry, then delete description).
- Rename
maintainers to contact.
- Expand both
orcid values to full https://orcid.org/... URIs.
- Verify with
uvx cffconvert --validate -i CITATION.cff, and confirm
uvx cffconvert -f bibtex -i CITATION.cff emits an entry containing the DOI.
Considerations
- This is coupled to tooling and cannot be a pure CFF edit.
scripts/check_metadata.py reads
citation_cff["description"] and citation_cff["maintainers"] directly to cross-validate against
pyproject.toml and meta.yaml. Removing or renaming those keys will break the
check-space-packet-parser-metadata pre-commit hook, which runs with always_run: true. Both
files must change in the same PR.
- For
description: point the check at abstract, or at whichever field should be authoritative.
Worth deciding deliberately — pyproject.toml's description is a one-liner while abstract is
a paragraph, so they may not be comparable and the check may need to drop that comparison.
- For
maintainers: the check compares {(name, email)} sets; contact has the same shape, so
this should be a rename.
- Adding a
cff-validator pre-commit hook would stop this recurring, but it needs network access on
every commit. Probably a separate discussion — note that validate-codecov-yaml already sets the
precedent of a network-dependent hook listed in ci.skip.
- No urgency: the citation still renders on GitHub today. This is about the file being correct for
every other consumer.
🤖 Generated with Claude Code
Context
Found while adding the Zenodo DOI in #280 / #284.
CITATION.cffhas never validated against the CFF 1.2.0 schema it declares on line 1. This isindependent of that PR — the unmodified file from
mainfails identically:Because the document is rejected outright,
cffconvertcannot produce BibTeX or APA output at all.GitHub's "Cite this repository" widget is more lenient and still renders a citation, which is
presumably why this has gone unnoticed.
The violations
descriptionis not a CFF keyadditionalProperties: falseat root. The CFF field for this isabstract, which the file already has — sodescriptionis redundant as well as invalid.maintainersis not a CFF keycontact.orcidformathttps://orcid.org/0000-0002-3520-9715URI, not the bare0000-0002-3520-9715.messageis missingmessage: "If you use this software, please cite it as below."Driving Requirements
CITATION.cffshould validate against CFF 1.2.0, so thatcffconvertand the BibTeX/APA exports itdrives actually work, and so the DOI added in #280 reaches the tools that consume this file.
Implementation Requirements
messagekey.descriptionwith the existingabstract(verify the abstract text is whatyou want the citation to carry, then delete
description).maintainerstocontact.orcidvalues to fullhttps://orcid.org/...URIs.uvx cffconvert --validate -i CITATION.cff, and confirmuvx cffconvert -f bibtex -i CITATION.cffemits an entry containing the DOI.Considerations
scripts/check_metadata.pyreadscitation_cff["description"]andcitation_cff["maintainers"]directly to cross-validate againstpyproject.tomlandmeta.yaml. Removing or renaming those keys will break thecheck-space-packet-parser-metadatapre-commit hook, which runs withalways_run: true. Bothfiles must change in the same PR.
description: point the check atabstract, or at whichever field should be authoritative.Worth deciding deliberately —
pyproject.toml'sdescriptionis a one-liner whileabstractisa paragraph, so they may not be comparable and the check may need to drop that comparison.
maintainers: the check compares{(name, email)}sets;contacthas the same shape, sothis should be a rename.
cff-validatorpre-commit hook would stop this recurring, but it needs network access onevery commit. Probably a separate discussion — note that
validate-codecov-yamlalready sets theprecedent of a network-dependent hook listed in
ci.skip.every other consumer.
🤖 Generated with Claude Code