diff --git a/docs/research/europass/README.md b/docs/research/europass/README.md new file mode 100644 index 000000000..2848a6773 --- /dev/null +++ b/docs/research/europass/README.md @@ -0,0 +1,120 @@ +# Europass research and visual proposal — Plan 33A + +Status: **research complete; visual and naming approval pending**. No renderer, template ID, gallery entry, +schema change, or import/export integration is included. This proposal does not resolve issue #2689. + +## Review package + +- [Reference comparison](artifacts/reference-comparison.svg): analytical redraw of the selected official + reference beside the mapped proposal. The redraw excludes branding and source-specific recruitment text. +- [One-page proposal](artifacts/one-page.svg): canonical static layout with exact synthetic field sources. +- Overflow proposal: [page 1](artifacts/overflow-1.svg), [page 2](artifacts/overflow-2.svg), + [page 3](artifacts/overflow-3.svg). These are one document, not three template options. +- [Generated concept](artifacts/concept-one-page.png): supplementary visual exploration, not the field or + geometry contract. The SVGs take precedence. +- [Field mapping and behavior](mapping.md), [synthetic fixture records](synthetic-fixtures.json), and + [generation provenance](artifacts/PROVENANCE.md). + +Open SVGs directly in a browser. They contain their text and geometry, require no application server, +and load no external images, fonts or scripts. A local sans-serif font is sufficient. The JSON contains +two complete ResumeData objects under `onePage` and `overflow`; neither is an official Europass file. + +## Authority and repository revalidation + +Access/revalidation date: **2026-09-06**. Research base: `b85d285b69843612e9d7f0ab802248982e7bf0ea`. +Planning authority: commit `a2557b2ad40e06e1e63eb655f286e6a78fe6bf0d`, +[Plan 33](https://github.com/amruthpillai/reactive-resume/blob/a2557b2ad40e06e1e63eb655f286e6a78fe6bf0d/plans/33-europass-template.md) +and its recorded decisions. Approval covers this research/proposal unit; concrete visual approval remains open. + +Read-only `gh issue view 2689` confirmed the [issue](https://github.com/amruthpillai/reactive-resume/issues/2689) +is open, last updated 2026-08-16. Its request for a built-in option is relevant; assertions about compulsory +formats are not adopted. The linked community converter remains third-party work, not an import contract. + +The complete open-PR list returned four PRs: [#3455](https://github.com/amruthpillai/reactive-resume/pull/3455) +(planning), [#3456](https://github.com/amruthpillai/reactive-resume/pull/3456) (execution ledger), +[#3467](https://github.com/amruthpillai/reactive-resume/pull/3467) (authored-page guidance), and +[#3468](https://github.com/amruthpillai/reactive-resume/pull/3468) (stylesheet diagnostics). +None proposed a Europass renderer. Pagination guidance is adjacent work; no shared source is changed here. + +The schema still has 15 template IDs and no Europass ID. The plan's targeted drift check from `7a98f6662` +found only changes to an unrelated rich-text table integration test. Current ResumeData and shared filtering +were read directly; no `.codegraph/` directory was present. Intent inventory returned +“No intent-enabled packages found,” so no matching local package skill was available to load. + +## Official evidence register + +All sources below were accessed on **2026-09-06**. Only EU/Europass first-party material informs external +claims. Copyright attribution for summarized Europass information: **© European Union**. The independent +synthetic examples and diagrams are adaptations for discussion, not official Europass output. + +| ID | Source | Supported finding and limit | +| --- | --- | --- | +| S1 | [Create your Europass CV](https://europass.europa.eu/en/create-europass-cv) | Current guidance offers a choice of designs and selected profile content. It recommends clear, tailored descriptions and reverse chronology. Its photograph advice is guidance, not evidence of a universal required field. No single fixed layout is specified here. | +| S2 | [Europass FAQ, page 1](https://europass.europa.eu/en/faq?page=1) | CV sections can be added, removed, moved and renamed; several templates exist. Current saving guidance specifies Europass PDF. Information reuse is allowed with source acknowledgement. This is not proof of a logo licence or compatibility of third-party PDFs with the editor. | +| S3 | [Europass FAQ, page 2](https://europass.europa.eu/en/faq?page=2) | The profile FAQ says name and surname are mandatory and users choose other sections. Initial web extraction failed; a direct HTTPS fetch subsequently verified the live page text. This concerns the profile, not a separately tested CV-editor validation contract. | +| S4 | [EEAS-hosted Europass CV form](https://www.eeas.europa.eu/sites/default/files/documents/2025/Europass-cv-en%20template_0.pdf) | Stable public two-page blank form, inspected as PDF and raster. It contains a legacy © European Union 2002–2018 footer and recruitment-specific text. Its 2025 URL does not make its design a current universal specification. Headings are optional in this form. This is the selected visual reference. | +| S5 | [Europass terms of use](https://europass.europa.eu/en/node/2161) | Terms govern platform use and prohibit misleading content and intellectual-property violations. No explicit third-party template-branding permission was found in this page. | +| S6 | [European Commission legal notice](https://commission.europa.eu/legal-notice_en) | The general policy permits reuse of covered EU-owned website content with credit and indication of changes, but excludes protected names, logos and other industrial-property material. It is not a blanket licence for every asset hosted by another EU institution. | + +### Reference selection and current guidance + +S4 provides an inspectable visual anchor: a narrow label/date area at reading start, wider detail area, +blue headings and rules, employment and education entries, a language matrix, and running page metadata. +The comparison redraw records these observations; measurements in the proposal are our design decisions. +We do not redistribute the original PDF or its mark. Reviewers can open the first-party PDF through S4. + +S1/S2 are the current behavioral guidance. They support flexible content and multiple layouts; they do not +establish S4 as today's sole layout. The proposed document therefore takes the chronology structure from +S4 while adapting it to existing data and the current guidance. No official live-editor CV was exported +or uploaded, and no account or personal data was used. + +An EEA search result for historic CV instructions redirected to the agency's general About page when +opened. That result is not used as evidence. Historic XML documentation also surfaced but is not used to +promise current export formats or interoperability. No secondary-source claims were adopted. + +## Material visual and reuse decisions + +Recommended working title: **European chronology**. Do not register a product ID yet. “Europass” is the +research topic; use as a public template name remains an explicit maintainer decision with an unresolved +rights basis. The design contains no Europass wordmark, EU flag, emblem, endorsement, official copyright +footer, or interoperability badge. General website information reuse does not settle branding rights. + +The proposed default is A4, white background, dark blue `#1e5580`, charcoal `#20262b`, 36 pt side margins, +a 128 pt label/date area and 16 pt gap, with details beginning at x = 180 pt. Body text is 10.5 pt sans-serif, +headings are 10 pt bold, and the name is 23 pt. The line and color choices are proposals, not official tokens. +The static one-page drawing uses more deliberate section spacing than the dense overflow study. + +Deviations requiring approval: + +1. An independent unbranded design, with neutral provisional name, instead of an exact official clone. +2. A chronology gutter for dates and headings, coordinated with Plan 24 rather than introducing a new + date-column schema here. Empty date cells keep alignment; periods are never parsed or normalized. +3. Plain language/fluency text instead of the five-dimensional language grid. Numeric levels are not CEFR + evidence. Skill ratings are hidden by the fixture's existing design setting. +4. No compulsory photo or personal attributes. Photo-free examples reserve no blank frame. Optional photo + placement and mixed-script examples still need a separate visual pass before renderer approval. +5. Existing section titles and custom sections remain available. The concept does not force a fixed set of + official headings or discard additional resume sections. +6. Continuation pages retain only a small name/running header and page number, with content flowing below. + The synthetic approval watermark is an artifact annotation, not proposed resume output. + +## Unresolved claims and handoff gate + +- Permission to ship the Europass name, logo, exact branded template or official-looking footer is **not + established**. No such permission is inferred from S2 or S6. If maintainers require branding or an exact + clone, resolve rights and reference choice before any implementation. +- The chosen legacy structure is documented, but whether it satisfies the request for a current built-in + Europass option needs maintainer review of these actual artifacts. A current editor design would be a + different reference-selection task, not a silent replacement. +- Mandatory CV-editor fields, exact language availability, and export embedding details were not validated + interactively. Official pages vary in language counts; this proposal makes no count or import promise. +- Structured CEFR dimensions, mother-tongue flags and qualification-framework levels are absent from + current ResumeData. They are omissions, not guessed values. See the complete mapping. +- Renderer pagination, links, fonts, RTL shaping, tagged accessibility and machine extraction are untested + for this proposal. Static artifacts are not evidence that a future PDF renderer implements those behaviors. +- This task stops at the planned concrete-design gate. Approval must identify the canonical SVG set, + public naming/branding choice and accepted data omissions; it cannot be inferred from general plan approval. + +Follow-up implementation remains conditional. It would require the plan's schema, semantic manifest, +gallery, renderer, pagination, extraction, localization, typecheck, build and boundary checks after the +maintainer approves the design. No implementation, push, PR creation, issue comment or issue closure occurred here. diff --git a/docs/research/europass/artifacts/PROVENANCE.md b/docs/research/europass/artifacts/PROVENANCE.md new file mode 100644 index 000000000..26434077f --- /dev/null +++ b/docs/research/europass/artifacts/PROVENANCE.md @@ -0,0 +1,53 @@ +# Visual artifact provenance + +Created 2026-09-06 for Plan 33A. All biographical content, organizations, qualifications and achievements are +synthetic. `example.invalid` links are intentionally nonresolving test data. No personal files, CVs, account +data or real portrait were used. + +## Canonical static artifacts + +`one-page.svg` and `overflow-1.svg` through `overflow-3.svg` are editable static drawings with text traced +to [fixture](../synthetic-fixtures.json) paths using `data-source`. They are research artifacts, not a resume +renderer or template implementation. SVG source is the reproducible artifact; raster previews are optional. + +`reference-comparison.svg` juxtaposes an original analytical schematic with the one-page SVG. The schematic +describes the selected [official EEAS reference](https://www.eeas.europa.eu/sites/default/files/documents/2025/Europass-cv-en%20template_0.pdf), +© European Union, accessed 2026-09-06. It is not a screenshot or faithful reproduction, omits the mark and +recruitment-specific content, and labels the legacy provenance. Original reference remains on its official host. + +The static drawings use sans-serif text and editable geometry. Browser rendering may select a different +installed font. They are intentionally independent of the app, and include no network resource dependencies. +An isolated PyMuPDF environment was used to rasterize the drawings for visual inspection. No raster screenshot +is evidence of Reactive Resume's PDF behavior. + +To regenerate a raster from the canonical SVG without application dependencies: + +```sh +uv run --with pymupdf python - <<'PY' +from pathlib import Path +import pymupdf + +source = Path("docs/research/europass/artifacts/one-page.svg") +image = pymupdf.open("svg", source.read_bytes()) +pdf = pymupdf.open("pdf", image.convert_to_pdf()) +pdf[0].get_pixmap(matrix=pymupdf.Matrix(2, 2)).save("one-page-review.png") +PY +``` + +## Supplementary image generation + +`concept-one-page.png` was generated with the built-in image generation tool. No CLI/API fallback was used. +The selected output was copied into this repository; review does not require the tool's private output folder. +It is a visual exploration only. Its name is positioned farther right, rules span both columns, some typography +and spacing differ, and it adds minor presentational punctuation/“area” wording. These differences are not +approved specification changes. The mapped SVGs and fixture take precedence over generated pixels. + +Exact prompt: + +```text +Use case: productivity-visual. Asset type: static CV design proposal, one portrait A4 page, straight-on flat white document, no desk or mockup shadows. Independent unbranded European chronological CV concept, not an official document. Exact synthetic content only. Header at upper right of broad content column: Alex Marin in large dark blue sans serif, below it Research coordinator; below: Brussels, Belgium | alex.marin@example.invalid. Narrow reading-start column for dates and section labels (about 27 percent), broad content column 73 percent, thin blue horizontal section rules. Airy white page, charcoal 10.5pt-equivalent body, dark blue uppercase section headings. No photograph and no placeholder box. Sections exact text: ABOUT ME: Research coordinator building clear public-service guidance. WORK EXPERIENCE: date 2023 – Present, title Research coordinator, organisation Civic Atlas Lab, Brussels, Belgium. Two bullets: Coordinated multilingual guidance reviews. Published accessible research summaries. EDUCATION AND TRAINING: date 2019 – 2022, title BA Social Research, organisation Northbridge Institute, area Public policy. LANGUAGE SKILLS: English — Native; French — B2 (self-assessed). SKILLS: Research — Advanced; Interviews, synthesis, documentation. PROJECTS: date 2025, title Open Guidance Map; Mapped public learning resources. OTHER ACTIVITIES: Community workshops and peer mentoring. Footer small: SYNTHETIC DESIGN PROPOSAL · NOT APPROVED, with 1 / 1 at right. No logos, EU flag, stars, Europass wordmark, compliance claims, nationality, date of birth, QR codes, extra personal facts, ratings or CEFR matrix. All text legible. This is concept direction only; deterministic separate artifacts will govern exact mapping. +``` + +This image was inspected for recognizable text, missing sections, branding and private-data leakage. All seven +intended sections are present and no official mark or portrait appears. No image-generation claim is used as +evidence about official guidance, reuse rights, application behavior or field support. diff --git a/docs/research/europass/artifacts/concept-one-page.png b/docs/research/europass/artifacts/concept-one-page.png new file mode 100644 index 000000000..5f3aec403 Binary files /dev/null and b/docs/research/europass/artifacts/concept-one-page.png differ diff --git a/docs/research/europass/artifacts/one-page.svg b/docs/research/europass/artifacts/one-page.svg new file mode 100644 index 000000000..b35bf1dc9 --- /dev/null +++ b/docs/research/europass/artifacts/one-page.svg @@ -0,0 +1,44 @@ +One-page visual proposalSynthetic ResumeData illustration. Static layout, not renderer output. See mapping.md. +Alex Marin +Research coordinator +Brussels, Belgium +alex.marin@example.invalid +ABOUT ME + +Research coordinator building clear public-service guidance. +WORK EXPERIENCE + +2023 – Present +Research coordinator +Civic Atlas Lab +Brussels, Belgium +• Coordinated multilingual guidance reviews. +• Published accessible research summaries. +EDUCATION AND +TRAINING + +2019 – 2022 +BA Social Research +Northbridge Institute +Public policy +LANGUAGE SKILLS + +English +Native +French +B2 (self-assessed) +SKILLS + +Research +Advanced +Interviews, synthesis, documentation +PROJECTS + +2025 +Open Guidance Map +Mapped public learning resources. +OTHER ACTIVITIES + +Community workshops and peer mentoring. +SYNTHETIC DESIGN PROPOSAL · NOT APPROVED +1 / 1 diff --git a/docs/research/europass/artifacts/overflow-1.svg b/docs/research/europass/artifacts/overflow-1.svg new file mode 100644 index 000000000..4ddf40893 --- /dev/null +++ b/docs/research/europass/artifacts/overflow-1.svg @@ -0,0 +1,50 @@ +overflow visual proposal, page 1Synthetic ResumeData illustration. Static pagination, not renderer output. See mapping.md. +Alexandra Noor Marin-López +Research coordinator for multilingual public-service information +Brussels, Belgium +alex.marin@example.invalid +Research portfolio +Available for cross-border project work +PROFILES + +Portfolio +alexandra +Selected writing +ABOUT ME + +Research coordinator building clear public-service guidance. +WORK EXPERIENCE + +2023 – Present +Research coordinator +Civic Atlas Lab +Brussels, Belgium +Supported a distributed team producing accessible guidance for community +learning programmes. +September 2024 – +Present +(part-time) +Programme lead +Led editorial planning across four working languages. +January 2023 – August +2024 +Research associate +Built an evidence catalogue for public learning services. +Autumn 2021 – Summer +2022 +Research assistant +Open Learning Observatory +Leuven, Belgium +Collected public documentation and organised findings for volunteer reviewers. +EDUCATION AND +TRAINING + +2019 – 2022 +BA Social Research +Northbridge Institute +Public policy +Distinction +Leuven, Belgium + +SYNTHETIC DESIGN PROPOSAL · NOT APPROVED +1 / 3 diff --git a/docs/research/europass/artifacts/overflow-2.svg b/docs/research/europass/artifacts/overflow-2.svg new file mode 100644 index 000000000..ee634d412 --- /dev/null +++ b/docs/research/europass/artifacts/overflow-2.svg @@ -0,0 +1,45 @@ +overflow visual proposal, page 2Synthetic ResumeData illustration. Static pagination, not renderer output. See mapping.md. +Alexandra Noor Marin-López +Continuation +EDUCATIONCONTINUEDStudied research methods, plain-language writing and collaborativeservice design. + +PROJECTS + +2025 +Open Guidance Map +Mapped public learning resources. +Reviewed regional catalogues with volunteers, comparing the +clarity of eligibility, learning outcomes and application +guidance. Each record includes an attributed source and an +editorial review date. +Documented ambiguous wording without guessing the +provider’s intent. Workshop participants tested revised +navigation labels and contributed examples of questions +that the directory should answer. +Prepared a maintenance guide so future editors can update +links, preserve context and flag missing evidence. The guide +separates direct source statements from editorial +interpretations. +Undated community handbook +https://example.invalid/learning/resources/ +community-handbook/review-notes +Collected workshop notes without inventing a project date. +LANGUAGE SKILLS + +English +Native +French +B2 (self-assessed) +SKILLS + +Research +Advanced +Interviews, synthesis, documentation +AWARDS + +2025 +Community research recognition +Civic Learning Forum +Recognised collaborative documentation work. +SYNTHETIC DESIGN PROPOSAL · NOT APPROVED +2 / 3 diff --git a/docs/research/europass/artifacts/overflow-3.svg b/docs/research/europass/artifacts/overflow-3.svg new file mode 100644 index 000000000..a09082c91 --- /dev/null +++ b/docs/research/europass/artifacts/overflow-3.svg @@ -0,0 +1,32 @@ +overflow visual proposal, page 3Synthetic ResumeData illustration. Static pagination, not renderer output. See mapping.md. +Alexandra Noor Marin-López +Continuation + +CERTIFICATIONS + +2024 +Accessible writing workshop +Open Training Collective +PUBLICATIONS + +2025 +A practical guide to learning directories +Community Methods Review +VOLUNTEERING + +2022 – Present +Neighbourhood Learning Circle +Brussels, Belgium +Facilitated peer mentoring sessions. +INTERESTS + +Walking +Urban history, public spaces +REFERENCES + +Available upon request +OTHER ACTIVITIES + +Community workshops and peer mentoring. +SYNTHETIC DESIGN PROPOSAL · NOT APPROVED +3 / 3 diff --git a/docs/research/europass/artifacts/reference-comparison.svg b/docs/research/europass/artifacts/reference-comparison.svg new file mode 100644 index 000000000..9267daa7c --- /dev/null +++ b/docs/research/europass/artifacts/reference-comparison.svg @@ -0,0 +1,88 @@ +Official reference structure and independent proposalLeft is an analytical schematic of the legacy EEAS-hosted Europass form, not a reproduction. Right is the synthetic proposal. See README.md for source and reuse limits. +REFERENCE → PROPOSAL +Plan 33A · research only · synthetic content · visual approval pending +Observed legacy structure — analytical schematic +European chronology — mapped proposal + +Legacy source: EEAS PDF, © European Union +2002–2018 document; 2025 hosting path +Brand mark intentionally not reproduced +Personal information + +Name and contacts +Work experience + +Position · employer · responsibilities +Date range +Education and training + +Qualification · institution · subjects +Date range +Personal skills + +Mother tongue; five language dimensions + +1 + +2 + +3 + +4 + +5 +No conversion from a single numeric rating +Other skills + +Communication · organisation · job skills +Structure only; source-specific recruitment text omitted +One-page visual proposalSynthetic ResumeData illustration. Static layout, not renderer output. See mapping.md. +Alex Marin +Research coordinator +Brussels, Belgium +alex.marin@example.invalid +ABOUT ME + +Research coordinator building clear public-service guidance. +WORK EXPERIENCE + +2023 – Present +Research coordinator +Civic Atlas Lab +Brussels, Belgium +• Coordinated multilingual guidance reviews. +• Published accessible research summaries. +EDUCATION AND +TRAINING + +2019 – 2022 +BA Social Research +Northbridge Institute +Public policy +LANGUAGE SKILLS + +English +Native +French +B2 (self-assessed) +SKILLS + +Research +Advanced +Interviews, synthesis, documentation +PROJECTS + +2025 +Open Guidance Map +Mapped public learning resources. +OTHER ACTIVITIES + +Community workshops and peer mentoring. +SYNTHETIC DESIGN PROPOSAL · NOT APPROVED +1 / 1 + +Keep: chronological gutter, blue section rules, broad content column. +Change: neutral identity, optional personal fields, plain-text fluency, user-authored sections. +Current Europass offers several layouts; this legacy structure is not a universal current specification. +Reference URL, access date, exact field mapping and unresolved reuse decisions: ../README.md and ../mapping.md + diff --git a/docs/research/europass/mapping.md b/docs/research/europass/mapping.md new file mode 100644 index 000000000..d8ff33d1c --- /dev/null +++ b/docs/research/europass/mapping.md @@ -0,0 +1,133 @@ +# Existing ResumeData to proposed visual fields + +Read against `b85d285b69843612e9d7f0ab802248982e7bf0ea`. The source of truth is +[data.ts](../../../packages/schema/src/resume/data.ts), with existing defaults in +[default.ts](../../../packages/schema/src/resume/default.ts) and visibility behavior in +[shared filtering](../../../packages/pdf/src/templates/shared/filtering.ts). +This document proposes presentation; it adds no fields or renderer behavior. + +Both fixture records were validated against the current Zod `resumeDataSchema`. The checked-in generated +`packages/schema/schema.json` rejects the current `picture.fit` field; it is stale relative to `data.ts` at +this revision. That unrelated generated-schema mismatch is recorded, not repaired in this research unit. + +The canonical SVG text nodes carry `data-source` paths into the matching object in +[synthetic-fixtures.json](synthetic-fixtures.json). Wrapped text uses the same path on each line. +Section titles are shown in uppercase in these English drawings; source strings retain their original case. +`proposal.annotation` means review metadata, not ResumeData: synthetic watermark, continuation labels and +page numbers. The repeated running name still comes from `basics.name`. + +## Header and shared fields + +| Proposed display | Existing path | Rule / absence behavior | +| --- | --- | --- | +| Name and running name | `basics.name` | Preserve full name; do not split first/last names or reorder culturally. Wrap long names. Empty name renders no invented label. | +| Professional headline | `basics.headline` | Optional text, wraps within the detail width. It is not an official occupational code. | +| Contact location | `basics.location` | One free string; no parsing into country/address. Do not invent a full postal address. | +| Email and phone | `basics.email`, `basics.phone` | Omit empty values and separators. Phone is empty in both fixtures; no number is fabricated. Future renderer uses existing link handling. | +| Personal website | `basics.website.url`, `.label` | Nonempty URL uses label when provided, URL otherwise. Overflow displays “Research portfolio.” SVGs illustrate text only; hyperlink behavior needs implementation checks. | +| Other personal detail | `basics.customFields[].text`, `.link`, `.icon` | Display user-authored text/link in order. Overflow shows availability. No semantic inference from text. There is no per-field hidden flag; empty text yields no visual row. | +| Optional photo | `picture.url`, `.hidden`, `.fit`, `.size`, `.rotation`, `.aspectRatio`, border/shadow fields | Both fixtures have no URL and `hidden: true`; no frame is displayed. Future visible photo uses existing upload/picture contract and preserves cover/contain choice. Suggested reading-start header frame is not visually approved. Failed image handling needs future verification. | +| Section heading | `summary.title`, `sections..title`, `customSections[].title` | Use authored title; empty title uses existing localized fallback. Do not replace custom titles with fixed Europass labels. | +| Section presence/order | `metadata.layout.pages[].main`, `.sidebar`, `sections.*.hidden`, `customSections[].hidden`, `summary.hidden` | Respect authored page/column order and visibility. Missing-from-layout is distinct from hidden. Fixtures choose one authored full-width page; physical overflow is illustrated separately. | +| Date gutter | Item `.period` or `.date` | Verbatim free text, including role periods. Wrap to fixed gutter; keep undated details aligned. No automatic chronological sort. The fixture itself is authored newest-first. | +| Rich description | Item `.description`, summary `.content`, custom summary item `.content` | Preserve supported paragraphs, lists, emphasis and links. These drawings only exercise paragraphs/lists. No HTML tags printed; no arbitrary HTML discarded by proposed renderer. Unsupported-rich-text handling remains implementation work. | +| Item website | Item `.website.url`, `.label`, `.inlineLink` | Preserve URL target; label or raw URL as display text. Inline-link preference must remain honored in future renderer. Fixture links all use `inlineLink: false`. | +| Icons and colors | Section `.icon`; profile/skill/interest `.icon`, `.iconColor`; `metadata.page.hideIcons`, `.hideSectionIcons` | Default proposal is quiet/text-led. Fixture icons are absent or suppressed. Nondefault icon settings are not demonstrated and must be tested before implementation approval. | + +## Built-in sections + +Each `items[]` entry also has `id` and `hidden`; identifiers never print. A section with no visible valid +items is omitted with its heading and rule. The table lists every content field, including blank optional fields. + +| Proposed section | Paths under `sections..items[]` | Presentation / fixture coverage | +| --- | --- | --- | +| Profiles | `profiles`: `network`, `username`, `website`, `icon`, `iconColor` | Network, user name, website label. Present only in overflow. Keep within section, do not duplicate in header. | +| Work experience | `experience`: `position`, `company`, `location`, `period`, `description`, `website`, `roles[]` | Position then organization/location, period in gutter. Overflow retains overall title/tenure and both individual roles. | +| Individual experience role | `experience.roles[]`: `id`, `position`, `period`, `description` | Role heading, independent period, description. No role hidden flag exists. Existing shared filtering excludes blank-position roles; parent visibility still applies. | +| Education and training | `education`: `degree`, `school`, `area`, `grade`, `location`, `period`, `description`, `website` | Qualification then institution, subject, supplied grade and location. Overflow includes all optional text fields except website. Grade is not an EQF level. | +| Projects | `projects`: `name`, `period`, `description`, `website` | Named project, date gutter, rich narrative. Overflow adds a long multi-paragraph project and an undated project with raw long URL. | +| Language skills | `languages`: `language`, `fluency`, `level` | Show language and supplied fluency verbatim. English/Native and French/B2 (self-assessed) are synthetic user-entered strings. No conversion from `level` to fluency or CEFR. | +| Skills | `skills`: `name`, `proficiency`, `level`, `keywords`, `icon`, `iconColor` | Show name, proficiency, comma-separated keywords. Keyword strings/order retained. Levels are intentionally hidden via existing `metadata.design.level.type: hidden`; no proficiency inferred. | +| Awards | `awards`: `title`, `awarder`, `date`, `description`, `website` | Title, awarder, supplied date, description. Overflow only. | +| Certifications | `certifications`: `title`, `issuer`, `date`, `description`, `website` | Title, issuer and supplied date; empty description/link omitted. Overflow only. No accreditation claim. | +| Publications | `publications`: `title`, `publisher`, `date`, `description`, `website` | Title, publisher and supplied date. Overflow only. No DOI field invented. | +| Volunteering | `volunteer`: `organization`, `location`, `period`, `description`, `website` | Organization, place, period and description. There is no dedicated role-title field; do not infer one. Overflow only. | +| Interests | `interests`: `name`, `keywords`, `icon`, `iconColor` | Name and keyword text, with configured icon behavior. Overflow only. | +| References | `references`: `name`, `position`, `phone`, `description`, `website` | Existing user-authored “Available upon request” string in overflow; no contact is invented. There is no structured reference-email field. | +| About me | `summary.content`, `.title`, `.hidden` | Existing summary supports optional narrative. Present in both records. This is separate from experience descriptions. | + +## Custom sections, omitted and unsupported fields + +| Concern | Existing representation | Decision | +| --- | --- | --- | +| Custom typed sections | `customSections[]`: `id`, `type`, shared section fields, `items[]` matching type | Same mapping as the matching built-in type. Preserve own title and authored layout ID. All 12 built-in types are structurally available as custom types; this fixture demonstrates a custom summary, not every custom variant. | +| Other activities | Custom `type: summary`, `items[].content` | Both records display community workshops and peer mentoring. No fabricated employer or dates. | +| Cover letter | Custom `type: cover-letter`, `items[].recipient`, `.content` | Supported by current model but outside this CV visual proposal; fixtures contain none. A future template must preserve existing cover-letter behavior or explicitly gate selection; silently dropping a visible cover letter is not acceptable. | +| Structured nationality, birth date/place, sex/gender, full address components, second phone/fax, driving licence | No dedicated typed fields in `basics` | Omitted from examples, not required. A user can author free text in `customFields`, but that is not a typed equivalent or automatic mapping. Never infer from names, photos, location or language. | +| Mother-tongue boolean or multiple structured native languages | `languages[].fluency` is free text only | No separate mother-tongue group inferred from “Native.” Keep supplied text alongside language. | +| Five CEFR dimensions: listening, reading, spoken interaction, spoken production, writing | No fields | Omit official reference matrix. A scalar `level` or single fluency text cannot populate it faithfully. | +| Language certificate linked to particular language/dimension | General certifications exist, no structured association | Keep as separate certification if user authored one. Do not guess association. | +| EQF/NQF/ISCED level, qualification IDs, occupation codes, business sector | No dedicated typed fields | Omit unless user explicitly wrote free text in existing description/area/custom content. No equivalence inferred from degree or grade. | +| Attachments, signed declaration, consent block, official Europass identifiers, XML payload, verification QR | No corresponding proposed CV field | Omitted. Existing website links do not establish attached documents, signatures or official interoperability. | +| Official branding/copyright footer | Not ResumeData | Omitted; reuse permission not established. Source attribution belongs in research note, not masquerading as official CV provenance. | +| Notes | `metadata.notes` | Never print. Overflow contains `PRIVATE_NOTES_SENTINEL` to make accidental disclosure detectable. | + +## Visibility, empty content and layout controls + +Existing filtering is the behavioral baseline: skip hidden sections/items, title-backed entries without their +required primary title, and blank-position experience roles. Those primary fields are `network`, `company`, +`school`, `name` (projects/skills/interests/references), `language`, `title` (awards/certifications/publications) +and `organization`. A missing optional field alone must not hide an otherwise valid item. + +Summary visibility currently checks nonempty trimmed content, not semantic emptiness of HTML. Do not claim +that `

