Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions active.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,5 @@
# Active Tasks

## autohands-firewall-allowlist
- issue: https://github.com/PyAutoLabs/PyAutoMind/issues/134
- status: PRs OPEN, awaiting review/merge. PyAutoMind#135 (c284d69 + Mind state) and PyAutoBrain#202 (b54ff0f), both on `claude/autohands-firewall-allowlist-1dzeuw`. Cloud session, no worktree.
- prs: https://github.com/PyAutoLabs/PyAutoMind/pull/135 (closes #134) / https://github.com/PyAutoLabs/PyAutoBrain/pull/202
- merge-order: NONE required — the two PRs are independent and neither changes runtime behaviour. But the gate only reads green once BOTH land: Mind#135 declares the six PyAutoHands surfaces, Brain#202 removes the seventh finding. Merging either alone leaves `repos_sync.py --check` exiting 1.
- review: ReviewSurface CLEAN on both (review faculty, run per-checkout with `--repo` since a cloud session has no worktree for `--task`). PyAutoMind carries a `no-test-changes` risk flag — expected, the allowlist is a data table and PyAutoMind's suite has no firewall coverage; the behavioural proof is the negative probes, as in the PyAutoMind#115 precedent.
- EXACTNESS AUDIT (do this on any future allowlist growth): each of the six entries was diffed against the tokens ACTUALLY present in that file — all six EXACT, zero over-grants. An over-broad entry silently pre-authorises a fact that is not there yet and reads green either way, so "check passes" does not catch it.
- what it fixes: the `tenant firewall (organ code)` leg of `repos_sync.py --check` exited 1, reddening the whole body-map drift gate. Every other leg passed.
- SCOPE GREW BY ONE: the prompt names six PyAutoHands files; the live check reports SEVEN. `PyAutoBrain/tests/test_health_conductor.py` landed with the health-conductor STALE fix (PyAutoBrain#198/#201) AFTER the prompt was written. Green is unreachable without it — do not read the prompt's "six" as the full set.
- judgment (six PyAutoHands files → ALLOWLIST): all twelve tokens are prose provenance in comments/docstrings citing PyAutoLabs/PyAutoFit#1452 (the 2026-07-30 unbatched multi-start OOM that killed two nightly integrate runs) and PyAutoFit#1439, plus the autogalaxy_workspace script the OOM came from. NO code path is keyed on a repo name, so there is nothing to parameterise, and an issue number cannot be derived. This is the "register the intentional surface" case of PyAutoMind#114, NOT the "the code could derive it" case of PyAutoBrain#193.
- NO PyAutoHands FILE CHANGED — the facts were already intentional; only the declaration was missing. The diff is PyAutoMind (allowlist) + PyAutoBrain (fixture) only.
- judgment (seventh, PyAutoBrain → REFACTOR, no allowlist growth): the names were the repo half of stubbed `"<repo>: <problem>"` Heart reason strings and NO assertion reads them (the only reason-touching assertions are self-referential or counts). Pure filler → `library-a`/`library-b` + a comment fixing the convention. Same judgment as the `checkout_a/b/c` fixture rename in PyAutoBrain#193.
- human decision 2026-08-05: KEEP the citation in `check_search_memory.py:136` — the one token that is not a comment but a printed failure message a workspace developer sees. The issue pointer is the most useful part of that message; the file is allowlisted anyway.
- CONSIDERED AND REJECTED: teaching the checker to ignore comments would have fixed all seven at a stroke, but it silently un-guards facts sitting in comments beside code, weakens the one genuine output-string case, and changes detector semantics organism-wide. #114 cleared this same class explicitly WITHOUT touching the detector.
- CONTROL TRAP (the thing to repeat): an over-broad allowlist reads green too, so "check passes" proves nothing on its own. Verification therefore ran NEGATIVE PROBES — a new token appended to the now-listed env_config.py → "new instance fact(s) in allowlisted file", exit 1; a real repo name put back into the unlisted Brain fixture → "new instance fact(s) in unlisted file", exit 1; both reverted → green, exit 0.
- verify: `repos_sync.py --check` all ten legs OK (was 7 mismatches), exit 0. Heart's own producer `manifest_drift.run()` with PYAUTO_ROOT=/home/user → problem_count 0. `pytest PyAutoBrain/tests/` → 222 passed, 0 failed (the pre-existing test_skill_install sizing-wrapper failure noted in the 2026-08-04 record is GONE — the sizing SKILL.md now exists).
- env trap (cloud session): the base python3 (3.11) had neither pytest nor pyyaml; `/root/.local/bin/pytest` is a uv tool whose interpreter lacks yaml, so PyAutoBrain collection errors on test_activity_gate/test_policy_seams/test_sizing_paths. `pip install pyyaml pytest` into the base interpreter, then `python3 -m pytest`. PYAUTO_SKIP_API_GATE=1 is the sanctioned bypass for the `autoarray.egg` fixture string.
- prompt: active/autohands_firewall_allowlist.md
- worktree: (none — cloud session, worked in the canonical /home/user checkouts on the mandated branch)
- repos-claimed-on-one-line: PyAutoMind, PyAutoBrain — named on this single line deliberately and NOT as 2-space bullets, because worktree_check_conflict reads any such bullet as a live claim.

## covariance-interpolator-rng-seed
- issue: https://github.com/PyAutoLabs/PyAutoFit/issues/1450
- status: library-dev — fix COMMITTED AND PUSHED to `claude/covariance-interpolator-rng-seed-8zexp3` (PyAutoFit 68a8b391). NO PR opened (not requested). Cloud session, no worktree and no `gh` CLI; issue filed via the GitHub MCP surface.
Expand Down
15 changes: 0 additions & 15 deletions active/autohands_firewall_allowlist.md

This file was deleted.

34 changes: 34 additions & 0 deletions complete/2026/08/autohands-firewall-allowlist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
- issue: https://github.com/PyAutoLabs/PyAutoMind/issues/134 (auto-closed by the merge)
- completed: 2026-08-05
- pr: https://github.com/PyAutoLabs/PyAutoMind/pull/135 (MERGED 00b6b53) + https://github.com/PyAutoLabs/PyAutoBrain/pull/202 (MERGED f8383c5)
- notes: The tenant firewall reported SEVEN mismatches, not the six the prompt named — `PyAutoBrain/tests/test_health_conductor.py` landed with the health-conductor STALE fix (PyAutoBrain#198/#201) AFTER the prompt was written, and green was unreachable without it. Resolution SPLIT by the rule the three prior firewall tasks settled (derivable or arbitrary → refactor; genuine branded fact → declare the surface): the six PyAutoHands files were ALLOWLISTED, the seventh was REFACTORED. All twelve PyAutoHands tokens are prose provenance in comments/docstrings — citations of PyAutoLabs/PyAutoFit#1452 (the 2026-07-30 unbatched multi-start OOM that took down two nightly release-integrate runs) and PyAutoFit#1439, plus the autogalaxy_workspace interferometer script the OOM came from. NO code path is keyed on a repo name in any of the six, so there was nothing to parameterise: an issue number cannot be derived from anything, and deleting the citations would destroy provenance for an incident that cost two nights to diagnose. This is the "register the intentional surface" case of PyAutoMind#114 ("without changing organ source or detector semantics"), NOT the "the code could derive it" case of PyAutoBrain#193. **NO PyAutoHands file changed** — the facts were already intentional; only the declaration was missing, so the whole diff is PyAutoMind (allowlist) + PyAutoBrain (fixture).
- the-seventh-refactored-not-allowlisted: in `test_health_conductor.py` the names were the repo half of stubbed `"<repo>: <problem>"` Heart reason strings, and NO assertion reads that half — the conductor classifies by verdict and reason text, not by reporter; the only reason-touching assertions are self-referential (`sorted(reasons) == sorted(STALE_ONLY["stale_reasons"])`) or counts. Pure filler → `library-a`/`library-b` plus a comment fixing the convention so a future author does not helpfully put real names back. Same judgment as the `checkout_a/b/c` fixture rename in PyAutoBrain#193; FIREWALL_ALLOWLIST did not grow for it.
- human decision 2026-08-05 (keep the citation): `check_search_memory.py:136` is the ONE token that is not a comment — it sits in the printed failure message a workspace developer sees, so an adopting fork's users would see a link to a repo they have nothing to do with. Kept deliberately: the issue pointer is the most useful part of that message, and the file is allowlisted regardless.
- CONSIDERED AND REJECTED (do not re-propose without new evidence): teaching the checker to ignore comments/docstrings would have cleared all seven at a stroke and would prevent this recurring on every future incident citation. Rejected on three grounds — it silently un-guards facts sitting in a comment beside code, it weakens the one genuine output-string case above, and it changes detector semantics organism-wide from a bug prompt scoped to PyAutoHands. PyAutoMind#114 cleared this same class explicitly WITHOUT touching the detector; that precedent is the tiebreak.
- CONTROL TRAP (the thing to repeat): an over-broad allowlist reads GREEN exactly like a correct one, so "the check passes" proves nothing on its own. Two independent controls were therefore run. (1) NEGATIVE PROBES: a new token appended to the now-listed `env_config.py` → "new instance fact(s) in allowlisted file — 'autolens_workspace'", exit 1; a real repo name returned to the unlisted Brain fixture → "new instance fact(s) in unlisted file — 'PyAutoLens'", exit 1; both reverted → green, exit 0. So the detector still fires in BOTH the listed and unlisted cases. (2) EXACTNESS AUDIT: each of the six entries was diffed against the tokens ACTUALLY present in that file — all six EXACT, zero over-grants, so no entry silently pre-authorises a fact that is not there yet. Repeat both on any future allowlist growth.
- verify: `repos_sync.py --check` on MERGED main → all ELEVEN legs OK (was: tenant firewall 7 mismatches), exit 0. Heart's own producer `heart/checks/manifest_drift.run()` with PYAUTO_ROOT=/home/user → problem_count 0. `pytest PyAutoBrain/tests/` → 222 passed. `pytest tests/` (PyAutoMind) → 79 passed. `lifecycle.py check` → OK. CI: PyAutoMind#135 `drift` green; PyAutoBrain#202 `pytest (3.12)` + `pytest (3.13)` both green.
- main-moved-mid-task: `c0576aa feat(repos_sync): check the hygiene conductor's repo coverage (#132)` merged to PyAutoMind main WHILE this task was in flight, adding an ELEVENTH leg (hence ten legs in the pre-merge runs and eleven post-merge). GitHub merged #135 cleanly on top of it — the allowlist entries shifted from ~line 562 to ~652 with no conflict — and the new leg passes. If a future run reports a different leg count, check whether main moved rather than assuming drift.
- CI SCOPE CORRECTION (matters for how this class is graded): PyAutoMind's `drift` PR check is `lifecycle_drift.yml`, which runs ONLY `lifecycle.py check` + index freshness — it does NOT run `repos_sync.py`. So a green PR check on PyAutoMind is NOT evidence the firewall is fixed; the firewall leg is consumed by Heart's `manifest_drift` on the readiness path, and the only evidence is running `repos_sync.py --check` (or `manifest_drift.run()`) against the canonical checkout.
- STALE RECORD CORRECTED: the 2026-08-04 tenant-firewall-hygiene-extras record says PyAutoBrain PRs carry "0 check runs" and its ~193 tests run in NO CI anywhere (filed as `draft/maintenance/pyautobrain/no_pr_test_ci.md`). That gap is CLOSED — PyAutoBrain#202 was gated by real `pytest (3.12)` and `pytest (3.13)` legs. The same record's pre-existing failure `test_skill_install.py::test_every_public_agent_has_a_skill_wrapper` is also gone; the `sizing` faculty now has its SKILL.md. Suite is 222 passed, up from 192.
- LOCAL-CHECKOUT ANOMALY (cloud session, NOT caused by this task and NOT pushed): `/home/user/PyAutoMind` carries a local `main` branch at 7fda74f ("prompt: file issue for hst-dq-bits-dial (#65)") whose history is UNRELATED to origin/main — `git merge-base main origin/main` is EMPTY, and `git branch -vv` reports "ahead 50, behind 63" against a remote it shares no ancestor with. Its reflog claims it was "Created from refs/remotes/origin/main". Checking it out silently swaps the working tree to that lineage (which is how it surfaced). This task's work was never on it — the branch was cut from the real origin/main at 87af58b and the diff was reviewed against that base — and the anomaly was worked around by detaching to origin/main, NOT by resetting the branch, since those 50 commits were not inspected and may be someone's work. LEFT IN PLACE DELIBERATELY: a stale local main is a checkout-hygiene item for a human or a Gut sweep, not something to discard from a cloud session. Do not `reset --hard` it without looking at what those 50 commits are.
- env trap (cloud session): the base python3 (3.11) shipped with neither pytest nor pyyaml, and `/root/.local/bin/pytest` is a uv tool whose interpreter lacks yaml — PyAutoBrain then errors at COLLECTION on test_activity_gate/test_policy_seams/test_sizing_paths, which reads like breakage but is a missing dep. `pip install pyyaml pytest` into the base interpreter, then `python3 -m pytest`. `PYAUTO_SKIP_API_GATE=1` remains the sanctioned bypass for the `autoarray.egg` fixture string.
- review-faculty note: a cloud session has no worktree, so `pyauto-brain review --task <name>` exits "could not resolve any repo checkout". Use `--repo <checkout path>` per repo instead. Verdict CLEAN on both; PyAutoMind carried an expected `no-test-changes` risk flag (the allowlist is a data table and PyAutoMind's suite has no firewall coverage — the negative probes are the behavioural proof, as in the PyAutoMind#115 precedent).
- Brain sizing: the Bug Agent classified severity=medium / scope=multi-repo / confidence=low and recommended "investigate-first — reproduce before patching", which was the right call: the reproduction is what surfaced the seventh finding the prompt did not know about.

## Original prompt

# The organ-code tenant firewall gate is failing on PyAutoHands

Type: bug
Target: PyAutoHands
Repos:
- PyAutoHands
- pyautohands
Difficulty: medium
Autonomy: supervised
Priority: normal
Status: formalised

The organ-code tenant firewall gate is failing on PyAutoHands. The body-map drift checker (scripts/repos_sync.py --check) exits 1 on its 'tenant firewall (organ code)' leg, so the gate is red. Six files under PyAutoHands carry hardcoded instance facts while absent from the firewall allowlist — two in the autohands package (check_search_memory.py, env_config.py) and four in its test suite — and the checker prints the offending line numbers for each. Every other leg of the drift check passes, so this single leg is what keeps the gate red. For each file decide whether the hardcoded instance name is legitimate, in which case extend the allowlist, or whether it should be parameterised out of the organ code so the firewall stays meaningful. Restore the gate to green.

<!-- formalised by the Intake (Conception) Agent on 2026-08-05 from user-intake -->
3 changes: 2 additions & 1 deletion complete/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Token-light navigation over the finished-work records (schema:
only then grep a dated bucket. Curators: edit the band between the CURATED
markers; everything below GENERATED is rebuilt.

893 records across 7 buckets.
894 records across 7 buckets.

<!-- CURATED:START -->
## Highlights
Expand All @@ -19,6 +19,7 @@ _(curate hard-won records here — survives regeneration.)_
## 2026/08

- [autogalaxy-assistant](2026/08/autogalaxy-assistant.md) — epic; human to close
- [autohands-firewall-allowlist](2026/08/autohands-firewall-allowlist.md) — auto-closed by the merge
- [database-guide-sample-weight-threshold](2026/08/database-guide-sample-weight-threshold.md) — `guides/results/database/start_here.py` ran its own Nautilus fits capped at n_like_max=300 then indexed sample…
- [dep-floors-source-chain-ci](2026/08/dep-floors-source-chain-ci.md)
- [ep-initializer-exception-should-not-abort](2026/08/ep-initializer-exception-should-not-abort.md)
Expand Down
Loading