Dependency sources and decisions
Geometry preparation has a separate candidate and qualification record.
Its lock is resolved through make packages/preparation/lock/stage; it does not
change the qualified inference closure described below.
Dependency references checked on 2026-10-13; bounded inference qualified on 2026-10-14. The environment is Python 3.12.12, Linux x86-64 and CPU float32. The real image builds, passes dependency/import checks, and loads both selected fold-0 models for independently verified repeated H/C inference. Its identity, scope and limitations are recorded in note 001.
NMRNet++ requirements at the pinned source revision provide the starting dependency declarations. inference.in selects the dependencies used by the inference path and gives them local exact pins. These are environment choices, not a claim to reproduce the upstream CUDA environment. Plotting and RDKit preprocessing are outside this prepared-data baseline. The upstream entrypoint and task imports are in uninmr/infer.py and uninmr/tasks/uninmr.py.
Uni-Core setup.py at ace6fae1c8479a9751f2bb1e1d6e4047427bc134
owns its install_requires declarations and imports Torch during setup.
unicore-source.json identifies the exact source archive,
commit, size and SHA-256. build.in supplies locally pinned build
tools; the offline build installs Torch before building Uni-Core with CUDA
extensions disabled. Uni-Core is built from this declared source, rather than
resolved by its package name.
Torch 2.13.0+cpu was selected after advisory review. The
GitHub-reviewed CVE-2025-3000 advisory,
updated 2026-07-17 and checked 2026-10-13, lists Torch versions through 2.12.1 as
affected and 2.13.0 as patched. It links
upstream issue 149623 and
fix b90c94991cdf8b87c8f7439f79518e0ef2c4ca4f,
which rejects bare list/tuple value annotations in JIT. The advisory supplies
the patched-release claim; the commit supplies the code change. The exact CPU
wheel URL and hash are recorded beside the Torch requirement in inference.in.
inference.lock records the resolved versions and permitted distribution hashes. advisories.json retains the check time, exact-version PyPI URLs and returned advisory entries, plus input and lock digests. Its check at 2026-10-13T17:54:07.461093+00:00 returned no advisory entries for the 59 locked packages. Torch's PyPI query uses the public version 2.13.0; the CPU wheel remains identified separately by URL and hash. This receipt is an advisory check, not a complete security audit or proof that no vulnerabilities exist. Intentional dependency updates must stage and review a new lock and receipt through the maintained commands in the reproduction reference.
Editing inference.in, build.in and unicore-source.json before staging an
intentional update is supported. The resolver recipe and execution tools must
match committed HEAD. Apply admits fresh copies of current intent and the
committed tools, then checks the intent hashes against the reviewed stage;
it does not reuse the stage's old input copies.
The selected release scalers were serialized with sklearn 1.5.2 and load under
1.8.0 with InconsistentVersionWarning. A contained probe checked both actual
one-feature StandardScaler instances against independent affine arithmetic:
selected-label standardization and the Torch-input inverse followed by the
upstream float32 output cast agree exactly. The warning remains in retained
logs; this is a qualification of these dense operations, not general estimator
compatibility across versions. Fitted parameters, probe identities and evidence
are recorded in note 001.
The source of the paired scaler load and transform is
upstream data_scaler.py;
atom_regloss.py
performs the final inverse transformation and cast.
A separate metadata refresh on 2026-10-15 (14:56:51–15:00:41 UTC) again returned no PyPI advisory entries for the 59 applied lock versions. It also inventoried the pinned base image: inherited pip 25.0.1 has 12 advisory records representing six CVEs in its exact-version PyPI metadata. The fixed versions reported there are:
| Advisory | Reported fixed version |
|---|---|
| CVE-2025-8869 | 25.3 |
| CVE-2026-1703 | 26.0 |
| CVE-2026-3219 | 26.1 |
| CVE-2026-6357 | 26.1 |
| CVE-2026-8643 | 26.1.2 |
| CVE-2026-13346 | 26.2 / 26.2.0 |
The build uses --no-index, --disable-pip-version-check and verified offline
inputs. These controls do not repair pip's archive or entry-point handling.
Pip installs as root inside the build image; the final runtime uses UID 65532.
The base image also has unresolved Debian advisory coverage, including vulnerable
bookworm rows in the official glibc
and OpenSSL
source pages. Empty public advisory lists for CPython and custom Uni-Core do not
establish complete coverage. This refresh preserves the historical applied
advisories.json; exact receipt identities, scope and remaining qualification
work are recorded in note 011.