` is already filtered correctly; future proposal tests must include it and settle any desired +change separately. The fixtures use populated summaries and empty item arrays, not malformed imported data. + +Overflow includes a hidden experience item, a hidden custom section and private notes. Their `HIDDEN_*` and +`PRIVATE_NOTES_*` tokens must not occur in any visual artifact. One-page empty sections do not render headings. +Separators and rules belong to visible content only. Blank date cells stay blank, never show “Present” or a dash. + +`columns`, `keepTogether`, `startOnNewPage`, `skills.layout`, authored pages/full-width/sidebar settings, +typography, colors, page format/margins/gaps, hyphenation and style rules already exist. The fixture explicitly +chooses a full-width A4 page, single-column sections, ordinary flow and no style rules. It retains the valid +existing `metadata.template: onyx` only to remain schema-compatible: importing this fixture currently selects +Onyx, **not this proposal**. No new template ID, date-width option or stylesheet behavior is encoded. + +## Pagination and long text proposal + +One-page and overflow SVGs are manual, deterministic illustrations. They do not exercise `packages/pdf`. +The three overflow drawings illustrate one authored page flowing onto physical pages, not editable per-page +overflow settings. No fixed page count or exact future line break is promised. + +Dates wrap inside a 128 pt reading-start gutter; detail starts remain aligned. Keep entry title with its first +detail line, and section heading with its first item. Allow a long entry to continue across pages without +truncation or repeated body text. In the study, the education description continues on page 2 as a complete +two-line paragraph; a continuation label is review metadata. Page 3 carries remaining sections without shrinking +font size to force two pages. Repeated running names/page numbers are intentional, not duplicated body content. + +Long names, headings, free-text dates, paragraphs and URLs must wrap; do not ellipsize, parse or normalize them. +The overflow contains an accented long name, wrapped role dates and undated project. Long unbroken URL glyphs +need break opportunities while retaining the original link target. Future renderer tests must add a single +entry longer than a page, bullets across breaks, manual page starts, nondefault columns and keep-together +settings. These cases are specified here but not established by the static study. + +## Localization, RTL, photo and accessibility review limits + +Use `metadata.page.locale` for existing translated fallback headings; preserve user-authored text, date strings +and titles. Do not translate content or uppercase text in languages where that harms meaning or shaping. +The proposal's uppercase English labels are a visual choice, not a localization algorithm. Font selection and +fallback should stay with existing PDF font registration, not be bundled into this research. + +RTL proposal: put label/date gutter at reading start (right), mirror alignment and optional photo placement, +keep email/URL/phone runs in their natural direction, and preserve logical source order. Current model has no +new direction field here; reuse the existing locale/direction contract after validating it. Arabic/Hebrew shaping, +mixed-direction punctuation, CJK glyphs and translated long headings need their own rendered fixtures before +implementation approval. The Latin-script drawings do not prove RTL or full localization coverage. + +No synthetic portrait was needed for the photo-free design. Before implementing the optional-photo variation, +review a visible-photo artifact using nonprivate synthetic imagery, both cover and contain, and long names +beside the frame. No stock/person photo or user upload was used in this package. + +Keep semantic section labels and logical extraction order even if visual arrangement changes. Tagged PDF, +screen-reader behavior, contrast under user colors and link semantics require Plan 31 coordination and real +export checks. Plain SVG text readability does not establish document accessibility conformance. diff --git a/docs/research/europass/synthetic-fixtures.json b/docs/research/europass/synthetic-fixtures.json new file mode 100644 index 000000000..17899cf96 --- /dev/null +++ b/docs/research/europass/synthetic-fixtures.json @@ -0,0 +1,768 @@ +{ + "onePage": { + "picture": { + "hidden": true, + "fit": "cover", + "url": "", + "size": 80, + "rotation": 0, + "aspectRatio": 1, + "borderRadius": 0, + "borderColor": "rgba(0, 0, 0, 0.5)", + "borderWidth": 0, + "shadowColor": "rgba(0, 0, 0, 0.5)", + "shadowWidth": 0 + }, + "basics": { + "name": "Alex Marin", + "headline": "Research coordinator", + "email": "alex.marin@example.invalid", + "phone": "", + "location": "Brussels, Belgium", + "website": { + "url": "", + "label": "" + }, + "customFields": [] + }, + "summary": { + "title": "About me", + "icon": "article", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "content": "

Research coordinator building clear public-service guidance.

" + }, + "sections": { + "profiles": { + "title": "", + "icon": "messenger-logo", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [] + }, + "experience": { + "title": "Work experience", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "exp-1", + "hidden": false, + "company": "Civic Atlas Lab", + "position": "Research coordinator", + "location": "Brussels, Belgium", + "period": "2023 – Present", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "", + "roles": [] + } + ] + }, + "education": { + "title": "Education and training", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "edu-1", + "hidden": false, + "school": "Northbridge Institute", + "degree": "BA Social Research", + "area": "Public policy", + "grade": "", + "location": "", + "period": "2019 – 2022", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "" + } + ] + }, + "projects": { + "title": "Projects", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "project-1", + "hidden": false, + "name": "Open Guidance Map", + "period": "2025", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "

Mapped public learning resources.

" + } + ] + }, + "skills": { + "title": "Skills", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "skill-1", + "hidden": false, + "icon": "", + "iconColor": "", + "name": "Research", + "proficiency": "Advanced", + "level": 0, + "keywords": ["Interviews", "synthesis", "documentation"] + } + ], + "layout": "default" + }, + "languages": { + "title": "Language skills", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "lang-1", + "hidden": false, + "language": "English", + "fluency": "Native", + "level": 0 + }, + { + "id": "lang-2", + "hidden": false, + "language": "French", + "fluency": "B2 (self-assessed)", + "level": 0 + } + ] + }, + "interests": { + "title": "", + "icon": "football", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [] + }, + "awards": { + "title": "", + "icon": "trophy", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [] + }, + "certifications": { + "title": "", + "icon": "certificate", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [] + }, + "publications": { + "title": "", + "icon": "books", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [] + }, + "volunteer": { + "title": "", + "icon": "hand-heart", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [] + }, + "references": { + "title": "", + "icon": "phone", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [] + } + }, + "customSections": [ + { + "title": "Other activities", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "custom-item-1", + "hidden": false, + "content": "

Community workshops and peer mentoring.

" + } + ], + "id": "other-activities", + "type": "summary" + } + ], + "metadata": { + "template": "onyx", + "layout": { + "sidebarWidth": 35, + "pages": [ + { + "fullWidth": true, + "main": ["summary", "experience", "education", "languages", "skills", "projects", "other-activities"], + "sidebar": [] + } + ] + }, + "page": { + "gapX": 4, + "gapY": 18, + "marginX": 36, + "marginY": 36, + "format": "a4", + "locale": "en-US", + "hideLinkUnderline": false, + "hideIcons": false, + "hideSectionIcons": true + }, + "design": { + "colors": { + "primary": "rgba(30, 85, 128, 1)", + "text": "rgba(32, 38, 43, 1)", + "background": "rgba(255, 255, 255, 1)" + }, + "level": { + "icon": "star", + "type": "hidden" + } + }, + "typography": { + "body": { + "fontFamily": "Arial", + "fontWeights": ["400"], + "fontSize": 10.5, + "lineHeight": 1.4 + }, + "heading": { + "fontFamily": "Arial", + "fontWeights": ["700"], + "fontSize": 10, + "lineHeight": 1.3 + } + }, + "notes": "", + "styleRules": [] + } + }, + "overflow": { + "picture": { + "hidden": true, + "fit": "cover", + "url": "", + "size": 80, + "rotation": 0, + "aspectRatio": 1, + "borderRadius": 0, + "borderColor": "rgba(0, 0, 0, 0.5)", + "borderWidth": 0, + "shadowColor": "rgba(0, 0, 0, 0.5)", + "shadowWidth": 0 + }, + "basics": { + "name": "Alexandra Noor Marin-López", + "headline": "Research coordinator for multilingual public-service information", + "email": "alex.marin@example.invalid", + "phone": "", + "location": "Brussels, Belgium", + "website": { + "url": "https://example.invalid/alexandra/research", + "label": "Research portfolio" + }, + "customFields": [ + { + "id": "availability", + "icon": "", + "text": "Available for cross-border project work", + "link": "" + } + ] + }, + "summary": { + "title": "About me", + "icon": "article", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "content": "

Research coordinator building clear public-service guidance.

" + }, + "sections": { + "profiles": { + "title": "Profiles", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "profile-1", + "hidden": false, + "network": "Portfolio", + "username": "alexandra", + "icon": "", + "iconColor": "", + "website": { + "url": "https://example.invalid/alexandra", + "label": "Selected writing", + "inlineLink": false + } + } + ] + }, + "experience": { + "title": "Work experience", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "exp-1", + "hidden": false, + "company": "Civic Atlas Lab", + "position": "Research coordinator", + "location": "Brussels, Belgium", + "period": "2023 – Present", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "

Supported a distributed team producing accessible guidance for community learning programmes.

", + "roles": [ + { + "id": "role-1", + "position": "Programme lead", + "period": "September 2024 – Present (part-time)", + "description": "

Led editorial planning across four working languages.

" + }, + { + "id": "role-2", + "position": "Research associate", + "period": "January 2023 – August 2024", + "description": "

Built an evidence catalogue for public learning services.

" + } + ] + }, + { + "id": "exp-2", + "hidden": false, + "company": "Open Learning Observatory", + "position": "Research assistant", + "location": "Leuven, Belgium", + "period": "Autumn 2021 – Summer 2022", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "roles": [], + "description": "

Collected public documentation and organised findings for volunteer reviewers.

" + }, + { + "id": "exp-hidden", + "hidden": true, + "company": "HIDDEN_ITEM_SENTINEL", + "position": "", + "location": "", + "period": "", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "roles": [], + "description": "" + } + ] + }, + "education": { + "title": "Education and training", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "edu-1", + "hidden": false, + "school": "Northbridge Institute", + "degree": "BA Social Research", + "area": "Public policy", + "grade": "Distinction", + "location": "Leuven, Belgium", + "period": "2019 – 2022", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "

Studied research methods, plain-language writing and collaborative service design.

" + } + ] + }, + "projects": { + "title": "Projects", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "project-1", + "hidden": false, + "name": "Open Guidance Map", + "period": "2025", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "

Mapped public learning resources.

Reviewed regional catalogues with volunteers, comparing the clarity of eligibility, learning outcomes and application guidance. Each record includes an attributed source and an editorial review date.

Documented ambiguous wording without guessing the provider’s intent. Workshop participants tested revised navigation labels and contributed examples of questions that the directory should answer.

Prepared a maintenance guide so future editors can update links, preserve context and flag missing evidence. The guide separates direct source statements from editorial interpretations.

" + }, + { + "id": "project-2", + "hidden": false, + "name": "Undated community handbook", + "period": "", + "website": { + "url": "https://example.invalid/learning/resources/community-handbook/review-notes", + "label": "", + "inlineLink": false + }, + "description": "

Collected workshop notes without inventing a project date.

" + } + ] + }, + "skills": { + "title": "Skills", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "skill-1", + "hidden": false, + "icon": "", + "iconColor": "", + "name": "Research", + "proficiency": "Advanced", + "level": 0, + "keywords": ["Interviews", "synthesis", "documentation"] + } + ], + "layout": "default" + }, + "languages": { + "title": "Language skills", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "lang-1", + "hidden": false, + "language": "English", + "fluency": "Native", + "level": 0 + }, + { + "id": "lang-2", + "hidden": false, + "language": "French", + "fluency": "B2 (self-assessed)", + "level": 0 + } + ] + }, + "interests": { + "title": "Interests", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "int-1", + "hidden": false, + "name": "Walking", + "icon": "", + "iconColor": "", + "keywords": ["Urban history", "public spaces"] + } + ] + }, + "awards": { + "title": "Awards", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "award-1", + "hidden": false, + "title": "Community research recognition", + "awarder": "Civic Learning Forum", + "date": "2025", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "

Recognised collaborative documentation work.

" + } + ] + }, + "certifications": { + "title": "Certifications", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "cert-1", + "hidden": false, + "title": "Accessible writing workshop", + "issuer": "Open Training Collective", + "date": "2024", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "" + } + ] + }, + "publications": { + "title": "Publications", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "pub-1", + "hidden": false, + "title": "A practical guide to learning directories", + "publisher": "Community Methods Review", + "date": "2025", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "" + } + ] + }, + "volunteer": { + "title": "Volunteering", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "vol-1", + "hidden": false, + "organization": "Neighbourhood Learning Circle", + "location": "Brussels, Belgium", + "period": "2022 – Present", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "

Facilitated peer mentoring sessions.

" + } + ] + }, + "references": { + "title": "References", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "ref-1", + "hidden": false, + "name": "Available upon request", + "position": "", + "phone": "", + "website": { + "url": "", + "label": "", + "inlineLink": false + }, + "description": "" + } + ] + } + }, + "customSections": [ + { + "title": "Other activities", + "icon": "none", + "columns": 1, + "hidden": false, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "custom-item-1", + "hidden": false, + "content": "

Community workshops and peer mentoring.

" + } + ], + "id": "other-activities", + "type": "summary" + }, + { + "title": "HIDDEN_SECTION_SENTINEL", + "icon": "none", + "columns": 1, + "hidden": true, + "keepTogether": false, + "startOnNewPage": false, + "items": [ + { + "id": "hidden-custom", + "hidden": false, + "content": "

HIDDEN_CONTENT_SENTINEL

" + } + ], + "id": "hidden-section", + "type": "summary" + } + ], + "metadata": { + "template": "onyx", + "layout": { + "sidebarWidth": 35, + "pages": [ + { + "fullWidth": true, + "main": [ + "profiles", + "summary", + "experience", + "education", + "projects", + "languages", + "skills", + "awards", + "certifications", + "publications", + "volunteer", + "interests", + "references", + "other-activities", + "hidden-section" + ], + "sidebar": [] + } + ] + }, + "page": { + "gapX": 4, + "gapY": 18, + "marginX": 36, + "marginY": 36, + "format": "a4", + "locale": "en-US", + "hideLinkUnderline": false, + "hideIcons": false, + "hideSectionIcons": true + }, + "design": { + "colors": { + "primary": "rgba(30, 85, 128, 1)", + "text": "rgba(32, 38, 43, 1)", + "background": "rgba(255, 255, 255, 1)" + }, + "level": { + "icon": "star", + "type": "hidden" + } + }, + "typography": { + "body": { + "fontFamily": "Arial", + "fontWeights": ["400"], + "fontSize": 10.5, + "lineHeight": 1.4 + }, + "heading": { + "fontFamily": "Arial", + "fontWeights": ["700"], + "fontSize": 10, + "lineHeight": 1.3 + } + }, + "notes": "PRIVATE_NOTES_SENTINEL", + "styleRules": [] + } + } +}