From viv
Use when the user asks about vivarium-suite CI — build status, Jenkins console logs, job structure, GitHub Actions runs, etc. Covers the GH Actions / Jenkins setup, the per-package Multibranch Pipeline layout, URL-to-jobFullName translation for the Jenkins MCP, and parallel matrix log interleaving.
How this skill is triggered — by the user, by Claude, or both
Slash command
/viv:continuous-integrationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Vivarium-suite runs two parallel CI systems for each `libs/<pkg>` change. This skill catalogues the layout of both, plus the operational details needed to navigate Jenkins via the Jenkins MCP server.
Vivarium-suite runs two parallel CI systems for each libs/<pkg> change. This skill catalogues the layout of both, plus the operational details needed to navigate Jenkins via the Jenkins MCP server.
.github/workflows/ci.yml) runs on push/PR for affected packages only. The detect-changes job diffs against the base ref and builds a {library, python-version} matrix from each changed lib's python_versions.json. Root-level changes (pyproject.toml, Makefile, workflows) trigger a full rebuild. GH runners install vivarium_build_utils from git, then run make install ENV_REQS=ci_github UV_FLAGS=--system IHME_PYPI=. IHME_PYPI= disables the artifactory extra-index because GH runners cannot reach IHME's firewalled artifactory; packages with artifactory-only dependencies are only fully exercised in Jenkins.jenkins.simsci.ihme.washington.edu) is provisioned by the top-level Jenkinsfile, which calls monorepo(...) from vivarium_build_utils to auto-create one Multibranch Pipeline per libs/*/Jenkinsfile. Adding a new package under libs/ is picked up on the next main build. Each lib's Jenkinsfile delegates to reusable_pipeline(...) from the same shared library.vivarium_build_utils is currently pinned to the epic/monorepo branch in both Jenkinsfiles and the GH workflow installs — search for FIXME: Update to main before touching anything that pulls in vbu.
The monorepo(...) call described above produces this folder/job hierarchy on Jenkins:
Public/vivarium-suite/libs/Public/vivarium-suite/libs/<pkg> (e.g. .../profiling, .../compat)Public/vivarium-suite/libs/<pkg>/<branch> — this is the jobFullName to pass to MCP tools (default branch is usually main)jobFullNameThe Jenkins MCP tools take a jobFullName parameter (with / separators between folder/job segments) plus a separate buildNumber. Translate from a console URL by stripping the leading /job/, replacing every /job/ with /, and dropping everything from the build number onward:
URL: .../job/Public/job/vivarium-suite/job/libs/job/profiling/job/main/3/console
jobFullName: Public/vivarium-suite/libs/profiling/main
buildNumber: 3
reusable_pipeline runs each python version as a parallel branch within a single build, so one console log carries output from all matrix axes intermixed. searchBuildLog hits are not partitioned by axis. Two reliable disambiguation signals:
[Pipeline] { (<Stage Name> - Python X.Y) — searching this pattern first gives a stage map that lines from later searches can be cross-referenced against by line number..../envs/.../<branch>-<build>-3.10 vs .../<branch>-<build>-3.11). Any log line containing one of these paths is unambiguous.npx claudepluginhub ihmeuw/vivarium-suite --plugin vivGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.