-
-
Notifications
You must be signed in to change notification settings - Fork 0
Maintainers Operator Track
Status: PARTIAL — single-user local operation is IN PLACE and supported; server/multiuser operation is explicitly NOT (yet). This page is for whoever keeps an instance healthy.
The present server is a local single-user application. It binds :8080
and serves the workbench to a browser on the same machine. Do not expose
it to a network as if it were multiuser-ready — no authn/authz layer exists,
and job execution is not isolated between users. A standing line in
docs/migration/STATUS.md says exactly this; repeat it to stakeholders.
What "local" still gives you in a lab: multiple analysts can use one machine (same OS account), and the service answer "the analysis station" is the supported shape.
COMING: authenticated remote/multiuser deployment (agreed requirement, not delivered), standalone archives (below), coordinated signed updater (below).
Source install is the supported lane (see Install and First Run). The operator's pieces:
| Artefact | You operate | Notes |
|---|---|---|
mise.toml |
exact toolchain pins | source of truth; .bun-version is generated from it (just sync-pins) |
guix.scm + channels.scm
|
the peer dev lane | time-machine-pinned; functional equivalents for tools, not binary identity |
renv.lock |
exact R package set | restore via renv::restore(); .Rprofile activates the project library |
config/defaults/tool_versions.yml |
sha256-pinned tool downloads |
install.sh fetches byte-exact; preflight asserts |
config/tools.yml |
resolved tool paths | including SSH-hosted binaries for vsearch etc. |
config/databases.yml is the one place to manage URIs, local overrides and
remote paths. Operator rules that matter in production:
-
Mirror the reference FASTAs locally (
local:override) before a busy period — first use downloads, and you do not want that at 09:00 on batch day. The Databases page can trigger downloads explicitly. - Pin the release you validated for the assay, for both formats (dada2 + vsearch) of a database. The consensus comparator is string equality across the two classifiers — mixed releases silently degrade agreement scores.
-
Renaming/removing a database or its
levelsreports blast radius — which studies it affects, resolved through the real cascade including inheritors. Act on the report. - For the SSH taxonomy offload:
remote_pathindatabases.ymlkeeps the database resident on the remote host (no per-run transfer). Authorisation to the remote host is solely yours to ensure — the disclaimer inconfig/defaults/pipeline.ymlis deliberate and non-negotiable.
- Memory pressure concentrates in
assignTaxonomy()(DADA2, large databases). Levers:dada2.taxonomy.multithread(higher = more memory), the SSH offload, or smaller/custom reference sets. - The OTU lane (swarm) is CPU-scalable (
swarm.threads); cd-hit-est likewise (cdhit.threads). - Benchmarks (
bench/) carry recorded baselines (table loading, duckdb aggregation, tree rendering, PERMANOVA/NMDS, epistemic parsing) — use them to detect that your host is the regression, not the code. - Storage: budget per run ≈ trimmed FASTQs + QC reports + tables;
projects/grows monotonically (checkpoints included). Back updata/+projects/;config/is small and precious (presets, primers, databases, composition library).
| Task | How |
|---|---|
| Update tools |
bash install.sh --update (re-resolves against the pinned records) |
| Update R packages |
don't, casually — renv.lock is the reproducibility contract; changes go through the steward track with a lockfile diff |
| Backup |
data/, projects/, config/ — everything else is reconstructable |
| Health |
GET /api/v1/capabilities (e.g. R availability); jobs panel + SSE stream during runs |
| Port/root changes |
JULIA_METAMANIFOLD_PORT, JULIA_METAMANIFOLD_ROOT, JULIA_THREADS
|
| Suspected stale outputs | trust the staleness flags (they name changed keys); run_config.yml is ground truth for what ran |
Refusals name themselves (unsuccessful states, "Not Implemented", "unknown" significance). Troubleshooting decodes them. The one operational trap: "Not Implemented" is not an outage — the method or package is genuinely absent from the locked environment and the software refuses rather than guesses. Escalating that means a feature request, not a restart.
-
COMING: standalone offline archives (Linux x86-64 + ARM64) — unprivileged
launcher, writable state outside the immutable release, no toolchain on the
host, lazy science downloads proven, then explicit WSL2 tests. Policy
exists (
packaging/,docs/migration/STATUS.mdworkstream B); the builder does not exist yet. - COMING: the coordinated updater — one tested pinned combination, signed metadata, transactional switch with rollback, offline startup.
- COMING: multiuser/authenticated serving — the precondition for network deployment.