Skip to content

Conversation

@ypriverol
Copy link
Member

@ypriverol ypriverol commented Dec 20, 2025

PR checklist

  • This comment contains a description of changes (with reason).
  • If you've fixed a bug or added code that should be tested, add tests!
  • If you've added a new tool - have you followed the pipeline conventions in the contribution docs
  • If necessary, also make a PR on the bigbio/quantms branch on the nf-core/test-datasets repository.
  • Make sure your code lints (nf-core pipelines lint).
  • Ensure the test suite passes (nextflow run . -profile test,docker --outdir <OUTDIR>).
  • Check for unexpected warnings in debug mode (nextflow run . -profile debug,test,docker --outdir <OUTDIR>).
  • Usage Documentation in docs/usage.md is updated.
  • Output Documentation in docs/output.md is updated.
  • CHANGELOG.md is updated.
  • README.md is updated (including new tool citations and authors/contributors).

Summary by CodeRabbit

  • New Features

    • MS2Features rescoring (incl. fine‑tuning), Onsite PTM localization, MultiQC module, Thermo RAW conversion, DIA (.dia) passthrough, TMT‑18plex correction matrix, new test profiles.
  • Bug Fixes

    • Corrected statistical contrast construction and minor output formatting issues.
  • Chores

    • Nextflow bumped to 25.04.0; Python to 3.14; CI/workflows and container images updated; devcontainer setup added; removed legacy workspace config.
  • Documentation

    • README, usage docs and CHANGELOG expanded; supported file formats and assay-name validation documented.

✏️ Tip: You can customize this high-level summary in your review settings.

