Skip to content

Add repos.yaml body map + repos_sync generator/drift-check#36

Merged
Jammy2211 merged 1 commit into
mainfrom
feature/repos-manifest
Jul 8, 2026
Merged

Add repos.yaml body map + repos_sync generator/drift-check#36
Jammy2211 merged 1 commit into
mainfrom
feature/repos-manifest

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

What

  • repos.yaml — the organism's body map: single source of repo identity (GitHub home, category, one-line role) for all 26 workspace repos. Per-organ policy stays with the organ (Heart's gating/noise config, Build's pre_build flags).
  • scripts/repos_sync.py--write regenerates the routing table in the workspace-root AGENTS.md and the owner map in PyAutoBrain/skills/WORKFLOW.md (between repos_sync markers); --check validates Heart's config/repos.yaml, pre_build.sh, ensure_workspace_labels.sh, and every local checkout's origin remote against the manifest. Exit 1 on drift.
  • AGENTS.md / ROUTING.md — one-line pointers to the manifest.

Why

Four hand-maintained repo lists had drifted: WORKFLOW.md still mapped PyAutoFit to rhayes777 and the labels script targeted three pre-org-migration owners, while everything now lives under PyAutoLabs (except autofit_workspace_developer, euclid_assistant, admin_jammy). The manifest + origin check makes this class of staleness self-detecting and is the scaling path for the routing table as repo count grows.

Companion PRs: PyAutoBrain (generated owner map), PyAutoHeart / PyAutoBuild (identity/policy split comments), admin_jammy (label-script owner fixes).

🤖 Generated with Claude Code

repos.yaml is the single source of repo IDENTITY (GitHub home, category,
one-line role) for every repo in the workspace. Per-organ POLICY stays where
it belongs (PyAutoHeart/config/repos.yaml, PyAutoBuild/pre_build.sh).

scripts/repos_sync.py --write regenerates the routing table in the
workspace-root AGENTS.md and the owner map in PyAutoBrain/skills/WORKFLOW.md
between repos_sync markers; --check validates Heart config, pre_build.sh,
ensure_workspace_labels.sh and every local checkout's origin remote against
the manifest.

Replaces four hand-maintained repo lists that had drifted (WORKFLOW.md and
the labels script still pointed at pre-org-migration rhayes777/Jammy2211
owners).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 8, 2026 10:11
@Jammy2211 Jammy2211 merged commit 126fc1f into main Jul 8, 2026
@Jammy2211 Jammy2211 deleted the feature/repos-manifest branch July 8, 2026 10:11
Jammy2211 added a commit to PyAutoLabs/PyAutoBrain that referenced this pull request Jul 8, 2026
The hand-maintained owner table was stale (rhayes777/Jammy2211 owners from
before the PyAutoLabs org migration). The section is now generated between
repos_sync markers by PyAutoMind/scripts/repos_sync.py --write, from the
repos.yaml body map (PyAutoLabs/PyAutoMind#36).

Co-authored-by: Jammy2211 <JNightingale2211@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Jammy2211 added a commit to PyAutoLabs/PyAutoHeart that referenced this pull request Jul 8, 2026
config/repos.yaml stays Heart policy (what to poll, what gates, noise globs);
repo identity (name/owner) is now drift-checked against the
PyAutoMind/repos.yaml body map by repos_sync.py --check
(PyAutoLabs/PyAutoMind#36).

Co-authored-by: Jammy2211 <JNightingale2211@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Jammy2211 added a commit to PyAutoLabs/PyAutoBuild that referenced this pull request Jul 8, 2026
The run_workspace names are drift-checked against the PyAutoMind/repos.yaml
body map (repos_sync.py --check); the per-repo flags remain Build policy and
live only here (PyAutoLabs/PyAutoMind#36).

Co-authored-by: Jammy2211 <JNightingale2211@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a single-source “body map” (repos.yaml) for workspace repo identity and adds a generator/drift-check script (scripts/repos_sync.py) to keep downstream repo lists and generated doc blocks consistent. It also updates existing workflow docs to point contributors at the manifest as the canonical repo list.

Changes:

  • Add repos.yaml manifest defining repo GitHub home, category, and role.
  • Add scripts/repos_sync.py to regenerate marked doc blocks and drift-check other repo lists + local origin remotes.
  • Update AGENTS.md and ROUTING.md to reference the new manifest.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

File Description
scripts/repos_sync.py New generator + drift-checker for manifest-driven repo identity and doc blocks.
repos.yaml New canonical repo identity manifest (categories + repo entries).
ROUTING.md Adds pointer to repos.yaml as canonical repo list.
AGENTS.md Adds “Body map” section describing the manifest + sync script.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread scripts/repos_sync.py
Comment on lines +8 to +11
Usage:
python3 repos_sync.py [--check] # drift checks only (default)
python3 repos_sync.py --write # regenerate doc blocks, then check
python3 repos_sync.py --root <dir> # override the workspace root
Comment thread scripts/repos_sync.py
Comment on lines +210 to +214
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--write", action="store_true")
parser.add_argument("--check", action="store_true")
parser.add_argument("--root", type=Path, default=None)
args = parser.parse_args()
Comment thread scripts/repos_sync.py
Comment on lines +124 to +125
if not heart_yaml.exists():
return [f"missing {heart_yaml} (skipped)"] if False else []
Comment thread scripts/repos_sync.py
Comment on lines +86 to +88
libraries = [n for n, r in repos.items() if r["category"] == "library"]
ws_cats = ("workspace", "workspace_test", "howto", "pipeline")
workspaces = [n for n, r in repos.items() if r["category"] in ws_cats]
Comment thread scripts/repos_sync.py
Comment on lines +158 to +171
block = re.search(r"REPOS=\((.*?)\)", script.read_text(), re.DOTALL)
problems = []
for slug in block.group(1).split():
owner, _, name = slug.partition("/")
if name not in repos:
problems.append(
f"ensure_workspace_labels targets '{slug}' — '{name}' not in the manifest"
)
elif slug != repos[name]["github"]:
problems.append(
f"ensure_workspace_labels targets '{slug}', manifest says "
f"'{repos[name]['github']}'"
)
return problems
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants