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-26043: Ecosystem Package Boundary


title: Ecosystem Package Boundary date: 2026-03-14 tags:


ADR-26043: Ecosystem Package Boundary

Date

2026-03-14

Status

proposed

Context

As of March 2026, the repository’s governance tooling lives in tools/scripts/ as a flat collection of 16 standalone Python scripts. These scripts share configuration files (adr_config.yaml, evidence.config.yaml), a common path module (paths.py), and overlapping concerns — yet they have no package structure, no shared abstractions, and no explicit boundaries between concerns.

This flat layout creates three problems as the ecosystem grows:

  1. Shotgun surgery — adding a new document type (e.g., skill) requires touching a validator script, its config, the path constants, and potentially a fixer — all in the same flat directory with no grouping to guide discovery.

  2. No reuse boundary — other ecosystem projects (vadocs, mentor_generator) cannot import governance logic without copying scripts. There is no installable package with a public API.

  3. Concern bleeding — doc content validation (frontmatter, sections, cross-refs), git policy enforcement (commit messages, changelog), and repo scaffolding (pre-commit setup, jupytext sync) are interleaved in one directory. A developer working on commit message validation must navigate past 14 unrelated scripts.

The A-26009 Compass analysis established context engineering as the core design principle. A well-bounded package is itself a context engineering artifact — it tells agents and humans where to look and what belongs together.

Decision

We establish vadocs as an installable Python package that consolidates all repository governance tooling. The package is organized by concern, not by operation layer.

1. Package Structure

Each concern directory is self-contained: its validators, fixers, and helpers live together. When a new document type is added, all related logic goes into docs/ — one directory, one concern. prepare_prompt.py stays outside vadocs — it belongs to the AI system’s prompt layer, not to repository governance.

2. Package Boundary Rule

A script belongs in vadocs if it enforces repository governance: document structure, content quality, git policy, or development environment consistency. Content transformation tools (like extract_html_text.py) belong when they serve the evidence pipeline — the document lifecycle from acquisition to validation.

Scripts that serve the AI system architecture (prompt preparation, model interaction) stay outside vadocs as standalone tools.

3. Installability

vadocs is an installable Python package (pip install -e . / uv pip install -e .) with a pyproject.toml defining entry points. Pre-commit hooks invoke vadocs via its CLI entry point rather than calling scripts directly. This enables other ecosystem projects to depend on vadocs for shared governance logic.

4. Configuration Inheritance

vadocs loads configuration through the hub-and-spoke model established in ADR-26042. Config paths are resolved relative to the repository root, not the package installation path.

5. Org-Agnostic Design

The package contains no hardcoded organization-specific values. Repository name, ADR prefixes, directory paths, and tag vocabularies are loaded from configuration. This allows vadocs to govern any repository that provides the expected config structure.

Consequences

Positive

Negative / Risks

Alternatives

References

Participants

  1. Vadim Rudakov

  2. Claude (claude-opus-4-6, AI Engineering Advisor)