Overview
autolens_profiling's runtime cells now record and flag pinned likelihood/evidence drift instead of crashing (autolens_profiling#54 / PR #55): every result JSON carries pinned_expected and pinned_drift (list of {label, expected, got, rel_diff, rtol}; empty = matched; pinned_expected: null = no pin). Boundary rule (autolens_profiling/results/notes/design_lock_in.md): profiling records and flags, autolens_workspace_test adjudicates. This task closes the loop — Heart's vitals surface the flags, since a drifted likelihood is a health finding either way (library regression or stale pin) and the profiling baselines are non-comparable until resolved. Autonomy: --auto, effective level supervised.
Plan
- New collector
heart/checks/profiling_drift.py (observer-only): scan ../autolens_profiling/results/**/*.json for non-empty pinned_drift, write ~/.pyauto-heart/profiling_drift.json (count + per-finding cell path, instrument, label, expected/got, PyAutoLens version) via state.atomic_write_json, print the standard glyph status line.
- Wire into the snapshot:
heart/state.py reads the JSON; heart/tick.sh invokes the module (skip gracefully when the profiling repo is absent, mirroring the script_timing skip).
- Readiness leg:
readiness.compute() adds a YELLOW reason per drifted cell (capped list + count), mirroring script-timing's shape.
- Dashboard: register a
profiling_drift section.
- Tests:
tests/test_profiling_drift.py (synthetic results trees: clean / drifted / no-pin / repo-absent) + a readiness case.
Detail
Affected Repositories
- PyAutoHeart (primary; reads autolens_profiling artifacts read-only)
Branch Survey
| Repository |
Current Branch |
Dirty? |
| ./PyAutoHeart |
main |
clean |
Suggested branch: feature/profiling-drift-check · Classification: Library (organism repo) · Worktree: ~/Code/PyAutoLabs-wt/profiling-drift-check/
Key Files
heart/checks/profiling_drift.py (new), heart/state.py, heart/tick.sh, heart/readiness.py, heart/dashboard.py, tests/test_profiling_drift.py (new)
Original Prompt
PyAutoMind feature/pyautoheart/profiling_drift_check.md (origin: user request 2026-07-08, in-conversation during polish phase 2).
Overview
autolens_profiling's runtime cells now record and flag pinned likelihood/evidence drift instead of crashing (autolens_profiling#54 / PR #55): every result JSON carries
pinned_expectedandpinned_drift(list of{label, expected, got, rel_diff, rtol}; empty = matched;pinned_expected: null= no pin). Boundary rule (autolens_profiling/results/notes/design_lock_in.md): profiling records and flags, autolens_workspace_test adjudicates. This task closes the loop — Heart's vitals surface the flags, since a drifted likelihood is a health finding either way (library regression or stale pin) and the profiling baselines are non-comparable until resolved. Autonomy:--auto, effective levelsupervised.Plan
heart/checks/profiling_drift.py(observer-only): scan../autolens_profiling/results/**/*.jsonfor non-emptypinned_drift, write~/.pyauto-heart/profiling_drift.json(count + per-finding cell path, instrument, label, expected/got, PyAutoLens version) viastate.atomic_write_json, print the standard glyph status line.heart/state.pyreads the JSON;heart/tick.shinvokes the module (skip gracefully when the profiling repo is absent, mirroring the script_timing skip).readiness.compute()adds a YELLOW reason per drifted cell (capped list + count), mirroring script-timing's shape.profiling_driftsection.tests/test_profiling_drift.py(synthetic results trees: clean / drifted / no-pin / repo-absent) + a readiness case.Detail
Affected Repositories
Branch Survey
Suggested branch:
feature/profiling-drift-check· Classification: Library (organism repo) · Worktree:~/Code/PyAutoLabs-wt/profiling-drift-check/Key Files
heart/checks/profiling_drift.py(new),heart/state.py,heart/tick.sh,heart/readiness.py,heart/dashboard.py,tests/test_profiling_drift.py(new)Original Prompt
PyAutoMind
feature/pyautoheart/profiling_drift_check.md(origin: user request 2026-07-08, in-conversation during polish phase 2).