Issue #409: Bug: "Open Source Contributions" resume section is silently dropped, but open_source is the highest-weighted scoring category (35/100)
Recommended: merge #410
feat: extract and score Open Source Contributions resume sections
How it breaks
The path is the model's reasoning. Each box is a citation checked against the code.
What's wrong
The pipeline has no open-source contributions section. Extraction only runs six hardcoded section prompts. The JSONResume schema has no field to hold such data. The text serializer only writes existing schema fields.Show full explanation
A dedicated "Open Source Contributions" section therefore never reaches the evaluator, and open_source is scored without it. Only the "projects" prompt (projects.jinja) was recently told to include open source work. That is a partial, indirect path, and it doesn't cover a separate section reliably. The report's line numbers are slightly off: pdf.py is at line 268, not 269, and JSONResume is at models.py:211, not 193. The mechanism matches the report.How to reproduce
- Create a PDF resume with a distinct 'Open Source Contributions' section listing merged PRs, such as litellm, llama_index and instructor.
- Run: python score.py ./resume/sample.pdf --role software_engineering_intern
- Open cache/resumecache_*.json and confirm no open-source contribution data is stored. Any such text appears at most as a project entry, and only if the projects prompt picked it up.
- Check the open_source category evidence. It says there are no direct contributions to external projects.
- Optionally, add a print of convert_json_resume_to_text(resume) and confirm no open source contributions section appears in the evaluator input.
Evidence
Each citation was checked against the code at e0ece80.
Extraction only runs these six section prompts, so there is no open_source or contributions pass.
The result dict has fixed keys, none for open source, so nothing else is collected.
The schema has no open source contributions field (fields at lines 214-225), so the data has nowhere to be stored.
The serializer only emits sections for existing schema fields (basics, work, education, skills, projects, ...), so the evaluator prompt cannot include open source contributions.
The only partial handling is inside the projects prompt. There is no dedicated section, so a separate OSS section is not reliably captured.
Pull requests
Verdicts are judged from the diff, not run. Merge status is a real git check against e0ece80.
It adds an open_source_contributions extraction pass in pdf.py, a schema field and model in models.py, and a serializer block in transform.py, which removes all four causes. The description also lists a template and a criteria change that the cut-off diff doesn't show.
13 PRs that don't fix itShow
It only changes how section text is segmented and passed to the six existing extractors, and adds no open-source section, schema field or serialization.
It adds certificates and volunteer_experience extractors, not an open source section, and it adds no schema or serializer support for either.
It adds certificates and publications section models and extractors, and nothing for open source.
It rewrites PDF text-extraction validation and reformats code, and the six-section list, schema and serializer stay as they were.
It adds a scholarships section through the same pipeline layers, but nothing for open source contributions, and projects.jinja is unchanged.
Its pdf.py and models.py changes are the same certificates and publications additions as #70, and it adds nothing for open source.
It replaces the per-section calls with a header-based splitter whose known_headers map has no open source entry, so an OSS section is not extracted. It also adds no schema field or serialization.
It fixes fork-contribution detection in the GitHub enrichment (github.py) and refactors LLM response parsing, so resume-section extraction, schema and serialization are untouched.
It adds a languages section, parallel extraction, and repo/live URL handling for projects, but no open source section or serialization.
It adds a publications extractor and CSV export, and the Publication model already exists in the schema, but nothing covers open source contributions.
It only makes sections other than basics optional on failure, and the section list still has no open source entry.
It adds a post-scoring resume rewriter and a scoring refactor, and the extraction sections, JSONResume schema and text serializer still lack open source.
It expands the prompt templates and only mentions Open Source as a silent project-type hint in projects.jinja, with no dedicated section, schema field or serializer change.
What this packet does not prove
- Citations are checked against the code. The explanation that links them, the order of the chain, and any claim about outside systems (APIs, libraries) are the model's reasoning and are not checked.
- PR verdicts are judged from the diff, not run. No PR was applied or tested.
- PRs were shortlisted because they change a cited line or mention the issue. A fix in another file, or a PR whose line numbers have drifted, is missed, so this is not proof that no other PR fixes it.