Changes in version 0.1.2 - qapproach() now uses distribution_repair_seed = 42L by default so that its specialized automatic distribution-repair step is reproducible. The seed remains locally scoped and does not modify the caller's random-number state. Set it to NULL to use the current random-number state. - In prepare_rankings(), the idcolumn argument was renamed to id_column for consistency with statement_columns. - Console notifications are simplified. In qapproach() and validate(), recognized conditions, opposition details, invalid iterations, and discard reasons remain available in their centralized diagnostics. Messages are retained when the requested consensus or factor count is adjusted, an automatic distribution repair is performed, or qindtest requires the orthogonal Procrustes fallback. Unclassified warnings now include the package bug-report URL. validation_means() likewise no longer prints its general interpretation paragraphs; this guidance is now provided in ?validation_means. - validate() now always calculates and stores bottom-rank probabilities and uses them for the cp-score validation assessments. In validation_cps(), the new include_bottom argument controls only whether the corresponding P bottom 1, P bottom 3, and P bottom 5 columns are returned, printed, and exported, so this display option does not change a statement's assessment category. - The new experimental agreement_across_levels() function traces every original input ranking, including rankings introduced above the first supplied level, through any number of nested analytical levels. It reports each level's analysis, agreement status, and perspective, together with a compact positive-agreement path, underlying agreement counts by perspective, a terminal-path summary, identifiers and statement-ranking values for rankings that never agree, and an internal completeness check. - The new plot_sdg_cps() function compares cp-scores across analyses by positioning and scaling the 17 official SDG icons on analysis-specific rows. Its optional side-by-side style uses an overlap-free priority-ordered grid, and horizontal analysis guides can be requested explicitly. It draws on the active graphics device by default and writes a PDF only when an explicit file path is supplied. - The new plot_sdg_diamonds() function exports one TIFF per group perspective, arranging the 17 bundled SDG icons in the perspective's diamond-shaped Q-sort distribution from lower to higher priority. - The new plot_hierarchical_levels() function visualizes an arbitrary number of bottom-up Q approach levels. Individual rankings feed into first- or later-level analyses, and separate group-perspective arrows connect the subsequent analyses. Node colors and sizes and the two input-arrow colors are configurable. An optional agreement mode distinguishes agreement, opposition, and undecided inputs through grey, firebrick, and dodger-blue arrows. Individual rankings are grouped by their earliest target analysis, analysis nodes use equal horizontal gaps, and optional level_gaps add user-defined vertical separation after selected levels. ranking_labelled and analysis_labelled control the two node-label types independently. Instead of automated plotting, with network_object = TRUE, advanced users may retrieve the prepared igraph object without plotting and create fully custom network layouts and graphics. Changes in version 0.1.1 (2026-09-23) - validate(), qaboots(), and bootstrap_consensus_priority_scores() now use seed = NULL by default, and qapproach() uses distribution_repair_seed = NULL. Users can supply an integer such as 42L for reproducible validation, bootstrap, and distribution-repair runs. Network functions now provide layout_seed = NULL for optionally reproducible node placement. The general statement palette retains a locally scoped deterministic seed because hues::iwanthue() uses stochastic palette generation to create distinguishable colors. All internal and supplied seeds are scoped with withr, preserving the caller's random-number state without directly modifying .GlobalEnv. - File-output arguments and paths are standardized without implicit writes: - In qapproach(), create_screeplot and figures_path changed to the single screeplot_file = NULL argument. A scree plot is written only when an explicit PDF path is supplied. - In write_figure_collection(), filename changed to the required file. - In plot_network_two_layered(), filename changed to file = NULL. - In plot_barplot(), plot_heatmap(), plot_jitterplot(), plot_network(), and plot_spiderweb(), filename changed to file = NULL. - In validation_cps(), validation_perspectives(), and validation_means(), filename changed to file = NULL. - In summary(), write_csv changed to file = NULL. - Every supplied relative or absolute path is now used exactly as given. The package no longer creates or assumes an outputs directory. - Graphics-state handling now restores all temporary par() changes on function exit. Scree-plot generation in qapproach() is isolated in an internal writer so graphics devices and graphical parameters are restored safely even when plotting fails. - The experimental consensus_across_levels() output now reports raw input rankings and level-specific input rankings, resulting perspectives, direct agreement, underlying pool agreement, and propagated underlying individual agreement. Dataset pool counts and underlying individual counts by perspective are retained as structured list-columns for every transition. Changes in version 0.1.0 - Initial package release with data preparation, analysis, validation, and visualization functions. - The initial package release corresponds to the qapproach functions v2. Major changes in comparison to v1 are: - qapproach() now automatically optimizes the number of group perspectives to analyse. Even when the target of 80% consensus cannot be achieved, it still identifies the factor solution with the highest achievable statistical consensus. - The group perspectives are now treated more precisely. The functionality now differentiates between statistical agreement, statistical opposition, and statistically undecided rankings. Only positively agreeing rankings contribute to the degree of consensus. This affects both the analysis and validation. - The calculation of the consensus priority scores now uses a fixed standard-normal cumulative-probability scale instead of min-max normalization. This ensures comparability of the consensus priority scores across analyses. - The validation framework has been completely revised. Equivalence testing for the consensus priority scores has been removed. The revised approach focuses on bootstrapping the Q approach results and assessing the stability of both the resulting group perspectives and the consensus priority scores. The comparison between consensus priority scores and input-ranking means remains available and now includes more detailed sensitivity statistics. - Several figures useful for interpreting the results have been generalized. These include a heatmap of the group perspectives (the diamond-style figure used in v1 works well for the SDGs but is less suitable for other statement sets), a barplot of the consensus priority scores, a network figure showing how rankings feed into group perspectives while distinguishing agreement, opposition, and undecided rankings, a spiderweb figure of group-perspective z-scores, and a boxplot of bootstrap results from the validation. - New convenience and reporting functions (summary(), validation_perspectives(), validation_cps(), validation_means(), and consensus_across_levels()) make it easier to inspect, summarize, and compare Q approach results and their validation outcomes.