From a23606ed15f2ec584c48563b21d35e7254109ccb Mon Sep 17 00:00:00 2001 From: mosheabr <257371078+mosheabr@users.noreply.github.com> Date: Tue, 27 Oct 2026 01:28:23 +0000 Subject: [PATCH] chore: sync skills (BioNeMo Libraries) --- skills/bionemo-parabricks/BENCHMARK.md | 156 ++++++++++------- skills/bionemo-parabricks/SKILL.md | 12 +- skills/bionemo-parabricks/evals/evals.json | 157 +++++++++++++++--- .../evals/files/rna-batch.json | 2 +- .../evals/files/rna-contracts.json | 2 +- .../references/command-conventions.md | 14 +- .../references/minimap2-controls.md | 14 ++ .../references/pbrun-bam2fq.md | 2 +- .../references/pbrun-deepsomatic.md | 3 +- .../references/pbrun-deepvariant.md | 7 +- .../references/pbrun-deepvariant_germline.md | 3 +- .../references/pbrun-fq2bam.md | 1 + .../references/pbrun-germline.md | 8 +- .../references/pbrun-giraffe.md | 20 ++- .../references/pbrun-haplotypecaller.md | 9 +- .../references/pbrun-indexgvcf.md | 32 ++-- .../references/pbrun-minimap2.md | 10 +- .../references/pbrun-mutectcaller.md | 4 +- .../references/pbrun-ont_germline.md | 11 +- .../references/pbrun-pacbio_germline.md | 12 +- .../pbrun-pangenome_aware_deepvariant.md | 6 +- .../references/pbrun-pangenome_germline.md | 4 + .../references/pbrun-postpon.md | 4 +- .../references/pbrun-prepon.md | 4 +- .../references/pbrun-rna_fq2bam.md | 2 +- .../references/pbrun-somatic.md | 10 +- .../references/performance.md | 26 +-- .../references/rna-translation.md | 9 +- .../references/runtime-environment.md | 25 ++- .../references/shared-options.md | 36 +++- .../references/tool-index.md | 21 ++- .../scripts/check_parabricks_runtime.sh | 33 ++-- .../scripts/translate_star_to_parabricks.py | 8 +- skills/bionemo-parabricks/skill-card.md | 23 +-- skills/bionemo-parabricks/skill.oms.sig | 2 +- 35 files changed, 467 insertions(+), 225 deletions(-) create mode 100644 skills/bionemo-parabricks/references/minimap2-controls.md diff --git a/skills/bionemo-parabricks/BENCHMARK.md b/skills/bionemo-parabricks/BENCHMARK.md index 3a539f28a..5e7a0d7f6 100644 --- a/skills/bionemo-parabricks/BENCHMARK.md +++ b/skills/bionemo-parabricks/BENCHMARK.md @@ -9,11 +9,12 @@ Recommended for publication based on the completed evaluation evidence in this r ## Evaluation Metadata - Skill: `parabricks` -- Evaluation date: 2026-10-13 -- Evaluator version: `1.5.6` -- Agents: Claude Code (`aws/anthropic/bedrock-claude-opus-4-8`), Codex (`openai/openai/gpt-5.5`) -- Tasks: 18 evaluation tasks (17 positive, 1 negative) -- Dataset digest: `sha256:17ca68b3af6d736e9eca9d4b35718991af9564ec9445ac2796bce041668c9567` (skill-evaluator-dataset-snapshot/1) +- Validation status: `passed` +- Evaluation date: 2026-10-27 +- Evaluator version: `1.6.2` +- Agents: Claude Code (`aws/anthropic/bedrock-claude-opus-5-5`), Codex (`openai/openai/gpt-6.1-sol`) +- Tasks: 25 evaluation tasks (24 positive, 1 negative) +- Dataset digest: `sha256:f84268acba708284ca16102928430f9bc95d171ea7c78cb059a4922131f61f97` (skill-evaluator-dataset-snapshot/1) - Attempts per task: 1 - Environment: `k8s-sandbox` - Tier 2 evidence: required for publication @@ -21,6 +22,20 @@ Recommended for publication based on the completed evaluation evidence in this r Each task attempt ran in its own isolated sandbox pod. +## Tier 1 LLM Provenance + +SkillSpector provider, model, analyzer revision, and determinism evidence retained for this scan. + +| Skill | Provider | Adapter | Analyzer | Model | Revision | Determinism | +| --- | --- | --- | --- | --- | --- | --- | +| parabricks | nv_inference | openai | mcp_tool_poisoning | `aws/anthropic/bedrock-claude-opus-5-5` | `2.13.1` | nondeterministic / provider_defaults | +| parabricks | nv_inference | openai | semantic_developer_intent | `aws/anthropic/bedrock-claude-opus-5-5` | `2.13.1` | nondeterministic / provider_defaults | +| parabricks | nv_inference | openai | semantic_quality_policy | `aws/anthropic/bedrock-claude-opus-5-5` | `2.13.1` | nondeterministic / provider_defaults | +| parabricks | nv_inference | openai | semantic_security_discovery | `aws/anthropic/bedrock-claude-opus-5-5` | `2.13.1` | nondeterministic / provider_defaults | +| parabricks | nv_inference | openai | meta_analyzer | `aws/anthropic/bedrock-claude-opus-5-5` | `2.13.1` | nondeterministic / provider_defaults | + +- Controls for `parabricks`: temperature=not set (source=provider_default, forwarded=no); seed=not set (source=unset, forwarded=no); reasoning_effort=not set (source=provider_default, forwarded=no) + ## What This Report Answers The three-tier evaluation checks whether the skill: @@ -35,12 +50,12 @@ The three-tier evaluation checks whether the skill: | Measure | Claude Code (Baseline → Skill Uplift) | Codex (Baseline → Skill Uplift) | |---|---:|---:| -| Overall | 93.8% — baseline ran, but no comparable score was available; uplift unavailable | 92.7% — baseline ran, but no comparable score was available; uplift unavailable | -| Security | 94.4% → 88.9% (-5.5 points) | 91.7% → 100.0% (+8.3 points) | -| Correctness | 94.4% → 98.9% (+4.5 points) | 97.8% → 100.0% (+2.2 points) | -| Discoverability | 100.0% — baseline ran, but no comparable score was available; uplift unavailable | 87.4% — baseline ran, but no comparable score was available; uplift unavailable | -| Effectiveness | 76.5% → 91.8% (+15.3 points) | 83.3% → 91.9% (+8.6 points) | -| Efficiency | 89.5% — baseline ran, but no comparable score was available; uplift unavailable | 84.0% — baseline ran, but no comparable score was available; uplift unavailable | +| Overall | 96.3% — baseline ran, but no comparable score was available; uplift unavailable | 87.0% — baseline ran, but no comparable score was available; uplift unavailable | +| Security | 96.0% → 98.0% (+2.0 points) | 96.0% → 96.0% (±0.0 points) | +| Correctness | 75.2% → 100.0% (+24.8 points) | 95.2% → 99.2% (+4.0 points) | +| Discoverability | 99.6% — baseline ran, but no comparable score was available; uplift unavailable | 92.1% — baseline ran, but no comparable score was available; uplift unavailable | +| Effectiveness | 57.2% → 94.8% (+37.6 points) | 76.8% → 84.4% (+7.6 points) | +| Efficiency | 89.0% — baseline ran, but no comparable score was available; uplift unavailable | 63.3% — baseline ran, but no comparable score was available; uplift unavailable | **How to read this table:** baseline is the same task attempted without the target skill. Scores are rounded to one decimal; threshold-adjacent values use additional precision so their displayed band matches the verdict. Uplift is derived from those displayed scores and shown in percentage points. @@ -48,73 +63,98 @@ Example: `47.0% → 92.0% (+45.0 points)` means the skill-assisted run scored 92 A partial dimension was calculated from only the available configured signals; review the detailed report before relying on it. +### Comparison details + +Shared-source comparisons use the same signals and weights on both conditions. They do not replace the full dimension scores above or change the publication verdict. + +| Agent | Dimension | Basis | Baseline → With skill (uplift) | Explanation | +| --- | --- | --- | --- | --- | +| claude-code | Discoverability | Dimension comparison | N/A | Discoverability is not applicable to the no-skill baseline; there is no installed skill to discover. | +| claude-code | Efficiency | Token-only comparison | 96.7% → 92.1% (-4.6 points) | Only Token Efficiency is comparable; the full dimension scores use different evaluator sources. | +| codex | Discoverability | Dimension comparison | N/A | Discoverability is not applicable to the no-skill baseline; there is no installed skill to discover. | +| codex | Efficiency | Token-only comparison | 82.5% → 83.4% (+0.9 points) | Only Token Efficiency is comparable; the full dimension scores use different evaluator sources. | + ## Token Usage Actual Tier 3 execution usage is reported for every observed agent/case pair and both conditions. | Agent | Dataset case | With skill | Without skill | Delta | Change | Coverage | |---|---|---:|---:|---:|---:|---| -| claude-code | All cases | 4,381,424 | 6,702,748 | -2,321,324 | -34.63% | skill 18/18; base 18/18 | -| claude-code | parabricks-001 | 142,693 | 97,867 | +44,826 | +45.80% | skill 1/1; base 1/1 | -| claude-code | parabricks-002 | 107,565 | 32,944 | +74,621 | +226.51% | skill 1/1; base 1/1 | -| claude-code | parabricks-003 | 106,801 | 35,928 | +70,873 | +197.26% | skill 1/1; base 1/1 | -| claude-code | parabricks-004 | 121,495 | 89,131 | +32,364 | +36.31% | skill 1/1; base 1/1 | -| claude-code | parabricks-005 | 327,340 | 126,284 | +201,056 | +159.21% | skill 1/1; base 1/1 | -| claude-code | parabricks-006 | 114,122 | 34,794 | +79,328 | +227.99% | skill 1/1; base 1/1 | -| claude-code | parabricks-007 | 98,232 | 583,042 | -484,810 | -83.15% | skill 1/1; base 1/1 | -| claude-code | parabricks-008 | 146,435 | 32,324 | +114,111 | +353.02% | skill 1/1; base 1/1 | -| claude-code | parabricks-009 | 151,739 | 40,018 | +111,721 | +279.18% | skill 1/1; base 1/1 | -| claude-code | parabricks-010 | 107,999 | 36,647 | +71,352 | +194.70% | skill 1/1; base 1/1 | -| claude-code | parabricks-011 | 109,750 | 464,258 | -354,508 | -76.36% | skill 1/1; base 1/1 | -| claude-code | parabricks-012 | 104,353 | 496,373 | -392,020 | -78.98% | skill 1/1; base 1/1 | -| claude-code | parabricks-013 | 176,319 | 198,676 | -22,357 | -11.25% | skill 1/1; base 1/1 | -| claude-code | parabricks-014 | 146,954 | 50,434 | +96,520 | +191.38% | skill 1/1; base 1/1 | -| claude-code | parabricks-015 | 188,798 | 40,088 | +148,710 | +370.96% | skill 1/1; base 1/1 | -| claude-code | parabricks-016 | 755,795 | 1,583,044 | -827,249 | -52.26% | skill 1/1; base 1/1 | -| claude-code | parabricks-017 | 1,186,237 | 1,278,696 | -92,459 | -7.23% | skill 1/1; base 1/1 | -| claude-code | parabricks-018 | 288,797 | 1,482,200 | -1,193,403 | -80.52% | skill 1/1; base 1/1 | -| codex | All cases | 1,904,066 | 1,118,265 | +785,801 | +70.27% | skill 18/18; base 18/18 | -| codex | parabricks-001 | 263,177 | 104,558 | +158,619 | +151.70% | skill 1/1; base 1/1 | -| codex | parabricks-002 | 150,198 | 30,087 | +120,111 | +399.21% | skill 1/1; base 1/1 | -| codex | parabricks-003 | 159,741 | 53,820 | +105,921 | +196.81% | skill 1/1; base 1/1 | -| codex | parabricks-004 | 18,017 | 17,995 | +22 | +0.12% | skill 1/1; base 1/1 | -| codex | parabricks-005 | 110,503 | 32,181 | +78,322 | +243.38% | skill 1/1; base 1/1 | -| codex | parabricks-006 | 50,986 | 54,054 | -3,068 | -5.68% | skill 1/1; base 1/1 | -| codex | parabricks-007 | 48,819 | 23,382 | +25,437 | +108.79% | skill 1/1; base 1/1 | -| codex | parabricks-008 | 70,936 | 33,757 | +37,179 | +110.14% | skill 1/1; base 1/1 | -| codex | parabricks-009 | 69,630 | 39,964 | +29,666 | +74.23% | skill 1/1; base 1/1 | -| codex | parabricks-010 | 100,094 | 31,157 | +68,937 | +221.26% | skill 1/1; base 1/1 | -| codex | parabricks-011 | 25,515 | 27,485 | -1,970 | -7.17% | skill 1/1; base 1/1 | -| codex | parabricks-012 | 49,343 | 30,529 | +18,814 | +61.63% | skill 1/1; base 1/1 | -| codex | parabricks-013 | 120,873 | 25,598 | +95,275 | +372.20% | skill 1/1; base 1/1 | -| codex | parabricks-014 | 55,186 | 21,556 | +33,630 | +156.01% | skill 1/1; base 1/1 | -| codex | parabricks-015 | 91,439 | 47,958 | +43,481 | +90.66% | skill 1/1; base 1/1 | -| codex | parabricks-016 | 277,386 | 251,731 | +25,655 | +10.19% | skill 1/1; base 1/1 | -| codex | parabricks-017 | 99,179 | 241,529 | -142,350 | -58.94% | skill 1/1; base 1/1 | -| codex | parabricks-018 | 143,044 | 50,924 | +92,120 | +180.90% | skill 1/1; base 1/1 | -| ALL AGENTS | Dataset aggregate | 6,285,490 | 7,821,013 | -1,535,523 | -19.63% | skill 36/36; base 36/36 | - -Prompt tokens include cached reads, so total tokens are `prompt + completion` (cached is not added twice). The Efficiency score uses `(prompt - cached) + completion`. N/A means the relevant trajectory counters were not available; coverage is never estimated. +| claude-code | All cases | 4,624,056 | 2,503,995 | +2,120,061 | +84.67% | skill 25/25; base 25/25 | +| claude-code | parabricks-001 | 121,270 | 110,773 | +10,497 | +9.48% | skill 1/1; base 1/1 | +| claude-code | parabricks-002 | 125,191 | 37,327 | +87,864 | +235.39% | skill 1/1; base 1/1 | +| claude-code | parabricks-003 | 123,259 | 38,377 | +84,882 | +221.18% | skill 1/1; base 1/1 | +| claude-code | parabricks-004 | 71,483 | 71,514 | -31 | -0.04% | skill 1/1; base 1/1 | +| claude-code | parabricks-005 | 186,693 | 37,001 | +149,692 | +404.56% | skill 1/1; base 1/1 | +| claude-code | parabricks-006 | 125,048 | 37,325 | +87,723 | +235.02% | skill 1/1; base 1/1 | +| claude-code | parabricks-007 | 119,710 | 37,110 | +82,600 | +222.58% | skill 1/1; base 1/1 | +| claude-code | parabricks-008 | 128,023 | 37,131 | +90,892 | +244.79% | skill 1/1; base 1/1 | +| claude-code | parabricks-009 | 122,937 | 38,601 | +84,336 | +218.48% | skill 1/1; base 1/1 | +| claude-code | parabricks-010 | 160,860 | 110,558 | +50,302 | +45.50% | skill 1/1; base 1/1 | +| claude-code | parabricks-011 | 165,354 | 37,663 | +127,691 | +339.04% | skill 1/1; base 1/1 | +| claude-code | parabricks-012 | 128,227 | 37,800 | +90,427 | +239.22% | skill 1/1; base 1/1 | +| claude-code | parabricks-013 | 254,319 | 39,138 | +215,181 | +549.80% | skill 1/1; base 1/1 | +| claude-code | parabricks-014 | 120,998 | 39,907 | +81,091 | +203.20% | skill 1/1; base 1/1 | +| claude-code | parabricks-015 | 254,768 | 40,161 | +214,607 | +534.37% | skill 1/1; base 1/1 | +| claude-code | parabricks-016 | 541,153 | 553,644 | -12,491 | -2.26% | skill 1/1; base 1/1 | +| claude-code | parabricks-017 | 416,184 | 425,284 | -9,100 | -2.14% | skill 1/1; base 1/1 | +| claude-code | parabricks-018 | 333,914 | 150,942 | +182,972 | +121.22% | skill 1/1; base 1/1 | +| claude-code | parabricks-019 | 168,077 | 145,334 | +22,743 | +15.65% | skill 1/1; base 1/1 | +| claude-code | parabricks-020 | 215,910 | 40,256 | +175,654 | +436.34% | skill 1/1; base 1/1 | +| claude-code | parabricks-021 | 172,401 | 146,482 | +25,919 | +17.69% | skill 1/1; base 1/1 | +| claude-code | parabricks-022 | 120,979 | 109,380 | +11,599 | +10.60% | skill 1/1; base 1/1 | +| claude-code | parabricks-023 | 161,731 | 109,575 | +52,156 | +47.60% | skill 1/1; base 1/1 | +| claude-code | parabricks-024 | 119,906 | 36,392 | +83,514 | +229.48% | skill 1/1; base 1/1 | +| claude-code | parabricks-025 | 165,661 | 36,320 | +129,341 | +356.12% | skill 1/1; base 1/1 | +| codex | All cases | 2,509,259 | 1,684,461 | +824,798 | +48.97% | skill 25/25; base 25/25 | +| codex | parabricks-001 | 131,283 | 347,370 | -216,087 | -62.21% | skill 1/1; base 1/1 | +| codex | parabricks-002 | 88,151 | 43,092 | +45,059 | +104.56% | skill 1/1; base 1/1 | +| codex | parabricks-003 | 171,611 | 93,035 | +78,576 | +84.46% | skill 1/1; base 1/1 | +| codex | parabricks-004 | 26,284 | 17,851 | +8,433 | +47.24% | skill 1/1; base 1/1 | +| codex | parabricks-005 | 118,936 | 38,789 | +80,147 | +206.62% | skill 1/1; base 1/1 | +| codex | parabricks-006 | 71,297 | 48,282 | +23,015 | +47.67% | skill 1/1; base 1/1 | +| codex | parabricks-007 | 53,368 | 26,892 | +26,476 | +98.45% | skill 1/1; base 1/1 | +| codex | parabricks-008 | 57,841 | 33,618 | +24,223 | +72.05% | skill 1/1; base 1/1 | +| codex | parabricks-009 | 108,528 | 51,435 | +57,093 | +111.00% | skill 1/1; base 1/1 | +| codex | parabricks-010 | 57,412 | 30,770 | +26,642 | +86.58% | skill 1/1; base 1/1 | +| codex | parabricks-011 | 53,401 | 26,263 | +27,138 | +103.33% | skill 1/1; base 1/1 | +| codex | parabricks-012 | 70,346 | 37,244 | +33,102 | +88.88% | skill 1/1; base 1/1 | +| codex | parabricks-013 | 146,547 | 47,793 | +98,754 | +206.63% | skill 1/1; base 1/1 | +| codex | parabricks-014 | 67,113 | 38,491 | +28,622 | +74.36% | skill 1/1; base 1/1 | +| codex | parabricks-015 | 56,359 | 73,165 | -16,806 | -22.97% | skill 1/1; base 1/1 | +| codex | parabricks-016 | 370,104 | 199,674 | +170,430 | +85.35% | skill 1/1; base 1/1 | +| codex | parabricks-017 | 287,837 | 195,415 | +92,422 | +47.30% | skill 1/1; base 1/1 | +| codex | parabricks-018 | 103,720 | 48,877 | +54,843 | +112.21% | skill 1/1; base 1/1 | +| codex | parabricks-019 | 76,755 | 46,821 | +29,934 | +63.93% | skill 1/1; base 1/1 | +| codex | parabricks-020 | 67,203 | 39,345 | +27,858 | +70.80% | skill 1/1; base 1/1 | +| codex | parabricks-021 | 96,989 | 46,269 | +50,720 | +109.62% | skill 1/1; base 1/1 | +| codex | parabricks-022 | 60,524 | 29,351 | +31,173 | +106.21% | skill 1/1; base 1/1 | +| codex | parabricks-023 | 53,297 | 30,129 | +23,168 | +76.90% | skill 1/1; base 1/1 | +| codex | parabricks-024 | 57,812 | 72,671 | -14,859 | -20.45% | skill 1/1; base 1/1 | +| codex | parabricks-025 | 56,541 | 21,819 | +34,722 | +159.14% | skill 1/1; base 1/1 | +| ALL AGENTS | Dataset aggregate | 7,133,315 | 4,188,456 | +2,944,859 | +70.31% | skill 50/50; base 50/50 | + +Prompt tokens include cached reads, so total tokens are `prompt + completion` (cached is not added twice). The Efficiency score uses `(prompt - cached) + completion`. Change is `100 * (with - without) / without`; negative means fewer tokens. N/A comparisons include their reason in the coverage column; coverage is never estimated. ## Tier Status | Tier | Purpose | Status | Evidence | |---|---|---|---| -| Tier 1 | Static validation | **PASSED WITH OBSERVATIONS** | 11 validator(s); 11 finding(s) | -| Tier 2 | Semantic deduplication | **PASSED** | 2 validator(s); 0 finding(s) | -| Tier 3 | Live agent evaluation | **PASS** | 2 agent(s); 18 task(s) | +| Tier 1 | Static validation | **PASSED WITH OBSERVATIONS** | 11 validator(s); 12 finding(s) | +| Tier 2 | Semantic deduplication | **PASSED WITH OBSERVATIONS** | 2 validator(s); 1 finding(s) | +| Tier 3 | Live agent evaluation | **PASS** | 2 agent(s); 25 task(s) | ## Findings and Observations
Show detailed findings and successful checks +- **CRITICAL** CONTENT_DEDUP/llm_error: LLM analysis failed for a content cluster (`skills/bionemo-agent-toolkit/skills/parabricks`) +- **MEDIUM** PII/ip_addresses: Public IP address (`references/shared-options.md:79`) - **MEDIUM** QUALITY/quality_correctness: Instructions don't mention 'run_script' (`skills/bionemo-agent-toolkit/skills/parabricks/SKILL.md`) - **MEDIUM** QUALITY/quality_efficiency: Deeply nested references in pbrun-applybqsr.md (`skills/bionemo-agent-toolkit/skills/parabricks/SKILL.md`) - **MEDIUM** SCHEMA/folder_hierarchy: Unexpected nesting depth for general skill (`skills/bionemo-agent-toolkit/skills/parabricks`) -- **MEDIUM** SECURITY/Unknown (LP3): MCP Least Privilege: The skill declares capabilities involving file_read, network access, and shell execution (via bundled scripts like check (`SKILL.md:1`) -- **MEDIUM** SECURITY/Unknown (RP1): MCP Rug Pull: Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by (`references/command-conventions.md:23`) -- 6 additional finding(s) are available in the full evaluation artifacts. +- 8 additional finding(s) are available in the full evaluation artifacts.
diff --git a/skills/bionemo-parabricks/SKILL.md b/skills/bionemo-parabricks/SKILL.md index 33d4dc707..015e16b52 100644 --- a/skills/bionemo-parabricks/SKILL.md +++ b/skills/bionemo-parabricks/SKILL.md @@ -6,7 +6,7 @@ description: >- license: CC-BY-4.0 AND Apache-2.0 metadata: author: "Angel Pizarro " - version: "1.3.0" + version: "1.4.0" tags: - parabricks - genomics @@ -49,13 +49,13 @@ or wiring optional GPU branches. For pipeline-level work, use - **Execution:** The documented Docker commands require a supported Linux host, an NVIDIA GPU with sufficient memory, a compatible NVIDIA driver, Docker, NVIDIA Container Toolkit, and access to the selected Parabricks image. - Pulling the image may require an NGC API key for authentication to `nvcr.io`. + Pulling the image may require an NGC API key for authentication to [nvcr.io](https://nvcr.io). See [runtime-environment.md](references/runtime-environment.md) for version-specific requirements and checks. Tool scope: read this skill's references and user-supplied manifests; write only requested command artifacts. Use the bundled helpers for translation or an -authorized host inspection. Documentation lookups use `docs.nvidia.com`; image +authorized host inspection. Documentation lookups use [docs.nvidia.com](https://docs.nvidia.com); image access uses the selected registry only for authorized container execution. These instructions do not grant tool permissions; the host's permission policy still applies to shell, file, network and optional documentation MCP access. @@ -85,9 +85,9 @@ clinical interpretation, or promise exact runtime without benchmark data. ## Instructions -1. Identify the requested release. The option references cover v4.7.1; examples +1. Identify the requested release. The option references cover v4.8.0; examples from another release are labeled. A software version and image tag can - differ: NVIDIA's 4.7.1 image is tagged `4.7.1-1`. Preserve the user's verified + differ: NVIDIA's 4.8.0 image is tagged `4.8.0-1`. Preserve the user's verified image selection; use [command-conventions.md](references/command-conventions.md) for the shared launch and validation contract. 2. Classify the request: @@ -209,3 +209,5 @@ the `pbrun` portion; the shared container envelope is documented once in - Overview: +- 4.8.0 release notes (changes from 4.7.1): + diff --git a/skills/bionemo-parabricks/evals/evals.json b/skills/bionemo-parabricks/evals/evals.json index f6ea82c1b..55ca38ee4 100644 --- a/skills/bionemo-parabricks/evals/evals.json +++ b/skills/bionemo-parabricks/evals/evals.json @@ -77,12 +77,12 @@ }, { "id": "parabricks-006", - "prompt": "I am preparing pbrun rna_fq2bam with Parabricks 4.7.1. My reference FASTA is GRCh37, but the STAR genome library was built from GRCh38. Can I use these together if I rename the contigs? Explain what needs to match and how to prepare a valid command. This is a planning question; do not run anything.", - "expected_output": "The agent rejects mixing a GRCh37 FASTA with a GRCh38 STAR genome library. Renaming contigs cannot reconcile different assemblies. It advises choosing one reference and rebuilding or obtaining a compatible STAR index from that reference, checking annotation/build consistency and the STAR version supported by Parabricks 4.7.1, then substituting those matching assets into a template. Any runnable template includes a read-input mode, --ref, --genome-lib-dir, --output-dir, and --out-bam; the output directory and final BAM are separate required arguments.", + "prompt": "I am preparing pbrun rna_fq2bam with Parabricks 4.8.0. My reference FASTA is GRCh37, but the STAR genome library was built from GRCh38. Can I use these together if I rename the contigs? Explain what needs to match and how to prepare a valid command. This is a planning question; do not run anything.", + "expected_output": "The agent rejects mixing a GRCh37 FASTA with a GRCh38 STAR genome library. Renaming contigs cannot reconcile different assemblies. It advises choosing one reference and rebuilding or obtaining a compatible STAR index from that reference, checking annotation/build consistency and the STAR version supported by Parabricks 4.8.0, then substituting those matching assets into a template. Any runnable template includes a read-input mode, --ref, --genome-lib-dir, --output-dir, and --out-bam; the output directory and final BAM are separate required arguments.", "assertions": [ "The agent identifies GRCh37 and GRCh38 as different assemblies and states that contig renaming cannot make the supplied FASTA and STAR index compatible.", "The agent recommends a STAR genome library built from the same reference sequence/build used by --ref, with consistent contig names and annotation where used.", - "The agent identifies the documented STAR 2.7.2a compatibility baseline for Parabricks 4.7.1 or verifies the supported STAR/index version from that release manual instead of recommending an arbitrary latest index.", + "The agent identifies the documented STAR 2.7.2a compatibility baseline for Parabricks 4.8.0 or verifies the supported STAR/index version from that release manual instead of recommending an arbitrary latest index.", "The proposed command uses matching --ref and --genome-lib-dir placeholders, includes a read-input mode and both --output-dir and --out-bam, and does not present the original mismatched assets as runnable.", "The agent provides planning guidance without executing commands or modifying reference assets." ], @@ -92,7 +92,7 @@ }, { "id": "parabricks-007", - "prompt": "With Parabricks 4.7.1, I need to index /data/sample.g.vcf.gz using pbrun indexgvcf. In Docker, /data is mounted read-only, and /results is writable. Can I use --out /results/sample.g.vcf.gz.tbi? Explain the actual output naming and give me a safe command plan that preserves the original GVCF. Do not execute it.", + "prompt": "With Parabricks 4.8.0, I need to index /data/sample.g.vcf.gz using pbrun indexgvcf. In Docker, /data is mounted read-only, and /results is writable. Can I use --out /results/sample.g.vcf.gz.tbi? Explain the actual output naming and give me a safe command plan that preserves the original GVCF. Do not execute it.", "expected_output": "The agent explains that indexgvcf uses --input and derives the .tbi path by appending .tbi to the input filename, with no documented --out override. It proposes a writable copy of the GVCF in /results and indexing that copy, giving /results/sample.g.vcf.gz.tbi while preserving /data and checking existing destination files before copying.", "assertions": [ "The agent states that pbrun indexgvcf does not document an --out option and does not invent an output-path override.", @@ -107,8 +107,8 @@ }, { "id": "parabricks-008", - "prompt": "Review the next step of a Parabricks 4.7.1 germline workflow. fq2bam produced /work/sample.markdup.bam and /work/sample.recal.txt using matching known-sites resources; ApplyBQSR has not been run. The reference is /ref/genome.fa. I need HaplotypeCaller to produce a diploid per-sample gVCF at /results/sample.g.vcf.gz, retaining the CPU GATK settings --min-pruning 4 and --pcr-indel-model NONE, without writing another BAM. Give the next pbrun command and explain whether the existing BAM qualities have changed and how the caller uses the report. All paths are inside the intended container and all resources match the sample and reference. This is command planning only; do not execute anything.", - "expected_output": "The agent distinguishes a BQSR report from an already recalibrated BAM and uses pbrun haplotypecaller with the existing BAM and --in-recal-file to apply recalibrated qualities during calling. It requests gVCF emission explicitly, preserves diploid calling, and passes the supported pruning/PCR settings as one --haplotypecaller-options string using the Parabricks 4.7.1 single-hyphen spelling. No separate ApplyBQSR BAM or rerun of fq2bam is needed.", + "prompt": "Review the next step of a Parabricks 4.8.0 germline workflow. fq2bam produced /work/sample.markdup.bam and /work/sample.recal.txt using matching known-sites resources; ApplyBQSR has not been run. The reference is /ref/genome.fa. I need HaplotypeCaller to produce a diploid per-sample gVCF at /results/sample.g.vcf.gz, retaining the CPU GATK settings --min-pruning 4 and --pcr-indel-model NONE, without writing another BAM. Give the next pbrun command and explain whether the existing BAM qualities have changed and how the caller uses the report. All paths are inside the intended container and all resources match the sample and reference. This is command planning only; do not execute anything.", + "expected_output": "The agent distinguishes a BQSR report from an already recalibrated BAM and uses pbrun haplotypecaller with the existing BAM and --in-recal-file to apply recalibrated qualities during calling. It requests gVCF emission explicitly, preserves diploid calling, and passes the supported pruning/PCR settings as one --haplotypecaller-options string using the Parabricks 4.8.0 single-hyphen spelling. No separate ApplyBQSR BAM or rerun of fq2bam is needed.", "assertions": [ "The agent explains that generating sample.recal.txt does not itself rewrite the base qualities in sample.markdup.bam; the caller can use the recalibration report internally.", "The proposed pbrun haplotypecaller command uses --ref /ref/genome.fa, --in-bam /work/sample.markdup.bam, and --in-recal-file /work/sample.recal.txt without requiring a second BAM or another fq2bam run.", @@ -122,7 +122,7 @@ }, { "id": "parabricks-009", - "prompt": "I am moving paired somatic calling to Parabricks 4.7.1. I already have /work/panel.vcf.gz and its .tbi, but the panel's ##contig headers include IDs without lengths. The matching GRCh38 reference is /work/GRCh38.fa with its .fai. The prepared BAMs are /work/tumor.bam (sample T1) and /work/normal.bam (sample N1). Give a command plan to use this existing panel in calling and produce a VCF with PON INFO annotations. Explain the header repair and which index/resources are needed at each step. Preserve the original panel and do not rebuild the panel from normal-sample BAMs. /work and /results are writable container paths; use new output names and do not execute anything.", + "prompt": "I am moving paired somatic calling to Parabricks 4.8.0. I already have /work/panel.vcf.gz and its .tbi, but the panel's ##contig headers include IDs without lengths. The matching GRCh38 reference is /work/GRCh38.fa with its .fai. The prepared BAMs are /work/tumor.bam (sample T1) and /work/normal.bam (sample N1). Give a command plan to use this existing panel in calling and produce a VCF with PON INFO annotations. Explain the header repair and which index/resources are needed at each step. Preserve the original panel and do not rebuild the panel from normal-sample BAMs. /work and /results are writable container paths; use new output names and do not execute anything.", "expected_output": "The agent repairs missing contig lengths in a new PON VCF.GZ using the matching reference .fai, builds a fresh tabix index for that changed file, and runs prepon to generate the additional .pon resource. It then runs paired mutectcaller with the repaired PON VCF.GZ path in --pon and the supplied tumor/normal sample labels. It uses postpon with the caller VCF and the same PON to create an annotated output, preserving the original panel and treating all commands as a plan.", "assertions": [ "The agent identifies contig names and lengths as prepon prerequisites and proposes repairing a new PON copy from /work/GRCh38.fa.fai, for example with bcftools reheader --fai; it preserves the original panel and does not suggest constructing a new panel from the BAMs.", @@ -137,10 +137,10 @@ }, { "id": "parabricks-010", - "prompt": "Review this planned Parabricks 4.7.1 command for Illumina WGS: pbrun deepvariant --ref /ref/GRCh38.fa --in-bam /data/sample.bam --mode shortread --proposed-variants /ref/candidates.vcf.gz --gvcf --run-partition --out-variants /results/sample.g.vcf.gz. I require both the proposed-candidate input and gVCF output. I added partitioning to improve throughput; should I also force more streams per GPU? Explain how these options interact and give the minimal revised command while preserving the analysis requirements. Hardware details and benchmark timings are not available. Do not inspect this machine or execute the command.", - "expected_output": "The agent identifies the documented Parabricks 4.7.1 interaction: combining --run-partition, --proposed-variants, and --gvcf produces a warning, ignores --run-partition, and can cause substantial slowdown. It retains the required proposed variants and gVCF output, omits the ignored partition flag, and keeps stream tuning at auto without hardware/benchmark evidence. It explains that removing an ignored flag clarifies effective behavior but does not prove a speedup.", + "prompt": "Review this planned Parabricks 4.8.0 command for Illumina WGS: pbrun deepvariant --ref /ref/GRCh38.fa --in-bam /data/sample.bam --mode shortread --proposed-variants /ref/candidates.vcf.gz --gvcf --run-partition --out-variants /results/sample.g.vcf.gz. I require both the proposed-candidate input and gVCF output. I added partitioning to improve throughput; should I also force more streams per GPU? Explain how these options interact and give the minimal revised command while preserving the analysis requirements. Hardware details and benchmark timings are not available. Do not inspect this machine or execute the command.", + "expected_output": "The agent identifies the documented Parabricks 4.8.0 interaction: combining --run-partition, --proposed-variants, and --gvcf produces a warning, ignores --run-partition, and can cause substantial slowdown. It retains the required proposed variants and gVCF output, omits the ignored partition flag, and keeps stream tuning at auto without hardware/benchmark evidence. It explains that removing an ignored flag clarifies effective behavior but does not prove a speedup.", "assertions": [ - "The agent identifies the specific three-option interaction in Parabricks 4.7.1 and states that --run-partition is ignored with a warning when --proposed-variants and --gvcf are both enabled.", + "The agent identifies the specific three-option interaction in Parabricks 4.8.0 and states that --run-partition is ignored with a warning when --proposed-variants and --gvcf are both enabled.", "The revised command retains --proposed-variants /ref/candidates.vcf.gz and --gvcf and removes --run-partition rather than dropping a required analysis input or output to obtain partitioning.", "The revised pbrun deepvariant command preserves the supplied reference, BAM, shortread mode or its documented default, and --out-variants /results/sample.g.vcf.gz.", "The agent explains that forcing more streams does not restore partition mode for this combination and leaves --num-streams-per-gpu at its documented auto default or omits the flag pending separate benchmarking.", @@ -152,7 +152,7 @@ }, { "id": "parabricks-011", - "prompt": "Review this draft for Parabricks 4.7.1: pbrun giraffe --gbz-name /ref/panel.gbz --dist-name /ref/panel.dist --minimizer-name /ref/panel.min --in-fq /reads/R1.fq.gz /reads/R2.fq.gz --sample S1 --read-group lane1 --align-only --out-bam /results/S1.bam. I need a coordinate-sorted BAM without duplicate marking, in a single pbrun invocation. The validated, mutually compatible graph bundle also includes /ref/panel.zipcodes and /ref/paths.txt; use that path list for the BAM sequence-header order. Preserve read-group ID lane1, SM S1, LB libA, PL ILLUMINA, and PU FC1.1. Explain what is wrong with the draft and give the corrected command. These are container paths, hardware details are unavailable, and this is planning only: do not execute commands or inspect this machine.", + "prompt": "Review this draft for Parabricks 4.8.0: pbrun giraffe --gbz-name /ref/panel.gbz --dist-name /ref/panel.dist --minimizer-name /ref/panel.min --in-fq /reads/R1.fq.gz /reads/R2.fq.gz --sample S1 --read-group lane1 --align-only --out-bam /results/S1.bam. I need a coordinate-sorted BAM without duplicate marking, in a single pbrun invocation. The validated, mutually compatible graph bundle (a GBZ version 1 graph with indexes built by vg v1.75.1) also includes /ref/panel.zipcodes and /ref/paths.txt; use that path list for the BAM sequence-header order. Preserve read-group ID lane1, SM S1, LB libA, PL ILLUMINA, and PU FC1.1. Explain what is wrong with the draft and give the corrected command. These are container paths, hardware details are unavailable, and this is planning only: do not execute commands or inspect this machine.", "expected_output": "The agent recognizes that giraffe --align-only emits an unsorted alignment BAM and replaces it with --no-markdups to retain sorting while skipping duplicate marking. It supplies the required zipcodes index and requested reference-path list from the compatible bundle, preserves the existing graph inputs, FASTQs and output, and maps every read-group field to the Giraffe-specific flags. It does not add a separate CPU sorting step, invent resources, or tune streams without hardware evidence.", "assertions": [ "The agent explains that --align-only does not coordinate-sort the BAM and removes it; the corrected command uses --no-markdups to produce sorted output without duplicate marking in one pbrun giraffe invocation.", @@ -167,12 +167,12 @@ }, { "id": "parabricks-012", - "prompt": "I want to migrate this upstream STAR-Fusion command to Parabricks 4.7.1: STAR-Fusion --genome_lib_dir /ref/ctat --chimeric_junction /data/Chimeric.out.junction --left_fq /data/R1.fq.gz --right_fq /data/R2.fq.gz --output_dir /results/fusions --out_prefix S1 --CPU 8 --min_FFPM 0.5 --FusionInspector inspect --verbose_level 3. The junction file, paired FASTQs, and CTAT library are compatible. A plain STAR alignment index is also available at /ref/star_index. The FFPM threshold and FusionInspector inspection are mandatory analysis requirements. Can pbrun starfusion replace this whole invocation? Give its supported command portion using the supplied paths, explain the non-equivalent options, and state how to preserve the mandatory analysis requirements. Do not execute anything or inspect hardware.", + "prompt": "I want to migrate this upstream STAR-Fusion command to Parabricks 4.8.0: STAR-Fusion --genome_lib_dir /ref/ctat --chimeric_junction /data/Chimeric.out.junction --left_fq /data/R1.fq.gz --right_fq /data/R2.fq.gz --output_dir /results/fusions --out_prefix S1 --CPU 8 --min_FFPM 0.5 --FusionInspector inspect --verbose_level 3. The junction file, paired FASTQs, and CTAT library are compatible. A plain STAR alignment index is also available at /ref/star_index. The FFPM threshold and FusionInspector inspection are mandatory analysis requirements. Can pbrun starfusion replace this whole invocation? Give its supported command portion using the supplied paths, explain the non-equivalent options, and state how to preserve the mandatory analysis requirements. Do not execute anything or inspect hardware.", "expected_output": "The agent explains that pbrun starfusion consumes the existing junction file and CTAT/STAR-Fusion resource library rather than raw FASTQs or a plain STAR index. It maps the supported I/O, prefix and worker options to the Parabricks spelling, treats verbosity as a boolean rather than a numeric equivalent, and identifies min_FFPM and FusionInspector as unsupported in this wrapper. It labels the pbrun command a partial migration and preserves mandatory analysis behavior by retaining the upstream stage or requiring a separately validated downstream implementation, with the read inputs retained for FusionInspector.", "assertions": [ "The pbrun starfusion command uses --chimeric-junction /data/Chimeric.out.junction, --genome-lib-dir /ref/ctat, --output-dir /results/fusions, --out-prefix S1, and --num-threads 8.", "The agent distinguishes the CTAT/STAR-Fusion resource library from /ref/star_index and explains that this pbrun tool consumes junctions; it does not pass the raw FASTQ flags to pbrun starfusion or rerun alignment unnecessarily.", - "The agent identifies --min_FFPM 0.5 and --FusionInspector inspect as upstream features not exposed by pbrun starfusion 4.7.1 and does not invent hyphenated equivalents or a generic pass-through mechanism.", + "The agent identifies --min_FFPM 0.5 and --FusionInspector inspect as upstream features not exposed by pbrun starfusion 4.8.0 and does not invent hyphenated equivalents or a generic pass-through mechanism.", "The agent explains that --verbose is boolean and cannot preserve upstream --verbose_level 3 exactly; any proposed pbrun command omits verbosity or uses --verbose without a numeric argument.", "The agent labels the pbrun command a partial migration, keeps the mandatory FFPM and FusionInspector work in the upstream workflow or a separately validated downstream stage with the FASTQs available, and does not claim full parity or execution after simply dropping those options." ], @@ -182,10 +182,10 @@ }, { "id": "parabricks-013", - "prompt": "Review this RNA migration draft for Parabricks 4.7.1: pbrun rna_fq2bam --ref /ref/GRCh38.fa --genome-lib-dir /ref/star --in-fq /reads/R1.fq.gz /reads/R2.fq.gz --read-files-command zcat --out-bam /results/S1.bam --out-sam-unmapped Within_KeepPairs --out-chim-type WithinBAM HardClip --min-chim-segment 12 --two-pass-mode Basic --num-threads 16. My upstream STAR run used --outSAMunmapped Within KeepPairs, --chimOutType WithinBAM HardClip, and --runThreadN 16. For a multi-mapping mapped mate, our consumer requires a separate unmapped-mate record for every reported alignment, not just one copy somewhere in the BAM. Upstream STAR produced these records in unsorted BAM before a separate coordinate-sort step. This record-level contract is mandatory; separate FASTQs do not satisfy it. I also require coordinate sorting without duplicate marking and hard-clipped supplementary chimeric alignments. The supplied FASTA and STAR 2.7.2a index match. Explain whether one rna_fq2bam invocation can meet the whole contract, provide its valid supported portion with STAR outputs under /results/star, and identify what must remain on another path. These are container paths. Do not run anything or probe hardware.", - "expected_output": "The agent identifies that rna_fq2bam 4.7.1 cannot preserve the mandatory per-alignment unmapped-mate copies: Within_KeepPairs behaves like Within in its sorted output. It distinguishes this from ordinary unmapped-read inclusion and does not claim that every unmapped mate is absent. Fastx files are not an equivalent substitute. It explicitly labels the supported pbrun command a partial migration and retains an upstream path meeting the mandatory contract or a separately validated reconstruction. The command includes both --output-dir /results/star and an explicitly identified --out-bam for the supported portion; retaining /results/S1.bam or using a clearly labeled alternate filename to distinguish it from the complete upstream result is acceptable. It uses the single value WithinBAM_HardClip, keeps --min-chim-segment 12 and --two-pass-mode Basic, adds --no-markdups, and omits copied --num-threads 16 or uses auto while explaining workers per GPU stream. A command that silently drops the required per-alignment records does not achieve the requested replacement.", + "prompt": "Review this RNA migration draft for Parabricks 4.8.0: pbrun rna_fq2bam --ref /ref/GRCh38.fa --genome-lib-dir /ref/star --in-fq /reads/R1.fq.gz /reads/R2.fq.gz --read-files-command zcat --out-bam /results/S1.bam --out-sam-unmapped Within_KeepPairs --out-chim-type WithinBAM HardClip --min-chim-segment 12 --two-pass-mode Basic --num-threads 16. My upstream STAR run used --outSAMunmapped Within KeepPairs, --chimOutType WithinBAM HardClip, and --runThreadN 16. For a multi-mapping mapped mate, our consumer requires a separate unmapped-mate record for every reported alignment, not just one copy somewhere in the BAM. Upstream STAR produced these records in unsorted BAM before a separate coordinate-sort step. This record-level contract is mandatory; separate FASTQs do not satisfy it. I also require coordinate sorting without duplicate marking and hard-clipped supplementary chimeric alignments. The supplied FASTA and STAR 2.7.2a index match. Explain whether one rna_fq2bam invocation can meet the whole contract, provide its valid supported portion with STAR outputs under /results/star, and identify what must remain on another path. These are container paths. Do not run anything or probe hardware.", + "expected_output": "The agent identifies that rna_fq2bam 4.8.0 cannot preserve the mandatory per-alignment unmapped-mate copies: Within_KeepPairs behaves like Within in its sorted output. It distinguishes this from ordinary unmapped-read inclusion and does not claim that every unmapped mate is absent. Fastx files are not an equivalent substitute. It explicitly labels the supported pbrun command a partial migration and retains an upstream path meeting the mandatory contract or a separately validated reconstruction. The command includes both --output-dir /results/star and an explicitly identified --out-bam for the supported portion; retaining /results/S1.bam or using a clearly labeled alternate filename to distinguish it from the complete upstream result is acceptable. It uses the single value WithinBAM_HardClip, keeps --min-chim-segment 12 and --two-pass-mode Basic, adds --no-markdups, and omits copied --num-threads 16 or uses auto while explaining workers per GPU stream. A command that silently drops the required per-alignment records does not achieve the requested replacement.", "assertions": [ - "The agent states that --out-sam-unmapped Within_KeepPairs behaves like Within in Parabricks 4.7.1 sorted output and cannot reproduce the required extra unmapped-mate record for each alignment of a multi-mapping mate; it distinguishes this from ordinary unmapped-read inclusion.", + "The agent states that --out-sam-unmapped Within_KeepPairs behaves like Within in Parabricks 4.8.0 sorted output and cannot reproduce the required extra unmapped-mate record for each alignment of a multi-mapping mate; it distinguishes this from ordinary unmapped-read inclusion.", "The agent rejects full migration under the mandatory per-alignment BAM-record contract and retains an upstream path or a separately validated reconstruction. It does not offer separate Fastx files as a substitute; an explicit discussion of that rejected alternative is unnecessary when the plan already satisfies this constraint.", "The supported pbrun rna_fq2bam portion includes the supplied FASTA, STAR library, paired FASTQs and zcat handler, --output-dir /results/star, and an explicit --out-bam. A clearly identified alternate BAM filename is acceptable for the partial result, especially when the upstream path produces /results/S1.bam.", "The command uses --out-chim-type WithinBAM_HardClip as one value, preserves --min-chim-segment 12 and --two-pass-mode Basic, and adds --no-markdups to keep sorting without duplicate marking.", @@ -197,7 +197,7 @@ }, { "id": "parabricks-014", - "prompt": "We are recovering reads from /data/archive.cram before realigning to GRCh38. The CRAM was encoded against /ref/GRCh37.fa; /ref/GRCh38.fa is the future alignment reference. Review this Parabricks 4.7.1 draft: pbrun bam2fq --ref /ref/GRCh38.fa --in-bam /data/archive.cram --out-prefix /results/recovered --out-suffixF _R1.fastq --out-suffixF2 _R2.fastq --out-suffixS _single.fastq --rg-tag SM --remove-qc-failure. We must retain available paired reads, first-mate and second-mate orphans, unpaired reads, and QC-failed reads, split by sequencing unit. All read groups share SM S1 and LB libA; each sequencing unit has a distinct PU, with multiple RG IDs per PU. Give a corrected conversion command and a check plan that accounts for every requested read category. Compression is acceptable. Can this guarantee the original raw FASTQs byte for byte? Paths are already inside the container; do not execute or inspect files.", + "prompt": "We are recovering reads from /data/archive.cram before realigning to GRCh38. The CRAM was encoded against /ref/GRCh37.fa; /ref/GRCh38.fa is the future alignment reference. Review this Parabricks 4.8.0 draft: pbrun bam2fq --ref /ref/GRCh38.fa --in-bam /data/archive.cram --out-prefix /results/recovered --out-suffixF _R1.fastq --out-suffixF2 _R2.fastq --out-suffixS _single.fastq --rg-tag SM --remove-qc-failure. We must retain available paired reads, first-mate and second-mate orphans, unpaired reads, and QC-failed reads, split by sequencing unit. All read groups share SM S1 and LB libA; each sequencing unit has a distinct PU, with multiple RG IDs per PU. Give a corrected conversion command and a check plan that accounts for every requested read category. Compression is acceptable. Can this guarantee the original raw FASTQs byte for byte? Paths are already inside the container; do not execute or inspect files.", "expected_output": "The corrected bam2fq command decodes with the source GRCh37 FASTA, preserves the input and output prefix, uses --rg-tag PU to group sequencing units, and omits --remove-qc-failure. It explicitly supplies all five .gz-ending suffixes: F, F2, O, O2, and S. Parabricks ignores orphan or unpaired categories when their corresponding suffix is absent; --out-suffixS does not capture orphan first and second mates. The agent checks pairs and each separate retained category, accounts for /1 and /2 read-name suffixes, and rejects byte-for-byte recovery of the original FASTQs because prior processing and conversion can change or remove information. Dropping any required read category is a material failure of this recovery task.", "assertions": [ "The corrected command uses --ref /ref/GRCh37.fa for decoding /data/archive.cram, preserves --out-prefix /results/recovered, and distinguishes that source reference from the later GRCh38 alignment reference.", @@ -212,8 +212,8 @@ }, { "id": "parabricks-015", - "prompt": "We are comparing Parabricks 4.7.1 pangenome_aware_deepvariant with the compatible Google implementation on the same prepared short-read BAM, linear reference, GBZ graph and model. Differences include tiny zero-quality RefCall score changes, pileup read-order changes when supplementary alignments are retained, and GBZ query results that change when query order changes. A colleague proposes replacing std::sort with std::stable_sort, disabling only updateCache, and then requiring byte-identical VCFs as the release check. Review that proposal using the release-specific mismatch mechanisms. Give a controlled comparison plan and a minimal pbrun command using /data/S1.bam, /ref/GRCh38.fa, /ref/panel.gbz, and /results/S1.vcf.gz. Distinguish upstream source changes from pbrun CLI options and identify performance consequences. Do not patch software, run commands, or inspect hardware.", - "expected_output": "The agent separates the three documented Parabricks 4.7.1 mismatch mechanisms: TensorRT/Keras numerical differences around 1e-5 with reported zero-quality RefCall differences, nondeterministic ordering of equal-key supplementary reads, and the order-dependent Google GBZ reader cache fast path. It identifies the upstream stable_sort change in BuildPileupForOneSample in pileup_image_native.cc. For the GBZ comparison build it disables both updateCache and the cached-range lookup in GbzReader::Query() in deepvariant/third_party/nucleus/io/gbz_reader.cc; disabling only updates is incomplete. It confines those patches to a controlled upstream comparison build, notes the potentially substantial slowdown from disabling caching, and refuses to infer byte-identical VCFs or proven biological parity from those changes. Its minimal pbrun command includes --ref, --pangenome, --in-bam, and --out-variants with the supplied paths and does not invent CLI flags for the C++ changes.", + "prompt": "We are comparing Parabricks 4.8.0 pangenome_aware_deepvariant with the compatible Google implementation on the same prepared short-read BAM, linear reference, GBZ graph and model. Differences include tiny zero-quality RefCall score changes, pileup read-order changes when supplementary alignments are retained, and GBZ query results that change when query order changes. A colleague proposes replacing std::sort with std::stable_sort, disabling only updateCache, and then requiring byte-identical VCFs as the release check. Review that proposal using the release-specific mismatch mechanisms. Give a controlled comparison plan and a minimal pbrun command using /data/S1.bam, /ref/GRCh38.fa, /ref/panel.gbz, and /results/S1.vcf.gz. Distinguish upstream source changes from pbrun CLI options and identify performance consequences. Do not patch software, run commands, or inspect hardware.", + "expected_output": "The agent separates the three documented Parabricks 4.8.0 mismatch mechanisms: TensorRT/Keras numerical differences around 1e-5 with reported zero-quality RefCall differences, nondeterministic ordering of equal-key supplementary reads, and the order-dependent Google GBZ reader cache fast path. It identifies the upstream stable_sort change in BuildPileupForOneSample in pileup_image_native.cc. For the GBZ comparison build it disables both updateCache and the cached-range lookup in GbzReader::Query() in deepvariant/third_party/nucleus/io/gbz_reader.cc; disabling only updates is incomplete. It confines those patches to a controlled upstream comparison build, notes the potentially substantial slowdown from disabling caching, and refuses to infer byte-identical VCFs or proven biological parity from those changes. Its minimal pbrun command includes --ref, --pangenome, --in-bam, and --out-variants with the supplied paths and does not invent CLI flags for the C++ changes.", "assertions": [ "The agent attributes tiny predicted-score differences to TensorRT versus Keras inference and treats zero-quality RefCall mismatches as the manual's reported observations, without promising that ordering/cache changes eliminate numerical differences or guarantee byte-identical VCFs.", "The agent connects supplementary alignments with nondeterministic equal-key read sorting and locates the proposed upstream std::stable_sort change in BuildPileupForOneSample in pileup_image_native.cc.", @@ -227,7 +227,7 @@ }, { "id": "parabricks-016", - "prompt": "Convert the three CPU STAR jobs in input/rna-batch.json to Parabricks 4.7.1 command drafts. Preserve every lane, read-group tag, alignment setting, and requested output. The destination output directories deliberately differ from the old STAR prefixes; preserve each prefix basename there. Keep duplicate marking disabled and choose Parabricks thread tuning independently from the CPU thread count. Write output/rna-plan.json with a top-level jobs array. Each job must have id, status (draft or blocked), argv (a token array starting with pbrun rna_fq2bam, or null when blocked), and notes (an array of strings). Use the exact target paths and metadata from the manifest. Use inline --in-fq/--in-se-fq arguments so each draft is self-contained; do not introduce auxiliary input-list files. Preserve supplied decompressor command text as one argument value. This is command preparation: do not run STAR, pbrun, containers, decompression, or hardware probes. You may read the manifest, consult documentation, run command-generation helpers, and write/validate the requested JSON. Briefly summarize any limitations and the artifact path.", + "prompt": "Convert the three CPU STAR jobs in input/rna-batch.json to Parabricks 4.8.0 command drafts. Preserve every lane, read-group tag, alignment setting, and requested output. The destination output directories deliberately differ from the old STAR prefixes; preserve each prefix basename there. Keep duplicate marking disabled and choose Parabricks thread tuning independently from the CPU thread count. Write output/rna-plan.json with a top-level jobs array. Each job must have id, status (draft or blocked), argv (a token array starting with pbrun rna_fq2bam, or null when blocked), and notes (an array of strings). Use the exact target paths and metadata from the manifest. Use inline --in-fq/--in-se-fq arguments so each draft is self-contained; do not introduce auxiliary input-list files. Preserve supplied decompressor command text as one argument value. This is command preparation: do not run STAR, pbrun, containers, decompression, or hardware probes. You may read the manifest, consult documentation, run command-generation helpers, and write/validate the requested JSON. Briefly summarize any limitations and the artifact path.", "expected_output": "Creates output/rna-plan.json containing treated, control, and rescue drafts. Every argv includes --ref /ref/GRCh38.fa, --genome-lib-dir /ref/GRCh38_STAR_2.7.2a, the job-specific --output-dir and --out-bam, and --no-markdups. Treated has three correctly paired --in-fq groups with exact lane-specific read groups, including the DS value with spaces; control has two --in-se-fq groups; rescue has one pair. Preserve all values through documented flag mappings, including treated --max-junction-mismatches 0 -1 0 0, --out-chim-type WithinBAM_SoftClip, --min-chim-segment 15, --two-pass-mode Basic and ordered SAM attributes; control mismatch/multimap/SA/MAPQ settings; rescue --score-gap -4, --min-match-filter-normalized 0.75, --align-ends-type EndToEnd, Fastx and Within outputs, and Junctions. Decompressors are each a single --read-files-command value, including gzip -dc. Original prefix basenames become --out-prefix in the new directories. Thread tuning is independent of CPU runThreadN: either Parabricks auto defaults or a separately chosen and labeled worker-thread setting is acceptable; it does not claim equivalent CPU/GPU thread semantics. No workload is executed or biological parity claimed.", "assertions": [ "Writes parseable output/rna-plan.json with all three requested job IDs and complete pbrun rna_fq2bam argument arrays including the supplied reference, genome library, distinct output directory, final BAM path and --no-markdups.", @@ -244,13 +244,13 @@ }, { "id": "parabricks-017", - "prompt": "Review the four STAR migration requests in input/rna-contracts.json for Parabricks 4.7.1. Generate a complete draft only when the supplied inputs and the stated output contract can be preserved by rna_fq2bam. Otherwise mark the job blocked and explain the exact unresolved input or unsupported behavior; do not silently drop a setting or replace the contract with a partial command. Judge each job by its stated consumer requirement. Write output/rna-plan.json with a top-level jobs array. Each job must have id, status (draft or blocked), argv (a token array starting with pbrun rna_fq2bam, or null when blocked), and notes (an array of strings). Use the exact target paths and metadata from the manifest. Use inline --in-fq/--in-se-fq arguments so each draft is self-contained; do not introduce auxiliary input-list files. Preserve supplied decompressor command text as one argument value. This is command preparation: do not run STAR, pbrun, containers, decompression, or hardware probes. You may read the manifest, consult documentation, run command-generation helpers, and write/validate the requested JSON. Briefly summarize any limitations and the artifact path.", - "expected_output": "Creates a four-job output/rna-plan.json. per_alignment is blocked: Parabricks sorted output treats Within_KeepPairs as Within and does not preserve the extra unmapped-mate copy per multi-mapping alignment from the upstream unsorted KeepPairs path; neither ordinary Within nor separate Fastx files meets that multiplicity contract. ordinary is a valid draft: ordinary inclusion is supported by --out-sam-unmapped Within or Within_KeepPairs, and losing extra copies/adjacency is irrelevant to its explicitly weaker contract. Its command includes ref, genome-lib-dir, the supplied ordinary output-dir and out-bam, correct paired FASTQs and read group, and --no-markdups; any explanation of performance controls distinguishes CPU thread counts from GPU-stream worker threads; independent Parabricks tuning is allowed. primary_ties is blocked because the documented 4.7.1 rna_fq2bam options do not expose STAR outSAMprimaryFlag AllBestScore; do not invent a corresponding flag or silently accept a different primary policy. unmatched_lanes is blocked because two R1 lanes have only one R2 lane; request the missing mate information without guessing filenames or regrouping reads. Blocked jobs have null argv. No workload or hardware inspection is performed.", + "prompt": "Review the four STAR migration requests in input/rna-contracts.json for Parabricks 4.8.0. Generate a complete draft only when the supplied inputs and the stated output contract can be preserved by rna_fq2bam. Otherwise mark the job blocked and explain the exact unresolved input or unsupported behavior; do not silently drop a setting or replace the contract with a partial command. Judge each job by its stated consumer requirement. Write output/rna-plan.json with a top-level jobs array. Each job must have id, status (draft or blocked), argv (a token array starting with pbrun rna_fq2bam, or null when blocked), and notes (an array of strings). Use the exact target paths and metadata from the manifest. Use inline --in-fq/--in-se-fq arguments so each draft is self-contained; do not introduce auxiliary input-list files. Preserve supplied decompressor command text as one argument value. This is command preparation: do not run STAR, pbrun, containers, decompression, or hardware probes. You may read the manifest, consult documentation, run command-generation helpers, and write/validate the requested JSON. Briefly summarize any limitations and the artifact path.", + "expected_output": "Creates a four-job output/rna-plan.json. per_alignment is blocked: Parabricks sorted output treats Within_KeepPairs as Within and does not preserve the extra unmapped-mate copy per multi-mapping alignment from the upstream unsorted KeepPairs path; neither ordinary Within nor separate Fastx files meets that multiplicity contract. ordinary is a valid draft: ordinary inclusion is supported by --out-sam-unmapped Within or Within_KeepPairs, and losing extra copies/adjacency is irrelevant to its explicitly weaker contract. Its command includes ref, genome-lib-dir, the supplied ordinary output-dir and out-bam, correct paired FASTQs and read group, and --no-markdups; any explanation of performance controls distinguishes CPU thread counts from GPU-stream worker threads; independent Parabricks tuning is allowed. primary_ties is blocked because the documented 4.8.0 rna_fq2bam options do not expose STAR outSAMprimaryFlag AllBestScore; do not invent a corresponding flag or silently accept a different primary policy. unmatched_lanes is blocked because two R1 lanes have only one R2 lane; request the missing mate information without guessing filenames or regrouping reads. Blocked jobs have null argv. No workload or hardware inspection is performed.", "assertions": [ "Writes parseable output/rna-plan.json with all four IDs, blocks per_alignment, primary_ties and unmatched_lanes with null argv, and provides a complete ordinary draft.", "Explains that Within_KeepPairs in the sorted Parabricks path does not preserve one unmapped-mate copy for every multi-mapping alignment; does not claim that all unmapped mates disappear or that Fastx preserves this record contract.", "Allows ordinary unmapped-read inclusion, using Within or Within_KeepPairs and a complete command with correct paired reads, exact RG metadata, required reference/index/output flags, and no duplicate marking. Independent runtime tuning is allowed; it does not claim CPU thread counts and GPU-stream worker counts are equivalent.", - "Identifies AllBestScore as an unsupported primary-alignment policy in the documented Parabricks 4.7. interface, preserving it as unresolved instead of inventing an option or silently dropping it.", + "Identifies AllBestScore as an unsupported primary-alignment policy in the documented Parabricks 4.8.0 interface, preserving it as unresolved instead of inventing an option or silently dropping it.", "Identifies the unequal R1/R2 lane counts and missing mate information without guessing or merging lanes; respects the command-preparation-only scope." ], "expected_skill": "parabricks", @@ -261,18 +261,123 @@ }, { "id": "parabricks-018", - "prompt": "We are preparing a Parabricks 4.7.1 RNA alignment pilot for new 151-nt paired-end reads. We want to reuse a suitable existing STAR library rather than regenerate one unnecessarily. The target FASTA is /ref/GRCh38.fa and the annotation is unchanged. Treat these administrator-verified facts as supplied: library A at /ref/star_A was generated by the STAR 2.7.2a executable from that exact FASTA and annotation; its original genomeParameters.txt contains versionGenome 2.7.1a and sjdbOverhang 99, and sjdbInfo.txt is present. Its build manifest and all index checksums are intact. Library B at /ref/star_B is a copy of A whose versionGenome field alone was edited to 2.7.2a to match the executable label. Library C at /ref/star_C was generated by STAR 2.7.2a from GRCh37, with versionGenome 2.7.1a and sjdbOverhang 150. A colleague proposes choosing B and passing --sjdb-overhang 150 because the new reads are 151 nt; otherwise they want to rebuild everything. Assess that proposal, choose a library for the planned pilot if one is suitable, and give one pbrun rna_fq2bam command using /reads/new_R1.fq.gz, /reads/new_R2.fq.gz, zcat, STAR outputs in /results/star, and sorted BAM /results/new.bam without duplicate marking. Our command-manifest format requires an explicit positive --sjdb-overhang value. Explain which checks are established by the supplied provenance and what still requires target-container validation. Do not edit metadata, regenerate an index, inspect local files or hardware, or run a workload. Public versioned documentation/source lookup is allowed.", - "expected_output": "Choose intact library A for a planned, subsequently validated pilot. STAR 2.7.2a uses the compatibility marker 2.7.1a, so A's version strings do not require a rebuild. Reject B's cosmetic metadata rewrite and C's wrong assembly. Preserve A's explicit junction overhang 99; changing read length does not permit relabeling its stored junctions to 150. Rebuilding a separate index is an optional route for a different overhang, not mandatory just to match executable/version strings. Give a complete command with /ref/GRCh38.fa, /ref/star_A, the paired reads and zcat, separate --output-dir /results/star and --out-bam /results/new.bam, --no-markdups, and --sjdb-overhang 99. Distinguish supplied provenance from untested Parabricks container execution; no changes or workload execution. In the 4.7.1 manual, --ref is required independently of --genome-lib-dir, and rna_fq2bam marks duplicates unless --no-markdups disables that step. A draft omitting --ref cannot run; one omitting --no-markdups violates the requested no-duplicate-marking behavior. Claiming marking is opt-in or mentioning the needed flag only conditionally does not fix the supplied command. These are substantive command requirements when judging goal completion. The documented sjdb-overhang default is 100, not the supplied index-specific 99.", + "prompt": "We are preparing a Parabricks 4.8.0 RNA alignment pilot for new 151-nt paired-end reads. We want to reuse a suitable existing STAR library rather than regenerate one unnecessarily. The target FASTA is /ref/GRCh38.fa and the annotation is unchanged. Treat these administrator-verified facts as supplied: library A at /ref/star_A was generated by the STAR 2.7.2a executable from that exact FASTA and annotation; its original genomeParameters.txt contains versionGenome 2.7.1a and sjdbOverhang 99, and sjdbInfo.txt is present. Its build manifest and all index checksums are intact. Library B at /ref/star_B is a copy of A whose versionGenome field alone was edited to 2.7.2a to match the executable label. Library C at /ref/star_C was generated by STAR 2.7.2a from GRCh37, with versionGenome 2.7.1a and sjdbOverhang 150. A colleague proposes choosing B and passing --sjdb-overhang 150 because the new reads are 151 nt; otherwise they want to rebuild everything. Assess that proposal, choose a library for the planned pilot if one is suitable, and give one pbrun rna_fq2bam command using /reads/new_R1.fq.gz, /reads/new_R2.fq.gz, zcat, STAR outputs in /results/star, and sorted BAM /results/new.bam without duplicate marking. Our command-manifest format requires an explicit positive --sjdb-overhang value. Explain which checks are established by the supplied provenance and what still requires target-container validation. Do not edit metadata, regenerate an index, inspect local files or hardware, or run a workload. Public versioned documentation/source lookup is allowed.", + "expected_output": "Choose intact library A for a planned, subsequently validated pilot. STAR 2.7.2a uses the compatibility marker 2.7.1a, so A's version strings do not require a rebuild. Reject B's cosmetic metadata rewrite and C's wrong assembly. Preserve A's explicit junction overhang 99; changing read length does not permit relabeling its stored junctions to 150. Rebuilding a separate index is an optional route for a different overhang, not mandatory just to match executable/version strings. Give a complete command with /ref/GRCh38.fa, /ref/star_A, the paired reads and zcat, separate --output-dir /results/star and --out-bam /results/new.bam, --no-markdups, and --sjdb-overhang 99. Distinguish supplied provenance from untested Parabricks container execution; no changes or workload execution. In the 4.8.0 manual, --ref is required independently of --genome-lib-dir, and rna_fq2bam marks duplicates unless --no-markdups disables that step. A draft omitting --ref cannot run; one omitting --no-markdups violates the requested no-duplicate-marking behavior. Claiming marking is opt-in or mentioning the needed flag only conditionally does not fix the supplied command. These are substantive command requirements when judging goal completion. The documented sjdb-overhang default is 100, not the supplied index-specific 99.", "assertions": [ "The agent selects intact library A for the planned pilot and explains why versionGenome 2.7.1a can be correct for a STAR 2.7.2a build, without imposing an unnecessary rebuild based on those strings.", "The agent rejects B's metadata-only rewrite as a compatibility fix and C's GRCh37 index for the supplied GRCh38 target.", "The agent supplies --sjdb-overhang 99 for A, explains the conflict with explicitly forcing 150 on the saved-junction index, and distinguishes reuse from separately rebuilding with a different overhang.", - "The command includes pbrun rna_fq2bam, --ref /ref/GRCh38.fa, --genome-lib-dir /ref/star_A, the paired --in-fq paths, --read-files-command zcat, --output-dir /results/star, --out-bam /results/new.bam, and --no-markdups. The 4.7.1 tool requires --ref even with --genome-lib-dir and performs duplicate marking unless --no-markdups is supplied; do not accept the incorrect claim that marking is opt-in.", + "The command includes pbrun rna_fq2bam, --ref /ref/GRCh38.fa, --genome-lib-dir /ref/star_A, the paired --in-fq paths, --read-files-command zcat, --output-dir /results/star, --out-bam /results/new.bam, and --no-markdups. The 4.8.0 tool requires --ref even with --genome-lib-dir and performs duplicate marking unless --no-markdups is supplied; do not accept the incorrect claim that marking is opt-in.", "The agent accepts the administrator-supplied build/reference/integrity facts as premises, identifies target-container execution as still untested, and does not edit, rebuild, inspect local files/hardware, or run a workload." ], "expected_skill": "parabricks", "expected_script": null, "files": [] + }, + { + "id": "parabricks-019", + "prompt": "We are upgrading an Oxford Nanopore germline job from Parabricks 4.7.1 to 4.8.0. Its 4.7.1 command was: pbrun ont_germline --ref /ref/GRCh38.fa --in-fq /data/ont.fastq.gz --out-bam /results/ont.bam --out-variants /results/ont.vcf.gz --chaining-on-gpu. We added --chaining-on-gpu because alignment was CPU-bound, and we want to keep GPU chaining. Review the command for 4.8.0, explain what changed, and give the corrected command. These are container paths; hardware details and benchmarks are unavailable. This is planning only: do not execute commands or inspect this machine.", + "expected_output": "The agent recognizes that Parabricks 4.8.0 replaced the valueless --chaining-on-gpu switch with --seeding-chaining-on-gpu, which takes on, off, or auto, and kept --chaining-on-gpu only as a deprecated alias that also requires a value, so the 4.7.1 command no longer parses. Because the auto default enables GPU seeding and chaining only for the splice:sr preset, it sets --seeding-chaining-on-gpu on to keep GPU chaining for ONT reads, preserves the remaining arguments, and leaves other tuning at its defaults without benchmark evidence.", + "assertions": [ + "The agent explains that in Parabricks 4.8.0 --chaining-on-gpu is no longer a valueless switch: it is a deprecated alias of --seeding-chaining-on-gpu, which takes on, off, or auto, so the bare 4.7.1 form fails argument parsing.", + "The corrected command uses --seeding-chaining-on-gpu on and does not also pass --chaining-on-gpu.", + "The agent explains that the auto default enables GPU seeding and chaining only for the splice:sr preset, so this ONT alignment would run on CPU unless on is set.", + "The command preserves --ref /ref/GRCh38.fa, --in-fq /data/ont.fastq.gz, --out-bam /results/ont.bam, and --out-variants /results/ont.vcf.gz.", + "The agent does not prescribe fixed --nstreams, --chunk-size, or other tuning values without benchmark evidence, does not claim a speedup, and does not execute commands or inspect hardware." + ], + "expected_skill": "parabricks", + "expected_script": null, + "files": [] + }, + { + "id": "parabricks-020", + "prompt": "We are moving pangenome alignment from Parabricks 4.7.1 to 4.8.0. The bundle is /ref/panel.gbz, which a colleague regenerated last month with vg gbwt from vg 1.73.0 using default settings; /ref/panel.dist, /ref/panel.min, and /ref/panel.zipcodes, generated with vg 1.70.0 for our 4.7.1 runs; and the path list /ref/paths.txt. /ref/panel.fa, with /ref/panel.fa.fai, was extracted from the same graph paths. We now want CRAM output. Draft: pbrun giraffe --gbz-name /ref/panel.gbz --dist-name /ref/panel.dist --minimizer-name /ref/panel.min --zipcodes-name /ref/panel.zipcodes --ref-paths /ref/paths.txt --in-fq /reads/R1.fq.gz /reads/R2.fq.gz --sample S1 --read-group rg1 --align-only --out-bam /results/S1.cram. Explain what must change for 4.8.0, including graph and index preparation, and give the corrected plan and pbrun command. These are container paths. This is planning only: do not run vg or pbrun, download data, or inspect this machine.", + "expected_output": "The agent identifies three 4.8.0 requirements. Giraffe now uses vg v1.75.1, so the .dist, .min, and .zipcodes files built with vg 1.70.0 must be regenerated with vg v1.75.1. Parabricks reads only GBZ version 1, and vg 1.72.0 or later writes version 2 by default, so the graph must be converted with vg gbwt -Z /ref/panel.gbz -g .gbz --gbz-v1 using vg 1.74.0 or later; indexes built from the same graph stay valid after the conversion. CRAM output is selected by the .cram path, requires --ref with the FASTA that matches the graph and --ref-paths, and cannot be combined with --align-only. Dropping --align-only also turns on duplicate marking, so the agent discloses that change and adds or offers --no-markdups to keep duplicates unmarked. The corrected command keeps the required inputs and read-group flags, uses the converted graph and regenerated indexes, adds --ref /ref/panel.fa, removes --align-only, and recommends --run-ref-verification for the first run with this reference.", + "assertions": [ + "The agent states that Parabricks 4.8.0 giraffe uses vg v1.75.1 and that the .dist, .min, and .zipcodes files built with vg 1.70.0 must be regenerated with vg v1.75.1 rather than reused.", + "The agent identifies the graph written by vg 1.73.0 with default settings as GBZ version 2, which 4.8.0 cannot load, and converts it to version 1 with vg gbwt -Z /ref/panel.gbz -g .gbz --gbz-v1 using vg 1.74.0 or later; the regenerated indexes come from this graph, built either before or after the conversion.", + "For CRAM output, the corrected command keeps an --out-bam path ending in .cram, adds --ref /ref/panel.fa as the FASTA matching the graph and --ref-paths, and removes --align-only, which cannot produce CRAM; the agent explains that the run will now coordinate-sort and mark duplicates by default, and adds or offers --no-markdups to keep duplicates unmarked.", + "The corrected command points the graph and index options at the converted graph and regenerated indexes (new names or clearly labeled placeholders), keeps --ref-paths /ref/paths.txt, both FASTQs, --sample S1, and --read-group rg1, and recommends --run-ref-verification for the first run with this reference.", + "The agent does not run vg or pbrun, download data, claim files were converted or generated, or inspect hardware." + ], + "expected_skill": "parabricks", + "expected_script": null, + "files": [] + }, + { + "id": "parabricks-021", + "prompt": "Assess whether a remote workstation is ready for Parabricks 4.8.0 germline runs with nvcr.io/nvidia/clara/clara-parabricks:4.8.0-1. Use these administrator-supplied facts: Ubuntu 22.04; one NVIDIA GeForce RTX 4090 with 24 GB and compute capability 8.9; driver 580.95.05; nvidia-smi reports CUDA Version 13.0; 32 CPU threads; 128 GB system RAM; Docker 27.3.1 with the NVIDIA Container Toolkit installed; a GPU container probe that ran nvidia-smi in nvidia/cuda:12.9.1-base-ubuntu22.04 succeeded; /scratch has 2 TB free. Your terminal is on a separate machine: do not probe it, install software, or launch containers. Explain blockers, what remains unverified, and next steps for the workstation, using requirements for the selected release.", + "expected_output": "The agent evaluates the supplied facts against Parabricks 4.8.0 requirements. The 4.8.0 container needs a driver compatible with CUDA 13.3.x, and consumer GPUs such as the GeForce RTX 4090 need driver 610 or newer, so driver 580.95.05, which reports CUDA 13.0, is a blocker; forward compatibility on older driver branches applies to data center and workstation GPUs, not this card. The successful CUDA 12.9.1 probe does not show 4.8.0 readiness, so after a driver upgrade the workstation should be re-tested with nvidia/cuda:13.3.1-base-ubuntu22.04 and an authorized 4.8.0-1 image check. The agent recognizes the GPU memory, architecture, CPU, RAM, Docker, and storage facts as adequate and leaves Parabricks image execution unverified.", + "assertions": [ + "The agent uses the supplied workstation facts and does not probe the separate terminal machine, install software, launch containers, or claim to have tested the workstation.", + "The agent applies the Parabricks 4.8.0 requirements and identifies driver 580.95.05 on a GeForce consumer GPU as a blocker because consumer GPUs need driver 610 or newer for the CUDA 13.3 container; it does not substitute 4.7.x requirements.", + "The agent explains that forward compatibility on older driver branches applies to data center and workstation GPUs rather than this consumer card, and that nvidia-smi CUDA Version 13.0 is the driver's capability, which is below 13.3.", + "The agent states that the successful nvidia/cuda:12.9.1 probe does not establish 4.8.0 readiness and recommends re-testing after the driver upgrade with nvidia/cuda:13.3.1-base-ubuntu22.04 and an authorized Parabricks 4.8.0-1 image check.", + "The agent recognizes 24 GB of GPU memory, compute capability 8.9, 32 CPU threads, 128 GB of RAM, Docker 27.3.1, and 2 TB of scratch space as adequate for this request, without inventing a fixed WGS disk requirement." + ], + "expected_skill": "parabricks", + "expected_script": null, + "files": [] + }, + { + "id": "parabricks-022", + "prompt": "Translate this CPU GATK command to Parabricks 4.8.0: gatk HaplotypeCaller -R /ref/GRCh38.fa -I /data/S1.bam -O /results/S1.vcf.gz -G StandardAnnotation -G AS_StandardAnnotation. We want a per-sample VCF for direct hard filtering, not a gVCF. Explain any options that 4.8.0 rejects and give the pbrun haplotypecaller command. These are container paths; hardware details are unavailable. This is planning only: do not execute commands or inspect this machine.", + "expected_output": "The agent maps -R, -I, and -O to --ref, --in-bam, and --out-variants and keeps StandardAnnotation through the Parabricks -G or --annotation-group option. It explains that Parabricks 4.8.0 rejects allele-specific (AS_*) annotations unless --gvcf is set, so the translated command would fail its argument checks as written. Because a per-sample VCF is required, the command drops AS_StandardAnnotation rather than switching to gVCF, and the agent notes that keeping allele-specific annotations would require gVCF output instead.", + "assertions": [ + "The pbrun haplotypecaller command uses --ref /ref/GRCh38.fa, --in-bam /data/S1.bam, and --out-variants /results/S1.vcf.gz.", + "The command keeps StandardAnnotation through the Parabricks -G or --annotation-group option.", + "The agent explains that Parabricks 4.8.0 rejects allele-specific (AS_*) annotations unless --gvcf is set, so a direct translation that keeps AS_StandardAnnotation fails its argument checks.", + "Because a per-sample VCF is required, the final command omits AS_StandardAnnotation and does not add --gvcf; the agent states that keeping allele-specific annotations would require gVCF output.", + "The agent does not pass GATK engine or Java options, invent flags, claim output parity, execute commands, or inspect hardware." + ], + "expected_skill": "parabricks", + "expected_script": null, + "files": [] + }, + { + "id": "parabricks-023", + "prompt": "Our Parabricks 4.7.1 exome command is: pbrun deepvariant --ref /ref/GRCh38.fa --in-bam /data/exome.bam --use-wes-model --disable-small-model --interval-file /ref/targets.bed --out-variants /results/exome.vcf.gz. We added --disable-small-model to match Google DeepVariant's WES behavior. We are moving to Parabricks 4.8.0. Is --disable-small-model still needed, and what is the minimal 4.8.0 command with the same model behavior? These are container paths. This is planning only: do not execute commands or inspect this machine.", + "expected_output": "The agent explains that in Parabricks 4.8.0 --use-wes-model disables the small model by itself, matching Google DeepVariant's WES default, so --disable-small-model is no longer needed. In 4.7.1 the small model stayed on unless --disable-small-model was also passed, so the original command was correct for that release. The minimal 4.8.0 command keeps --ref, --in-bam, --use-wes-model, --interval-file, and --out-variants and drops --disable-small-model without adding unsupported flags.", + "assertions": [ + "The agent explains that in Parabricks 4.8.0 --use-wes-model disables the small model automatically, matching Google DeepVariant's WES behavior, so --disable-small-model is no longer required.", + "The agent notes that in 4.7.1 the small model stayed enabled with --use-wes-model unless --disable-small-model was also passed, so the original command was correct for 4.7.1.", + "The minimal 4.8.0 command keeps --ref /ref/GRCh38.fa, --in-bam /data/exome.bam, --use-wes-model, --interval-file /ref/targets.bed, and --out-variants /results/exome.vcf.gz, and omits --disable-small-model.", + "The agent does not add --enable-small-model, which is not in the current tool reference, or invent other flags.", + "The agent does not claim output parity with Google DeepVariant without a comparison run, and does not execute commands or inspect hardware." + ], + "expected_skill": "parabricks", + "expected_script": null, + "files": [] + }, + { + "id": "parabricks-024", + "prompt": "With Parabricks 4.8.0, haplotypecaller wrote an uncompressed gVCF to /results/S1.g.vcf. A teammate's wrapper then runs pbrun indexgvcf --input /results/S1.g.vcf and polls for /results/S1.g.vcf.tbi before starting genotyping. Will that index path appear? Explain indexgvcf's output naming for compressed and uncompressed inputs, and give the corrected command and the path the wrapper should wait for. /results is a writable container path. This is planning only: do not execute anything.", + "expected_output": "The agent explains that indexgvcf writes the index beside its --input: it appends .tbi to a compressed .g.vcf.gz input, but an uncompressed .g.vcf gets an .idx index. The wrapper should run pbrun indexgvcf --input /results/S1.g.vcf and wait for /results/S1.g.vcf.idx, because /results/S1.g.vcf.tbi will never appear. It invents no --out option and accounts for an existing index file before indexing.", + "assertions": [ + "The agent states that pbrun indexgvcf writes /results/S1.g.vcf.idx for this uncompressed input, so the wrapper's /results/S1.g.vcf.tbi never appears.", + "The agent explains that .tbi is appended only for a compressed .g.vcf.gz input, for example sample.g.vcf.gz becomes sample.g.vcf.gz.tbi.", + "The corrected plan runs pbrun indexgvcf --input /results/S1.g.vcf, invents no --out option, and has the wrapper wait for /results/S1.g.vcf.idx, or bgzip-compresses it to .g.vcf.gz first (plain gzip cannot be tabix-indexed) if a tabix index is specifically required.", + "The plan accounts for an existing /results/S1.g.vcf.idx before indexing, consistent with the skill's guardrail against overwriting index files.", + "The agent does not execute commands, claim the index was created, or inspect hardware." + ], + "expected_skill": "parabricks", + "expected_script": null, + "files": [] + }, + { + "id": "parabricks-025", + "prompt": "We run Parabricks 4.7.1 and are not upgrading yet. Prepare a pbrun ont_germline command that keeps minimap2 chaining on the GPU, using --ref /ref/GRCh38.fa, --in-fq /data/ont.fastq.gz, --out-bam /results/ont.bam, and --out-variants /results/ont.vcf.gz. These are container paths. This is command preparation only: do not execute commands or inspect this machine.", + "expected_output": "The agent writes a 4.7.1 command that enables GPU chaining with the bare --chaining-on-gpu switch, because --seeding-chaining-on-gpu and its on, off, and auto values are new in 4.8.0. It preserves the supplied reference, input, BAM, and VCF paths and leaves other tuning at its defaults without benchmark evidence.", + "assertions": [ + "The command enables GPU chaining with the bare --chaining-on-gpu switch and passes no value to it.", + "The command does not use --seeding-chaining-on-gpu, which Parabricks 4.7.1 does not provide.", + "The command preserves --ref /ref/GRCh38.fa, --in-fq /data/ont.fastq.gz, --out-bam /results/ont.bam, and --out-variants /results/ont.vcf.gz.", + "The agent does not prescribe fixed --nstreams, --chunk-size, or other tuning values without benchmark evidence.", + "The agent prepares the command without executing it or inspecting hardware." + ], + "expected_skill": "parabricks", + "expected_script": null, + "files": [] } ] } diff --git a/skills/bionemo-parabricks/evals/files/rna-batch.json b/skills/bionemo-parabricks/evals/files/rna-batch.json index 064ae54be..1a178b4d7 100644 --- a/skills/bionemo-parabricks/evals/files/rna-batch.json +++ b/skills/bionemo-parabricks/evals/files/rna-batch.json @@ -1,5 +1,5 @@ { - "parabricks_version": "4.7.1", + "parabricks_version": "4.8.0", "reference_assets": "The FASTA and STAR library use the same reference sequences and annotation; the library was built by STAR 2.7.2a. Input data paths are deployment paths, not local files to probe.", "jobs": [ { diff --git a/skills/bionemo-parabricks/evals/files/rna-contracts.json b/skills/bionemo-parabricks/evals/files/rna-contracts.json index b0118df4d..79cd5feb1 100644 --- a/skills/bionemo-parabricks/evals/files/rna-contracts.json +++ b/skills/bionemo-parabricks/evals/files/rna-contracts.json @@ -1,5 +1,5 @@ { - "parabricks_version": "4.7.1", + "parabricks_version": "4.8.0", "reference_assets": "The FASTA and STAR library use the same reference sequences and annotation; the library was built by STAR 2.7.2a. Input data paths are deployment paths, not local files to probe.", "jobs": [ { diff --git a/skills/bionemo-parabricks/references/command-conventions.md b/skills/bionemo-parabricks/references/command-conventions.md index b0a4e4411..0d69b46b3 100644 --- a/skills/bionemo-parabricks/references/command-conventions.md +++ b/skills/bionemo-parabricks/references/command-conventions.md @@ -9,7 +9,7 @@ their Tools column for the selected command. Tool examples give the command inside the container. Add one Docker envelope only when requested; preserve a requested bare `pbrun` command or argument array. -Use an exact NVIDIA release tag (4.7.1 uses `4.7.1-1`), never `latest` or an +Use an exact NVIDIA release tag (4.8.0 uses `4.8.0-1`), never `latest` or an implicit tag. For reproducible execution, resolve that release to its trusted NGC manifest digest and record the digest with the run. An image's local `RepoDigests` after an authorized pull can identify the downloaded manifest; @@ -48,11 +48,11 @@ consent rules. Preparing a workload command does not authorize executing it. ## Translating options -The mapping tables primarily describe Parabricks 4.7.1. Check each selected -release's NVIDIA tool manual before finalizing syntax, defaults, optional flags, -input modes, or output naming. An upstream option without a documented mapping -has no assumed Parabricks equivalent; do not pass it through or borrow an option -from another `pbrun` tool. Flag availability does not establish biological parity. +Check each selected release's NVIDIA tool manual before finalizing syntax, +defaults, optional flags, input modes, or output naming. An upstream option +without a documented mapping has no assumed Parabricks equivalent; do not pass +it through or borrow an option from another `pbrun` tool. Flag availability +does not establish biological parity. In option tables, **—** in the baseline column denotes a Parabricks-only control. If an upstream option is absent from both the tool-specific table and its scoped rows in `shared-options.md`, treat it as unmapped until the selected @@ -106,6 +106,8 @@ or outputs. For example, `rna_fq2bam` needs both `--output-dir` for generated STAR outputs and `--out-bam` for the final BAM. A Docker output mount does not supply either argument. Retain explicit placeholders when a required path is unknown. Check this from the command text without launching a container. +Appending `--dry-run` has `pbrun` validate the arguments and input paths +without a GPU; it is still a container launch that needs authorization. Before execution, check that every input and required index resolves through the mounts and that reference, known-sites, model, and graph resources are diff --git a/skills/bionemo-parabricks/references/minimap2-controls.md b/skills/bionemo-parabricks/references/minimap2-controls.md new file mode 100644 index 000000000..9d8c73dc7 --- /dev/null +++ b/skills/bionemo-parabricks/references/minimap2-controls.md @@ -0,0 +1,14 @@ +# Minimap2 pipeline controls + +These v4.8.0 controls apply only to the commands named in the **Tools** column. +Combine them with the selected tool's option mapping and its scoped rows in +[shared-options.md](shared-options.md) for inputs, intervals, model files, +output, and memory limits. Use the release and execution rules in +[command-conventions.md](command-conventions.md). + +| Option | Role | Tools | +| --- | --- | --- | +| `--pbmm2`, `--pbmm2-unmapped` | Compatibility controls for pbmm2-style output and unmapped records. | `minimap2`, `pacbio_germline` | +| `--standalone-bqsr` | Pipeline mode control; for `minimap2`, runs BQSR after sorted BAM generation. | `minimap2`, `ont_germline`, `pacbio_germline` | +| `--nstreams`, `--max-queue-*`, `--chunk-size`, `--estimated-*`, `--stage2-large-chaining-size` | GPU pipeline tuning, including `--max-queue-chunks`, `--max-queue-reads`, `--estimated-read-length`, and `--estimated-anchor-per-read`. For `minimap2`, streams and chunk size default to `auto`, tuned from device memory and preset. Set values only for benchmarked tuning. | `minimap2`, `ont_germline`, `pacbio_germline` | +| `--seeding-chaining-on-gpu on\|off\|auto` | GPU seeding and chaining; `on` may help CPU-bound alignment. `auto` leaves ONT and PacBio presets on CPU; `minimap2` selects GPU only for `splice:sr`. Replaces 4.7.1's bare `--chaining-on-gpu` switch, now a deprecated alias that requires a value. | `minimap2`, `ont_germline`, `pacbio_germline` | diff --git a/skills/bionemo-parabricks/references/pbrun-bam2fq.md b/skills/bionemo-parabricks/references/pbrun-bam2fq.md index 074bdd54e..b66525d12 100644 --- a/skills/bionemo-parabricks/references/pbrun-bam2fq.md +++ b/skills/bionemo-parabricks/references/pbrun-bam2fq.md @@ -14,7 +14,7 @@ ## Preserving reads during conversion -For Parabricks 4.7.0, paired reads use `--out-suffixF` and `--out-suffixF2`. +Paired reads use `--out-suffixF` and `--out-suffixF2`. Orphan first mates, orphan second mates, and unpaired reads are **ignored** unless `--out-suffixO`, `--out-suffixO2`, and `--out-suffixS`, respectively, are supplied. A single unpaired output does not capture both orphan categories. diff --git a/skills/bionemo-parabricks/references/pbrun-deepsomatic.md b/skills/bionemo-parabricks/references/pbrun-deepsomatic.md index 79d3a77bb..6852d3f46 100644 --- a/skills/bionemo-parabricks/references/pbrun-deepsomatic.md +++ b/skills/bionemo-parabricks/references/pbrun-deepsomatic.md @@ -27,7 +27,8 @@ selected version before finalizing. ## Gotchas -Parabricks DeepSomatic `--gvcf` option actually produces both .g.vcf and .vcf files with the same name. Do not generate separate commands for gvcf and vcf outputs. +Parabricks `deepsomatic` has no `--gvcf` option; write the VCF with +`--out-variants`. ## DeepSomatic Option Mapping diff --git a/skills/bionemo-parabricks/references/pbrun-deepvariant.md b/skills/bionemo-parabricks/references/pbrun-deepvariant.md index 5d8442667..e659902f8 100644 --- a/skills/bionemo-parabricks/references/pbrun-deepvariant.md +++ b/skills/bionemo-parabricks/references/pbrun-deepvariant.md @@ -30,11 +30,12 @@ version. Parabricks DeepVariant `--gvcf` option actually produces both .g.vcf and .vcf files with the same name. Do not generate separate commands for gvcf and vcf outputs. The small model is enabled by default. Do not add `--enable-small-model`; that -flag is not in the current tool reference. For WES, pass `--disable-small-model` -together with `--use-wes-model` when matching Google DeepVariant. +flag is not in the current tool reference. For WES, `--use-wes-model` also +disables the small model, matching Google DeepVariant; in 4.7.1, also pass +`--disable-small-model`. With both `--proposed-variants` and `--gvcf`, Parabricks warns and ignores -`--run-partition`; the [4.7.1 manual](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/deepvariant) +`--run-partition`; the [manual](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/deepvariant) also warns of a slowdown for that combination. Preserve the requested candidate input and gVCF output, and omit the ignored partition flag. Removing it does not prove a speedup, and increasing GPU streams cannot restore partitioning. Measure diff --git a/skills/bionemo-parabricks/references/pbrun-deepvariant_germline.md b/skills/bionemo-parabricks/references/pbrun-deepvariant_germline.md index 4ac8b1457..dade383c5 100644 --- a/skills/bionemo-parabricks/references/pbrun-deepvariant_germline.md +++ b/skills/bionemo-parabricks/references/pbrun-deepvariant_germline.md @@ -33,7 +33,8 @@ Use this when translating BWA-MEM plus Google DeepVariant germline workflows to `pbrun deepvariant_germline`. Preprocessing and shared DeepVariant mappings for `deepvariant_germline` are in [shared-options.md](shared-options.md). The small model is enabled by default; use `--disable-small-model` to turn it off. For WES, -pass `--disable-small-model` with `--use-wes-model` to match Google DeepVariant. +`--use-wes-model` also disables it, matching Google DeepVariant; in 4.7.1, also +pass `--disable-small-model`. | Baseline option | `pbrun deepvariant_germline` equivalent | Notes | | --- | --- | --- | diff --git a/skills/bionemo-parabricks/references/pbrun-fq2bam.md b/skills/bionemo-parabricks/references/pbrun-fq2bam.md index 1e29255eb..1072d7c67 100644 --- a/skills/bionemo-parabricks/references/pbrun-fq2bam.md +++ b/skills/bionemo-parabricks/references/pbrun-fq2bam.md @@ -60,6 +60,7 @@ markdup/BQSR, intervals, GPU write controls, and similar) are in | Single-end FASTQ input | `--in-se-fq` | Single-end FASTQ input. | | FASTQ manifest or file list | `--in-fq-list`, `--in-se-fq-list` | Parabricks manifest; no direct BWA-MEM flag. | | `bwa mem -t` | `--bwa-cpu-thread-pool`, `--num-cpu-threads-per-stage`, `--bwa-primary-cpus` | Partial; CPU controls split across stages. | +| `bwa mem -SP5M` for Hi-C | `--bwa-options="-SP5M"` | Add other supported BWA-MEM options to the same string. | | `bwa mem` alignment-only output | `--align-only` | Stops after BWA-MEM; no sort/markdup. | | GATK/Picard `SortSam --SORT_ORDER coordinate` | Default `fq2bam` behavior | Coordinate sorting is part of the normal workflow. | | GATK/Picard `MarkDuplicates -I` | Implicit sorted intermediate | Sorted alignments feed duplicate marking unless disabled. | diff --git a/skills/bionemo-parabricks/references/pbrun-germline.md b/skills/bionemo-parabricks/references/pbrun-germline.md index ef960ee3d..c5234371f 100644 --- a/skills/bionemo-parabricks/references/pbrun-germline.md +++ b/skills/bionemo-parabricks/references/pbrun-germline.md @@ -14,8 +14,8 @@ 4. For preprocessing-only questions, route to `pbrun-fq2bam.md` and related FASTQ/BAM references; for runtime readiness, use `runtime-environment.md`. - For prepared BAM/CRAM input, use `pbrun-haplotypecaller.md`; the 4.7.1 - germline pipeline does not document `--in-bam`. + For prepared BAM/CRAM input, use `pbrun-haplotypecaller.md`; the germline + pipeline has no `--in-bam` option. ## Command Shape @@ -42,7 +42,7 @@ markdup/BQSR, intervals, and shared execution controls) for `germline` are in | GATK `HaplotypeCaller --output`, `-O` | `--out-variants` | VCF/gVCF output. | | GATK `HaplotypeCaller --emit-ref-confidence GVCF` | `--gvcf` | gVCF mode. | | GATK `HaplotypeCaller --sample-ploidy` | `--ploidy` | Haploid/diploid where documented. | -| GATK `HaplotypeCaller` annotation/output-mode/pruning controls | `--haplotypecaller-options` | Pass supported HaplotypeCaller options as one string. | +| GATK `HaplotypeCaller` annotation/output-mode/pruning controls | `--haplotypecaller-options` | Pass supported HaplotypeCaller options as one string. `AS_*` annotations require `--gvcf`. | | `--java-options`, GATK engine/common flags | No direct equivalent | Not exposed as GATK engine controls. | ## germline Options Without BWA-MEM/GATK Equivalents @@ -54,7 +54,7 @@ Shared Parabricks pipeline and GPU controls for `germline` are in | --- | --- | | `--run-partition` | Genome partitions for HaplotypeCaller (one process per partition). Not fq2bam GPU-process partitioning. | | `--bwa-gpu-num-per-partition` | BWA GPUs per worker when `--run-partition` is set (default: 2; must divide `--num-gpus`). | -| `--num-streams-per-gpu` | HaplotypeCaller streams (default: 1). Not a partition flag. | +| `--num-streams-per-gpu` | HaplotypeCaller streams (default: `auto`). Not a partition flag. | ## Validation diff --git a/skills/bionemo-parabricks/references/pbrun-giraffe.md b/skills/bionemo-parabricks/references/pbrun-giraffe.md index a4e0fb766..be70182de 100644 --- a/skills/bionemo-parabricks/references/pbrun-giraffe.md +++ b/skills/bionemo-parabricks/references/pbrun-giraffe.md @@ -23,16 +23,29 @@ pbrun giraffe \ Always verify exact graph resource flags and output options against the selected version before finalizing. Do not guess graph/index file combinations. -For **4.7.0**, the GBZ graph, distance index, minimizer index, and zipcodes file +The GBZ graph, distance index, minimizer index, and zipcodes file are required inputs. Supply `--zipcodes-name` explicitly; do not infer a compatible zipcodes file from a minimizer filename. Use `--ref-paths` when the output BAM needs a supplied path order or sequence dictionary. +Giraffe uses vg v1.75.1: generate index files with vg v1.75.1, regenerating any +built with an older vg, and supply a GBZ version 1 graph. vg 1.72.0 and later +write version 2 by default, which fails to load; convert it with +`vg gbwt -Z graph.gbz -g graph-v1.gbz --gbz-v1` (vg 1.74.0 or later). Indexes +built from the same graph stay valid after that conversion. In 4.7.1, giraffe +uses vg v1.70.0; build its indexes with that version. + To produce a **coordinate-sorted BAM without duplicate marking**, use `--no-markdups`. `--align-only` stops before coordinate sorting and therefore does not meet that output requirement. Preserve the supplied sample and all read-group fields using the Giraffe-specific flags in the mapping below. +An `--out-bam` path ending in `.cram` writes CRAM. It requires a +`--ref` FASTA that matches the graph and the paths in `--ref-paths`, cannot be +combined with `--align-only`, and `--run-ref-verification` is recommended the +first time a reference is used. Dropping `--align-only` for CRAM also turns on +duplicate marking; add `--no-markdups` if duplicates should stay unmarked. + ## Performance Guidance Prefer the documented automatic stream selection for general commands: leave @@ -73,8 +86,9 @@ equivalent. | `vg giraffe` fragment length controls | `--max-fragment-length`, `--fragment-mean`, `--fragment-stdev` | Same fragment-distribution role. | | `vg giraffe --max-multimaps`, `-M` | `--max-multimaps` | Max alignments per read (default: 1). | | `vg giraffe --copy-comment` | `--copy-comment` | Appends FASTQ comment to BAM output via auxiliary tag. | +| `vg giraffe --supplementary` | `--supplementary` | Identify and report supplementary alignments (off by default). | | Alignment-only output | `--align-only` | Stops after `vg giraffe` alignment output; does not coordinate-sort. | -| GATK/Picard `SortSam --OUTPUT`, `-O` | `--out-bam` | Final BAM output path. | +| GATK/Picard `SortSam --OUTPUT`, `-O` | `--out-bam` | Final BAM output path, or CRAM for a `.cram` path. | | GATK/Picard duplicate-marking behavior | `--markdups-*`, `--optical-duplicate-pixel-distance`, `--no-markdups` | Parabricks exposes the duplicate-marking controls documented for this pipeline. | | GATK/Picard `--version` | `--version` | Same version-reporting role. | | Upstream `vg giraffe` options not listed here | No direct equivalent | Not exposed by current Parabricks docs for `pbrun giraffe`. | @@ -88,6 +102,8 @@ equivalent. | `--nstreams`, `--num-cpu-threads-per-gpu`, `--batch-size`, `--write-threads`, `--work-queue-capacity` | Parabricks GPU/CPU pipeline scheduling controls. Prefer `--nstreams auto` for default guidance; use integer stream counts only for benchmarked/manual tuning. | | `--minimizers-gpu` | Parabricks GPU offload for minimizers/seeds in supported single-end runs. | | `--memory-limit`, `--low-memory` | Parabricks host/GPU memory controls for the pipeline. | +| `--in-se-cram`, `--in-cram-ref`, `--cram-read-threads` | Single-end CRAM input; aligned reads are re-aligned and need `--in-cram-ref` to decode. Paired-end CRAM is not supported. | +| `--ultima-tags`, `--tp-output-order` | Carry Ultima per-base `tp`/`t0` tags from `--in-se-cram` input to the output. | ## Validation diff --git a/skills/bionemo-parabricks/references/pbrun-haplotypecaller.md b/skills/bionemo-parabricks/references/pbrun-haplotypecaller.md index 90d002ddb..a1656028d 100644 --- a/skills/bionemo-parabricks/references/pbrun-haplotypecaller.md +++ b/skills/bionemo-parabricks/references/pbrun-haplotypecaller.md @@ -30,8 +30,11 @@ GPU-accelerated HaplotypeCaller counterpart, but the CLI is not one-to-one: some GATK flags are direct Parabricks flags, while other supported original HaplotypeCaller options must be passed through `--haplotypecaller-options`. Use the spelling documented for that inner parser, which differs from GATK's -top-level CLI for some options. For example, 4.7.1 accepts one quoted value -`'-min-pruning 4 -pcr-indel-model NONE'`; those are single-hyphen inner flags. +top-level CLI for some options. For example, the inner parser takes one quoted +value `'-min-pruning 4 -pcr-indel-model NONE'`; those are single-hyphen inner +flags. Allele-specific (`AS_*`) annotations, whether from `-G` or from `-A` +inside `--haplotypecaller-options`, require `--gvcf`; Parabricks rejects them +during argument checking. `--in-recal-file` applies the supplied recalibration table during calling; creating that table earlier did not itself rewrite the input BAM. A separate ApplyBQSR BAM is unnecessary when using this caller input. @@ -66,7 +69,7 @@ ApplyBQSR BAM is unnecessary when using this caller input. | `--adaptive-pruning` | Parabricks-exposed graph pruning control. | | `--force-call-filtered-alleles` | Parabricks force-calling behavior tied to its documented allele input. | | `--filter-reads-too-long`, `--no-alt-contigs` | Parabricks read/contig filtering conveniences. | -| `--htvc-low-memory`, `--num-htvc-threads`, `--num-streams-per-gpu`, `--run-partition`, `--gpu-num-per-partition` | Parabricks GPU/partition performance controls. `--num-streams-per-gpu` default 1. | +| `--htvc-low-memory`, `--num-htvc-threads`, `--num-streams-per-gpu`, `--run-partition`, `--gpu-num-per-partition` | Parabricks GPU/partition performance controls. `--num-streams-per-gpu` defaults to `auto`. | ## Validation diff --git a/skills/bionemo-parabricks/references/pbrun-indexgvcf.md b/skills/bionemo-parabricks/references/pbrun-indexgvcf.md index 3fc323176..bb228ea74 100644 --- a/skills/bionemo-parabricks/references/pbrun-indexgvcf.md +++ b/skills/bionemo-parabricks/references/pbrun-indexgvcf.md @@ -2,11 +2,13 @@ ## First Steps -1. Confirm the input is a GVCF that needs indexing. +1. Confirm the input is a GVCF that needs indexing. `haplotypecaller` and + `deepvariant` already write `.tbi` for `.gz` output, so check for + that index before planning an `indexgvcf` run. 2. Collect required inputs: - Input GVCF path, and whether its directory is writable inside the container. - Where the index must end up. There is no documented output-path option; the - `.tbi` is written next to the input (see Output Naming below). + index is written next to the input (see Output Naming below). 3. Ask whether the output will be consumed by `genotypegvcf` or another tool. ## Command Shape @@ -21,9 +23,10 @@ Verify exact flags against the selected version. ## Output Naming and Read-Only Inputs -- The index name is the input filename with `.tbi` appended - (`sample.g.vcf.gz` → `sample.g.vcf.gz.tbi`). Do not use or invent an `--out` - flag; none is documented for `indexgvcf`. +- The index name is the input filename with `.tbi` appended for a `.gz` input + (`sample.g.vcf.gz` → `sample.g.vcf.gz.tbi`), or `.idx` for an uncompressed + `.g.vcf`. Do not use or invent an `--out` flag; none is documented for + `indexgvcf`. - If the original GVCF is on a read-only mount (for example `/data`), indexing it in place fails. Index a **writable copy** instead and leave the original untouched. @@ -36,19 +39,19 @@ Verify exact flags against the selected version. cp -p /data/ /results/ ``` - Ask the user before replacing an existing GVCF or `.tbi`, and make clear the - commands are a plan until the user runs them. + For an uncompressed `.g.vcf`, check for `.idx` instead of the + `.tbi`. Ask the user before replacing an existing GVCF or index, and make + clear the commands are a plan until the user runs them. ## IndexFeatureFile Option Mapping Use this mapping when translating a GATK `IndexFeatureFile` command for GVCF -indexing to `pbrun indexgvcf`. Parabricks documents `indexgvcf` as -creating a `.tbi` index by appending `.tbi` to the input GVCF filename. +indexing to `pbrun indexgvcf`. | GATK option | `pbrun indexgvcf` equivalent | Notes | | --- | --- | --- | | `--input`, `-I` | `--input` | Required gVCF/gVCF.GZ input. | -| Implicit output index path | Implicit `.tbi` next to input | Parabricks docs state the output name is determined by appending `.tbi` to the input GVCF filename. | +| Implicit output index path | Implicit `.tbi` (`.gz` input) or `.idx` (`.g.vcf`) next to input | Not configurable; see Output Naming and Read-Only Inputs. | | GATK output path override, cloud flags, `--arguments_file`, and Java options | No direct equivalent | Not exposed by current Parabricks docs for `indexgvcf`. | ## Validation @@ -58,9 +61,10 @@ creating a `.tbi` index by appending `.tbi` to the input GVCF filename. ## Guardrails -- Do not use this for ordinary VCF indexing unless the selected version - documents that use. +- Index only GVCFs and ordinary `.vcf.gz` files; other inputs are not + documented. - Do not run genotyping here; route to `pbrun-genotypegvcf.md`. - Do not invent output index suffixes; verify version behavior. -- Do not overwrite an existing GVCF or `.tbi`, and do not index a read-only - original in place; use a writable copy after checking the destination. +- Do not overwrite an existing GVCF or index (`.tbi`, or `.idx` for an + uncompressed `.g.vcf`), and do not index a read-only original in place; use + a writable copy after checking the destination. diff --git a/skills/bionemo-parabricks/references/pbrun-minimap2.md b/skills/bionemo-parabricks/references/pbrun-minimap2.md index 9d26acddb..daf635a54 100644 --- a/skills/bionemo-parabricks/references/pbrun-minimap2.md +++ b/skills/bionemo-parabricks/references/pbrun-minimap2.md @@ -36,6 +36,7 @@ to several upstream commands rather than one single tool. | Baseline option | `pbrun minimap2` equivalent | Notes | | --- | --- | --- | | `minimap2 ` | `--ref` | Required reference FASTA path. | +| `minimap2 ` paired-end FASTQ | `--in-fq ` | Two files per `--in-fq` are aligned as a pair; one file is single-end. Interleaved FASTQ is not supported. Pairing is new in 4.8.0; do not rely on it in 4.7.1. | | BAM/CRAM input for preprocessing workflow | `--in-bam` | Parabricks input BAM/CRAM mode. | | `minimap2 -x` | `--preset` | Parabricks supports documented presets such as `map-pbmm2`, `map-hifi`, `map-ont`, `lr:hq`, `splice`, `splice:hq`, and `splice:sr`. | | `minimap2 -t` | `--num-threads` | Processing thread count. | @@ -55,14 +56,13 @@ to several upstream commands rather than one single tool. ## minimap2 Options Without minimap2/GATK Equivalents +Pipeline modes and GPU tuning shared with the long-read callers are in +[minimap2-controls.md](minimap2-controls.md). Memory and output controls are in +[shared-options.md](shared-options.md); use rows scoped to `minimap2`. + | `pbrun minimap2` option | Why it has no direct baseline equivalent | | --- | --- | -| `--pbmm2`, `--pbmm2-unmapped` | Parabricks compatibility mode for pbmm2-style output and unmapped records. | | `--out-qc-metrics-dir` | Parabricks workflow output for QC metrics. | -| `--standalone-bqsr` | Parabricks mode control for running BQSR after sorted BAM generation. | -| `--nstreams`, `--max-queue-chunks`, `--max-queue-reads`, `--chunk-size` | Parabricks GPU/CPU pipeline queue and chunk controls. | -| `--chaining-on-gpu` | GPU offload for minimap2 chaining; may help CPU-bound runs. | -| `--low-memory` | Parabricks memory-reduction mode. | ## Validation diff --git a/skills/bionemo-parabricks/references/pbrun-mutectcaller.md b/skills/bionemo-parabricks/references/pbrun-mutectcaller.md index 7bd475ce5..d6963d2fd 100644 --- a/skills/bionemo-parabricks/references/pbrun-mutectcaller.md +++ b/skills/bionemo-parabricks/references/pbrun-mutectcaller.md @@ -24,7 +24,7 @@ pbrun mutectcaller \ Verify exact tumor/normal, resource, interval, and filtering flags against the selected version. -For a panel of normals in **4.7.0**, follow +For a panel of normals, follow [prepon](pbrun-prepon.md) for contig-header validation and the required `.pon` resource. Pass the prepared **VCF.GZ** to `--pon`, then use [postpon](pbrun-postpon.md) for PON INFO annotation of the caller's VCF. @@ -57,7 +57,7 @@ but common GATK engine and Java controls do not. | --- | --- | | PON index handoff from `prepon` / `postpon` workflow flags | Parabricks decomposes PON handling into preprocessing, calling, and postprocessing steps. | | Parabricks-specific filtering or compatibility flags documented for the selected version | These are wrapper-specific controls; verify current docs before use. | -| `--num-streams-per-gpu`, `--mutect-low-memory`, `--run-partition` | Parabricks GPU/partition performance controls. `--num-streams-per-gpu` default 1. | +| `--num-streams-per-gpu`, `--mutect-low-memory`, `--run-partition` | Parabricks GPU/partition performance controls. `--num-streams-per-gpu` defaults to `auto`. | ## Validation diff --git a/skills/bionemo-parabricks/references/pbrun-ont_germline.md b/skills/bionemo-parabricks/references/pbrun-ont_germline.md index a910f13bb..4205ec57c 100644 --- a/skills/bionemo-parabricks/references/pbrun-ont_germline.md +++ b/skills/bionemo-parabricks/references/pbrun-ont_germline.md @@ -33,24 +33,21 @@ this as a long-read pipeline using minimap2 v2.31 alignment and DeepVariant calling. The DeepVariant small model is enabled by default; use `--disable-small-model` to turn it off. +Use [shared-options.md](shared-options.md) rows scoped to `ont_germline` for +minimap2 flags, intervals, model files, and memory controls. Pipeline modes +and GPU tuning are in [minimap2-controls.md](minimap2-controls.md). + | Baseline option | `pbrun ont_germline` equivalent | Notes | | --- | --- | --- | | minimap2 `-x map-ont` or ONT preset | `--preset map-ont` or selected ONT preset | Confirm ONT chemistry/use case and selected version before changing defaults. | -| minimap2 `-k`, `-uf`, `-ub`, `--MD`, `--eqx`, `-y` | Matching Parabricks minimap2 flags | Parabricks exposes these minimap2 controls directly. | | DeepVariant `--model_type ONT` | ONT pipeline default, or `--mode`/model flags where documented | Use ONT-specific mode/model settings from the selected version. | -| DeepVariant custom model | `--pb-model-file`, `--pb-small-model-file` | Parabricks TensorRT model files. | -| Intervals/regions | `--interval` or `--interval-file` | Parabricks separates inline intervals from interval files. | | Upstream minimap2/DeepVariant options not listed here | No direct equivalent | Not exposed by current Parabricks docs for `ont_germline`. | ## ont_germline Options Without minimap2/DeepVariant Equivalents | `pbrun ont_germline` option | Why it has no direct baseline equivalent | | --- | --- | -| `--standalone-bqsr`, `--out-qc-metrics-dir` | Parabricks pipeline mode/output controls. | -| DeepVariant channel/allele-counter flags exposed directly by Parabricks | Parabricks first-class controls for DeepVariant internals. | -| `--nstreams`, `--max-queue-*`, `--chunk-size`, `--chaining-on-gpu` | Parabricks minimap2 GPU pipeline controls. `--chaining-on-gpu` may help CPU-bound alignment. | | `--disable-small-model` | Opt-out for the default-on DeepVariant small model. | -| `--low-memory` | Parabricks memory-reduction mode. | ## Validation diff --git a/skills/bionemo-parabricks/references/pbrun-pacbio_germline.md b/skills/bionemo-parabricks/references/pbrun-pacbio_germline.md index c1479918e..5f423954a 100644 --- a/skills/bionemo-parabricks/references/pbrun-pacbio_germline.md +++ b/skills/bionemo-parabricks/references/pbrun-pacbio_germline.md @@ -34,25 +34,21 @@ documents this as a long-read pipeline using minimap2 v2.31 alignment and DeepVariant calling. The DeepVariant small model is enabled by default; use `--disable-small-model` to turn it off. +Use [shared-options.md](shared-options.md) rows scoped to `pacbio_germline` for +minimap2 flags, intervals, model files, and memory controls. Pipeline modes +and GPU tuning are in [minimap2-controls.md](minimap2-controls.md). + | Baseline option | `pbrun pacbio_germline` equivalent | Notes | | --- | --- | --- | | minimap2 `-x map-pbmm2` or PacBio preset | `--preset map-pbmm2` or `--preset map-hifi` | Confirm PacBio subtype and selected version before changing the default. | -| minimap2 `-k`, `-uf`, `-ub`, `--MD`, `--eqx`, `-y` | Matching Parabricks minimap2 flags | Parabricks exposes these minimap2 controls directly. | | DeepVariant `--model_type PACBIO` | PacBio pipeline default, or `--mode`/model flags where documented | Use PacBio-specific mode/model settings from the selected version. | -| DeepVariant custom model | `--pb-model-file`, `--pb-small-model-file` | Parabricks TensorRT model files. | -| Intervals/regions | `--interval` or `--interval-file` | Parabricks separates inline intervals from interval files. | | Upstream minimap2/DeepVariant options not listed here | No direct equivalent | Not exposed by current Parabricks docs for `pacbio_germline`. | ## pacbio_germline Options Without minimap2/DeepVariant Equivalents | `pbrun pacbio_germline` option | Why it has no direct baseline equivalent | | --- | --- | -| `--pbmm2`, `--pbmm2-unmapped` | Parabricks compatibility controls for pbmm2-style output. | -| `--standalone-bqsr`, `--out-qc-metrics-dir` | Parabricks pipeline mode/output controls. | -| DeepVariant channel/allele-counter flags exposed directly by Parabricks | Parabricks first-class controls for DeepVariant internals. | -| `--nstreams`, `--max-queue-*`, `--chunk-size`, `--chaining-on-gpu` | Parabricks minimap2 GPU pipeline controls. `--chaining-on-gpu` may help CPU-bound alignment. | | `--disable-small-model` | Opt-out for the default-on DeepVariant small model. | -| `--low-memory` | Parabricks memory-reduction mode. | ## Validation diff --git a/skills/bionemo-parabricks/references/pbrun-pangenome_aware_deepvariant.md b/skills/bionemo-parabricks/references/pbrun-pangenome_aware_deepvariant.md index e1ddecaf9..5b3d9c817 100644 --- a/skills/bionemo-parabricks/references/pbrun-pangenome_aware_deepvariant.md +++ b/skills/bionemo-parabricks/references/pbrun-pangenome_aware_deepvariant.md @@ -28,7 +28,7 @@ For Roche SBX-D or SBX-Fast BAMs, add `--sbx`. That selects the shipped `deepvariant_pangenome_aware_sbx.eng` model unless `--pb-model-file` overrides it, and applies SBX make-examples/postprocess defaults. -## Parabricks 4.7.0 command +## Prepared-alignment command For prepared BAM/CRAM input, the four required arguments are `--ref`, `--pangenome` (the GBZ graph), `--in-bam`, and `--out-variants`: @@ -47,8 +47,8 @@ alignments; it does not require rerunning the `pangenome_germline` FASTQ pipelin ## Comparing with Google's implementation -The 4.7.0 manual documents three sources of output differences. Investigate -them separately after matching inputs, model versions, and comparison settings: +Three known sources cause output differences. Investigate them separately +after matching inputs, model versions, and comparison settings: - **CNN inference:** TensorRT and Keras can differ by about `10^-5` in predicted scores. The manual reports observed differing variants among zero-quality diff --git a/skills/bionemo-parabricks/references/pbrun-pangenome_germline.md b/skills/bionemo-parabricks/references/pbrun-pangenome_germline.md index d5a5aa79b..3ac641271 100644 --- a/skills/bionemo-parabricks/references/pbrun-pangenome_germline.md +++ b/skills/bionemo-parabricks/references/pbrun-pangenome_germline.md @@ -41,6 +41,7 @@ pipeline-level rather than one-to-one. | DeepVariant custom model | `--pb-model-file` | Optional TensorRT model. Default is the shipped pangenome-aware engine, or the SBX engine when `--sbx` is set. | | Roche SBX Google case-study settings | `--sbx` | Roche SBX-D / SBX-Fast mode on the pangenome-aware DeepVariant stage. | | `vg giraffe --max-multimaps`, `-M` | `--max-multimaps` | Max alignments per read (default: 1). | +| `vg giraffe --supplementary` | `--supplementary` | Identify and report supplementary alignments (off by default). | | Intervals/regions | `--interval` or `--interval-file` | Verify pangenome workflow support for interval restriction. | | Upstream `vg giraffe` or DeepVariant options not listed here | No direct equivalent | Not exposed by current Parabricks docs for `pangenome_germline`. | @@ -50,12 +51,15 @@ pipeline-level rather than one-to-one. | --- | --- | | `--sbx` | Roche SBX mode for the pangenome-aware DeepVariant stage. | | GPU graph-alignment stream, batch, queue, and minimizer controls | Parabricks GPU implementation tuning. | +| `--in-se-cram`, `--in-cram-ref`, `--cram-read-threads` | Single-end CRAM input, as in `giraffe`; the Ultima tag options are giraffe-only. | | GPU write/sort/storage controls | Parabricks accelerated output pipeline. | | DeepVariant channel/allele-counter flags exposed directly by Parabricks | Parabricks first-class controls for DeepVariant internals. | ## Validation - Pangenome resources are complete and compatible with the reference build. +- The graph is GBZ version 1 and the indexes were built with vg v1.75.1 + (v1.70.0 for 4.7.1; see `pbrun-giraffe.md`). - Output VCF/gVCF or output directory exists. ## Guardrails diff --git a/skills/bionemo-parabricks/references/pbrun-postpon.md b/skills/bionemo-parabricks/references/pbrun-postpon.md index 667f360a2..9e9d7dfbf 100644 --- a/skills/bionemo-parabricks/references/pbrun-postpon.md +++ b/skills/bionemo-parabricks/references/pbrun-postpon.md @@ -13,7 +13,7 @@ pbrun postpon \ --out-vcf /outputdir/ ``` -All three paths are required in 4.7.1. Use the same assembly-compatible PON as +All three paths are required. Use the same assembly-compatible PON as in prepon and mutectcaller, including its matching tabix index. Preserve the unannotated calls by selecting a distinct output path. Verify the annotated VCF and intended INFO changes after an authorized run; an output directory @@ -24,4 +24,4 @@ Runtime controls follow the shared command contract. Read the prepon reference for header repair and PON preparation; ordinary GATK engine flags do not have assumed Parabricks equivalents. -Source: [NVIDIA postpon 4.7.1 manual](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/postpon). +Source: [NVIDIA postpon manual](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/postpon). diff --git a/skills/bionemo-parabricks/references/pbrun-prepon.md b/skills/bionemo-parabricks/references/pbrun-prepon.md index 062f9ac0b..e72980fff 100644 --- a/skills/bionemo-parabricks/references/pbrun-prepon.md +++ b/skills/bionemo-parabricks/references/pbrun-prepon.md @@ -18,7 +18,7 @@ running prepon. Do not reuse the original index for changed compressed content. pbrun prepon --in-pon-file /workdir/ ``` -Run in a writable working area for generated resources. The 4.7.1 interface +Run in a writable working area for generated resources. `prepon` exposes no `--out` option; retain the prepared PON and generated companion resources for the caller. Supply that same PON path to `mutectcaller --pon`. Then use postpon to annotate the resulting calls. Keep all three commands as @@ -28,4 +28,4 @@ The only required tool input is `--in-pon-file`; runtime controls follow the shared command contract. Check prepon completion and the caller's access to its resources before calling. Do not infer graph or cohort inputs from the name. -Source: [NVIDIA prepon 4.7.1 manual](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/prepon). +Source: [NVIDIA prepon manual](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/prepon). diff --git a/skills/bionemo-parabricks/references/pbrun-rna_fq2bam.md b/skills/bionemo-parabricks/references/pbrun-rna_fq2bam.md index d21f31208..c6d9f4834 100644 --- a/skills/bionemo-parabricks/references/pbrun-rna_fq2bam.md +++ b/skills/bionemo-parabricks/references/pbrun-rna_fq2bam.md @@ -14,7 +14,7 @@ ## Command Shape -For Parabricks 4.7.0/4.7.1, every command needs a read-input mode, `--ref`, +Every command needs a read-input mode, `--ref`, `--genome-lib-dir`, **`--output-dir`**, and **`--out-bam`**. The output directory and final BAM are separate required arguments; a BAM path or Docker mount does not replace `--output-dir`. Check that both remain present after translating diff --git a/skills/bionemo-parabricks/references/pbrun-somatic.md b/skills/bionemo-parabricks/references/pbrun-somatic.md index 0c1718efb..80b92cb25 100644 --- a/skills/bionemo-parabricks/references/pbrun-somatic.md +++ b/skills/bionemo-parabricks/references/pbrun-somatic.md @@ -31,11 +31,9 @@ of the pipeline: longer than 512 bp. Valid values are 512 or 1024. Reads above the selected value still use CPU recovery, and processing longer reads at all also requires raising `--max-read-length`. -- `--run-partition`: genome/Mutect partitions, not fq2bam GPU-process partitioning. -- `--bwa-gpu-num-per-partition` (default: 2): BWA GPUs per worker when - `--run-partition` is set; must divide `--num-gpus`. -- `--gpu-num-per-partition`: Mutect GPUs per partition. -- `--num-streams-per-gpu` (default: 1): Mutect streams, not a partition flag. +- Partition and stream controls (`--run-partition`, + `--bwa-gpu-num-per-partition`, `--gpu-num-per-partition`, + `--num-streams-per-gpu`): roles and defaults are in the options table below. - `--mutect-low-memory` and `--low-memory` for memory-pressure troubleshooting. ## Somatic Pipeline Option Mapping @@ -73,7 +71,7 @@ single-tool mapping. | `--run-partition` | Genome/Mutect partitions (one process per partition). Not fq2bam GPU-process partitioning. | | `--bwa-gpu-num-per-partition` | BWA GPUs per worker when `--run-partition` is set (default: 2; must divide `--num-gpus`). | | `--gpu-num-per-partition` | Mutect GPUs per partition. | -| `--num-streams-per-gpu` | Mutect streams (default: 1). Not a partition flag. | +| `--num-streams-per-gpu` | Mutect streams (default: `auto`). Not a partition flag. | | `--mutect-low-memory` | Parabricks low-memory mode for the Mutect stage. | | GPU alignment/calling stream, queue, and memory controls | Parabricks GPU runtime tuning. | | GPU write/sort/storage controls | Parabricks accelerated output pipeline. | diff --git a/skills/bionemo-parabricks/references/performance.md b/skills/bionemo-parabricks/references/performance.md index e482d9a19..40d531345 100644 --- a/skills/bionemo-parabricks/references/performance.md +++ b/skills/bionemo-parabricks/references/performance.md @@ -1,15 +1,14 @@ # Parabricks Alignment Performance Guidance -Shared BWA-stream tuning guidance for the `fq2bam` and `fq2bam_meth` commands. +Shared BWA tuning guidance for `fq2bam`, `fq2bam_meth`, and the `germline`, +`deepvariant_germline`, and `somatic` pipelines. (Giraffe uses `--nstreams`; see `pbrun-giraffe.md`.) ## BWA Streams -Prefer the documented automatic stream selection for general commands: leave -`--bwa-nstreams` unset, or set `--bwa-nstreams auto` only when making the -default explicit. NVIDIA Parabricks 4.7.0 documentation says Parabricks -automatically chooses an optimal number of BWA streams from the GPU device -memory specification. +Prefer automatic stream selection for general commands: leave `--bwa-nstreams` +unset, or set `--bwa-nstreams auto` only when making the default explicit. +Parabricks picks the number of BWA streams from the GPU's device memory. Use integer `--bwa-nstreams` values only for benchmark-driven tuning or memory-pressure troubleshooting after confirming the selected Parabricks @@ -24,10 +23,13 @@ should not be part of conservative default command templates. requires raising `--max-read-length`. - `--run-partition`: try on systems with 4 or more GPUs. It forks one worker process per partition. `--bwa-gpu-num-per-partition` controls GPUs per - partition (default: 2) and must divide `--num-gpus` evenly. -- For `fq2bam_meth`, `--bwa-primary-cpus` and `--bwa-cpu-thread-pool` tune - CPU-stage threading (`--bwa-cpu-thread-pool` defaults to 1; check the selected - release before reusing an older fq2bam default). + partition (default: 2) and must divide `--num-gpus` evenly. The total + `--bwa-primary-cpus` must also divide evenly across the partitions. +- `--bwa-primary-cpus` and `--bwa-cpu-thread-pool` tune CPU-stage threading. + `fq2bam`, `fq2bam_meth`, and the `germline`, `deepvariant_germline`, and + `somatic` pipelines default to `auto` (16 primary threads per GPU) and a pool + of 1. A manual `--bwa-primary-cpus` is the run total, not per GPU; keep its + product with `--bwa-cpu-thread-pool` within the host's CPU threads. -Official performance guidance: - +Official performance guidance (4.8.0): + diff --git a/skills/bionemo-parabricks/references/rna-translation.md b/skills/bionemo-parabricks/references/rna-translation.md index ec116c6f6..558a33193 100644 --- a/skills/bionemo-parabricks/references/rna-translation.md +++ b/skills/bionemo-parabricks/references/rna-translation.md @@ -1,15 +1,16 @@ # STAR argument translation -Use `scripts/translate_star_to_parabricks.py` for Parabricks 4.7.0 or 4.7.1 -alignment drafts. It reads a JSON request object or array and never opens the -FASTQs, invokes the decompressor, contacts a service, or launches Parabricks. +Use `scripts/translate_star_to_parabricks.py` for Parabricks 4.7.0, 4.7.1, or +4.8.0 alignment drafts. It reads a JSON request object or array and never +opens the FASTQs, invokes the decompressor, contacts a service, or launches +Parabricks. Requires Python 3.7 or newer; no third-party packages are needed. ## Request schema | Field | Meaning | | --- | --- | -| `version` | Explicit `4.7.0` or `4.7.1`; this is the software release, not an image tag | +| `version` | Explicit `4.7.0`, `4.7.1`, or `4.8.0`; this is the software release, not an image tag | | `star_args` | Original STAR argv as strings, including every flag/value; optional leading `STAR` | | `ref` | Target reference FASTA | | `output_dir` | Directory for STAR's generated outputs | diff --git a/skills/bionemo-parabricks/references/runtime-environment.md b/skills/bionemo-parabricks/references/runtime-environment.md index 4dc25f0a9..508e1e409 100644 --- a/skills/bionemo-parabricks/references/runtime-environment.md +++ b/skills/bionemo-parabricks/references/runtime-environment.md @@ -151,7 +151,7 @@ specify driver **525.60.13 or newer**, Docker **20.10 or newer**, and supported NVIDIA GPUs with at least 16 GB each. `fq2bam` needs 24 GB by default, or 16 GB with `--low-memory`. For eight GPUs, the documented host baseline is 392 GB RAM and 48 CPU threads. The manual's container probe uses CUDA 12.0.0; do not -test a 4.2 host against the helper's default CUDA 12.9.1 image. +test a 4.2 host against the helper's default CUDA 13.3.1 image. For authorized container probes on a Parabricks 4.2 host, explicitly select the CUDA image from that manual: @@ -164,6 +164,25 @@ bash scripts/check_parabricks_runtime.sh \ --parabricks-version 4.2-1 ``` +For **4.7.1 (`4.7.1-1`)**, the manual's container probe uses CUDA 12.9.1. Pass +`--cuda-test-image nvidia/cuda:12.9.1-base-ubuntu22.04`; the helper's 13.3.1 +default can fail on a driver that supports 4.7.1. + +For **4.8.0 (`4.8.0-1`)**, the +[requirements](https://docs.nvidia.com/clara/parabricks/v4.8.0/get-started/installation-requirements) +specify a driver compatible with CUDA 13.3.x. Data center and workstation GPUs +can use CUDA forward compatibility on the 535+, 570+, 580+, 590+, 595+, or 610+ +driver branches; consumer GPUs need driver 610 or newer. The manual's container +probe uses CUDA 13.3.1, which is also the helper's default probe image: + +```bash +bash scripts/check_parabricks_runtime.sh \ + --run-container-check \ + --cuda-test-image nvidia/cuda:13.3.1-base-ubuntu22.04 \ + --run-parabricks-check \ + --parabricks-version 4.8.0-1 +``` + If a CUDA probe fails, inspect the reported image and error before treating `runtime-incomplete` as evidence of a Container Toolkit problem. An incompatible probe image can fail on a host that supports the selected Parabricks release; @@ -285,8 +304,8 @@ Open questions: - Parabricks 4.2 requirements: -- Current installation requirements (use only for that release): - +- 4.8.0 installation requirements: + - NVIDIA Container Toolkit installation: - Docker Engine installation: diff --git a/skills/bionemo-parabricks/references/shared-options.md b/skills/bionemo-parabricks/references/shared-options.md index 52d572063..1e63ceb30 100644 --- a/skills/bionemo-parabricks/references/shared-options.md +++ b/skills/bionemo-parabricks/references/shared-options.md @@ -7,6 +7,8 @@ establish support in another. The release verification rules in ## Alignment inputs and regions +### GATK and Picard inputs + | Baseline option | Parabricks option | Notes | Tools | | --- | --- | --- | --- | | `--reference`, `-R` | `--ref` | Required reference FASTA path. | `applybqsr`, `bqsr`, `genotypegvcf`, `germline`, `haplotypecaller`, `mutectcaller` | @@ -16,16 +18,32 @@ establish support in another. The release verification rules in | `--INPUT`, `-I` | `--in-bam` | Required BAM/CRAM input path. | `bam2fq`, `bamsort` | | `--REFERENCE_SEQUENCE`, `-R` | `--ref` | Required reference FASTA path. | `bammetrics`, `collectmultiplemetrics` | | `--INPUT`, `-I` | `--bam` | Required input BAM/CRAM path. | `bammetrics`, `collectmultiplemetrics` | + +### DeepVariant and DeepSomatic inputs + +| Baseline option | Parabricks option | Notes | Tools | +| --- | --- | --- | --- | | `--ref` | `--ref` | Required reference FASTA path. | `deepsomatic`, `deepvariant` | | `--regions` | `--interval` or `--interval-file` | Separates inline intervals from BED interval files. | `deepsomatic`, `deepvariant` | + +### BWA-MEM and BWA-Meth inputs + +| Baseline option | Parabricks option | Notes | Tools | +| --- | --- | --- | --- | | Paired-end FASTQ inputs | `--in-fq ` | Repeat for multiple pairs; keep each optional read group with its pair. | `germline` | | `bwa mem -R ` / BWA-Meth `--read-group` | read group string after FASTQ inputs, or `--read-group-*` flags | Preserve supplied per-lane tags; do not invent values. | `deepvariant_germline`, `fq2bam_meth`, `germline` | -| `bwa mem -M`, `-Y`, `-C`, `-T`, `-B`, `-U`, `-L`, `-I`, `-K` | `--bwa-options` | Pass supported BWA-MEM options as one string. | `deepvariant_germline`, `fq2bam`, `fq2bam_meth`, `germline` | +| `bwa mem -M`, `-Y`, `-C`, `-T`, `-B`, `-U`, `-L`, `-I`, `-K`, `-S`, `-P`, `-5`, `-q` | `--bwa-options` | Pass supported BWA-MEM options as one string. | `deepvariant_germline`, `fq2bam`, `fq2bam_meth`, `germline`, `somatic` | +| BWA-MEM before 0.7.16 (no `MC` tags) | `--no-mate-cigar` | Parabricks targets BWA-MEM 0.7.17 and adds mate-CIGAR tags to paired records; this flag omits them. Cannot be combined with `--fix-mate`. | `deepvariant_germline`, `fq2bam`, `fq2bam_meth`, `germline`, `somatic` | | — | `--max-read-length`, `--min-read-length`, `--filter-flag`, `--skip-multiple-hits` | Pipeline read/SAM filtering controls. | `deepvariant_germline`, `germline` | -| — | `--bwa-nstreams`, `--bwa-cpu-thread-pool`, `--bwa-primary-cpus`, `--bwa-normalized-queue-capacity` | CPU/GPU alignment scheduling controls. | `deepvariant_germline`, `germline` | +| — | `--bwa-nstreams`, `--bwa-cpu-thread-pool`, `--bwa-primary-cpus`, `--bwa-normalized-queue-capacity` | CPU/GPU alignment scheduling controls; BWA stream and thread defaults are in [performance.md](performance.md). | `deepvariant_germline`, `germline`, `somatic` | | GATK/Picard `SortSam --OUTPUT`, `-O` | `--out-bam` | Final BAM/CRAM output path. | `fq2bam`, `fq2bam_meth` | | GATK/Picard sorted, duplicate-marked BAM output | `--out-bam` | Required alignment output alongside the variant output. | `germline` | | — | `--max-read-length`, `--min-read-length` | FASTQ filtering/alignment bounds. | `fq2bam`, `fq2bam_meth`, `giraffe` | + +### Minimap2 long-read inputs + +| Baseline option | Parabricks option | Notes | Tools | +| --- | --- | --- | --- | | minimap2 index input | `--index` | Optional minimizer index generated by vanilla minimap2. | `minimap2`, `ont_germline`, `pacbio_germline` | | minimap2 FASTQ query input | `--in-fq` | Repeatable FASTQ/FASTQ.GZ input. | `minimap2`, `ont_germline`, `pacbio_germline` | | BAM/CRAM input mode | `--in-bam` | Skip alignment when using prepared BAM/CRAM if supported. | `ont_germline`, `pacbio_germline` | @@ -48,7 +66,6 @@ establish support in another. The release verification rules in | GATK `BaseRecalibrator --intervals`, `-L` | `--interval`, `--interval-file` | Separates inline intervals from interval files. | `fq2bam`, `fq2bam_meth`, `minimap2` | | GATK `BaseRecalibrator --interval-padding`, `-ip` | `--interval-padding`, `-ip` | Same padding role. | `fq2bam`, `fq2bam_meth`, `minimap2` | | — | `--out-qc-metrics-dir` | Workflow output for QC metrics. | `fq2bam`, `fq2bam_meth`, `minimap2` | -| — | `--standalone-bqsr`, `--out-qc-metrics-dir` | Pipeline mode/output controls. | `ont_germline`, `pacbio_germline` | | GATK `BaseRecalibrator --known-sites` | `--knownSites` | Repeatable known-sites VCF input when BQSR is used. | `pacbio_germline`, `somatic` | ## Variant calling and models @@ -59,18 +76,20 @@ establish support in another. The release verification rules in | `--reads` | `--in-bam` | Prepared aligned reads for variant calling. | `deepvariant` | | `--output_gvcf` | `--gvcf` plus `--out-variants` | Also produces the corresponding VCF; see the tool reference for partitioning restrictions. | `deepvariant` | | `--model_type` | `--mode`, `--use-wes-model`, or selected model file | The manual documents short-read, PacBio, and ONT modes plus WES/model-file controls. | `deepsomatic`, `deepvariant` | -| `--customized_model` | `--pb-model-file` | Non-default Parabricks model file. | `deepsomatic`, `deepvariant` | +| `--customized_model` | `--pb-model-file` | Non-default Parabricks model file; build it with TensorRT 11.3.0.99 (10.14.1.48 for 4.7.1) to match the shipped engines. | `deepsomatic`, `deepvariant` | | — | `--disable-use-window-selector-model` | Inverse/compatibility control for window selector behavior. | `deepsomatic`, `deepvariant` | | DeepVariant `--output_vcf` | `--out-variants` | VCF/gVCF output. | `deepvariant_germline`, `ont_germline`, `pacbio_germline`, `pangenome_aware_deepvariant`, `pangenome_germline` | | DeepVariant `--output_gvcf` / gVCF mode | `--gvcf` plus `--out-variants` | Output path extension controls VCF/gVCF naming. | `deepvariant_germline`, `ont_germline`, `pacbio_germline` | -| DeepVariant custom model | `--pb-model-file`, `--pb-small-model-file` | TensorRT model files. | `deepvariant_germline`, `ont_germline`, `pacbio_germline` | +| DeepVariant custom model | `--pb-model-file`, `--pb-small-model-file` | TensorRT model files built for the selected release. | `deepvariant_germline`, `ont_germline`, `pacbio_germline` | | minimap2 reference / DeepVariant `--ref` | `--ref` | Required reference FASTA path. | `ont_germline`, `pacbio_germline` | | — | DeepVariant channel/allele-counter flags exposed directly by Parabricks | First-class controls for DeepVariant internals. | `ont_germline`, `pacbio_germline`, `pangenome_germline` | -| DeepVariant `--output_gvcf` / gVCF mode | `--gvcf` plus `--out-variants` | Output path extension controls VCF/gVCF naming when documented. | `pangenome_aware_deepvariant`, `pangenome_germline` | -| DeepVariant custom model | `--pb-model-file`, `--pb-small-model-file` | TensorRT model files where supported. | `pangenome_aware_deepvariant`, `pangenome_germline` | +| DeepVariant `--output_gvcf` / gVCF mode | No direct equivalent | These tools do not expose `--gvcf`. | `pangenome_aware_deepvariant`, `pangenome_germline` | +| DeepVariant custom model | `--pb-model-file`, `--pb-small-model-file` | TensorRT model files built for the selected release, where supported. | `pangenome_aware_deepvariant`, `pangenome_germline` | ## Execution controls +Minimap2-specific modes and tuning are in [minimap2-controls.md](minimap2-controls.md). + | Baseline option | Parabricks option | Notes | Tools | | --- | --- | --- | --- | | — | `--num-threads` | Worker-thread count. | `applybqsr`, `bam2fq`, `genotypegvcf` | @@ -84,7 +103,7 @@ establish support in another. The release verification rules in | — | `--align-only`, `--standalone-bqsr`, `--fix-mate` | Pipeline mode controls. | `deepvariant_germline`, `germline` | | — | `--monitor-usage`, `--no-warnings` | Runtime reporting controls. | `deepvariant_germline`, `germline` | | — | `--cigar-on-gpu`, `--gpuwrite`, `--gpuwrite-deflate-algo`, `--gpusort`, `--use-gds` | GPU-accelerated write/sort/storage controls. | `deepvariant_germline`, `germline` | -| — | `--memory-limit`, `--low-memory` | Host/GPU memory controls. | `deepvariant_germline`, `germline` | +| — | `--memory-limit`, `--low-memory` | Host/GPU memory controls. | `deepvariant_germline`, `germline`, `somatic` | | — | `--no-warnings` | Warning suppression. | `fq2bam`, `fq2bam_meth` | | — | `--filter-flag` | SAM flag-based filtering during output generation. | `fq2bam`, `fq2bam_meth` | | — | `--skip-multiple-hits` | SA-tag-based output filtering. | `fq2bam`, `fq2bam_meth` | @@ -95,7 +114,6 @@ establish support in another. The release verification rules in | — | `--gpuwrite`, `--gpuwrite-deflate-algo`, `--gpusort`, `--use-gds` | GPU-accelerated write/sort/storage controls. | `fq2bam`, `fq2bam_meth`, `giraffe`, `minimap2`, `ont_germline`, `pacbio_germline` | | — | `--memory-limit`, `--low-memory` | Host/GPU memory controls for the pipeline. | `fq2bam`, `fq2bam_meth`, `giraffe` | | — | `--low-memory` | Memory-reduction mode. | `minimap2`, `ont_germline`, `pacbio_germline` | -| — | `--nstreams`, `--max-queue-*`, `--chunk-size` | Minimap2 GPU pipeline controls. | `ont_germline`, `pacbio_germline` | | — | GPU write/sort/storage controls | Accelerated output pipeline. | `pangenome_germline`, `somatic` | ## Upstream engine options diff --git a/skills/bionemo-parabricks/references/tool-index.md b/skills/bionemo-parabricks/references/tool-index.md index b536b44f1..ffd37893a 100644 --- a/skills/bionemo-parabricks/references/tool-index.md +++ b/skills/bionemo-parabricks/references/tool-index.md @@ -17,7 +17,7 @@ Read only the selected tool reference and its relevant shared mappings. | [`bqsr`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/bqsr) | [pbrun-bqsr.md](pbrun-bqsr.md) | Generate base quality score recalibration data for later `applybqsr`. | | [`fq2bam`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/fq2bam) | [pbrun-fq2bam.md](pbrun-fq2bam.md) | Raw paired short-read DNA FASTQ → aligned BAM/CRAM with common preprocessing (align/sort/dedup/BQSR path). | | [`fq2bam_meth`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/fq2bam_meth) | [pbrun-fq2bam_meth.md](pbrun-fq2bam_meth.md) | Bisulfite or methylation FASTQ workflows — not standard DNA `fq2bam`. | -| [`giraffe`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/giraffe) | [pbrun-giraffe.md](pbrun-giraffe.md) | Pangenome graph alignment with vg giraffe; produce aligned BAM for pangenome-aware variant calling. | +| [`giraffe`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/giraffe) | [pbrun-giraffe.md](pbrun-giraffe.md) | Pangenome graph alignment with vg giraffe; produce aligned BAM or CRAM for pangenome-aware variant calling; also aligns single-end CRAM input. | | [`markdup`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/markdup) | [pbrun-markdup.md](pbrun-markdup.md) | Mark duplicate reads in aligned BAM/CRAM when not folded into `fq2bam`. | | [`minimap2`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/minimap2) | [pbrun-minimap2.md](pbrun-minimap2.md) | Long-read FASTQ alignment (CRAM v3.1 read support documented for recent releases). | @@ -34,7 +34,7 @@ Read only the selected tool reference and its relevant shared mappings. | [`ont_germline`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/ont_germline) | [pbrun-ont_germline.md](pbrun-ont_germline.md) | Oxford Nanopore long-read germline workflow. | | [`pacbio_germline`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/pacbio_germline) | [pbrun-pacbio_germline.md](pbrun-pacbio_germline.md) | PacBio long-read germline workflow. | | [`pangenome_aware_deepvariant`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/pangenome_aware_deepvariant) | [pbrun-pangenome_aware_deepvariant.md](pbrun-pangenome_aware_deepvariant.md) | Pangenome-aware DeepVariant; for Roche SBX-D/SBX-Fast BAMs use `--sbx` (verify in docs/MCP). CRAM v3.1 reads documented for recent releases. | -| [`pangenome_germline`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/pangenome_germline) | [pbrun-pangenome_germline.md](pbrun-pangenome_germline.md) | Pangenome-aware germline workflow with graph resources. | +| [`pangenome_germline`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/pangenome_germline) | [pbrun-pangenome_germline.md](pbrun-pangenome_germline.md) | Pangenome-aware germline workflow with graph resources; also accepts single-end CRAM input. | | [`postpon`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/postpon) | [pbrun-postpon.md](pbrun-postpon.md) | Annotate Mutectcaller variants using an existing panel of normals (PON). | | [`prepon`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/prepon) | [pbrun-prepon.md](pbrun-prepon.md) | Prepare an existing PON for `mutectcaller --pon`. | | [`somatic`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/somatic) | [pbrun-somatic.md](pbrun-somatic.md) | Tumor/normal somatic variant calling pipeline (caller family alternative to `mutectcaller` / `deepsomatic`). | @@ -59,7 +59,7 @@ Read only the selected tool reference and its relevant shared mappings. |------|-----------|----------| | [`dbsnp`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/dbsnp) | [pbrun-dbsnp.md](pbrun-dbsnp.md) | dbSNP annotation or variant file processing support. | | [`genotypegvcf`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/genotypegvcf) | [pbrun-genotypegvcf.md](pbrun-genotypegvcf.md) | Joint-genotype GVCF input(s) into VCF after indexing. | -| [`indexgvcf`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/indexgvcf) | [pbrun-indexgvcf.md](pbrun-indexgvcf.md) | Index GVCF before `genotypegvcf` or consolidation workflows. Writes `.tbi` beside the input (no `--out`); for read-only inputs, index a writable copy after checking for existing files. | +| [`indexgvcf`](https://docs.nvidia.com/clara/parabricks/tool-reference/tools/indexgvcf) | [pbrun-indexgvcf.md](pbrun-indexgvcf.md) | Index GVCF before `genotypegvcf` or consolidation workflows. Writes `.tbi` (`.idx` for an uncompressed `.g.vcf`) beside the input (no `--out`); for read-only inputs, index a writable copy after checking for existing files. | **CRAM v3.1 reads:** Documented for `bamsort`, `deepsomatic`, `deepvariant`, `haplotypecaller`, `minimap2`, `mutectcaller`, and `pangenome_aware_deepvariant` @@ -92,9 +92,12 @@ CRAM v3.1 inputs to other tools. ## Key References -- Tool index (4.7.0 baseline): -- Performance notes (4.7.0): - -- Getting started and deployment (4.7.0): - -- Other releases: +- Tool index (4.8.0 baseline): +- Performance notes (4.8.0): + +- Getting started and deployment (4.8.0): + +- Other releases: . + Manuals are at `https://docs.nvidia.com/clara/parabricks/v/` for + 4.7.1 and later, and `https://archive.docs.nvidia.com/clara/parabricks//` + for earlier releases. diff --git a/skills/bionemo-parabricks/scripts/check_parabricks_runtime.sh b/skills/bionemo-parabricks/scripts/check_parabricks_runtime.sh index e2725efb1..a155d9edb 100755 --- a/skills/bionemo-parabricks/scripts/check_parabricks_runtime.sh +++ b/skills/bionemo-parabricks/scripts/check_parabricks_runtime.sh @@ -9,7 +9,7 @@ set -o pipefail -DEFAULT_CUDA_TEST_IMAGE="nvidia/cuda:12.9.1-base-ubuntu22.04" +DEFAULT_CUDA_TEST_IMAGE="nvidia/cuda:13.3.1-base-ubuntu22.04" MIN_DOCKER_MAJOR=20 MIN_DOCKER_MINOR=10 MIN_GPU_MEMORY_GB=16 @@ -18,7 +18,7 @@ SUMMARY_MAX_CHARS=300 DEFAULT_TIMEOUT_SECONDS=30 TIMEOUT_KILL_AFTER_SECONDS=1 SCHEMA_VERSION=1 -EXAMPLE_PARABRICKS_VERSION="4.7.0-1" +EXAMPLE_PARABRICKS_VERSION="4.8.0-1" PROG=$(basename "$0") usage() { @@ -149,9 +149,11 @@ TMP_DIR=$(mktemp -d) || exit 1 trap 'rm -rf "$TMP_DIR"' EXIT trim_str() { - local s=$1 - s="${s#"${s%%[![:space:]]*}"}" - s="${s%"${s##*[![:space:]]}"}" + local s=$1 leading trailing + leading=${s%%[![:space:]]*} + s=${s#"$leading"} + trailing=${s##*[![:space:]]} + s=${s%"$trailing"} printf '%s' "$s" } @@ -632,18 +634,24 @@ json_num() { # json_obj INDENT key rendered_value [key rendered_value ...] # Pairs whose rendered value is empty are omitted. json_obj() { - local indent=$1 pad inner sep="" out="{" + local indent=$1 pad inner key sep="" out="{" shift printf -v pad '%*s' "$indent" '' inner="$pad " while [ $# -ge 2 ]; do if [ -n "$2" ]; then - out+="$sep"$'\n'"$inner$(json_str "$1"): $2" + key=$(json_str "$1") + out+="$sep" + out+=$'\n' + out+="$inner$key: $2" sep="," fi shift 2 done - [ -n "$sep" ] && out+=$'\n'"$pad" + if [ -n "$sep" ]; then + out+=$'\n' + out+="$pad" + fi printf '%s}' "$out" } @@ -654,10 +662,15 @@ json_arr() { printf -v pad '%*s' "$indent" '' inner="$pad " for item in "$@"; do - out+="$sep"$'\n'"$inner$item" + out+="$sep" + out+=$'\n' + out+="$inner$item" sep="," done - [ -n "$sep" ] && out+=$'\n'"$pad" + if [ -n "$sep" ]; then + out+=$'\n' + out+="$pad" + fi printf '%s]' "$out" } diff --git a/skills/bionemo-parabricks/scripts/translate_star_to_parabricks.py b/skills/bionemo-parabricks/scripts/translate_star_to_parabricks.py index 93c25a7ce..1016df66b 100644 --- a/skills/bionemo-parabricks/scripts/translate_star_to_parabricks.py +++ b/skills/bionemo-parabricks/scripts/translate_star_to_parabricks.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -"""Draft Parabricks 4.7.0/4.7.1 RNA commands from JSON STAR argument arrays. +"""Draft Parabricks 4.7.0/4.7.1/4.8.0 RNA commands from JSON STAR argument arrays. Usage: python3 scripts/translate_star_to_parabricks.py --input requests.json @@ -19,7 +19,7 @@ Requires Python 3.7 or newer; no additional packages are needed. No subprocesses, network requests, input-data inspection, or workloads are run. -Mappings: Parabricks 4.7.0/4.7.1 rna_fq2bam and STAR 2.7.2a parametersDefault. +Mappings: Parabricks 4.7.0/4.7.1/4.8.0 rna_fq2bam and STAR 2.7.2a parametersDefault. """ from __future__ import annotations @@ -32,7 +32,7 @@ import sys -SUPPORTED_VERSIONS = frozenset({"4.7.0", "4.7.1"}) +SUPPORTED_VERSIONS = frozenset({"4.7.0", "4.7.1", "4.8.0"}) JUNCTION_MISMATCH_COUNT = 4 SCALARS = { @@ -249,7 +249,7 @@ def validate_request(request): raise ValueError(f"Unknown request fields: {sorted(set(request) - allowed)}") version = request.get("version") if not isinstance(version, str) or version not in SUPPORTED_VERSIONS: - raise ValueError('This helper supports explicit versions "4.7.0" and "4.7.1" only') + raise ValueError('This helper supports explicit versions "4.7.0", "4.7.1" and "4.8.0" only') for field in ("ref", "output_dir", "out_bam"): if not nonempty_string(request.get(field)): raise ValueError(f"{field} must be an explicit nonempty path string") diff --git a/skills/bionemo-parabricks/skill-card.md b/skills/bionemo-parabricks/skill-card.md index ab1c027c1..f89b71bcc 100644 --- a/skills/bionemo-parabricks/skill-card.md +++ b/skills/bionemo-parabricks/skill-card.md @@ -9,7 +9,7 @@ NVIDIA
### License/Terms of Use:
CC-BY-4.0 AND Apache 2.0
## Use Case:
-Developers and bioinformatics engineers use this skill to select the right NVIDIA Parabricks pbrun tool, generate version-aware commands, translate CPU (for example STAR) options, check reference/index compatibility, and assess GPU, driver, Docker, and container runtime readiness for individual Parabricks tools.
+Developers and bioinformatics engineers use this skill to select the right NVIDIA Parabricks pbrun tool, generate version-aware v4.8.0 commands, translate CPU (for example STAR) options, check reference/index compatibility, and assess GPU, driver, Docker, and container runtime readiness for individual Parabricks tools.
### Deployment Geography for Use:
Global
@@ -35,6 +35,7 @@ Mitigation: Review and scan skill before deployment.
- [Output Accuracy and Compatible CPU Software Versions](https://docs.nvidia.com/clara/parabricks/about-parabricks/software-overview/output-accuracy-and-compatible-cpu-software-versions)
- [Parabricks Getting Started](https://docs.nvidia.com/clara/parabricks/get-started)
- [About Parabricks](https://docs.nvidia.com/clara/parabricks/about-parabricks)
+- [Parabricks 4.8.0 Release Notes](https://docs.nvidia.com/clara/parabricks/v4.8.0/about-parabricks/release-notes/4-8-0-1-release-notes)
- [Parabricks Documentation MCP Server](https://docs.nvidia.com/clara/parabricks/_mcp/server)
@@ -45,13 +46,13 @@ Mitigation: Review and scan skill before deployment.
**Other Properties Related to Output:** [None]
## Evaluation Agents Used:
-- Claude Code (`aws/anthropic/bedrock-claude-opus-4-8`)
-- Codex (`openai/openai/gpt-5.5`)
+- Claude Code (`aws/anthropic/bedrock-claude-opus-5-5`)
+- Codex (`openai/openai/gpt-6.1-sol`)
## Evaluation Tasks:
-18 evaluation tasks (17 positive, 1 negative), one attempt per task, each run in its own isolated sandbox pod and compared against a no-skill baseline. Evaluated 2026-10-13 with evaluator version 1.5.6; overall verdict PASS.
+25 evaluation tasks (24 positive, 1 negative), one attempt per task, each run in its own isolated sandbox pod and compared against a no-skill baseline. Evaluated 2026-10-27 with evaluator version 1.6.2; overall verdict PASS.
## Evaluation Metrics Used:
Reported benchmark dimensions:
@@ -75,15 +76,15 @@ Underlying evaluation signals used in this run:
## Evaluation Results:
| Measure | Claude Code (Baseline → Skill Uplift) | Codex (Baseline → Skill Uplift) | |---|---:|---:| -| Overall | 93.8% — baseline ran, but no comparable score was available; uplift unavailable | 92.7% — baseline ran, but no comparable score was available; uplift unavailable | -| Security | 94.4% → 88.9% (-5.5 points) | 91.7% → 100.0% (+8.3 points) | -| Correctness | 94.4% → 98.9% (+4.5 points) | 97.8% → 100.0% (+2.2 points) | -| Discoverability | 100.0% — baseline ran, but no comparable score was available; uplift unavailable | 87.4% — baseline ran, but no comparable score was available; uplift unavailable | -| Effectiveness | 76.5% → 91.8% (+15.3 points) | 83.3% → 91.9% (+8.6 points) | -| Efficiency | 89.5% — baseline ran, but no comparable score was available; uplift unavailable | 84.0% — baseline ran, but no comparable score was available; uplift unavailable | +| Overall | 96.3% — baseline ran, but no comparable score was available; uplift unavailable | 87.0% — baseline ran, but no comparable score was available; uplift unavailable | +| Security | 96.0% → 98.0% (+2.0 points) | 96.0% → 96.0% (±0.0 points) | +| Correctness | 75.2% → 100.0% (+24.8 points) | 95.2% → 99.2% (+4.0 points) | +| Discoverability | 99.6% — baseline ran, but no comparable score was available; uplift unavailable | 92.1% — baseline ran, but no comparable score was available; uplift unavailable | +| Effectiveness | 57.2% → 94.8% (+37.6 points) | 76.8% → 84.4% (+7.6 points) | +| Efficiency | 89.0% — baseline ran, but no comparable score was available; uplift unavailable | 63.3% — baseline ran, but no comparable score was available; uplift unavailable | ## Skill Version(s):
-1.3.0 (source: frontmatter)
+1.4.0 (source: frontmatter)
## Ethical Considerations:
NVIDIA believes Trustworthy AI is a shared responsibility and we have established policies and practices to enable development for a wide array of AI applications. When downloaded or used in accordance with our terms of service, developers should work with their internal team to ensure this skill meets requirements for the relevant industry and use case and addresses unforeseen product misuse.
diff --git a/skills/bionemo-parabricks/skill.oms.sig b/skills/bionemo-parabricks/skill.oms.sig index 0fd13e39c..a350abd11 100644 --- a/skills/bionemo-parabricks/skill.oms.sig +++ b/skills/bionemo-parabricks/skill.oms.sig @@ -1 +1 @@ -{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAicGFyYWJyaWNrcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlMGYzNjliYzNhNDA1NjE1NmM4MzJjNDJkNmM3NDhkYzU1ZTIzNGZmYmNhNmM1MWE1ZTE3ZWJiZDA3ZmRhZDYzIgogICAgICB9CiAgICB9CiAgXSwKICAicHJlZGljYXRlVHlwZSI6ICJodHRwczovL21vZGVsX3NpZ25pbmcvc2lnbmF0dXJlL3YxLjAiLAogICJwcmVkaWNhdGUiOiB7CiAgICAic2VyaWFsaXphdGlvbiI6IHsKICAgICAgIm1ldGhvZCI6ICJmaWxlcyIsCiAgICAgICJoYXNoX3R5cGUiOiAic2hhMjU2IiwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0YXR0cmlidXRlcyIsCiAgICAgICAgIi5naXRodWIiCiAgICAgIF0sCiAgICAgICJhbGxvd19zeW1saW5rcyI6IGZhbHNlCiAgICB9LAogICAgInJlc291cmNlcyI6IFsKICAgICAgewogICAgICAgICJuYW1lIjogIkJFTkNITUFSSy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJlMTI3YzMzZGMxOGMzNGQ2MDEwYTZhZjljM2FlZDg1NTQ5NDFhZTZjMTA5NDBlODFmMmVlNDNhNmU3N2UwZWJkIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjE2Y2QzNmVhMzE4MGRhYTBhZGIyNzNkMzhiZjVkZGQ1ODQ3NmE0MGU1ODViZTJhNzk1MGNlMGJlYWFjNDgzN2YiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiZXZhbHMvZXZhbHMuanNvbiIsCiAgICAgICAgImRpZ2VzdCI6ICJjOGUxZjFhZWI3MjU3NWEzNzZiNzhhODQwZmRiNDgyMjliYTdlODQyMWUwN2U2MzgwMGU2MTc3OWM0YTJiNjU0IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogImV2YWxzL2ZpbGVzL3JuYS1iYXRjaC5qc29uIiwKICAgICAgICAiZGlnZXN0IjogIjM4MWM5OGY0ODE2ZDJiYmJlN2Y2MjdiMjhkZGY3OGQ1MjQ3YzkxOWUwYThmZmNlMDQ0YjkwNjRkY2FmZTdjZmEiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiZXZhbHMvZmlsZXMvcm5hLWNvbnRyYWN0cy5qc29uIiwKICAgICAgICAiZGlnZXN0IjogIjk3MjQwNTA3MDYxNmFlOTE5ZTU5MTYzYWZjODJlZmY4ZmIxY2VlNDkzY2Y3ZWJhYzY4Y2Q3YjFkMzg0ZTc3NWIiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9jb21tYW5kLWNvbnZlbnRpb25zLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjQ1NmU0NTgxMDdjODU2NDVhNTQ2MGEyMGI3MjFiOTFmZDc4NDg0YjgzZDUzNWE4MWI2MThkZWViZjBlMzJlZTQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1hcHBseWJxc3IubWQiLAogICAgICAgICJkaWdlc3QiOiAiYWFiZTcyNTdkMmY2MjRhOGNmNmI2MTgzZmQwZDQwZjJlMGM4N2NjNzU3NGUzMTVkMGY2MzBlOWNiODc2MzY2NSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWJhbTJmcS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIwMmJkNjQ3ZTBiMmJjMWU1OGMzYWQwYWQ0MTQwOWVkYTc2MmYxODQ5MTQ3NWYzZWRmZjI3NzZjZmFmZmJiZDQ0IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tYmFtbWV0cmljcy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI0ZTc5ODA3NzM0NDJkNjkwNmM0NGZiZWFjNzkzMjc4YWJlODBhZDg5MDA0OTg0ZDQ3OGU4OGVhNmIxOThjNTMyIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tYmFtc29ydC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJiYmUzYWE0ZDNkZjM0ZmU3YjM5YTE5NzVlNGJiNTFlYWYwNjhmYWYzZTYzNzc4Nzg5NmZjNDg5YzIyYWFmNTIyIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tYnFzci5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJmNDgxNThmODg4YzFkOWQzYjNhOTlmNWY2MDViMjUxNTcwNWU5OWM3YTU0MWU1M2RhZGYyNzUwYzhlMDMxYWRjIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tY29sbGVjdG11bHRpcGxlbWV0cmljcy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJiY2M3MWUyZWY4OWY2Zjk2N2EwMTQ5YmM4MTU5NDk1NmFjMjU5ZjAwMWUxZGM0MDFmNDdiNmJhMTUwMzQ0MGYyIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tZGJzbnAubWQiLAogICAgICAgICJkaWdlc3QiOiAiOGY3YWNlMmNkMjYyNjg3ODE4NjhmYjg2MTk3YzYwZjc1OGMzYzdmYjM0NmViODY1ZWMzYjljNWYxMWFmMmZmOCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWRlZXBzb21hdGljLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjdlMzRhOTczYmMwMGU3NGMwMWZiYjkyMTA0MzgzYzBlMjhjNzFhZGI1ZWM3ODFmZTg2Mzc5MjlmZjdhNDgwMzYiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1kZWVwdmFyaWFudC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIyYjlhODY5YzAwNjY0MmM0MmJmNjk4YTM2N2VhYmIzNWRiNmRkYjAxYzE1YTdkNDZkYTUzZjkzNDYyMTUwYTk5IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tZGVlcHZhcmlhbnRfZ2VybWxpbmUubWQiLAogICAgICAgICJkaWdlc3QiOiAiZTBlN2EyMWFhNjBiNmI3M2VkOTZiYWU3ZmE0M2I3OTgwZGJmZmQ4NDZhZmFhNjlmZmU0YmEzNmVhODFlNzI1MCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWZxMmJhbS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIxMGMwYmIyNmVlZWUwYzI0MzMxZWMyOGI4ZmI2ZTA5YTM4ZGE2Y2YyMzVkMDQ2MzAyNzU0MzMyYWZjNGFhMmNkIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tZnEyYmFtX21ldGgubWQiLAogICAgICAgICJkaWdlc3QiOiAiMDUzNGQxZjY1NTc3MDUyNjY2OGNjMzUyMDYyOGQzMWQ2NWY3YjUyYWM5MmMxMDljMTlhNjAwNjNkMzIxNmQ4MyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWdlbm90eXBlZ3ZjZi5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI1NjVkNDJjZmQwOGFkN2MyYWJlY2ExYTQ2N2ZjNjg5OTM3ZmIzNjQ4MWU4NDA0NDlhNTVjNzcyMTY4NGFhMWE5IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tZ2VybWxpbmUubWQiLAogICAgICAgICJkaWdlc3QiOiAiNGUwMmU2Zjc1MDU3NWMzYThhODU5ZWMzZDZkMWFmYjM0ODFmY2FhYTg2YTFiOTIwMTRmNDQ5YjkzZTgyZWNkNiIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWdpcmFmZmUubWQiLAogICAgICAgICJkaWdlc3QiOiAiNTRjMTg1NGQxMTFhYjlhMTUzNGY4ZmQ5YWI5MGMzYzczMjFhYmU3OTM1ZWMwMmZiYTEyZDJhMmEzMTgzYzljOSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWhhcGxvdHlwZWNhbGxlci5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJlNDU2NWU3MWVmOTk1ZGZlNjBhMWQ4ZDc2OTk1MDMyMDkzMDU5ZmZiM2EzNGNiYTYwYzAyZjI1MWQ1ZWE3ZGZmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4taW5kZXhndmNmLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjg0ZDQwZTdiMjdkYTllNzBlMTI4YmNkMDQ1MGJlODdhZWMxMzEwYmZlOTVmMmNhOWRiZjE2Y2U0NTc3ZGJmMTUiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1tYXJrZHVwLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjVmZjI0MWJiY2Q2M2NlN2RkMzVlOTNiZDU0NGYxOTg2MTAxZjQ5OTlkMTc5YTQ3NDM5MzM5MmMzOTBmYzRjMTEiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1taW5pbWFwMi5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJkZjM3ZWQ2Yjc1NDNiODM0MmU4MGE5YTVjYzRlNDY0MjVkNmFlZmM4NmMyZGVlNzZmNWZjNDBjZjk5YmJmNDgyIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tbXV0ZWN0Y2FsbGVyLm1kIiwKICAgICAgICAiZGlnZXN0IjogImU3MTI5MWE3OTkyMjkxNTE1OTJkNzIyMzVjYTY4OGY4YzVkNzY0MGM5MDJlNzc4NjFhNDNmOGI0YzJkYmFhY2IiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1vbnRfZ2VybWxpbmUubWQiLAogICAgICAgICJkaWdlc3QiOiAiZjhjNjg1NGRjNWIxZDhiYWNlY2FhNWYxMmI3YTc1MDc3N2U3MjM2YjkwODJlZGZhOTM1ZmE3NmE2ZTA4ZjE2MyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLXBhY2Jpb19nZXJtbGluZS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIyZWY5ZjEwZjdiYWQ1MDMxYmNkMTlkZjM0YWJiYmRjMWJkZDI5ZTkxMTJlZjQ1MTEwNTVmMWIzMjZiNjEzNDAxIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tcGFuZ2Vub21lX2F3YXJlX2RlZXB2YXJpYW50Lm1kIiwKICAgICAgICAiZGlnZXN0IjogIjIxNDIyOTdmNTkzNDMwM2I4MzVhMmY0NDYwYWJlODk5OWNiZGYxMmFlNDkwYTMyOTU2ZjJhMDc1NGRjYmQyODYiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1wYW5nZW5vbWVfZ2VybWxpbmUubWQiLAogICAgICAgICJkaWdlc3QiOiAiY2Y5ODIzMThkMGQxMWM2MDdhNGYwYWI1ODc4ODQyNThjMzQwMjZiYzBlNjY4NzY1NWYxYTJkMTgxZGFhNzQxNSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLXBvc3Rwb24ubWQiLAogICAgICAgICJkaWdlc3QiOiAiOTdiYjAzMzNiOTY2ZDIwZDM1ZTdlYTZmZjc5NWI2YjY2MDcyYjE1MGE1OTBjY2Q1OGUzZTRjYzBkZGFlZjczMiIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLXByZXBvbi5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI2Yzc2N2NhMGRhZjY5MjAwMWFmZTliZDFlNmJhZGUwYjFmYzMwODViMjQyNjRmZmEzZDA4MWI5NDBlMjQ1NGRjIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tcm5hX2ZxMmJhbS5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIyODY4YzM1M2IwMGNlN2Y1MDdjMmU5ODIwZjYwODJhNzViZDg2YmJjMWUyYTZhNTEwNTc5ZjhkNjAxNWY3N2JjIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tc29tYXRpYy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICI4NWFlNDUwYmNmMzU4MjIyMDRhOWYzYzQzNTViYjZhMTI5Mjk2ZmY5MzVhMDc3YTk5ODRjMDZmZTkwMDliZWRmIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tc3RhcmZ1c2lvbi5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJmNjA0M2JlMDdiYjFlNDg3Mjg4ZmFmMzBlZmRhYTk4ZGY1MWI3ZTVhNTZkM2M4OTAxZDkyNjEzY2M4MzZmNmUxIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGVyZm9ybWFuY2UubWQiLAogICAgICAgICJkaWdlc3QiOiAiZTIyNjAzNjQxMGQ5NzMwNzI1YzA4MzY3NzFiNGMyODQwYzExMmEzOTQ5YzgwNmQ3YjQ1NGVhMDExMWQ5MGZjNyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3JuYS10cmFuc2xhdGlvbi5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJmMmU4MjQxNDUxYmZjMDhlNWJiZmMxYzU4ZWFhZmM4N2Y0NDZmYWM2M2IyMTBhZWFjNTBmYWZhYjlmZTYxNzg3IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcnVudGltZS1lbnZpcm9ubWVudC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJmYTBmOGI1MTJjMGJhMDc1NmE0Mzk4ZGM2NmU3ZDI3NjYwMmU5OTEyNWY2ZTIyZDYzOWMzZTM3ODlkNTNhYzYzIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvc2hhcmVkLW9wdGlvbnMubWQiLAogICAgICAgICJkaWdlc3QiOiAiNmZmMTFlNmFkYzI2ZmNiNmE2YTA3YWI1NWVjY2U4NDQ0YWI4ZTRjZWZkYTU3ZjJhMWM3ODdmYzBmNDFmMTRlNCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3Rvb2wtaW5kZXgubWQiLAogICAgICAgICJkaWdlc3QiOiAiZjE3OGQzOTU5YTVmNGJlZDc0NjY1MGIxNWNkZGQ5ZDI2NDQ0NWUxMTkzNDQ2ZjgzNjkwYjdjNTU1MDEyMDE5MyIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibmFtZSI6ICJzY3JpcHRzL2NoZWNrX3BhcmFicmlja3NfcnVudGltZS5weSIsCiAgICAgICAgImRpZ2VzdCI6ICI0NTg4OGYyZGZhMmRkN2Y0NGZjYjQ4Y2UyMDYyZDBhMTFhZDYzZDFmMGVjZDQ5NjdhZGIxZWZmNzY1OTdjOWQwIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInNjcmlwdHMvY2hlY2tfcGFyYWJyaWNrc19ydW50aW1lLnNoIiwKICAgICAgICAiZGlnZXN0IjogIjFkZTIzYzViZmUzNGEyNTVjMzc1M2IxOTlmNWM2Y2U5MWNiYzU1ODJmYmEwNmE1YzZlNTg3OGU0M2Y4ZDJkZTEiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAic2NyaXB0cy90cmFuc2xhdGVfc3Rhcl90b19wYXJhYnJpY2tzLnB5IiwKICAgICAgICAiZGlnZXN0IjogImU2MmU0MWEwMjNmNTIyNDdlNzBiYzE1ZWI5YjdmNjVjZWNjM2RlMmRmN2Q1NjYzNzQ3Yzc0YTc1OTgyYzc4NWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJhYzc5YjU5NTZjZTBmNWFhOWRiMjM1Zjk4YWMzMGJkYjBlMWNlZjQ0YjlhZDY3YjZkM2IwYWJlZDFlYTRhMjcxIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfQogICAgXQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGYCMQCiibsoeomQHmeob15jGp8fNRTLYD77dsHA+z0s/lume2Vof9r5HQCdDCdWGCqQZ2cCMQCl6D8genG6NQbBtAsEvBApWW4dEmgdrp1m8mnTZwfp7xJqKT5THgUG2MuKlcsH6jg=","keyid":""}]}} \ No newline at end of file +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAicGFyYWJyaWNrcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzMzYyYzM5MTZkMGU2MzRjOTE4MTBiMDY2Nzc2YThmNmJjMzQ5OWY5YjQyMzE3ZGY2MzQ0NmUzMWEyN2FjYmQ3IgogICAgICB9CiAgICB9CiAgXSwKICAicHJlZGljYXRlVHlwZSI6ICJodHRwczovL21vZGVsX3NpZ25pbmcvc2lnbmF0dXJlL3YxLjAiLAogICJwcmVkaWNhdGUiOiB7CiAgICAic2VyaWFsaXphdGlvbiI6IHsKICAgICAgIm1ldGhvZCI6ICJmaWxlcyIsCiAgICAgICJpZ25vcmVfcGF0aHMiOiBbCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0aHViIiwKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRhdHRyaWJ1dGVzIgogICAgICBdLAogICAgICAiaGFzaF90eXBlIjogInNoYTI1NiIsCiAgICAgICJhbGxvd19zeW1saW5rcyI6IGZhbHNlCiAgICB9LAogICAgInJlc291cmNlcyI6IFsKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiZGE3Njk1ODU1Njc4NmE2MWUwMTY3ZjNkMzg1MTk2MGMxZWI2NmEyNmQ4Y2Q5MzkwYmJjZjllNDE3ZDlhOGI2YyIsCiAgICAgICAgIm5hbWUiOiAiQkVOQ0hNQVJLLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiZTMzNDgzNGMzOTM3NDI2MTkwMzMzYjA1NjRlMDIxNTE4M2E4ZWFjNDcyODdkZjQ3MjFjZmI4NmUwNmNhODA3ZiIsCiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIxYTdiNDNlNzM4MDgwMjZlNzg5YWU2ZDI3YzRiZTFkNjc5Zjg2OTljMzE5MDBmMWY5MzY0MTA3MWZhMzhiMTEzIiwKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMjNkOWEzMjk3ZWVkMTk0YWI1YzdiN2ZkZTViNDhjZWMxZjU1Y2UxYzk3NzQwNWM5YTc0YmU3MGZmMzk5M2M5ZSIsCiAgICAgICAgIm5hbWUiOiAiZXZhbHMvZmlsZXMvcm5hLWJhdGNoLmpzb24iLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI4YTU3YTdiNDcxZTRlNjg5OWVmNDM3M2IxNjBkYzVmNzBhNTA5MTE3ZTMxODRjZTM0MjY4ODQ1NDRlMDdhNTMwIiwKICAgICAgICAibmFtZSI6ICJldmFscy9maWxlcy9ybmEtY29udHJhY3RzLmpzb24iLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI1ZDI0Yjc5MzY0ODk5MDhkZGRjNGVlYWQ1MzFjYTQ1OWQ2OTc2YjYwYTNmZGRmNmFiMjM5MDM3YzI3ODg0ZGIzIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL2NvbW1hbmQtY29udmVudGlvbnMubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI2NGY1YmJmMDE0ZmJkOGU0YmI3ZjkyZmRmN2JhMjkwM2QyMTExODg5NDcyYjg0YmM1NmZjNmY0ZDJjNTY3MmJkIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL21pbmltYXAyLWNvbnRyb2xzLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiYWFiZTcyNTdkMmY2MjRhOGNmNmI2MTgzZmQwZDQwZjJlMGM4N2NjNzU3NGUzMTVkMGY2MzBlOWNiODc2MzY2NSIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1hcHBseWJxc3IubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI2MzNjNzg4ZWM4ZTQyZmI1ZWZiYjQwYTYwMWQ4MmZkMTJhMTQ1MGYyNWQzMzRlZGVlYTVhMWFlYjlhMWU0NGYzIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWJhbTJmcS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjRlNzk4MDc3MzQ0MmQ2OTA2YzQ0ZmJlYWM3OTMyNzhhYmU4MGFkODkwMDQ5ODRkNDc4ZTg4ZWE2YjE5OGM1MzIiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tYmFtbWV0cmljcy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImJiZTNhYTRkM2RmMzRmZTdiMzlhMTk3NWU0YmI1MWVhZjA2OGZhZjNlNjM3Nzg3ODk2ZmM0ODljMjJhYWY1MjIiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tYmFtc29ydC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImY0ODE1OGY4ODhjMWQ5ZDNiM2E5OWY1ZjYwNWIyNTE1NzA1ZTk5YzdhNTQxZTUzZGFkZjI3NTBjOGUwMzFhZGMiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tYnFzci5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImJjYzcxZTJlZjg5ZjZmOTY3YTAxNDliYzgxNTk0OTU2YWMyNTlmMDAxZTFkYzQwMWY0N2I2YmExNTAzNDQwZjIiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tY29sbGVjdG11bHRpcGxlbWV0cmljcy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjhmN2FjZTJjZDI2MjY4NzgxODY4ZmI4NjE5N2M2MGY3NThjM2M3ZmIzNDZlYjg2NWVjM2I5YzVmMTFhZjJmZjgiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tZGJzbnAubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI4NzRmMDZlOGE5NGIwZmFlNjc0NGM4NzRjNzMxY2Y0OWQ4Y2YyYzkxNWI0ODAxODIxOWMwYTNmZTFmM2YzMjc0IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWRlZXBzb21hdGljLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMWEwZDZhOWZhNjU3NWExM2RmMDM4YTdhZTg3OGQ2N2RjYzU4ZjU2NTI2MzBiYjJkYWRlMzQ1ZDA3ZGRhN2ZmNiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1kZWVwdmFyaWFudC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjMwOWRlYThkMTgxYTZkYjY5ZjU5YTQzZWU4NjhlMmFmZjI1OTRhZTQyMjYzMTAwNTk1MGQ0MWIwNzgxMmRkMzYiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tZGVlcHZhcmlhbnRfZ2VybWxpbmUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI0YjY4MGRiNDE5M2JmOWQ3ZDQzY2M2OTcxMGFjOGFiNzI0YzZlNDU5ZWVmNjE4NWE1ZmU1YzZiODc3ODY1NzZhIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWZxMmJhbS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjA1MzRkMWY2NTU3NzA1MjY2NjhjYzM1MjA2MjhkMzFkNjVmN2I1MmFjOTJjMTA5YzE5YTYwMDYzZDMyMTZkODMiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tZnEyYmFtX21ldGgubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI1NjVkNDJjZmQwOGFkN2MyYWJlY2ExYTQ2N2ZjNjg5OTM3ZmIzNjQ4MWU4NDA0NDlhNTVjNzcyMTY4NGFhMWE5IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWdlbm90eXBlZ3ZjZi5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjQyMGI5ZjM5MTEzMWJjN2Y1ZGUxNTE3MjVmMTA5NDNhZjdiNWY5OGEwNDljYmM1ZjE0ZjE4YzEzNjE0MjZjMjgiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tZ2VybWxpbmUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI5NTBkZDg2NjJkMzE2YTQ5NDVhNmMzOTA5ODUzNzMwZTlmNjllMGNjYjhiYWJkZGI5MGY1MWIzMmI5NjBkNjE1IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWdpcmFmZmUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJhZTMwZjk2ZGU3NDE2NjA3ZjVjMGFlOWNlNTA5MjMwZWY3YTlkYWFiNzkzYzNmYjQzNzE5ODgzZmRjODZlZTVkIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLWhhcGxvdHlwZWNhbGxlci5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjZiYzAxNjAyNGYzMmYyYWJiYzIyN2M4Yzk0OWM1ZDg2ZDZkNjM0NjBhOTg5ZjE4MTg0ZDQ4MGFjYzFlNTIwZTIiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4taW5kZXhndmNmLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNWZmMjQxYmJjZDYzY2U3ZGQzNWU5M2JkNTQ0ZjE5ODYxMDFmNDk5OWQxNzlhNDc0MzkzMzkyYzM5MGZjNGMxMSIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1tYXJrZHVwLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNzA1YmQyYzNhYzYxNzYyN2M1Y2QzNTU4MzEyZDUzNjQyMGNjMjhjZjE1ZmYxYWVhZmIzMWQ0NGU0NzdjODdhZSIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1taW5pbWFwMi5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjNiNTU5NzY5OTNmMzI2OTMyMTMwYmYwNDJiOGY5NGY4ZmI4ZjhiMmJkMTRkOTA3YWM1NTI3YzdhZWY4MDdlNzQiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tbXV0ZWN0Y2FsbGVyLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNTVmNmJmYTJjZjYyMjJjZWM3ZTZjNDdkNzNjNTEzMWIzOGRiZTRmOWI5N2YzNDQ4MTBlMDNkY2ZlNmU5NzE0MyIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1vbnRfZ2VybWxpbmUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJmMTViODVjOTY4NzdiNGJkZGE3NDZiZTE0NGU0Y2YzODkzMDcyMTQ2ZjhhYjMzYmNhMWQ3OGJkNzYwYjFlZGZhIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLXBhY2Jpb19nZXJtbGluZS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImIxMjQxNWY2MTNjMWY3OTVlNmE3MmY5ZTAzYTdhNTk2MWUwMmQ0YTFjNGMyYTIxYjg0NWZjZGRjMWU4NzFiOTkiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tcGFuZ2Vub21lX2F3YXJlX2RlZXB2YXJpYW50Lm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNDQxODg2YTYyYmY1YmNjNjlhNjYxZmRkMDdlYTk5ZjMzMTlmNWEwYjFjZDE1M2M3YmQ3YWUwNGE3OTVjMTgyNSIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9wYnJ1bi1wYW5nZW5vbWVfZ2VybWxpbmUubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJjNTUxZDM2ZmE4ODViMmI3OWFjZTk3NGEwNDY1ODg0ZThmMzE5N2JjNTYzY2M0N2MxMzBjYTQ4MDlmNDA4Zjk2IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLXBvc3Rwb24ubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI0MjM2ZmQ0MjMxZTAzNDQyNjNhMzBlMThlOTU1ZjFiOGQ3NjA4ZTU1Njg5NDU2MGJhZWYzNjI2OGRlMDM0Mzc0IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3BicnVuLXByZXBvbi5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjBhMjQ2MDlhMGZlZGZjOWVjYTYwZjJhMmM5MzhlNGEwYjVjMDA2MGViZWY1Yzk4MTFlMTAwOWUxZWY1NDkzNWQiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tcm5hX2ZxMmJhbS5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImRiYzJmMjI0OWZlOWUzZWVhMGMzNzMzNjZkNzg4ZWI2NDkyNmJhOWRlM2ZjYjMzMjczZjJjNzNlYzcyMjAzNDIiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tc29tYXRpYy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImY2MDQzYmUwN2JiMWU0ODcyODhmYWYzMGVmZGFhOThkZjUxYjdlNWE1NmQzYzg5MDFkOTI2MTNjYzgzNmY2ZTEiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGJydW4tc3RhcmZ1c2lvbi5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjUxYjc2OWUwMWFjNzgzMjYxYmQyMTEyM2FhZTE2NGNhMDg0NmQwZjIxNDg3NTExNTRhMGVjMGE0YThiYzhlNGMiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcGVyZm9ybWFuY2UubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIwODc4ODQzZTkwMjJhZDljYjhhN2I5N2NlNWQ5ODYzM2I1NTIxYWQwZTdjODg1NDJjYTM3NWM1ODFhZDRkY2ExIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3JuYS10cmFuc2xhdGlvbi5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjk1Mzk5MjljNWZiNjVhZWQ3MjQ3NWQ2YjkxZGVkNmM0ZDI5OTIwMjZhNmY0MjY4MDg4MDRiNjg1M2VhZGQ4YWUiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcnVudGltZS1lbnZpcm9ubWVudC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImJiMjkxY2RmY2UxMzEyMDNmOGNmNzA3MmZhYmExMTQ5ZjJmYTk1ZTBhYjNhNDBhMjZlZTg4OTAyZmU2ZThiY2YiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvc2hhcmVkLW9wdGlvbnMubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI3MjkzZmQxY2YxMzA2NDE3MjllOTg1YzQ5ZDA1Yzk5YjZiNjM5MTkxZWRlOWZhNjVhZmE3YzRjYzY3MzA2ZTNkIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3Rvb2wtaW5kZXgubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI0NTg4OGYyZGZhMmRkN2Y0NGZjYjQ4Y2UyMDYyZDBhMTFhZDYzZDFmMGVjZDQ5NjdhZGIxZWZmNzY1OTdjOWQwIiwKICAgICAgICAibmFtZSI6ICJzY3JpcHRzL2NoZWNrX3BhcmFicmlja3NfcnVudGltZS5weSIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjgzNjU1ZWM2YjkyZDA0YTM5MmNiOWYwODdjOWY0MDZmM2I3OTRjYjU5NmQyZTE2ZTMyN2ExYjMwNDYxZmI2YTQiLAogICAgICAgICJuYW1lIjogInNjcmlwdHMvY2hlY2tfcGFyYWJyaWNrc19ydW50aW1lLnNoIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNzg0YTg1ZjI4MTg0MmZhMWM3ZjE3ZGM0ZjdmY2MzZTMzMzVmNjRlNTY5YzY4M2RjYTRmOWE2NmRiMTAyM2FmYSIsCiAgICAgICAgIm5hbWUiOiAic2NyaXB0cy90cmFuc2xhdGVfc3Rhcl90b19wYXJhYnJpY2tzLnB5IiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiOTAxYjQzNGU4OTllNGNmZTM5NTkyMzlmYTgxMGQ2MzNkZTY0YzAxYzY2NGVjMjA4ZTc2MDJlMTYwOTIzMDljMyIsCiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0KICAgIF0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMAJFIfDbWc0gJhAKG3JIbAE7oNx6w40gXbBWgk+NPc8zzHh3XHVM4f7g5tKYJrqiOwIxAOGdTDlc7Twd4uPqFG69wmnfIVOifGYBLoadJwiXo/U6kOEY57mknDtbsZ53Mn8+1g==","keyid":""}]}} \ No newline at end of file