Repository navigation
Conversation
The community API's copy of the Retraction Watch loader added the OriginalPaperDOI of every row. The dataset also lists corrections, expressions of concern and reinstatements in RetractionNature, so a paper that was only corrected was flagged as retracted, ranked down in the integrity stage and reported by the living-review monitor. It now keeps only rows whose RetractionNature is "Retraction" (trimmed, case-insensitive), as the engine's loader always has, and reads the file as utf-8-sig like the engine, so a byte-order mark cannot rename the first column. Closes #216 Signed-off-by: L4XB <lukas.buck@e-mail.de>
|
I have read and agree to the SixSentences CLA v1.0. |
|
Thanks for the pull request. One required step is still open, and it is not one Contributor License Agreement. This project records acceptance as a public The Two further gates apply to every contribution and are described in |
The retraction loader changed and its connector test is new, so the manifest records their hashes: python scripts/audit_community_export.py . --refresh-manifest Signed-off-by: L4XB <lukas.buck@e-mail.de>
|
@copilot resolve the merge conflicts in this pull request |
…n-nature # Conflicts: # CHANGELOG.md Co-authored-by: L4XB <103962359+L4XB@users.noreply.github.com>
Resolved: I merged |
Closes #216.
Summary
The community API's copy of the Retraction Watch loader (
sixsentences_server/connectors/retractions.py) added theOriginalPaperDOIof every row of the dataset. The dataset also lists corrections, expressions of concern and reinstatements, in itsRetractionNaturecolumn. So a paper that had only been corrected was flagged as retracted:The engine's loader has always kept only
RetractionNature"Retraction". This applies the same rule in the API copy: trimmed and case-insensitive, so" retraction "counts. The file is also read asutf-8-sig, as the engine reads it, so a byte-order mark cannot rename the first column.Behavior and compatibility
load_retracted_dois()returns fewer DOIs, namely only those of retracted papers. Every caller inherits the fix: the integrity stage inpipeline/run.py, the routes inapi/app.py, andrecheck_retractionsinliving/monitor.py.Validation
tests/test_retractions_connector.py(new): 3 passed.cd services/api && uv run --frozen --no-sync pytest -q: 3454 passed, 2 skipped (the PostgreSQL tests that need the CI service).ruff check src tests: all checks passed.ruff format --checkon both files: formatted.mypyon the connector: no issues.python scripts/audit_community_export.py .: passed (423 files) after--refresh-manifest. The refresh recorded only the new test file and the changed connector.check_dco.py: DCO sign-offs validated for both commits.The engine, web app, browser extension, Companion and self-hosting are unaffected.
Review boundaries
The loader reads the same local CSV, so there is no new data flow, dependency, network call or processor, and no UI change. On the research side, the integrity signal now means "retracted", which is what it was labelled.
Source-release hygiene
No data is committed: the tests write their CSV files into a temporary directory.
CHANGELOG.mdhas an entry under Unreleased → Fixed. Both commits are signed and carry my DCO sign-off, and the CLA acceptance sentence follows as a standalone comment.Visual evidence
None (no UI change).