Changelog
Source:NEWS.md
CiteSource 1.0.0
First stable release, following acceptance on CRAN.
Bug fixes
-
compare_sources()now honorsinclude_references: whenTRUE, the bibliographic columns are joined back onto the source/label/string indicator matrix, matching the behavior ofcount_unique(). Previously the argument was silently ignored and only indicator columns were returned. -
calculate_detailed_records(): the Total row’sDistinct Recordsnow respectslabels_to_include. It previously used the unfiltered input, making the Total inconsistent with the filtered per-source rows and overstating distinct records when labels were restricted.
Improvements
-
create_detailed_record_table()andcreate_precision_sensitivity_table()redesigned for readability: related columns are grouped under spanner headers, the contribution/uniqueness percentages have clearer labels, Precision and Recall are formatted as percentages, and the Total row is visually distinguished as a summary.
CiteSource 0.2.1
CRAN release: 2026-06-16
New features
- Incremental deduplication:
dedup_citations_add_sources()adds new citations to a previously deduplicated set and deduplicates across both, preserving prior automatic and manual merge decisions and the originalrecord_idsprovenance. For the same data it yields the same unique set as deduplicating everything from scratch. Exposed in the Shiny app — re-upload a deduplicated set, add new citation files, and “Find duplicates” merges them in. Works inmanual = TRUEmode to surface new candidate pairs for review. - Deferred manual deduplication: run automatic dedup now and complete manual review later.
export_dedup_candidates()/reimport_dedup_candidates()persist and restore the$manual_dedupcandidate pairs, andexport_csv()gains amanual_dedup_completeflag (written as a column, read back byreimport_csv()) so downstream steps know whether review is still pending. Re-import, markresult == "match", and merge withdedup_citations_add_manual(). - Shiny app: re-importing a deduplicated set now shows a read-only source overview (records per source, and per label/string) on the upload page so you can see what is already in the set before adding more; the re-upload input accepts a candidate-pairs CSV and several files at once.
Bug fixes
-
reimport_csv()now reads all columns as character, matching the canonical (all-character) types produced bydedup_citations(). This is required so a reimported set can re-enterdedup_citations_add_manual()(and incremental re-deduplication) without column-type clashes. - Shiny app: the re-upload (re-import) input no longer errors when more than one file is selected; each file is routed by content (deduplicated set vs. candidate-pairs CSV vs. RIS).
CiteSource 0.2.0
New features
-
read_citations()now warns whencite_labelvalues are outside the standard vocabulary (search,screened,final), since phase-analysis functions depend on those exact strings.
Bug fixes
-
calculate_phase_records():n_distinct()called as a terminal pipe no longer throws an error; fixed by replacing withsummarise() |> pull(). -
calculate_initial_records()/calculate_detailed_records(): separator regex inseparate_rows()changed from","to",\\s*"so sources with spaces after commas are split correctly. -
generate_apa_reference(): NA DOI values no longer cause an error instr_detect(); handled withcase_when(is.na(doi) ~ NA_character_, ...). - Shiny app —
summaryPrecTab:n_uniquewas referenced without therv$prefix, causing a scope error; fixed. - Shiny app —
manual_dedup_dt:columnDefstargetsnow computed as 0-based integer indices rather than column name strings, matching the DT API. -
count_unique()/compare_sources(): added!is.na()guard alongside!= ""so NA values incite_source,cite_label,cite_stringno longer cause filter or pivot errors. - Shiny app —
rv$pairs_to_check[,1:36]subsetting removed; full data frame passed directly.
Performance
-
generate_apa_citation()andgenerate_apa_reference(): allrowwise()calls replaced withpurrr::map2_chr()andpurrr::pmap_chr(), avoiding per-row dplyr group overhead. - Shiny app:
compare_sources()is now computed once in a shared reactive and consumed by both the heatmap and upset plot, halving the work on each render. - Shiny app: multi-value column filtering replaced from per-row
sapply+str_splitto vectorizedstrsplit+vapplyvia a file-scope helper.filter_multivalue_col.
CRAN / dependency changes
- ASySD deduplication functions vendored directly into
R/asys_dedup.R(GPL-3, with attribution to CAMARADES / Kaitlyn Hair); the GitHub-onlyASySDpackage is no longer a dependency. -
Remotes:field removed from DESCRIPTION. - New imports:
cli,igraph,parallelly,RecordLinkage,utf8. - Removed from imports:
ASySD,plogr. - Added to Suggests:
bslib. -
.onLoadside effects removed;shiny.maxRequestSizeis no longer set at package load time. -
%>%re-export removed; use the native|>pipe.
Deprecations
-
record_counts()→calculate_initial_records() -
calculate_record_counts()→calculate_detailed_records() -
calculate_phase_count()→calculate_phase_records() -
record_counts_table()→create_initial_record_table() -
record_summary_table()→create_summary_record_table() -
precision_sensitivity_table()→create_phase_record_table()
All deprecated functions remain callable with a .Deprecated() warning pointing to their replacements.