The canonical antibody chemical-liability taxonomy, published as one Platforma software package. One definitional source for every block that scans, scores, or repairs liabilities. Definitions only — never a scan. SDK docs: docs.platforma.bio.
Published as @platforma-open/milaboratories.software-liability-definitions, entrypoint main.
defsSw := assets.importSoftware("@platforma-open/milaboratories.software-liability-definitions:main")
// ... exec.builder().software(defsSw) ... then read the JSON it writesRuns under @platforma-open/milaboratories.runenv-python-3:3.12.10, the base Python runenv. The
emitter is standard library only — src/requirements.txt lists nothing.
One extra exec per run buys one definitional source. That is the price of the python one-source-root
rule: a python artifact takes exactly one root, and each block is its own git repo, so no shared
source tree exists.
| Block | State |
|---|---|
antibody-variant-designer |
new — will read this package from the start; not wired yet |
antibody-sequence-liabilities |
to migrate — replace liabilities-calc-script/src/definitions.py |
3D-Structure-Based-Liabilities |
to migrate — replace the literal in software/liabilities-script/motifs.py |
No block imports the package yet. Migrating both shipped blocks is what discharges the parity check their copies currently owe each other.
pnpm install
pnpm run build # pl-pkg build
uv run --group dev pytest -q # pins the emitted shape and the transcribed valuesThe suite needs no backend.
pnpm run build writes descriptors that point at this working copy. From the consuming block root,
pnpm run build:dev then produces a .sw.json with local.path into this source — no docker build,
no upload. That works against a local backend only.
A K8s Platforma cannot read a developer's filesystem, so the software must arrive as a docker image. From the consuming block root:
pnpm run build:dev-remoteIt builds a linux/amd64 image per entrypoint, pushes it to the dev ECR
public.ecr.aws/u5p1x5q2/pl-containers, and rewrites the .sw.json docker.tag fields. K8s nodes
pull anonymously — nothing to configure cluster-side. On a 403 or an expired token:
aws sso login && aws ecr-public get-login-password --region us-east-1 \
| docker login --username AWS --password-stdin public.ecr.awspnpm changeset— every change to the taxonomy needs a version bump. CI does not re-upload an existing version, so without a bump the registry keeps serving the old artifact under the same version string.- Merge to
main; CI publishes.
Verify the upload:
curl -sI "https://bin.pl-open.science/software/platforma-open/milaboratories.software-liability-definitions/main/<version>.tgz" | head -2200 = published, 404 = not yet.
MIT — see LICENSE.