sample-group-sankey-plot — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sample-group-sankey-plot (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Builds a reproducible Sankey/alluvial visualization from a tabular sample annotation file and exports the selected annotations, lodes-format table, plot PDF, and session metadata.
This skill accepts: a sample annotation table in CSV or TSV format where rows are samples and selected columns are categorical stages (e.g., risk group, response status, subtype, cohort label). At least 2 stage columns are required.
If the user's request does not involve generating a Sankey or alluvial flow diagram from categorical sample annotations — for example, asking to visualize a gene regulatory network, plot continuous-value trajectories, analyze pathway flow, or process non-tabular data — do not proceed with the workflow. Instead respond:
"sample-group-sankey-plot is designed to generate Sankey/alluvial plots from categorical sample annotation tables. Your request appears to be outside this scope. Please provide a sample annotation table with at least 2 categorical stage columns, or use a more appropriate tool for gene network visualization or pathway analysis."
Readability guidance: Sankey plots are recommended for fewer than 8 unique values per stage and fewer than 5 stages total. For larger inputs, filter or aggregate categories before plotting to ensure readable output.
After a successful run, report to the caller:
Sankey plot generated successfully.
Stages plotted : <comma-separated stage column names>
Samples : <row count>
Output prefix : <output_prefix>
Outputs:
table/selected_annotations.csv
table/sankey_lodes.csv
plot/<output_prefix>.pdf
data/session_info.txt
Readability warnings (if any): <advisory messages or "none">If the script exits with a non-zero status, surface the SKILL_* error code and message verbatim. Do not attempt to continue or retry silently.
| Situation | File to Read | Purpose |
|---|---|---|
| Need to run analysis | scripts/main.R | Execute: Rscript scripts/main.R --input_file ... --output_dir ... |
| Need algorithm details | references/algorithm.md | Alluvial transformation logic, assumptions, and plotting choices |
| Encounter errors | references/troubleshooting.md | Common errors and solutions |
| Need CLI examples | references/cli-guide.md | Detailed CLI examples |
| Need test data | tests/data/ | Sample annotation tables for smoke tests and regression checks |
→ Reference files algorithm.md, troubleshooting.md, and cli-guide.md are in references/. If absent, rely on the Error Handling table below for common issues.
Install required R packages before the first run:
Rscript scripts/install_dependencies.RNote: install_dependencies.R installs from CRAN without version pinning. Tested with ggalluvial >= 0.12.5 and ggplot2 >= 3.4.0. For reproducible CI environments, consider using remotes::install_version().
Rscript scripts/main.R \
--input_file ./annotations.csv \
--output_dir ./output \
--columns risk,Responder \
--seed 42| Short | Long | Type | Default | Description |
|---|---|---|---|---|
-i | --input_file | character | required | Input CSV/TSV annotation table |
-o | --output_dir | character | ./output/ | Output directory |
-c | --columns | character | all columns | Comma-separated stage columns to include in the plot. When omitted, all columns in the file are used as stages. |
-p | --output_prefix | character | sankey_plot | Prefix for generated output files (alphanumeric, dot, underscore, or hyphen characters only) |
--width | numeric | 7 | Plot width in inches | |
--height | numeric | 5 | Plot height in inches | |
--alpha | numeric | 0.5 | Flow transparency between 0 and 1 | |
--label_size | numeric | 4.5 | Stratum label size | |
--missing_label | character | Missing | Replacement label for blank or NA strata | |
--title | character | empty | Optional plot title | |
-s | --seed | integer | 42 | Random seed recorded for reproducibility |
--timeout | integer | 3600 | Maximum allowed elapsed runtime in seconds; use 0 to disable |
input_file)Delimited text file where rows represent samples and each selected column is a categorical stage shown in the Sankey plot.
SampleID,risk,Responder,Subtype
S1,High,Yes,Basal
S2,Low,No,LumA
S3,High,Yes,Basal
S4,Low,No,LumBRequirements:
--columns is omitted.NA values are replaced with --missing_label.| File | Description |
|---|---|
table/selected_annotations.csv | Filtered table containing only the plotted stage columns |
table/sankey_lodes.csv | Long-format lodes table used to build the Sankey plot |
plot/{output_prefix}.pdf | Sankey/alluvial plot as a PDF file; default filename is sankey_plot.pdf |
data/session_info.txt | R session information and runtime parameters |
| Column | Type | Description |
|---|---|---|
| stage columns | character | One column per plotted stage in original order |
| Column | Type | Description |
|---|---|---|
sample_id | character | Synthetic row identifier used as the alluvium key |
x | character | Stage name |
stratum | character | Category label for the stage |
sample_id identifier.ggalluvial::to_lodes_form().After column selection, the script emits log_warn advisories when:
"More than 5 stages selected; plot may be hard to read. Consider filtering.""Stage <name> has <n> unique values; consider aggregating for readability."These are advisory only — the script continues and produces the plot.
geom_flow() and geom_stratum().sessionInfo() and runtime arguments for reproducibility.Rscript scripts/main.R \
-i tests/data/sample_annotations.csv \
-o tests/output \
-c risk,ResponderRscript scripts/main.R \
-i tests/data/sample_annotations.csv \
-o tests/output_three_stage \
-c risk,Responder,Subtype \
--title "Risk to response transitions"Rscript scripts/main.R \
-i tests/data/minimal_annotations.csv \
-o tests/output_all_columns| Error | Cause | Solution |
|---|---|---|
SKILL_FILE_NOT_FOUND | Input file does not exist | Check --input_file |
SKILL_EMPTY_DATA | The input file has zero rows or fewer than 2 usable columns | Provide a non-empty table with at least 2 stage columns |
SKILL_MISSING_COLUMNS | A requested stage column is absent | Correct --columns or fix the input header |
SKILL_INVALID_PARAMETER | Width, height, alpha, label size, or output prefix is invalid | Provide valid arguments per the Arguments table |
SKILL_DEPENDENCY_MISSING | A required R package is unavailable | Run Rscript scripts/install_dependencies.R |
SKILL_IO_ERROR | Output directory cannot be created or written | Check permissions on --output_dir |
IF error persists, READ: references/troubleshooting.md
Rscript scripts/install_dependencies.R
Rscript scripts/main.R --help
Rscript scripts/main.R \
-i tests/data/sample_annotations.csv \
-o tests/output \
-c risk,Responder,Subtype
Rscript tests/test_skill.R
Rscript tests/run_smoke_test.Rls -la tests/output/table
ls -la tests/output/plot
ls -la tests/output/dataFor detailed algorithm, READ: references/algorithm.md
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.