From 54c79a6106308a421abd8c660f4a213767b82cdc Mon Sep 17 00:00:00 2001 From: Elena Erokhina Date: Wed, 26 Aug 2026 17:24:35 +0200 Subject: [PATCH 1/3] MILAB-6847: declare TSV schema for the ptabler input The input table was built with tsvFileBuilder.build(), which emits an untyped TSV, so ptabler let polars infer the column types. An abundance column with no parseable numeric value in the exported table -- an empty join result, or all-null abundance -- is inferred as String; sum() keeps that dtype and the per-sample normalisation then fails during query planning with "division with 'String' datatypes is not allowed". Build the table with buildForPT() instead, so column types come from the p-column and axis specs and nulls are written as the "%%NA%%" sentinel that ptabler declares per column. wf.frame() reads xsvType and the schema straight off the structural input, so its options argument is no longer needed. This changes the exported TSV bytes, so cached results for this block are invalidated -- correct here, since the previous output was wrong. --- .changeset/vj-usage-abundance-dtype.md | 17 +++++++++++++++++ workflow/src/main.tpl.tengo | 4 +++- workflow/src/usage.lib.tengo | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 .changeset/vj-usage-abundance-dtype.md diff --git a/.changeset/vj-usage-abundance-dtype.md b/.changeset/vj-usage-abundance-dtype.md new file mode 100644 index 0000000..ea70471 --- /dev/null +++ b/.changeset/vj-usage-abundance-dtype.md @@ -0,0 +1,17 @@ +--- +'@platforma-open/milaboratories.vj-usage.workflow': patch +'@platforma-open/milaboratories.vj-usage': patch +--- + +Fix "division with 'String' datatypes is not allowed" when a dataset produces no +numeric abundance rows. + +The input table was built with `tsvFileBuilder.build()`, which emits an untyped +TSV, so ptabler let polars infer the column types. An `abundance` column with no +parseable numeric value in the exported table — an empty join result, or all-null +abundance — is inferred as `String`, and the per-sample normalisation then failed +during query planning. + +The table is now built with `buildForPT()`, so column types come from the +p-column and axis specs instead of inference. This also bumps +`@platforma-sdk/block-tools` to 2.14.3 to satisfy the CI publication gate. diff --git a/workflow/src/main.tpl.tengo b/workflow/src/main.tpl.tengo index fe4864d..d38816e 100644 --- a/workflow/src/main.tpl.tengo +++ b/workflow/src/main.tpl.tengo @@ -95,7 +95,9 @@ wf.body(func(args) { table.add(vGeneCol, {header: "vGene"}) table.add(jGeneCol, {header: "jGene"}) table.add(columns.getColumn("abundance"), {header: "abundance"}) - tsv := table.build() + // buildForPT() (not build()) so the TSV carries a declared PTabler schema: column + // types come from the p-column/axis specs instead of polars' CSV type inference. + tsv := table.buildForPT() results := usage.calculateUsage(vGeneSpec, jGeneSpec, abundanceSpec, tsv) vjUsage := results.vjUsage diff --git a/workflow/src/usage.lib.tengo b/workflow/src/usage.lib.tengo index 93b4191..8ef6e0b 100644 --- a/workflow/src/usage.lib.tengo +++ b/workflow/src/usage.lib.tengo @@ -8,7 +8,7 @@ calculateUsage := func(vGeneSpec, jGeneSpec, abundanceSpec, tsv) { wf := pt.workflow(). mem("16GiB"). // @TODO: set based on the size of the input cpu(4) - df := wf.frame(tsv, {xsvType: "tsv"}) + df := wf.frame(tsv) // Sample total aggregation sampleTotalsDf := df. From 13a5724d393e3df162e88fbda103f3a8d1646ec8 Mon Sep 17 00:00:00 2001 From: Elena Erokhina Date: Wed, 26 Aug 2026 17:24:35 +0200 Subject: [PATCH 2/3] MILAB-6847: bump block-tools to 2.14.3 The shared CI gates publication on @platforma-sdk/block-tools being at the latest version (node-simple-pnpm.yaml, require-latest step), so the build is rejected otherwise. pnpm-lock.yaml is updated alongside, which the same workflow also enforces for any pnpm-workspace.yaml change. --- pnpm-lock.yaml | 225 ++++++++++++++++++++++++++++++++++++++++++-- pnpm-workspace.yaml | 2 +- 2 files changed, 220 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index de5cebd..1949c9b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ catalogs: specifier: 1.3.0 version: 1.3.0 '@platforma-sdk/block-tools': - specifier: 2.12.6 - version: 2.12.6 + specifier: 2.14.3 + version: 2.14.3 '@platforma-sdk/model': specifier: 1.80.2 version: 1.80.2 @@ -80,7 +80,7 @@ importers: version: 1.6.0(@types/node@24.5.2)(rollup@4.55.1)(vue@3.5.26(typescript@5.6.3))(yaml@2.8.2) '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.12.6(@types/node@24.5.2) + version: 2.14.3(@types/node@24.5.2) shx: specifier: 'catalog:' version: 0.4.0 @@ -105,7 +105,7 @@ importers: devDependencies: '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.12.6(@types/node@24.5.2) + version: 2.14.3(@types/node@24.5.2) shx: specifier: 'catalog:' version: 0.4.0 @@ -114,7 +114,7 @@ importers: dependencies: '@milaboratories/graph-maker': specifier: 'catalog:' - version: 1.4.6(@milaboratories/pl-model-common@1.47.1)(@platforma-sdk/model@1.80.2)(@platforma-sdk/ui-vue@1.80.4(@bytecodealliance/preview2-shim@0.17.9)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3) + version: 1.4.6(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.80.2)(@platforma-sdk/ui-vue@1.80.4(@bytecodealliance/preview2-shim@0.17.9)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3) '@platforma-sdk/model': specifier: 'catalog:' version: 1.80.2 @@ -133,7 +133,7 @@ importers: version: 1.3.0 '@platforma-sdk/block-tools': specifier: 'catalog:' - version: 2.12.6(@types/node@24.5.2) + version: 2.14.3(@types/node@24.5.2) eslint: specifier: 'catalog:' version: 9.39.2 @@ -883,11 +883,20 @@ packages: resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} engines: {node: '>=12.10.0'} + '@grpc/grpc-js@1.14.4': + resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} + engines: {node: '>=12.10.0'} + '@grpc/proto-loader@0.7.13': resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} engines: {node: '>=6'} hasBin: true + '@grpc/proto-loader@0.8.1': + resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} + engines: {node: '>=6'} + hasBin: true + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1145,6 +1154,10 @@ packages: resolution: {integrity: sha512-0mS5GQAQYUab0qj1C6+IXafNJhL1ahnhPBmIkLq9VqJU8p9jNZ7KC5ln4/pl0tK47brdPljCLEiLg8IdSa6wFw==} engines: {node: '>=22'} + '@milaboratories/helpers@1.14.5': + resolution: {integrity: sha512-Kiy0g7sEmFQxDwtnmTrdJ8XdUK0IDAB5ZnPCNEbK7lPGHIa+xG3kzfeR4y44QBdrYaK0NwG63D8Fc7dlv9KItg==} + engines: {node: '>=22'} + '@milaboratories/miplots4@1.2.2': resolution: {integrity: sha512-VMdMxfD/lwObssvYDFRnBcBAV4JFqI2FsoQqmJ/wurIHieoZLU9K0UO57MvsvtmO3Deb9swUjuDUJ+jAe8isqw==} @@ -1182,6 +1195,10 @@ packages: resolution: {integrity: sha512-+0ih1njQn4wvLjGmFKboKFRlWYLrzg7QdRK2aNo8ivTKY16TrsMRCk0GQEt0aPKELnv7QSrsNSjg7e7GSdGMDQ==} engines: {node: '>=22.19.0'} + '@milaboratories/pl-client@3.14.7': + resolution: {integrity: sha512-HIjPfGAYRRD0hbq5YSTkWt5XgBiv+yYtw73EjWLxui8eUEeB2ffdgsvH7IhVx2oXjUOL4p7M4i8PBnmdJ3830w==} + engines: {node: '>=22.19.0'} + '@milaboratories/pl-config@1.8.4': resolution: {integrity: sha512-eBZCIVhl9jRigyJUPURCxH2f2OrU5aToihSrwmTkCOu2rjr1spe4YGMIh9CxPr8Z1GkfQbez3crJGME1+RZrrg==} @@ -1213,18 +1230,27 @@ packages: '@milaboratories/pl-model-backend@1.4.16': resolution: {integrity: sha512-MrJwM3aOzrqr3+GVpS/1Zh/SOH/2tBtoyk/+eE6C7LRjofoip8GIF4be8AgPAM3C+6wTSGrQ5x3CM6A8Ql2HVA==} + '@milaboratories/pl-model-backend@1.4.21': + resolution: {integrity: sha512-Z2z5J8bglslgXXoi1aySi1ho+/d+ylJiuEaRw9XTNuE5iBM3EQPe0rw095pXGOinTlMpmvUcCI2wkVCraUQ1dA==} + '@milaboratories/pl-model-common@1.46.2': resolution: {integrity: sha512-VEeauisApYScvCS8lnK3zpFJ520xuTAodKJmjR8ulHcMrWMyWMfHEdGb7j5OMD0mM/OwTgmQrrJ5eB7Xd+xoOQ==} '@milaboratories/pl-model-common@1.47.1': resolution: {integrity: sha512-5F9I8JvUPRJ2HEzz5MmTio6JFYnhYoMVHfToh2NyXyOyQgAF6jhOzZBOsrEig9NfCPZBRB7v6UjmIK43dG4o/g==} + '@milaboratories/pl-model-common@1.48.0': + resolution: {integrity: sha512-oCVrjFNmjQolb7YWnbSGHnp6GGVm1PhG1lnNABp9lqYjvA2ISjIPQLIo/vT2ca0mqwLrEvbuRqiqSFOg7sQ5tQ==} + '@milaboratories/pl-model-middle-layer@1.30.13': resolution: {integrity: sha512-owQVozyub/6aKgk+yce+9sDK+t0HrpLbnlKJqQjYJahuhoju8j6VMY17AWgvADSDCiI3gnp/Tm/I4Ur6ySs1Cg==} '@milaboratories/pl-model-middle-layer@1.30.7': resolution: {integrity: sha512-rs9x3Ron4ujR/UOdEgB8WUB1SvZ8ZAScT1Av/e4or+iiQ/CzhmK9nqtYamHVwKV+JgwIFbXQwxGvIHDVz955dQ==} + '@milaboratories/pl-model-middle-layer@1.32.0': + resolution: {integrity: sha512-X1iLGgOwzkw8mQ/GfTxfOTJakBJ26np85h5HqUziMbVkFL0SR7wpd7xpgUs6TKVkYNM8viAv3iA2k63Yc5SahQ==} + '@milaboratories/pl-tree@1.13.1': resolution: {integrity: sha512-NtVVUSF9eJA5v5iUEfGgKl0JbG/EIvy+YCsxzCZ1dXG1S3gCNwt01Nj5PkWW7FkDG1IT0ZfwyeO0mVVz2kIv1Q==} engines: {node: '>=22.19.0'} @@ -1257,6 +1283,10 @@ packages: resolution: {integrity: sha512-vZDcIBta7I935VjKk6qGdhpjz2pWXe5CbWv1UUmPrcG8wsunDpWuet8/Gi75N97CpcLDc2LLHd/url9K8ZNpAg==} engines: {node: '>=22.19.0'} + '@milaboratories/ts-helpers@1.8.6': + resolution: {integrity: sha512-ef01tARUl+0Urt3x8HHAByrhYHg4Rnn7WiFyJ+joZFZl1T1pUKTgfB7Zxc8Cn06HIl4i6H7s5OSymjZePIGqfQ==} + engines: {node: '>=22.19.0'} + '@milaboratories/uikit@2.15.16': resolution: {integrity: sha512-HOl1YsPKHpj3izKAs0hEvVtFE8ZbrOnD5KsAqSHxvipQyfAdOLbfB7ak6XPdPKbgsvH5opfMws7usryR6Nlulw==} @@ -1595,6 +1625,10 @@ packages: resolution: {integrity: sha512-MtsYTCNhCCA9drSihSh5uXUY2/qCNai/ekOX2pw2gtzjHPXPqnin1Wzri0z/2N1wOShXodRItBUglALNJFWUsQ==} hasBin: true + '@platforma-sdk/block-tools@2.14.3': + resolution: {integrity: sha512-CD0NPfUoXiJhl6JArC057oCXbqKkJf5HJsmrlZShnh6lKRaIQlibF8VUqbpBi9+PopsGCQ4/s5HnLR7wQoWDzg==} + hasBin: true + '@platforma-sdk/blocks-deps-updater@2.2.0': resolution: {integrity: sha512-p9lBxhFXM9WoRsrJO7dfkiXSK+1m63yIn1sKhBO71eMbhrLMyVYHEOeNf3w5OCdbRF5QsNhXzWuiTmFK3zHFsA==} hasBin: true @@ -1605,6 +1639,9 @@ packages: '@platforma-sdk/package-builder-lib@1.2.0': resolution: {integrity: sha512-AtSzaZ39BGlqcyYtpGREDz+YlGCDdSTQJNV/+NkTyUtoq1ECRO+iMqAX1DSSza1WqylnURX8vKVI2owS/cxntA==} + '@platforma-sdk/package-builder-lib@1.3.0': + resolution: {integrity: sha512-CdBjmNo6E1fBxKYWaXa49L/L2WLURxs2f1TAqxLIZlHRE4DZ6E1TEj3jNNKESWp+/9rwtLkTAzmTzNPrDgz+2Q==} + '@platforma-sdk/tengo-builder@4.0.18': resolution: {integrity: sha512-nGPB5fE6b9ITFuXVMRakr2MyqsnL4TVE09jZ2X7TCPgb31k4gIhYCT+XU9vBRavBj/U3dt+jSWHkcbX9JvJKYA==} engines: {node: '>=22'} @@ -1647,12 +1684,21 @@ packages: '@protobufjs/codegen@2.0.4': resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + '@protobufjs/codegen@2.0.5': + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} + '@protobufjs/eventemitter@1.1.0': resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + '@protobufjs/eventemitter@1.1.1': + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} + '@protobufjs/fetch@1.1.0': resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} + '@protobufjs/float@1.0.2': resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} @@ -1668,6 +1714,9 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@protobufjs/utf8@1.1.2': + resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==} + '@rolldown/binding-android-arm64@1.0.3': resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5504,6 +5553,10 @@ packages: resolution: {integrity: sha512-Z2E/kOY1QjoMlCytmexzYfDm/w5fKAiRwpSzGtdnXW1zC88Z2yXazHHrOtwCzn+7wSxyE8PYM4rvVcMphF9sOA==} engines: {node: '>=12.0.0'} + protobufjs@7.6.5: + resolution: {integrity: sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==} + engines: {node: '>=12.0.0'} + pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} @@ -7446,6 +7499,11 @@ snapshots: '@grpc/proto-loader': 0.7.13 '@js-sdsl/ordered-map': 4.4.2 + '@grpc/grpc-js@1.14.4': + dependencies: + '@grpc/proto-loader': 0.8.1 + '@js-sdsl/ordered-map': 4.4.2 + '@grpc/proto-loader@0.7.13': dependencies: lodash.camelcase: 4.3.0 @@ -7453,6 +7511,13 @@ snapshots: protobufjs: 7.5.0 yargs: 17.7.2 + '@grpc/proto-loader@0.8.1': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.6.5 + yargs: 17.7.2 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -7752,12 +7817,38 @@ snapshots: - supports-color - typescript + '@milaboratories/graph-maker@1.4.6(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.80.2)(@platforma-sdk/ui-vue@1.80.4(@bytecodealliance/preview2-shim@0.17.9)(typescript@5.9.3))(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(typescript@5.9.3)': + dependencies: + '@ag-grid-community/core': 32.3.5 + '@milaboratories/helpers': 1.14.2 + '@milaboratories/miplots4': 1.2.2(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0) + '@milaboratories/pf-plots': 1.4.4(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.80.2) + '@platforma-sdk/model': 1.80.2 + '@platforma-sdk/ui-vue': 1.80.4(@bytecodealliance/preview2-shim@0.17.9)(typescript@5.9.3) + '@types/d3-hierarchy': 3.1.7 + '@types/d3-scale': 4.0.9 + '@vueuse/core': 13.5.0(vue@3.5.26(typescript@5.9.3)) + ag-grid-vue3: 34.1.2(vue@3.5.26(typescript@5.9.3)) + canonicalize: 2.1.0 + d3-hierarchy: 3.1.2 + d3-scale: 4.0.2 + vue: 3.5.26(typescript@5.9.3) + transitivePeerDependencies: + - '@milaboratories/pl-model-common' + - d3-dispatch + - d3-path + - d3-scale-chromatic + - supports-color + - typescript + '@milaboratories/helpers@1.13.0': {} '@milaboratories/helpers@1.14.2': {} '@milaboratories/helpers@1.14.4': {} + '@milaboratories/helpers@1.14.5': {} + '@milaboratories/miplots4@1.2.2(d3-dispatch@3.0.1)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)': dependencies: '@d3fc/d3fc-chart': 5.1.9(d3-array@3.2.4)(d3-path@3.1.0)(d3-scale-chromatic@3.1.0)(d3-scale@4.0.2)(d3-selection@3.0.0)(d3-shape@3.2.0) @@ -7819,6 +7910,14 @@ snapshots: canonicalize: 2.1.0 lodash: 4.17.21 + '@milaboratories/pf-plots@1.4.4(@milaboratories/pl-model-common@1.48.0)(@platforma-sdk/model@1.80.2)': + dependencies: + '@milaboratories/helpers': 1.14.2 + '@milaboratories/pl-model-common': 1.48.0 + '@platforma-sdk/model': 1.80.2 + canonicalize: 2.1.0 + lodash: 4.17.21 + '@milaboratories/pf-spec-driver@1.4.21(@bytecodealliance/preview2-shim@0.17.9)': dependencies: '@milaboratories/helpers': 1.14.4 @@ -7876,6 +7975,24 @@ snapshots: utility-types: 3.11.0 yaml: 2.8.2 + '@milaboratories/pl-client@3.14.7': + dependencies: + '@grpc/grpc-js': 1.14.4 + '@milaboratories/pl-http': 1.2.4 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/ts-helpers': 1.8.6 + '@protobuf-ts/grpc-transport': 2.11.1(@grpc/grpc-js@1.14.4) + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + canonicalize: 2.1.0 + denque: 2.1.0 + long: 5.3.2 + lru-cache: 11.2.4 + openapi-fetch: 0.15.0 + undici: 7.16.0 + utility-types: 3.11.0 + yaml: 2.8.2 + '@milaboratories/pl-config@1.8.4': dependencies: '@milaboratories/ts-helpers': 1.8.5 @@ -7991,6 +8108,12 @@ snapshots: canonicalize: 2.1.0 zod: 3.25.76 + '@milaboratories/pl-model-backend@1.4.21': + dependencies: + '@milaboratories/pl-client': 3.14.7 + canonicalize: 2.1.0 + zod: 3.25.76 + '@milaboratories/pl-model-common@1.46.2': dependencies: '@milaboratories/helpers': 1.14.2 @@ -8006,6 +8129,14 @@ snapshots: es-toolkit: 1.39.10 zod: 3.25.76 + '@milaboratories/pl-model-common@1.48.0': + dependencies: + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pl-error-like': 1.12.10 + canonicalize: 2.1.0 + es-toolkit: 1.39.10 + zod: 3.25.76 + '@milaboratories/pl-model-middle-layer@1.30.13': dependencies: '@milaboratories/helpers': 1.14.4 @@ -8022,6 +8153,14 @@ snapshots: utility-types: 3.11.0 zod: 3.25.76 + '@milaboratories/pl-model-middle-layer@1.32.0': + dependencies: + '@milaboratories/helpers': 1.14.5 + '@milaboratories/pl-model-common': 1.48.0 + es-toolkit: 1.39.10 + utility-types: 3.11.0 + zod: 3.25.76 + '@milaboratories/pl-tree@1.13.1': dependencies: '@milaboratories/computable': 2.9.7 @@ -8175,6 +8314,12 @@ snapshots: canonicalize: 2.1.0 denque: 2.1.0 + '@milaboratories/ts-helpers@1.8.6': + dependencies: + '@milaboratories/helpers': 1.14.5 + canonicalize: 2.1.0 + denque: 2.1.0 + '@milaboratories/uikit@2.15.16(typescript@5.9.3)': dependencies: '@milaboratories/helpers': 1.14.4 @@ -8507,6 +8652,31 @@ snapshots: - '@types/node' - aws-crt + '@platforma-sdk/block-tools@2.14.3(@types/node@24.5.2)': + dependencies: + '@aws-sdk/client-ecr-public': 3.859.0 + '@aws-sdk/client-s3': 3.859.0 + '@inquirer/prompts': 7.10.1(@types/node@24.5.2) + '@milaboratories/pl-http': 1.2.4 + '@milaboratories/pl-model-backend': 1.4.21 + '@milaboratories/pl-model-common': 1.48.0 + '@milaboratories/pl-model-middle-layer': 1.32.0 + '@milaboratories/resolve-helper': 1.1.3 + '@milaboratories/ts-helpers': 1.8.6 + '@platforma-sdk/blocks-deps-updater': 2.2.0 + '@platforma-sdk/package-builder-lib': 1.3.0 + canonicalize: 2.1.0 + commander: 15.0.0 + lru-cache: 11.2.4 + mime-types: 2.1.35 + tar: 7.5.2 + undici: 7.16.0 + yaml: 2.8.2 + zod: 3.25.76 + transitivePeerDependencies: + - '@types/node' + - aws-crt + '@platforma-sdk/blocks-deps-updater@2.2.0': dependencies: yaml: 2.8.2 @@ -8538,6 +8708,19 @@ snapshots: transitivePeerDependencies: - aws-crt + '@platforma-sdk/package-builder-lib@1.3.0': + dependencies: + '@aws-sdk/client-s3': 3.859.0 + '@aws-sdk/lib-storage': 3.859.0(@aws-sdk/client-s3@3.859.0) + '@milaboratories/resolve-helper': 1.1.3 + archiver: 7.0.1 + undici: 7.16.0 + winston: 3.17.0 + yaml: 2.8.2 + zod: 3.25.76 + transitivePeerDependencies: + - aws-crt + '@platforma-sdk/tengo-builder@4.0.18': dependencies: '@milaboratories/pl-model-backend': 1.4.16 @@ -8654,6 +8837,12 @@ snapshots: '@protobuf-ts/runtime': 2.11.1 '@protobuf-ts/runtime-rpc': 2.11.1 + '@protobuf-ts/grpc-transport@2.11.1(@grpc/grpc-js@1.14.4)': + dependencies: + '@grpc/grpc-js': 1.14.4 + '@protobuf-ts/runtime': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 + '@protobuf-ts/plugin@2.11.1': dependencies: '@bufbuild/protobuf': 2.5.2 @@ -8679,13 +8868,21 @@ snapshots: '@protobufjs/codegen@2.0.4': {} + '@protobufjs/codegen@2.0.5': {} + '@protobufjs/eventemitter@1.1.0': {} + '@protobufjs/eventemitter@1.1.1': {} + '@protobufjs/fetch@1.1.0': dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 + '@protobufjs/fetch@1.1.1': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/float@1.0.2': {} '@protobufjs/inquire@1.1.0': {} @@ -8696,6 +8893,8 @@ snapshots: '@protobufjs/utf8@1.1.0': {} + '@protobufjs/utf8@1.1.2': {} + '@rolldown/binding-android-arm64@1.0.3': optional: true @@ -13249,6 +13448,20 @@ snapshots: '@types/node': 24.5.2 long: 5.3.2 + protobufjs@7.6.5: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 + '@protobufjs/float': 1.0.2 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.2 + '@types/node': 24.5.2 + long: 5.3.2 + pump@3.0.2: dependencies: end-of-stream: 1.4.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 498a741..2f40606 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -14,7 +14,7 @@ catalog: '@platforma-sdk/ui-vue': 1.80.4 '@platforma-sdk/tengo-builder': 4.0.18 '@platforma-sdk/package-builder': 3.14.1 - '@platforma-sdk/block-tools': 2.12.6 + '@platforma-sdk/block-tools': 2.14.3 '@platforma-sdk/test': 1.80.3 '@milaboratories/helpers': 1.13.0 '@milaboratories/graph-maker': 1.4.6 From 031a1768a30680909cb78d47c725750bdab91896 Mon Sep 17 00:00:00 2001 From: Elena Erokhina Date: Wed, 26 Aug 2026 17:25:58 +0200 Subject: [PATCH 3/3] MILAB-6847: run CI on node 22, fix copy-pasted block name Both workflows pinned node-version to '20.x'. Move them to '22.x', matching the 12 blocks already on it against the same shared workflows (node-simple-pnpm.yaml and block-mark-stable.yaml at @v4). Both also carried a copy-paste leftover naming this block "CDR3 SpectraType", with app-name-slug 'block-cdr3-spectratype' colliding with the real cdr3-spectratype block. Since the slug is part of the release file name and app-name is what CI reports in messages, this block's builds and releases were labelled as another one. Name it after itself instead. --- .github/workflows/build.yaml | 6 +++--- .github/workflows/mark-stable.yaml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8e33370..1a9b76a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -22,9 +22,9 @@ jobs: - init uses: milaboratory/github-ci/.github/workflows/node-simple-pnpm.yaml@v4 with: - app-name: 'Block: CDR3 SpectraType' - app-name-slug: 'block-cdr3-spectratype' - node-version: '20.x' + app-name: 'Block: V/J Gene Usage' + app-name-slug: 'block-vj-gene-usage' + node-version: '22.x' build-script-name: 'build' pnpm-recursive-build: false test: false diff --git a/.github/workflows/mark-stable.yaml b/.github/workflows/mark-stable.yaml index 792b164..12a809a 100644 --- a/.github/workflows/mark-stable.yaml +++ b/.github/workflows/mark-stable.yaml @@ -14,8 +14,8 @@ jobs: - init uses: milaboratory/github-ci/.github/workflows/block-mark-stable.yaml@v4 with: - app-name: 'Block: CDR3 SpectraType - Mark Stable' - node-version: '20.x' + app-name: 'Block: V/J Gene Usage - Mark Stable' + node-version: '22.x' npmrc-config: | { "registries": {