Overview
The venv-startup health table (scripts/health_sync.sh) dumps raw git status --porcelain per repo — ~1,000 lines on a typical day, almost all regenerated dataset artifacts. Heart already classifies real-vs-noise (heart/noise.py + noise_globs in config/repos.yaml) for the deep census, but the startup dashboard never applies it, burying the handful of real items. This wires the existing classifier into the dashboard, and adds a hygiene nudge that keeps /repo_cleanup running semi-regularly.
Plan
- Reuse
heart.noise classification in the startup table: MOD/UNTR count real files only, a new NOISE column carries the rest.
- List only real files in the "Dirty files:" section; collapse noise to a one-line per-repo summary;
health --all restores the full raw listing.
- Extend
noise_globs for the classes the 2026-07-09 sweep found slipping through (*.npy, tracer_imaging/point.json, point-dataset .csv, dataset.json).
- Graceful fallback to today's raw output when the classifier is unavailable.
- Hygiene nudge: warn when the last
/repo_cleanup audit stamp (~/.cache/pyauto/repo_cleanup_last_audit.json) is missing or >7 days old.
Detailed implementation plan
Affected Repositories
Branch Survey
| Repository |
Current Branch |
Dirty? |
| ./PyAutoHeart |
main |
clean |
Suggested branch: feature/health-sync-noise-filter
Implementation Steps
heart/noise.py: add split_lines(porcelain_lines, noise_globs) -> (real_lines, noise_lines) preserving porcelain codes; reimplement classify_dirty on top of it (behavior unchanged). Add --batch <in-dir> --real-out <out-dir> CLI mode: per porcelain file <in-dir>/<name>, write real-only lines to <out-dir>/<name>, print <name>\t<real_mod>\t<real_untr>\t<noise>. One python call for all repos keeps the <10s budget.
config/repos.yaml: extend noise_globs with *.npy, *tracer_*.json, *point_dataset*.csv, *dataset.json.
scripts/health_sync.sh: two passes — gather (existing loop, no printing; porcelain to $tmp/p/<name>), one python3 -m heart.noise --batch call, then print. Table gains NOISE column; * flag only when real>0, new ~ flag when noise>0; follow-up categorisation keeps total counts (conservative for pulls). Dirty listing = real lines + noise summary line; --all = full raw. Python failure → raw fallback with (noise classification unavailable) note. After the table: hygiene nudge when the audit stamp is stale (${PYAUTO_CLEANUP_NUDGE_DAYS:-7}).
scripts/health.sh: route a leading-dash first arg (health --all) to _health_sync.
tests/test_noise.py: split_lines code preservation, rename handling, batch round-trip via tmp_path, classify_dirty regression.
Key Files
heart/noise.py — classifier; gains line-level + batch API
scripts/health_sync.sh — the startup dashboard
scripts/health.sh — dispatcher
config/repos.yaml — noise_globs
tests/test_noise.py — coverage
Follow-up (separate task)
One-line edit to PyAutoBrain/skills/repo_cleanup — "write the audit stamp after the audit phase" — deferred: PyAutoBrain checkout is claimed by clone-mitosis-agent. Until then the stamp is written manually by sweep runs (2026-07-09's run wrote one).
Original Prompt
Click to expand starting prompt
Noise-filter the health_sync startup table + recurring repo_cleanup cadence
Type: feature
Target: PyAutoHeart
Difficulty: small
Autonomy: supervised
Priority: normal
Original request (verbatim)
When I open my virtual enviroment and it runs health, I still get a lot of
stuff: [~1,000-line dirty-file dump across HowTo*/workspace repos] […]
Is there an agent in PyAutoBrain whose job it is to clean this up? […]
I normally just run the health agent and let it do a "full" census of
everything so I think it should be catgching this stuff too?
do both, and make sure theres a plant hat will ensure repo_cleanup runs
semi regularly
Context
The venv-startup health table comes from PyAutoHeart/scripts/health_sync.sh
(_health_sync), which dumps raw git status --porcelain per repo. Heart
already has a real-vs-noise classifier — heart/noise.py + noise_globs in
config/repos.yaml — that matches essentially all of the ~1,000 regenerated
dataset artifacts flooding the output (*.fits, *data.json, *model.json,
*tracer.json, *.png, *test_report.md, …). The deep census classifies;
the startup dashboard doesn't. The handful of real items (staged notebook
deletions in autolens_workspace_test, personal notes, untracked AGENTS.md
files) are buried.
Scope
- Make
health_sync.sh reuse the heart.noise classification: MOD/UNTR
columns show noise-collapsed counts (e.g. 315 dirty → 313 noise, 2 real),
and the "Dirty files:" listing shows real files only, with a per-repo
one-line noise summary.
- Add an
--all flag to restore today's full raw listing.
- Keep the table fast (classification is fnmatch on porcelain already in hand;
no extra git calls) and keep working when heart.noise/PyYAML is
unavailable (fall back to raw counts, flagged as unclassified).
- Update/extend Heart tests covering the sync table if any exist.
- Cadence leg: establish a semi-regular
/repo_cleanup cadence — a
scheduled weekly audit-only run (read-only phase 1 report, e.g. alongside
the existing morning-health crons) that surfaces the report for the user;
mutations stay interactive per the skill's confirmation rules.
Overview
The venv-startup
healthtable (scripts/health_sync.sh) dumps rawgit status --porcelainper repo — ~1,000 lines on a typical day, almost all regenerated dataset artifacts. Heart already classifies real-vs-noise (heart/noise.py+noise_globsinconfig/repos.yaml) for the deep census, but the startup dashboard never applies it, burying the handful of real items. This wires the existing classifier into the dashboard, and adds a hygiene nudge that keeps/repo_cleanuprunning semi-regularly.Plan
heart.noiseclassification in the startup table: MOD/UNTR count real files only, a new NOISE column carries the rest.health --allrestores the full raw listing.noise_globsfor the classes the 2026-07-09 sweep found slipping through (*.npy,tracer_imaging/point.json, point-dataset.csv,dataset.json)./repo_cleanupaudit stamp (~/.cache/pyauto/repo_cleanup_last_audit.json) is missing or >7 days old.Detailed implementation plan
Affected Repositories
Branch Survey
Suggested branch:
feature/health-sync-noise-filterImplementation Steps
heart/noise.py: addsplit_lines(porcelain_lines, noise_globs) -> (real_lines, noise_lines)preserving porcelain codes; reimplementclassify_dirtyon top of it (behavior unchanged). Add--batch <in-dir> --real-out <out-dir>CLI mode: per porcelain file<in-dir>/<name>, write real-only lines to<out-dir>/<name>, print<name>\t<real_mod>\t<real_untr>\t<noise>. One python call for all repos keeps the <10s budget.config/repos.yaml: extendnoise_globswith*.npy,*tracer_*.json,*point_dataset*.csv,*dataset.json.scripts/health_sync.sh: two passes — gather (existing loop, no printing; porcelain to$tmp/p/<name>), onepython3 -m heart.noise --batchcall, then print. Table gains NOISE column;*flag only when real>0, new~flag when noise>0; follow-up categorisation keeps total counts (conservative for pulls). Dirty listing = real lines + noise summary line;--all= full raw. Python failure → raw fallback with(noise classification unavailable)note. After the table: hygiene nudge when the audit stamp is stale (${PYAUTO_CLEANUP_NUDGE_DAYS:-7}).scripts/health.sh: route a leading-dash first arg (health --all) to_health_sync.tests/test_noise.py:split_linescode preservation, rename handling, batch round-trip viatmp_path,classify_dirtyregression.Key Files
heart/noise.py— classifier; gains line-level + batch APIscripts/health_sync.sh— the startup dashboardscripts/health.sh— dispatcherconfig/repos.yaml—noise_globstests/test_noise.py— coverageFollow-up (separate task)
One-line edit to
PyAutoBrain/skills/repo_cleanup— "write the audit stamp after the audit phase" — deferred: PyAutoBrain checkout is claimed byclone-mitosis-agent. Until then the stamp is written manually by sweep runs (2026-07-09's run wrote one).Original Prompt
Click to expand starting prompt
Noise-filter the health_sync startup table + recurring repo_cleanup cadence
Type: feature
Target: PyAutoHeart
Difficulty: small
Autonomy: supervised
Priority: normal
Original request (verbatim)
Context
The venv-startup
healthtable comes fromPyAutoHeart/scripts/health_sync.sh(
_health_sync), which dumps rawgit status --porcelainper repo. Heartalready has a real-vs-noise classifier —
heart/noise.py+noise_globsinconfig/repos.yaml— that matches essentially all of the ~1,000 regenerateddataset artifacts flooding the output (
*.fits,*data.json,*model.json,*tracer.json,*.png,*test_report.md, …). The deep census classifies;the startup dashboard doesn't. The handful of real items (staged notebook
deletions in autolens_workspace_test, personal notes, untracked AGENTS.md
files) are buried.
Scope
health_sync.shreuse theheart.noiseclassification: MOD/UNTRcolumns show noise-collapsed counts (e.g.
315 dirty → 313 noise, 2 real),and the "Dirty files:" listing shows real files only, with a per-repo
one-line noise summary.
--allflag to restore today's full raw listing.no extra git calls) and keep working when
heart.noise/PyYAML isunavailable (fall back to raw counts, flagged as unclassified).
/repo_cleanupcadence — ascheduled weekly audit-only run (read-only phase 1 report, e.g. alongside
the existing morning-health crons) that surfaces the report for the user;
mutations stay interactive per the skill's confirmation rules.