Summary
Scope the weekly GitHub org report to the curated core repos (config/core-repos.txt) instead of discovering every repo in the org.
Problem
The weekly report cron runs report.py --org rossoctl, and report.py discovers repos via gh repo list rossoctl — every repo in the org, archived and non-core alike. The org has since adopted a core-repo allowlist (config/core-repos.txt), exposed to shell programs through get_core_repos() / is_core_repo() in the shared library. The report is the only automation surface that still ignores the allowlist, so it reports on repos nobody is committing to maintain.
Proposal
Two layers, mirroring the scanner/fixer convention (a .sh wrapper in scripts/ sources the shared library, then shells out to the tool):
- Report generator (
agent-skills): add an optional --repos flag (owner-qualified names) to report.py and epic-tracker.py. When present, use exactly those repos and skip org-wide discovery; when absent, behavior is unchanged (backward compatible). report.py passes --repos through to epic-tracker.py so Active Epics is scoped consistently. The scripts stay OpenClaw-agnostic — they know nothing about the allowlist or the host.
- Wrapper (
automation): new scripts/weekly-report.sh that sources the shared library, resolves the org via load_org_profile, gets the list via get_core_repos, and invokes the generator with --org <org> --repos <core repos>. The weekly-report cron switches to calling this wrapper.
This keeps core-repos.txt (via the shared library) the single source of truth for "which repos"; the report follows the allowlist with no code change if it grows or shrinks.
Non-goals
Acceptance
- With
--repos present, the report body and Active Epics reflect only the repos in core-repos.txt; no gh repo list call is made.
- With
--repos absent, report.py / epic-tracker.py output is unchanged (org-wide).
weekly-report.sh follows the existing program-wrapper conventions and sources the shared library for the repo set.
- The weekly-report cron invokes the wrapper and posts a core-scoped report.
Summary
Scope the weekly GitHub org report to the curated core repos (
config/core-repos.txt) instead of discovering every repo in the org.Problem
The weekly report cron runs
report.py --org rossoctl, andreport.pydiscovers repos viagh repo list rossoctl— every repo in the org, archived and non-core alike. The org has since adopted a core-repo allowlist (config/core-repos.txt), exposed to shell programs throughget_core_repos()/is_core_repo()in the shared library. The report is the only automation surface that still ignores the allowlist, so it reports on repos nobody is committing to maintain.Proposal
Two layers, mirroring the scanner/fixer convention (a
.shwrapper inscripts/sources the shared library, then shells out to the tool):agent-skills): add an optional--reposflag (owner-qualified names) toreport.pyandepic-tracker.py. When present, use exactly those repos and skip org-wide discovery; when absent, behavior is unchanged (backward compatible).report.pypasses--reposthrough toepic-tracker.pyso Active Epics is scoped consistently. The scripts stay OpenClaw-agnostic — they know nothing about the allowlist or the host.automation): newscripts/weekly-report.shthat sources the shared library, resolves the org viaload_org_profile, gets the list viaget_core_repos, and invokes the generator with--org <org> --repos <core repos>. The weekly-report cron switches to calling this wrapper.This keeps
core-repos.txt(via the shared library) the single source of truth for "which repos"; the report follows the allowlist with no code change if it grows or shrinks.Non-goals
Acceptance
--repospresent, the report body and Active Epics reflect only the repos incore-repos.txt; nogh repo listcall is made.--reposabsent,report.py/epic-tracker.pyoutput is unchanged (org-wide).weekly-report.shfollows the existing program-wrapper conventions and sources the shared library for the repo set.