Europass import: an untitled entry keeps 80 characters of its text, and skills past forty are dropped, without a note #640
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#640
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found on 2026-09-29 in a read-only review of postulo at
95348908d, reading the three Europass readers and running each on a file with an untitled entry and 55 skills under one heading.The reader's stated rule is that a file "imports the half that is right and says what it skipped" (
plugins/europass/reader.py:50-52), and the wiki's Your career record says the review page lists what could not be read "so nothing goes missing quietly". Three places cut content and say nothing, so the person confirms an import believing it is complete.Checked again on 2026-10-01 against
mainat0a5cad587: still present._project_fromis now atplugins/europass/common.py:113-116, and the cuts inreader.pyat:468and:738.1. An entry with a description and no title loses everything after 80 characters
plugins/europass/reader.py:222-225(_project_from):return {"name": title or description[:80], "summary": description if title else ""}. Called for the old formats' achievements (:601,:870) and for the Candidate format's projects and custom sections (plugins/europass/candidate.py:606,:614).{'name': 'Wrote the migration plan for the billing platform and led the cut-over across th', 'summary': ''}from all three readers, withrecord.skippedempty.Project.nameholds 200 characters andProject.summaryhas no limit.2. A heading's skills past the fortieth are dropped
plugins/europass/reader.py:592and:862,plugins/europass/candidate.py:574,:585and:599:lines[:40]/skills[:40].DigitalSkillelements in the Candidate format, give 40 skills and an emptyrecord.skipped. The review page shows the count that was kept, which the person has no reason to doubt.record.skippedthat names the heading and says how many were left out. Or drop the cap: the upload is already limited toMAX_IMPORT_BYTES.3. In the JSON reader a
Skillsblock of the wrong shape is ignored without the note the other sections getplugins/europass/reader.py:834-862(_read_json_skills).WorkExperience,EducationandAchievementgo through_readable(:741-752), which adds "… was in the file but could not be read.";Skillsand its headings do not."Skills": "a string","Computer": "Python; Django"or"Computer": ["Python"]reads as no skills at all, with nothing inrecord.skipped.Skills,Linguisticand each heading under them through_readable.Why it matters: the import only ever adds, so the person's file is the only place the missing text still exists, and nothing tells them to look there. The same quiet cut happens once more downstream, where
resume/importing.py:247storesname[:100]for a skill; a note inReport.skippedwould cover it.Done when
tests/test_europass.pyreads an old-format file whose achievement has a 145-character description and no title, and finds the whole description in the project'ssummary. A test intests/test_europass_candidate.pydoes the same for anOtherentry. Both fail today.record.skippedthat says 15 were left out.tests/test_europass.pyreads a JSON file whoseSkillsis a string and finds a "could not be read" sentence inrecord.skipped.