ypriverol and others added 30 commits August 20, 2025 21:55
fixing of bug in msstats_tmt.R (Issue: Error in the msstats_tmt.R function parse_contrasts #577)
Pass correct flag to ProteinQuantifier
fixed rescoring range bugs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com>
Copy link
Collaborator

@jpfeuffer jpfeuffer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After my comments, good to go.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In @modules/local/utils/msrescore_features/main.nf:
- Around line 25-34: The current logic sets ms2_model_dir using ${model_weight}
without checking model_weight; update the branch that handles
params.ms2features_model_dir to first validate that model_weight is defined and
non-empty (not null, empty string, or whitespace) before using it, and if
validation fails fall back to the safe default "--ms2_model_dir ./" (or emit a
clear error/exit if you prefer); specifically modify the condition around
params.ms2features_model_dir and the assignment to ms2_model_dir so it uses the
validated model_weight only when present, otherwise uses the default.
- Around line 40-61: The tolerance assignment logic for ms2 features
(ms2_tolerance, ms2_tolerance_unit) is confusing due to multiple overwrites;
simplify by: set defaults from meta['fragmentmasstolerance'] and
meta['fragmentmasstoleranceunit'] first, then if using_ms2pip is true override
only when necessary—compute fragment_unit_lower =
meta['fragmentmasstoleranceunit'].toLowerCase() and if it endsWith('da') keep
meta tolerance (and set ms2_tolerance_unit='Da'), else set ms2_tolerance =
params.ms2features_tolerance and ms2_tolerance_unit =
params.ms2features_tolerance_unit (and emit the existing log.warn when unit
unsupported/ppm); remove the unconditional assignment ms2_tolerance =
params.ms2features_tolerance inside the using_ms2pip block so values are
assigned exactly once according to the clarified branches.
- Around line 36-38: params.ms2features_generators may be null or ambiguous; add
a null/empty guard, normalize its value once (e.g., toLowerCase()), then compute
using_ms2pip and using_alphapeptdeep from that normalized string; explicitly
handle the three cases—only ms2pip, only alphapeptdeep, and both present (either
throw a clear validation error or enforce a documented priority), and handle
neither present by setting a safe default or failing fast with a validation
error; ensure any downstream logic that mutates ms2_tolerance_unit only runs in
the branch where a generator was unambiguously selected.
- Around line 94-107: The code calls
meta['fragmentmasstoleranceunit'].toLowerCase() (used to set ms2_tolerance_unit)
without ensuring meta['fragmentmasstoleranceunit'] is defined when reading from
SDRF (row.FragmentMassToleranceUnit); add a null/undefined check right after
assigning from row.FragmentMassToleranceUnit and either set a safe default
('Da') or throw a validation error indicating the SDRF is missing
fragmentmasstoleranceunit, then use the validated variable for the
.toLowerCase() call so .toLowerCase() never runs on null/undefined.
🧹 Nitpick comments (1)
CHANGELOG.md (1)

15-20: Minor wording improvement in the Changed section.

Line 17 could be slightly clarified for consistency: "Update quantms-utils 0.0.24 and pmultiqc 0.0.39" reads more naturally as "Update quantms-utils to 0.0.24 and pmultiqc to 0.0.39". Similarly, line 18 is wordy; consider: "Changed enable_diann_mztab default from true to false; mzTab for DIA pipelines now requires explicit --enable_diann_mztab true parameter."

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 56db5be and 5b69680.

📒 Files selected for processing (2)
  • CHANGELOG.md
  • modules/local/utils/msrescore_features/main.nf
🔇 Additional comments (4)
CHANGELOG.md (1)

6-36: Well-structured release notes for 1.7.0.

The changelog entry is well-organized with clear sections for Added, Changed, Fixed, Dependencies, and Deprecations. Cross-references between PR numbers and versions are consistent. The deprecation section (lines 33-36) provides helpful context for the migration from luciphor to onsite parameters, making the breaking change explicit.

modules/local/utils/msrescore_features/main.nf (3)

69-91: LGTM! Parameter renaming and debug flag addition look good.

The parameter naming has been consistently updated to the ms2features_* namespace, and the new debug flag provides useful logging control. The conditional logic is clear and straightforward.


5-7: Address inconsistent container versions and missing documentation.

Version 0.0.14 is not documented in the CHANGELOG and is used inconsistently across related processes. The msrescore_features and msrescore_fine_tuning processes use 0.0.14, while psm_clean and spectrum_features still use 0.0.13. Either complete the version upgrade across all four processes or document why they use different versions. Additionally, ensure the CHANGELOG is updated to reflect the 0.0.14 release.


10-10: All invocations of MSRESCORE_FEATURES have been properly updated to pass the new expanded input tuple. Both code paths (with and without fine-tuning) correctly construct the 5-element tuple with meta, idxml, mzml, model_weight, and search_engine in the correct order.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@jpfeuffer

This comment was marked as resolved.

@jpfeuffer

This comment was marked as outdated.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
nextflow_schema.json (1)

569-696: Critical: Extensive MS2 rescoring parameter renaming lacks CHANGELOG and migration documentation.

The schema shows a major breaking refactoring of rescoring parameters with complete namespace migration:

  • ms2rescorems2features_enable
  • feature_generatorsms2features_generators
  • calibration_set_sizems2features_calibration
  • ms2_modelms2features_model and related model parameters

Old parameter names are completely removed from the schema (not present alongside new ones), confirming this is a full breaking change rather than additive.

Critical gap: The CHANGELOG (version 1.7.0) documents the quantms-rescoring update to v0.0.13 supporting transfer learning but contains zero documentation of these parameter renames. No migration guide exists in the documentation.

This requires:

  • CHANGELOG entry documenting all parameter name changes and mappings
  • Migration guide for users upgrading from previous versions
  • Updated documentation in docs/usage.md
🤖 Fix all issues with AI agents
In @nextflow_schema.json:
- Around line 440-532: The changelog mentions renaming luciphor_* parameters to
onsite_* but the mapping is incomplete and there is no migration documentation;
add a migration guide and update docs to enumerate all parameter mappings (e.g.,
luciphor_algorithm → onsite_algorithm, luciphor_fragment_method →
onsite_fragment_method, luciphor_fragment_tolerance → onsite_fragment_tolerance,
luciphor_fragment_error_units → onsite_fragment_error_units, luciphor_add_decoys
→ onsite_add_decoys, luciphor_neutral_losses → onsite_neutral_losses,
luciphor_decoy_mass → onsite_decoy_mass, luciphor_decoy_neutral_losses →
onsite_decoy_neutral_losses, luciphor_threads → onsite_threads,
luciphor_min_psms → onsite_min_psms, luciphor_disable_split_by_charge →
onsite_disable_split_by_charge, luciphor_compute_all_scores →
onsite_compute_all_scores, luciphor_debug → onsite_debug), add a migration
document (e.g., migration.md) and a parameter mapping table in the main usage
docs showing old → new names and defaults, and update CHANGELOG.md to reference
that migration guide; also add a note in the schema or UI help_text for each
onsite_* field pointing to the migration guide so users of the old luciphor
module can find the mapping.
- Around line 1383-1399: The description for the enable_pmultiqc property is
inconsistent with its actual default; update the "description" string for
enable_pmultiqc to indicate the true default (enabled/true) instead of
"'false'". Locate the enable_pmultiqc JSON object and modify its description to
reflect that pmultiqc report generation is enabled by default (e.g., change
"default: 'false'" to "default: true" or similar wording) while leaving the
"default": true field unchanged.
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5b69680 and 7d53f46.

📒 Files selected for processing (1)
  • nextflow_schema.json
🔇 Additional comments (8)
nextflow_schema.json (8)

389-412: LGTM: Sensible defaults for mass range filters.

The explicit default values for precursor and fragment m/z ranges (400-2400 and 100-1800 respectively) are appropriate for typical proteomics experiments and improve the schema's usability.


835-841: LGTM: Sensible default for quantification activation method.

Adding "default": "HCD" with explicit enum values is appropriate, as HCD (Higher-energy Collisional Dissociation) is the most common fragmentation method in modern quantitative proteomics workflows.


1282-1287: LGTM: Explicit default for contrasts parameter.

Adding "default": "pairwise" makes the default behavior explicit and improves schema documentation. This likely matches the previous implicit behavior.


1115-1121: No behavior change—this makes the implicit default explicit.

The lfq_intensity_threshold default of 1000.0 matches the existing default already defined in nextflow.config (line 199: lfq_intensity_threshold = 1000). The schema is simply making this implicit default explicit and was already documented in the CHANGELOG. The parameter is passed to OpenMS as ${params.lfq_intensity_threshold} in the workflow.


1257-1262: This is an intentional breaking change from PR #614. The enable_diann_mztab default was changed from true to false. Users previously relying on automatic mzTab generation for DIA-NN results must now explicitly pass --enable_diann_mztab true. This change and its impact are documented in the CHANGELOG.


1551-1562: No action needed. The help parameter correctly uses type ["boolean", "string"] to support topic-specific help. The codebase explicitly handles string values via instanceof String check in subworkflows/nf-core/utils_nfschema_plugin/main.nf, passing them to the paramsHelp() function. This design allows users to run --help topic_name for targeted help output.

Likely an incorrect or invalid review comment.


84-116: Document these parameter defaults in CHANGELOG.md.

The parameters validate_ontologies, skip_factor_validation, and use_ols_cache_only all have "default": true set in nextflow_schema.json (lines 88, 101, 114), but this is not documented in CHANGELOG.md. These defaults should be explicitly documented in release notes, particularly if they represent changed behavior from previous versions.


69-75: The "default": true addition to export_decoy_psm formalizes existing behavior already set in nextflow.config (line 137: export_decoy_psm = true), so this is not a breaking change. The implementation in modules/local/utils/psm_conversion/main.nf correctly handles both true and false values, constructing the command appropriately in each case.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @nextflow_schema.json:
- Around line 88-89: The schema currently sets skip_factor_validation default
true while validate_ontologies default true, creating inconsistent validation
behavior; either align the defaults (set both to true for permissive/offline
mode or both to false for strict validation) or update the help_text for
skip_factor_validation and validate_ontologies to explicitly state the intended
interaction and rationale. Locate the JSON entries for "skip_factor_validation"
and "validate_ontologies" (and the other occurrences with the same keys) and
either change the "default" booleans to match or expand their "help_text"
strings to clarify that ontology validation may still run when factor validation
is skipped (or vice versa), ensuring all occurrences are updated consistently.
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7d53f46 and 97cf63a.

📒 Files selected for processing (1)
  • nextflow_schema.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (14)
  • GitHub Check: Docker Tests (latest-everything, test_tmt)
  • GitHub Check: Docker Tests (latest-everything, test_dda_id_fine_tuning)
  • GitHub Check: Docker Tests (latest-everything, test_tmt)
  • GitHub Check: Docker Tests (25.04.0, test_localize)
  • GitHub Check: Run pipeline with test data (25.04.0, test_localize, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_dda_id_ms2pip, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_dia, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_dda_id_fine_tuning, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_dia, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_lfq, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_tmt, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_localize, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_dda_id_alphapeptdeep, docker)
  • GitHub Check: Run pipeline with test data (25.04.0, test_dda_id_ms2pip, docker)
🔇 Additional comments (10)
nextflow_schema.json (10)

29-30: LGTM!

Adding the "format": "directory-path" validation to the output directory parameter is a good improvement for input validation.


73-74: LGTM! Behavior change to note.

Setting export_decoy_psm default to true changes the default behavior—decoy PSMs will now be exported by default. This is reasonable for analysis purposes, but ensure this is documented in release notes.


392-411: LGTM!

The default m/z ranges are reasonable for typical mass spectrometry experiments:

  • Precursor: 400-2400 Da covers most peptides
  • Fragment: 100-1800 Da is appropriate for MS/MS

839-840: LGTM!

Setting quant_activation_method default to "HCD" is appropriate, as it's the most common fragmentation method for modern mass spectrometers.


1118-1122: LGTM!

Setting lfq_intensity_threshold default to 1000.0 is appropriate for filtering out low-quality features in label-free quantification.


1261-1261: Note the behavior change.

Setting enable_diann_mztab default to false means DIA-NN results won't be exported to mzTab format by default. This reduces output size but requires users to explicitly enable mzTab export if needed. Ensure this is documented in release notes.


1286-1287: LGTM!

Setting contrasts default to "pairwise" is appropriate for typical differential expression analysis scenarios.


1387-1400: LGTM!

The quality control defaults are well-chosen:

  • enable_pmultiqc: true enables comprehensive QC reporting
  • pmultiqc_idxml_skip: true reduces processing overhead
  • contaminant_string: "CONT" is a standard convention

1552-1554: The help parameter type definition is correct and intentional.

The "type": ["boolean", "string"] definition supports two distinct usage patterns: --help as a boolean flag displays the general help message, while --help <topic> with a string argument displays topic-specific help. This dual-type design is validated and handled directly in the code (see subworkflows/nf-core/utils_nfschema_plugin/main.nf line 41, which checks params.help instanceof String), so no changes are needed.

Likely an incorrect or invalid review comment.


569-696: Parameter migration to ms2features_* namespace is complete and correctly implemented.

The extensive addition of ms2features_* parameters and the rename from ms2rescore to ms2features_enable has been properly completed across the codebase:

  • subworkflows/local/dda_id/main.nf correctly uses params.ms2features_range (line 46)
  • msrescore_fine_tuning module correctly uses new parameters: force_transfer_learning, epoch_to_train_ms2, transfer_learning_test_ratio
  • subworkflows/local/peptide_database_search/main.nf correctly uses all new parameters: ms2features_enable, ms2features_model_dir, ms2features_fine_tuning, ms2features_generators, ms2features_snr, ms2features_range
  • No old ms2rescore or rescore_range parameter references remain

The defaults in nextflow_schema.json are well-chosen and align with recommended practices (calibration: 0.15, generators: "deeplc,alphapeptdeep", auto-select enabled by default).

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @CHANGELOG.md:
- Line 18: Reword the CHANGELOG entry to clarify the default change for
enable_diann_mztab; replace the awkward phrase "enable_diann_mztab from true to
false as default" with a clear sentence such as "Changed enable_diann_mztab
default from true to false" or "enable_diann_mztab now defaults to false instead
of true" and keep the note about DIA pipelines and the CLI parameter
--enable_diann_mztab true.
🧹 Nitpick comments (1)
CHANGELOG.md (1)

6-6: Clarify the release date format for international audiences.

The date format [08/01/2026] is potentially ambiguous (could be interpreted as January 8th or August 1st depending on locale). For clarity across regions, consider using ISO 8601 format ([2026-01-08]) or spelling out the month name (e.g., [January 8, 2026]), especially since other entries follow DD/MM/YYYY convention (e.g., line 37 shows [13/08/2025]).

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 609bb8b and b74fb9b.

📒 Files selected for processing (1)
  • CHANGELOG.md
🔇 Additional comments (1)
CHANGELOG.md (1)

11-11: Verify ms2features module and migration guide references.

The AI summary mentions "adds ms2features" as a major feature, but the changelog entry (line 11) refers to this as "transfer learning module for MS2 intensity prediction" (PR 629). Additionally, line 35 references a migration guide at docs/usage.md#migrating-from-luciphor_-to-onsite_-parameters-version-170. Verify that:

  1. ms2features is the same as or correctly named within PR 629, or if it's a separate module that should be listed in the Added section.
  2. The migration guide section exists and uses the exact anchor/path specified.

Also applies to: 35-35

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @CHANGELOG.md:
- Around line 33-36: Update the broken migration guide anchor in CHANGELOG.md by
replacing the incorrect link fragment
`#migrating-from-luciphor_-to-onsite_-parameters-version-170` with the correct
GitHub anchor `#migrating-from-luciphor-to-onsite-parameters-version-1.7.0` in
the line referencing the Migration Guide so the link points to the `Migrating
from luciphor to onsite parameters (Version 1.7.0)` heading in docs/usage.md.
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b74fb9b and 8887921.

📒 Files selected for processing (1)
  • CHANGELOG.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (20)
  • GitHub Check: Docker Tests (25.04.0, test_lfq)
  • GitHub Check: Docker Tests (25.04.0, test_dda_id_alphapeptdeep)
  • GitHub Check: Docker Tests (latest-everything, test_dda_id_alphapeptdeep)
  • GitHub Check: Docker Tests (latest-everything, test_dda_id_fine_tuning)
  • GitHub Check: Docker Tests (latest-everything, test_lfq)
  • GitHub Check: Docker Tests (latest-everything, test_dda_id_ms2pip)
  • GitHub Check: Docker Tests (25.04.0, test_tmt_corr)
  • GitHub Check: Docker Tests (25.04.0, test_tmt)
  • GitHub Check: Docker Tests (latest-everything, test_localize)
  • GitHub Check: Docker Tests (25.04.0, test_dda_id_ms2pip)
  • GitHub Check: Docker Tests (latest-everything, test_tmt)
  • GitHub Check: Docker Tests (latest-everything, test_tmt_corr)
  • GitHub Check: Docker Tests (25.04.0, test_localize)
  • GitHub Check: Docker Tests (latest-everything, test_dia)
  • GitHub Check: Docker Tests (25.04.0, test_dia)
  • GitHub Check: Docker Tests (latest-everything, test_lfq)
  • GitHub Check: Docker Tests (25.04.0, test_tmt_corr)
  • GitHub Check: Docker Tests (latest-everything, test_tmt)
  • GitHub Check: Docker Tests (25.04.0, test_dda_id_fine_tuning)
  • GitHub Check: Docker Tests (25.04.0, test_localize)
🔇 Additional comments (1)
CHANGELOG.md (1)

6-36: Changelog entry structure is clear and well-organized.

The 1.7.0 entry follows the established format with clear sections for Added, Changed, Fixed, Dependencies, and Deprecations. PR references are properly linked. The deprecation note provides helpful context about the luciphor-to-onsite migration with guidance on where to find additional details.

One observation: PR references include 626, 627, 629, 614, 615, 619, and 635—some are higher-numbered than the current PR (625). If these represent planned/concurrent contributions for the 1.7.0 release, this is reasonable for a coordinated release. Otherwise, verify the PR numbering is accurate.

Comment on lines +33 to +36
### `Deprecations`

- [626](https://github.com/bigbio/quantms/pull/626) Removed luciphor-specific parameters: `luciphor_neutral_losses`, `luciphor_decoy_mass`, `luciphor_decoy_neutral_losses`. These have been replaced with onsite parameters: `onsite_neutral_losses`, `onsite_decoy_mass`, `onsite_decoy_neutral_losses`. The new onsite module provides support for multiple PTM localization algorithms (AScore, PhosphoRS, and LucXor) with unified parameter naming. See the [Migration Guide](docs/usage.md#migrating-from-luciphor_-to-onsite_-parameters-version-170) in the documentation for a complete parameter mapping table and migration instructions.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if docs/usage.md exists and search for migration guide sections
if [ -f "docs/usage.md" ]; then
  echo "=== File found: docs/usage.md ==="
  # Search for headings related to migration/luciphor/onsite
  echo "=== Searching for migration guide headings ==="
  grep -E "^#+.*[Mm]igrat|^#+.*[Ll]uciphor|^#+.*[Oo]nsite" docs/usage.md | head -20
  
  # Extract all markdown headings to inspect format
  echo ""
  echo "=== All headings in docs/usage.md (for context) ==="
  grep -E "^#+\s" docs/usage.md | head -30
else
  echo "docs/usage.md not found"
  # Check if docs directory exists at all
  if [ -d "docs" ]; then
    echo "docs/ directory exists. Files:"
    ls -la docs/
  else
    echo "docs/ directory does not exist"
  fi
fi

Repository: bigbio/quantms

Length of output: 1078


🏁 Script executed:

#!/bin/bash
# Get the exact heading from the file without grep escaping
echo "=== Raw heading from docs/usage.md ==="
sed -n '/### Migrating from luciphor/p' docs/usage.md

# Show what GitHub would generate as an anchor
echo ""
echo "=== Expected GitHub anchor (lowercase, spaces→hyphens, special chars removed) ==="
# Extract the heading text and convert to GitHub anchor format
HEADING=$(sed -n '/### Migrating from luciphor/p' docs/usage.md | sed 's/^### //' | tr '[:upper:]' '[:lower:]' | sed 's/[*]//g' | sed 's/ /-/g' | sed 's/[()]//g')
echo "migrating-from-${HEADING}"

# Show the anchor in CHANGELOG.md
echo ""
echo "=== Anchor used in CHANGELOG.md ==="
grep "#migrating-from-luciphor" CHANGELOG.md

Repository: bigbio/quantms

Length of output: 993


🏁 Script executed:

#!/bin/bash
# Let me compute the correct GitHub anchor format more carefully
echo "=== Analyzing anchor format ==="
HEADING_TEXT="Migrating from luciphor** to onsite** parameters (Version 1.7.0)"
echo "Original heading: $HEADING_TEXT"
echo ""
# GitHub anchor generation: lowercase, remove special chars except hyphens, replace spaces with hyphens
CORRECT_ANCHOR=$(echo "$HEADING_TEXT" | \
  tr '[:upper:]' '[:lower:]' | \
  sed 's/\*\*//g' | \
  sed 's/[()]//g' | \
  sed 's/ /-/g' | \
  sed 's/--/-/g')
echo "Correct anchor should be: #$CORRECT_ANCHOR"
echo ""
echo "Anchor in CHANGELOG.md: #migrating-from-luciphor_-to-onsite_-parameters-version-170"
echo ""
echo "Match? $([ "#$CORRECT_ANCHOR" = "#migrating-from-luciphor_-to-onsite_-parameters-version-170" ] && echo 'YES' || echo 'NO - LINK IS BROKEN')"

Repository: bigbio/quantms

Length of output: 372


Fix the broken migration guide link anchor.

Line 35 references the migration guide with an incorrect anchor. The heading in docs/usage.md is ### Migrating from luciphor** to onsite** parameters (Version 1.7.0), which generates the GitHub anchor #migrating-from-luciphor-to-onsite-parameters-version-1.7.0. Update the CHANGELOG link from #migrating-from-luciphor_-to-onsite_-parameters-version-170 to #migrating-from-luciphor-to-onsite-parameters-version-1.7.0.

🤖 Prompt for AI Agents
In @CHANGELOG.md around lines 33 - 36, Update the broken migration guide anchor
in CHANGELOG.md by replacing the incorrect link fragment
`#migrating-from-luciphor_-to-onsite_-parameters-version-170` with the correct
GitHub anchor `#migrating-from-luciphor-to-onsite-parameters-version-1.7.0` in
the line referencing the Migration Guide so the link points to the `Migrating
from luciphor to onsite parameters (Version 1.7.0)` heading in docs/usage.md.

@ypriverol ypriverol merged commit e719f43 into master Jan 9, 2026
116 of 117 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants