Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

ADR-26049: Unified Manifest for External Repository Management


title: Unified Manifest for External Repository Management authors:


ADR-26049: Unified Manifest for External Repository Management

Date

2026-04-21

Status

accepted

Context

Previously, external product repositories used for research were managed through a decoupled registry system. Users would register a directory and then setup (clone) repositories into it.

This approach had several flaws:

  1. Lack of Synchronization: There was no central record of which specific repositories should exist in which directories. The registry only tracked directories, not the content within them.

  2. Environment Drift: Collaborators could have different sets of repositories cloned, leading to “works on my machine” issues when referencing external source code.

  3. Manual Cleanup: Removing a repository from the “desired” set required manual deletion and manual registry updates.

  4. Consumer Desynchronization: Files like .gitignore and myst.yml (used to exclude external repos from git/docs) were updated during registration but could easily drift if directories were moved or renamed manually.

Decision

We are moving to a State-Based Synchronization model. The central authority for the external repository state is now a unified manifest file: .vadocs/inventory/manage_external_repos.json.

The Unified Manifest (SSoT)

The manifest combines two previously separate concerns:

  1. Registry: Which directories are designated for external repos (and their descriptions/consumers).

  2. Inventory: Which specific git repositories (URL, name, description) belong in those directories.

The Synchronization Mechanism

We implement a sync command in tools/scripts/manage_external_repos.py that follows a strict reconciliation loop:

  1. Discovery: The tool maps the Desired State (manifest), the Registered State (manifest), and the Actual State (filesystem scan for .git folders).

  2. Delta Calculation: It identifies discrepancies:

    • Missing: Repos in manifest but not on disk.

    • Orphans: Repos on disk but not in manifest.

    • Ghosts: Directories registered in the manifest but missing from the filesystem.

  3. Resolution: The user is prompted to resolve orphans (Remove/Ignore) and ghosts (Unregister/Keep).

  4. Execution: The tool performs the necessary git clone, directory registration, or deletion to align the actual state with the desired state.

Key Feature Additions

Consequences

Positive

Negative / Risks

Alternatives

References

Participants

  1. Vadim Rudakov