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-26046: External Product Repos as Research Directories


title: External Product Repos as Research Directories authors:


ADR-26046: External Product Repos as Research Directories

Date

2026-04-06

Status

proposed

Context

This repo contains directories of nested git repositories — external products cloned in for source-level comparative research. These directories must be excluded from parent git tracking, validation scripts, and documentation builds.

Their exclusion paths are defined independently in multiple places: git tracking config, the shared path utility module consumed by all validation scripts, the documentation build config, and whichever script manages the repos. There is no single place that answers “which directories contain external product repos?” — you must grep for the path across the codebase.

When the repo was restructured to separate component layers from assembled products, 3 of the 4 exclusion references broke silently. The paths they pointed to no longer existed, but no validation caught it. The break was only discovered manually. This is a structural fragility: any future rename or move of a research directory repeats the same failure mode.

The shared path utility module (paths.py) contains an acknowledged techdebt note: “Exclusion constants will migrate to .vadocs/validation/”. The external product repo case is the first and only consumer of those constants — making it the trigger to resolve the debt.

ADR-26020 governs the hub-and-spoke ecosystem model but does not address the case of external git repos cloned into this repo. As more products are added for source-level study, the problem compounds.

Decision

1. Registry as Single Source of Truth

The complete set of directories containing nested git repos of external products will be maintained in a single registry config. The registry is the authoritative record of “which directories contain external product repos” and is the only place these paths are defined.

2. All Consumers Read from the Registry

Every system that needs to exclude a research directory — validation scripts, documentation builds, git tracking, management operations — will obtain the path from the registry. No consumer may define its own copy of a research directory path.

3. Safe Relocation Is Supported

When a research directory is renamed, all consumers must be updated atomically. A mechanism exists to perform this update as a single operation, verifying that every consumer resolves correctly after the change.

4. Drift Is Detected Before Commit

Any manual edit to exclusion lists that is not reflected in the registry will be caught by a pre-commit validation hook.

Consequences

Positive

Negative / Risks

Alternatives

Keep hardcoded constants (status quo)

Rejected — the rename proved this is fragile. Every structural change to the repo layout silently breaks references in .gitignore, paths.py, and myst.yml.

Put config in pyproject.toml

Rejected — ADR-26029 reserves pyproject.toml for tool configuration (linters, formatters, test runners). This is an operational governance concern, not a tool config.

Put config in .vadocs/types/

Rejected — .vadocs/types/ is for document-type configs (ADR, evidence). External product repos are not a document type — they are an infrastructure concern, not a content type.

References

Participants

  1. Vadim Rudakov

  2. Qwen Code (ADR drafting, context analysis)