@platforma-open/milaboratories.sequence-properties.workflow 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +15 -0
- package/dist/tengo/tpl/main.plj.gz +0 -0
- package/dist/tengo/tpl/process.plj.gz +0 -0
- package/package.json +2 -2
- package/src/main.tpl.tengo +52 -6
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/work/sequence-properties/sequence-properties/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-open/milaboratories.sequence-properties.workflow@1.1.
|
|
3
|
+
> @platforma-open/milaboratories.sequence-properties.workflow@1.1.2 build /home/runner/work/sequence-properties/sequence-properties/workflow
|
|
4
4
|
> shx rm -rf dist && pl-tengo check && pl-tengo build
|
|
5
5
|
|
|
6
6
|
info: Skipping unknown file type: wf.test.ts
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @platforma-open/MiLaboratories.sequence-properties.workflow
|
|
2
2
|
|
|
3
|
+
## 1.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9d628d9: **Workflow (SD-008):** Derive receptor from `pl7.app/vdj/chain` when `pl7.app/vdj/receptor` is absent. Bulk MiXCR axes carry the chain key (`IGHeavy`, `IGLight`, `TCRAlpha`, `TCRBeta`, `TCRGamma`, `TCRDelta`) without the receptor key, which previously fired R13b's "Receptor type not detected" warning on every bulk run. Detection precedence now: axis receptor → axis chain → per-column receptor → per-column chain → IG default + warning. Inputs that carry receptor explicitly are unaffected.
|
|
8
|
+
|
|
9
|
+
**Model:** Default-visible single upstream amino-acid sequence column matching the analysed coverage tier — peptide (`pl7.app/sequence`, feature=peptide) for peptide mode; full-chain VDJRegion (`pl7.app/vdj/sequence`, feature=VDJRegion or VDJRegionInFrame, chain A) for `full_chain` tier; CDR3 (`pl7.app/vdj/sequence`, feature=CDR3, chain A) for `cdr3_only` and `partial` tiers. Chain B (light / beta / delta) and secondary alleles stay available via the column picker.
|
|
10
|
+
|
|
11
|
+
**UI:** Move the "Input dataset" picker into a Settings slide-out drawer (matches the convention used by clonotype-clustering and other sibling blocks). Drawer auto-opens on first load when no input is selected, auto-closes when the workflow starts running.
|
|
12
|
+
|
|
13
|
+
**Software:** Switch the Python runenv from `runenv-python-3:3.12.10` to `runenv-python-3:3.12.10-scientific-slim`. The scientific-slim image now ships biopython, so the per-block dependency install is faster and matches the convention used by sibling python blocks (e.g. `titeseq-analysis`).
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [9d628d9]
|
|
16
|
+
- @platforma-open/milaboratories.sequence-properties.software@1.1.1
|
|
17
|
+
|
|
3
18
|
## 1.1.1
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-open/milaboratories.sequence-properties.workflow",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Block Workflow",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@platforma-sdk/workflow-tengo": "5.16.0",
|
|
8
|
-
"@platforma-open/milaboratories.sequence-properties.software": "1.1.
|
|
8
|
+
"@platforma-open/milaboratories.sequence-properties.software": "1.1.1"
|
|
9
9
|
},
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"@platforma-sdk/tengo-builder": "2.5.17",
|
package/src/main.tpl.tengo
CHANGED
|
@@ -58,6 +58,44 @@ contains := func(arr, x) {
|
|
|
58
58
|
return false
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
// Spec deviation SD-008 — see docs/spec-deviations.md.
|
|
62
|
+
// Bulk MiXCR axes carry `pl7.app/vdj/chain` without the spec-required
|
|
63
|
+
// `pl7.app/vdj/receptor`. The chain enum maps unambiguously to a receptor —
|
|
64
|
+
// derive it when receptor is absent. Returns "" for unrecognised input;
|
|
65
|
+
// caller falls through to the IG default + R13b warning, which still fires
|
|
66
|
+
// for genuinely unknown datasets.
|
|
67
|
+
CHAIN_TO_RECEPTOR := {
|
|
68
|
+
IGHeavy: "IG",
|
|
69
|
+
IGLight: "IG",
|
|
70
|
+
IGKappa: "IG",
|
|
71
|
+
IGLambda: "IG",
|
|
72
|
+
TCRAlpha: "TCRAB",
|
|
73
|
+
TCRBeta: "TCRAB",
|
|
74
|
+
TCRGamma: "TCRGD",
|
|
75
|
+
TCRDelta: "TCRGD"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
chainToReceptor := func(chain) {
|
|
79
|
+
if chain == undefined { return "" }
|
|
80
|
+
r := CHAIN_TO_RECEPTOR[chain]
|
|
81
|
+
if r == undefined { return "" }
|
|
82
|
+
return r
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Resolve receptor from a (receptor, chain) domain pair. Explicit receptor
|
|
86
|
+
// wins; chain-derived receptor is the fallback. Returns { value, seen };
|
|
87
|
+
// `seen` false when neither key resolves.
|
|
88
|
+
resolveReceptor := func(receptorVal, chainVal) {
|
|
89
|
+
if receptorVal == "IG" || receptorVal == "TCRAB" || receptorVal == "TCRGD" {
|
|
90
|
+
return { value: receptorVal, seen: true }
|
|
91
|
+
}
|
|
92
|
+
derived := chainToReceptor(chainVal)
|
|
93
|
+
if derived != "" {
|
|
94
|
+
return { value: derived, seen: true }
|
|
95
|
+
}
|
|
96
|
+
return { value: "", seen: false }
|
|
97
|
+
}
|
|
98
|
+
|
|
61
99
|
wf.prepare(func(args) {
|
|
62
100
|
bb := wf.createPBundleBuilder()
|
|
63
101
|
bb.ignoreMissingDomains()
|
|
@@ -132,10 +170,17 @@ wf.body(func(args) {
|
|
|
132
170
|
// anchor's secondary axis), not on per-region sequence column domains. Read
|
|
133
171
|
// from the axis first; the per-column check inside the loop stays as a
|
|
134
172
|
// fallback for non-MiXCR producers.
|
|
173
|
+
//
|
|
174
|
+
// Spec deviation SD-008 — bulk MiXCR axes lack `pl7.app/vdj/receptor` but
|
|
175
|
+
// carry `pl7.app/vdj/chain`; derive receptor from chain when receptor is
|
|
176
|
+
// absent. See docs/spec-deviations.md.
|
|
135
177
|
if keyAxisSpec.domain != undefined {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
178
|
+
r := resolveReceptor(
|
|
179
|
+
keyAxisSpec.domain["pl7.app/vdj/receptor"],
|
|
180
|
+
keyAxisSpec.domain["pl7.app/vdj/chain"]
|
|
181
|
+
)
|
|
182
|
+
if r.seen {
|
|
183
|
+
receptor = r.value
|
|
139
184
|
receptorSeen = true
|
|
140
185
|
}
|
|
141
186
|
}
|
|
@@ -192,9 +237,10 @@ wf.body(func(args) {
|
|
|
192
237
|
}
|
|
193
238
|
|
|
194
239
|
// Same receptor value is expected on every input column; last seen wins.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
240
|
+
// SD-008: derive from chain when explicit receptor key is absent.
|
|
241
|
+
rec := resolveReceptor(d["pl7.app/vdj/receptor"], d["pl7.app/vdj/chain"])
|
|
242
|
+
if rec.seen {
|
|
243
|
+
receptor = rec.value
|
|
198
244
|
receptorSeen = true
|
|
199
245
|
}
|
|
200
246
|
|