A label filter is checked on every row (housekeeping listed all 59 open issues as parked) #137

Closed
opened 2026-10-18 16:21:08 +00:00 by teahubxyz · 2 comments
Owner

Housekeeping's first live run (Actions run 930) pruned 24 merged branches correctly, then listed 60 stale items, 59 of them as "parked cards": the Astra log, planned parents, cards queued an hour earlier. Cause: the repo has no parked label, and Gitea ignores a labels= filter for a label that does not exist and returns every issue. The fake forge in test_housekeeping.py filtered correctly, so the tests passed.

The same exposure exists in Time's own issues(): every label it filters on (spec, ready, queued, andon) exists today, but if spec were ever deleted, every open issue would come back as a spec and get split into cards.

  • time.py: has_label(), and issues() keeps only rows that carry every label the query names (a row without a labels field, as in older fakes, passes through).
  • housekeeping.py: labelled() does the same for all six of the sweep's label queries, including signal (which could otherwise close a lookalike issue) and signup.
  • test_housekeeping.py: the fake now ignores unknown label filters the way Gitea does; test_unknown_label reproduces the production run; the stale count asserts exactly 3 (haiku's note on #115). test_time.py 54b covers issues().

PR: #138

DONE: PR open; test_time.py (54b) and test_housekeeping.py (6 tests) pass; CI green.

Housekeeping's first live run (Actions run 930) pruned 24 merged branches correctly, then listed **60 stale items**, 59 of them as "parked cards": the Astra log, `planned` parents, cards queued an hour earlier. Cause: the repo has no `parked` label, and Gitea ignores a `labels=` filter for a label that does not exist and returns every issue. The fake forge in `test_housekeeping.py` filtered correctly, so the tests passed. The same exposure exists in Time's own `issues()`: every label it filters on (`spec`, `ready`, `queued`, `andon`) exists today, but if `spec` were ever deleted, every open issue would come back as a spec and get split into cards. - `time.py`: `has_label()`, and `issues()` keeps only rows that carry every label the query names (a row without a `labels` field, as in older fakes, passes through). - `housekeeping.py`: `labelled()` does the same for all six of the sweep's label queries, including `signal` (which could otherwise close a lookalike issue) and `signup`. - `test_housekeeping.py`: the fake now ignores unknown label filters the way Gitea does; `test_unknown_label` reproduces the production run; the stale count asserts exactly 3 (haiku's note on #115). `test_time.py` 54b covers `issues()`. PR: #138 DONE: PR open; `test_time.py` (54b) and `test_housekeeping.py` (6 tests) pass; CI green.
teahubxyz added the ready label 2026-10-18 16:21:08 +00:00

⏱️ Time: adopted PR #138, built outside the worker. haiku reviewed it on the PR.

⏱️ Time: adopted PR #138, built outside the worker. `haiku` reviewed it on the PR. <!-- time {"beat":"pr","pr":138,"adopted":true,"launched":false,"seat":"haiku","as":"seat","review":"venice","seats":["haiku"]} -->
time closed this issue 2026-10-18 16:22:21 +00:00

⏱️ Time: approved and green, merged PR #138. Card done.

⏱️ Time: approved and green, merged PR #138. Card done. <!-- time {"beat":"merged","pr":138} -->
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: teahubxyz/time#137