From 394904b6fd830619d800cbc07022f7dcb060df7e Mon Sep 17 00:00:00 2001 From: Felix Lenner Date: Thu, 26 Feb 2026 15:09:38 +0100 Subject: [PATCH 1/4] Add paraphrase --- modules/nf-core/paraphrase/environment.yml | 10 ++ modules/nf-core/paraphrase/main.nf | 48 ++++++ modules/nf-core/paraphrase/meta.yml | 87 ++++++++++ modules/nf-core/paraphrase/tests/main.nf.test | 123 +++++++++++++++ .../paraphrase/tests/main.nf.test.snap | 149 ++++++++++++++++++ .../nf-core/paraphrase/tests/nextflow.config | 5 + 6 files changed, 422 insertions(+) create mode 100644 modules/nf-core/paraphrase/environment.yml create mode 100644 modules/nf-core/paraphrase/main.nf create mode 100644 modules/nf-core/paraphrase/meta.yml create mode 100644 modules/nf-core/paraphrase/tests/main.nf.test create mode 100644 modules/nf-core/paraphrase/tests/main.nf.test.snap create mode 100644 modules/nf-core/paraphrase/tests/nextflow.config diff --git a/modules/nf-core/paraphrase/environment.yml b/modules/nf-core/paraphrase/environment.yml new file mode 100644 index 000000000000..2a2259bbe679 --- /dev/null +++ b/modules/nf-core/paraphrase/environment.yml @@ -0,0 +1,10 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - conda-forge::pip==26.0.1 + - conda-forge::python=3.14.3 + - pip: + - paraphrase==0.2.0 diff --git a/modules/nf-core/paraphrase/main.nf b/modules/nf-core/paraphrase/main.nf new file mode 100644 index 000000000000..840f3666e35b --- /dev/null +++ b/modules/nf-core/paraphrase/main.nf @@ -0,0 +1,48 @@ +process PARAPHRASE { + tag "$meta.id" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/bc/bc177b8e7e1d9bbdcbb64a6ad630c7ecc63a2229ce2b219408888bc2bb34cac3/data': + 'community.wave.seqera.io/library/pip_paraphrase:59a4576966ee5f0b' }" + + input: + tuple val(meta), path(jsons), val(samples) + tuple val(meta2), path(yaml) + val(tsv_output) + + output: + tuple val(meta), path("*.json"), emit: json, optional: true + tuple val(meta), path("*.tsv"), emit: tsv, optional: true + + tuple val("${task.process}"), val('paraphrase'), eval("paraphrase --version"), topic: versions, emit: versions_paraphrase + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def rules = yaml ? "--rules $yaml" : '' + def output_format = tsv_output ? 'tsv' : 'json' + """ + paraphrase \ + $args \ + --input ${jsons.join(' --input ')} \ + --sample ${samples.join(' --sample ')} \ + --output-format=${output_format} \ + $rules \ + > ${prefix}.${output_format} + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def output_format = tsv_output ? 'tsv' : 'json' + """ + echo $args + + touch ${prefix}.${output_format} + """ +} diff --git a/modules/nf-core/paraphrase/meta.yml b/modules/nf-core/paraphrase/meta.yml new file mode 100644 index 000000000000..2f24635bacb0 --- /dev/null +++ b/modules/nf-core/paraphrase/meta.yml @@ -0,0 +1,87 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "paraphrase" +description: Parse and annotate paraphrase JSONs +keywords: + - long-read + - paraphrase + - annotate +tools: + - "paraphrase": + description: "Paraphase JSON parser" + homepage: "https://github.com/Clinical-Genomics/paraphrase" + documentation: "https://github.com/Clinical-Genomics/paraphrase/README.md" + tool_dev_url: "https://github.com/Clinical-Genomics/paraphrase" + licence: ["MIT"] + +input: + - - meta: + type: map + description: Groovy Map containing sample information. e.g. `[ id:'sample1']` + - jsons: + type: file + description: "One or more JSON files from paraphase" + pattern: "*.json" + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + - samples: + type: list + description: "Sample names corresponding to the JSON files. Must be in the same order as the JSON files." + - - meta2: + type: map + description: Groovy Map containing reference information. + - yaml: + type: file + description: "YAML file containing rules for annotation" + pattern: "*.yaml" + ontologies: + - edam: http://edamontology.org/format_3473 # YAML + - tsv_output: + type: boolean + description: "Whether to output in TSV format instead of JSON. Default is false (JSON output)." + +output: + json: + - - meta: + type: map + description: Groovy Map containing sample information. e.g. `[ id:'sample1']` + - "*.json": + type: file + description: "Annotated output in JSON format" + pattern: "*.json" + ontologies: + - edam: http://edamontology.org/format_3464 # JSON + tsv: + - - meta: + type: map + description: Groovy Map containing sample information. e.g. `[ id:'sample1']` + - "*.tsv": + type: file + description: "Annotated output in TSV format" + pattern: "*.tsv" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + versions_paraphrase: + - - ${task.process}: + type: string + description: The name of the process + - paraphrase: + type: string + description: The name of the tool + - paraphrase --version: + type: eval + description: The expression to obtain the version of the tool +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - paraphrase: + type: string + description: The name of the tool + - paraphrase --version: + type: eval + description: The expression to obtain the version of the tool +authors: + - "@fellen31" +maintainers: + - "@fellen31" diff --git a/modules/nf-core/paraphrase/tests/main.nf.test b/modules/nf-core/paraphrase/tests/main.nf.test new file mode 100644 index 000000000000..4b1217f80997 --- /dev/null +++ b/modules/nf-core/paraphrase/tests/main.nf.test @@ -0,0 +1,123 @@ +nextflow_process { + + name "Test Process PARAPHRASE" + script "../main.nf" + process "PARAPHRASE" + config "./nextflow.config" + + tag "modules" + tag "modules_nfcore" + tag "tabix/bgzip" + tag "paraphase" + tag "paraphrase" + + setup { + run("TABIX_BGZIP") { + script "../../tabix/bgzip/main.nf" + process { + """ + input[0] = [ + [ id:'test_ref' ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr22_chr22_KI270734v1_random/sequence/genome.fa.gz', checkIfExists: true), + ] + """ + } + } + run("PARAPHASE") { + script "../../paraphase/main.nf" + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bam/test.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/bam/test.sorted.bam.bai', checkIfExists: true), + ] + input[1] = TABIX_BGZIP.out.output + input[2] = [ + [:], + [] + ] + """ + } + } + } + + test("no rules") { + + when { + params { + module_args = '--gene PRODH' + } + process { + """ + input[0] = PARAPHASE.out.json.map { meta, json -> [meta, json, meta.id] } + input[1] = [[],[]] + input[2] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match() } + ) + } + + } + + test("rules") { + + when { + params { + module_args = '--gene PRODH' + } + process { + """ + input[0] = PARAPHASE.out.json.map { meta, json -> [meta, json, meta.id] } + input[1] = [ + [ id:'rules' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/yaml/rules.yaml', checkIfExists: true) + ] + input[2] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match() } + ) + } + + } + + test("rules - tsv output") { + + when { + params { + module_args = '--gene PRODH' + } + process { + """ + input[0] = PARAPHASE.out.json.map { meta, json -> [meta, json, meta.id] } + input[1] = [ + [ id:'rules' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/yaml/rules.yaml', checkIfExists: true) + ] + input[2] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/nf-core/paraphrase/tests/main.nf.test.snap b/modules/nf-core/paraphrase/tests/main.nf.test.snap new file mode 100644 index 000000000000..29a2f27a8069 --- /dev/null +++ b/modules/nf-core/paraphrase/tests/main.nf.test.snap @@ -0,0 +1,149 @@ +{ + "no rules": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.json:md5,6b289a071010d6cb0253282ce5e0fd94" + ] + ], + "1": [ + + ], + "2": [ + [ + "PARAPHRASE", + "paraphrase", + "paraphrase 0.2.0" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.json:md5,6b289a071010d6cb0253282ce5e0fd94" + ] + ], + "tsv": [ + + ], + "versions_paraphrase": [ + [ + "PARAPHRASE", + "paraphrase", + "paraphrase 0.2.0" + ] + ] + } + ], + "timestamp": "2026-02-26T14:59:12.897483092", + "meta": { + "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", + "nextflow": "26.01.1" + } + }, + "rules - tsv output": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tsv:md5,d7f2ca2e7a3de5adf3e322fa0d43a6d6" + ] + ], + "2": [ + [ + "PARAPHRASE", + "paraphrase", + "paraphrase 0.2.0" + ] + ], + "json": [ + + ], + "tsv": [ + [ + { + "id": "test", + "single_end": true + }, + "test.tsv:md5,d7f2ca2e7a3de5adf3e322fa0d43a6d6" + ] + ], + "versions_paraphrase": [ + [ + "PARAPHRASE", + "paraphrase", + "paraphrase 0.2.0" + ] + ] + } + ], + "timestamp": "2026-02-26T14:59:35.705720188", + "meta": { + "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", + "nextflow": "26.01.1" + } + }, + "rules": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test.json:md5,27db48ae0e6960221fc7b224711a5373" + ] + ], + "1": [ + + ], + "2": [ + [ + "PARAPHRASE", + "paraphrase", + "paraphrase 0.2.0" + ] + ], + "json": [ + [ + { + "id": "test", + "single_end": true + }, + "test.json:md5,27db48ae0e6960221fc7b224711a5373" + ] + ], + "tsv": [ + + ], + "versions_paraphrase": [ + [ + "PARAPHRASE", + "paraphrase", + "paraphrase 0.2.0" + ] + ] + } + ], + "timestamp": "2026-02-26T14:59:24.340581993", + "meta": { + "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", + "nextflow": "26.01.1" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/paraphrase/tests/nextflow.config b/modules/nf-core/paraphrase/tests/nextflow.config new file mode 100644 index 000000000000..86c8071de42e --- /dev/null +++ b/modules/nf-core/paraphrase/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'PARAPHASE' { + ext.args = params.module_args + } +} From d72f9d86d60a4b9c84a9d0498368a1c19239fde2 Mon Sep 17 00:00:00 2001 From: Felix Lenner <52530259+fellen31@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:26:16 +0100 Subject: [PATCH 2/4] Apply suggestions from code review Co-authored-by: Joon Klaps --- modules/nf-core/paraphrase/tests/main.nf.test | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/nf-core/paraphrase/tests/main.nf.test b/modules/nf-core/paraphrase/tests/main.nf.test index 4b1217f80997..cf15d55d8573 100644 --- a/modules/nf-core/paraphrase/tests/main.nf.test +++ b/modules/nf-core/paraphrase/tests/main.nf.test @@ -42,7 +42,7 @@ nextflow_process { } } - test("no rules") { + test("paraphase json - no rules") { when { params { @@ -60,13 +60,13 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } - test("rules") { + test("paraphase json - rules yaml") { when { params { @@ -93,7 +93,7 @@ nextflow_process { } - test("rules - tsv output") { + test("paraphase json - rules yaml - tsv output") { when { params { From 55a5f8e9aaf345d57607b2b64ab7aa527b65db2e Mon Sep 17 00:00:00 2001 From: Felix Lenner Date: Fri, 27 Feb 2026 13:35:49 +0100 Subject: [PATCH 3/4] Add stub tests and output sanitation --- modules/nf-core/paraphrase/tests/main.nf.test | 87 +++++++++++++++++- .../paraphrase/tests/main.nf.test.snap | 89 +++++++++++++------ 2 files changed, 146 insertions(+), 30 deletions(-) diff --git a/modules/nf-core/paraphrase/tests/main.nf.test b/modules/nf-core/paraphrase/tests/main.nf.test index cf15d55d8573..8f1494d1b2d6 100644 --- a/modules/nf-core/paraphrase/tests/main.nf.test +++ b/modules/nf-core/paraphrase/tests/main.nf.test @@ -87,7 +87,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } @@ -114,10 +114,93 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + + } + + test("paraphase json - no rules - stub") { + + options "-stub" + + when { + params { + module_args = '--gene PRODH' + } + process { + """ + input[0] = PARAPHASE.out.json.map { meta, json -> [meta, json, meta.id] } + input[1] = [[],[]] + input[2] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } + test("paraphase json - rules yaml - stub") { + + options "-stub" + + when { + params { + module_args = '--gene PRODH' + } + process { + """ + input[0] = PARAPHASE.out.json.map { meta, json -> [meta, json, meta.id] } + input[1] = [ + [ id:'rules' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/yaml/rules.yaml', checkIfExists: true) + ] + input[2] = false + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + + } + + test("paraphase json - rules yaml - tsv output - stub") { + + options "-stub" + + when { + params { + module_args = '--gene PRODH' + } + process { + """ + input[0] = PARAPHASE.out.json.map { meta, json -> [meta, json, meta.id] } + input[1] = [ + [ id:'rules' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/pacbio/yaml/rules.yaml', checkIfExists: true) + ] + input[2] = true + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + + } } diff --git a/modules/nf-core/paraphrase/tests/main.nf.test.snap b/modules/nf-core/paraphrase/tests/main.nf.test.snap index 29a2f27a8069..361387834131 100644 --- a/modules/nf-core/paraphrase/tests/main.nf.test.snap +++ b/modules/nf-core/paraphrase/tests/main.nf.test.snap @@ -1,26 +1,37 @@ { - "no rules": { + "paraphase json - rules yaml": { "content": [ { - "0": [ + "json": [ [ { "id": "test", "single_end": true }, - "test.json:md5,6b289a071010d6cb0253282ce5e0fd94" + "test.json:md5,27db48ae0e6960221fc7b224711a5373" ] ], - "1": [ + "tsv": [ ], - "2": [ + "versions_paraphrase": [ [ "PARAPHRASE", "paraphrase", "paraphrase 0.2.0" ] - ], + ] + } + ], + "timestamp": "2026-02-27T13:28:34.178964653", + "meta": { + "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", + "nextflow": "26.01.1" + } + }, + "paraphase json - no rules": { + "content": [ + { "json": [ [ { @@ -42,34 +53,45 @@ ] } ], - "timestamp": "2026-02-26T14:59:12.897483092", + "timestamp": "2026-02-27T13:28:22.923218917", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1" } }, - "rules - tsv output": { + "paraphase json - no rules - stub": { "content": [ { - "0": [ - - ], - "1": [ + "json": [ [ { "id": "test", "single_end": true }, - "test.tsv:md5,d7f2ca2e7a3de5adf3e322fa0d43a6d6" + "test.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "2": [ + "tsv": [ + + ], + "versions_paraphrase": [ [ "PARAPHRASE", "paraphrase", "paraphrase 0.2.0" ] - ], + ] + } + ], + "timestamp": "2026-02-27T13:28:52.544137295", + "meta": { + "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", + "nextflow": "26.01.1" + } + }, + "paraphase json - rules yaml - tsv output - stub": { + "content": [ + { "json": [ ], @@ -79,7 +101,7 @@ "id": "test", "single_end": true }, - "test.tsv:md5,d7f2ca2e7a3de5adf3e322fa0d43a6d6" + "test.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "versions_paraphrase": [ @@ -91,45 +113,56 @@ ] } ], - "timestamp": "2026-02-26T14:59:35.705720188", + "timestamp": "2026-02-27T13:29:06.479213928", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1" } }, - "rules": { + "paraphase json - rules yaml - stub": { "content": [ { - "0": [ + "json": [ [ { "id": "test", "single_end": true }, - "test.json:md5,27db48ae0e6960221fc7b224711a5373" + "test.json:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "1": [ + "tsv": [ ], - "2": [ + "versions_paraphrase": [ [ "PARAPHRASE", "paraphrase", "paraphrase 0.2.0" ] - ], + ] + } + ], + "timestamp": "2026-02-27T13:28:59.506106995", + "meta": { + "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", + "nextflow": "26.01.1" + } + }, + "paraphase json - rules yaml - tsv output": { + "content": [ + { "json": [ + + ], + "tsv": [ [ { "id": "test", "single_end": true }, - "test.json:md5,27db48ae0e6960221fc7b224711a5373" + "test.tsv:md5,d7f2ca2e7a3de5adf3e322fa0d43a6d6" ] - ], - "tsv": [ - ], "versions_paraphrase": [ [ @@ -140,7 +173,7 @@ ] } ], - "timestamp": "2026-02-26T14:59:24.340581993", + "timestamp": "2026-02-27T13:28:45.395866251", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1" From 4db775f1c5b64299752d609eb5fd5d691fb93e76 Mon Sep 17 00:00:00 2001 From: Felix Lenner Date: Fri, 27 Feb 2026 13:43:02 +0100 Subject: [PATCH 4/4] Fix versions --- modules/nf-core/paraphrase/main.nf | 2 +- modules/nf-core/paraphrase/meta.yml | 4 ++-- .../paraphrase/tests/main.nf.test.snap | 24 +++++++++---------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/modules/nf-core/paraphrase/main.nf b/modules/nf-core/paraphrase/main.nf index 840f3666e35b..d9c7b161ac75 100644 --- a/modules/nf-core/paraphrase/main.nf +++ b/modules/nf-core/paraphrase/main.nf @@ -16,7 +16,7 @@ process PARAPHRASE { tuple val(meta), path("*.json"), emit: json, optional: true tuple val(meta), path("*.tsv"), emit: tsv, optional: true - tuple val("${task.process}"), val('paraphrase'), eval("paraphrase --version"), topic: versions, emit: versions_paraphrase + tuple val("${task.process}"), val('paraphrase'), eval("paraphrase --version | sed 's/.* //'"), topic: versions, emit: versions_paraphrase when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/paraphrase/meta.yml b/modules/nf-core/paraphrase/meta.yml index 2f24635bacb0..5e4f2a3c2289 100644 --- a/modules/nf-core/paraphrase/meta.yml +++ b/modules/nf-core/paraphrase/meta.yml @@ -67,7 +67,7 @@ output: - paraphrase: type: string description: The name of the tool - - paraphrase --version: + - paraphrase --version | sed 's/.* //': type: eval description: The expression to obtain the version of the tool topics: @@ -78,7 +78,7 @@ topics: - paraphrase: type: string description: The name of the tool - - paraphrase --version: + - paraphrase --version | sed 's/.* //': type: eval description: The expression to obtain the version of the tool authors: diff --git a/modules/nf-core/paraphrase/tests/main.nf.test.snap b/modules/nf-core/paraphrase/tests/main.nf.test.snap index 361387834131..17efa7fd4849 100644 --- a/modules/nf-core/paraphrase/tests/main.nf.test.snap +++ b/modules/nf-core/paraphrase/tests/main.nf.test.snap @@ -18,12 +18,12 @@ [ "PARAPHRASE", "paraphrase", - "paraphrase 0.2.0" + "0.2.0" ] ] } ], - "timestamp": "2026-02-27T13:28:34.178964653", + "timestamp": "2026-02-27T13:40:26.241158374", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1" @@ -48,12 +48,12 @@ [ "PARAPHRASE", "paraphrase", - "paraphrase 0.2.0" + "0.2.0" ] ] } ], - "timestamp": "2026-02-27T13:28:22.923218917", + "timestamp": "2026-02-27T13:40:14.980861669", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1" @@ -78,12 +78,12 @@ [ "PARAPHRASE", "paraphrase", - "paraphrase 0.2.0" + "0.2.0" ] ] } ], - "timestamp": "2026-02-27T13:28:52.544137295", + "timestamp": "2026-02-27T13:40:44.559269452", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1" @@ -108,12 +108,12 @@ [ "PARAPHRASE", "paraphrase", - "paraphrase 0.2.0" + "0.2.0" ] ] } ], - "timestamp": "2026-02-27T13:29:06.479213928", + "timestamp": "2026-02-27T13:40:58.558739068", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1" @@ -138,12 +138,12 @@ [ "PARAPHRASE", "paraphrase", - "paraphrase 0.2.0" + "0.2.0" ] ] } ], - "timestamp": "2026-02-27T13:28:59.506106995", + "timestamp": "2026-02-27T13:40:51.544118803", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1" @@ -168,12 +168,12 @@ [ "PARAPHRASE", "paraphrase", - "paraphrase 0.2.0" + "0.2.0" ] ] } ], - "timestamp": "2026-02-27T13:28:45.395866251", + "timestamp": "2026-02-27T13:40:37.597570496", "meta": { "nf-test": "0.9.4:md5,3b1b0b457e32f7b2c51c0cf5658dd1cf", "nextflow": "26.01.1"