Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 23:09 UTC

ihmeuw / vivarium-suite

Vivarium simulation framework and tools monorepo

PythonBSD-3-Clause★ 2 Sterne⑂ 0 Forksseit Apr. 2026Auf GitHub ansehen ↗

ihmeuw/vivarium-suite erreicht einen Gesundheitsindex von 67 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (94/100) ab, am schwächsten bei Community & Adoption (36/100). Zuletzt heute aktualisiert. 3 Mitwirkende tragen den Großteil der jüngsten Arbeit.

67
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

67
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

170 Follower203 öffentliche Reposseit Juni 2013

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
PyPIvivarium-engine5.5.3-25vor 0 Tagen
PyPIvivarium-artifact1.0.8-9vor 0 Tagen
PyPIvivarium-profiling0.5.3-22vor 7 Tagen
PyPIvivarium-validation0.1.2-3vor 0 Tagen
PyPIvivarium-build-utils4.4.2-65vor 0 Tagen
PyPIvivarium-config-tree5.0.12-13vor 0 Tagen
PyPIvivarium-gbd-mapping6.0.7-8vor 0 Tagen
PyPIvivarium-dependencies1.2.4-17vor 8 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

94Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
36/36Commit-Rhythmus — 52/52 Wochen mit Commits
18/18Commit-Volumen — 915 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year915
human_commit_share1
days_since_last_push0
active_weeks_last_year52

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 0 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count100
latest_release_tagvivarium-fuzzy-checker-v0.2.1
releases_from_tagsnein
days_since_latest_release0
mean_days_between_releases0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

36Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 2 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars2
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (BSD-3-Clause)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templateja

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

82Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
36/54Bus-Faktor — 3 Beitragende decken die Hälfte aller Commits ab
17.7/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 22 % der Commits
13.5/13.5Breite der Beitragenden — 21 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 6 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor3
contributors_sampled21
top_contributor_share0,215
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
33.7/38.3PR-Annahme — 194/220 entschiedene PRs gemergt
10.5/15OpenSSF Scorecard: Code-Review — Found 8/11 approved changesets -- score normalized to 7
Verwendete Eingangsdaten
merged_prs194
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs26
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
16.1/25Reichweite des Inhabers — 170 Follower von ihmeuw
25/25Kontohistorie — 203 öffentliche Repos, Kontoalter ca. 13 Jahre
Verwendete Eingangsdaten
followers170
owner_typeOrganization
is_verified
owner_loginihmeuw
public_repos203
account_age_days4.789

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 8 Paket(e) auf pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
20/20Versionshistorie — 65 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesvivarium-engine, vivarium-artifact, vivarium-profiling, vivarium-validation, vivarium-build-utils, vivarium-config-tree, vivarium-gbd-mapping, vivarium-dependencies
ecosystemspypi
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

61Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 5 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 11 out of 11 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

48Gefährdet · 16 % des Gesamtindex

Sicherheitslage

48Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 11 out of 11 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
5.2/7.5Code-Review — Found 8/11 approved changesets -- score normalized to 7
2.5/2.5Contributors — project has 6 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

68Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 82 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,82
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes6.633
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — libs/artifact/Makefile, libs/artifact/docs/Makefile, libs/build-utils/Makefile, libs/cluster-tools/Makefile, libs/cluster-tools/docs/Makefile, libs/config-tree/Makefile, libs/config-tree/docs/Makefile, libs/dependencies/Makefile, libs/engine/Makefile, libs/engine/docs/Makefile, libs/fuzzy-checker/Makefile, libs/fuzzy-checker/docs/Makefile, libs/gbd-mapping/Makefile, libs/gbd-mapping/docs/Makefile, libs/profiling/Makefile, libs/public-health/Makefile, libs/public-health/docs/Makefile, libs/pytest-vivarium/Makefile, libs/pytest-vivarium/docs/Makefile, libs/risk-distributions/Makefile, libs/risk-distributions/docs/Makefile, libs/validation/Makefile, libs/validation/docs/Makefile
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — libs/artifact/src/vivarium/artifact/py.typed, libs/cluster-tools/src/vivarium/cluster_tools/py.typed, libs/config-tree/src/vivarium/config_tree/py.typed, libs/engine/src/vivarium/engine/py.typed, libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed, libs/pytest-vivarium/src/pytest_vivarium/py.typed, libs/risk-distributions/src/vivarium/risk_distributions/py.typed, libs/validation/src/vivarium/validation/py.typed
0/10Reproduzierbare Umgebung
10/10Belegte Agentenpraxis — 33 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languagenein
bootstrap_fileslibs/artifact/Makefile, libs/artifact/docs/Makefile, libs/build-utils/Makefile, libs/cluster-tools/Makefile, libs/cluster-tools/docs/Makefile, libs/config-tree/Makefile, libs/config-tree/docs/Makefile, libs/dependencies/Makefile, libs/engine/Makefile, libs/engine/docs/Makefile, libs/fuzzy-checker/Makefile, libs/fuzzy-checker/docs/Makefile, libs/gbd-mapping/Makefile, libs/gbd-mapping/docs/Makefile, libs/profiling/Makefile, libs/public-health/Makefile, libs/public-health/docs/Makefile, libs/pytest-vivarium/Makefile, libs/pytest-vivarium/docs/Makefile, libs/risk-distributions/Makefile, libs/risk-distributions/docs/Makefile, libs/validation/Makefile, libs/validation/docs/Makefile
has_devcontainernein
has_linter_confignein
typecheck_configslibs/artifact/src/vivarium/artifact/py.typed, libs/cluster-tools/src/vivarium/cluster_tools/py.typed, libs/config-tree/src/vivarium/config_tree/py.typed, libs/engine/src/vivarium/engine/py.typed, libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed, libs/pytest-vivarium/src/pytest_vivarium/py.typed, libs/risk-distributions/src/vivarium/risk_distributions/py.typed, libs/validation/src/vivarium/validation/py.typed
agent_commit_share0,33
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — Python mit Typprüfungs-Konfiguration (libs/artifact/src/vivarium/artifact/py.typed, libs/cluster-tools/src/vivarium/cluster_tools/py.typed, libs/config-tree/src/vivarium/config_tree/py.typed, libs/engine/src/vivarium/engine/py.typed, libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed, libs/pytest-vivarium/src/pytest_vivarium/py.typed, libs/risk-distributions/src/vivarium/risk_distributions/py.typed, libs/validation/src/vivarium/validation/py.typed)
54.2/55Handhabbare Dateigrößen — 7/485 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePython
largest_source_bytes903.070
source_files_sampled485
oversized_source_files7
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples, notebooks
Verwendete Eingangsdaten
example_dirsexamples, notebooks
has_mcp_signalnein
api_schema_files

Eckdaten

2GitHub-Sterne
21Mitwirkende
915Commits, letzte 12 Monate
0Tage seit letztem Push
100Releases
3Bus-Faktor
0offene Issues
PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index pypi:vivarium-engine@5.5.3; advisories assessed against the repository dependency graph instead

Weitere Details

OpenSSF Scorecard 4.8 / 10
4.8Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-23 23:08 UTC

10Binary-Artifactsno binaries found in the repo
5Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests11 out of 11 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
7Code-ReviewFound 8/11 approved changesets -- score normalized to 7
10Contributorsproject has 6 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 49
RegistryPaketVersionsvorgabeManifest
PyPIvivarium-dependencieslibs/artifact/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/artifact/pyproject.toml
PyPIpackaginglibs/build-utils/pyproject.toml
PyPItomlilibs/build-utils/pyproject.toml
PyPIvivarium-dependencieslibs/cluster-tools/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/cluster-tools/pyproject.toml
PyPIvivarium-engine>=5.1.0libs/cluster-tools/pyproject.toml
PyPIvivarium-config-tree>=5.0.0libs/cluster-tools/pyproject.toml
PyPIdilllibs/cluster-tools/pyproject.toml
PyPIpsutillibs/cluster-tools/pyproject.toml
PyPIvivarium-dependencieslibs/config-tree/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/config-tree/pyproject.toml
PyPIvivarium-artifact>=1.0.2libs/engine/pyproject.toml
PyPIvivarium-config-treelibs/engine/pyproject.toml
PyPIvivarium-dependencieslibs/engine/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/engine/pyproject.toml
PyPIdilllibs/engine/pyproject.toml
PyPIvivarium-dependencieslibs/fuzzy-checker/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/fuzzy-checker/pyproject.toml
PyPIvivarium-dependencieslibs/gbd-mapping/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/gbd-mapping/pyproject.toml
PyPIpyyamllibs/gbd-mapping/pyproject.toml
PyPIvivarium-dependencieslibs/profiling/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/profiling/pyproject.toml
PyPIvivarium-gbd-mapping>=6.0.0libs/profiling/pyproject.toml
PyPIvivarium-engine>=5.1.0libs/profiling/pyproject.toml
PyPIvivarium-public-health>=6.0.0libs/profiling/pyproject.toml
PyPIvivarium-config-tree>=5.0.1libs/profiling/pyproject.toml
PyPIjinja2libs/profiling/pyproject.toml
PyPIpyyamllibs/profiling/pyproject.toml
PyPImemory-profilerlibs/profiling/pyproject.toml
PyPImatplotliblibs/profiling/pyproject.toml
PyPIseabornlibs/profiling/pyproject.toml
PyPIscalenelibs/profiling/pyproject.toml
PyPInbformat>=5.0libs/profiling/pyproject.toml
PyPIvivarium-dependencieslibs/public-health/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/public-health/pyproject.toml
PyPIvivarium-engine>=5.2.0libs/public-health/pyproject.toml
PyPIvivarium-config-tree>=5.0.0libs/public-health/pyproject.toml
PyPIvivarium-risk-distributions>=3.0.0,<4.0.0libs/public-health/pyproject.toml
PyPIvivarium-dependencieslibs/pytest-vivarium/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/pytest-vivarium/pyproject.toml
PyPIvivarium-config-treelibs/pytest-vivarium/pyproject.toml
PyPIvivarium-dependencieslibs/risk-distributions/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/risk-distributions/pyproject.toml
PyPIvivarium-dependencieslibs/validation/pyproject.toml
PyPIvivarium-build-utils>=4.0.0,<5.0.0libs/validation/pyproject.toml
PyPIvivarium-config-treelibs/validation/pyproject.toml
PyPIvivarium-fuzzy-checkerlibs/validation/pyproject.toml
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 20183,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "CSS": 378,
        "HTML": 44896,
        "Shell": 23264,
        "Groovy": 52412,
        "Python": 6168972,
        "Makefile": 78096,
        "JavaScript": 14021,
        "Jupyter Notebook": 5459
      },
      "pushed_at": "2026-07-23T23:05:40Z",
      "created_at": "2026-04-27T20:01:48Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T23:05:02Z",
      "description": "Vivarium simulation framework and tools monorepo",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "BSD-3-Clause",
      "default_branch": "main",
      "license_spdx_raw": "BSD-3-Clause",
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "http://www.healthdata.org/",
      "name": "Institute for Health Metrics and Evaluation",
      "type": "Organization",
      "login": "ihmeuw",
      "company": null,
      "location": "Seattle, WA",
      "followers": 170,
      "avatar_url": "https://avatars.githubusercontent.com/u/4683173?v=4",
      "created_at": "2013-06-12T21:27:03Z",
      "is_verified": null,
      "public_repos": 203,
      "account_age_days": 4789
    },
    "license": {
      "state": "standard",
      "spdx_id": "BSD-3-Clause",
      "raw_spdx": "BSD-3-Clause",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "vivarium-fuzzy-checker-v0.2.1",
          "kind": "other",
          "published_at": "2026-07-23T23:07:18Z"
        },
        {
          "tag": "vivarium-validation-v0.1.2",
          "kind": "other",
          "published_at": "2026-07-23T23:08:06Z"
        },
        {
          "tag": "pytest-vivarium-v0.1.1",
          "kind": "other",
          "published_at": "2026-07-23T23:07:34Z"
        },
        {
          "tag": "vivarium-risk-distributions-v3.1.8",
          "kind": "other",
          "published_at": "2026-07-23T23:07:18Z"
        },
        {
          "tag": "vivarium-artifact-v1.0.8",
          "kind": "other",
          "published_at": "2026-07-23T23:07:05Z"
        },
        {
          "tag": "vivarium-build-utils-v4.4.2",
          "kind": "other",
          "published_at": "2026-07-23T23:06:11Z"
        },
        {
          "tag": "vivarium-engine-v5.5.3",
          "kind": "other",
          "published_at": "2026-07-23T23:08:13Z"
        },
        {
          "tag": "vivarium-gbd-mapping-v6.0.7",
          "kind": "other",
          "published_at": "2026-07-23T23:07:03Z"
        },
        {
          "tag": "vivarium-config-tree-v5.0.12",
          "kind": "other",
          "published_at": "2026-07-23T23:06:52Z"
        },
        {
          "tag": "pytest-vivarium-v0.1.0",
          "kind": "other",
          "published_at": "2026-07-23T22:25:48Z"
        },
        {
          "tag": "vivarium-ai-tools-v0.23.1",
          "kind": "other",
          "published_at": "2026-07-23T22:21:50Z"
        },
        {
          "tag": "vivarium-validation-v0.1.1",
          "kind": "other",
          "published_at": "2026-07-22T18:03:13Z"
        },
        {
          "tag": "vivarium-cluster-tools-v4.2.13",
          "kind": "other",
          "published_at": "2026-07-22T17:59:40Z"
        },
        {
          "tag": "vivarium-validation-v0.1.0",
          "kind": "other",
          "published_at": "2026-07-21T20:07:40Z"
        },
        {
          "tag": "vivarium-build-utils-v4.4.1",
          "kind": "other",
          "published_at": "2026-07-21T19:00:55Z"
        },
        {
          "tag": "vivarium-public-health-v6.4.4",
          "kind": "other",
          "published_at": "2026-07-21T18:30:13Z"
        },
        {
          "tag": "vivarium-engine-v5.5.2",
          "kind": "other",
          "published_at": "2026-07-21T18:27:54Z"
        },
        {
          "tag": "vivarium-fuzzy-checker-v0.2.0",
          "kind": "other",
          "published_at": "2026-07-21T18:20:01Z"
        },
        {
          "tag": "vivarium-public-health-v6.4.3",
          "kind": "other",
          "published_at": "2026-07-20T17:47:55Z"
        },
        {
          "tag": "vivarium-engine-v5.5.1",
          "kind": "other",
          "published_at": "2026-07-20T17:45:00Z"
        },
        {
          "tag": "vivarium-fuzzy-checker-v0.1.0",
          "kind": "other",
          "published_at": "2026-07-20T17:40:53Z"
        },
        {
          "tag": "vivarium-engine-v5.5.0",
          "kind": "other",
          "published_at": "2026-07-17T16:43:39Z"
        },
        {
          "tag": "vivarium-public-health-v6.4.2",
          "kind": "other",
          "published_at": "2026-07-16T23:59:17Z"
        },
        {
          "tag": "vivarium-testing-utils-v0.7.6",
          "kind": "other",
          "published_at": "2026-07-16T18:15:01Z"
        },
        {
          "tag": "vivarium-profiling-v0.5.3",
          "kind": "other",
          "published_at": "2026-07-16T17:34:30Z"
        },
        {
          "tag": "vivarium-public-health-v6.4.1",
          "kind": "other",
          "published_at": "2026-07-16T17:33:40Z"
        },
        {
          "tag": "vivarium-public-health-v6.4.0",
          "kind": "other",
          "published_at": "2026-07-15T17:09:43Z"
        },
        {
          "tag": "vivarium-engine-v5.4.0",
          "kind": "other",
          "published_at": "2026-07-15T16:49:32Z"
        },
        {
          "tag": "vivarium-testing-utils-v0.7.5",
          "kind": "other",
          "published_at": "2026-07-14T23:51:44Z"
        },
        {
          "tag": "vivarium-profiling-v0.5.2",
          "kind": "other",
          "published_at": "2026-07-14T23:55:03Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.9",
          "kind": "other",
          "published_at": "2026-07-14T23:54:03Z"
        },
        {
          "tag": "vivarium-engine-v5.3.5",
          "kind": "other",
          "published_at": "2026-07-14T23:51:56Z"
        },
        {
          "tag": "vivarium-cluster-tools-v4.2.12",
          "kind": "other",
          "published_at": "2026-07-14T23:52:47Z"
        },
        {
          "tag": "vivarium-gbd-mapping-v6.0.6",
          "kind": "other",
          "published_at": "2026-07-14T23:50:40Z"
        },
        {
          "tag": "vivarium-risk-distributions-v3.1.7",
          "kind": "other",
          "published_at": "2026-07-14T23:50:52Z"
        },
        {
          "tag": "vivarium-config-tree-v5.0.11",
          "kind": "other",
          "published_at": "2026-07-14T23:50:35Z"
        },
        {
          "tag": "vivarium-dependencies-v1.2.4",
          "kind": "other",
          "published_at": "2026-07-14T23:49:53Z"
        },
        {
          "tag": "vivarium-artifact-v1.0.7",
          "kind": "other",
          "published_at": "2026-07-14T23:50:36Z"
        },
        {
          "tag": "vivarium-config-tree-v5.0.10",
          "kind": "other",
          "published_at": "2026-07-14T22:59:03Z"
        },
        {
          "tag": "vivarium-engine-v5.3.4",
          "kind": "other",
          "published_at": "2026-07-14T22:59:56Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.8",
          "kind": "other",
          "published_at": "2026-07-13T22:13:09Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.7",
          "kind": "other",
          "published_at": "2026-07-13T22:10:07Z"
        },
        {
          "tag": "vivarium-build-utils-v4.4.0",
          "kind": "other",
          "published_at": "2026-07-13T21:50:40Z"
        },
        {
          "tag": "vivarium-cluster-tools-v4.2.11",
          "kind": "other",
          "published_at": "2026-07-13T20:55:09Z"
        },
        {
          "tag": "vivarium-engine-v5.3.3",
          "kind": "other",
          "published_at": "2026-07-13T17:20:02Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.6",
          "kind": "other",
          "published_at": "2026-07-09T00:30:48Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.5",
          "kind": "other",
          "published_at": "2026-07-09T00:01:25Z"
        },
        {
          "tag": "vivarium-build-utils-v4.3.0",
          "kind": "other",
          "published_at": "2026-07-08T23:06:13Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.4",
          "kind": "other",
          "published_at": "2026-07-08T18:57:33Z"
        },
        {
          "tag": "vivarium-risk-distributions-v3.1.6",
          "kind": "other",
          "published_at": "2026-07-08T18:36:37Z"
        },
        {
          "tag": "vivarium-cluster-tools-v4.2.10",
          "kind": "other",
          "published_at": "2026-07-07T16:45:44Z"
        },
        {
          "tag": "vivarium-ai-tools-v0.23.0",
          "kind": "other",
          "published_at": "2026-07-06T19:43:31Z"
        },
        {
          "tag": "vivarium-testing-utils-v0.7.4",
          "kind": "other",
          "published_at": "2026-07-06T19:40:18Z"
        },
        {
          "tag": "vivarium-artifact-v1.0.6",
          "kind": "other",
          "published_at": "2026-07-06T19:11:34Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.3",
          "kind": "other",
          "published_at": "2026-07-06T19:13:02Z"
        },
        {
          "tag": "vivarium-build-utils-v4.2.5",
          "kind": "other",
          "published_at": "2026-07-06T19:11:18Z"
        },
        {
          "tag": "vivarium-gbd-mapping-v6.0.5",
          "kind": "other",
          "published_at": "2026-07-06T19:11:28Z"
        },
        {
          "tag": "vivarium-config-tree-v5.0.9",
          "kind": "other",
          "published_at": "2026-07-06T19:11:27Z"
        },
        {
          "tag": "vivarium-cluster-tools-v4.2.9",
          "kind": "other",
          "published_at": "2026-07-06T19:11:41Z"
        },
        {
          "tag": "vivarium-testing-utils-v0.7.3",
          "kind": "other",
          "published_at": "2026-07-06T19:11:35Z"
        },
        {
          "tag": "vivarium-profiling-v0.5.1",
          "kind": "other",
          "published_at": "2026-07-06T19:11:28Z"
        },
        {
          "tag": "vivarium-risk-distributions-v3.1.5",
          "kind": "other",
          "published_at": "2026-07-06T19:11:24Z"
        },
        {
          "tag": "vivarium-testing-utils-v0.7.2",
          "kind": "other",
          "published_at": "2026-07-02T22:39:53Z"
        },
        {
          "tag": "vivarium-profiling-v0.5.0",
          "kind": "other",
          "published_at": "2026-07-02T22:18:26Z"
        },
        {
          "tag": "vivarium-compat-v0.7.0",
          "kind": "other",
          "published_at": "2026-07-02T22:10:10Z"
        },
        {
          "tag": "vivarium-engine-v5.3.2",
          "kind": "other",
          "published_at": "2026-07-02T20:07:53Z"
        },
        {
          "tag": "vivarium-build-utils-v4.2.4",
          "kind": "other",
          "published_at": "2026-07-01T21:52:19Z"
        },
        {
          "tag": "vivarium-build-utils-v4.2.3",
          "kind": "other",
          "published_at": "2026-07-01T20:23:34Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.2",
          "kind": "other",
          "published_at": "2026-07-01T17:13:50Z"
        },
        {
          "tag": "vivarium-engine-v5.3.1",
          "kind": "other",
          "published_at": "2026-06-30T23:00:12Z"
        },
        {
          "tag": "vivarium-cluster-tools-v4.2.8",
          "kind": "other",
          "published_at": "2026-06-30T22:20:44Z"
        },
        {
          "tag": "vivarium-engine-v5.3.0",
          "kind": "other",
          "published_at": "2026-06-30T21:35:18Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.1",
          "kind": "other",
          "published_at": "2026-06-30T19:40:50Z"
        },
        {
          "tag": "vivarium-cluster-tools-v4.2.7",
          "kind": "other",
          "published_at": "2026-06-30T19:38:49Z"
        },
        {
          "tag": "vivarium-testing-utils-v0.7.1",
          "kind": "other",
          "published_at": "2026-06-30T19:38:48Z"
        },
        {
          "tag": "vivarium-engine-v5.2.1",
          "kind": "other",
          "published_at": "2026-06-30T19:38:47Z"
        },
        {
          "tag": "vivarium-compat-v0.6.4",
          "kind": "other",
          "published_at": "2026-06-30T19:38:46Z"
        },
        {
          "tag": "vivarium-config-tree-v5.0.8",
          "kind": "other",
          "published_at": "2026-06-30T19:38:44Z"
        },
        {
          "tag": "vivarium-profiling-v0.4.17",
          "kind": "other",
          "published_at": "2026-06-30T19:38:43Z"
        },
        {
          "tag": "vivarium-artifact-v1.0.5",
          "kind": "other",
          "published_at": "2026-06-30T19:38:38Z"
        },
        {
          "tag": "vivarium-risk-distributions-v3.1.4",
          "kind": "other",
          "published_at": "2026-06-30T19:38:37Z"
        },
        {
          "tag": "vivarium-gbd-mapping-v6.0.4",
          "kind": "other",
          "published_at": "2026-06-30T19:38:33Z"
        },
        {
          "tag": "vivarium-build-utils-v4.2.2",
          "kind": "other",
          "published_at": "2026-06-30T19:38:32Z"
        },
        {
          "tag": "vivarium-dependencies-v1.2.3",
          "kind": "other",
          "published_at": "2026-06-30T19:38:27Z"
        },
        {
          "tag": "vivarium-build-utils-v4.2.1",
          "kind": "other",
          "published_at": "2026-06-30T19:15:27Z"
        },
        {
          "tag": "vivarium-dependencies-v1.2.2",
          "kind": "other",
          "published_at": "2026-06-30T19:09:26Z"
        },
        {
          "tag": "vivarium-ai-tools-v0.22.2",
          "kind": "other",
          "published_at": "2026-06-30T18:15:04Z"
        },
        {
          "tag": "vivarium-ai-tools-v0.22.1",
          "kind": "other",
          "published_at": "2026-06-30T17:05:55Z"
        },
        {
          "tag": "vivarium-build-utils-v4.2.0",
          "kind": "other",
          "published_at": "2026-06-29T23:26:07Z"
        },
        {
          "tag": "vivarium-testing-utils-v0.7.0",
          "kind": "other",
          "published_at": "2026-06-29T23:15:57Z"
        },
        {
          "tag": "vivarium-public-health-v6.3.0",
          "kind": "other",
          "published_at": "2026-06-29T22:52:39Z"
        },
        {
          "tag": "vivarium-engine-v5.2.0",
          "kind": "other",
          "published_at": "2026-06-29T20:02:26Z"
        },
        {
          "tag": "vivarium-public-health-v6.2.0",
          "kind": "other",
          "published_at": "2026-06-29T19:37:44Z"
        },
        {
          "tag": "vivarium-build-utils-v4.1.0",
          "kind": "other",
          "published_at": "2026-06-29T17:36:51Z"
        },
        {
          "tag": "vivarium-public-health-v6.1.2",
          "kind": "other",
          "published_at": "2026-06-29T15:50:39Z"
        },
        {
          "tag": "vivarium-ai-tools-v0.22.0",
          "kind": "other",
          "published_at": "2026-06-25T21:36:14Z"
        },
        {
          "tag": "vivarium-ai-tools-v0.21.0",
          "kind": "other",
          "published_at": "2026-06-25T16:50:17Z"
        },
        {
          "tag": "vivarium-build-utils-v4.0.2",
          "kind": "other",
          "published_at": "2026-06-24T16:33:13Z"
        },
        {
          "tag": "vivarium-build-utils-v4.0.1",
          "kind": "other",
          "published_at": "2026-06-23T22:37:11Z"
        },
        {
          "tag": "vivarium-cluster-tools-v4.2.6",
          "kind": "other",
          "published_at": "2026-06-23T21:05:14Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "cb6bec6a3edb20fa76fadbcc280cb4ad346e46de",
          "body": null,
          "is_bot": false,
          "headline": "Standardize package __init__ docstrings and add project URLs (#224)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T23:04:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1bf76e47130471797f3b8730370d0623fd96ae7",
          "body": null,
          "is_bot": false,
          "headline": "update changelog dates",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "721e8200e4d63e3bc8077b7b51f2f2b2f5007ca7",
          "body": null,
          "is_bot": false,
          "headline": "update outer-level README to include latest batch of libs",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fc0eb062e3df22ad2efba6bee54236d771244e5",
          "body": null,
          "is_bot": false,
          "headline": "minor cleanups",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2697ac97c630fd58f34355ad872c6b82d3cdb4ec",
          "body": "Ships the pytest-vivarium / vivarium.fuzzy_checker pointer updates as an\nai-tools patch release (its release workflow fires on a CHANGELOG.rst touch).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Bump ai-tools to 0.23.1 for the split-package reference fixes",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5298d4bd1a85f9343cf6114419a03ea8b31475d4",
          "body": "Release workflow (highest-impact): parse the dist-name tag prefix with tomllib\ninstead of a fragile unanchored regex - [project]-scoped, and raises loudly on a\nmissing/malformed pyproject instead of silently yielding a malformed tag under\nset -e. Move \"Set up Python\" ahead of the collect step so tom\n[…]\nthe git tag prefix is now the dist name (`<dist>-v<X.Y.Z>`), not\nuniversally `vivarium-<pkg>-` (pytest-vivarium is the exception).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Address PR3 review findings",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0378bd4b22f1d60c851681f00a9ffbe8d7f1235b",
          "body": "Point the ai-tools pytest/model-development references at their post-split homes\n(the markers at pytest-vivarium; FuzzyChecker at vivarium.fuzzy_checker) and fix\nthe skills/pytest path to libs/pytest-vivarium. Rename the synthetic\nvivarium-testing-utils fixture in the dependency-graph tests to an obviously-fake\nvivarium-fake-plugin so it is not mistaken for the real, now-removed package.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Refresh ai-tools plugin pointers and de-real the synthetic test names",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b7417f1267e97a90194fe4ebf3c25945fdd19978",
          "body": "Point the labeler glob/label and the root README package table at the new\npackage, and refresh the build-utils comments that cited config-tree's now-gone\ntesting-utils test cycle (still accurate with pytest-vivarium, which likewise\ndepends on build-utils and so cannot be a dependency of it).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update references from testing-utils to pytest-vivarium",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a85ab26906a5e5529033a63914b5dc973b8414b5",
          "body": "release.yml hardcoded the tag as vivarium-<dir>, which cannot express a\nnon-vivarium- distribution like pytest-vivarium. Derive the tag prefix from each\npackage's pyproject [project].name instead: for the push and workflow_dispatch\npaths via a get_dist pyproject reader, for the release-published pat\n[…]\nld emitted by build-release-matrix. Backward-compatible:\nevery existing lib's dist IS vivarium-<dir>, so their tags are unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Derive the release git tag from the dist name, not vivarium-<dir>",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0831cb8fc098ce601544acb989c206e2905b67b9",
          "body": "Every remaining consumer depended on vivarium-testing-utils only for the\nauto-loaded pytest plugin, so swap that test dependency for pytest-vivarium\nacross artifact, cluster-tools, config-tree, engine, fuzzy-checker, gbd-mapping,\nprofiling, public-health, risk-distributions, and validation. Stale version\npins (>=0.3.4, >=0.6.0) are dropped since pytest-vivarium starts at 0.1.0.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Repoint vivarium-testing-utils dependents to pytest-vivarium",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e0f9fdad2492f193fa2da32ab2e9f9b7425378d4",
          "body": "Rewrite the moved plugin/test imports and docstring for the new package, add the\npackage __init__ (with numpy.seterr), pyproject (pytest11 entry point, deps,\npackaging), README, docs, and smoke tests, and delete the now-empty\nlibs/testing-utils (frozen on PyPI at 0.7.6).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adapt moved files, add pytest-vivarium scaffolding, delete testing-utils",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7aff9d08498116905cf9a1ad50c80c92e80e68b7",
          "body": "Byte-identical git mv of the extracted files from libs/testing-utils to the new\nlibs/pytest-vivarium package, so history is preserved and reviewers can skip this\ncommit. All adaptation (imports, docstrings, new package config, deletion of the\nrest of testing-utils) is in the following commits.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Move pytest plugin + shared scaffolding into pytest-vivarium (pure move)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-23T22:21:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "59ea2977a41a4564968a609c31d953d6212e0330",
          "body": null,
          "is_bot": false,
          "headline": "Reorganize tests into subdirs (#222)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-22T18:01:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "238032150d077d03f83c0de9d1453829da603542",
          "body": "Add job id to name of performance logs\n\nAdd job id to name of performance logs\n- *Category*: Feature\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-6941\n\nChanges and notes\n-add job id to name of performance logs",
          "is_bot": false,
          "headline": "Add job id to name of performance logs (#217)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-22T17:58:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa2204229f537028bfcc9960356902a6a11c07e9",
          "body": "Rename the distribution (vivarium-validation), import path\n(vivarium.validation), and lib directory (libs/validation) per the decision to\ndrop the 'auto' qualifier. git mv preserves file history; also repoints the\nsetuptools_scm tag_regex, the .readthedocs.yaml paths, and the .github/labeler.yml\nglob/label to the new name.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rename package vivarium-auto-validation -> vivarium-validation",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5a9a56df67338c57927d4749a9ecec55d8229f56",
          "body": null,
          "is_bot": false,
          "headline": "delete testing-utils jenkinsfile to stop running CI",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cbc43e60a0f6ac58b5160136c649d835dd37a57",
          "body": null,
          "is_bot": false,
          "headline": "minor changelog tweak",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f089ebf13e38235a450a2e301dde8a5572aa72d",
          "body": "- Drop scipy from core deps: it was inherited from vivarium-testing-utils where\n  it backed FuzzyChecker's beta fitting (now in vivarium-fuzzy-checker);\n  auto_validation imports no scipy.\n- Move matplotlib/ipython into the validation extra. They are imported\n  unconditionally by the feature (plotti\n[…]\nTML display) but were\n  declared only in docs, so pip install vivarium-auto-validation[validation]\n  could not import the package.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Prune and correct auto-validation dependencies",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8a635aa6801456a2542a44566b05e2477c74d513",
          "body": "The list was inherited verbatim from vivarium-testing-utils, whose docs\nauto-documented an API; auto-validation's docs are narrative-only (no autodoc),\nso nitpicky mode emits no unresolved references and every entry was dead.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Trim copy-pasted nitpick-exceptions from auto-validation docs",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e4c3080195e3f278d9e79a7bbddca2adcd7e176b",
          "body": "… docs\n\n- Restore pyyaml to core dependencies (interface.py uses yaml.safe_load; it was\n  explicit in testing-utils and the split had been leaning on config-tree's\n  transitive copy).\n- Re-add numpy.seterr(all=\"raise\") in the package __init__, which auto_validation\n  previously inherited via vivariu\n[…]\n proportions\n  docs and fix a stale automated_validation comment; document why the test extra\n  depends on vivarium-testing-utils.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Address review: restore pyyaml + numpy.seterr, tighten smoke test and…",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b3873530d2d2e3b6143ab397ce64ec7914e6762d",
          "body": "automated_validation moved to vivarium-auto-validation, so drop the validation\nextra, the pandera dep + pandera.mypy plugin, the stale plot_utils mypy exclude\nand the now-unused mypy overrides, trim the dependency set to what the pytest\nplugin needs, and remove the automated_v_and_v docs toctree entry.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Strip automated-V&V from vivarium-testing-utils",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1af402067345ec6a78547a0d6d3abe95492ab09e",
          "body": "pyproject (test extra uses vivarium-testing-utils until the plugin is extracted;\nvalidation extra carries the artifactory-only deps), Makefile, Jenkinsfile,\nLICENSE, python_versions, README, CHANGELOG, docs, .readthedocs.yaml, and\npackage smoke tests. The moved automated_v_and_v doc drops the fuzzy-checking\nsection (now in vivarium-fuzzy-checker) + its figure/citation and cross-references\nfuzzy-checker instead.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add vivarium-auto-validation scaffolding and split the V&V docs",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3b68bb35900010346b02392f3091608f0858e328",
          "body": "Rewrite internal vivarium.testing_utils.automated_validation.* imports to\nvivarium.auto_validation.* (fuzzy imports already point at vivarium.fuzzy_checker\nfrom the earlier split); add the package __version__, py.typed, and __init__.py\nmarkers for the data_transformation/visualization subpackages.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Adapt auto-validation imports and package markers",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "db4e895175b22f4828ca4733e9dd78c435129c89",
          "body": "…re move)\n\nByte-identical relocation of the automated-V&V subtree (source, tests, docs) out\nof vivarium-testing-utils, renamed automated_validation -> auto_validation. No\ncontent changes - reviewers can skip this commit.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Move automated_validation into a vivarium-auto-validation package (pu…",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c2096024478d04229d091bf5a266104be680e0cb",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG.rst (#220)",
          "author_name": "Hussain Jafari",
          "author_login": "hussain-jafari",
          "committed_at": "2026-07-21T18:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb53920c21d36b0669e89f1185607dadba6c91e3",
          "body": null,
          "is_bot": false,
          "headline": "Reorganize fuzzy-checker and rename assert_proportion (#219)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-21T18:18:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58e626ffc410afd7ad7bc18cc8975d5496d9c65b",
          "body": "Category: CI/infrastructure\nJIRA issue: https://jira.ihme.washington.edu/browse/MIC-6034\n\nChanges and notes\nJenkins logged a spurious error — ERROR: Specified HTML directory '.../output/htmlcov_tests' does not exist — on every libs/* build. Root cause: the makefile only generates coverage when COV i\n[…]\ncribing the removal.\nCoverage opt-in machinery (pytest-cov, [tool.coverage], --cov plumbing) left intact, so no local coverage workflow is broken and no CI signal changes.\n🤖 Generated with Claude Code",
          "is_bot": false,
          "headline": "Stop test-coverage reporting in CI (#208)",
          "author_name": "Hussain Jafari",
          "author_login": "hussain-jafari",
          "committed_at": "2026-07-21T17:35:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4e14275d412dda5af133b3d3ad3801e8b896ea6f",
          "body": "Albrja/mic-7309/Add pr labeler workflow\n\nAdd workflow to automatically label pull requests\n- *Category*: CI\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7309\n\nChanges and notes\n-add pr labeler workflow\n\nTesting\n<img width=\"1742\" height=\"606\" alt=\"image\" src=\"https://github.com/user-attachments/assets/610aa4a9-3f7f-47e9-a8e4-b634b80b223a\" />\n\nNote the Engine and Public-Health labels, and then the Public-Health update was removed, and the labels stay in sync.",
          "is_bot": false,
          "headline": "Albrja/mic-7309/Add pr labeler workflow (#212)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-20T21:40:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87a101d97f28c84df6f6544db79073ea7f229ff3",
          "body": null,
          "is_bot": false,
          "headline": "Move docs from testing-utils to fuzzy-checker (#216)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-20T20:02:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ceafea4457696bf118caec591d02365453e7ae1",
          "body": null,
          "is_bot": false,
          "headline": "Add .readthedocs.yaml for vivarium-fuzzy-checker (#215)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-20T17:56:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc53c0380d41c97447cfd21d4b3f5ae43e35ac68",
          "body": null,
          "is_bot": false,
          "headline": "Fix fuzzy-checker README underline to unblock the 0.1.0 release (#214)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-20T17:37:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdf6973e25aae327aa232f2286c7c664a6b33f8f",
          "body": null,
          "is_bot": false,
          "headline": "Extract FuzzyChecker into vivarium-fuzzy-checker (#211)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-20T17:14:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fbd0e6a601b8c5b0111cb75ea3896131a8aef7b",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG.rst",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-17T16:42:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57d1e0a8655b53d77ac34c9c044f08feb0e4108f",
          "body": "* Vectorize order-0 interpolation merge (MIC-7097)\n\nInterpolation.__call__ scaled linearly with the number of categorical\ngroups: it grouped the population by the key columns and ran one\npd.merge per group via Order0Interp (74 merges per lookup for 37\nsubnationals x 2 sexes; ~30% of runtime over a 4\n[…]\n(1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nCo-authored-by: Steve Bachmeier <23350991+stevebachmeier@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Vectorize order-0 interpolation merge (#194)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-17T16:42:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c19ec91b87daf6f634567e2914b928254210b2be",
          "body": "* Tighten the lookup-key contract; simplify validation (MIC-7097)\n\n- Raise at construction (validate=True) when the key columns (categorical\n  values plus bin starts) do not uniquely identify a data row, replacing\n  the silent first-row-wins behavior for duplicate rows in purely\n  categorical tables\n[…]\nctly from\n__init__.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* Remove jira ticket mention\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Tighten the lookup-key contract; simplify validation (#193)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-17T16:42:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ac7e96617ef3ccba40ad53a46fe410f55bc2b9eb",
          "body": "Introduce ContinuousParameter (name, start_column, end_column) and pass\nit everywhere the interpolation machinery previously re-derived edge\ncolumn names from base-name strings: Order0Interp, validate_parameters,\nvalidate_call_data, and check_data_complete (whose (name, start, end)\ntuple interface p\n[…]\n the\nLookupTableData type it guards; its consumers are the LookupTable input\ncontract (table.py, interface.py), not interpolation.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Represent continuous lookup parameters as records (MIC-7097) (#192)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-17T16:42:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bd6f79576a791925ae3e2be50121db79477848f3",
          "body": "…n (MIC-7097)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add consolidated 5.5.0 changelog entry for interpolation vectorizatio…",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-17T16:42:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d177b0a1f8b97a0aad977f2ebffe63f6bcff6389",
          "body": "* Characterize order-0 lookup behavior (MIC-7097)\n\nTests-only: pin the observable behavior of the interpolation machinery\nahead of the MIC-7097 refactor stack, so later changes are reviewed\nagainst unchanged expectations. Adds multi-categorical selection, a\nshared-bin-edge fan-out guard, unknown-cat\n[…]\nngine unmodified.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* Remove reference to 'Golden\"\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Characterize order-0 lookup behavior (#195)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-17T16:42:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a55838ddbee6dc7c27cb7b521233e9237309c922",
          "body": "* Add load_tmred/load_categories data-source normalizers (MIC-7071)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* Route risk-effect data through config data_sources (MIC-7071)\n\nAdd tmred, relative_risk_scalar, and demographic_dimensions data sources to CausalFactorEffect (\n[…]\n.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Hussain Jafari <hjafari@uw.edu>\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Make VPH risk components artifact-less (MIC-7071) (#186)",
          "author_name": "Hussain Jafari",
          "author_login": "hussain-jafari",
          "committed_at": "2026-07-16T23:56:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0dc425e1d65b4af6ef2a589cc37de2b45add7668",
          "body": "* Remove redundant scenario re-filter in _get_combined_data (MIC-7214)\n\nScenario levels are filtered and dropped at bundle formatting\n(RatioMeasureDataBundle._get_formatted_datasets), so the re-filter in\nplot_utils._get_combined_data always raised KeyError: 'Level scenario not\nfound' for any compari\n[…]\n pushed commit failed with 'reference is not a tree' before\nSphinx ever ran).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove redundant scenario re-filter in plotting (#206)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-16T18:13:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "475b897914d2c1d997c8c521b3d34b949efc1234",
          "body": null,
          "is_bot": false,
          "headline": "stop xfailing now-passing tests (#209)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-16T17:33:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0dfff8b1275c94ad2be3b356ec18b017036925e9",
          "body": null,
          "is_bot": false,
          "headline": "Sbachmei/public health/mic 7283/fix hardcoded entity type (#205)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-16T17:31:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5d830ff41d461fde6ade92a152f849592492996",
          "body": "Albrja/mic 6867/change-population-events-order\n\nUpdate order in which population characteristics are updated\n- *Category*: Feature\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-6867",
          "is_bot": false,
          "headline": "Albrja/mic 6867/change-population-events-order (#125)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-15T17:07:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43350455b3695eb57eea04f0f690b7c83f865d74",
          "body": "Albrja/mic 6867/observer priority\n\nAdd priority for observer and events\n- *Category*: Feature\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-6867\n\nChanges and notes\n-support priority for observers",
          "is_bot": false,
          "headline": "Albrja/mic 6867/observer priority (#124)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-15T16:48:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b510b9e3ded0d8f085a1491caf4e676ae2fa4737",
          "body": "* Update stale references\n\n* Fix stale :mod:`vivarium` cross-refs in cluster-tools docstrings\n\nThe vivarium-engine RTD inventory doesn't include a bare 'vivarium' module\n(that path is now just the namespace-package __init__), so the two\n:mod:`vivarium` cross-refs failed docs-build. Point them at\n:mod:`vivarium.engine` where the target now lives.",
          "is_bot": false,
          "headline": "Update stale references (#204)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-14T23:48:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5749a7e6b4322bbf7de3ecd633bcb294a1c280e",
          "body": "…ms (MIC-7100) (#202)",
          "is_bot": false,
          "headline": "Remove pre-monorepo LayeredConfigTree + vivarium attribute-import shi…",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-14T22:57:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "246e0264de05fc2813cc4f3433b119cf8f5891df",
          "body": "Use fuzzy checker for stochastic proportion assertions\n\nUse FuzzyChecker in test suite for stochastic proportion assertions\n- *Category*: Test\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7274\n\nChanges and notes\n-use FuzzyChecker for stochastic proportion assertions\n-tighten deterministic assertions that cannot use FuzzyChecker",
          "is_bot": false,
          "headline": "Use fuzzy checker for stochastic proportion assertions (#197)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-13T22:11:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8728e0501e617bb7bc841289cf9474e04943222",
          "body": "The release workflow's detect job installs vivarium-build-utils with\n`uv pip install --system` to compute the dependency-ordered release\nmatrix, but had no Set up Python / Set up uv steps. uv therefore\ntargeted the runner's system interpreter at /usr, which is\nexternally-managed (PEP 668), and refus\n[…]\ne install targets\na managed toolcache interpreter. Latent until now because release.yml\nonly runs on release pushes, not on PR CI.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Set up managed Python in release detect job (#203)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-13T21:48:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7b381d43d6a34ba1e5510ae60f354e9c0c5d947b",
          "body": "Skip validation of lookup data. Only do once\n\nSkip validation of lookup table data to speed up test suite\n- *Category*: Test\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7257\n\nChanges and notes\n-Skip per build validation of lookup data. \n-Add new test to validate mocked data once per session",
          "is_bot": false,
          "headline": "Skip validation of lookup data. Only do once (#196)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-13T21:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10f159be953d6a9736a917358fa335950dbf0439",
          "body": "* Add packaging and tomli runtime deps to vivarium-build-utils\n\nThe new vivarium.build_utils.dependencies module needs packaging\n(Requirement/SpecifierSet) and, on the 3.10 floor, the tomli tomllib backport.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* Add vivarium.build_\n[…]\n order function; leverage graphlib\n\n* rename helper\n\n* change function name\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nCo-authored-by: Patrick Nast <pnast@uw.edu>",
          "is_bot": false,
          "headline": "Support atomic cross-package PRs against in-tree sibling versions (#152)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-13T21:23:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "245fe4ff78887fda62be702c5357325f3f42dc29",
          "body": "Albrja/feature/mic 7107/jobmon all artifacts\n\nUse Jobmon instead of drmaa to parallelize \"all\" location artifact building\n- *Category*: Feature\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7107\n\nChanges and notes\n-use Jobmon to parallelize \"all\" artifact building by fanning out a workflow for each location\n\nTesting\n-successfully ran ``make_artifacts -vvv -l \"all\" -o ~/scartch ``",
          "is_bot": false,
          "headline": "Albrja/feature/mic 7107/jobmon all artifacts (#191)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-13T20:53:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b9c36fe11867f39f305f12105f9d8cec502f6cd",
          "body": null,
          "is_bot": false,
          "headline": "push back the test_get_skip_post_processor_deprecation date (#199)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-13T17:18:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d22214db8b3e61e38a01bdf2c013b2a185e90d5",
          "body": "Update mortality tests to use shared step fixture\n\nUpdate mortality tests to use shared step fixture\n- *Category*: Refactor/test\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7256\n\nChanges and notes\n-Update mortality tests to use shared step fixture",
          "is_bot": false,
          "headline": "Albrja/public-health/mic-7256/part-3 (#188)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-09T00:28:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c61dc0a3eac325d1286df55a80640b8b24390948",
          "body": "Albrja/public health/mic 7256/pt 2\n\nMore fixture taxonomy updates\n- *Category*: Refactor/test\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7256\n\nChanges and notes\n-more updates to use shared fixture InteractiveContext",
          "is_bot": false,
          "headline": "Albrja/public health/mic 7256/pt 2 (#187)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-08T23:58:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e1b703c706b454070e968aa0dc45f9890dab186",
          "body": "* Add shared README python-version sync tool (MIC-5670)\n\nDRY up the easylink-style README updater into vivarium-build-utils so each\nlib no longer copies its own update_readme.py.\n\n- Add vivarium.build_utils.readme module (stdlib-only): enumerated list,\n  \"requires Python X.Y+\" floor, and python=X.Y \n[…]\nminimal: README.rst only.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* Update CHANGELOG.rst\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add shared README python-version sync tool (MIC-5670) (#185)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-08T23:05:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "319eaf8abb006eb780d2cc51c6b9e5d2781dcced",
          "body": "Albrja/public-health/fixture-taxonomy-pt1\n\nAdd shared InteractiveContext fixtures\n- *Category*: Test/Refactor\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7256\n\nChanges and notes\n-adds new InteractiveContext fixtures to share components to decrease runtime\n-update scope of fixtures to be more efficient",
          "is_bot": false,
          "headline": "Albrja/public-health/fixture-taxonomy-pt1 (#184)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-08T18:54:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "891cfb7105a41f46cba7eb79ddae1ff3f3c0db4c",
          "body": "Category: bugfix\nJIRA issue: https://jira.ihme.washington.edu/browse/MIC-7277\n\nChanges and notes\nMirrored distributions returned NaN for valid inputs because the computability window was in reflected space; this maps it back into data space via mirror_point - bound.\n\nTesting\nAdded test_mirrored_cdf_within_support_is_not_nan (parametrized over MirroredGumbel/MirroredGamma) is not NaN and equals 1 - underlying.cdf(mirror_point - x).\nExisting risk-distributions unit tests pass",
          "is_bot": false,
          "headline": "mirrored computability bounds bugfix (#176)",
          "author_name": "Hussain Jafari",
          "author_login": "hussain-jafari",
          "committed_at": "2026-07-08T18:35:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c859b932fd22fa8c8966c223ca6315a35fa659b7",
          "body": "Albrja/cluster-tools/bugfix/mic-7278/prevent-order-test-failures\n\nUpdate pandas and loguru fixtures to not leak state to later tests\n- *Category*: Bugfix\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7278\n\nChanges and notes\n-update pandas display settings to not leak to later tests\n-restore default loguru sink",
          "is_bot": false,
          "headline": "Albrja/cluster-tools/bugfix/mic-7278/prevent-order-test-failures (#177)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-07T16:44:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6d8c5291e116df0d958d5cfb5c0c3c8303a1fe2",
          "body": "* ai-tools: add model-development workflow (MIC-6986)\n\nAdd /viv:model-development, the model-repo sibling of\n/viv:framework-development: a staged artifact->component->observer build\ndriven from an iteration plan, with blind parallel InteractiveContext\nverification, simulation-based checks, _review-c\n[…]\nranged up front rather than discovered mid-build.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add model-development workflow (MIC-6986) (#137)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-06T19:43:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "66246238e340b98f8d4c8f07c673d7a29e0ff7bf",
          "body": "## Pin Vivarium Inputs to be compatible with monorepo\n\nChanges and notes\nPin Vivarium Inputs to be compatible with monorepo",
          "is_bot": false,
          "headline": "Pin Vivarium Inputs to be compatible with monorepo (#183)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-06T19:36:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32e04d64fdf98603f6b217902486d28c9996185a",
          "body": "* Add PyPI classifiers to lib pyproject.toml files\n\nWhen migrating from per-repo setup.py to the monorepo pyproject.toml, the\ntrove classifiers were not carried over. Restore them per lib, adapted\nfrom each library's pre-migration setup.py, with the license classifier\ncorrected to BSD-3-Clause (seve\n[…]\n 4.2.8 -> 4.2.9\n- profiling:      0.4.18 -> 0.5.1\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add PyPI classifiers to lib pyproject.toml files (#154)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-07-06T19:10:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6265d9b8f77f0367d2ee0372b613dd8320052a55",
          "body": "…r with xdist\n\nAlbrja/testing-tuils/bugfix/prevent-malformed-data-with-ordering\n\nMore updates to prevent future CI failures from test ordering with xdist\n- *Category*: Bugfix\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7278",
          "is_bot": false,
          "headline": "Albrja/testing-tuils/bugfix/prevent-malformed-data-with-ordering (#175)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-02T22:38:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5994fa093023cb87dd7e5413443140cd0472076e",
          "body": "…0) (#182)",
          "is_bot": false,
          "headline": "Delete libs/compat from monorepo, drop profiling runtime dep (MIC-710…",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-02T22:14:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "718dc75232003347a5817bd117133830bcc06003",
          "body": "…C-7100) (#181)",
          "is_bot": false,
          "headline": "Deprecate vivarium-compat: gut import hook, add retirement banner (MI…",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-02T22:09:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0682a1d3151bae5ac5ae5410efdd19ae76abd976",
          "body": "Albrja/bugfix/test-ordering-malformation\n\nClear context to prevent test failure on ordering\n- *Category*: Bugfix\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7278\n\nChanges and notes\n-clear simulation context",
          "is_bot": false,
          "headline": "Albrja/bugfix/test-ordering-malformation (#174)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-02T20:06:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53217794be0a3d2e3db9d2eafa9e930d0bf640a6",
          "body": null,
          "is_bot": false,
          "headline": "Sbachmei/build utils/mic 7086/leverage make targets (#173)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-07-01T21:51:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a269051080fa677e1b6008ed2232c5758f4866f",
          "body": "Albrja/build-utils/mic-7854/Only use pip cache on push/PR\n\nOnly use pip cache on push/pr \n- *Category*: Build\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-6854\n\nChanges and notes\n-update builds to only use pip cache on push/pr",
          "is_bot": false,
          "headline": "Albrja/build-utils/mic-6854/Only use pip cache on push/PR (#172)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-01T20:22:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b06329118069cebb273dcd0594a7ee63b9418d1",
          "body": "Albrja/public-health/mic-7255/Reduce pop size in tests\n\nReduce population size in test suites to improve runtime\n- *Category*: Test\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7255\n\nChanges and notes\n-Reduce population size in test suites to improve runtime",
          "is_bot": false,
          "headline": "Albrja/public-health/mic-7255/Reduce pop size in tests (#170)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-07-01T17:11:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af2c4b7721686229c47418669fb34d1a4bb2cb5e",
          "body": "Fix order dependent test fixtures\n\nFix order dependent test fixtures causes results to not be reproduced\n- *Category*: Bugfix\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-XYZ\n\nChanges and notes\n-Fix order dependent test fixtures",
          "is_bot": false,
          "headline": "Fix order dependent test fixtures (#165)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-30T22:58:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06720bb7f8f531e80f8e3210ad2f9020d1e7654c",
          "body": null,
          "is_bot": false,
          "headline": "Isolate cluster-tools mkdir test with tmp_path (#171)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-30T22:19:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8fedcdf45dd9daa3588dfdfa0fcfd75ae353191",
          "body": "Category: feature\nJIRA issue: https://jira.ihme.washington.edu/browse/MIC-7116\n\nChanges and notes\nFeature: LookupTable accepts DataFrame/Series with lookup attributes on the row index.\nAPI: LookupTable.value_columns is now a pandas.Index (was list[str]).\nAPI: Interpolation.__init__ infers parameter \n[…]\nDeprecation: passing a flat DataFrame to build_table/set_data is deprecated.\nDeprecation: passing a Mapping to build_table/set_data is deprecated.\n\nTesting\nAdded/updated unit tests for indexed inputs.",
          "is_bot": false,
          "headline": "lookup table multiindex (#110)",
          "author_name": "Rajan Mudambi",
          "author_login": "rmudambi",
          "committed_at": "2026-06-30T21:34:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d883f45f3262da4c3379db416c008882c5eb768d",
          "body": null,
          "is_bot": false,
          "headline": "Add support for no artifactory access in 'make build-env' (#162)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-30T19:37:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40fc585814432a46dae506c97a14ce90d7bc0fb5",
          "body": null,
          "is_bot": false,
          "headline": "Remove pytest-xdist as pytest dependency (#169)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-30T19:14:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c34198c5a3db3bf95f51c5ab0c6a16d158a8f888",
          "body": null,
          "is_bot": false,
          "headline": "Include pytest-xdist in pytest group (#168)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-30T19:08:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e774edc2fa26475c330773ffa9b4bb9c59050562",
          "body": "* ai-tools: fix doc drift found by /viv:repo-maintenance (MIC-7128)\n\nAudit of the ai-tools plugin docs and the root CLAUDE.md against their\nupstreams surfaced five stale references; correct them:\n\n- continuous-integration: GH runners install vivarium-build-utils from\n  PyPI, not git (build-utils its\n[…]\nRead the Docs API version\n\nBump ai-tools to 0.22.1.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n* Update CHANGELOG.rst\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix doc drift found by /viv:repo-maintenance (MIC-7128) (#164)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-06-30T18:14:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "91cbd98744b1d7d2e3a050a22f2111402369d0c7",
          "body": "* Add confidence scoring and Sonnet review agents\n\nAdapt Anthropic's official code-review plugin into viv:code-reviewer:\n\n- Run the five _review_* lenses on Sonnet (model: sonnet).\n- Add a Haiku _review_scorer sub-agent that independently scores each\n  finding 0-100 against a verbatim rubric, judgin\n[…]\n\n\nMIC-7262\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* Update CHANGELOG for version 0.22.1\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add confidence scoring and Sonnet review agents (#156)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-06-30T17:05:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64eb00952ec31e617e76eb1231f5feb2067e56af",
          "body": "Albrja/build utils/mic 7254/turn cov off\n\nTurn on n auto and turn off coverage for test step of CI\n- *Category*: CI\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7254\n\nChanges and notes\n-turns --cov off to save runtime\n-enables n auto from pytest plugin",
          "is_bot": false,
          "headline": "Albrja/build utils/mic 7254/turn cov off, enable n auto (#158)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T23:25:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "454001730a8bc23736df4b397abff66b591a8050",
          "body": "Albrja/testing-utils/mic-7253Update xdist plugin behavior\n\nUpdate xdist plugin default behavior\n- *Category*: <!-- one of bugfix, feature, refactor, POC, CI/infrastructure, documentation, \n                   revert, test, release, other/misc -->\n- *JIRA issue*: https://jira.ihme.washington.edu/brows\n[…]\ndds a `pytest_report_header` line reporting the resolved worker\n  count and the CPU/memory it was derived from, so the decision is auditable in CI\n  logs (xdist still prints the actual spawned count).",
          "is_bot": false,
          "headline": "Albrja/testing-utils/mic-7253Update xdist plugin behavior (#155)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T23:14:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "90d53f7293c728d7480e9b97bc67eaeb9e0d4e3c",
          "body": null,
          "is_bot": false,
          "headline": "Changelog",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7807dca567f710af9a0e7044335b6fff094bf8e4",
          "body": "albrja/public-health/mic-7234/microdata-closed-cohort\n\nAdd implementation for single sample closed cohort feature of Microdata Observer\n- *Category*: Feature\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7234\n\nChanges and notes\n-add single random sample for closed cohort",
          "is_bot": false,
          "headline": "albrja/public-health/mic-7234/microdata-closed-cohort (#148)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1196403fb85197a78f27137a36f39892feb4050c",
          "body": "Albrja/feature/mic 7064/microdata obs configuration\n\nConfiguration capabilities for Microdata Observer\n- *Category*: Feature\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7064\n\nChanges and notes\n-add configuration for row filters\n-add configuration for row limit\n-add configuration for time step filtering",
          "is_bot": false,
          "headline": "Albrja/feature/mic 7064/microdata obs configuration (#140)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4d94543e29cf7e04906a99e2bd4d1a1da697499",
          "body": null,
          "is_bot": false,
          "headline": "Add tutorial",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1162375d557e507df022c4abb08c9ed36b7431e",
          "body": null,
          "is_bot": false,
          "headline": "Address pr comments",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8aac8896c5a0b8cf18a3307e3aa3c336f73bb3f",
          "body": null,
          "is_bot": false,
          "headline": "Revert change",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebfd9721d8d3fe2a859bc2e4bb77fcaf471a7688",
          "body": null,
          "is_bot": false,
          "headline": "Remove MicrodataCode from Engine",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a45630742a899ee8526d6db03510f486cd427dcc",
          "body": null,
          "is_bot": false,
          "headline": "Move Microdata Observer to public-health lib",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25ebf13f8eeb3a67f7083bb5e7b730b63aeb07af",
          "body": null,
          "is_bot": false,
          "headline": "Update implementation for column filtering",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ac6576354a63809620571b67e7cf493cde7cbd8",
          "body": null,
          "is_bot": false,
          "headline": "Implementation of Microdata Observer",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1560d1e7e4c14cc87d42eae49e9d3d28d0904f78",
          "body": null,
          "is_bot": false,
          "headline": "Stubs and xfail tests for Microdata Observer",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T22:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec4dac58fca7ff6297718f05114d77ff0ecc5cf2",
          "body": "Albrja/mic-7064/Support callable and tuple(str, callable) for population filter\n\n\nSupport callable and tuple(str, callable) for population filter\n- *Category*: Feature\n- *JIRA issue*: https://jira.ihme.washington.edu/browse/MIC-7064\n\nChanges and notes\n-Support callable and tuple(str, callable) for population filter",
          "is_bot": false,
          "headline": "Support callable and tuple(str, callable) for population filter (#139)",
          "author_name": "Jim Albright",
          "author_login": "albrja",
          "committed_at": "2026-06-29T20:01:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1b4145df11721826b775f64de12ad626301a072",
          "body": "Category: feature\n\nChanges and notes\nApply the calibration constant (PAF) via a value attribute modifier instead of a pipeline post-processor\nRaise a descriptive ValueError when combining calibration constants (PAFs) produces NaNs\nBugfix: build the CausalFactorEffect.get_filtered_data target mask as\n[…]\nionEffect.get_name and risk/intervention properties\n\nTesting\nRan NO pregnancy, NO child, and MNNCH models and checked that results were identical to previous runs for a given draw, seed, and scenario.",
          "is_bot": false,
          "headline": "VPH 6.2 calibration constant updates (#161)",
          "author_name": "Hussain Jafari",
          "author_login": "hussain-jafari",
          "committed_at": "2026-06-29T19:29:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d92da378bd741afb58c34421ffcdc6ff5e5fc7f5",
          "body": null,
          "is_bot": false,
          "headline": "use the newly-released mypy-if-typed target in cy.yml (#160)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-29T18:03:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71806e15b9c61abccd14565a2700cb6199f8dd02",
          "body": null,
          "is_bot": false,
          "headline": "Gate Jenkins mypy on py.typed marker (#159)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-29T17:35:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9786dcf9a8f023e9a52cb12ab5128d1618d2c1bd",
          "body": "Category: feature\n\nChanges and notes\nAllow RiskAttributableDisease to pass \"distribution\" data through configuration defaults.\nUpdate docs tutorial to not use an artifact.\n\nTesting\nRan pytest and built docs.",
          "is_bot": false,
          "headline": "artifactless disease components (#145)",
          "author_name": "Hussain Jafari",
          "author_login": "hussain-jafari",
          "committed_at": "2026-06-29T15:43:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "056e3e774d35779f792e5792bc95bc00e38465b8",
          "body": "* Add change-propagation skill and _propagate_target worker\n\nAdd an agentic workflow that propagates an adapted copy of a reference\nfile/directory across several targets (monorepo libs and/or external\nrepos) in parallel, then files one draft PR per repo.\n\n- skills/change-propagation/SKILL.md: the le\n[…]\n<130876799+patricktnast@users.noreply.github.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>\nCo-authored-by: Steve Bachmeier <23350991+stevebachmeier@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add change-propagation skill and worker agent (#142)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-06-25T21:36:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "66cc87158489a5214edee00aafa607b7487b8522",
          "body": "* ai-tools: stub workflow-assessment skill and _trace_extractor contract (MIC-6988)\n\nBody-less baseline for the assessment tool: frontmatter and section\nintents only. Content lands in follow-up commits.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n* ai-tools: add workflow-assessment skil\n[…]\nde Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* Update CHANGELOG.rst\n\n* Update tools/ai-tools/skills/workflow-assessment/SKILL.md\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add workflow-assessment skill and trace extractor (#119)",
          "author_name": "Patrick Nast",
          "author_login": "patricktnast",
          "committed_at": "2026-06-25T16:50:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "87bdcd5853dc62aff705bca8643194091d60e8fd",
          "body": "* Add support for 'pytest --runslow'\n\n* Add --runweekly support; code reviewer updates",
          "is_bot": false,
          "headline": "Add support for 'pytest --runslow' (#151)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-24T16:32:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b069a99f43b2841c7fc6829dff8045c7a0c8ac3",
          "body": null,
          "is_bot": false,
          "headline": "Fix getting vbu version when self-boostrapping (#149)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-23T22:36:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2eb4cec852c92e5e001ef744224a6bc9299c76ff",
          "body": null,
          "is_bot": false,
          "headline": "Enforce a fixed central performance log schema (#144)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-23T21:03:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d918e94bee07186af98613c1ca21c54a26dbb0d1",
          "body": null,
          "is_bot": false,
          "headline": "git fetch --unshallow in readthedocs (#150)",
          "author_name": "Steve Bachmeier",
          "author_login": "stevebachmeier",
          "committed_at": "2026-06-23T20:56:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 915,
      "latest_release_at": "2026-07-23T23:07:18Z",
      "latest_release_tag": "vivarium-fuzzy-checker-v0.2.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 52,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 0
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "vivarium-engine",
          "exists": true,
          "license": "BSD-3-Clause",
          "keywords": [
            "Intended Audience :: Developers",
            "Intended Audience :: Education",
            "Intended Audience :: Science/Research",
            "License :: OSI Approved :: BSD License",
            "Natural Language :: English",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
            "Operating System :: POSIX",
            "Operating System :: POSIX :: BSD",
            "Operating System :: POSIX :: Linux",
            "Programming Language :: Python",
            "Programming Language :: Python :: Implementation :: CPython",
            "Topic :: Education",
            "Topic :: Scientific/Engineering",
            "Topic :: Scientific/Engineering :: Artificial Life",
            "Topic :: Scientific/Engineering :: Mathematics",
            "Topic :: Scientific/Engineering :: Medical Science Apps.",
            "Topic :: Scientific/Engineering :: Physics",
            "Topic :: Software Development :: Libraries"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/vivarium-engine/",
          "is_deprecated": false,
          "latest_version": "5.5.3",
          "repository_url": "https://github.com/ihmeuw/vivarium-suite/tree/main/libs/engine",
          "versions_count": 25,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-05-22T18:27:00.858035Z",
          "latest_published_at": "2026-07-23T23:08:11.133592Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "vivarium-artifact",
          "exists": true,
          "license": "BSD-3-Clause",
          "keywords": [
            "Intended Audience :: Developers",
            "Intended Audience :: Education",
            "Intended Audience :: Science/Research",
            "License :: OSI Approved :: BSD License",
            "Natural Language :: English",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
            "Operating System :: POSIX",
            "Operating System :: POSIX :: BSD",
            "Operating System :: POSIX :: Linux",
            "Programming Language :: Python",
            "Programming Language :: Python :: Implementation :: CPython",
            "Topic :: Education",
            "Topic :: Scientific/Engineering",
            "Topic :: Software Development :: Libraries"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/vivarium-artifact/",
          "is_deprecated": false,
          "latest_version": "1.0.8",
          "repository_url": "https://github.com/ihmeuw/vivarium-suite/tree/main/libs/artifact",
          "versions_count": 9,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-05-20T20:29:46.374732Z",
          "latest_published_at": "2026-07-23T23:07:01.983412Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "vivarium-profiling",
          "exists": true,
          "license": "BSD-3-Clause",
          "keywords": [
            "Intended Audience :: Developers",
            "Intended Audience :: Education",
            "Intended Audience :: Science/Research",
            "License :: OSI Approved :: BSD License",
            "Natural Language :: English",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
            "Operating System :: POSIX",
            "Operating System :: POSIX :: BSD",
            "Operating System :: POSIX :: Linux",
            "Programming Language :: Python",
            "Programming Language :: Python :: Implementation :: CPython",
            "Topic :: Education",
            "Topic :: Scientific/Engineering",
            "Topic :: Software Development :: Libraries"
          ],
          "ecosystem": "pypi",
          "matches_repo": null,
          "registry_url": "https://pypi.org/project/vivarium-profiling/",
          "is_deprecated": false,
          "latest_version": "0.5.3",
          "repository_url": null,
          "versions_count": 22,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-05-11T21:05:12.163572Z",
          "latest_published_at": "2026-07-16T17:34:28.432309Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 7
        },
        {
          "name": "vivarium-validation",
          "exists": true,
          "license": "BSD-3-Clause",
          "keywords": [
            "Intended Audience :: Developers",
            "Intended Audience :: Education",
            "Intended Audience :: Science/Research",
            "License :: OSI Approved :: BSD License",
            "Natural Language :: English",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
            "Operating System :: POSIX",
            "Operating System :: POSIX :: BSD",
            "Operating System :: POSIX :: Linux",
            "Programming Language :: Python",
            "Programming Language :: Python :: Implementation :: CPython",
            "Topic :: Education",
            "Topic :: Scientific/Engineering",
            "Topic :: Software Development :: Libraries"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/vivarium-validation/",
          "is_deprecated": false,
          "latest_version": "0.1.2",
          "repository_url": "https://github.com/ihmeuw/vivarium-suite/tree/main/libs/validation",
          "versions_count": 3,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-07-21T20:07:35.981692Z",
          "latest_published_at": "2026-07-23T23:08:04.033450Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "vivarium-build-utils",
          "exists": true,
          "license": "BSD-3-Clause",
          "keywords": [
            "Intended Audience :: Developers",
            "Intended Audience :: Education",
            "Intended Audience :: Science/Research",
            "License :: OSI Approved :: BSD License",
            "Natural Language :: English",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
            "Operating System :: POSIX",
            "Operating System :: POSIX :: BSD",
            "Operating System :: POSIX :: Linux",
            "Programming Language :: Python",
            "Programming Language :: Python :: Implementation :: CPython",
            "Topic :: Software Development :: Build Tools",
            "Topic :: Software Development :: Libraries"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/vivarium-build-utils/",
          "is_deprecated": false,
          "latest_version": "4.4.2",
          "repository_url": "https://github.com/ihmeuw/vivarium-suite/tree/main/libs/build-utils",
          "versions_count": 65,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2025-07-08T16:53:27.645033Z",
          "latest_published_at": "2026-07-23T23:06:08.761032Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "vivarium-config-tree",
          "exists": true,
          "license": "BSD-3-Clause",
          "keywords": [
            "Intended Audience :: Developers",
            "License :: OSI Approved :: BSD License",
            "Natural Language :: English",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
            "Operating System :: POSIX",
            "Operating System :: POSIX :: BSD",
            "Operating System :: POSIX :: Linux",
            "Programming Language :: Python",
            "Programming Language :: Python :: Implementation :: CPython",
            "Topic :: Software Development :: Libraries"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/vivarium-config-tree/",
          "is_deprecated": false,
          "latest_version": "5.0.12",
          "repository_url": "https://github.com/ihmeuw/vivarium-suite/tree/main/libs/config-tree",
          "versions_count": 13,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-05-14T20:11:59.113786Z",
          "latest_published_at": "2026-07-23T23:06:50.250591Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "vivarium-gbd-mapping",
          "exists": true,
          "license": "BSD 3-Clause",
          "keywords": [
            "Intended Audience :: Developers",
            "Intended Audience :: Education",
            "Intended Audience :: Science/Research",
            "License :: OSI Approved :: BSD License",
            "Natural Language :: English",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
            "Operating System :: POSIX",
            "Operating System :: POSIX :: BSD",
            "Operating System :: POSIX :: Linux",
            "Programming Language :: Python",
            "Programming Language :: Python :: Implementation :: CPython",
            "Topic :: Education",
            "Topic :: Scientific/Engineering",
            "Topic :: Scientific/Engineering :: Medical Science Apps.",
            "Topic :: Software Development :: Libraries"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/vivarium-gbd-mapping/",
          "is_deprecated": false,
          "latest_version": "6.0.7",
          "repository_url": "https://github.com/ihmeuw/vivarium-suite/tree/main/libs/gbd-mapping",
          "versions_count": 8,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2026-05-19T19:47:00.018560Z",
          "latest_published_at": "2026-07-23T23:07:00.811720Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        },
        {
          "name": "vivarium-dependencies",
          "exists": true,
          "license": "BSD-3-Clause",
          "keywords": [],
          "ecosystem": "pypi",
          "matches_repo": null,
          "registry_url": "https://pypi.org/project/vivarium-dependencies/",
          "is_deprecated": false,
          "latest_version": "1.2.4",
          "repository_url": null,
          "versions_count": 17,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": "2025-07-30T16:54:23.390442Z",
          "latest_published_at": "2026-07-14T23:49:52.077307Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 2,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 10
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples",
        "notebooks"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "libs/artifact/Makefile",
        "libs/artifact/docs/Makefile",
        "libs/build-utils/Makefile",
        "libs/cluster-tools/Makefile",
        "libs/cluster-tools/docs/Makefile",
        "libs/config-tree/Makefile",
        "libs/config-tree/docs/Makefile",
        "libs/dependencies/Makefile",
        "libs/engine/Makefile",
        "libs/engine/docs/Makefile",
        "libs/fuzzy-checker/Makefile",
        "libs/fuzzy-checker/docs/Makefile",
        "libs/gbd-mapping/Makefile",
        "libs/gbd-mapping/docs/Makefile",
        "libs/profiling/Makefile",
        "libs/public-health/Makefile",
        "libs/public-health/docs/Makefile",
        "libs/pytest-vivarium/Makefile",
        "libs/pytest-vivarium/docs/Makefile",
        "libs/risk-distributions/Makefile",
        "libs/risk-distributions/docs/Makefile",
        "libs/validation/Makefile",
        "libs/validation/docs/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "libs/artifact/src/vivarium/artifact/py.typed",
        "libs/cluster-tools/src/vivarium/cluster_tools/py.typed",
        "libs/config-tree/src/vivarium/config_tree/py.typed",
        "libs/engine/src/vivarium/engine/py.typed",
        "libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed",
        "libs/pytest-vivarium/src/pytest_vivarium/py.typed",
        "libs/risk-distributions/src/vivarium/risk_distributions/py.typed",
        "libs/validation/src/vivarium/validation/py.typed"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 903070,
      "source_files_sampled": 485,
      "oversized_source_files": 7,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 6633
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/artifact/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/artifact/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "packaging",
          "manifest": "libs/build-utils/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "tomli",
          "manifest": "libs/build-utils/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/cluster-tools/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/cluster-tools/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "vivarium-engine",
          "manifest": "libs/cluster-tools/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.1.0"
        },
        {
          "name": "vivarium-config-tree",
          "manifest": "libs/cluster-tools/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.0.0"
        },
        {
          "name": "dill",
          "manifest": "libs/cluster-tools/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "psutil",
          "manifest": "libs/cluster-tools/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/config-tree/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/config-tree/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "vivarium-artifact",
          "manifest": "libs/engine/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.0.2"
        },
        {
          "name": "vivarium-config-tree",
          "manifest": "libs/engine/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/engine/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/engine/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "dill",
          "manifest": "libs/engine/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/fuzzy-checker/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/fuzzy-checker/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/gbd-mapping/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/gbd-mapping/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "pyyaml",
          "manifest": "libs/gbd-mapping/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "vivarium-gbd-mapping",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=6.0.0"
        },
        {
          "name": "vivarium-engine",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.1.0"
        },
        {
          "name": "vivarium-public-health",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=6.0.0"
        },
        {
          "name": "vivarium-config-tree",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.0.1"
        },
        {
          "name": "jinja2",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "pyyaml",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "memory-profiler",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "matplotlib",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "seaborn",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "scalene",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "nbformat",
          "manifest": "libs/profiling/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.0"
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/public-health/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/public-health/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "vivarium-engine",
          "manifest": "libs/public-health/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.2.0"
        },
        {
          "name": "vivarium-config-tree",
          "manifest": "libs/public-health/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.0.0"
        },
        {
          "name": "vivarium-risk-distributions",
          "manifest": "libs/public-health/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=3.0.0,<4.0.0"
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/pytest-vivarium/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/pytest-vivarium/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "vivarium-config-tree",
          "manifest": "libs/pytest-vivarium/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/risk-distributions/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/risk-distributions/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "vivarium-dependencies",
          "manifest": "libs/validation/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-build-utils",
          "manifest": "libs/validation/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.0.0,<5.0.0"
        },
        {
          "name": "vivarium-config-tree",
          "manifest": "libs/validation/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "vivarium-fuzzy-checker",
          "manifest": "libs/validation/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 10,
        "merged_prs": 194,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 26
      },
      "bus_factor": 3,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "stevebachmeier",
          "commits": 760,
          "avatar_url": "https://avatars.githubusercontent.com/u/23350991?v=4"
        },
        {
          "type": "User",
          "login": "jehmumford",
          "commits": 749,
          "avatar_url": "https://avatars.githubusercontent.com/u/17072425?v=4"
        },
        {
          "type": "User",
          "login": "rmudambi",
          "commits": 517,
          "avatar_url": "https://avatars.githubusercontent.com/u/11376379?v=4"
        },
        {
          "type": "User",
          "login": "patricktnast",
          "commits": 399,
          "avatar_url": "https://avatars.githubusercontent.com/u/130876799?v=4"
        },
        {
          "type": "User",
          "login": "albrja",
          "commits": 383,
          "avatar_url": "https://avatars.githubusercontent.com/u/37345113?v=4"
        },
        {
          "type": "User",
          "login": "KjellSwedin",
          "commits": 170,
          "avatar_url": "https://avatars.githubusercontent.com/u/4910318?v=4"
        },
        {
          "type": "User",
          "login": "kfwilson",
          "commits": 120,
          "avatar_url": "https://avatars.githubusercontent.com/u/33732724?v=4"
        },
        {
          "type": "User",
          "login": "aflaxman",
          "commits": 114,
          "avatar_url": "https://avatars.githubusercontent.com/u/51236?v=4"
        },
        {
          "type": "User",
          "login": "mattkappel",
          "commits": 99,
          "avatar_url": "https://avatars.githubusercontent.com/u/13937263?v=4"
        },
        {
          "type": "User",
          "login": "hussain-jafari",
          "commits": 91,
          "avatar_url": "https://avatars.githubusercontent.com/u/25186372?v=4"
        }
      ],
      "contributors_sampled": 21,
      "top_contributor_share": 0.215
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "labeler.yml",
        "release-ai-tools.yml",
        "release.yml",
        "update-readme.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 5,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 7,
            "reason": "Found 8/11 approved changesets -- score normalized to 7",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 6 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "cb6bec6a3edb20fa76fadbcc280cb4ad346e46de",
        "ran_at": "2026-07-23T23:08:35Z",
        "aggregate_score": 4.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T23:05:17Z",
      "oldest_open_prs": [
        {
          "number": 153,
          "created_at": "2026-06-24T20:39:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 190,
          "created_at": "2026-07-08T20:31:31Z",
          "last_comment_at": "2026-07-08T20:32:46Z",
          "last_comment_author": "hussain-jafari"
        },
        {
          "number": 207,
          "created_at": "2026-07-15T21:04:25Z",
          "last_comment_at": "2026-07-21T20:51:24Z",
          "last_comment_author": "patricktnast"
        },
        {
          "number": 221,
          "created_at": "2026-07-21T20:59:51Z",
          "last_comment_at": "2026-07-23T14:51:45Z",
          "last_comment_author": "albrja"
        },
        {
          "number": 225,
          "created_at": "2026-07-23T17:06:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 226,
          "created_at": "2026-07-23T17:24:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 227,
          "created_at": "2026-07-23T17:34:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 228,
          "created_at": "2026-07-23T17:36:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 229,
          "created_at": "2026-07-23T17:44:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 230,
          "created_at": "2026-07-23T19:33:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-23T23:04:57Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ihmeuw/vivarium-suite",
    "host": "github.com",
    "name": "vivarium-suite",
    "owner": "ihmeuw"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 67,
      "inputs": {
        "security": 48,
        "vitality": 94,
        "community": 36,
        "governance": 82,
        "engineering": 61
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 94,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "commits_last_year": 915,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 52
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "52/52 weeks with commits",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 52
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "915 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 915
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "vivarium-fuzzy-checker-v0.2.1",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 36,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 2,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (BSD-3-Clause)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "BSD-3-Clause"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 82,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "good",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "bus_factor": 3,
              "contributors_sampled": 21,
              "top_contributor_share": 0.215
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "3 contributor(s) cover half of all commits",
                "points": 36,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 22% of commits",
                "points": 17.7,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 22
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "21 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 83,
            "inputs": {
              "merged_prs": 194,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 26
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "194/220 decided PRs merged",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 194,
                      "decided": 220
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 8/11 approved changesets -- score normalized to 7",
                "points": 10.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "followers": 170,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "ihmeuw",
              "public_repos": 203,
              "account_age_days": 4789
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "170 followers of ihmeuw",
                "points": 16.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 170,
                      "login": "ihmeuw"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "203 public repos, account ~13 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 203
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "vivarium-engine",
                "vivarium-artifact",
                "vivarium-profiling",
                "vivarium-validation",
                "vivarium-build-utils",
                "vivarium-config-tree",
                "vivarium-gbd-mapping",
                "vivarium-dependencies"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "8 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 8,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "65 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 65
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 61,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "5 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 48,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 48,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 8/11 approved changesets -- score normalized to 7",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 5
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 68,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.82,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 6633
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "82 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 82,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [
                "libs/artifact/Makefile",
                "libs/artifact/docs/Makefile",
                "libs/build-utils/Makefile",
                "libs/cluster-tools/Makefile",
                "libs/cluster-tools/docs/Makefile",
                "libs/config-tree/Makefile",
                "libs/config-tree/docs/Makefile",
                "libs/dependencies/Makefile",
                "libs/engine/Makefile",
                "libs/engine/docs/Makefile",
                "libs/fuzzy-checker/Makefile",
                "libs/fuzzy-checker/docs/Makefile",
                "libs/gbd-mapping/Makefile",
                "libs/gbd-mapping/docs/Makefile",
                "libs/profiling/Makefile",
                "libs/public-health/Makefile",
                "libs/public-health/docs/Makefile",
                "libs/pytest-vivarium/Makefile",
                "libs/pytest-vivarium/docs/Makefile",
                "libs/risk-distributions/Makefile",
                "libs/risk-distributions/docs/Makefile",
                "libs/validation/Makefile",
                "libs/validation/docs/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "libs/artifact/src/vivarium/artifact/py.typed",
                "libs/cluster-tools/src/vivarium/cluster_tools/py.typed",
                "libs/config-tree/src/vivarium/config_tree/py.typed",
                "libs/engine/src/vivarium/engine/py.typed",
                "libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed",
                "libs/pytest-vivarium/src/pytest_vivarium/py.typed",
                "libs/risk-distributions/src/vivarium/risk_distributions/py.typed",
                "libs/validation/src/vivarium/validation/py.typed"
              ],
              "agent_commit_share": 0.33,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "libs/artifact/Makefile, libs/artifact/docs/Makefile, libs/build-utils/Makefile, libs/cluster-tools/Makefile, libs/cluster-tools/docs/Makefile, libs/config-tree/Makefile, libs/config-tree/docs/Makefile, libs/dependencies/Makefile, libs/engine/Makefile, libs/engine/docs/Makefile, libs/fuzzy-checker/Makefile, libs/fuzzy-checker/docs/Makefile, libs/gbd-mapping/Makefile, libs/gbd-mapping/docs/Makefile, libs/profiling/Makefile, libs/public-health/Makefile, libs/public-health/docs/Makefile, libs/pytest-vivarium/Makefile, libs/pytest-vivarium/docs/Makefile, libs/risk-distributions/Makefile, libs/risk-distributions/docs/Makefile, libs/validation/Makefile, libs/validation/docs/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "libs/artifact/Makefile, libs/artifact/docs/Makefile, libs/build-utils/Makefile, libs/cluster-tools/Makefile, libs/cluster-tools/docs/Makefile, libs/config-tree/Makefile, libs/config-tree/docs/Makefile, libs/dependencies/Makefile, libs/engine/Makefile, libs/engine/docs/Makefile, libs/fuzzy-checker/Makefile, libs/fuzzy-checker/docs/Makefile, libs/gbd-mapping/Makefile, libs/gbd-mapping/docs/Makefile, libs/profiling/Makefile, libs/public-health/Makefile, libs/public-health/docs/Makefile, libs/pytest-vivarium/Makefile, libs/pytest-vivarium/docs/Makefile, libs/risk-distributions/Makefile, libs/risk-distributions/docs/Makefile, libs/validation/Makefile, libs/validation/docs/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "libs/artifact/src/vivarium/artifact/py.typed, libs/cluster-tools/src/vivarium/cluster_tools/py.typed, libs/config-tree/src/vivarium/config_tree/py.typed, libs/engine/src/vivarium/engine/py.typed, libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed, libs/pytest-vivarium/src/pytest_vivarium/py.typed, libs/risk-distributions/src/vivarium/risk_distributions/py.typed, libs/validation/src/vivarium/validation/py.typed",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "libs/artifact/src/vivarium/artifact/py.typed, libs/cluster-tools/src/vivarium/cluster_tools/py.typed, libs/config-tree/src/vivarium/config_tree/py.typed, libs/engine/src/vivarium/engine/py.typed, libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed, libs/pytest-vivarium/src/pytest_vivarium/py.typed, libs/risk-distributions/src/vivarium/risk_distributions/py.typed, libs/validation/src/vivarium/validation/py.typed"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "33 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 33,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 903070,
              "source_files_sampled": 485,
              "oversized_source_files": 7
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (libs/artifact/src/vivarium/artifact/py.typed, libs/cluster-tools/src/vivarium/cluster_tools/py.typed, libs/config-tree/src/vivarium/config_tree/py.typed, libs/engine/src/vivarium/engine/py.typed, libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed, libs/pytest-vivarium/src/pytest_vivarium/py.typed, libs/risk-distributions/src/vivarium/risk_distributions/py.typed, libs/validation/src/vivarium/validation/py.typed)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "libs/artifact/src/vivarium/artifact/py.typed, libs/cluster-tools/src/vivarium/cluster_tools/py.typed, libs/config-tree/src/vivarium/config_tree/py.typed, libs/engine/src/vivarium/engine/py.typed, libs/fuzzy-checker/src/vivarium/fuzzy_checker/py.typed, libs/pytest-vivarium/src/pytest_vivarium/py.typed, libs/risk-distributions/src/vivarium/risk_distributions/py.typed, libs/validation/src/vivarium/validation/py.typed",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "7/485 source files over 60KB",
                "points": 54.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 485,
                      "oversized": 7
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples",
                "notebooks"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples, notebooks",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples, notebooks"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index pypi:vivarium-engine@5.5.3; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T23:09:00.158533Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/i/ihmeuw/vivarium-suite.svg",
  "full_name": "ihmeuw/vivarium-suite",
  "license_state": "standard",
  "license_spdx": "BSD-3-Clause"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPyPI.