Skip to content

List the monitored repos explicitly, in repos.yml - #11

Merged
tschm merged 1 commit into
mainfrom
feat/explicit-repo-list
Aug 30, 2026
Merged

List the monitored repos explicitly, in repos.yml#11
tschm merged 1 commit into
mainfrom
feat/explicit-repo-list

Conversation

@tschm

@tschm tschm commented Aug 30, 2026

Copy link
Copy Markdown
Member

Prep for making this repo public, and the config change that makes it safe to.

The fleet is now an explicit list

It used to be assembled two ways at once, and neither was under your control: a
whole-org GitHub sweep decided membership from the org side, and a directory
walk under one mounted root decided it from the disk side. Both are replaced by
repos.yml:

repos:
  - path: ~/repos/jebel-quant/rhiza      # owner/name from the origin remote
  - path: ~/repos/cvxgrp/cvxsimulator
  - repo: Jebel-Quant/actions            # monitored, not checked out here

scripts/gen-repos.py turns it into docker-compose.repos.yml — one read-only
bind mount per checkout at the canonical /repos/<owner>/<name>, plus the
matching JQ_REPOS. up.sh regenerates it every run, so edit repos.yml, run
up.sh
is the whole workflow. An unlisted repo is not merely filtered out; it
is never visible to the container.

Both halves of the collector read that one list, so the GitHub panels and the
working-copy panels cannot disagree about who is in scope. Gone: JQ_ORGS,
JQ_SCAN_DEPTH, JQ_REPO_ROOT_HOST, _find_clones, Config.wants().

The local scan still checks each mount's origin, so a wrong path in repos.yml
is refused rather than filing one repo's dirty files under another's name.

Server stack

No checkouts there to derive a list from, so it keeps naming its fleet directly
in JQ_REPOS — now required, so it refuses to start rather than serving an
empty board.

Going public

repos.yml and the generated override are gitignored: they describe the folder
layout of one machine. Added the house MIT LICENSE. History is clean — .env
was never committed, and the only token-shaped strings are github_pat_...
placeholders in docs.

Verification

Ran against the live stack, not just the tests:

repos exported:            Jebel-Quant/{actions,jquantstats,rhiza}
repos with a working copy:  Jebel-Quant/{actions,rhiza}
local refresh:              0.1s

jquantstats correctly has GitHub panels and no local row; monitoring itself
is absent only because JQ_PUBLIC_ONLY=true and it is still private.

38 tests pass (13 new in collector/tests/test_fleet.py, covering the local
half, the GitHub half and the generator), ruff clean, both dashboards valid. CI
now generates a repos.yml the way a new user would and checks the merged
compose files parse.

🤖 Generated with Claude Code

The fleet was assembled two ways at once, and neither was under your control.
A whole-org GitHub sweep decided membership from the org side - a new repo
appeared unasked, and a shared org like cvxgrp dragged in 100+ repos that were
not yours - while a directory walk under one mounted root decided it from the
disk side, admitting any checkout that happened to sit there with an origin
that looked right.

Both are replaced by repos.yml: one entry per repo, `path` to a checkout with
owner/name read from its origin, or a bare `repo:` for one you have not cloned.
scripts/gen-repos.py turns it into docker-compose.repos.yml - a read-only bind
mount per checkout at the canonical /repos/<owner>/<name>, plus the matching
JQ_REPOS - so an unlisted repo is not merely filtered out, it is never visible
to the container. Both halves of the collector read that one list, so the
GitHub panels and the working-copy panels cannot disagree about who is in
scope.

The server stack keeps naming its fleet in JQ_REPOS, since there are no
checkouts there to derive it from, and now refuses to start without it rather
than serving an empty board.

repos.yml and the generated override are gitignored: they describe the folder
layout of one machine. That, plus the MIT license, is what this repo needed to
be public.

Verified against the live stack: 3 repos exported, 2 with working copies, local
refresh 0.1s.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@tschm
tschm merged commit 0d70187 into main Aug 30, 2026
4 checks passed
@tschm
tschm deleted the feat/explicit-repo-list branch August 30, 2026 06:19
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.

1 participant