Add citation counts to the career, for all of your work or one publication (#697) #1063

Merged
tiagoagueda merged 1 commit from 697-citations into main 2026-10-28 02:41:52 +00:00
Owner

The maintainer's list named "Citations" under Your career without saying what it meant; the
reading taken is a researcher's: how often the person's work has been cited, from a named
source on a named day. A Citation entry keeps the source as text (the form suggests Google
Scholar, Scopus, Web of Science, Crossref, OpenCitations and the person's own earlier ones,
and keeps whatever is typed), a count from 1 to 10,000,000 (nought refused), a required date
proposed as today, an optional publication of the owner's own (empty is the whole body of
work; deleting the paper deletes its counts), a link and a one-line summary. A foreign
publication is refused by the form and by the save, as a reference's contact is. Postulo
counts nothing and builds no profile link from the stored identifiers.

A CV prints one plural-aware line in its own language, "Cited 1,240 times (Scopus, September
2026)", with the paper's title first when one is named, and the summary under it: in both
base themes, the preview, the plain text and the Word file. Only the summary translates. A
new count is placed by its date. Search finds one by source, summary and paper title.

The archive (format 76) and the candidate file (format 23) carry the block, the paper by its
local id resolved after the publications as a skill's group is; a paper missing from the file
leaves the count as one for the whole body of work and says so. The candidate reader takes a
count through the form, and the same count is the same source, paper and day. Europass reads
none. Demo data has one count for the whole and one for a paper.

Closes #697

Notes for review

  • Reading (b), confirmed by the maintainer on 2026-10-27: counts, each with a source and a date.
  • Decisions the issue left open:
    • In a candidate file, a publication reference that is refused or ambiguous makes a whole-work count with a note, as a missing one does.
    • The CV prints the summary under the line, as courses and memberships do.
    • An archive entry with a count out of range, or with no date, is not restored, and the import report says so.
    • The candidate reader's MAX_NUMBER goes from 106 to 109, so ten million passes.
    • A PARENTS map now covers every kind that points at another entry (skills to groups, counts to publications).
  • Formats:
    • The archive goes to FORMAT_VERSION 76. #878 also takes 76, so whichever lands second takes 77.
    • The candidate format goes to CANDIDATE_FORMAT 23.
  • Migration: resume 0026_citations.

🤖 Generated with Claude Code

The maintainer's list named "Citations" under Your career without saying what it meant; the reading taken is a researcher's: how often the person's work has been cited, from a named source on a named day. A Citation entry keeps the source as text (the form suggests Google Scholar, Scopus, Web of Science, Crossref, OpenCitations and the person's own earlier ones, and keeps whatever is typed), a count from 1 to 10,000,000 (nought refused), a required date proposed as today, an optional publication of the owner's own (empty is the whole body of work; deleting the paper deletes its counts), a link and a one-line summary. A foreign publication is refused by the form and by the save, as a reference's contact is. Postulo counts nothing and builds no profile link from the stored identifiers. A CV prints one plural-aware line in its own language, "Cited 1,240 times (Scopus, September 2026)", with the paper's title first when one is named, and the summary under it: in both base themes, the preview, the plain text and the Word file. Only the summary translates. A new count is placed by its date. Search finds one by source, summary and paper title. The archive (format 76) and the candidate file (format 23) carry the block, the paper by its local id resolved after the publications as a skill's group is; a paper missing from the file leaves the count as one for the whole body of work and says so. The candidate reader takes a count through the form, and the same count is the same source, paper and day. Europass reads none. Demo data has one count for the whole and one for a paper. Closes #697 ## Notes for review - **Reading (b), confirmed by the maintainer on 2026-10-27:** counts, each with a source and a date. - **Decisions the issue left open:** - In a candidate file, a publication reference that is refused or ambiguous makes a whole-work count with a note, as a missing one does. - The CV prints the summary under the line, as courses and memberships do. - An archive entry with a count out of range, or with no date, is not restored, and the import report says so. - The candidate reader's `MAX_NUMBER` goes from 10**6 to 10**9, so ten million passes. - A `PARENTS` map now covers every kind that points at another entry (skills to groups, counts to publications). - **Formats:** - The archive goes to `FORMAT_VERSION` 76. #878 also takes 76, so whichever lands second takes 77. - The candidate format goes to `CANDIDATE_FORMAT` 23. - **Migration:** `resume 0026_citations`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Add citation counts to the career, for all of your work or one publication (#697)
Some checks failed
CI / Unit tests and coverage (Python 3.14) (push) Successful in 12m26s
CI / Checks: lint, migrations, catalogues, settings, built files (push) Successful in 2m46s
CI / Database tests on PostgreSQL (push) Successful in 3m27s
CI / Security audit (push) Successful in 41s
CI / Browser tests (Chromium) (push) Failing after 31m32s
Every Python / Unit tests (Python 3.12) (push) Successful in 13m4s
Every Python / Unit tests (Python 3.13) (push) Successful in 12m59s
CI / Browser tests (Chromium) (pull_request) Has been cancelled
CI / Unit tests and coverage (Python 3.14) (pull_request) Has been cancelled
CI / Checks: lint, migrations, catalogues, settings, built files (pull_request) Has been cancelled
CI / Database tests on PostgreSQL (pull_request) Has been cancelled
CI / Security audit (pull_request) Has been cancelled
81023e0732
The maintainer's list named "Citations" under Your career without saying what it meant; the
reading taken is a researcher's: how often the person's work has been cited, from a named
source on a named day. A Citation entry keeps the source as text (the form suggests Google
Scholar, Scopus, Web of Science, Crossref, OpenCitations and the person's own earlier ones,
and keeps whatever is typed), a count from 1 to 10,000,000 (nought refused), a required date
proposed as today, an optional publication of the owner's own (empty is the whole body of
work; deleting the paper deletes its counts), a link and a one-line summary. A foreign
publication is refused by the form and by the save, as a reference's contact is. Postulo
counts nothing and builds no profile link from the stored identifiers.

A CV prints one plural-aware line in its own language, "Cited 1,240 times (Scopus, September
2026)", with the paper's title first when one is named, and the summary under it: in both
base themes, the preview, the plain text and the Word file. Only the summary translates. A
new count is placed by its date. Search finds one by source, summary and paper title.

The archive (format 76) and the candidate file (format 23) carry the block, the paper by its
local id resolved after the publications as a skill's group is; a paper missing from the file
leaves the count as one for the whole body of work and says so. The candidate reader takes a
count through the form, and the same count is the same source, paper and day. Europass reads
none. Demo data has one count for the whole and one for a paper.

Closes #697

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tiagoagueda force-pushed 697-citations from 81023e0732
Some checks failed
CI / Unit tests and coverage (Python 3.14) (push) Successful in 12m26s
CI / Checks: lint, migrations, catalogues, settings, built files (push) Successful in 2m46s
CI / Database tests on PostgreSQL (push) Successful in 3m27s
CI / Security audit (push) Successful in 41s
CI / Browser tests (Chromium) (push) Failing after 31m32s
Every Python / Unit tests (Python 3.12) (push) Successful in 13m4s
Every Python / Unit tests (Python 3.13) (push) Successful in 12m59s
CI / Browser tests (Chromium) (pull_request) Has been cancelled
CI / Unit tests and coverage (Python 3.14) (pull_request) Has been cancelled
CI / Checks: lint, migrations, catalogues, settings, built files (pull_request) Has been cancelled
CI / Database tests on PostgreSQL (pull_request) Has been cancelled
CI / Security audit (pull_request) Has been cancelled
to 40318179af
Some checks failed
CI / Unit tests and coverage (Python 3.14) (push) Successful in 17m21s
CI / Browser tests (Chromium) (push) Successful in 39m29s
CI / Checks: lint, migrations, catalogues, settings, built files (push) Successful in 5m52s
CI / Database tests on PostgreSQL (push) Successful in 6m41s
Every Python / Unit tests (Python 3.13) (push) Has been cancelled
Every Python / Unit tests (Python 3.12) (push) Has been cancelled
CI / Browser tests (Chromium) (pull_request) Has been cancelled
CI / Unit tests and coverage (Python 3.14) (pull_request) Has been cancelled
CI / Checks: lint, migrations, catalogues, settings, built files (pull_request) Has been cancelled
CI / Database tests on PostgreSQL (pull_request) Has been cancelled
CI / Security audit (pull_request) Has been cancelled
CI / Security audit (push) Successful in 1m16s
2026-10-27 20:56:40 +00:00
Compare
tiagoagueda force-pushed 697-citations from 40318179af
Some checks failed
CI / Unit tests and coverage (Python 3.14) (push) Successful in 17m21s
CI / Browser tests (Chromium) (push) Successful in 39m29s
CI / Checks: lint, migrations, catalogues, settings, built files (push) Successful in 5m52s
CI / Database tests on PostgreSQL (push) Successful in 6m41s
Every Python / Unit tests (Python 3.13) (push) Has been cancelled
Every Python / Unit tests (Python 3.12) (push) Has been cancelled
CI / Browser tests (Chromium) (pull_request) Has been cancelled
CI / Unit tests and coverage (Python 3.14) (pull_request) Has been cancelled
CI / Checks: lint, migrations, catalogues, settings, built files (pull_request) Has been cancelled
CI / Database tests on PostgreSQL (pull_request) Has been cancelled
CI / Security audit (pull_request) Has been cancelled
CI / Security audit (push) Successful in 1m16s
to 3bb3d778f5
Some checks failed
Every Python / Unit tests (Python 3.12) (push) Successful in 13m30s
Every Python / Unit tests (Python 3.13) (push) Successful in 13m10s
CI / Unit tests and coverage (Python 3.14) (pull_request) Successful in 12m57s
CI / Checks: lint, migrations, catalogues, settings, built files (pull_request) Successful in 3m6s
CI / Database tests on PostgreSQL (pull_request) Failing after 43s
CI / Security audit (pull_request) Failing after 14s
CI / Browser tests (Chromium) (pull_request) Failing after 32m44s
CI / Unit tests and coverage (Python 3.14) (push) Successful in 13m20s
CI / Checks: lint, migrations, catalogues, settings, built files (push) Successful in 3m14s
CI / Database tests on PostgreSQL (push) Successful in 4m6s
CI / Security audit (push) Successful in 1m6s
CI / Browser tests (Chromium) (push) Successful in 32m46s
2026-10-28 02:38:41 +00:00
Compare
tiagoagueda deleted branch 697-citations 2026-10-28 02:41:56 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Postulo/postulo!1063
No description provided.