Changes in version 0.99.7 - Optional annotation columns: batch, donor_id, and replicate are no longer required in the standard annotation TSV. The pipeline runs with only file, sample, sample_name, and condition. Missing optional columns are handled gracefully throughout the workflow. - Configurable block variable: test_limma_customized() and run_proteomics_pipeline() now accept a block_var parameter (default: "donor_id") specifying which colData column to use as the blocking variable for limma::duplicateCorrelation() when block_effect = TRUE. Previously the code hardcoded a block column that did not exist in the annotation schema. - Bug fix: readQuantTable() now dispatches to the mzTab reader (.pp_read_mztab_pg_matrix()) when the input file is in mzTab format, instead of always treating it as a DIA pg_matrix TSV. - Bug fix: Contrast column names in .tl_run_contrasts() were not preserved by limma::makeContrasts(contrasts = ...), causing topTable() to fail with a subscript-out-of-bounds error. Contrast names are now set explicitly after makeContrasts(). - Removed unused dependencies: readxl (Imports) and htmltools (Suggests) to resolve DESCRIPTION/NAMESPACE mismatches reported by R CMD check. Changes in version 0.99.0 - Initial Bioconductor submission.